Fix T99019 EEVEE: Regression: Specular BSDF does not apply occlusion

Since the occlusion input is going to be removed in EEVEE-Next, I just
added a temporary workaround. The occlusion is passed as SSS radius
as the Specular BSDF does not use it.

The final result matches 3.1 release
This commit is contained in:
Clément Foucault 2022-06-20 16:31:22 +02:00 committed by Philipp Oeser
parent 72b8f607e7
commit 9e94525681
Notes: blender-bot 2023-02-14 11:21:40 +01:00
Referenced by issue #99019, EEVEE: Regression: Specular BSDF does not apply occlusion
Referenced by issue #98661, 3.2: Potential candidates for corrective releases
2 changed files with 11 additions and 0 deletions

View File

@ -181,6 +181,8 @@ Closure closure_eval(ClosureDiffuse diffuse, ClosureReflection reflection)
/* Glue with the old system. */
CLOSURE_VARS_DECLARE_2(Diffuse, Glossy);
/* WORKAROUND: This is to avoid regression in 3.2 and avoid messing with EEVEE-Next. */
in_common.occlusion = (diffuse.sss_radius.g == -1.0) ? diffuse.sss_radius.r : 1.0;
in_Diffuse_0.N = diffuse.N;
in_Diffuse_0.albedo = diffuse.color;
in_Glossy_1.N = reflection.N;
@ -207,6 +209,8 @@ Closure closure_eval(ClosureDiffuse diffuse,
/* Glue with the old system. */
CLOSURE_VARS_DECLARE_3(Diffuse, Glossy, Glossy);
/* WORKAROUND: This is to avoid regression in 3.2 and avoid messing with EEVEE-Next. */
in_common.occlusion = (diffuse.sss_radius.g == -1.0) ? diffuse.sss_radius.r : 1.0;
in_Diffuse_0.N = diffuse.N;
in_Diffuse_0.albedo = diffuse.color;
in_Glossy_1.N = reflection.N;

View File

@ -34,6 +34,13 @@ void node_eevee_specular(vec4 diffuse,
diffuse_data.N = N;
diffuse_data.sss_id = 0u;
/* WORKAROUND: Nasty workaround to the current interface with the closure evaluation.
* Ideally the occlusion input should be move to the output node or removed all-together.
* This is temporary to avoid a regression in 3.2 and should be removed after EEVEE-Next rewrite.
*/
diffuse_data.sss_radius.r = occlusion;
diffuse_data.sss_radius.g = -1.0; /* Flag */
ClosureReflection reflection_data;
reflection_data.weight = alpha;
if (true) {