SL-17274: PBR: Fix EMS being zero when using GGX approximation

master
Ptolemy 2022-06-29 17:50:03 -07:00
parent 251b75ea2e
commit d1e078a122
1 changed files with 6 additions and 0 deletions

View File

@ -23,6 +23,7 @@
* $/LicenseInfo$
*/
#define PBR_GGX_APPROX 1
#define DEBUG_PBR_PACKORM0 0 // Rough=0, Metal=0
#define DEBUG_PBR_PACKORM1 0 // Rough=1, Metal=1
#define DEBUG_PBR_TANGENT1 1 // Tangent = 1,0,0
@ -141,7 +142,9 @@ vec2 getGGX( vec2 brdfPoint )
{
// TODO: use GGXLUT
// texture2D(GGXLUT, brdfPoint).rg;
#if PBR_GGX_APPROX
return getGGXApprox( brdfPoint);
#endif
}
vec3 calcBaseReflect0(float ior)
@ -274,6 +277,9 @@ void main()
// Reference: getIBLRadianceLambertian
vec3 FssEssLambert = specWeight * kSpec * vScaleBias.x + vScaleBias.y; // NOTE: Very similar to FssEssRadiance but with extra specWeight term
float Ems = (1.0 - vScaleBias.x + vScaleBias.y);
#if PBR_GGX_APPROX
Ems = alphaRough; // With GGX approximation Ems = 0 so use substitute
#endif
vec3 avg = specWeight * (reflect0 + (1.0 - reflect0) / 21.0);
vec3 AvgEms = avg * Ems;
vec3 FmsEms = AvgEms * FssEssLambert / (1.0 - AvgEms);