Browse Source

Lightmapped techniques can now be shadowed. AddedAdded an unlit cubemapped technique.

Matt Benic 10 years ago
parent
commit
7dfaa64b46

+ 31 - 23
Resources/CoreData/Shaders/HLSL/LitSolid.hlsl

@@ -225,33 +225,41 @@ void PS(
         float3 lightColor;
         float3 finalColor;
 
-        float diff = GetDiffuse(normal, iWorldPos.xyz, lightDir);
+        #if defined(LIGHTMAP) && defined(SHADOW)
+            float diff = 1-GetShadow(iShadowPos, iWorldPos.w);
 
-        #ifdef SHADOW
-            diff *= GetShadow(iShadowPos, iWorldPos.w);
-        #endif
+            finalColor = diff * diffColor.rgb * cAmbientColor;
 
-        #if defined(SPOTLIGHT)
-            lightColor = iSpotPos.w > 0.0 ? Sample2DProj(LightSpotMap, iSpotPos).rgb * cLightColor.rgb : 0.0;
-        #elif defined(CUBEMASK)
-            lightColor = SampleCube(LightCubeMap, iCubeMaskVec).rgb * cLightColor.rgb;
-        #else
-            lightColor = cLightColor.rgb;
-        #endif
-    
-        #ifdef SPECULAR
-            float spec = GetSpecular(normal, cCameraPosPS - iWorldPos.xyz, lightDir, cMatSpecColor.a);
-            finalColor = diff * lightColor * (diffColor.rgb + spec * specColor * cLightColor.a);
+            oColor = float4(GetLitFog(finalColor, fogFactor), diffColor.a);
         #else
-            finalColor = diff * lightColor * diffColor.rgb;
-        #endif
+            float diff = GetDiffuse(normal, iWorldPos.xyz, lightDir);
 
-        #ifdef AMBIENT
-            finalColor += cAmbientColor * diffColor.rgb;
-            finalColor += cMatEmissiveColor;
-            oColor = float4(GetFog(finalColor, fogFactor), diffColor.a);
-        #else
-            oColor = float4(GetLitFog(finalColor, fogFactor), diffColor.a);
+            #ifdef SHADOW
+                diff *= GetShadow(iShadowPos, iWorldPos.w);
+            #endif
+
+            #if defined(SPOTLIGHT)
+                lightColor = iSpotPos.w > 0.0 ? Sample2DProj(LightSpotMap, iSpotPos).rgb * cLightColor.rgb : 0.0;
+            #elif defined(CUBEMASK)
+                lightColor = SampleCube(LightCubeMap, iCubeMaskVec).rgb * cLightColor.rgb;
+            #else
+                lightColor = cLightColor.rgb;
+            #endif
+        
+            #ifdef SPECULAR
+                float spec = GetSpecular(normal, cCameraPosPS - iWorldPos.xyz, lightDir, cMatSpecColor.a);
+                finalColor = diff * lightColor * (diffColor.rgb + spec * specColor * cLightColor.a);
+            #else
+                finalColor = diff * lightColor * diffColor.rgb;
+            #endif
+
+            #ifdef AMBIENT
+                finalColor += cAmbientColor * diffColor.rgb;
+                finalColor += cMatEmissiveColor;
+                oColor = float4(GetFog(finalColor, fogFactor), diffColor.a);
+            #else
+                oColor = float4(GetLitFog(finalColor, fogFactor), diffColor.a);
+            #endif
         #endif
     #elif defined(PREPASS)
         // Fill light pre-pass G-Buffer

+ 1 - 1
Resources/CoreData/Techniques/DiffLightMapEnvCube.xml

@@ -1,7 +1,7 @@
 <technique vs="LitSolid" ps="LitSolid" psdefines="DIFFMAP">
     <pass name="base" vsdefines="ENVCUBEMAP LIGHTMAP" psdefines="ENVCUBEMAP LIGHTMAP" />
-    <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
     <pass name="prepass" psdefines="PREPASS" />
+    <pass name="light" vsdefines="LIGHTMAP" psdefines="LIGHTMAP" depthtest="equal" depthwrite="false" blend="subtract" />
     <pass name="material" vsdefines="ENVCUBEMAP LIGHTMAP" psdefines="MATERIAL ENVCUBEMAP LIGHTMAP" depthtest="equal" depthwrite="false" />
     <pass name="deferred" vsdefines="ENVCUBEMAP LIGHTMAP" psdefines="DEFERRED ENVCUBEMAP LIGHTMAP" />
     <pass name="depth" vs="Depth" ps="Depth" />

+ 8 - 0
Resources/CoreData/Techniques/DiffUnlitEnvCube.xml

@@ -0,0 +1,8 @@
+<technique vs="LitSolid" ps="LitSolid" psdefines="DIFFMAP" >
+    <pass name="base" vsdefines="ENVCUBEMAP" psdefines="ENVCUBEMAP" />
+    <pass name="prepass" psdefines="PREPASS" />
+    <pass name="material" vsdefines="ENVCUBEMAP" psdefines="MATERIAL ENVCUBEMAP" depthtest="equal" depthwrite="false" />
+    <pass name="deferred" vsdefines="ENVCUBEMAP" psdefines="DEFERRED ENVCUBEMAP" />
+    <pass name="depth" vs="Depth" ps="Depth" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>