|
@@ -1668,39 +1668,15 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
|
|
using_voxelgi = true;
|
|
using_voxelgi = true;
|
|
}
|
|
}
|
|
|
|
|
|
- if (p_render_data->environment.is_null() && using_voxelgi) {
|
|
|
|
- depth_pass_mode = PASS_MODE_DEPTH_NORMAL_ROUGHNESS_VOXEL_GI;
|
|
|
|
- } else if (p_render_data->environment.is_valid() && (environment_get_ssr_enabled(p_render_data->environment) || environment_get_sdfgi_enabled(p_render_data->environment) || using_voxelgi)) {
|
|
|
|
|
|
+ if (p_render_data->environment.is_valid()) {
|
|
if (environment_get_sdfgi_enabled(p_render_data->environment)) {
|
|
if (environment_get_sdfgi_enabled(p_render_data->environment)) {
|
|
- depth_pass_mode = using_voxelgi ? PASS_MODE_DEPTH_NORMAL_ROUGHNESS_VOXEL_GI : PASS_MODE_DEPTH_NORMAL_ROUGHNESS; // also voxelgi
|
|
|
|
using_sdfgi = true;
|
|
using_sdfgi = true;
|
|
- } else {
|
|
|
|
- depth_pass_mode = using_voxelgi ? PASS_MODE_DEPTH_NORMAL_ROUGHNESS_VOXEL_GI : PASS_MODE_DEPTH_NORMAL_ROUGHNESS;
|
|
|
|
}
|
|
}
|
|
if (environment_get_ssr_enabled(p_render_data->environment)) {
|
|
if (environment_get_ssr_enabled(p_render_data->environment)) {
|
|
using_separate_specular = true;
|
|
using_separate_specular = true;
|
|
using_ssr = true;
|
|
using_ssr = true;
|
|
color_pass_flags |= COLOR_PASS_FLAG_SEPARATE_SPECULAR;
|
|
color_pass_flags |= COLOR_PASS_FLAG_SEPARATE_SPECULAR;
|
|
}
|
|
}
|
|
- } else if (p_render_data->environment.is_valid() && (environment_get_ssao_enabled(p_render_data->environment) || using_ssil || get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_NORMAL_BUFFER)) {
|
|
|
|
- depth_pass_mode = PASS_MODE_DEPTH_NORMAL_ROUGHNESS;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- switch (depth_pass_mode) {
|
|
|
|
- case PASS_MODE_DEPTH: {
|
|
|
|
- depth_framebuffer = rb_data->get_depth_fb();
|
|
|
|
- } break;
|
|
|
|
- case PASS_MODE_DEPTH_NORMAL_ROUGHNESS: {
|
|
|
|
- depth_framebuffer = rb_data->get_depth_fb(RenderBufferDataForwardClustered::DEPTH_FB_ROUGHNESS);
|
|
|
|
- depth_pass_clear.push_back(Color(0.5, 0.5, 0.5, 0));
|
|
|
|
- } break;
|
|
|
|
- case PASS_MODE_DEPTH_NORMAL_ROUGHNESS_VOXEL_GI: {
|
|
|
|
- depth_framebuffer = rb_data->get_depth_fb(RenderBufferDataForwardClustered::DEPTH_FB_ROUGHNESS_VOXELGI);
|
|
|
|
- depth_pass_clear.push_back(Color(0.5, 0.5, 0.5, 0));
|
|
|
|
- depth_pass_clear.push_back(Color(0, 0, 0, 0));
|
|
|
|
- } break;
|
|
|
|
- default: {
|
|
|
|
- };
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (p_render_data->scene_data->view_count > 1) {
|
|
if (p_render_data->scene_data->view_count > 1) {
|
|
@@ -1731,6 +1707,38 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
|
|
|
|
|
|
RD::get_singleton()->draw_command_end_label();
|
|
RD::get_singleton()->draw_command_end_label();
|
|
|
|
|
|
|
|
+ if (rb.is_valid()) {
|
|
|
|
+ if (using_voxelgi) {
|
|
|
|
+ depth_pass_mode = PASS_MODE_DEPTH_NORMAL_ROUGHNESS_VOXEL_GI;
|
|
|
|
+ } else if (p_render_data->environment.is_valid()) {
|
|
|
|
+ if (environment_get_ssr_enabled(p_render_data->environment) ||
|
|
|
|
+ environment_get_sdfgi_enabled(p_render_data->environment) ||
|
|
|
|
+ environment_get_ssao_enabled(p_render_data->environment) ||
|
|
|
|
+ using_ssil ||
|
|
|
|
+ get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_NORMAL_BUFFER ||
|
|
|
|
+ scene_state.used_normal_texture) {
|
|
|
|
+ depth_pass_mode = PASS_MODE_DEPTH_NORMAL_ROUGHNESS;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ switch (depth_pass_mode) {
|
|
|
|
+ case PASS_MODE_DEPTH: {
|
|
|
|
+ depth_framebuffer = rb_data->get_depth_fb();
|
|
|
|
+ } break;
|
|
|
|
+ case PASS_MODE_DEPTH_NORMAL_ROUGHNESS: {
|
|
|
|
+ depth_framebuffer = rb_data->get_depth_fb(RenderBufferDataForwardClustered::DEPTH_FB_ROUGHNESS);
|
|
|
|
+ depth_pass_clear.push_back(Color(0.5, 0.5, 0.5, 0));
|
|
|
|
+ } break;
|
|
|
|
+ case PASS_MODE_DEPTH_NORMAL_ROUGHNESS_VOXEL_GI: {
|
|
|
|
+ depth_framebuffer = rb_data->get_depth_fb(RenderBufferDataForwardClustered::DEPTH_FB_ROUGHNESS_VOXELGI);
|
|
|
|
+ depth_pass_clear.push_back(Color(0.5, 0.5, 0.5, 0));
|
|
|
|
+ depth_pass_clear.push_back(Color(0, 0, 0, 0));
|
|
|
|
+ } break;
|
|
|
|
+ default: {
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
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() && scene_state.used_sss && ss_effects->sss_get_quality() != RS::SUB_SURFACE_SCATTERING_QUALITY_DISABLED;
|
|
|
|
|
|
if (using_sss && !using_separate_specular) {
|
|
if (using_sss && !using_separate_specular) {
|
|
@@ -1914,7 +1922,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
|
|
RID rp_uniform_set = _setup_render_pass_uniform_set(RENDER_LIST_OPAQUE, p_render_data, radiance_texture, true);
|
|
RID rp_uniform_set = _setup_render_pass_uniform_set(RENDER_LIST_OPAQUE, p_render_data, radiance_texture, true);
|
|
|
|
|
|
bool can_continue_color = !scene_state.used_screen_texture && !using_ssr && !using_sss;
|
|
bool can_continue_color = !scene_state.used_screen_texture && !using_ssr && !using_sss;
|
|
- bool can_continue_depth = !scene_state.used_depth_texture && !using_ssr && !using_sss;
|
|
|
|
|
|
+ bool can_continue_depth = !(scene_state.used_depth_texture || scene_state.used_normal_texture) && !using_ssr && !using_sss;
|
|
|
|
|
|
{
|
|
{
|
|
bool will_continue_color = (can_continue_color || draw_sky || draw_sky_fog_only || debug_voxelgis || debug_sdfgi_probes);
|
|
bool will_continue_color = (can_continue_color || draw_sky || draw_sky_fog_only || debug_voxelgis || debug_sdfgi_probes);
|