Advertisement
Krythic

Noise Shader

Aug 16th, 2020
2,256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.59 KB | None | 0 0
  1. struct Vertex
  2. {
  3.     float4 pos : POSITION;
  4.     float2 tex : TEXTURE;
  5.     float3 norm : NORMAL;
  6. };
  7.  
  8. struct PixelShaderArgs
  9. {
  10.     float4 pos : SV_POSITION;
  11.     float2 col : TEXTURE;
  12.     float3 norm : NORMAL;
  13. };
  14.  
  15. struct NoiseShaderData
  16. {
  17.     float2 Resolution;
  18.     float ElapsedTime;
  19.     float Padding;
  20. };
  21.  
  22. Texture2D ShaderTexture : register(t0);
  23. SamplerState Sampler : register(s0);
  24. float4x4 localMatrix : register(b0);
  25.  
  26. cbuffer NoiseShaderDataBuffer : register(b1)
  27. {
  28.     NoiseShaderData NoiseData;
  29. };
  30.  
  31. PixelShaderArgs VertexShaderMain(Vertex vertex)
  32. {
  33.     PixelShaderArgs output;
  34.     output.pos = vertex.pos;
  35.     output.col = vertex.tex;
  36.     return output;
  37. }
  38.  
  39. float squares16(uint ctr)
  40. {
  41.     const uint key = uint(0x7a1a912f);
  42.     const float two16 = 65536.0;
  43.  
  44.     uint x, y, z;
  45.     y = ctr * key;
  46.     z = (ctr + uint(1)) * key;
  47.     x = y;
  48.     x = x * x + y;
  49.     x = (x >> 16) | (x << 16);
  50.     x = x * x + z;
  51.     x = (x >> 16) | (x << 16);
  52.     x = (x * x + y) >> 16;
  53.  
  54.     return float(x) / two16;
  55. }
  56.  
  57. float pixel_id(float2 fragCoord)
  58. {
  59.     return dot(fragCoord.xy,
  60.                float2(1, NoiseData.Resolution.x));
  61. }
  62.  
  63. float4 PixelShaderMain(PixelShaderArgs pixelShaderArgs) : SV_Target
  64. {
  65.     float id = pixel_id(pixelShaderArgs.pos.xy);
  66.     int cnt_pixels = int(NoiseData.Resolution.x * NoiseData.Resolution.y);
  67.     float result = squares16(uint(id) + uint(NoiseData.ElapsedTime * cnt_pixels));
  68.     float3 col = float3(result,result,result);
  69.     float4 diffuse = ShaderTexture.Sample(Sampler,pixelShaderArgs.col);
  70.     return float4(diffuse.rgb * col, 1.0);
  71. }
  72.  
  73.  
  74.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement