Fix T77069 EEVEE: Mix shader with holdout & transparent BSDF fails
This follows Cycles closer.
This commit is contained in:
parent
3562be2bda
commit
981d7381cd
Notes:
blender-bot
2023-02-14 05:22:18 +01:00
Referenced by issue #88185, Alpha textures do not work with holdout collection in Eevee Referenced by issue #77069, eevee: mix holdout with transparent fails
|
@ -877,6 +877,14 @@ Closure closure_mix(Closure cl1, Closure cl2, float fac)
|
|||
{
|
||||
Closure cl;
|
||||
cl.holdout = mix(cl1.holdout, cl2.holdout, fac);
|
||||
|
||||
if (FLAG_TEST(cl1.flag, CLOSURE_HOLDOUT_FLAG)) {
|
||||
fac = 1.0;
|
||||
}
|
||||
else if (FLAG_TEST(cl2.flag, CLOSURE_HOLDOUT_FLAG)) {
|
||||
fac = 0.0;
|
||||
}
|
||||
|
||||
cl.transmittance = mix(cl1.transmittance, cl2.transmittance, fac);
|
||||
cl.radiance = mix(cl1.radiance, cl2.radiance, fac);
|
||||
cl.flag = cl1.flag | cl2.flag;
|
||||
|
@ -958,7 +966,7 @@ void main()
|
|||
{
|
||||
Closure cl = nodetree_exec();
|
||||
|
||||
float holdout = 1.0 - saturate(cl.holdout);
|
||||
float holdout = saturate(1.0 - cl.holdout);
|
||||
float transmit = saturate(avg(cl.transmittance));
|
||||
float alpha = 1.0 - transmit;
|
||||
|
||||
|
@ -972,8 +980,9 @@ void main()
|
|||
* Since we do that using the blending pipeline we need to account for material transmittance. */
|
||||
vol_scatter -= vol_scatter * cl.transmittance;
|
||||
|
||||
outRadiance = vec4(cl.radiance * vol_transmit + vol_scatter, alpha * holdout);
|
||||
outTransmittance = vec4(cl.transmittance, transmit * holdout);
|
||||
cl.radiance = cl.radiance * holdout * vol_transmit + vol_scatter;
|
||||
outRadiance = vec4(cl.radiance, alpha * holdout);
|
||||
outTransmittance = vec4(cl.transmittance, transmit) * holdout;
|
||||
# else
|
||||
outRadiance = vec4(cl.radiance, holdout);
|
||||
ssrNormals = cl.ssr_normal;
|
||||
|
|
Loading…
Reference in New Issue