Browse Source

Ensure environment radiance is not used on refprobe interiors, fixes #17868

Juan Linietsky 6 years ago
parent
commit
e77afb8507

+ 7 - 0
drivers/gles2/rasterizer_scene_gles2.cpp

@@ -2497,6 +2497,7 @@ void RasterizerSceneGLES2::render_scene(const Transform &p_cam_transform, const
 	Environment *env = NULL;
 
 	int viewport_width, viewport_height;
+	bool probe_interior = false;
 
 	if (p_reflection_probe.is_valid()) {
 		ReflectionProbeInstance *probe = reflection_probe_instance_owner.getornull(p_reflection_probe);
@@ -2514,6 +2515,8 @@ void RasterizerSceneGLES2::render_scene(const Transform &p_cam_transform, const
 		viewport_width = probe->probe_ptr->resolution;
 		viewport_height = probe->probe_ptr->resolution;
 
+		probe_interior = probe->probe_ptr->interior;
+
 	} else {
 		state.render_no_shadows = false;
 		current_fb = storage->frame.current_rt->fbo;
@@ -2624,6 +2627,10 @@ void RasterizerSceneGLES2::render_scene(const Transform &p_cam_transform, const
 		}
 	}
 
+	if (probe_interior) {
+		env_radiance_tex = 0; //do not use radiance texture on interiors
+	}
+
 	// render opaque things first
 	render_list.sort_by_key(false);
 	_render_render_list(render_list.elements, render_list.element_count, p_cam_transform, p_cam_projection, p_shadow_atlas, env, env_radiance_tex, 0.0, 0.0, false, false, false);

+ 4 - 0
drivers/gles3/rasterizer_scene_gles3.cpp

@@ -4341,6 +4341,10 @@ void RasterizerSceneGLES3::render_scene(const Transform &p_cam_transform, const
 		}
 	}
 
+	if (probe && probe->probe_ptr->interior) {
+		env_radiance_tex = 0; //for rendering probe interiors, radiance must not be used.
+	}
+
 	state.texscreen_copied = false;
 
 	glBlendEquation(GL_FUNC_ADD);