Browse Source

Fix SSR orientation issues when using orthogonal camera

- Use negative clip space values to fix reversed rotations in reflections
- Use constant -z view vector when raymarching to fix perspective in reflections
Mert Kasar 1 year ago
parent
commit
56ed2cb6d1

+ 1 - 1
servers/rendering/renderer_rd/shaders/effects/screen_space_reflection.glsl

@@ -90,7 +90,7 @@ void main() {
 	if (sc_multiview) {
 	if (sc_multiview) {
 		view_dir = normalize(vertex + scene_data.eye_offset[params.view_index].xyz);
 		view_dir = normalize(vertex + scene_data.eye_offset[params.view_index].xyz);
 	} else {
 	} else {
-		view_dir = normalize(vertex);
+		view_dir = params.orthogonal ? vec3(0.0, 0.0, -1.0) : normalize(vertex);
 	}
 	}
 	vec3 ray_dir = normalize(reflect(view_dir, normal));
 	vec3 ray_dir = normalize(reflect(view_dir, normal));
 
 

+ 1 - 1
servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_inc.glsl

@@ -20,7 +20,7 @@ vec3 reconstructCSPosition(vec2 screen_pos, float z) {
 		return pos.xyz;
 		return pos.xyz;
 	} else {
 	} else {
 		if (params.orthogonal) {
 		if (params.orthogonal) {
-			return vec3((screen_pos.xy * params.proj_info.xy + params.proj_info.zw), z);
+			return vec3(-(screen_pos.xy * params.proj_info.xy + params.proj_info.zw), z);
 		} else {
 		} else {
 			return vec3((screen_pos.xy * params.proj_info.xy + params.proj_info.zw) * z, z);
 			return vec3((screen_pos.xy * params.proj_info.xy + params.proj_info.zw) * z, z);
 		}
 		}