1 | #define D 128
|
---|
2 | //#define Dper4Pi 14.33
|
---|
3 |
|
---|
4 | struct VertexOut
|
---|
5 | {
|
---|
6 | float4 Position :POSITION;
|
---|
7 | float4 Color :COLOR0;
|
---|
8 | float2 TexCoord :TEXCOORD;
|
---|
9 | int ID :TEXCOORD1;
|
---|
10 | };
|
---|
11 |
|
---|
12 |
|
---|
13 | VertexOut VertexProgram(
|
---|
14 | float4 Position : POSITION,
|
---|
15 | float2 TexCoord : TEXCOORD0,
|
---|
16 | float4 Color : COLOR0,
|
---|
17 | uniform float4x4 ModelViewProj:state.matrix.mvp
|
---|
18 | )
|
---|
19 | {
|
---|
20 | VertexOut Out;
|
---|
21 |
|
---|
22 | Out.TexCoord=TexCoord;
|
---|
23 | //Out.Position=mul(ModelViewProj, Position);
|
---|
24 | Out.Position=Position;
|
---|
25 | Out.ID=TexCoord.x;
|
---|
26 | return Out;
|
---|
27 | }
|
---|
28 |
|
---|
29 | float4 FragmentProgram(VertexOut In,
|
---|
30 | uniform samplerRECT IllumTexture,
|
---|
31 | uniform samplerRECT TauTexture,
|
---|
32 | uniform samplerRECT VisMap,
|
---|
33 | uniform samplerRECT DirectIllumTexture,
|
---|
34 | uniform samplerRECT Phase,
|
---|
35 | uniform float4 EyeDirsWeights ,
|
---|
36 | uniform float3 Alb_Op) : COLOR
|
---|
37 | {
|
---|
38 |
|
---|
39 | float4 Color=float4(0,0,0,1);
|
---|
40 |
|
---|
41 | int particle=In.ID;
|
---|
42 | int direction=floor(EyeDirsWeights.x);
|
---|
43 | float4 I;
|
---|
44 |
|
---|
45 | float ds=texRECT(VisMap,float2(particle,direction)).g;
|
---|
46 | float tau=texRECT(TauTexture,float2(particle,1)).r;
|
---|
47 | float alpha=1-exp(-ds*tau);
|
---|
48 | //float alpha=Alb_Op.y;
|
---|
49 |
|
---|
50 | I=texRECT(IllumTexture,float2(particle,direction));
|
---|
51 | Color=texRECT(DirectIllumTexture,float2(particle,direction))+(1-alpha)*I;
|
---|
52 |
|
---|
53 | for(int d=0;d<D;d++)
|
---|
54 | {
|
---|
55 | I=texRECT(IllumTexture,float2(particle,d));
|
---|
56 | Color+=I*(alpha*Alb_Op.z*texRECT(Phase,float2(d,direction)).r);
|
---|
57 | }
|
---|
58 |
|
---|
59 |
|
---|
60 | return Color;
|
---|
61 | } |
---|