Browse Source

Fix SSS with reverse-z

Florent Guiocheau 9 months ago
parent
commit
3376b9166b

+ 2 - 2
servers/rendering/renderer_rd/shaders/effects/subsurface_scattering.glsl

@@ -152,10 +152,10 @@ void main() {
 		float depth_scale;
 		float depth_scale;
 
 
 		if (params.orthogonal) {
 		if (params.orthogonal) {
-			depth = ((depth + (params.camera_z_far + params.camera_z_near) / (params.camera_z_far - params.camera_z_near)) * (params.camera_z_far - params.camera_z_near)) / 2.0;
+			depth = -(depth * (params.camera_z_far - params.camera_z_near) - (params.camera_z_far + params.camera_z_near)) / 2.0;
 			depth_scale = params.unit_size; //remember depth is negative by default in OpenGL
 			depth_scale = params.unit_size; //remember depth is negative by default in OpenGL
 		} else {
 		} else {
-			depth = 2.0 * params.camera_z_near * params.camera_z_far / (params.camera_z_far + params.camera_z_near - depth * (params.camera_z_far - params.camera_z_near));
+			depth = 2.0 * params.camera_z_near * params.camera_z_far / (params.camera_z_far + params.camera_z_near + depth * (params.camera_z_far - params.camera_z_near));
 			depth_scale = params.unit_size / depth; //remember depth is negative by default in OpenGL
 			depth_scale = params.unit_size / depth; //remember depth is negative by default in OpenGL
 		}
 		}