home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2006 April / Gamestar_83_2006-04_dvd.iso / Dema / demowot_english.exe / InfDX / x / backup / deferred-point-pixel.hlsl next >
Text File  |  2005-03-22  |  2KB  |  71 lines

  1. struct VS_OUTPUT
  2. {
  3.     float4 Transformed    : TEXCOORD0;
  4.     float4 Attrib        : TEXCOORD1;
  5.     float4 Color        : TEXCOORD2;
  6.     float3 LightInView  : TEXCOORD3;
  7.     float4 FustrumPos   : TEXCOORD4;
  8.     float4 ViewToLight0 : TEXCOORD5;
  9.     float4 ViewToLight1 : TEXCOORD6;
  10.     float4 ViewToLight2 : TEXCOORD7;
  11. };
  12.  
  13. float4x4 TDX_CONST_INVPROJ;
  14. float4x4 TDX_CONST_INVVIEW;
  15. float4x4 TDX_CONST_INVVIEWPROJ;
  16. float4 TDX_CONST_LIGHTCONTRIB;
  17.  
  18. sampler sampler_albedo : register(s0); // albedo
  19. sampler sampler_normal : register(s1); // normal
  20. sampler sampler_position : register(s2); // position
  21. sampler sampler_projector : register(s3); // projector
  22. sampler sampler_specular : register(s4); // specular exp
  23.  
  24. float4 main(VS_OUTPUT In) : COLOR
  25. {
  26.     float4 FinalColor;
  27.     
  28.     // albedo color
  29.     float4 Albedo=tex2Dproj(sampler_albedo, In.Transformed);
  30.     
  31.     // normalvector
  32.     float4 Normal=tex2Dproj(sampler_normal, In.Transformed)*2-1;
  33.  
  34.     // extracting view space position
  35.     float4 Depth=tex2Dproj(sampler_position, In.Transformed);
  36.     float3 ViewSpacePos=(In.FustrumPos/In.FustrumPos.w)*Depth.r;
  37.  
  38.     // lighting parameters
  39.     float3 LightToFragment=ViewSpacePos-In.LightInView;
  40.  
  41.     float Distance=length(LightToFragment);
  42.     float3 LightToFragmentNorm=LightToFragment/Distance;
  43.  
  44.     float Attenuation=saturate(1-(Distance*In.Attrib.x));
  45.     float4 Factor=Attenuation*In.Color;
  46.     float DotProduct=saturate(dot(Normal, -LightToFragmentNorm));
  47.     
  48.     FinalColor.rgb=DotProduct*Factor;
  49.  
  50. #if TDX_SHADERFLAG_SPECULAR
  51.     float3 Reflected=normalize(reflect(ViewSpacePos, Normal.xyz));
  52. #if 0
  53.     float Specular=pow(saturate(dot(Reflected, -LightToFragmentNorm)),Normal.w*100);
  54. #else
  55.     float Specular=tex2D(sampler_specular, float2(dot(Reflected, -LightToFragmentNorm), Normal.w)).a;
  56. #endif
  57.     FinalColor.rgb+=Factor*Specular*Albedo.a;
  58. #endif
  59.  
  60.     float3 LightToFragmentLS;
  61.     LightToFragmentLS.x=mul(LightToFragmentNorm, In.ViewToLight0);
  62.     LightToFragmentLS.y=mul(LightToFragmentNorm, In.ViewToLight1);
  63.     LightToFragmentLS.z=mul(LightToFragmentNorm, In.ViewToLight2);
  64.     FinalColor.rgb*=texCUBE(sampler_projector, LightToFragmentLS);
  65.  
  66.     FinalColor.a=dot((float3)FinalColor.rgb,(float3)TDX_CONST_LIGHTCONTRIB);
  67.     FinalColor.rgb*=Albedo;
  68.     
  69.     return FinalColor;
  70. }  
  71.