home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2005 February / Gamestar_70_2005-02_dvd.iso / DVDStar / Editace / ogierinstall_103.exe / XRShader_FP20SS_SpecDiffuseProj.fp < prev    next >
Text File  |  2004-12-21  |  9KB  |  302 lines

  1. !!ARBfp1.0
  2. OPTION NV_fragment_program2;
  3.  
  4. #/*»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»*\
  5. #    File:            Program for CXR_Shader::RenderShading_FP20SS
  6. #                    
  7. #    Author:            Magnus H÷gdahl
  8. #                    
  9. #    Copyright:        Starbreeze AB 2004
  10. #                    
  11. #    History:
  12. #
  13. #\*____________________________________________________________________________________________*/
  14.  
  15.  
  16. #-----------------------------------------
  17. #Texture0 = Diffuse Map
  18. #Texture1 = Projection Map
  19. #Texture2 = Normal+Specular map
  20. #Texture3 = Normalization cube Map
  21. #Texture5 = Shadow mask
  22.  
  23. #TexCoord0 = Diffuse/Normal/Specular tex coord
  24. #TexCoord1 = Animated model space pixel position
  25. #TexCoord3 = Interpolated tangent space light vector (IPTSLV)
  26. #TexCoord4 = Interpolated tangent space eye vector (IPTSEV)
  27. #TexCoord5 = Shadow mask tex coord
  28. #TexCoord7 = ProjMap tex coord
  29.  
  30. #-----------------------------------------
  31.  
  32.  
  33. OUTPUT oCol = result.color;
  34.  
  35. ATTRIB vCol = fragment.color;
  36.  
  37. ATTRIB DiffuseTexCoord = fragment.texcoord[0];
  38. ATTRIB NormalMapTexCoord  = fragment.texcoord[0];
  39. ATTRIB SpecularTexCoord  = fragment.texcoord[0];
  40. ATTRIB ShadowMaskTexCoord  = fragment.texcoord[5];
  41. ATTRIB ProjMapTexCoord = fragment.texcoord[7];
  42.  
  43. ATTRIB PixelPosition = fragment.texcoord[1];
  44. ATTRIB IPTSLV = fragment.texcoord[3];
  45. ATTRIB IPTSEV = fragment.texcoord[4];
  46.  
  47. PARAM LightPosition = program.env[0];    # { X, Y, Z, 0 }
  48. PARAM LightRange = program.env[1];    # { 1.0 / Range, Range, 1.0 / Range^2, Range^2 }
  49. PARAM LightColor = program.env[2];    # { R, G, B, 0 } (0-2 range)
  50. PARAM SpecColor1 = program.env[3];    # { R, G, B, SpecPower } (0-2 range)
  51. PARAM PixelUV = program.env[4];
  52.  
  53. PARAM const_val = { 0.5, 1.0, 2.0, 4.0 };
  54. PARAM const_val2 = { 0, 0.25, 4, 0.125 };
  55. PARAM const_val3 = { 256, 0.02000, 0.125, 0.00001 };
  56.  
  57.  
  58. PARAM SMOfs0 = { 0.5, 1.5, 0, 0 };
  59. PARAM SMOfs1 = { 1.5, -0.5, 0, 0 };
  60. PARAM SMOfs2 = { -0.5, -1.5, 0, 0 };
  61. PARAM SMOfs3 = { -1.5, 0.5, 0, 0 };
  62. PARAM SMOfs4 = { 2.5, 1.5, 0, 0 };
  63. PARAM SMOfs5 = { 1.5, -2.5, 0, 0 };
  64. PARAM SMOfs6 = { -2.5, -1.5, 0, 0 };
  65. PARAM SMOfs7 = { -1.5, 2.5, 0, 0 };
  66.  
  67. PARAM SMOfs8 = { 3.5, 0.5, 0, 0 };
  68. PARAM SMOfs9 = { 0.5, -3.5, 0, 0 };
  69. PARAM SMOfs10 = { -3.5, -0.5, 0, 0 };
  70. PARAM SMOfs11 = { -0.5, 3.5, 0, 0 };
  71. PARAM SMOfs12 = { 3.5, 2.5, 0, 0 };
  72. PARAM SMOfs13 = { 2.5, -3.5, 0, 0 };
  73. PARAM SMOfs14 = { -3.5, -2.5, 0, 0 };
  74. PARAM SMOfs15 = { -2.5, 3.5, 0, 0 };
  75.  
  76.  
  77. TEMP LV;
  78. SHORT TEMP Attn;
  79. SHORT TEMP ProjMapTexel;
  80. SHORT TEMP DiffuseTexel;
  81. SHORT TEMP NormalMapTexel;
  82. SHORT TEMP ShadowMaskTexel;
  83. SHORT TEMP DepthStencilTexel;
  84. SHORT TEMP TSLV;        # Tangent space light vector
  85. SHORT TEMP TSEV;        # Tangent space eye vector
  86. SHORT TEMP Reflection;
  87. SHORT TEMP r0;
  88. SHORT TEMP r1;
  89. TEMP smtc0;                # Shadow mask tex coord
  90. TEMP smtc1;
  91. TEMP depth;
  92. TEMP depthref;
  93. TEMP dstexel;
  94. TEMP depthtolerance;
  95. SHORT TEMP sm;
  96. SHORT TEMP smpacked0;
  97. SHORT TEMP smpacked1;
  98. SHORT TEMP smpacked2;
  99. SHORT TEMP smpacked3;
  100.  
  101. #-----------------------------------------
  102. # Fetch Textures
  103. TEX DiffuseTexel, DiffuseTexCoord, texture[0], 2D;    # Sample diffusemap
  104. TEX NormalMapTexel, NormalMapTexCoord, texture[2], 2D;    # Sample normalmap
  105.  
  106. #-----------------------------------------
  107. # Calc Shadow mask tex coord
  108. RCP smtc0.w, ShadowMaskTexCoord.w;
  109. MUL smtc0.xy, ShadowMaskTexCoord, smtc0.w;
  110. ADD smtc0.xy, smtc0, 0.000001;
  111.  
  112. MUL depthtolerance.a, const_val3.y, ShadowMaskTexCoord.w;
  113.  
  114. TEX ShadowMaskTexel, smtc0, texture[5], 2D;
  115. #ADD smtc1.xy, smtc0, const_val3.w;
  116. TEX dstexel, smtc0, texture[6], 2D;        # Sample depthstencil map
  117. MOV depthref.rgb, dstexel;
  118. MAD depthref.a, dstexel.r, const_val3.x, dstexel.g;
  119.  
  120. # -----------------------------------------------
  121. MAD smtc1.xy, SMOfs0, PixelUV, smtc0;
  122. TEX sm.a, smtc1, texture[5], 2D;
  123. TEX dstexel, smtc1, texture[6], 2D;
  124. MAD depth.r, dstexel.r, const_val3.x, dstexel.g;
  125. MOV smpacked0.r, sm.a;
  126.  
  127. MAD smtc1.xy, SMOfs1, PixelUV, smtc0;
  128. TEX sm.a, smtc1, texture[5], 2D;
  129. TEX dstexel, smtc1, texture[6], 2D;
  130. MAD depth.g, dstexel.r, const_val3.x, dstexel.g;
  131. MOV smpacked0.g, sm.a;
  132.  
  133. MAD smtc1.xy, SMOfs2, PixelUV, smtc0;
  134. TEX sm.a, smtc1, texture[5], 2D;
  135. TEX dstexel, smtc1, texture[6], 2D;
  136. MAD depth.b, dstexel.r, const_val3.x, dstexel.g;
  137. MOV smpacked0.b, sm.a;
  138.  
  139. MAD smtc1.xy, SMOfs3, PixelUV, smtc0;
  140. TEX smpacked0.a, smtc1, texture[5], 2D;
  141. TEX dstexel, smtc1, texture[6], 2D;
  142. MAD depth.a, dstexel.r, const_val3.x, dstexel.g;
  143. #MOV sm.a, sm.a;
  144.  
  145. SUB depth, depth, depthref.a;
  146. MUL_SAT depth, |depth|, depthtolerance.a;
  147. LRP smpacked0, depth, ShadowMaskTexel.a, smpacked0;
  148.  
  149. # -----------------------------------------------
  150. MAD smtc1.xy, SMOfs4, PixelUV, smtc0;
  151. TEX sm.a, smtc1, texture[5], 2D;
  152. TEX dstexel, smtc1, texture[6], 2D;
  153. MAD depth.r, dstexel.r, const_val3.x, dstexel.g;
  154. MOV smpacked1.r, sm.a;
  155.  
  156. MAD smtc1.xy, SMOfs5, PixelUV, smtc0;
  157. TEX sm.a, smtc1, texture[5], 2D;
  158. TEX dstexel, smtc1, texture[6], 2D;
  159. MAD depth.g, dstexel.r, const_val3.x, dstexel.g;
  160. MOV smpacked1.g, sm.a;
  161.  
  162. MAD smtc1.xy, SMOfs6, PixelUV, smtc0;
  163. TEX sm.a, smtc1, texture[5], 2D;
  164. TEX dstexel, smtc1, texture[6], 2D;
  165. MAD depth.b, dstexel.r, const_val3.x, dstexel.g;
  166. MOV smpacked1.b, sm.a;
  167.  
  168. MAD smtc1.xy, SMOfs7, PixelUV, smtc0;
  169. TEX smpacked1.a, smtc1, texture[5], 2D;
  170. TEX dstexel, smtc1, texture[6], 2D;
  171. MAD depth.a, dstexel.r, const_val3.x, dstexel.g;
  172. #MOV sm.a, sm.a;
  173.  
  174. SUB depth, depth, depthref.a;
  175. MUL_SAT depth, |depth|, depthtolerance.a;
  176. LRP smpacked1, depth, ShadowMaskTexel.a, smpacked1;
  177.  
  178. # -----------------------------------------------
  179. MAD smtc1.xy, SMOfs8, PixelUV, smtc0;
  180. TEX sm.a, smtc1, texture[5], 2D;
  181. TEX dstexel, smtc1, texture[6], 2D;
  182. MAD depth.r, dstexel.r, const_val3.x, dstexel.g;
  183. MOV smpacked2.r, sm.a;
  184.  
  185. MAD smtc1.xy, SMOfs9, PixelUV, smtc0;
  186. TEX sm.a, smtc1, texture[5], 2D;
  187. TEX dstexel, smtc1, texture[6], 2D;
  188. MAD depth.g, dstexel.r, const_val3.x, dstexel.g;
  189. MOV smpacked2.g, sm.a;
  190.  
  191. MAD smtc1.xy, SMOfs10, PixelUV, smtc0;
  192. TEX sm.a, smtc1, texture[5], 2D;
  193. TEX dstexel, smtc1, texture[6], 2D;
  194. MAD depth.b, dstexel.r, const_val3.x, dstexel.g;
  195. MOV smpacked2.b, sm.a;
  196.  
  197. MAD smtc1.xy, SMOfs11, PixelUV, smtc0;
  198. TEX smpacked2.a, smtc1, texture[5], 2D;
  199. TEX dstexel, smtc1, texture[6], 2D;
  200. MAD depth.a, dstexel.r, const_val3.x, dstexel.g;
  201. #MOV sm.a, sm.a;
  202.  
  203. SUB depth, depth, depthref.a;
  204. MUL_SAT depth, |depth|, depthtolerance.a;
  205. LRP smpacked2, depth, ShadowMaskTexel.a, smpacked2;
  206.  
  207. # -----------------------------------------------
  208. MAD smtc1.xy, SMOfs12, PixelUV, smtc0;
  209. TEX sm.a, smtc1, texture[5], 2D;
  210. TEX dstexel, smtc1, texture[6], 2D;
  211. MAD depth.r, dstexel.r, const_val3.x, dstexel.g;
  212. MOV smpacked3.r, sm.a;
  213.  
  214. MAD smtc1.xy, SMOfs13, PixelUV, smtc0;
  215. TEX sm.a, smtc1, texture[5], 2D;
  216. TEX dstexel, smtc1, texture[6], 2D;
  217. MAD depth.g, dstexel.r, const_val3.x, dstexel.g;
  218. MOV smpacked3.g, sm.a;
  219.  
  220. MAD smtc1.xy, SMOfs14, PixelUV, smtc0;
  221. TEX sm.a, smtc1, texture[5], 2D;
  222. TEX dstexel, smtc1, texture[6], 2D;
  223. MAD depth.b, dstexel.r, const_val3.x, dstexel.g;
  224. MOV smpacked3.b, sm.a;
  225.  
  226. MAD smtc1.xy, SMOfs15, PixelUV, smtc0;
  227. TEX smpacked3.a, smtc1, texture[5], 2D;
  228. TEX dstexel, smtc1, texture[6], 2D;
  229. MAD depth.a, dstexel.r, const_val3.x, dstexel.g;
  230. #MOV sm.a, sm.a;
  231.  
  232. SUB depth, depth, depthref.a;
  233. MUL_SAT depth, |depth|, depthtolerance.a;
  234. LRP smpacked3, depth, ShadowMaskTexel.a, smpacked3;
  235.  
  236. #-----------------------------------------
  237. ADD smpacked0, smpacked0, smpacked1;
  238. ADD smpacked2, smpacked2, smpacked3;
  239. ADD smpacked0, smpacked0, smpacked2;
  240. DP4 r0.a, smpacked0, 0.125;
  241.  
  242. ADD_SAT r0.a, r0, ShadowMaskTexel;
  243. SUB ShadowMaskTexel.a, const_val.y, r0.a;
  244.  
  245. #SUB ShadowMaskTexel.a, const_val.y, ShadowMaskTexel.a;
  246.  
  247. #-----------------------------------------
  248. # Attenuation
  249. SUB LV, LightPosition, PixelPosition;
  250. DP3 LV.w, LV, LV;
  251. MUL_SAT LV.w, LV.w, LightRange.z;
  252. ADD Attn.w, const_val.g, -LV.w;
  253. MUL Attn.w, Attn.w, Attn.w;
  254.  
  255. #-----------------------------------------
  256. # Normalize
  257. MAD NormalMapTexel.rgb, NormalMapTexel, const_val.b, -const_val.g;# Bias and scale the normalmap texel (only rgb) (from 0->1, -1->1)
  258. NRMH NormalMapTexel.rgb, NormalMapTexel;
  259. NRMH TSLV.rgb, IPTSLV;
  260. NRMH TSEV.rgb, IPTSEV;
  261.  
  262. #-----------------------------------------
  263. # Calc reflection vector
  264. DP3 r0.a, NormalMapTexel, TSEV;
  265. ADD r0.a, r0.a, r0.a;
  266. MAD Reflection.xyz, NormalMapTexel, r0.a, -TSEV;
  267.  
  268. #-----------------------------------------
  269. # Self shadowing
  270. SUB r0.a, const_val2.y, -TSLV.x;
  271. MUL_SAT r0.a, r0.a, const_val2.z;
  272. MUL r1.w, r1.w, r0.a;
  273.  
  274. #-----------------------------------------
  275. # Diffuse
  276. MUL r1.rgb, LightColor, DiffuseTexel;        # Multiply diffusemap with light color
  277. MUL r1.rgb, r1, const_val.b;            # Scale by 2 for correct brightness
  278. DP3_SAT r0.rgb, NormalMapTexel, TSLV;
  279. MUL r0.rgb, r0, r1;                # Diffuse color * Diffuse dotprod
  280.  
  281. #-----------------------------------------
  282. # Specular
  283. DP3_SAT r1.x, TSLV, Reflection;
  284. POW r1.x, r1.x, SpecColor1.a;
  285. MUL r1.rgb, r1.x, DiffuseTexel.a;    # Mul specular with specular map
  286. MAD r0.rgb, SpecColor1, r1, r0;            # Mul specular with specular color, add to final fragment
  287.  
  288. MUL r0.rgb, r0, Attn.w;                # Multiply final fragment by attenuation+projmap
  289.  
  290. #-----------------------------------------
  291. # Projection map
  292. TEX ProjMapTexel, ProjMapTexCoord, texture[1], CUBE;
  293. MUL r0.rgb, r0, ProjMapTexel;                # Multiply final fragment by projmap
  294.  
  295. MUL r0.rgb, r0, ShadowMaskTexel.a;
  296. MOV r0.a, const_val2.x;
  297.  
  298. # Write result
  299. MOV oCol, r0;
  300.  
  301. END
  302.