SL-17274: PBR: Fix EMS being zero when using GGX approximation
parent
251b75ea2e
commit
d1e078a122
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue