summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMert Kasar <mertkasar93@gmail.com>2024-07-10 21:28:42 +0300
committerMert Kasar <mertkasar93@gmail.com>2024-07-12 21:56:31 +0300
commit56ed2cb6d1dadb39a3b353fef0b297eef28bf37c (patch)
tree8b0333d92e71e4fa77028402e247ccfe4d2a94c4
parent26d1577f3985363faab48a65e9a0d9eed0e26d86 (diff)
downloadredot-engine-56ed2cb6d1dadb39a3b353fef0b297eef28bf37c.tar.gz
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
-rw-r--r--servers/rendering/renderer_rd/shaders/effects/screen_space_reflection.glsl2
-rw-r--r--servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_inc.glsl2
2 files changed, 2 insertions, 2 deletions
diff --git a/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection.glsl b/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection.glsl
index 8618f083b3..d629f2738d 100644
--- a/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection.glsl
+++ b/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection.glsl
@@ -90,7 +90,7 @@ void main() {
if (sc_multiview) {
view_dir = normalize(vertex + scene_data.eye_offset[params.view_index].xyz);
} 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));
diff --git a/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_inc.glsl b/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_inc.glsl
index 26405ab040..9b692824a1 100644
--- a/servers/rendering/renderer_rd/shaders/effects/screen_space_reflection_inc.glsl
+++ b/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;
} else {
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 {
return vec3((screen_pos.xy * params.proj_info.xy + params.proj_info.zw) * z, z);
}