Prechádzať zdrojové kódy

Update of the normal bias block for better reusability

Popov72 5 rokov pred
rodič
commit
cb1fccc2f1

+ 2 - 10
src/Shaders/ShadersInclude/shadowMapVertexNormalBias.fx

@@ -1,13 +1,5 @@
 // Normal inset Bias.
 #if SM_NORMALBIAS == 1
-    mat3 normWorldSM = mat3(finalWorld);
-
-    #ifdef NONUNIFORMSCALING
-        normWorldSM = transposeMat3(inverseMat3(normWorldSM));
-    #endif
-
-    vec3 worldNorSM = normalize(normWorldSM * normal);
-
     #if SM_DIRECTIONINLIGHTDATA == 1
         vec3 worldLightDirSM = normalize(-lightDataSM.xyz);
     #else
@@ -15,9 +7,9 @@
         vec3 worldLightDirSM = normalize(directionToLightSM);
     #endif
 
-    float ndlSM = dot(worldNorSM, worldLightDirSM);
+    float ndlSM = dot(vNormalW, worldLightDirSM);
     float sinNLSM = sqrt(1.0 - ndlSM * ndlSM);
     float normalBiasSM = biasAndScaleSM.y * sinNLSM;
 
-    worldPos.xyz -= worldNorSM * normalBiasSM;
+    worldPos.xyz -= vNormalW * normalBiasSM;
 #endif

+ 13 - 0
src/Shaders/shadowMap.vertex.fx

@@ -37,6 +37,9 @@ vec3 positionUpdated = position;
 #ifdef UV1
     vec2 uvUpdated = uv;
 #endif  
+#ifdef NORMAL	
+	vec3 normalUpdated = normal;
+#endif
 
 #include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]
 
@@ -45,6 +48,16 @@ vec3 positionUpdated = position;
 
 vec4 worldPos = finalWorld * vec4(positionUpdated, 1.0);
 
+#ifdef NORMAL
+    mat3 normWorldSM = mat3(finalWorld);
+
+    #ifdef NONUNIFORMSCALING
+        normWorldSM = transposeMat3(inverseMat3(normWorldSM));
+    #endif
+
+    vec3 vNormalW = normalize(normWorldSM * normalUpdated);
+#endif
+
 #include<shadowMapVertexNormalBias>
 
 // Projection.