Fix T70640 EEVEE: Alpha hashed material is darker when alpha is not 1.0

Predivide all radiance components as the alpha effect comes from the hashed
transparency (pixel rejection).
This commit is contained in:
Clément Foucault 2019-10-09 14:56:21 +02:00
parent 7790298f61
commit 4aabea8b87
Notes: blender-bot 2023-02-14 04:31:04 +01:00
Referenced by issue #70640, Alpha hashed EEVEE & Viewport Shading BUG
1 changed files with 12 additions and 2 deletions

View File

@ -918,14 +918,15 @@ void main()
Closure cl = nodetree_exec();
float holdout = 1.0 - saturate(cl.holdout);
float transmit = saturate(avg(cl.transmittance));
float alpha = 1.0 - transmit;
# ifdef USE_ALPHA_BLEND
vec2 uvs = gl_FragCoord.xy * volCoordScale.zw;
vec3 vol_transmit, vol_scatter;
volumetric_resolve(uvs, gl_FragCoord.z, vol_transmit, vol_scatter);
float transmit = saturate(avg(cl.transmittance));
outRadiance = vec4(cl.radiance * vol_transmit + vol_scatter, (1.0 - transmit) * holdout);
outRadiance = vec4(cl.radiance * vol_transmit + vol_scatter, alpha * holdout);
outTransmittance = vec4(cl.transmittance, transmit * holdout);
# else
outRadiance = vec4(cl.radiance, holdout);
@ -953,6 +954,15 @@ void main()
outRadiance.rgb += cl.sss_irradiance.rgb * cl.sss_albedo.rgb * fac;
# endif
# ifndef USE_ALPHA_BLEND
float alpha_div = 1.0 / max(1e-8, alpha);
outRadiance *= alpha_div;
ssrData.rgb *= alpha_div;
# ifdef USE_SSS
sssAlbedo.rgb *= alpha_div;
# endif
# endif
}
# endif /* MESH_SHADER && !SHADOW_SHADER */