Advertisement
Guest User

Shader

a guest
Dec 31st, 2014
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.11 KB | None | 0 0
  1. float4x4 WVPM;
  2.  
  3. struct VS_IN
  4. {
  5.     float2 UV : TEXCOORD0;
  6.     float4 Normal : NORMAL;
  7.     float4 Pos : POSITION0;
  8. };
  9.  
  10. struct VS_OUT
  11. {
  12.     float2 UV : TEXCOORD0;
  13.     float4 Normal : TEXCOORD1;
  14.     float4 Pos : SV_POSITION;
  15. };
  16.  
  17.  
  18. VS_OUT test_vs( VS_IN In )
  19. {
  20.     VS_OUT Out;
  21.     Out.UV = In.UV;
  22.     Out.Pos = mul( WVPM, In.Pos );
  23.     Out.Normal.xyz = In.Normal;
  24.     Out.Normal.w = Out.Pos.z;   //Depth
  25.    
  26.     return Out;
  27. }
  28.  
  29.  
  30.  
  31.  
  32. struct PS_IN
  33. {
  34.     float2 UV : TEXCOORD0;
  35.     float4 Normal : TEXCOORD1;
  36. };
  37.  
  38. struct PS_OUT
  39. {
  40.     float4 rt0 : SV_Target0;
  41.     float4 rt1 : SV_Target1;
  42. };
  43.  
  44. Texture2D Tex;
  45. SamplerState linSample
  46. {
  47.     Filter = MIN_MAG_MIP_LINEAR;
  48.     AddressU = Wrap;
  49.     AddressV = Wrap;
  50. };
  51.  
  52.  
  53. float2 encode (float3 n)    //Crytec's Spheremap Transform Normal Compression
  54. {
  55.     float p = sqrt(n.z*8 + 8);
  56.     return float2(n.xy/p + 0.5);
  57. }
  58.  
  59.  
  60. PS_OUT test_ps( PS_IN In )
  61. {
  62.     PS_OUT MRT;
  63.  
  64.     float4 ColorEmission = Tex.Sample(linSample, In.UV);
  65.     ColorEmission.a = 0; //Emission
  66.    
  67.     float2 n = encode(In.Normal);
  68.    
  69.     float depth = In.Normal.w;
  70.    
  71.     MRT.rt0 = ColorEmission;
  72.     MRT.rt1 = float4(n, depth, depth);
  73.    
  74.     return MRT;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement