varying vec2 vUv; varying float vDisplacement; uniform sampler2D tDepth; uniform float uDepthScale; void main() { vUv = uv; // Read depth from texture float depth = texture2D(tDepth, uv).r; vDisplacement = depth; // Displace z position based on depth vec3 newPosition = position; newPosition.z += depth * uDepthScale; gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0); }