diff options
author | Ptolemy <ptolemy@lindenlab.com> | 2022-06-29 17:50:03 -0700 |
---|---|---|
committer | Ptolemy <ptolemy@lindenlab.com> | 2022-06-29 17:50:03 -0700 |
commit | d1e078a1229fa61ba697e382fb42b6a6b11e8f97 (patch) | |
tree | 9e9e20013a16f7c394d309e91a65747520caf5e7 | |
parent | 251b75ea2ed5e652c245f9bed33ff96092b830fe (diff) |
SL-17274: PBR: Fix EMS being zero when using GGX approximation
-rw-r--r-- | indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl index 2749dfed30..44884e780f 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl @@ -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); |