/** * Texture coordinates for materials on a VirtualMesh. * * A VirtualMesh pulls its vertices from storage buffers, so its placeholder geometry has no `uv` attribute and * three's default texture lookups (`uv()`) would read nothing. The vertex stage writes the pulled UV into the * `vgUv` varying, and `bindVirtualGeometryTextures` points the material's textures at it. */ import * as THREE from 'three/webgpu'; type Node = any; /** Interpolated texture coordinates of the current fragment (vec2), for custom material nodes. */ export declare const vgUv: THREE.PropertyNode<"vec2">; /** Texture lookup at `vgUv`, with the texture's offset/repeat/rotation applied like three's own maps. */ export declare function vgTexture(map: THREE.Texture): Node; /** * Normal map without precomputed tangents: the tangent frame comes from screen-space derivatives of the view * position and `vgUv` (same construction as three's derivative tangents, http://www.thetenthplanet.de/archives/1180). */ export declare function vgNormalMap(map: THREE.Texture, scale: Node, type?: THREE.NormalMapTypes): Node; /** * Makes a material's textures sample `vgUv`. Called by VirtualMesh on the material it takes over. * * - `map` and `alphaMap` move into `colorNode` (and are cleared on the material): the shadow pass reads * `colorNode.a` for alpha-tested shadows, but would sample the material's `map` with the missing `uv()`. * - Normal, bump and clearcoat normal maps become explicit normal nodes, because three builds normals in a * context that ignores custom UVs. * - Every other texture lookup without explicit coordinates (roughness, metalness, emissive, AO, light, * clearcoat, sheen, transmission maps, textures in your own nodes, ...) gets `vgUv` through * `material.contextNode`. A `getUV` in your own `contextNode` takes precedence. * * Nodes the material already has are kept: only properties three would otherwise read implicitly are rewired. */ export declare function bindVirtualGeometryTextures(material: THREE.NodeMaterial): void; export {};