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

  1. !!ARBfp1.0
  2.  
  3. #/*»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»*\
  4. #    File:            Program for CXR_Shader::RenderShading_FP20
  5. #                    
  6. #    Author:            Magnus H÷gdahl
  7. #                    
  8. #    Copyright:        Starbreeze AB 2004
  9. #
  10. #    History:
  11. #
  12. #\*____________________________________________________________________________________________*/
  13.  
  14.  
  15. # LightIntensity = ((Diffuse.rgb + FresnelFactor * Specular.rgb) * SilkFactor + Transmission.rgb) * DistanceAttenuation * Projection
  16.  
  17. # Diffuse = DiffuseMap.rgb * DiffuseColor.rgb * Max(0, N*L)
  18.  
  19. # Specular = SpecularMap.rgb * SpecColor.rgb * (Max(0, H*N)^(SpecularMap.a * SpecColor.a) + Environment);
  20.  
  21. # Environment = EnvironmentMap.rgb * EnvColor.rgb * Max(0, N*L)
  22.  
  23. # Transmission = TransmissionMap.rgb * (TransmissionMap.a * Max(0, -N*L) + AttribMap.a * (1 - Abs(L*N - HSCenter))^HSExp )
  24.  
  25. # FresnelFactor = (1 - AttribMap.r) + AttribMap.r * (1 - H*V)^5
  26.  
  27. # SilkFactor = (1 - AttribMap.g) + AttribMap.g*(1 - V*N);
  28.  
  29. # Projection = DistanceAttenuation * ProjectionMap1.rgb + (1 - DistanceAttenuation) * ProjectionMap2.rgb
  30.  
  31. # DistanceAttenuation = (1 - |LightPos - PixelPos| / LightRange^2)^2
  32.  
  33. # N = Normal
  34. # L = Light vector
  35. # H = Half angle vector
  36. # V = Eye vector
  37.  
  38. #-----------------------------------------
  39. # Texture0 = Diffuse Map        // Default = 1,1,1,1
  40. # Texture1 = Specular Map        // Default = 1,1,1,1
  41. # Texture2 = Normal map            // Default = 1, 0.5, 0.5
  42. # Texture3 = Attribute Map        // r = Fresnel, g = Silkness, b = ?, a = ?, Default = 0,0,0,0
  43. # Texture4 = Transmission Diffuse Map    // Default = 0,0,0,0
  44. # Texture5 = Projection Map 1        // Default = 1,1,1
  45. # Texture6 = Projection Map 2        // Default = 1,1,1
  46. # Texture7 = Environment Map        // Default = 0,0,0
  47.  
  48. #-----------------------------------------
  49. # TexCoord0 = Mapping tex coord
  50. # TexCoord1 = Animated model space pixel position
  51. # TexCoord2 = Interpolated tangent space light vector (IPTSLV)
  52. # TexCoord3 = Interpolated tangent space eye vector (IPTSEV)
  53. # TexCoord4 = ProjMap tex coord
  54. # TexCoord5 = Tangentspace-2-world transform, row 0
  55. # TexCoord6 = Tangentspace-2-world transform, row 1
  56. # TexCoord7 = Tangentspace-2-world transform, row 2
  57.  
  58. #-----------------------------------------
  59.  
  60. OUTPUT oCol = result.color;
  61.  
  62. ATTRIB vCol = fragment.color;
  63.  
  64. ATTRIB MappingTexCoord = fragment.texcoord[0];
  65. ATTRIB PixelPosition = fragment.texcoord[1];
  66. ATTRIB IPTSLV = fragment.texcoord[2];
  67. ATTRIB IPTSEV = fragment.texcoord[3];
  68. ATTRIB ProjMapTexCoord = fragment.texcoord[4];
  69. ATTRIB TS2W_Mat_0 = fragment.texcoord[5];
  70. ATTRIB TS2W_Mat_1 = fragment.texcoord[6];
  71. ATTRIB TS2W_Mat_2 = fragment.texcoord[7];
  72.  
  73. PARAM LightPosition = program.env[0];    # { X, Y, Z, 0 }
  74. PARAM LightRange = program.env[1];    # { 1.0 / Range, Range, 1.0 / Range^2, Range^2 }
  75. PARAM LightColor = program.env[2];    # { R, G, B, 0 } (0-2 range)
  76. PARAM SpecColor = program.env[3];    # { R, G, B, SpecPower } (0-2 range)
  77. PARAM AttribScale = program.env[4];
  78. PARAM EnvMapColor = program.env[5];
  79. PARAM NoiseOffset = program.env[6];
  80.  
  81. PARAM const_val = { 0.5, 1.0, 2.0, 4.0 };
  82. PARAM const_val2 = { 0, 0.25, 4, 0 };
  83.  
  84. TEMP DiffuseTexel;
  85. TEMP SpecularTexel;
  86. TEMP ProjMapTexel1;
  87. TEMP ProjMapTexel2;
  88. TEMP NormalMapTexel;
  89. TEMP AttribTexel;
  90. TEMP TransmissionTexel;
  91. TEMP EnvMapTexel;
  92. TEMP TSLV;        # Tangent space light vector
  93. TEMP TSEV;        # Tangent space eye vector
  94. TEMP H;
  95. TEMP R;
  96. TEMP r0;
  97. TEMP r1;
  98. TEMP r2;
  99. TEMP Attenuation;
  100. TEMP Noise;
  101. TEMP F;
  102. TEMP u;    # u = H * TSEV
  103. TEMP t;    # t = H * N
  104. TEMP v; # v = TSEV * N
  105. TEMP v_nosat;
  106. TEMP l; # l = TSLV * N
  107. TEMP lt;
  108.  
  109. #-----------------------------------------
  110. # Fetch Textures
  111. TEX DiffuseTexel, MappingTexCoord, texture[0], 2D;    # Sample diffusemap
  112. TEX SpecularTexel, MappingTexCoord, texture[1], 2D;    # Sample diffusemap
  113. TEX NormalMapTexel, MappingTexCoord, texture[2], 2D;    # Sample normalmap
  114. TEX AttribTexel, MappingTexCoord, texture[3], 2D;
  115. TEX TransmissionTexel, MappingTexCoord, texture[4], 2D;
  116. TEX ProjMapTexel1, ProjMapTexCoord, texture[5], CUBE;
  117. TEX ProjMapTexel2, ProjMapTexCoord, texture[6], CUBE;
  118.  
  119. #TEX TSLV, IPTSLV, texture[3], CUBE;            # Normalize TSLV
  120. #TEX TSEV, IPTSEV, texture[3], CUBE;            # Normalize TSLV
  121. #MAD TSLV.rgb, TSLV, const_val.b, -const_val.g;# Bias and scale the normalmap texel (only rgb) (from 0->1, -1->1)
  122. #MAD TSEV.rgb, TSEV, const_val.b, -const_val.g;# Bias and scale the normalmap texel (only rgb) (from 0->1, -1->1)
  123.  
  124. #MAD NormalMapTexel.rgb, NormalMapTexel, const_val.b, -const_val.g;# Bias and scale the normalmap texel (only rgb) (from 0->1, -1->1)
  125. #TEX NormalMapTexel.rgb, NormalMapTexel, texture[3], CUBE;            # Normalize normal
  126. #MAD NormalMapTexel.rgb, NormalMapTexel, const_val.b, -const_val.g;# Bias and scale the normalmap texel (only rgb) (from 0->1, -1->1)
  127.  
  128. MUL AttribTexel.rgba, AttribTexel, AttribScale;
  129.  
  130. #-----------------------------------------
  131. # Attenuation
  132. SUB r1, LightPosition, PixelPosition;
  133. DP3 r1.w, r1, r1;
  134. #DP3 r1.w, IPTSLV, IPTSLV;
  135. MUL_SAT r1.w, r1.w, LightRange.z;
  136. ADD r1.w, const_val.g, -r1.w;
  137. MUL Attenuation.w, r1.w, r1.w;
  138.  
  139. #-----------------------------------------
  140. # Noise function
  141. MUL r2, PixelPosition, 0.00125;
  142. SWZ r1, r2, x, y, 0, 0;
  143. ADD r1, r1, NoiseOffset.x;
  144. TEX r0, r1, texture[9], 2D;    # Sample rand map
  145. SWZ r1, r2, y, z, 0, 0;
  146. ADD r1, r1, NoiseOffset.y;
  147. TEX r1, r1, texture[9], 2D;    # Sample rand map
  148. ADD r0.rgb, r1, r0;
  149. SWZ r1, r2, z, x, 0, 0;
  150. ADD r1, r1, -NoiseOffset.z;
  151. TEX r1, r1, texture[9], 2D;    # Sample rand map
  152. ADD r0.rgb, r1, r0;
  153. #MUL Noise.rgb, r0, 1;
  154.  
  155. #MUL r0.y, r0.x, 0.25;
  156. #TEX r1, r0, texture[9], 2D;    # Sample rand map
  157. TEX r0, r0, texture[9], 2D;    # Sample rand map
  158. MUL_SAT r1.x, r0.g, r0.g;
  159. MUL r0.b, r0.g, 2;
  160. MUL r0.r, r0.r, r0.r;
  161. MUL r0.g, r0.g, r0.g;
  162. MUL r0.r, r0.r, 0.5;
  163. MUL r1.x, r1.x, r1.x;
  164. ADD r0.r, r0.r, r1.x;
  165. SWZ r0.rgb, r0, b, g, r, 0;
  166.  
  167. #MOV r0.b, r1.x;
  168. #MOV r0.g, r1.x;
  169. MUL Noise.rgb, r0, 0.75;
  170. #LRP Noise.rgb, Noise, 1, 0.5;
  171.  
  172. #-----------------------------------------
  173. # Normalize normal
  174. MAD NormalMapTexel.rgb, NormalMapTexel, const_val.b, -const_val.g;# Bias and scale the normalmap texel (only rgb) (from 0->1, -1->1)
  175. DP3 r0.a, NormalMapTexel, NormalMapTexel;
  176. RSQ r0.a, r0.a;
  177. MUL NormalMapTexel.rgb, NormalMapTexel, r0.a;
  178.  
  179. #-----------------------------------------
  180. # Normalize TSLV
  181. DP3 TSLV.a, IPTSLV, IPTSLV;
  182. RSQ TSLV.a, TSLV.a;
  183. MUL TSLV.xyz, IPTSLV, TSLV.a;
  184.  
  185. #-----------------------------------------
  186. # Normalize TSEV
  187. DP3 TSEV.a, IPTSEV, IPTSEV;
  188. RSQ TSEV.a, TSEV.a;
  189. MUL TSEV.xyz, IPTSEV, TSEV.a;
  190.  
  191. #-----------------------------------------
  192. # Calc halfangle vector
  193. ADD H.xyz, TSEV, TSLV;
  194. DP3 H.a, H, H;
  195. RSQ H.a, H.a;
  196. MUL H.xyz, H, H.a;
  197.  
  198. #-----------------------------------------
  199. DP3_SAT u.a, H, TSEV;
  200. DP3_SAT t.a, H, NormalMapTexel;
  201. DP3 v_nosat.a, TSEV, NormalMapTexel;
  202. DP3_SAT l.a, TSLV, NormalMapTexel;
  203. DP3_SAT lt.a, TSLV, -NormalMapTexel;
  204. MOV_SAT v.a, v_nosat.a;
  205.  
  206. #-----------------------------------------
  207. # Calc reflection vector
  208. ADD r0.a, v_nosat.a, v_nosat.a;
  209. MAD R.xyz, NormalMapTexel, r0.a, -TSEV;
  210.  
  211. #-----------------------------------------
  212. # Environment mapping
  213. DP3 r0.r, R, TS2W_Mat_0;            # Transform reflection vector to world space
  214. DP3 r0.g, R, TS2W_Mat_1;
  215. DP3 r0.b, R, TS2W_Mat_2;
  216. TEX EnvMapTexel, r0, texture[7], CUBE;
  217.  
  218. #-----------------------------------------
  219. # Self shadowing
  220. SUB r0.a, const_val2.y, -TSLV.x;
  221. MUL_SAT Attenuation.r, r0.a, const_val2.z;
  222.  
  223. #-----------------------------------------
  224. # Fresnel
  225. # MOV AttribTexel.r, 0.0;
  226.  
  227. SUB_SAT r0.a, 1, u.a;
  228. MUL r0.r, r0.a, r0.a;
  229. #MUL r0.r, r0.r, r0.r;
  230. #MUL r0.a, r0.r, r0.a;
  231. LRP F.a, AttribTexel.r, r0.r, 1;
  232.  
  233. #-----------------------------------------
  234. # Silkness factor
  235. SUB r0.a, 1, v.a;
  236. LRP r0.a, AttribTexel.g, r0.a, 1;
  237. MUL Attenuation.r, Attenuation.r, r0.a;
  238.  
  239. #-----------------------------------------
  240. # Diffuse
  241. MUL r1.rgb, LightColor, DiffuseTexel;        # Multiply diffusemap with light color
  242. MUL r1.rgb, r1, const_val.b;            # Scale by 2 for correct brightness
  243. MUL r0.rgb, l.a, r1;                # Diffuse color * Diffuse dotprod
  244.  
  245. #-----------------------------------------
  246. # Specular + EnvMap
  247. MUL SpecularTexel.a, SpecularTexel.a, SpecColor.a;
  248. #MOV SpecularTexel.a, 128;
  249. POW r1.a, t.a, SpecularTexel.a;
  250. MAD r1.rgb, EnvMapTexel, EnvMapColor, r1.a;
  251. MUL r1.rgb, r1, F.a;                # Mul specular with fresnel factor
  252. #MUL r1.rgb, r1, DiffuseTexel;            # Mul specular with specular map
  253. MUL r1.rgb, r1, SpecularTexel;            # Mul specular with specular map
  254. MAD r0.rgb, SpecColor, r1, r0;            # Mul specular with specular color, add to final fragment
  255.  
  256. #-----------------------------------------
  257. MUL r0.rgb, r0, Attenuation.r;            # Multiply final fragment by geometric attenuation and silkness
  258.  
  259. #-----------------------------------------
  260. # Transmitted light
  261. MAD r0.rgb, lt.a, TransmissionTexel, r0;
  262.  
  263. #-----------------------------------------
  264. MUL r0.rgb, r0, Attenuation.w;            # Multiply final fragment by distance attenuation
  265. MUL r0.rgb, r0, Noise;                # Multiply final fragment by distance attenuation
  266.  
  267. #-----------------------------------------
  268. # Projection map
  269. #LRP ProjMapTexel1.rgb, Attenuation.w, ProjMapTexel1, ProjMapTexel2;
  270. MUL r0.rgb, r0, ProjMapTexel1;            # Multiply final fragment by projmap
  271.  
  272. # Alpha from diffuse texture
  273. MOV r0.a, DiffuseTexel.a;
  274. #MOV r0.rgb, l.a;
  275. #MUL r0.rgb, 0.25, t.a;
  276.  
  277. # Write result
  278. MOV oCol, r0;
  279. END
  280.