source: GTP/branches/IllumWPdeliver2008dec/IlluminationWP/demos/OgreDemos/media/materials/programs/GameTools_Phong.hlsl @ 3255

Revision 3255, 8.6 KB checked in by szirmay, 15 years ago (diff)
Line 
1
2
3struct vertOUT
4{
5        float4 hPos :POSITION;
6        float4 hPosition :TEXCOORD4;
7        float3 wPos     :TEXCOORD1;
8        float2 texCoord :TEXCOORD0;
9        float3 mNormal :TEXCOORD2;
10};
11
12vertOUT PhongVS(float4 position : POSITION,
13                float3 normal   : NORMAL,
14                half3 tangent   : TEXCOORD1,
15                float2 texCoord : TEXCOORD0,                   
16                uniform float4x4 worldViewProj,
17                uniform float4x4 world)
18{
19  vertOUT OUT;
20  OUT.hPos = OUT.hPosition = mul(worldViewProj, position);
21  OUT.wPos = mul(world, position).xyz; 
22  OUT.mNormal = mul(world, normal);
23  //OUT.mNormal = normal;
24  OUT.texCoord = texCoord;
25  return OUT;
26}
27
28
29
30float4 PhongPS( vertOUT IN,
31           uniform float3 cameraPos,
32           uniform float3 lightpos1,
33           uniform float3 lightpos2,
34           uniform float3 lightpos3,
35           uniform float3 lightpos4,
36           uniform float3 lightpos5,
37           uniform float3 lightpos6,
38           uniform float3 lightpos7,
39           uniform float3 lightpos8,
40           uniform float4 lightcol1,
41           uniform float4 lightcol2,
42           uniform float4 lightcol3,
43           uniform float4 lightcol4,
44           uniform float4 lightcol5,
45           uniform float4 lightcol6,
46           uniform float4 lightcol7,
47           uniform float4 lightcol8,
48           uniform float4 ambientLight,
49           uniform float shininess,
50           uniform float4 specular,
51           uniform float4 diffuse,
52           uniform float4 ambient           
53
54            ) : COLOR0
55{
56   
57       
58    float3 N = IN.mNormal;
59    N = normalize( N );
60    float3 pos = IN.wPos;
61   
62    float M = 4;
63   
64    float3 lightpositions[8];
65    float4 lightcolors[8];
66
67    lightpositions[0] = lightpos1;
68    lightpositions[1] = lightpos2;
69    lightpositions[2] = lightpos3;
70    lightpositions[3] = lightpos4;
71    lightpositions[4] = lightpos5;
72    lightpositions[5] = lightpos6;
73    lightpositions[6] = lightpos7;
74    lightpositions[7] = lightpos8;
75
76    lightcolors[0] = lightcol1;
77    lightcolors[1] = lightcol2;
78    lightcolors[2] = lightcol3;
79    lightcolors[3] = lightcol4;
80    lightcolors[4] = lightcol5;
81    lightcolors[5] = lightcol6;
82    lightcolors[6] = lightcol7;
83    lightcolors[7] = lightcol8;
84
85    float4 I = ambientLight * ambient;
86       
87    for(int i=0; i< M; i++)
88    {
89        float3 V = normalize(cameraPos - pos);
90        float3 L = lightpositions[i] - pos;
91        float d = length(L);
92        L = normalize(L);
93        float3 H = normalize(L + V);
94        float lightscale = 3.0;
95        float4 spec = specular * lightcolors[i] * pow(dot(H, N), shininess) * lightscale;
96        float4 diff = diffuse * lightcolors[i] * abs(dot(L, N)) * lightscale;
97        float range = 4.0;
98        I += 1.0 / d * (spec + diff);   
99    }
100
101//return 1;
102    return I;
103
104}
105
106vertOUT PhongViewSpaceVS(float4 position : POSITION,
107                float3 normal   : NORMAL,
108                half3 tangent   : TEXCOORD1,
109                float2 texCoord : TEXCOORD0,                   
110                uniform float4x4 worldViewProj,
111                uniform float4x4 worldView,
112                uniform float4x4 worldViewI)
113{
114  vertOUT OUT;
115  OUT.hPos = OUT.hPosition = mul(worldViewProj, position);
116  OUT.wPos = mul(worldView, position).xyz; 
117  OUT.mNormal = normal;//mul(normal, worldViewI).xyz;
118  //OUT.mNormal = normal;
119  OUT.texCoord = texCoord; 
120  return OUT;
121}
122
123float4 PhongTexturedPS( vertOUT IN,
124                uniform float3 cameraPos,
125       uniform float4 lightpos1,
126           uniform float4 lightpos2,
127           uniform float4 lightpos3,
128           uniform float4 lightpos4,
129           uniform float4 lightpos5,
130           uniform float4 lightpos6,
131           uniform float4 lightpos7,
132           uniform float4 lightpos8,
133           uniform float4 lightdir1,
134           uniform float4 lightdir2,
135           uniform float4 lightdir3,
136           uniform float4 lightdir4,
137           uniform float4 lightdir5,
138           uniform float4 lightdir6,
139           uniform float4 lightdir7,
140           uniform float4 lightdir8,
141           uniform float lightscale1,
142           uniform float lightscale2,
143           uniform float lightscale3,
144           uniform float lightscale4,
145           uniform float lightscale5,
146           uniform float lightscale6,
147           uniform float lightscale7,
148           uniform float lightscale8,
149           uniform float4 lightcol1,
150           uniform float4 lightcol2,
151           uniform float4 lightcol3,
152           uniform float4 lightcol4,
153           uniform float4 lightcol5,
154           uniform float4 lightcol6,
155           uniform float4 lightcol7,
156           uniform float4 lightcol8,
157           uniform float4 ambientLight,
158           uniform float shininess,
159           uniform float4 specular,
160           uniform float4 diffuse,
161           uniform float4 ambient,
162           uniform sampler2D colorTexture ) : COLOR0
163{
164   
165       
166    float3 N = IN.mNormal;
167    N = normalize( N );
168    float3 pos = IN.wPos;
169   
170    float M = 3;
171   
172    float4 lightpositions[8];
173    float4 lightdirs[8];
174    float4 lightcolors[8];
175
176    lightpositions[0] = lightpos1;
177    lightpositions[1] = lightpos2;
178    lightpositions[2] = lightpos3;
179    lightpositions[3] = lightpos4;
180    lightpositions[4] = lightpos5;
181    lightpositions[5] = lightpos6;
182    lightpositions[6] = lightpos7;
183    lightpositions[7] = lightpos8;
184   
185    lightdirs[0] = lightdir1;
186    lightdirs[1] = lightdir2;
187    lightdirs[2] = lightdir3;
188    lightdirs[3] = lightdir4;
189    lightdirs[4] = lightdir5;
190    lightdirs[5] = lightdir6;
191    lightdirs[6] = lightdir7;
192    lightdirs[7] = lightdir8;
193
194    lightcolors[0] = lightcol1 * lightscale1;
195    lightcolors[1] = lightcol2 * lightscale2;
196    lightcolors[2] = lightcol3 * lightscale3;
197    lightcolors[3] = lightcol4 * lightscale4;
198    lightcolors[4] = lightcol5 * lightscale5;
199    lightcolors[5] = lightcol6 * lightscale6;
200    lightcolors[6] = lightcol7 * lightscale7;
201    lightcolors[7] = lightcol8 * lightscale8;
202
203        float4 texColor = tex2D(colorTexture, IN.texCoord);
204        if(length(texColor)==0)texColor = 1;
205    float4 I = 0;
206    I = texColor * ambientLight * ambient;
207        float maxlightangle = 90.0 / 180.0 * 3.14;
208    for(int i=0; i< M; i++)
209    {
210                float3 V = normalize(cameraPos - pos);
211                float3 L = lightpositions[i].xyz - pos * lightpositions[i].w;
212                float d = length(L);
213                L = normalize(L);
214                float3 H = normalize(L + V);
215               
216                float spotscale = 1.0;
217                if( lightdirs[i].w && lightpositions[i].w)//spotlight
218                {
219                        float lightangle;
220                        lightangle = acos(dot(-L, normalize(lightdirs[i].xyz)));                       
221                        spotscale = 1 - saturate(lightangle / maxlightangle);
222                        //spotscale *= spotscale;
223                }
224                       
225                float4 spec = spotscale * specular * lightcolors[i] * pow(dot(H, N), shininess);
226                float4 diff = spotscale * texColor * diffuse * lightcolors[i] * dot(L, N);
227                I += 1.0 / d / d * (spec + diff);       
228                //I+= spotscale;
229    }
230
231        //return texColor;
232        //return float4(N,1);
233    return I;
234
235}
236
237
238
239float4 PhongPlaneReflectPS( vertOUT IN,
240           uniform float3 cameraPos,
241           uniform float3 lightpos1,
242           uniform float3 lightpos2,
243           uniform float3 lightpos3,
244           uniform float3 lightpos4,
245           uniform float3 lightpos5,
246           uniform float3 lightpos6,
247           uniform float3 lightpos7,
248           uniform float3 lightpos8,
249           uniform float4 lightcol1,
250           uniform float4 lightcol2,
251           uniform float4 lightcol3,
252           uniform float4 lightcol4,
253           uniform float4 lightcol5,
254           uniform float4 lightcol6,
255           uniform float4 lightcol7,
256           uniform float4 lightcol8,
257           uniform float4 ambientLight,
258           uniform float shininess,
259           uniform float4 specular,
260           uniform float4 diffuse,
261           uniform float4 ambient,
262           uniform sampler2D reflectionTex,
263           uniform float reflectionAmount         
264
265            ) : COLOR0
266{
267   
268       
269    float3 N = IN.mNormal;
270    N = normalize( N );
271    float3 pos = IN.wPos;
272   
273    float M = 4;
274   
275    float3 lightpositions[8];
276    float4 lightcolors[8];
277
278    lightpositions[0] = lightpos1;
279    lightpositions[1] = lightpos2;
280    lightpositions[2] = lightpos3;
281    lightpositions[3] = lightpos4;
282    lightpositions[4] = lightpos5;
283    lightpositions[5] = lightpos6;
284    lightpositions[6] = lightpos7;
285    lightpositions[7] = lightpos8;
286
287    lightcolors[0] = lightcol1;
288    lightcolors[1] = lightcol2;
289    lightcolors[2] = lightcol3;
290    lightcolors[3] = lightcol4;
291    lightcolors[4] = lightcol5;
292    lightcolors[5] = lightcol6;
293    lightcolors[6] = lightcol7;
294    lightcolors[7] = lightcol8;
295
296    float4 I = ambientLight * ambient;
297       
298    for(int i=0; i< M; i++)
299    {
300        float3 V = normalize(cameraPos - pos);
301        float3 L = lightpositions[i] - pos;
302        float d = length(L);
303        L = normalize(L);
304        float3 H = normalize(L + V);
305        float lightscale = 3;
306        float4 spec = specular * lightcolors[i] * pow(dot(H, N), shininess) * lightscale;
307        float4 diff = diffuse * lightcolors[i] * abs(dot(L, N)) * lightscale;
308        float range = 4.0;
309        I += 1.0 / d * (spec + diff);   
310    }
311   
312    float2 uv = (IN.hPosition.xy/IN.hPosition.w + 1.0) * 0.5;
313    uv.y = 1.0 - uv.y;
314    float4 reflection = tex2D(reflectionTex, uv);
315    I *= reflectionAmount * reflection + (1 - reflectionAmount);
316
317//I = reflection;
318//return 1;
319    return I;
320
321}
Note: See TracBrowser for help on using the repository browser.