@@ -51,11 +51,12 @@ layout(set = 0, binding = 6) uniform sampler2D samplerMap;
5151layout (set = 0 , binding = 7 ) uniform sampler2D brdfMap;
5252layout (set = 0 , binding = 8 ) uniform sampler3D voxelMap;
5353// G-BUFFER
54- layout (set = 1 , binding = 0 ) uniform sampler2D positionBuffer ;
54+ layout (set = 1 , binding = 0 ) uniform sampler2D depthBuffer ;
5555layout (set = 1 , binding = 1 ) uniform sampler2D normalBuffer;
5656layout (set = 1 , binding = 2 ) uniform sampler2D colorBuffer;
5757layout (set = 1 , binding = 3 ) uniform sampler2D materialBuffer;
5858layout (set = 1 , binding = 4 ) uniform sampler2D emissionBuffer;
59+
5960layout (set = 1 , binding = 5 ) uniform sampler2D preCompositionBuffer;
6061// TEMPORAL
6162layout (set = 1 , binding = 6 ) uniform sampler2D prevBuffer;
@@ -104,9 +105,15 @@ void main() {
104105 // ////////////////////////////////////
105106 // SETUP SURFACE
106107 // ////////////////////////////////////
107- vec4 positionData = texture(positionBuffer, v_uv);
108- g_pos = positionData.rgb;
109- g_depth = positionData.w;
108+ g_depth = texture(depthBuffer, v_uv).r;
109+
110+ // Build position from depth buffer
111+ vec2 ndc = v_uv * 2.0 - 1.0 ;
112+ vec4 clip = vec4 (ndc, g_depth, 1.0 );
113+ vec4 viewPos = camera.invProj * clip;
114+ viewPos /= viewPos.w;
115+ g_pos = viewPos.xyz;
116+
110117 g_normal = normalize (texture(normalBuffer, v_uv).rgb);
111118 vec4 colorData = texture(colorBuffer, v_uv);
112119 g_albedo = colorData.rgb;
@@ -209,7 +216,7 @@ void main() {
209216 if (settings.ssr.enabled == 1 && g_isReflective == 1 ) {
210217 vec3 modelPos = vec3 (camera.invView * vec4 (g_pos, 1.0 ));
211218 vec3 fresnel = fresnelSchlick(max (dot (g_normal, normalize (g_pos)), 0.0 ), brdf.F0);
212- reflectedColor = performSSR(settings.ssr, g_pos, g_normal, modelPos, positionBuffer , prevBuffer, brdf.metalness, brdf.roughness, fresnel);
219+ reflectedColor = performSSR(settings.ssr, g_pos, g_normal, modelPos, depthBuffer , prevBuffer, brdf.metalness, brdf.roughness, fresnel);
213220 }
214221
215222 }
@@ -273,7 +280,7 @@ void main() {
273280
274281 // Fog ________________________________
275282 if (scene.enableFog) {
276- float f = computeFog(g_depth);
283+ float f = computeFog(1.0 - g_depth);
277284 color = f * color + (1 - f) * scene.fogColor.rgb;
278285 }
279286
0 commit comments