home *** CD-ROM | disk | FTP | other *** search
/ NVIDIA Tech Demo: DAWN / NVIDIA_demo.iso / Dawn.exe / Disk1 / data1.cab / Program_Executable_Files / shaders_ultra / finalSkinHeadBack.fp30 < prev    next >
Encoding:
Text File  |  2003-02-11  |  4.3 KB  |  101 lines

  1. !!FP1.0
  2. # NV_fragment_program generated by NVIDIA Cg compiler
  3. # cgc version 1.5.0001, build date Oct 15 2002  01:04:08
  4. # command line args: -profile fp30
  5. #vendor NVIDIA Corporation
  6. #version 1.0.1
  7. #profile fp30
  8. #program main
  9. #semantic main.skinColor_frontSpec
  10. #semantic main.skin_norm_sideSpec
  11. #semantic main.g_specular_colorShift
  12. #semantic main.g_blood_texture
  13. #semantic main.g_transmission_terms
  14. #semantic main.g_diffuse_Cube
  15. #semantic main.g_specular_Cube
  16. #semantic main.g_nrmalize_Cube
  17. #semantic main.g_dappleProjection
  18. #semantic main.g_hilight_Cube
  19. #semantic main.g_oiliness
  20. #var float4 v2f.skinColor_frontSpec : $vin.TEXCOORD0 : TEXCOORD0 : 0 : 1
  21. #var float3 v2f.worldEyeDir       : $vin.TEXCOORD2 : TEXCOORD2 : 0 : 1
  22. #var float3 v2f.worldTanMatrixX        : $vin.TEXCOORD5 : TEXCOORD5 : 0 : 1
  23. #var float3 v2f.worldTanMatrixY        : $vin.TEXCOORD6 : TEXCOORD6 : 0 : 1
  24. #var float3 v2f.worldTanMatrixZ        : $vin.TEXCOORD7 : TEXCOORD7 : 0 : 1
  25. #var float4 v2f.SkinSilouetteVec    : $vin.TEXCOORD3 : TEXCOORD3 : 0 : 1
  26. #var samplerRECT skinColor_frontSpec :  : texunit 0 : 1 : 1
  27. #var samplerRECT skin_norm_sideSpec  :  : texunit 1 : 2 : 1
  28. #var samplerRECT g_specular_colorShift :  : texunit 2 : 3 : 1
  29. #var samplerRECT g_blood_texture          :  : texunit 3 : 4 : 1
  30. #var samplerRECT g_transmission_terms  :  : texunit 4 : 5 : 1
  31. #var samplerCUBE g_diffuse_Cube          :  : texunit 5 : 6 : 1
  32. #var samplerCUBE g_specular_Cube       :  : texunit 6 : 7 : 1
  33. #var samplerCUBE g_nrmalize_Cube       :  : texunit 7 : 8 : 1
  34. #var samplerRECT g_dappleProjection    :  : texunit 8 : 9 : 1
  35. #var samplerCUBE g_hilight_Cube        :  : texunit 9 : 10 : 1
  36. #var float2 g_oiliness :  :  : 11 : 1
  37. #var half4 COL : $vout.COLOR : COLOR : -1 : 1
  38.  
  39. DEFINE LUMINANCE = {0.299, 0.587, 0.114, 0.0};
  40. DECLARE g_oiliness;
  41.  
  42.  
  43. ############################################################################################
  44. #  These two blocks slow code down 10%                                                     #
  45. ############################################################################################
  46. TEX H0, f[TEX0], TEX1, 2D;                  # store range-compressed normal (and side spec) in H1
  47. TEX H1, f[TEX0], TEX0, 2D;                  # store skin color in H3
  48.  
  49. MOVH H2.x, g_oiliness.y;
  50. MULX H0.xy, H0, H2.x;
  51. TEX H0, H0, TEX7, CUBE;
  52.  
  53. MOVH H3, f[TEX5];
  54. DP3X H2.x, H0, H3;
  55. MOVH H3, f[TEX6];
  56. DP3X H2.y, H0, H3;
  57. MOVH H3, f[TEX7];
  58. DP3X H2.z, H0, H3;                          # H2 now contains worldNormal - extinguish
  59.  
  60. MOVH H0.xyz, f[TEX2];                       # store v2f.world_V in H1
  61. DP3X H2.w, H0, H2;                          # H2.w = dot(Normal, View)
  62. MULX H2.xyz,-H2, -2;                        # twice the normal
  63. MADX H3.xyz, -H2, H2.w, H0;                 # H4 = -2*dot(H0, H2)*H2 + H0  = reflection vector.  Normal doesn't need to be fixed, because it's uniformly scaled
  64.  
  65. TEX H0.xyz, H2, TEX5, CUBE;                 # diffuse lighting
  66. TEX H2, H2, TEX6, CUBE;                     # side specular
  67. MULX H0.xyz, H0, H1;                        # skin diffuse*diffuse color
  68. #MULX H2, H2, H0.w;                         # side_spec*side_spec term (H0.w is the side_spec term)
  69. MULX H2, H2, H1.w;                          # side_spec*side_spec term (H0.w is the side_spec term)
  70.  
  71. MOVH H1.xyz, f[TEX3];                       # copy ndotv (H1.w is the spec map)
  72. MULX H0, H0, H1.x;
  73. MADX H0, H2, H1.y, H0;                      # diffuse + side_spec (H2 avail)
  74.  
  75. TEX H2, f[TEX2], TEX9, CUBE;                # fetch hilight
  76. TEX H3, H3, TEX6, CUBE;                     # fetch direct specular
  77. MULX H2.xyz, H2, H1.y;                      # hilight by facing ratio
  78. MULX H3, H3, H1.w;                          # spec*spec_map
  79.  
  80. MOVH H3.w, g_oiliness.x;
  81. MULX H3.xyz, H3, 0.02;                    # scale the oiliness
  82. MADH H0, H3, H3.w, H0;                      # scale specular add diffuse                                  (core)
  83.  
  84. TEX H3, f[TEX0], TEX2, 2D;                  # hilight attenuation
  85. MULX H2, H2, H3.y;                          # attenuate hilight
  86.  
  87. MULX H2.xyz, H2, 0.7;                       # 0.7*hilight
  88. MULX H2.xyz, H2, H1.x;
  89. ADDX H0, H2, H0;                            # diffuse specs and hilight
  90.  
  91. #MADX o[COLH], H0, H1.x, H2.w;              # add haze
  92. ADDX o[COLH], H0, H2.w;                     # add haze
  93. END
  94.  
  95. # End of program
  96.  
  97.  
  98.  
  99.  
  100.  
  101.