Fix #154201, #130854: EEVEE: small fixes to subsurface shader

Fixes (a) incorrect interpretation of material thickness in the diffuse
bsdf and (b) call of `light_eval_transmission` for closures that do not
themselves have transmission.

Pull Request: https://projects.blender.org/blender/blender/pulls/154819
This commit is contained in:
Mark van de Ruit 2026-02-25 13:14:59 +01:00
parent 9a73228a16
commit b14846d00c
2 changed files with 18 additions and 12 deletions

View file

@ -143,7 +143,7 @@ ClosureLight bxdf_translucent_light(ClosureUndetermined cl, float3 V, float thic
light.ltc_mat = float4(
1.0f, 0.0f, 0.0f, 1.0f); /* No transform, just plain cosine distribution. */
light.N = -cl.N;
light.type = (thickness > 0.0f) ? LIGHT_TRANSLUCENT_WITH_THICKNESS : LIGHT_DIFFUSE;
light.type = (thickness != 0.0f) ? LIGHT_TRANSLUCENT_WITH_THICKNESS : LIGHT_DIFFUSE;
return light;
}

View file

@ -59,18 +59,24 @@ void forward_lighting_eval(float thickness, float3 &radiance, float3 &transmitta
}
# endif
stack.cl[0] = closure_light_new(cl_transmit, V, thickness);
if ((cl_transmit.type == CLOSURE_BSDF_TRANSLUCENT_ID ||
cl_transmit.type == CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID ||
cl_transmit.type == CLOSURE_BSSRDF_BURLEY_ID) &&
(thickness != 0.0f))
{
stack.cl[0] = closure_light_new(cl_transmit, V, thickness);
/* NOTE: Only evaluates `stack.cl[0]`. */
light_eval_transmission(stack,
g_data.P,
g_data.Ng,
V,
vPz,
thickness,
receiver_light_set,
normal_offset,
geometry_offset);
/* NOTE: Only evaluates `stack.cl[0]`. */
light_eval_transmission(stack,
g_data.P,
g_data.Ng,
V,
vPz,
thickness,
receiver_light_set,
normal_offset,
geometry_offset);
}
# if defined(MAT_SUBSURFACE)
if (cl_transmit.type == CLOSURE_BSSRDF_BURLEY_ID) {