Selaa lähdekoodia

Merge pull request #9246 from CraigFeldspar/hotfix-sss

Hotfix subsurface scattering
sebavan 4 vuotta sitten
vanhempi
commit
fc71b6fb62

+ 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.;
 }

+ 7 - 5
src/Shaders/pbr.fragment.fx

@@ -539,13 +539,15 @@ void main(void) {
         #endif
 
         vec3 sqAlbedo = sqrt(surfaceAlbedo); // for pre and post scatter
-        gl_FragData[0] = vec4(finalColor.rgb - irradiance, finalColor.a); // Split irradiance from final color
-        irradiance /= sqAlbedo;
-        
-        #ifndef SS_SCATTERING
+        #ifdef SS_SCATTERING
+            gl_FragData[0] = vec4(finalColor.rgb - irradiance, finalColor.a); // Split irradiance from final color
+            irradiance /= sqAlbedo;
+        #else
+            gl_FragData[0] = finalColor; // No split lighting
             float scatteringDiffusionProfile = 255.;
         #endif
-        gl_FragData[PREPASS_IRRADIANCE_INDEX] = vec4(tagLightingForSSS(irradiance), scatteringDiffusionProfile / 255.); // Irradiance + SS diffusion profile
+
+        gl_FragData[PREPASS_IRRADIANCE_INDEX] = vec4(irradiance, scatteringDiffusionProfile / 255.); // Irradiance + SS diffusion profile
     #else
         gl_FragData[0] = vec4(finalColor.rgb, finalColor.a);
     #endif

+ 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)
 	{