source: GTP/branches/IllumWPdeliver2008dec/IlluminationWP/demos/OgreGames/CarGame/Media/materials/programs/GameTools_Caustic.hlsl @ 3255

Revision 3255, 1.2 KB checked in by szirmay, 15 years ago (diff)
Line 
1
2float readDistanceCubeMap(samplerCUBE dcm, float3 coord)               
3{
4        float dist = texCUBE(dcm, float3(coord.xy, - coord.z)).r;
5        if(dist == 0) dist = 10000; ///sky
6        return dist;
7}
8
9struct VertOut
10{
11        float4 hPosition        :POSITION;     
12        float2 texCoord         :TEXCOORD;     
13        float3 wPosition        :TEXCOORD1;     
14};
15
16
17VertOut deaultVS(float4 position : POSITION,
18                float2 texCoord : TEXCOORD0,
19                uniform float4x4 worldViewProj,
20                uniform float4x4 world)
21{
22  VertOut OUT;
23  OUT.texCoord = texCoord;
24  OUT.hPosition = mul(worldViewProj, position); 
25  OUT.wPosition = mul(world, position).xyz;
26  return OUT;   
27}
28
29float4 deaultPS(VertOut IN,
30                                uniform samplerCUBE CubeMap : register(s0),
31                                uniform samplerCUBE distanceCube : register(s1),
32                                uniform float3 cubeMapCameraPosition,
33                                uniform float attenuation):COLOR
34{
35        float4 Color = float4(1,1,1,1);
36       
37        float3 dir = IN.wPosition - cubeMapCameraPosition;
38        float4 caustic = texCUBE(CubeMap, float3(dir.xy,-dir.z) );
39        float mydist = length(dir);
40        float dist = readDistanceCubeMap(distanceCube, dir);
41       
42        float EPSILON = 0.1;
43
44        //if(mydist > dist + EPSILON) caustic = 0;
45         caustic *= max(attenuation - mydist, 0) / attenuation;
46               
47        Color = caustic;
48               
49        return Color;
50}
Note: See TracBrowser for help on using the repository browser.