Changeset 1060 for GTP/trunk/App/Demos/Illum/Ogre/Media/materials/programs/GameTools_DepthShadow.hlsl
- Timestamp:
- 06/27/06 10:17:56 (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Illum/Ogre/Media/materials/programs/GameTools_DepthShadow.hlsl
r807 r1060 32 32 float4 hPosition : POSITION; 33 33 float4 Position : TEXCOORD0; 34 float4 cPosition : TEXCOORD1; 34 35 }; 35 36 36 37 VS_OUT_SHADOW depthShadowVS(float4 position : POSITION, 37 38 uniform float4x4 world, 39 uniform float4x4 worldView, 38 40 uniform float4x4 worldViewProj) 39 41 { … … 41 43 OUT.hPosition = mul(worldViewProj, position); 42 44 OUT.Position = mul(world, position); 45 OUT.cPosition = mul(worldView, position); 43 46 return OUT; 44 47 } … … 48 51 uniform float4x4 lightView, 49 52 uniform float4x4 lightViewProj, 50 uniform sampler2D depthShadowMap ):COLOR 51 { 52 float bias = 0.0; 53 float4 shadowColor = float4(0.4, 0.4, 0.4, 1.0); 53 uniform float4x4 lightView2, 54 uniform float4x4 lightViewProj2, 55 uniform sampler2D depthShadowMap : register(s0), 56 uniform sampler2D depthShadowMap2 : register(s1)):COLOR 57 { 58 float bias = 0.06; 59 float4 shadowColor = float4(0.6, 0.6, 0.6, 1.0); 54 60 55 float4 light = 1; 61 float4 light1 = 1; 62 float4 light2 = 1; 63 float weight1 = 1; 64 float weight2 = 1; 56 65 57 float4 lightCamPos = mul(lightView, IN.Position); 58 float d = length(lightCamPos.xyz); 66 float4 lightCamPos1 = mul(lightView, IN.Position); 67 float d1 = length(lightCamPos1.xyz); 68 float4 lightScreenPos1 = mul(lightViewProj, IN.Position); 69 lightScreenPos1 = lightScreenPos1 / lightScreenPos1.w ; 70 lightScreenPos1 = ( lightScreenPos1 + 1.0 ) / 2.0; 71 lightScreenPos1.y = 1.0 - lightScreenPos1.y; 72 float4 storedDepth1 = tex2D(depthShadowMap, lightScreenPos1.xy); 73 if(storedDepth1.r + bias < d1) 74 light1=0; 59 75 60 float4 lightScreenPos = mul(lightViewProj, IN.Position);61 lightScreenPos = lightScreenPos / lightScreenPos.w ;62 float dist = length(lightScreenPos.xy);63 76 64 if(dist < 1.0 && lightCamPos.z < 0) 77 float4 lightCamPos2 = mul(lightView2, IN.Position); 78 float d2 = length(lightCamPos2.xyz); 79 80 81 float4 lightScreenPos2 = mul(lightViewProj2, IN.Position); 82 lightScreenPos2 = lightScreenPos2 / lightScreenPos2.w ; 83 84 if(abs(lightScreenPos2.x) < 0.99 && abs(lightScreenPos2.y) < 0.99 ) 65 85 { 66 lightScreenPos = ( lightScreenPos + 1.0 ) / 2.0; 67 lightScreenPos.y = 1.0 - lightScreenPos.y; 68 float4 storedDepth = tex2D(depthShadowMap, lightScreenPos.xy); 69 70 71 if(storedDepth.r + bias < d) 72 light = shadowColor; 73 if(storedDepth.r == 0) 74 light = 1; 86 lightScreenPos2 = ( lightScreenPos2 + 1.0 ) / 2.0; 87 lightScreenPos2.y = 1.0 - lightScreenPos2.y; 88 float4 storedDepth2 = tex2D(depthShadowMap2, lightScreenPos2.xy); 89 if(storedDepth2.r + bias < d2) 90 light2=0; 75 91 } 76 92 else 77 light = 1;93 weight2 = 0; 78 94 79 return light; 95 weight1 = 1 - weight2; 96 97 return saturate((light1*weight1 + light2*weight2) + shadowColor); 80 98 } 81 99
Note: See TracChangeset
for help on using the changeset viewer.