source: GTP/trunk/App/Demos/Illum/Ogre/Media/materials/programs/GameTools_Phong.hlsl @ 1671

Revision 1671, 8.7 KB checked in by szirmay, 18 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 worldViewIT)
113{
114  vertOUT OUT;
115  OUT.hPos = OUT.hPosition = mul(worldViewProj, position);
116  OUT.wPos = mul(worldView, position).xyz; 
117  OUT.mNormal = mul(worldViewIT, normal).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,
163           uniform float4x4 worldViewIT         
164
165            ) : COLOR0
166{
167   
168       
169    float3 N = IN.mNormal;
170    //float3 N = mul(worldViewIT, IN.mNormal);
171    N = normalize( N );
172    float3 pos = IN.wPos;
173   
174    float M = 3;
175   
176    float4 lightpositions[8];
177    float4 lightdirs[8];
178    float4 lightcolors[8];
179
180    lightpositions[0] = lightpos1;
181    lightpositions[1] = lightpos2;
182    lightpositions[2] = lightpos3;
183    lightpositions[3] = lightpos4;
184    lightpositions[4] = lightpos5;
185    lightpositions[5] = lightpos6;
186    lightpositions[6] = lightpos7;
187    lightpositions[7] = lightpos8;
188   
189    lightdirs[0] = lightdir1;
190    lightdirs[1] = lightdir2;
191    lightdirs[2] = lightdir3;
192    lightdirs[3] = lightdir4;
193    lightdirs[4] = lightdir5;
194    lightdirs[5] = lightdir6;
195    lightdirs[6] = lightdir7;
196    lightdirs[7] = lightdir8;
197
198    lightcolors[0] = lightcol1 * lightscale1;
199    lightcolors[1] = lightcol2 * lightscale2;
200    lightcolors[2] = lightcol3 * lightscale3;
201    lightcolors[3] = lightcol4 * lightscale4;
202    lightcolors[4] = lightcol5 * lightscale5;
203    lightcolors[5] = lightcol6 * lightscale6;
204    lightcolors[6] = lightcol7 * lightscale7;
205    lightcolors[7] = lightcol8 * lightscale8;
206
207        float4 texColor = tex2D(colorTexture, IN.texCoord);
208        if(length(texColor)==0)texColor = 1;
209    float4 I = 0;
210    I = texColor * ambientLight * ambient;
211        float maxlightangle = 90.0 / 180.0 * 3.14;
212    for(int i=0; i< M; i++)
213    {
214                float3 V = normalize(cameraPos - pos);
215                float3 L = lightpositions[i].xyz - pos * lightpositions[i].w;
216                float d = length(L);
217                L = normalize(L);
218                float3 H = normalize(L + V);
219               
220                float spotscale = 1.0;
221                if( lightdirs[i].w && lightpositions[i].w)//spotlight
222                {
223                        float lightangle;
224                        lightangle = acos(dot(-L, normalize(lightdirs[i].xyz)));                       
225                        spotscale = 1 - saturate(lightangle / maxlightangle);
226                        //spotscale *= spotscale;
227                }
228                       
229                float4 spec = spotscale * specular * lightcolors[i] * pow(dot(H, N), shininess);
230                float4 diff = spotscale * texColor * diffuse * lightcolors[i] * dot(L, N);
231                I += 1.0 / d / d * (spec + diff);       
232                //I+= spotscale;
233    }
234
235        //return texColor;
236        //return float4(N,1);
237    return I;
238
239}
240
241
242
243float4 PhongPlaneReflectPS( vertOUT IN,
244           uniform float3 cameraPos,
245           uniform float3 lightpos1,
246           uniform float3 lightpos2,
247           uniform float3 lightpos3,
248           uniform float3 lightpos4,
249           uniform float3 lightpos5,
250           uniform float3 lightpos6,
251           uniform float3 lightpos7,
252           uniform float3 lightpos8,
253           uniform float4 lightcol1,
254           uniform float4 lightcol2,
255           uniform float4 lightcol3,
256           uniform float4 lightcol4,
257           uniform float4 lightcol5,
258           uniform float4 lightcol6,
259           uniform float4 lightcol7,
260           uniform float4 lightcol8,
261           uniform float4 ambientLight,
262           uniform float shininess,
263           uniform float4 specular,
264           uniform float4 diffuse,
265           uniform float4 ambient,
266           uniform sampler2D reflectionTex,
267           uniform float reflectionAmount         
268
269            ) : COLOR0
270{
271   
272       
273    float3 N = IN.mNormal;
274    N = normalize( N );
275    float3 pos = IN.wPos;
276   
277    float M = 4;
278   
279    float3 lightpositions[8];
280    float4 lightcolors[8];
281
282    lightpositions[0] = lightpos1;
283    lightpositions[1] = lightpos2;
284    lightpositions[2] = lightpos3;
285    lightpositions[3] = lightpos4;
286    lightpositions[4] = lightpos5;
287    lightpositions[5] = lightpos6;
288    lightpositions[6] = lightpos7;
289    lightpositions[7] = lightpos8;
290
291    lightcolors[0] = lightcol1;
292    lightcolors[1] = lightcol2;
293    lightcolors[2] = lightcol3;
294    lightcolors[3] = lightcol4;
295    lightcolors[4] = lightcol5;
296    lightcolors[5] = lightcol6;
297    lightcolors[6] = lightcol7;
298    lightcolors[7] = lightcol8;
299
300    float4 I = ambientLight * ambient;
301       
302    for(int i=0; i< M; i++)
303    {
304        float3 V = normalize(cameraPos - pos);
305        float3 L = lightpositions[i] - pos;
306        float d = length(L);
307        L = normalize(L);
308        float3 H = normalize(L + V);
309        float lightscale = 3;
310        float4 spec = specular * lightcolors[i] * pow(dot(H, N), shininess) * lightscale;
311        float4 diff = diffuse * lightcolors[i] * abs(dot(L, N)) * lightscale;
312        float range = 4.0;
313        I += 1.0 / d * (spec + diff);   
314    }
315   
316    float2 uv = (IN.hPosition.xy/IN.hPosition.w + 1.0) * 0.5;
317    uv.y = 1.0 - uv.y;
318    float4 reflection = tex2D(reflectionTex, uv);
319    I *= reflectionAmount * reflection + (1 - reflectionAmount);
320
321//I = reflection;
322//return 1;
323    return I;
324
325}
Note: See TracBrowser for help on using the repository browser.