Advertisement
Guest User

Untitled

a guest
Sep 3rd, 2012
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.84 KB | None | 0 0
  1. //====================================================
  2. // Flash Light
  3. //====================================================
  4. // By EVOLVED
  5. // [URL]www.evolved-software.com[/URL]
  6. //====================================================
  7.  
  8. //--------------
  9. // un-tweaks
  10. //--------------
  11. matrix WorldVP:WorldViewProjection;
  12. matrix World:World;
  13. matrix ViewInv:ViewInverse;
  14. matrix ViewMat={0.5,0,0,0.5,0,-0.5,0,0.5,0,0,0.5,0.5,0,0,0,1};
  15.  
  16. //--------------
  17. // tweaks
  18. //--------------
  19. float4 LightPosition={150.0f, 150.0f, 0.0f, 1.0f};
  20. float LightRange=1000.0f;
  21. float BrightNess=1.0f;
  22. matrix LightProjMatrix;
  23. float3 LightPosition_1={0.0f, 50.0f, 0.0f};
  24. float3 LightColor_1={1.0f, 1.0f, 1.0f};
  25. float LightRange_1=55.0f;
  26. float3 LightPosition_2={50.0f, 50.0f, 0.0f};
  27. float3 LightColor_2={1.0f, 0.0f, 0.0f};
  28. float LightRange_2=55.0f;
  29. float3 LightPosition_3={100.0f, 50.0f, 0.0f};
  30. float3 LightColor_3={0.0f, 1.0f, 0.0f};
  31. float LightRange_3=55.0f;
  32. float3 LightPosition_4={150.0f, 50.0f, 0.0f};
  33. float3 LightColor_4={0.0f, 0.0f, 1.0f};
  34. float LightRange_4=55.0f;
  35. float3 LightPosition_5={0.0f, 50.0f, 50.0f};
  36. float3 LightColor_5={1.0f, 1.0f, 1.0f};
  37. float LightRange_5=55.0f;
  38. float3 LightPosition_6={50.0f, 50.0f, 50.0f};
  39. float3 LightColor_6={1.0f, 0.0f, 0.0f};
  40. float LightRange_6=55.0f;
  41. float4 FogColor={0.4f, 0.36f, 0.3f, 1.0f};
  42. float FogRange=4000.0f;
  43. float Alpha=0.0f;
  44.  
  45. //--------------
  46. // Textures
  47. //--------------
  48. texture BaseTX <string Name="";>;
  49. sampler Base = sampler_state
  50. {
  51. texture = <BaseTX>;
  52. };
  53. texture LightmapTX <string Name="";>;
  54. sampler Lightmap = sampler_state
  55. {
  56. texture = <LightmapTX>;
  57. };
  58. texture ProjetLightTX <string Name = "";>;
  59. sampler ProjetLight = sampler_state
  60. {
  61. Texture = <ProjetLightTX>;
  62. AddressU=Border;
  63. AddressV=Border;
  64. AddressW=Border;
  65. MagFilter=Linear;
  66. MinFilter=Point;
  67. MipFilter=None;A
  68. };
  69.  
  70. //--------------
  71. // structs
  72. //--------------
  73. struct Finput
  74. {
  75. float4 Pos:POSITION;
  76. float2 UVA:TEXCOORD0;
  77. float2 UVB:TEXCOORD1;
  78. float3 Normal:NORMAL;
  79. };
  80. struct Foutput
  81. {
  82. float4 OPos:POSITION;
  83. float2 TexA:TEXCOORD0;
  84. float2 TexB:TEXCOORD1;
  85. float3 Attenuation:TEXCOORD2;
  86. float Diffuse:TEXCOORD3;
  87. float4 Proj:TEXCOORD4;
  88. float Fog:FOG;
  89. };
  90. struct input
  91. {
  92. float4 Pos:POSITION;
  93. float2 UVA:TEXCOORD0;
  94. float3 Normal:NORMAL;
  95. };
  96. struct output
  97. {
  98. float4 OPos:POSITION;
  99. float2 TexA:TEXCOORD0;
  100. float3 Attenuation:TEXCOORD1;
  101. float Diffuse:TEXCOORD2;
  102. };
  103. struct output0
  104. {
  105. float4 OPos:POSITION;
  106. float2 TexA:TEXCOORD0;
  107. float3 Attenuation:TEXCOORD1;
  108. float Diffuse:TEXCOORD2;
  109. float3 Attenuation0:TEXCOORD3;
  110. float Diffuse0:TEXCOORD4;
  111. };
  112.  
  113. //--------------
  114. // vertex shader
  115. //--------------
  116. Foutput VS(Finput IN)
  117. {
  118. Foutput OUT;
  119. OUT.OPos=mul(IN.Pos,WorldVP);
  120. OUT.TexA=IN.UVA;
  121. OUT.TexB=IN.UVB;
  122. float3 Wnor=mul(IN.Normal,World); Wnor=normalize(Wnor);
  123. float3 WPos=mul(IN.Pos,World);
  124. float3 LightPos=LightPosition-WPos;
  125. OUT.Attenuation=-LightPos/LightRange;
  126. OUT.Diffuse=saturate(0.05f+mul(Wnor,LightPos)*0.05f);
  127. OUT.Proj=mul(ViewMat,mul(float4(LightPos,1),LightProjMatrix));
  128. float3 ViewPos=ViewInv[3].xyz-WPos;
  129. OUT.Fog=1-saturate(dot(ViewPos/FogRange,ViewPos/FogRange));
  130. return OUT;
  131. }
  132. output VS_L1(input IN)
  133. {
  134. output OUT;
  135. OUT.OPos=mul(IN.Pos,WorldVP);
  136. OUT.TexA=IN.UVA;
  137. float3 Wnor=mul(IN.Normal,World); Wnor=normalize(Wnor);
  138. float3 WPos=mul(IN.Pos,World);
  139. float3 LightPos=LightPosition_1-WPos;
  140. OUT.Attenuation=-LightPos/LightRange_1;
  141. OUT.Diffuse=saturate(0.05f+mul(Wnor,LightPos)*0.05f);
  142. return OUT;
  143. }
  144. output0 VS_L2(input IN)
  145. {
  146. output0 OUT;
  147. OUT.OPos=mul(IN.Pos,WorldVP);
  148. OUT.TexA=IN.UVA;
  149. float3 Wnor=mul(IN.Normal,World); Wnor=normalize(Wnor);
  150. float3 WPos=mul(IN.Pos,World);
  151. float3 LightPos=LightPosition_1-WPos;
  152. OUT.Attenuation=-LightPos/LightRange_1;
  153. OUT.Diffuse=saturate(0.05f+mul(Wnor,LightPos)*0.05f);
  154. LightPos=LightPosition_2-WPos;
  155. OUT.Attenuation0=-LightPos/LightRange_2;
  156. OUT.Diffuse0=saturate(0.05f+mul(Wnor,LightPos)*0.05f);
  157. return OUT;
  158. }
  159. output VS_L3(input IN)
  160. {
  161. output OUT;
  162. OUT.OPos=mul(IN.Pos,WorldVP);
  163. OUT.TexA=IN.UVA;
  164. float3 Wnor=mul(IN.Normal,World); Wnor=normalize(Wnor);
  165. float3 WPos=mul(IN.Pos,World);
  166. float3 LightPos=LightPosition_3-WPos;
  167. OUT.Attenuation=-LightPos/LightRange_3;
  168. OUT.Diffuse=saturate(0.05f+mul(Wnor,LightPos)*0.05f);
  169. return OUT;
  170. }
  171. output0 VS_L4(input IN)
  172. {
  173. output0 OUT;
  174. OUT.OPos=mul(IN.Pos,WorldVP);
  175. OUT.TexA=IN.UVA;
  176. float3 Wnor=mul(IN.Normal,World); Wnor=normalize(Wnor);
  177. float3 WPos=mul(IN.Pos,World);
  178. float3 LightPos=LightPosition_3-WPos;
  179. OUT.Attenuation=-LightPos/LightRange_3;
  180. OUT.Diffuse=saturate(0.05f+mul(Wnor,LightPos)*0.05f);
  181. LightPos=LightPosition_4-WPos;
  182. OUT.Attenuation0=-LightPos/LightRange_4;
  183. OUT.Diffuse0=saturate(0.05f+mul(Wnor,LightPos)*0.05f);
  184. return OUT;
  185. }
  186. output VS_L5(input IN)
  187. {
  188. output OUT;
  189. OUT.OPos=mul(IN.Pos,WorldVP);
  190. OUT.TexA=IN.UVA;
  191. float3 Wnor=mul(IN.Normal,World); Wnor=normalize(Wnor);
  192. float3 WPos=mul(IN.Pos,World);
  193. float3 LightPos=LightPosition_5-WPos;
  194. OUT.Attenuation=-LightPos/LightRange_5;
  195. OUT.Diffuse=saturate(0.05f+mul(Wnor,LightPos)*0.05f);
  196. return OUT;
  197. }
  198. output0 VS_L6(input IN)
  199. {
  200. output0 OUT;
  201. OUT.OPos=mul(IN.Pos,WorldVP);
  202. OUT.TexA=IN.UVA;
  203. float3 Wnor=mul(IN.Normal,World); Wnor=normalize(Wnor);
  204. float3 WPos=mul(IN.Pos,World);
  205. float3 LightPos=LightPosition_5-WPos;
  206. OUT.Attenuation=-LightPos/LightRange_5;
  207. OUT.Diffuse=saturate(0.05f+mul(Wnor,LightPos)*0.05f);
  208. LightPos=LightPosition_6-WPos;
  209. OUT.Attenuation0=-LightPos/LightRange_6;
  210. OUT.Diffuse0=saturate(0.05f+mul(Wnor,LightPos)*0.05f);
  211. return OUT;
  212. }
  213.  
  214. //--------------
  215. // pixel shader
  216. //--------------
  217. float4 PS(Foutput IN) : COLOR
  218. {
  219. float4 Texture=tex2D(Base,IN.TexA);
  220. float3 LightM=tex2D(Lightmap,IN.TexB);
  221. LightM +=LightM;
  222. float PixelLight=1-saturate(dot(IN.Attenuation,IN.Attenuation));
  223. PixelLight=(PixelLight*IN.Diffuse)*BrightNess;
  224. float3 FlashLight=tex2Dproj(ProjetLight,IN.Proj)*PixelLight;
  225. return float4(Texture*(LightM+FlashLight),Texture.w*Alpha);
  226. }
  227. float4 PS_L1(output IN) : COLOR
  228. {
  229. float4 Texture=tex2D(Base,IN.TexA);
  230. float PixelLight=1-saturate(dot(IN.Attenuation,IN.Attenuation));
  231. float3 Light=PixelLight*LightColor_1*IN.Diffuse;
  232. return float4(Texture*Light,Texture.w*Alpha);
  233. }
  234. float4 PS_L2(output0 IN) : COLOR
  235. {
  236. float4 Texture=tex2D(Base,IN.TexA);
  237. float PixelLight=1-saturate(dot(IN.Attenuation,IN.Attenuation));
  238. float3 Light=PixelLight*LightColor_1*IN.Diffuse;
  239. PixelLight=1-saturate(dot(IN.Attenuation0,IN.Attenuation0));
  240. Light=Light+PixelLight*LightColor_2*IN.Diffuse0;
  241. return float4(Texture*Light,Texture.w*Alpha);
  242. }
  243. float4 PS_L3(output IN) : COLOR
  244. {
  245. float4 Texture=tex2D(Base,IN.TexA);
  246. float PixelLight=1-saturate(dot(IN.Attenuation,IN.Attenuation));
  247. float3 Light=PixelLight*LightColor_3*IN.Diffuse;
  248. return float4(Texture*Light,Texture.w*Alpha);
  249. }
  250. float4 PS_L4(output0 IN) : COLOR
  251. {
  252. float4 Texture=tex2D(Base,IN.TexA);
  253. float PixelLight=1-saturate(dot(IN.Attenuation,IN.Attenuation));
  254. float3 Light=PixelLight*LightColor_3*IN.Diffuse;
  255. PixelLight=1-saturate(dot(IN.Attenuation0,IN.Attenuation0));
  256. Light=Light+PixelLight*LightColor_4*IN.Diffuse0;
  257. return float4(Texture*Light,Texture.w*Alpha);
  258. }
  259. float4 PS_L5(output IN) : COLOR
  260. {
  261. float4 Texture=tex2D(Base,IN.TexA);
  262. float PixelLight=1-saturate(dot(IN.Attenuation,IN.Attenuation));
  263. float3 Light=PixelLight*LightColor_5*IN.Diffuse;
  264. return float4(Texture*Light,Texture.w*Alpha);
  265. }
  266. float4 PS_L6(output0 IN) : COLOR
  267. {
  268. float4 Texture=tex2D(Base,IN.TexA);
  269. float PixelLight=1-saturate(dot(IN.Attenuation,IN.Attenuation));
  270. float3 Light=PixelLight*LightColor_5*IN.Diffuse;
  271. PixelLight=1-saturate(dot(IN.Attenuation0,IN.Attenuation0));
  272. Light=Light+PixelLight*LightColor_6*IN.Diffuse0;
  273. return float4(Texture*Light,Texture.w*Alpha);
  274. }
  275.  
  276. //--------------
  277. // techniques
  278. //--------------
  279. technique Light0
  280. {
  281. pass p0
  282. {
  283. vertexShader = compile vs_2_0 VS();
  284. pixelShader = compile ps_2_0 PS();
  285. FOGCOLOR=(FogColor);
  286. FOGENABLE=TRUE;
  287. }
  288. }
  289. technique Light1
  290. {
  291. pass p0
  292. {
  293. vertexShader = compile vs_2_0 VS();
  294. pixelShader = compile ps_2_0 PS();
  295. FOGCOLOR=(FogColor);
  296. FOGENABLE=TRUE;
  297. }
  298. pass p1
  299. {
  300. vertexShader = compile vs_2_0 VS_L1();
  301. pixelShader = compile ps_2_0 PS_L1();
  302. AlphaBlendEnable = True;
  303. SrcBlend = One;
  304. DestBlend = One;
  305. }
  306. }
  307. technique Light2
  308. {
  309. pass p0
  310. {
  311. vertexShader = compile vs_2_0 VS();
  312. pixelShader = compile ps_2_0 PS();
  313. FOGCOLOR=(FogColor);
  314. FOGENABLE=TRUE;
  315. }
  316. pass p1
  317. {
  318. vertexShader = compile vs_2_0 VS_L2();
  319. pixelShader = compile ps_2_0 PS_L2();
  320. AlphaBlendEnable = True;
  321. SrcBlend = One;
  322. DestBlend = One;
  323. }
  324. }
  325. technique Light3
  326. {
  327. pass p0
  328. {
  329. vertexShader = compile vs_2_0 VS();
  330. pixelShader = compile ps_2_0 PS();
  331. FOGCOLOR=(FogColor);
  332. FOGENABLE=TRUE;
  333. }
  334. pass p1
  335. {
  336. vertexShader = compile vs_2_0 VS_L2();
  337. pixelShader = compile ps_2_0 PS_L2();
  338. AlphaBlendEnable = True;
  339. SrcBlend = One;
  340. DestBlend = One;
  341. }
  342. pass p2
  343. {
  344. vertexShader = compile vs_2_0 VS_L3();
  345. pixelShader = compile ps_2_0 PS_L3();
  346. AlphaBlendEnable = True;
  347. SrcBlend = One;
  348. DestBlend = One;
  349. }
  350. }
  351. technique Light4
  352. {
  353. pass p0
  354. {
  355. vertexShader = compile vs_2_0 VS();
  356. pixelShader = compile ps_2_0 PS();
  357. FOGCOLOR=(FogColor);
  358. FOGENABLE=TRUE;
  359. }
  360. pass p1
  361. {
  362. vertexShader = compile vs_2_0 VS_L2();
  363. pixelShader = compile ps_2_0 PS_L2();
  364. AlphaBlendEnable = True;
  365. SrcBlend = One;
  366. DestBlend = One;
  367. }
  368. pass p2
  369. {
  370. vertexShader = compile vs_2_0 VS_L4();
  371. pixelShader = compile ps_2_0 PS_L4();
  372. AlphaBlendEnable = True;
  373. SrcBlend = One;
  374. DestBlend = One;
  375. }
  376. }
  377. technique Light5
  378. {
  379. pass p0
  380. {
  381. vertexShader = compile vs_2_0 VS();
  382. pixelShader = compile ps_2_0 PS();
  383. FOGCOLOR=(FogColor);
  384. FOGENABLE=TRUE;
  385. }
  386. pass p1
  387. {
  388. vertexShader = compile vs_2_0 VS_L2();
  389. pixelShader = compile ps_2_0 PS_L2();
  390. AlphaBlendEnable = True;
  391. SrcBlend = One;
  392. DestBlend = One;
  393. }
  394. pass p2
  395. {
  396. vertexShader = compile vs_2_0 VS_L4();
  397. pixelShader = compile ps_2_0 PS_L4();
  398. AlphaBlendEnable = True;
  399. SrcBlend = One;
  400. DestBlend = One;
  401. }
  402. pass p3
  403. {
  404. vertexShader = compile vs_2_0 VS_L5();
  405. pixelShader = compile ps_2_0 PS_L5();
  406. AlphaBlendEnable = True;
  407. SrcBlend = One;
  408. DestBlend = One;
  409. }
  410. }
  411. technique Light6
  412. {
  413. pass p0
  414. {
  415. vertexShader = compile vs_2_0 VS();
  416. pixelShader = compile ps_2_0 PS();
  417. FOGCOLOR=(FogColor);
  418. FOGENABLE=TRUE;
  419. }
  420. pass p1
  421. {
  422. vertexShader = compile vs_2_0 VS_L2();
  423. pixelShader = compile ps_2_0 PS_L2();
  424. AlphaBlendEnable = True;
  425. SrcBlend = One;
  426. DestBlend = One;
  427. }
  428. pass p2
  429. {
  430. vertexShader = compile vs_2_0 VS_L4();
  431. pixelShader = compile ps_2_0 PS_L4();
  432. AlphaBlendEnable = True;
  433. SrcBlend = One;
  434. DestBlend = One;
  435. }
  436. pass p3
  437. {
  438. vertexShader = compile vs_2_0 VS_L6();
  439. pixelShader = compile ps_2_0 PS_L6();
  440. AlphaBlendEnable = True;
  441. SrcBlend = One;
  442. DestBlend = One;
  443. }
  444. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement