From 80345f7d4e5a5b1706d63df1eab48ee95b85e787 Mon Sep 17 00:00:00 2001 From: Jesse Dubay Date: Sat, 5 Mar 2022 17:49:32 -0800 Subject: [PATCH 1/3] Fix flipped EYEDIR.z in sky shaders --- servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp | 2 +- servers/rendering/renderer_rd/shaders/sky.glsl | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp index b44ae6cf8db..369e8192c14 100644 --- a/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp @@ -837,7 +837,7 @@ void RendererSceneSkyRD::init(RendererStorageRD *p_storage) { actions.renames["COLOR"] = "color"; actions.renames["ALPHA"] = "alpha"; - actions.renames["EYEDIR"] = "cube_normal"; + actions.renames["EYEDIR"] = "eyedir"; actions.renames["POSITION"] = "params.position_multiplier.xyz"; actions.renames["SKY_COORDS"] = "panorama_coords"; actions.renames["SCREEN_UV"] = "uv"; diff --git a/servers/rendering/renderer_rd/shaders/sky.glsl b/servers/rendering/renderer_rd/shaders/sky.glsl index b258e89c66a..d63444456ae 100644 --- a/servers/rendering/renderer_rd/shaders/sky.glsl +++ b/servers/rendering/renderer_rd/shaders/sky.glsl @@ -199,14 +199,15 @@ void main() { vec4 quarter_res_color = vec4(1.0); vec4 custom_fog = vec4(0.0); + vec3 eyedir = cube_normal; + eyedir.z *= -1.0; + #ifdef USE_CUBEMAP_PASS - vec3 inverted_cube_normal = cube_normal; - inverted_cube_normal.z *= -1.0; #ifdef USES_HALF_RES_COLOR - half_res_color = texture(samplerCube(half_res, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), inverted_cube_normal) * params.luminance_multiplier; + half_res_color = texture(samplerCube(half_res, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), eyedir) * params.luminance_multiplier; #endif #ifdef USES_QUARTER_RES_COLOR - quarter_res_color = texture(samplerCube(quarter_res, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), inverted_cube_normal) * params.luminance_multiplier; + quarter_res_color = texture(samplerCube(quarter_res, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), eyedir) * params.luminance_multiplier; #endif #else #ifdef USES_HALF_RES_COLOR From ff2a5c04b16a2aab6a688f4637d1e746f7a69794 Mon Sep 17 00:00:00 2001 From: Jesse Dubay Date: Sun, 6 Mar 2022 23:54:21 -0800 Subject: [PATCH 2/3] Sky renderer: Don't invert Z component of light direction --- servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp index 369e8192c14..653eea6b1a8 100644 --- a/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp @@ -1169,7 +1169,7 @@ void RendererSceneSkyRD::setup(RendererSceneEnvironmentRD *p_env, RID p_render_b sky_light_data.direction[0] = world_direction.x; sky_light_data.direction[1] = world_direction.y; - sky_light_data.direction[2] = -world_direction.z; + sky_light_data.direction[2] = world_direction.z; float sign = storage->light_is_negative(base) ? -1 : 1; sky_light_data.energy = sign * storage->light_get_param(base, RS::LIGHT_PARAM_ENERGY); From d437355f55beee1734c5cc50476e529376f3b085 Mon Sep 17 00:00:00 2001 From: Jesse Dubay Date: Tue, 8 Mar 2022 19:51:43 -0800 Subject: [PATCH 3/3] Sky renderer: Only flip Z when calculating panorama_coords --- .../rendering/renderer_rd/renderer_scene_sky_rd.cpp | 2 +- servers/rendering/renderer_rd/shaders/sky.glsl | 10 +++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp index 653eea6b1a8..76786ca6fbf 100644 --- a/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp @@ -837,7 +837,7 @@ void RendererSceneSkyRD::init(RendererStorageRD *p_storage) { actions.renames["COLOR"] = "color"; actions.renames["ALPHA"] = "alpha"; - actions.renames["EYEDIR"] = "eyedir"; + actions.renames["EYEDIR"] = "cube_normal"; actions.renames["POSITION"] = "params.position_multiplier.xyz"; actions.renames["SKY_COORDS"] = "panorama_coords"; actions.renames["SCREEN_UV"] = "uv"; diff --git a/servers/rendering/renderer_rd/shaders/sky.glsl b/servers/rendering/renderer_rd/shaders/sky.glsl index d63444456ae..5b4594da99b 100644 --- a/servers/rendering/renderer_rd/shaders/sky.glsl +++ b/servers/rendering/renderer_rd/shaders/sky.glsl @@ -180,12 +180,11 @@ void main() { cube_normal.x = (cube_normal.z * (-uv_interp.x - params.projections[ViewIndex].x)) / params.projections[ViewIndex].y; cube_normal.y = -(cube_normal.z * (-uv_interp.y - params.projections[ViewIndex].z)) / params.projections[ViewIndex].w; cube_normal = mat3(params.orientation) * cube_normal; - cube_normal.z = -cube_normal.z; cube_normal = normalize(cube_normal); vec2 uv = uv_interp * 0.5 + 0.5; - vec2 panorama_coords = vec2(atan(cube_normal.x, cube_normal.z), acos(cube_normal.y)); + vec2 panorama_coords = vec2(atan(cube_normal.x, -cube_normal.z), acos(cube_normal.y)); if (panorama_coords.x < 0.0) { panorama_coords.x += M_PI * 2.0; @@ -199,15 +198,12 @@ void main() { vec4 quarter_res_color = vec4(1.0); vec4 custom_fog = vec4(0.0); - vec3 eyedir = cube_normal; - eyedir.z *= -1.0; - #ifdef USE_CUBEMAP_PASS #ifdef USES_HALF_RES_COLOR - half_res_color = texture(samplerCube(half_res, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), eyedir) * params.luminance_multiplier; + half_res_color = texture(samplerCube(half_res, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), cube_normal) * params.luminance_multiplier; #endif #ifdef USES_QUARTER_RES_COLOR - quarter_res_color = texture(samplerCube(quarter_res, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), eyedir) * params.luminance_multiplier; + quarter_res_color = texture(samplerCube(quarter_res, material_samplers[SAMPLER_LINEAR_WITH_MIPMAPS_CLAMP]), cube_normal) * params.luminance_multiplier; #endif #else #ifdef USES_HALF_RES_COLOR