Only disable depth writing in opaque pipelines

This restores the behaviour of the visibility fade
This commit is contained in:
clayjohn 2023-01-09 09:45:43 -08:00
parent 163f6f5fe8
commit e5abca4990

View file

@ -309,14 +309,6 @@ void SceneShaderForwardClustered::ShaderData::set_code(const String &p_code) {
} }
RD::PipelineDepthStencilState depth_stencil = depth_stencil_state; RD::PipelineDepthStencilState depth_stencil = depth_stencil_state;
if (depth_pre_pass_enabled && casts_shadows() && !uses_depth_prepass_alpha) {
// We already have a depth from the depth pre-pass, there is no need to write it again.
// In addition we can use COMPARE_OP_EQUAL instead of COMPARE_OP_LESS_OR_EQUAL.
// This way we can use the early depth test to discard transparent fragments before the fragment shader even starts.
// This cannot be used with depth_prepass_alpha as it uses a different threshold during the depth-prepass and regular drawing.
depth_stencil.depth_compare_operator = RD::COMPARE_OP_EQUAL;
depth_stencil.enable_depth_write = false;
}
RD::PipelineColorBlendState blend_state; RD::PipelineColorBlendState blend_state;
RD::PipelineMultisampleState multisample_state; RD::PipelineMultisampleState multisample_state;
@ -338,6 +330,14 @@ void SceneShaderForwardClustered::ShaderData::set_code(const String &p_code) {
} else { } else {
blend_state = blend_state_color_opaque; blend_state = blend_state_color_opaque;
if (depth_pre_pass_enabled) {
// We already have a depth from the depth pre-pass, there is no need to write it again.
// In addition we can use COMPARE_OP_EQUAL instead of COMPARE_OP_LESS_OR_EQUAL.
// This way we can use the early depth test to discard transparent fragments before the fragment shader even starts.
depth_stencil.depth_compare_operator = RD::COMPARE_OP_EQUAL;
depth_stencil.enable_depth_write = false;
}
if (l & PIPELINE_COLOR_PASS_FLAG_SEPARATE_SPECULAR) { if (l & PIPELINE_COLOR_PASS_FLAG_SEPARATE_SPECULAR) {
shader_flags |= SHADER_COLOR_PASS_FLAG_SEPARATE_SPECULAR; shader_flags |= SHADER_COLOR_PASS_FLAG_SEPARATE_SPECULAR;
} }