Browse Source

Shadows, SSAO and CartoonEdge now works with HardWareSkinning

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10580 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
rem..om 12 years ago
parent
commit
c4fc9b723f

+ 6 - 6
engine/src/core-data/Common/MatDefs/Light/Lighting.j3md

@@ -192,6 +192,7 @@ MaterialDef Phong Lighting {
         Defines {
             COLOR_MAP : ColorMap
             DISCARD_ALPHA : AlphaDiscardThreshold
+            NUM_BONES : NumberOfBones
         }
 
         ForcedRenderState {
@@ -218,12 +219,13 @@ MaterialDef Phong Lighting {
             HARDWARE_SHADOWS : HardwareShadows
             FILTER_MODE : FilterMode
             PCFEDGE : PCFEdge
-            DISCARD_ALPHA : AlphaDiscardThreshold
+            DISCARD_ALPHA : AlphaDiscardThreshold           
             COLOR_MAP : ColorMap
             SHADOWMAP_SIZE : ShadowMapSize
             FADE : FadeInfo
             PSSM : Splits
             POINTLIGHT : LightViewProjectionMatrix5
+            NUM_BONES : NumberOfBones
         }
 
         ForcedRenderState {
@@ -246,12 +248,13 @@ MaterialDef Phong Lighting {
             HARDWARE_SHADOWS : HardwareShadows
             FILTER_MODE : FilterMode
             PCFEDGE : PCFEdge
-            DISCARD_ALPHA : AlphaDiscardThreshold
+            DISCARD_ALPHA : AlphaDiscardThreshold           
             COLOR_MAP : ColorMap
             SHADOWMAP_SIZE : ShadowMapSize
             FADE : FadeInfo
             PSSM : Splits
             POINTLIGHT : LightViewProjectionMatrix5
+            NUM_BONES : NumberOfBones
         }
 
         ForcedRenderState {
@@ -274,10 +277,7 @@ MaterialDef Phong Lighting {
 
         Defines {
             DIFFUSEMAP_ALPHA : DiffuseMap
-        }
-
-        RenderState {
-
+            NUM_BONES : NumberOfBones
         }
 
     }

+ 124 - 10
engine/src/core-data/Common/MatDefs/Misc/Unshaded.j3md

@@ -15,6 +15,35 @@ MaterialDef Unshaded {
         // For hardware skinning
         Int NumberOfBones
         Matrix4Array BoneMatrices
+
+        //Shadows
+        Int FilterMode
+        Boolean HardwareShadows
+
+        Texture2D ShadowMap0
+        Texture2D ShadowMap1
+        Texture2D ShadowMap2
+        Texture2D ShadowMap3
+        //pointLights
+        Texture2D ShadowMap4
+        Texture2D ShadowMap5
+        
+        Float ShadowIntensity
+        Vector4 Splits
+        Vector2 FadeInfo
+
+        Matrix4 LightViewProjectionMatrix0
+        Matrix4 LightViewProjectionMatrix1
+        Matrix4 LightViewProjectionMatrix2
+        Matrix4 LightViewProjectionMatrix3
+        //pointLight
+        Matrix4 LightViewProjectionMatrix4
+        Matrix4 LightViewProjectionMatrix5
+        Vector3 LightPos
+
+        Float PCFEdge
+
+        Float ShadowMapSize
     }
 
     Technique {
@@ -38,21 +67,106 @@ MaterialDef Unshaded {
     Technique {
     }
 
-      Technique PreNormalPass {
+    Technique PreNormalPass {
+
+          VertexShader GLSL100 :   Common/MatDefs/SSAO/normal.vert
+          FragmentShader GLSL100 : Common/MatDefs/SSAO/normal.frag
+
+          WorldParameters {
+              WorldViewProjectionMatrix
+              WorldViewMatrix
+              NormalMatrix
+          }
+
+          Defines {
+              NUM_BONES : NumberOfBones
+          }
+   }
+
+    Technique PreShadow {
+
+        VertexShader GLSL100 :   Common/MatDefs/Shadow/PreShadow.vert
+        FragmentShader GLSL100 : Common/MatDefs/Shadow/PreShadow.frag
+
+        WorldParameters {
+            WorldViewProjectionMatrix
+            WorldViewMatrix
+        }
+
+        Defines {
+            COLOR_MAP : ColorMap
+            DISCARD_ALPHA : AlphaDiscardThreshold
+            NUM_BONES : NumberOfBones
+        }
+
+        ForcedRenderState {
+            FaceCull Off
+            DepthTest On
+            DepthWrite On
+            PolyOffset 5 3
+            ColorWrite Off
+        }
+
+    }
+
 
-            VertexShader GLSL100 :   Common/MatDefs/SSAO/normal.vert
-            FragmentShader GLSL100 : Common/MatDefs/SSAO/normal.frag
+    Technique PostShadow15{
+        VertexShader GLSL150:   Common/MatDefs/Shadow/PostShadow.vert
+        FragmentShader GLSL150: Common/MatDefs/Shadow/PostShadow15.frag
 
-            WorldParameters {
-                WorldViewProjectionMatrix
-                WorldViewMatrix
-                NormalMatrix
-            }
+        WorldParameters {
+            WorldViewProjectionMatrix
+            WorldMatrix
+        }
+
+        Defines {
+            HARDWARE_SHADOWS : HardwareShadows
+            FILTER_MODE : FilterMode
+            PCFEDGE : PCFEdge
+            DISCARD_ALPHA : AlphaDiscardThreshold           
+            COLOR_MAP : ColorMap
+            SHADOWMAP_SIZE : ShadowMapSize
+            FADE : FadeInfo
+            PSSM : Splits
+            POINTLIGHT : LightViewProjectionMatrix5
+            NUM_BONES : NumberOfBones
+        }
 
-            RenderState {
-            }
+        ForcedRenderState {
+            Blend Modulate
+            DepthWrite Off                 
+            PolyOffset -0.1 0
         }
+    }
 
+    Technique PostShadow{
+        VertexShader GLSL100:   Common/MatDefs/Shadow/PostShadow.vert
+        FragmentShader GLSL100: Common/MatDefs/Shadow/PostShadow.frag
+
+        WorldParameters {
+            WorldViewProjectionMatrix
+            WorldMatrix
+        }
+
+        Defines {
+            HARDWARE_SHADOWS : HardwareShadows
+            FILTER_MODE : FilterMode
+            PCFEDGE : PCFEdge
+            DISCARD_ALPHA : AlphaDiscardThreshold           
+            COLOR_MAP : ColorMap
+            SHADOWMAP_SIZE : ShadowMapSize
+            FADE : FadeInfo
+            PSSM : Splits
+            POINTLIGHT : LightViewProjectionMatrix5
+            NUM_BONES : NumberOfBones
+        }
+
+        ForcedRenderState {
+            Blend Modulate
+            DepthWrite Off   
+            PolyOffset -0.1 0  
+        }
+    }
 
     Technique Glow {
 

+ 8 - 2
engine/src/core-data/Common/MatDefs/Shadow/PostShadow.vert

@@ -1,3 +1,4 @@
+#import "Common/ShaderLib/Skinning.glsllib"
 uniform mat4 m_LightViewProjectionMatrix0;
 uniform mat4 m_LightViewProjectionMatrix1;
 uniform mat4 m_LightViewProjectionMatrix2;
@@ -41,7 +42,12 @@ const mat4 biasMat = mat4(0.5, 0.0, 0.0, 0.0,
 
 
 void main(){
-    gl_Position = g_WorldViewProjectionMatrix * vec4(inPosition, 1.0);
+   vec4 modelSpacePos = vec4(inPosition, 1.0);
+  
+   #ifdef NUM_BONES
+       Skinning_Compute(modelSpacePos);
+   #endif
+    gl_Position = g_WorldViewProjectionMatrix * modelSpacePos;
 
     #ifndef POINTLIGHT
         #ifdef PSSM
@@ -50,7 +56,7 @@ void main(){
         vec4 worldPos=vec4(0.0);
     #endif
     // get the vertex in world space
-    worldPos = g_WorldMatrix * vec4(inPosition, 1.0);
+    worldPos = g_WorldMatrix * modelSpacePos;
 
     #ifdef DISCARD_ALPHA
        texCoord = inTexCoord;

+ 8 - 2
engine/src/core-data/Common/MatDefs/Shadow/PreShadow.vert

@@ -1,4 +1,5 @@
-attribute vec4 inPosition;
+#import "Common/ShaderLib/Skinning.glsllib"
+attribute vec3 inPosition;
 attribute vec2 inTexCoord;
 
 uniform mat4 g_WorldViewProjectionMatrix;
@@ -7,6 +8,11 @@ uniform mat4 g_WorldViewMatrix;
 varying vec2 texCoord;
 
 void main(){
-    gl_Position = g_WorldViewProjectionMatrix * inPosition;
+    vec4 modelSpacePos = vec4(inPosition, 1.0);
+  
+   #ifdef NUM_BONES
+       Skinning_Compute(modelSpacePos);
+   #endif
+    gl_Position = g_WorldViewProjectionMatrix * modelSpacePos;
     texCoord = inTexCoord;
 }

+ 8 - 2
engine/src/core-effects/Common/MatDefs/SSAO/normal.vert

@@ -1,3 +1,4 @@
+#import "Common/ShaderLib/Skinning.glsllib"
 uniform mat4 g_WorldViewProjectionMatrix;
 uniform mat3 g_NormalMatrix;
 
@@ -11,6 +12,11 @@ varying vec2 texCoord;
 void main(void)
 {
    texCoord=inTexCoord.xy;
-   normal = normalize(g_NormalMatrix * inNormal);
-   gl_Position = g_WorldViewProjectionMatrix * vec4(inPosition,1.0);
+   vec4 modelSpacePos = vec4(inPosition, 1.0);
+   vec3 modelSpaceNormals = inNormal;
+   #ifdef NUM_BONES
+       Skinning_Compute(modelSpacePos,modelSpaceNormals);
+   #endif
+   normal = normalize(g_NormalMatrix * modelSpaceNormals);
+   gl_Position = g_WorldViewProjectionMatrix * modelSpacePos;
 }