[1347] | 1 | struct VS_OUT
|
---|
| 2 | {
|
---|
| 3 | float4 hPosition : POSITION;
|
---|
| 4 | float4 color : COLOR0;
|
---|
| 5 | };
|
---|
| 6 |
|
---|
| 7 | VS_OUT CauVS(float4 position : POSITION,
|
---|
| 8 | float4 texCoord : TEXCOORD0,
|
---|
| 9 | float4 color : COLOR0,
|
---|
| 10 | uniform float4x4 worldView,
|
---|
| 11 | uniform float4x4 Proj,
|
---|
| 12 | uniform float resolution,
|
---|
| 13 | uniform sampler2D PhotonHitMap : register(s0))
|
---|
| 14 | {
|
---|
| 15 | VS_OUT OUT;
|
---|
| 16 |
|
---|
| 17 | float4 cPosition;
|
---|
[1487] | 18 | float pixel = 1.0 / 32.0;
|
---|
[1347] | 19 | float2 uv = float2(position.x, 1.0 - position.y);
|
---|
| 20 | float4 pos = tex2Dlod(PhotonHitMap, float4(uv,0,0)).rgba;
|
---|
| 21 |
|
---|
| 22 | if(pos.a == 0)//no photon hit
|
---|
| 23 | {
|
---|
| 24 | OUT.color = float4(0,0,0,0);
|
---|
[1691] | 25 | OUT.hPosition = float4(0, 0, -1000000, 1);
|
---|
[1347] | 26 | }
|
---|
| 27 | else
|
---|
| 28 | {
|
---|
| 29 | float4 wPosition = float4(normalize(pos.xyz),1);
|
---|
| 30 | cPosition = mul(worldView, wPosition);
|
---|
| 31 | OUT.hPosition = mul(Proj, cPosition);
|
---|
| 32 |
|
---|
[1487] | 33 | float intensity = 0.25;
|
---|
[1355] | 34 |
|
---|
[1347] | 35 | //read four neighbours
|
---|
| 36 | float sumdist = 0;
|
---|
| 37 | float dist;
|
---|
[1487] | 38 | float valids = 0;
|
---|
| 39 | float4 pos1 = tex2Dlod(PhotonHitMap, float4(uv + float2(pixel, pixel),0,0));
|
---|
[1347] | 40 | if(pos1.a != 0)
|
---|
| 41 | {
|
---|
| 42 | dist = length(pos1.xyz - pos.xyz);
|
---|
[1487] | 43 | sumdist += dist;
|
---|
[1347] | 44 | valids++;
|
---|
[1691] | 45 | }
|
---|
[1487] | 46 |
|
---|
| 47 | float4 pos2 = tex2Dlod(PhotonHitMap, float4(uv + float2(-pixel, pixel),0,0));
|
---|
[1347] | 48 | if(pos2.a != 0)
|
---|
| 49 | {
|
---|
| 50 | dist = length(pos2.xyz - pos.xyz);
|
---|
[1487] | 51 | sumdist += dist;
|
---|
[1347] | 52 | valids++;
|
---|
| 53 | }
|
---|
[1487] | 54 |
|
---|
| 55 | float4 pos3 = tex2Dlod(PhotonHitMap, float4(uv + float2(pixel, -pixel),0,0));
|
---|
[1347] | 56 | if(pos3.a != 0)
|
---|
| 57 | {
|
---|
| 58 | dist = length(pos3.xyz - pos.xyz);
|
---|
[1487] | 59 | sumdist += dist;
|
---|
[1347] | 60 | valids++;
|
---|
| 61 | }
|
---|
[1487] | 62 |
|
---|
| 63 | float4 pos4 = tex2Dlod(PhotonHitMap, float4(uv + float2(-pixel, -pixel),0,0));
|
---|
[1347] | 64 | if(pos4.a != 0)
|
---|
| 65 | {
|
---|
| 66 | dist = length(pos4.xyz - pos.xyz);
|
---|
[1487] | 67 | sumdist += dist;
|
---|
[1347] | 68 | valids++;
|
---|
| 69 | }
|
---|
[1691] | 70 | //if(valids == 0) sumdist = 100000;
|
---|
| 71 | float avrdist = sumdist / valids;
|
---|
| 72 | //float maxdist = 10;
|
---|
| 73 | //intensity = max(maxdist - avrdist, 0.0) / maxdist;
|
---|
| 74 | intensity = 60.0 / (avrdist * avrdist * 3.14);
|
---|
[1487] | 75 | //intensity = valids / 4.0;//avrdist;
|
---|
| 76 |
|
---|
| 77 | //OUT.color = float4(1,1,1,intensity);
|
---|
| 78 | OUT.color = intensity;
|
---|
[1347] | 79 | }
|
---|
| 80 |
|
---|
| 81 | return OUT;
|
---|
| 82 | }
|
---|
| 83 |
|
---|
| 84 |
|
---|
| 85 | float4 CauPS(VS_OUT IN,
|
---|
| 86 | uniform float3 color ):COLOR
|
---|
| 87 | {
|
---|
| 88 | return IN.color * float4(color, 1);
|
---|
| 89 | }
|
---|
| 90 |
|
---|
| 91 |
|
---|