Browse Source

Ambient occlusion in PBR techniques (#2660)

* Ambient occlusion in PBR techniques

* AO to modulate IBL

* AO texture coord fix
gleblebedev 5 years ago
parent
commit
0c65934c04
40 changed files with 184 additions and 45 deletions
  1. 9 5
      bin/CoreData/Shaders/GLSL/PBRLitSolid.glsl
  2. 11 7
      bin/CoreData/Shaders/HLSL/PBRLitSolid.hlsl
  3. 8 0
      bin/CoreData/Techniques/PBR/PBRAO.xml
  4. 5 0
      bin/CoreData/Techniques/PBR/PBRAOAlpha.xml
  5. 8 0
      bin/CoreData/Techniques/PBR/PBRDiffAO.xml
  6. 5 0
      bin/CoreData/Techniques/PBR/PBRDiffAOAlpha.xml
  7. 8 0
      bin/CoreData/Techniques/PBR/PBRDiffEmissive.xml
  8. 5 0
      bin/CoreData/Techniques/PBR/PBRDiffEmissiveAlpha.xml
  9. 8 0
      bin/CoreData/Techniques/PBR/PBRDiffNormalAO.xml
  10. 5 0
      bin/CoreData/Techniques/PBR/PBRDiffNormalAOAlpha.xml
  11. 8 0
      bin/CoreData/Techniques/PBR/PBREmissive.xml
  12. 5 0
      bin/CoreData/Techniques/PBR/PBREmissiveAlpha.xml
  13. 1 2
      bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffNormalSpec.xml
  14. 8 0
      bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffNormalSpecAO.xml
  15. 5 0
      bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffNormalSpecAOAlpha.xml
  16. 1 2
      bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffNormalSpecAlpha.xml
  17. 1 2
      bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffNormalSpecEmissive.xml
  18. 1 2
      bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffNormalSpecEmissiveAlpha.xml
  19. 8 0
      bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffSpecAO.xml
  20. 5 0
      bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffSpecAOAlpha.xml
  21. 8 0
      bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffSpecEmissive.xml
  22. 5 0
      bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffSpecEmissiveAlpha.xml
  23. 1 3
      bin/CoreData/Techniques/PBR/PBRMetallicRoughNormalSpec.xml
  24. 8 0
      bin/CoreData/Techniques/PBR/PBRMetallicRoughNormalSpecAO.xml
  25. 5 0
      bin/CoreData/Techniques/PBR/PBRMetallicRoughNormalSpecAOAlpha.xml
  26. 1 4
      bin/CoreData/Techniques/PBR/PBRMetallicRoughNormalSpecEmissive.xml
  27. 1 4
      bin/CoreData/Techniques/PBR/PBRMetallicRoughNormalSpecEmissiveAlpha.xml
  28. 0 2
      bin/CoreData/Techniques/PBR/PBRMetallicRoughSpec.xml
  29. 8 0
      bin/CoreData/Techniques/PBR/PBRMetallicRoughSpecAO.xml
  30. 5 0
      bin/CoreData/Techniques/PBR/PBRMetallicRoughSpecAOAlpha.xml
  31. 0 2
      bin/CoreData/Techniques/PBR/PBRMetallicRoughSpecAlpha.xml
  32. 8 0
      bin/CoreData/Techniques/PBR/PBRMetallicRoughSpecEmissive.xml
  33. 5 0
      bin/CoreData/Techniques/PBR/PBRMetallicRoughSpecEmissiveAlpha.xml
  34. 1 2
      bin/CoreData/Techniques/PBR/PBRNoTexture.xml
  35. 0 2
      bin/CoreData/Techniques/PBR/PBRNormal.xml
  36. 8 0
      bin/CoreData/Techniques/PBR/PBRNormalAO.xml
  37. 5 0
      bin/CoreData/Techniques/PBR/PBRNormalAOAlpha.xml
  38. 0 2
      bin/CoreData/Techniques/PBR/PBRNormalAlpha.xml
  39. 0 2
      bin/CoreData/Techniques/PBR/PBRNormalEmissive.xml
  40. 0 2
      bin/CoreData/Techniques/PBR/PBRNormalEmissiveAlpha.xml

+ 9 - 5
bin/CoreData/Shaders/GLSL/PBRLitSolid.glsl

@@ -40,7 +40,7 @@ varying vec4 vWorldPos;
     #ifdef ENVCUBEMAP
     #ifdef ENVCUBEMAP
         varying vec3 vReflectionVec;
         varying vec3 vReflectionVec;
     #endif
     #endif
-    #if defined(LIGHTMAP) || defined(AO)
+    #if defined(LIGHTMAP)
         varying vec2 vTexCoord2;
         varying vec2 vTexCoord2;
     #endif
     #endif
 #endif
 #endif
@@ -86,11 +86,13 @@ void VS()
         #endif
         #endif
     #else
     #else
         // Ambient & per-vertex lighting
         // Ambient & per-vertex lighting
-        #if defined(LIGHTMAP) || defined(AO)
+        #if defined(LIGHTMAP)
             // If using lightmap, disregard zone ambient light
             // If using lightmap, disregard zone ambient light
-            // If using AO, calculate ambient in the PS
             vVertexLight = vec3(0.0, 0.0, 0.0);
             vVertexLight = vec3(0.0, 0.0, 0.0);
             vTexCoord2 = iTexCoord1;
             vTexCoord2 = iTexCoord1;
+        #elif defined(AO)
+            // If using AO, calculate ambient in the PS
+            vVertexLight = vec3(0.0, 0.0, 0.0);
         #else
         #else
             vVertexLight = GetAmbient(GetZonePos(worldPos));
             vVertexLight = GetAmbient(GetZonePos(worldPos));
         #endif
         #endif
@@ -219,9 +221,11 @@ void PS()
     #else
     #else
         // Ambient & per-vertex lighting
         // Ambient & per-vertex lighting
         vec3 finalColor = vVertexLight * diffColor.rgb;
         vec3 finalColor = vVertexLight * diffColor.rgb;
+        vec3 ambientOcclusion = vec3(1.0, 1.0, 1.0);
         #ifdef AO
         #ifdef AO
             // If using AO, the vertex light ambient is black, calculate occluded ambient here
             // If using AO, the vertex light ambient is black, calculate occluded ambient here
-            finalColor += texture2D(sEmissiveMap, vTexCoord2).rgb * cAmbientColor.rgb * diffColor.rgb;
+            ambientOcclusion = texture2D(sEmissiveMap, vTexCoord.xy).rgb;
+            finalColor += ambientOcclusion * cAmbientColor.rgb * diffColor.rgb;
         #endif
         #endif
 
 
         #ifdef MATERIAL
         #ifdef MATERIAL
@@ -241,7 +245,7 @@ void PS()
         #ifdef IBL
         #ifdef IBL
           vec3 iblColor = ImageBasedLighting(reflection, normal, toCamera, diffColor.rgb, specColor.rgb, roughness, cubeColor);
           vec3 iblColor = ImageBasedLighting(reflection, normal, toCamera, diffColor.rgb, specColor.rgb, roughness, cubeColor);
           float gamma = 0.0;
           float gamma = 0.0;
-          finalColor.rgb += iblColor;
+          finalColor.rgb += iblColor * ambientOcclusion;
         #endif
         #endif
 
 
         #ifdef ENVCUBEMAP
         #ifdef ENVCUBEMAP

+ 11 - 7
bin/CoreData/Shaders/HLSL/PBRLitSolid.hlsl

@@ -18,7 +18,7 @@ void VS(float4 iPos : POSITION,
     #ifdef VERTEXCOLOR
     #ifdef VERTEXCOLOR
         float4 iColor : COLOR0,
         float4 iColor : COLOR0,
     #endif
     #endif
-    #if defined(LIGHTMAP) || defined(AO)
+    #if defined(LIGHTMAP)
         float2 iTexCoord2 : TEXCOORD1,
         float2 iTexCoord2 : TEXCOORD1,
     #endif
     #endif
     #if (defined(NORMALMAP) || defined(TRAILFACECAM) || defined(TRAILBONE)) && !defined(BILLBOARD) && !defined(DIRBILLBOARD)
     #if (defined(NORMALMAP) || defined(TRAILFACECAM) || defined(TRAILBONE)) && !defined(BILLBOARD) && !defined(DIRBILLBOARD)
@@ -58,7 +58,7 @@ void VS(float4 iPos : POSITION,
         #ifdef ENVCUBEMAP
         #ifdef ENVCUBEMAP
             out float3 oReflectionVec : TEXCOORD6,
             out float3 oReflectionVec : TEXCOORD6,
         #endif
         #endif
-        #if defined(LIGHTMAP) || defined(AO)
+        #if defined(LIGHTMAP)
             out float2 oTexCoord2 : TEXCOORD7,
             out float2 oTexCoord2 : TEXCOORD7,
         #endif
         #endif
     #endif
     #endif
@@ -117,11 +117,13 @@ void VS(float4 iPos : POSITION,
         #endif
         #endif
     #else
     #else
         // Ambient & per-vertex lighting
         // Ambient & per-vertex lighting
-        #if defined(LIGHTMAP) || defined(AO)
+        #if defined(LIGHTMAP)
             // If using lightmap, disregard zone ambient light
             // If using lightmap, disregard zone ambient light
-            // If using AO, calculate ambient in the PS
             oVertexLight = float3(0.0, 0.0, 0.0);
             oVertexLight = float3(0.0, 0.0, 0.0);
             oTexCoord2 = iTexCoord2;
             oTexCoord2 = iTexCoord2;
+        #elif defined(AO)
+            // If using AO, calculate ambient in the PS
+            oVertexLight = float3(0.0, 0.0, 0.0);
         #else
         #else
             oVertexLight = GetAmbient(GetZonePos(worldPos));
             oVertexLight = GetAmbient(GetZonePos(worldPos));
         #endif
         #endif
@@ -164,7 +166,7 @@ void PS(
         #ifdef ENVCUBEMAP
         #ifdef ENVCUBEMAP
             float3 iReflectionVec : TEXCOORD6,
             float3 iReflectionVec : TEXCOORD6,
         #endif
         #endif
-        #if defined(LIGHTMAP) || defined(AO)
+        #if defined(LIGHTMAP)
             float2 iTexCoord2 : TEXCOORD7,
             float2 iTexCoord2 : TEXCOORD7,
         #endif
         #endif
     #endif
     #endif
@@ -301,9 +303,11 @@ void PS(
     #else
     #else
         // Ambient & per-vertex lighting
         // Ambient & per-vertex lighting
         float3 finalColor = iVertexLight * diffColor.rgb;
         float3 finalColor = iVertexLight * diffColor.rgb;
+        float3 ambientOcclusion = float3(1.0, 1.0, 1.0);
         #ifdef AO
         #ifdef AO
             // If using AO, the vertex light ambient is black, calculate occluded ambient here
             // If using AO, the vertex light ambient is black, calculate occluded ambient here
-            finalColor += Sample2D(EmissiveMap, iTexCoord2).rgb * cAmbientColor.rgb * diffColor.rgb;
+            ambientOcclusion = Sample2D(EmissiveMap, iTexCoord.xy).rgb;
+            finalColor += ambientOcclusion * cAmbientColor.rgb * diffColor.rgb;
         #endif
         #endif
 
 
         #ifdef MATERIAL
         #ifdef MATERIAL
@@ -323,7 +327,7 @@ void PS(
         #ifdef IBL
         #ifdef IBL
             const float3 iblColor = ImageBasedLighting(reflection, normal, toCamera, diffColor, specColor, roughness, cubeColor);
             const float3 iblColor = ImageBasedLighting(reflection, normal, toCamera, diffColor, specColor, roughness, cubeColor);
             const float gamma = 0;
             const float gamma = 0;
-            finalColor += iblColor;
+            finalColor += iblColor * ambientOcclusion;
         #endif
         #endif
 
 
         #ifdef ENVCUBEMAP
         #ifdef ENVCUBEMAP

+ 8 - 0
bin/CoreData/Techniques/PBR/PBRAO.xml

@@ -0,0 +1,8 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="AO" psdefines="AO PBR IBL">
+    <pass name="base" />
+    <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
+    <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
+    <pass name="deferred" psdefines="DEFERRED" blend="add" />
+    <pass name="depth" vs="Depth" ps="Depth" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>

+ 5 - 0
bin/CoreData/Techniques/PBR/PBRAOAlpha.xml

@@ -0,0 +1,5 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="AO" psdefines="AO PBR IBL">
+    <pass name="alpha" depthwrite="false" blend="alpha" />
+    <pass name="litalpha" depthwrite="false" blend="addalpha" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>

+ 8 - 0
bin/CoreData/Techniques/PBR/PBRDiffAO.xml

@@ -0,0 +1,8 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="AO" psdefines="DIFFMAP AO PBR IBL">
+    <pass name="base" />
+    <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
+    <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
+    <pass name="deferred" psdefines="DEFERRED" blend="add" />
+    <pass name="depth" vs="Depth" ps="Depth" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>

+ 5 - 0
bin/CoreData/Techniques/PBR/PBRDiffAOAlpha.xml

@@ -0,0 +1,5 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="AO" psdefines="DIFFMAP AO PBR IBL">
+    <pass name="alpha" depthwrite="false" blend="alpha" />
+    <pass name="litalpha" depthwrite="false" blend="addalpha" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>

+ 8 - 0
bin/CoreData/Techniques/PBR/PBRDiffEmissive.xml

@@ -0,0 +1,8 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" psdefines="DIFFMAP EMISSIVEMAP PBR IBL">
+    <pass name="base" />
+    <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
+    <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
+    <pass name="deferred" psdefines="DEFERRED" blend="add" />
+    <pass name="depth" vs="Depth" ps="Depth" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>

+ 5 - 0
bin/CoreData/Techniques/PBR/PBRDiffEmissiveAlpha.xml

@@ -0,0 +1,5 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" psdefines="DIFFMAP EMISSIVEMAP PBR IBL">
+    <pass name="alpha" depthwrite="false" blend="alpha" />
+    <pass name="litalpha" depthwrite="false" blend="addalpha" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>

+ 8 - 0
bin/CoreData/Techniques/PBR/PBRDiffNormalAO.xml

@@ -0,0 +1,8 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP AO" psdefines="DIFFMAP NORMALMAP AO PBR IBL">
+    <pass name="base" />
+    <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
+    <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
+    <pass name="deferred" psdefines="DEFERRED" blend="add" />
+    <pass name="depth" vs="Depth" ps="Depth" psexcludes="PACKEDNORMAL" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" psexcludes="PACKEDNORMAL" />
+</technique>

+ 5 - 0
bin/CoreData/Techniques/PBR/PBRDiffNormalAOAlpha.xml

@@ -0,0 +1,5 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP AO" psdefines="DIFFMAP NORMALMAP AO PBR IBL">
+    <pass name="alpha" depthwrite="false" blend="alpha" />
+    <pass name="litalpha" depthwrite="false" blend="addalpha" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" psexcludes="PACKEDNORMAL" />
+</technique>

+ 8 - 0
bin/CoreData/Techniques/PBR/PBREmissive.xml

@@ -0,0 +1,8 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" psdefines="EMISSIVEMAP PBR IBL">
+    <pass name="base" />
+    <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
+    <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
+    <pass name="deferred" psdefines="DEFERRED" blend="add" />
+    <pass name="depth" vs="Depth" ps="Depth" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>

+ 5 - 0
bin/CoreData/Techniques/PBR/PBREmissiveAlpha.xml

@@ -0,0 +1,5 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" psdefines="EMISSIVEMAP PBR IBL">
+    <pass name="alpha" depthwrite="false" blend="alpha" />
+    <pass name="litalpha" depthwrite="false" blend="addalpha" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>

+ 1 - 2
bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffNormalSpec.xml

@@ -1,5 +1,4 @@
-<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP"
-           psdefines="NORMALMAP DIFFMAP METALLIC ROUGHNESS PBR IBL">
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP" psdefines="DIFFMAP NORMALMAP PBR IBL METALLIC ROUGHNESS">
     <pass name="base" />
     <pass name="base" />
     <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
     <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
     <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
     <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />

+ 8 - 0
bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffNormalSpecAO.xml

@@ -0,0 +1,8 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP AO" psdefines="DIFFMAP NORMALMAP AO PBR IBL METALLIC ROUGHNESS">
+    <pass name="base" />
+    <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
+    <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
+    <pass name="deferred" psdefines="DEFERRED" blend="add" />
+    <pass name="depth" vs="Depth" ps="Depth" psexcludes="PACKEDNORMAL" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" psexcludes="PACKEDNORMAL" />
+</technique>

+ 5 - 0
bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffNormalSpecAOAlpha.xml

@@ -0,0 +1,5 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP AO" psdefines="DIFFMAP NORMALMAP AO PBR IBL METALLIC ROUGHNESS">
+    <pass name="alpha" depthwrite="false" blend="alpha" />
+    <pass name="litalpha" depthwrite="false" blend="addalpha" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" psexcludes="PACKEDNORMAL" />
+</technique>

+ 1 - 2
bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffNormalSpecAlpha.xml

@@ -1,5 +1,4 @@
-<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP"
-           psdefines="DIFFMAP NORMALMAP PBR IBL METALLIC ROUGHNESS">
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP" psdefines="DIFFMAP NORMALMAP PBR IBL METALLIC ROUGHNESS">
     <pass name="alpha" depthwrite="false" blend="alpha" />
     <pass name="alpha" depthwrite="false" blend="alpha" />
     <pass name="litalpha" depthwrite="false" blend="addalpha" />
     <pass name="litalpha" depthwrite="false" blend="addalpha" />
     <pass name="shadow" vs="Shadow" ps="Shadow" psexcludes="PACKEDNORMAL" />
     <pass name="shadow" vs="Shadow" ps="Shadow" psexcludes="PACKEDNORMAL" />

+ 1 - 2
bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffNormalSpecEmissive.xml

@@ -1,5 +1,4 @@
-<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP"
-           psdefines="DIFFMAP NORMALMAP EMISSIVEMAP METALLIC ROUGHNESS PBR IBL">
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP" psdefines="DIFFMAP NORMALMAP EMISSIVEMAP PBR IBL METALLIC ROUGHNESS">
     <pass name="base" />
     <pass name="base" />
     <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
     <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
     <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
     <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />

+ 1 - 2
bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffNormalSpecEmissiveAlpha.xml

@@ -1,5 +1,4 @@
-<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP"
-           psdefines="DIFFMAP NORMALMAP EMISSIVEMAP PBR IBL METALLIC ROUGHNESS">
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP" psdefines="DIFFMAP NORMALMAP EMISSIVEMAP PBR IBL METALLIC ROUGHNESS">
     <pass name="alpha" depthwrite="false" blend="alpha" />
     <pass name="alpha" depthwrite="false" blend="alpha" />
     <pass name="litalpha" depthwrite="false" blend="addalpha" />
     <pass name="litalpha" depthwrite="false" blend="addalpha" />
     <pass name="shadow" vs="Shadow" ps="Shadow" psexcludes="PACKEDNORMAL" />
     <pass name="shadow" vs="Shadow" ps="Shadow" psexcludes="PACKEDNORMAL" />

+ 8 - 0
bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffSpecAO.xml

@@ -0,0 +1,8 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="AO" psdefines="DIFFMAP AO PBR IBL METALLIC ROUGHNESS">
+    <pass name="base" />
+    <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
+    <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
+    <pass name="deferred" psdefines="DEFERRED" blend="add" />
+    <pass name="depth" vs="Depth" ps="Depth" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>

+ 5 - 0
bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffSpecAOAlpha.xml

@@ -0,0 +1,5 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="AO" psdefines="DIFFMAP AO PBR IBL METALLIC ROUGHNESS">
+    <pass name="alpha" depthwrite="false" blend="alpha" />
+    <pass name="litalpha" depthwrite="false" blend="addalpha" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>

+ 8 - 0
bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffSpecEmissive.xml

@@ -0,0 +1,8 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" psdefines="DIFFMAP EMISSIVEMAP PBR IBL METALLIC ROUGHNESS">
+    <pass name="base" />
+    <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
+    <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
+    <pass name="deferred" psdefines="DEFERRED" blend="add" />
+    <pass name="depth" vs="Depth" ps="Depth" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>

+ 5 - 0
bin/CoreData/Techniques/PBR/PBRMetallicRoughDiffSpecEmissiveAlpha.xml

@@ -0,0 +1,5 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" psdefines="DIFFMAP EMISSIVEMAP PBR IBL METALLIC ROUGHNESS">
+    <pass name="alpha" depthwrite="false" blend="alpha" />
+    <pass name="litalpha" depthwrite="false" blend="addalpha" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>

+ 1 - 3
bin/CoreData/Techniques/PBR/PBRMetallicRoughNormalSpec.xml

@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP" psdefines="NORMALMAP METALLIC ROUGHNESS PBR IBL">
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP" psdefines="NORMALMAP PBR IBL METALLIC ROUGHNESS">
     <pass name="base" />
     <pass name="base" />
     <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
     <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
     <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
     <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />

+ 8 - 0
bin/CoreData/Techniques/PBR/PBRMetallicRoughNormalSpecAO.xml

@@ -0,0 +1,8 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP AO" psdefines="NORMALMAP AO PBR IBL METALLIC ROUGHNESS">
+    <pass name="base" />
+    <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
+    <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
+    <pass name="deferred" psdefines="DEFERRED" blend="add" />
+    <pass name="depth" vs="Depth" ps="Depth" psexcludes="PACKEDNORMAL" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" psexcludes="PACKEDNORMAL" />
+</technique>

+ 5 - 0
bin/CoreData/Techniques/PBR/PBRMetallicRoughNormalSpecAOAlpha.xml

@@ -0,0 +1,5 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP AO" psdefines="NORMALMAP AO PBR IBL METALLIC ROUGHNESS">
+    <pass name="alpha" depthwrite="false" blend="alpha" />
+    <pass name="litalpha" depthwrite="false" blend="addalpha" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" psexcludes="PACKEDNORMAL" />
+</technique>

+ 1 - 4
bin/CoreData/Techniques/PBR/PBRMetallicRoughNormalSpecEmissive.xml

@@ -1,7 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP"
-           psdefines="NORMALMAP EMISSIVEMAP METALLIC ROUGHNESS PBR IBL">
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP" psdefines="NORMALMAP EMISSIVEMAP PBR IBL METALLIC ROUGHNESS">
     <pass name="base" />
     <pass name="base" />
     <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
     <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
     <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
     <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />

+ 1 - 4
bin/CoreData/Techniques/PBR/PBRMetallicRoughNormalSpecEmissiveAlpha.xml

@@ -1,7 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP"
-           psdefines="NORMALMAP EMISSIVEMAP PBR IBL METALLIC ROUGHNESS">
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP" psdefines="NORMALMAP EMISSIVEMAP PBR IBL METALLIC ROUGHNESS">
     <pass name="alpha" depthwrite="false" blend="alpha" />
     <pass name="alpha" depthwrite="false" blend="alpha" />
     <pass name="litalpha" depthwrite="false" blend="addalpha" />
     <pass name="litalpha" depthwrite="false" blend="addalpha" />
     <pass name="shadow" vs="Shadow" ps="Shadow" psexcludes="PACKEDNORMAL" />
     <pass name="shadow" vs="Shadow" ps="Shadow" psexcludes="PACKEDNORMAL" />

+ 0 - 2
bin/CoreData/Techniques/PBR/PBRMetallicRoughSpec.xml

@@ -1,5 +1,3 @@
-<?xml version="1.0" encoding="utf-8"?>
-
 <technique vs="PBRLitSolid" ps="PBRLitSolid" psdefines="PBR IBL METALLIC ROUGHNESS">
 <technique vs="PBRLitSolid" ps="PBRLitSolid" psdefines="PBR IBL METALLIC ROUGHNESS">
     <pass name="base" />
     <pass name="base" />
     <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
     <pass name="light" depthtest="equal" depthwrite="false" blend="add" />

+ 8 - 0
bin/CoreData/Techniques/PBR/PBRMetallicRoughSpecAO.xml

@@ -0,0 +1,8 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="AO" psdefines="AO PBR IBL METALLIC ROUGHNESS">
+    <pass name="base" />
+    <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
+    <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
+    <pass name="deferred" psdefines="DEFERRED" blend="add" />
+    <pass name="depth" vs="Depth" ps="Depth" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>

+ 5 - 0
bin/CoreData/Techniques/PBR/PBRMetallicRoughSpecAOAlpha.xml

@@ -0,0 +1,5 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="AO" psdefines="AO PBR IBL METALLIC ROUGHNESS">
+    <pass name="alpha" depthwrite="false" blend="alpha" />
+    <pass name="litalpha" depthwrite="false" blend="addalpha" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>

+ 0 - 2
bin/CoreData/Techniques/PBR/PBRMetallicRoughSpecAlpha.xml

@@ -1,5 +1,3 @@
-<?xml version="1.0" encoding="utf-8"?>
-
 <technique vs="PBRLitSolid" ps="PBRLitSolid" psdefines="PBR IBL METALLIC ROUGHNESS">
 <technique vs="PBRLitSolid" ps="PBRLitSolid" psdefines="PBR IBL METALLIC ROUGHNESS">
     <pass name="alpha" depthwrite="false" blend="alpha" />
     <pass name="alpha" depthwrite="false" blend="alpha" />
     <pass name="litalpha" depthwrite="false" blend="addalpha" />
     <pass name="litalpha" depthwrite="false" blend="addalpha" />

+ 8 - 0
bin/CoreData/Techniques/PBR/PBRMetallicRoughSpecEmissive.xml

@@ -0,0 +1,8 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" psdefines="EMISSIVEMAP PBR IBL METALLIC ROUGHNESS">
+    <pass name="base" />
+    <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
+    <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
+    <pass name="deferred" psdefines="DEFERRED" blend="add" />
+    <pass name="depth" vs="Depth" ps="Depth" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>

+ 5 - 0
bin/CoreData/Techniques/PBR/PBRMetallicRoughSpecEmissiveAlpha.xml

@@ -0,0 +1,5 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" psdefines="EMISSIVEMAP PBR IBL METALLIC ROUGHNESS">
+    <pass name="alpha" depthwrite="false" blend="alpha" />
+    <pass name="litalpha" depthwrite="false" blend="addalpha" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" />
+</technique>

+ 1 - 2
bin/CoreData/Techniques/PBR/PBRNoTexture.xml

@@ -1,9 +1,8 @@
 <technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NOUV" psdefines="PBR IBL">
 <technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NOUV" psdefines="PBR IBL">
     <pass name="base" />
     <pass name="base" />
     <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
     <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
-    <pass name="prepass" psdefines="PREPASS" />
     <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
     <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
-    <pass name="deferred" psdefines="DEFERRED" />
+    <pass name="deferred" psdefines="DEFERRED" blend="add" />
     <pass name="depth" vs="Depth" ps="Depth" />
     <pass name="depth" vs="Depth" ps="Depth" />
     <pass name="shadow" vs="Shadow" ps="Shadow" />
     <pass name="shadow" vs="Shadow" ps="Shadow" />
 </technique>
 </technique>

+ 0 - 2
bin/CoreData/Techniques/PBR/PBRNormal.xml

@@ -1,5 +1,3 @@
-<?xml version="1.0" encoding="utf-8"?>
-
 <technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP" psdefines="NORMALMAP PBR IBL">
 <technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP" psdefines="NORMALMAP PBR IBL">
     <pass name="base" />
     <pass name="base" />
     <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
     <pass name="light" depthtest="equal" depthwrite="false" blend="add" />

+ 8 - 0
bin/CoreData/Techniques/PBR/PBRNormalAO.xml

@@ -0,0 +1,8 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP AO" psdefines="NORMALMAP AO PBR IBL">
+    <pass name="base" />
+    <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
+    <pass name="material" psdefines="MATERIAL" depthtest="equal" depthwrite="false" />
+    <pass name="deferred" psdefines="DEFERRED" blend="add" />
+    <pass name="depth" vs="Depth" ps="Depth" psexcludes="PACKEDNORMAL" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" psexcludes="PACKEDNORMAL" />
+</technique>

+ 5 - 0
bin/CoreData/Techniques/PBR/PBRNormalAOAlpha.xml

@@ -0,0 +1,5 @@
+<technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP AO" psdefines="NORMALMAP AO PBR IBL">
+    <pass name="alpha" depthwrite="false" blend="alpha" />
+    <pass name="litalpha" depthwrite="false" blend="addalpha" />
+    <pass name="shadow" vs="Shadow" ps="Shadow" psexcludes="PACKEDNORMAL" />
+</technique>

+ 0 - 2
bin/CoreData/Techniques/PBR/PBRNormalAlpha.xml

@@ -1,5 +1,3 @@
-<?xml version="1.0" encoding="utf-8"?>
-
 <technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP" psdefines="NORMALMAP PBR IBL">
 <technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP" psdefines="NORMALMAP PBR IBL">
     <pass name="alpha" depthwrite="false" blend="alpha" />
     <pass name="alpha" depthwrite="false" blend="alpha" />
     <pass name="litalpha" depthwrite="false" blend="addalpha" />
     <pass name="litalpha" depthwrite="false" blend="addalpha" />

+ 0 - 2
bin/CoreData/Techniques/PBR/PBRNormalEmissive.xml

@@ -1,5 +1,3 @@
-<?xml version="1.0" encoding="utf-8"?>
-
 <technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP" psdefines="NORMALMAP EMISSIVEMAP PBR IBL">
 <technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP" psdefines="NORMALMAP EMISSIVEMAP PBR IBL">
     <pass name="base" />
     <pass name="base" />
     <pass name="light" depthtest="equal" depthwrite="false" blend="add" />
     <pass name="light" depthtest="equal" depthwrite="false" blend="add" />

+ 0 - 2
bin/CoreData/Techniques/PBR/PBRNormalEmissiveAlpha.xml

@@ -1,5 +1,3 @@
-<?xml version="1.0" encoding="utf-8"?>
-
 <technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP" psdefines="NORMALMAP EMISSIVEMAP PBR IBL">
 <technique vs="PBRLitSolid" ps="PBRLitSolid" vsdefines="NORMALMAP" psdefines="NORMALMAP EMISSIVEMAP PBR IBL">
     <pass name="alpha" depthwrite="false" blend="alpha" />
     <pass name="alpha" depthwrite="false" blend="alpha" />
     <pass name="litalpha" depthwrite="false" blend="addalpha" />
     <pass name="litalpha" depthwrite="false" blend="addalpha" />