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

  1. !!ARBfp1.0
  2. OPTION NV_fragment_program2;
  3.  
  4. #/*»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»*\
  5. #    File:            Program for CXR_Shader::RenderShading_FP20
  6. #                    
  7. #    Author:            Magnus H÷gdahl
  8. #                    
  9. #    Copyright:        Starbreeze AB 2004
  10. #                    
  11. #    Comments:
  12. #                SpecNormal = Specular intensity stored in normal map alpha
  13. #\*____________________________________________________________________________________________*/
  14.  
  15.  
  16. #-----------------------------------------
  17. #Texture0 = Diffuse Map
  18. #Texture1 = Projection Map
  19. #Texture2 = Normal+Specular map
  20. #Texture3 = Normalization cube Map, Not used in this program
  21.  
  22. #TexCoord0 = Diffuse/Normal/Specular tex coord
  23. #TexCoord1 = Animated model space pixel position
  24. #TexCoord3 = Interpolated tangent space light vector (IPTSLV)
  25. #TexCoord4 = Interpolated tangent space eye vector (IPTSEV)
  26. #TexCoord7 = ProjMap tex coord
  27.  
  28. #-----------------------------------------
  29. SHORT OUTPUT oCol = result.color;
  30.  
  31. ATTRIB vCol = fragment.color;
  32.  
  33. ATTRIB DiffuseTexCoord = fragment.texcoord[0];
  34. ATTRIB NormalMapTexCoord  = fragment.texcoord[0];
  35. ATTRIB SpecularTexCoord  = fragment.texcoord[0];
  36.  
  37. ATTRIB PixelPosition = fragment.texcoord[1];
  38. ATTRIB IPTSLV = fragment.texcoord[3];
  39. ATTRIB IPTSEV = fragment.texcoord[4];
  40. ATTRIB ProjMapTexCoord = fragment.texcoord[7];
  41.  
  42. PARAM LightPosition = program.env[0];    # { X, Y, Z, 0 }
  43. PARAM LightRange = program.env[1];    # { 1.0 / Range, Range, 1.0 / Range^2, Range^2 }
  44. PARAM LightColor = program.env[2];    # { R, G, B, 0 } (0-2 range)
  45. PARAM SpecColor1 = program.env[3];    # { R, G, B, SpecPower } (0-2 range)
  46. PARAM EyePosition = program.env[4];    # { X, Y, Z, 0 }
  47.  
  48. PARAM const_val = { 0.5, 1.0, 2.0, 4.0 };
  49. PARAM const_val2 = { 0, 0.25, 4, 0 };
  50.  
  51. TEMP LV;
  52. SHORT TEMP DiffuseTexel;
  53. SHORT TEMP NormalMapTexel;
  54. SHORT TEMP SpecPowerTexel;
  55. SHORT TEMP TSLV;        # Tangent space light vector
  56. SHORT TEMP TSEV;        # Tangent space eye vector
  57. SHORT TEMP Reflection;
  58. SHORT TEMP Attn;
  59.  
  60. SHORT TEMP r0;
  61. SHORT TEMP r1;
  62.  
  63. #-----------------------------------------
  64. # Fetch Textures
  65. TEX DiffuseTexel, DiffuseTexCoord, texture[0], 2D;    # Sample diffusemap
  66. TEX NormalMapTexel, NormalMapTexCoord, texture[2], 2D;    # Sample normalmap
  67. MAD NormalMapTexel.rgb, NormalMapTexel, const_val.b, -const_val.g;# Bias and scale the normalmap texel (only rgb) (from 0->1, -1->1)
  68. NRMH NormalMapTexel.rgb, NormalMapTexel;
  69. NRMH TSLV.rgb, IPTSLV;
  70. NRMH TSEV.rgb, IPTSEV;
  71.  
  72. #-----------------------------------------
  73. # Attenuation
  74. SUB LV, LightPosition, PixelPosition;
  75. DP3 LV.w, LV, LV;
  76. MUL_SAT LV.w, LV.w, LightRange.z;
  77. ADD Attn.w, const_val.g, -LV.w;
  78. MUL Attn.w, Attn.w, Attn.w;
  79.  
  80. #-----------------------------------------
  81. # Self shadowing
  82. SUB r0.a, const_val2.y, -TSLV.x;
  83. MUL_SAT r0.a, r0.a, const_val2.z;
  84. MUL Attn.w, Attn.w, r0.a;
  85.  
  86. #-----------------------------------------
  87. # Calc reflection vector
  88. DP3 r0.a, NormalMapTexel, TSEV;
  89. ADD r0.a, r0.a, r0.a;
  90. MAD Reflection.xyz, NormalMapTexel, r0.a, -TSEV;
  91.  
  92. #-----------------------------------------
  93. # Diffuse
  94. DP3_SAT r0.rgb, NormalMapTexel, TSLV;
  95. MULH r1.rgb, LightColor, DiffuseTexel;        # Multiply diffusemap with light color
  96. MUL r1.rgb, r1, const_val.b;            # Scale by 2 for correct brightness
  97. MUL r0.rgb, r0, r1;                # Diffuse color * Diffuse dotprod
  98.  
  99. #-----------------------------------------
  100. # Specular
  101. DP3_SAT r1.x, TSLV, Reflection;
  102. POW SpecPowerTexel, r1.x, SpecColor1.a;
  103. MUL r1.rgb, SpecPowerTexel, DiffuseTexel.a;    # Mul specular with specular map
  104. MADH r0.rgb, SpecColor1, r1, r0;            # Mul specular with specular color, add to final fragment
  105.  
  106. MUL r0.rgb, r0, Attn.w;                # Multiply final fragment by attenuation+projmap
  107.  
  108. # Write result
  109. MOV oCol, r0;
  110.  
  111. END
  112.