浏览代码

Merge pull request #106241 from lander-vr/fix-reflection-probe-box-projection-stretching

Fix reflection probe box projection stretching
Thaddeus Crews 3 月之前
父节点
当前提交
b28d5a31dc

+ 2 - 1
servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl

@@ -1916,7 +1916,8 @@ void fragment_shader(in SceneData scene_data) {
 		vec3 bent_normal = normal;
 		vec3 bent_normal = normal;
 #endif
 #endif
 		vec3 ref_vec = normalize(reflect(-view, bent_normal));
 		vec3 ref_vec = normalize(reflect(-view, bent_normal));
-		ref_vec = mix(ref_vec, bent_normal, roughness * roughness);
+		// Interpolate between mirror and rough reflection by using linear_roughness * linear_roughness.
+		ref_vec = mix(ref_vec, bent_normal, roughness * roughness * roughness * roughness);
 
 
 		for (uint i = item_from; i < item_to; i++) {
 		for (uint i = item_from; i < item_to; i++) {
 			uint mask = cluster_buffer.data[cluster_reflection_offset + i];
 			uint mask = cluster_buffer.data[cluster_reflection_offset + i];

+ 2 - 1
servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl

@@ -1401,7 +1401,8 @@ void main() {
 		vec3 bent_normal = normal;
 		vec3 bent_normal = normal;
 #endif
 #endif
 		vec3 ref_vec = normalize(reflect(-view, bent_normal));
 		vec3 ref_vec = normalize(reflect(-view, bent_normal));
-		ref_vec = mix(ref_vec, bent_normal, roughness * roughness);
+		// Interpolate between mirror and rough reflection by using linear_roughness * linear_roughness.
+		ref_vec = mix(ref_vec, bent_normal, roughness * roughness * roughness * roughness);
 
 
 		uvec2 reflection_indices = instances.data[draw_call.instance_index].reflection_probes;
 		uvec2 reflection_indices = instances.data[draw_call.instance_index].reflection_probes;
 		for (uint i = 0; i < sc_reflection_probes(); i++) {
 		for (uint i = 0; i < sc_reflection_probes(); i++) {