diff options
4 files changed, 64 insertions, 63 deletions
| diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp index 1bba95f511..2e844269e3 100644 --- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp +++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp @@ -667,7 +667,7 @@ void RenderForwardClustered::_setup_environment(const RenderDataRD *p_render_dat  	if (get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_UNSHADED) {  		scene_state.ubo.ss_effects_flags = 0; -	} else if (is_environment(p_render_data->environment)) { +	} else if (p_render_data->reflection_probe.is_null() && is_environment(p_render_data->environment)) {  		scene_state.ubo.ssao_ao_affect = environment_get_ssao_ao_channel_affect(p_render_data->environment);  		scene_state.ubo.ssao_light_affect = environment_get_ssao_direct_light_affect(p_render_data->environment);  		uint32_t ss_flags = 0; @@ -1550,16 +1550,18 @@ void RenderForwardClustered::_process_sss(Ref<RenderSceneBuffersRD> p_render_buf  void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Color &p_default_bg_color) {  	RendererRD::LightStorage *light_storage = RendererRD::LightStorage::get_singleton(); -	Ref<RenderSceneBuffersRD> rb; +	ERR_FAIL_NULL(p_render_data); + +	Ref<RenderSceneBuffersRD> rb = p_render_data->render_buffers; +	ERR_FAIL_COND(rb.is_null());  	Ref<RenderBufferDataForwardClustered> rb_data; -	if (p_render_data && p_render_data->render_buffers.is_valid()) { -		rb = p_render_data->render_buffers; -		if (rb->has_custom_data(RB_SCOPE_FORWARD_CLUSTERED)) { -			// Our forward clustered custom data buffer will only be available when we're rendering our normal view. -			// This will not be available when rendering reflection probes. -			rb_data = rb->get_custom_data(RB_SCOPE_FORWARD_CLUSTERED); -		} +	if (rb->has_custom_data(RB_SCOPE_FORWARD_CLUSTERED)) { +		// Our forward clustered custom data buffer will only be available when we're rendering our normal view. +		// This will not be available when rendering reflection probes. +		rb_data = rb->get_custom_data(RB_SCOPE_FORWARD_CLUSTERED);  	} +	bool is_reflection_probe = p_render_data->reflection_probe.is_valid(); +  	static const int texture_multisamples[RS::VIEWPORT_MSAA_MAX] = { 1, 2, 4, 8 };  	//first of all, make a new render pass @@ -1588,18 +1590,16 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  		p_render_data->voxel_gi_count = 0; -		if (rb.is_valid()) { -			if (rb->has_custom_data(RB_SCOPE_SDFGI)) { -				Ref<RendererRD::GI::SDFGI> sdfgi = rb->get_custom_data(RB_SCOPE_SDFGI); -				if (sdfgi.is_valid()) { -					sdfgi->update_cascades(); -					sdfgi->pre_process_gi(p_render_data->scene_data->cam_transform, p_render_data); -					sdfgi->update_light(); -				} +		if (rb->has_custom_data(RB_SCOPE_SDFGI)) { +			Ref<RendererRD::GI::SDFGI> sdfgi = rb->get_custom_data(RB_SCOPE_SDFGI); +			if (sdfgi.is_valid()) { +				sdfgi->update_cascades(); +				sdfgi->pre_process_gi(p_render_data->scene_data->cam_transform, p_render_data); +				sdfgi->update_light();  			} - -			gi.setup_voxel_gi_instances(p_render_data, p_render_data->render_buffers, p_render_data->scene_data->cam_transform, *p_render_data->voxel_gi_instances, p_render_data->voxel_gi_count);  		} + +		gi.setup_voxel_gi_instances(p_render_data, p_render_data->render_buffers, p_render_data->scene_data->cam_transform, *p_render_data->voxel_gi_instances, p_render_data->voxel_gi_count);  	} else {  		ERR_PRINT("No render buffer nor reflection atlas, bug"); //should never happen, will crash  		current_cluster_builder = nullptr; @@ -1618,7 +1618,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  	// check if we need motion vectors  	if (get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_MOTION_VECTORS) {  		p_render_data->scene_data->calculate_motion_vectors = true; -	} else if (rb.is_valid() && rb->get_use_taa()) { +	} else if (!is_reflection_probe && rb->get_use_taa()) {  		p_render_data->scene_data->calculate_motion_vectors = true;  	} else {  		p_render_data->scene_data->calculate_motion_vectors = false; @@ -1641,9 +1641,9 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  	bool using_sdfgi = false;  	bool using_voxelgi = false;  	bool reverse_cull = p_render_data->scene_data->cam_transform.basis.determinant() < 0; -	bool using_ssil = p_render_data->environment.is_valid() && environment_get_ssil_enabled(p_render_data->environment); +	bool using_ssil = !is_reflection_probe && p_render_data->environment.is_valid() && environment_get_ssil_enabled(p_render_data->environment); -	if (p_render_data->reflection_probe.is_valid()) { +	if (is_reflection_probe) {  		uint32_t resolution = light_storage->reflection_probe_instance_get_resolution(p_render_data->reflection_probe);  		screen_size.x = resolution;  		screen_size.y = resolution; @@ -1657,7 +1657,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  		}  		reverse_cull = true; // for some reason our views are inverted -	} else if (rb.is_valid()) { +	} else {  		screen_size = rb->get_internal_size();  		if (rb->get_use_taa() || get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_MOTION_VECTORS) { @@ -1685,8 +1685,6 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  		color_framebuffer = rb_data->get_color_pass_fb(color_pass_flags);  		color_only_framebuffer = rb_data->get_color_only_fb(); -	} else { -		ERR_FAIL(); //bug?  	}  	p_render_data->scene_data->emissive_exposure_normalization = -1.0; @@ -1695,7 +1693,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  	_setup_lightmaps(p_render_data, *p_render_data->lightmaps, p_render_data->scene_data->cam_transform);  	_setup_voxelgis(*p_render_data->voxel_gi_instances); -	_setup_environment(p_render_data, p_render_data->reflection_probe.is_valid(), screen_size, !p_render_data->reflection_probe.is_valid(), p_default_bg_color, false); +	_setup_environment(p_render_data, is_reflection_probe, screen_size, !is_reflection_probe, p_default_bg_color, false);  	_update_render_base_uniform_set(); //may have changed due to the above (light buffer enlarged, as an example) @@ -1707,7 +1705,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  	RD::get_singleton()->draw_command_end_label(); -	if (rb.is_valid() && !p_render_data->reflection_probe.is_valid()) { +	if (!is_reflection_probe) {  		if (using_voxelgi) {  			depth_pass_mode = PASS_MODE_DEPTH_NORMAL_ROUGHNESS_VOXEL_GI;  		} else if (p_render_data->environment.is_valid()) { @@ -1739,7 +1737,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  		}  	} -	bool using_sss = rb_data.is_valid() && scene_state.used_sss && ss_effects->sss_get_quality() != RS::SUB_SURFACE_SCATTERING_QUALITY_DISABLED; +	bool using_sss = rb_data.is_valid() && !is_reflection_probe && scene_state.used_sss && ss_effects->sss_get_quality() != RS::SUB_SURFACE_SCATTERING_QUALITY_DISABLED;  	if (using_sss && !using_separate_specular) {  		using_separate_specular = true; @@ -1772,7 +1770,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  				clear_color.r *= bg_energy_multiplier;  				clear_color.g *= bg_energy_multiplier;  				clear_color.b *= bg_energy_multiplier; -				if ((rb.is_valid() && rb->has_custom_data(RB_SCOPE_FOG)) || environment_get_fog_enabled(p_render_data->environment)) { +				if ((rb->has_custom_data(RB_SCOPE_FOG)) || environment_get_fog_enabled(p_render_data->environment)) {  					draw_sky_fog_only = true;  					RendererRD::MaterialStorage::get_singleton()->material_set_param(sky.sky_scene_state.fog_material, "clear_color", Variant(clear_color.srgb_to_linear()));  				} @@ -1782,7 +1780,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  				clear_color.r *= bg_energy_multiplier;  				clear_color.g *= bg_energy_multiplier;  				clear_color.b *= bg_energy_multiplier; -				if ((rb.is_valid() && rb->has_custom_data(RB_SCOPE_FOG)) || environment_get_fog_enabled(p_render_data->environment)) { +				if ((rb->has_custom_data(RB_SCOPE_FOG)) || environment_get_fog_enabled(p_render_data->environment)) {  					draw_sky_fog_only = true;  					RendererRD::MaterialStorage::get_singleton()->material_set_param(sky.sky_scene_state.fog_material, "clear_color", Variant(clear_color.srgb_to_linear()));  				} @@ -1791,7 +1789,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  				draw_sky = true;  			} break;  			case RS::ENV_BG_CANVAS: { -				if (rb.is_valid()) { +				if (!is_reflection_probe) {  					RID texture = RendererRD::TextureStorage::get_singleton()->render_target_get_rd_texture(rb->get_render_target());  					copy_effects->copy_to_fb_rect(texture, color_only_framebuffer, Rect2i(), false, false, false, false, RID(), false, false, true);  				} @@ -1812,7 +1810,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  			RD::get_singleton()->draw_command_begin_label("Setup Sky");  			// Setup our sky render information for this frame/viewport -			if (p_render_data->reflection_probe.is_valid()) { +			if (is_reflection_probe) {  				Vector3 eye_offset;  				Projection correction;  				correction.set_depth_correction(true); @@ -1849,7 +1847,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  	bool debug_sdfgi_probes = get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_SDFGI_PROBES;  	bool depth_pre_pass = bool(GLOBAL_GET("rendering/driver/depth_prepass/enable")) && depth_framebuffer.is_valid(); -	bool using_ssao = depth_pre_pass && rb.is_valid() && p_render_data->environment.is_valid() && environment_get_ssao_enabled(p_render_data->environment); +	bool using_ssao = depth_pre_pass && !is_reflection_probe && p_render_data->environment.is_valid() && environment_get_ssao_enabled(p_render_data->environment);  	bool continue_depth = false;  	if (depth_pre_pass) { //depth pre pass @@ -1881,7 +1879,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  			_pre_resolve_render(p_render_data, using_sdfgi || using_voxelgi);  		} -		if (rb.is_valid() && rb->get_msaa_3d() != RS::VIEWPORT_MSAA_DISABLED) { +		if (rb->get_msaa_3d() != RS::VIEWPORT_MSAA_DISABLED) {  			RENDER_TIMESTAMP("Resolve Depth Pre-Pass (MSAA)");  			RD::get_singleton()->draw_command_begin_label("Resolve Depth Pre-Pass (MSAA)");  			if (depth_pass_mode == PASS_MODE_DEPTH_NORMAL_ROUGHNESS || depth_pass_mode == PASS_MODE_DEPTH_NORMAL_ROUGHNESS_VOXEL_GI) { @@ -1915,7 +1913,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  	p_render_data->scene_data->directional_light_count = p_render_data->directional_light_count;  	p_render_data->scene_data->opaque_prepass_threshold = 0.0f; -	_setup_environment(p_render_data, p_render_data->reflection_probe.is_valid(), screen_size, !p_render_data->reflection_probe.is_valid(), p_default_bg_color, rb.is_valid()); +	_setup_environment(p_render_data, is_reflection_probe, screen_size, !is_reflection_probe, p_default_bg_color, true);  	RENDER_TIMESTAMP("Render Opaque Pass"); @@ -1996,7 +1994,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  		RD::get_singleton()->draw_command_end_label();  	} -	if (rb.is_valid() && !can_continue_color && rb->get_msaa_3d() != RS::VIEWPORT_MSAA_DISABLED) { +	if (!can_continue_color && rb->get_msaa_3d() != RS::VIEWPORT_MSAA_DISABLED) {  		// Handle views individual, might want to look at rewriting our resolve to do both layers in one pass.  		for (uint32_t v = 0; v < rb->get_view_count(); v++) {  			RD::get_singleton()->texture_resolve_multisample(rb_data->get_color_msaa(v), rb->get_internal_texture(v)); @@ -2008,7 +2006,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  		}  	} -	if (rb.is_valid() && !can_continue_depth && rb->get_msaa_3d() != RS::VIEWPORT_MSAA_DISABLED) { +	if (!can_continue_depth && rb->get_msaa_3d() != RS::VIEWPORT_MSAA_DISABLED) {  		for (uint32_t v = 0; v < rb->get_view_count(); v++) {  			resolve_effects->resolve_depth(rb_data->get_depth_msaa(v), rb->get_depth_texture(v), rb->get_internal_size(), texture_multisamples[rb->get_msaa_3d()]);  		} @@ -2054,7 +2052,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co  	rp_uniform_set = _setup_render_pass_uniform_set(RENDER_LIST_ALPHA, p_render_data, radiance_texture, true); -	_setup_environment(p_render_data, p_render_data->reflection_probe.is_valid(), screen_size, !p_render_data->reflection_probe.is_valid(), p_default_bg_color, false); +	_setup_environment(p_render_data, is_reflection_probe, screen_size, !is_reflection_probe, p_default_bg_color, false);  	{  		uint32_t transparent_color_pass_flags = (color_pass_flags | COLOR_PASS_FLAG_TRANSPARENT) & ~(COLOR_PASS_FLAG_SEPARATE_SPECULAR); diff --git a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp index 4065d253bb..7d9ca070b0 100644 --- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp +++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp @@ -640,16 +640,18 @@ void RenderForwardMobile::_pre_opaque_render(RenderDataRD *p_render_data) {  void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color &p_default_bg_color) {  	RendererRD::LightStorage *light_storage = RendererRD::LightStorage::get_singleton(); -	Ref<RenderSceneBuffersRD> rb; +	ERR_FAIL_NULL(p_render_data); + +	Ref<RenderSceneBuffersRD> rb = p_render_data->render_buffers; +	ERR_FAIL_COND(rb.is_null()); +  	Ref<RenderBufferDataForwardMobile> rb_data; -	if (p_render_data->render_buffers.is_valid()) { -		rb = p_render_data->render_buffers; -		if (rb->has_custom_data(RB_SCOPE_MOBILE)) { -			// Our forward mobile custom data buffer will only be available when we're rendering our normal view. -			// This will not be available when rendering reflection probes. -			rb_data = rb->get_custom_data(RB_SCOPE_MOBILE); -		} +	if (rb->has_custom_data(RB_SCOPE_MOBILE)) { +		// Our forward mobile custom data buffer will only be available when we're rendering our normal view. +		// This will not be available when rendering reflection probes. +		rb_data = rb->get_custom_data(RB_SCOPE_MOBILE);  	} +	bool is_reflection_probe = p_render_data->reflection_probe.is_valid();  	RENDER_TIMESTAMP("Prepare 3D Scene"); @@ -697,7 +699,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color  		p_render_data->render_info->info[RS::VIEWPORT_RENDER_INFO_TYPE_VISIBLE][RS::VIEWPORT_RENDER_INFO_OBJECTS_IN_FRAME] = p_render_data->instances->size();  	} -	if (p_render_data->reflection_probe.is_valid()) { +	if (is_reflection_probe) {  		uint32_t resolution = light_storage->reflection_probe_instance_get_resolution(p_render_data->reflection_probe);  		screen_size.x = resolution;  		screen_size.y = resolution; @@ -754,7 +756,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color  	RD::get_singleton()->draw_command_begin_label("Render Setup");  	_setup_lightmaps(p_render_data, *p_render_data->lightmaps, p_render_data->scene_data->cam_transform); -	_setup_environment(p_render_data, p_render_data->reflection_probe.is_valid(), screen_size, !p_render_data->reflection_probe.is_valid(), p_default_bg_color, false); +	_setup_environment(p_render_data, is_reflection_probe, screen_size, !is_reflection_probe, p_default_bg_color, false);  	_update_render_base_uniform_set(); //may have changed due to the above (light buffer enlarged, as an example) @@ -832,7 +834,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color  			RD::get_singleton()->draw_command_begin_label("Setup Sky");  			// Setup our sky render information for this frame/viewport -			if (p_render_data->reflection_probe.is_valid()) { +			if (is_reflection_probe) {  				Vector3 eye_offset;  				Projection correction;  				correction.set_depth_correction(true); @@ -896,7 +898,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color  		p_render_data->scene_data->directional_light_count = p_render_data->directional_light_count; -		_setup_environment(p_render_data, p_render_data->reflection_probe.is_valid(), screen_size, !p_render_data->reflection_probe.is_valid(), p_default_bg_color, p_render_data->render_buffers.is_valid()); +		_setup_environment(p_render_data, is_reflection_probe, screen_size, !is_reflection_probe, p_default_bg_color, p_render_data->render_buffers.is_valid());  		if (using_subpass_transparent && using_subpass_post_process) {  			RENDER_TIMESTAMP("Render Opaque + Transparent + Tonemap"); @@ -1025,7 +1027,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color  			}  			// this may be needed if we re-introduced steps that change info, not sure which do so in the previous implementation -			// _setup_environment(p_render_data, p_render_data->reflection_probe.is_valid(), screen_size, !p_render_data->reflection_probe.is_valid(), p_default_bg_color, false); +			// _setup_environment(p_render_data, is_reflection_probe, screen_size, !is_reflection_probe, p_default_bg_color, false);  			RD::FramebufferFormatID fb_format = RD::get_singleton()->framebuffer_get_format(framebuffer);  			RenderListParameters render_list_params(render_list[RENDER_LIST_ALPHA].elements.ptr(), render_list[RENDER_LIST_ALPHA].element_info.ptr(), render_list[RENDER_LIST_ALPHA].elements.size(), reverse_cull, PASS_MODE_COLOR, rp_uniform_set, spec_constant_base_flags, get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_WIREFRAME, Vector2(), p_render_data->scene_data->lod_distance_multiplier, p_render_data->scene_data->screen_mesh_lod_threshold, p_render_data->scene_data->view_count); @@ -1065,9 +1067,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color  		_disable_clear_request(p_render_data);  	} -	if (rb.is_valid()) { -		_render_buffers_debug_draw(rb, p_render_data->shadow_atlas, p_render_data->occluder_debug_tex); -	} +	_render_buffers_debug_draw(rb, p_render_data->shadow_atlas, p_render_data->occluder_debug_tex);  }  /* these are being called from RendererSceneRenderRD::_pre_opaque_render */ @@ -1924,7 +1924,6 @@ void RenderForwardMobile::_fill_render_list(RenderListType p_render_list, const  }  void RenderForwardMobile::_setup_environment(const RenderDataRD *p_render_data, bool p_no_fog, const Size2i &p_screen_size, bool p_flip_y, const Color &p_default_bg_color, bool p_opaque_render_buffers, bool p_pancake_shadows, int p_index) { -	Ref<RenderSceneBuffersRD> rd = p_render_data->render_buffers;  	RID env = is_environment(p_render_data->environment) ? p_render_data->environment : RID();  	RID reflection_probe_instance = p_render_data->reflection_probe.is_valid() ? RendererRD::LightStorage::get_singleton()->reflection_probe_instance_get_probe(p_render_data->reflection_probe) : RID(); diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp index 33f6ac0276..885ea18151 100644 --- a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp @@ -331,9 +331,13 @@ void RendererSceneRenderRD::_render_buffers_copy_depth_texture(const RenderDataR  void RendererSceneRenderRD::_render_buffers_post_process_and_tonemap(const RenderDataRD *p_render_data) {  	RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton(); +	ERR_FAIL_NULL(p_render_data); +  	Ref<RenderSceneBuffersRD> rb = p_render_data->render_buffers;  	ERR_FAIL_COND(rb.is_null()); +	ERR_FAIL_COND_MSG(p_render_data->reflection_probe.is_valid(), "Post processes should not be applied on reflection probes."); +  	// Glow, auto exposure and DoF (if enabled).  	Size2i internal_size = rb->get_internal_size(); @@ -928,11 +932,9 @@ void RendererSceneRenderRD::render_scene(const Ref<RenderSceneBuffers> &p_render  	RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton();  	// getting this here now so we can direct call a bunch of things more easily -	Ref<RenderSceneBuffersRD> rb; -	if (p_render_buffers.is_valid()) { -		rb = p_render_buffers; // cast it... -		ERR_FAIL_COND(rb.is_null()); -	} +	ERR_FAIL_COND(p_render_buffers.is_null()); +	Ref<RenderSceneBuffersRD> rb = p_render_buffers; +	ERR_FAIL_COND(rb.is_null());  	// setup scene data  	RenderSceneDataRD scene_data; diff --git a/servers/rendering/renderer_scene_cull.cpp b/servers/rendering/renderer_scene_cull.cpp index 9011cdd98a..6f4bb115fc 100644 --- a/servers/rendering/renderer_scene_cull.cpp +++ b/servers/rendering/renderer_scene_cull.cpp @@ -2964,11 +2964,13 @@ void RendererSceneCull::_render_scene(const RendererSceneRender::CameraData *p_c  	Scenario *scenario = scenario_owner.get_or_null(p_scenario); +	ERR_FAIL_COND(p_render_buffers.is_null()); +  	render_pass++;  	scene_render->set_scene_pass(render_pass); -	if (p_render_buffers.is_valid() && p_reflection_probe.is_null()) { +	if (p_reflection_probe.is_null()) {  		//no rendering code here, this is only to set up what needs to be done, request regions, etc.  		scene_render->sdfgi_update(p_render_buffers, p_environment, p_camera_data->main_transform.origin); //update conditions for SDFGI (whether its used or not)  	} @@ -3050,7 +3052,7 @@ void RendererSceneCull::_render_scene(const RendererSceneRender::CameraData *p_c  	{ //sdfgi  		cull.sdfgi.region_count = 0; -		if (p_render_buffers.is_valid() && p_reflection_probe.is_null()) { +		if (p_reflection_probe.is_null()) {  			cull.sdfgi.cascade_light_count = 0;  			uint32_t prev_cascade = 0xFFFFFFFF; @@ -3279,7 +3281,7 @@ void RendererSceneCull::_render_scene(const RendererSceneRender::CameraData *p_c  			}  		} -		if (p_render_buffers.is_valid() && p_reflection_probe.is_null()) { +		if (p_reflection_probe.is_null()) {  			sdfgi_update_data.directional_lights = &directional_lights;  			sdfgi_update_data.positional_light_instances = scenario->dynamic_lights.ptr();  			sdfgi_update_data.positional_light_count = scenario->dynamic_lights.size(); |