Browse Source

Merge pull request #58819 from vreon/fix-eyedir-z

Fix flipped EYEDIR.z in sky shaders
Rémi Verschelde 3 years ago
parent
commit
7ed8d52fb2

+ 1 - 1
servers/rendering/renderer_rd/renderer_scene_sky_rd.cpp

@@ -1170,7 +1170,7 @@ void RendererSceneSkyRD::setup(RendererSceneEnvironmentRD *p_env, RID p_render_b
 
 
 					sky_light_data.direction[0] = world_direction.x;
 					sky_light_data.direction[0] = world_direction.x;
 					sky_light_data.direction[1] = world_direction.y;
 					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;
 					float sign = storage->light_is_negative(base) ? -1 : 1;
 					sky_light_data.energy = sign * storage->light_get_param(base, RS::LIGHT_PARAM_ENERGY);
 					sky_light_data.energy = sign * storage->light_get_param(base, RS::LIGHT_PARAM_ENERGY);

+ 3 - 6
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.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.y = -(cube_normal.z * (-uv_interp.y - params.projections[ViewIndex].z)) / params.projections[ViewIndex].w;
 	cube_normal = mat3(params.orientation) * cube_normal;
 	cube_normal = mat3(params.orientation) * cube_normal;
-	cube_normal.z = -cube_normal.z;
 	cube_normal = normalize(cube_normal);
 	cube_normal = normalize(cube_normal);
 
 
 	vec2 uv = uv_interp * 0.5 + 0.5;
 	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) {
 	if (panorama_coords.x < 0.0) {
 		panorama_coords.x += M_PI * 2.0;
 		panorama_coords.x += M_PI * 2.0;
@@ -200,13 +199,11 @@ void main() {
 	vec4 custom_fog = vec4(0.0);
 	vec4 custom_fog = vec4(0.0);
 
 
 #ifdef USE_CUBEMAP_PASS
 #ifdef USE_CUBEMAP_PASS
-	vec3 inverted_cube_normal = cube_normal;
-	inverted_cube_normal.z *= -1.0;
 #ifdef USES_HALF_RES_COLOR
 #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]), cube_normal) * params.luminance_multiplier;
 #endif
 #endif
 #ifdef USES_QUARTER_RES_COLOR
 #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]), cube_normal) * params.luminance_multiplier;
 #endif
 #endif
 #else
 #else
 #ifdef USES_HALF_RES_COLOR
 #ifdef USES_HALF_RES_COLOR