SHARE
TWEET

God Rays Shader [bugged]

a guest Jun 22nd, 2014 200 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. sampler2D renderTarget;
  2.  
  3. #define SAMPLE_AMOUNT 64
  4.  
  5. Texture2D Tex;
  6. float2 lightPosition;
  7. float exposure;
  8. float decay;
  9. float weight;
  10. float density;
  11.  
  12. SamplerState State = sampler_state
  13. {
  14.         Texture = <Tex>;
  15.         MipFilter = Point;
  16.         MinFilter = Linear;
  17.         MagFilter = Linear;
  18.         AddressU = Wrap;
  19.         AddressV = Wrap;
  20. };
  21.  
  22. float4x4 MatrixTransform;
  23.  
  24. //The default vertex shader of the spriteBatch, implemented manually so it can be compiled in 3_0
  25. void SpriteVertexShader(inout float4 color    : COLOR0,
  26.                         inout float2 texCoord : TEXCOORD0,
  27.                         inout float4 position : SV_Position)
  28. {
  29.     position = mul(position, MatrixTransform);
  30. }
  31.  
  32. //Copypasted from the tutorial, only changed some variable names
  33. float4 main(float2 texCoord : TEXCOORD0) : COLOR0  
  34. {  
  35.   // Calculate vector from pixel to light source in screen space.  
  36.    half2 deltaTexCoord = (texCoord - lightPosition.xy);  
  37.   // Divide by number of samples and scale by control factor.  
  38.   deltaTexCoord *= 1.0f / SAMPLE_AMOUNT * density;  
  39.   // Store initial sample.  
  40.    half3 color = tex2D(State, texCoord);  
  41.   // Set up illumination decay factor.  
  42.    half illuminationDecay = 1.0f;  
  43.   // Evaluate summation from Equation 3 NUM_SAMPLES iterations.  
  44.    for (int i = 0; i < SAMPLE_AMOUNT; i++)  
  45.   {  
  46.     // Step sample location along ray.  
  47.     texCoord -= deltaTexCoord;  
  48.     // Retrieve sample at new location.  
  49.    half3 sample = tex2D(State, texCoord);  
  50.     // Apply sample attenuation scale/decay factors.  
  51.     sample *= illuminationDecay * weight;  
  52.     // Accumulate combined color.  
  53.     color += sample;
  54.     // Update exponential decay factor.  
  55.     illuminationDecay *= decay;  
  56.   }  
  57.   // Output final color with a further scale control factor.  
  58.    return float4( color * exposure, 1);  
  59. }  
  60.  
  61. technique Technique1
  62. {
  63.     pass Pass1
  64.     {
  65.         VertexShader = compile vs_3_0 SpriteVertexShader();
  66.         PixelShader = compile ps_3_0 main();
  67.     }
  68. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top