Browse Source

better detection of sss

Benjamin Guignabert 4 years ago
parent
commit
ae56dcb801

+ 2 - 14
src/Shaders/ShadersInclude/subSurfaceScatteringFunctions.fx

@@ -1,16 +1,4 @@
-#ifdef SS_SCATTERING
-vec3 tagLightingForSSS(vec3 color) {
-    color.b = max(color.b, HALF_MIN);
-
-    return color;
-}
-#else
-vec3 tagLightingForSSS(vec3 color) {
-    return vec3(0., 0., 0.);
-}
-#endif
-
-bool testLightingForSSS(vec3 color)
+bool testLightingForSSS(float diffusionProfile)
 {
-    return color.b > 0.;
+    return diffusionProfile < 1.;
 }

+ 0 - 1
src/Shaders/pbr.fragment.fx

@@ -542,7 +542,6 @@ void main(void) {
         #ifdef SS_SCATTERING
             gl_FragData[0] = vec4(finalColor.rgb - irradiance, finalColor.a); // Split irradiance from final color
             irradiance /= sqAlbedo;
-            irradiance = tagLightingForSSS(irradiance);
         #else
             gl_FragData[0] = finalColor; // No split lighting
             float scatteringDiffusionProfile = 255.;

+ 2 - 2
src/Shaders/subSurfaceScattering.fragment.fx

@@ -121,7 +121,7 @@ void EvaluateSample(int i, int n, vec3 S, float d, vec3 centerPosVS, float mmPer
     float viewZ = texture2D(depthSampler, position).r;
     vec3 irradiance    = textureSample.rgb;
 
-    if (testLightingForSSS(irradiance))
+    if (testLightingForSSS(textureSample.a))
     {
         // Apply bilateral weighting.
         float relZ = viewZ - centerPosVS.z;
@@ -149,7 +149,7 @@ void main(void)
 
 	float  centerDepth       = 0.;
     vec4 inputColor = texture2D(textureSampler, vUV);
-	bool passedStencilTest = testLightingForSSS(centerIrradiance);
+	bool passedStencilTest = testLightingForSSS(irradianceAndDiffusionProfile.a);
 
 	if (passedStencilTest)
 	{