Guest User

Untitled

a guest
Aug 15th, 2016
794
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.53 KB | None | 0 0
  1. /* Gaussian Scanlines - Autorotate
  2. by hunterk
  3. based on Themaister's NTSC Gauss Pass
  4. License - Public Domain
  5. */
  6.  
  7. struct data
  8. {
  9. float2 tex;
  10. float2 pix_no;
  11. float2 one;
  12. };
  13.  
  14. struct input
  15. {
  16. float2 video_size;
  17. float2 texture_size;
  18. float2 output_size;
  19. float frame_count;
  20. };
  21.  
  22. void main_vertex
  23. (
  24. float4 position : POSITION,
  25. out float4 oPosition : POSITION,
  26. uniform float4x4 modelViewProj,
  27. float2 tex : TEXCOORD,
  28. uniform input IN,
  29. out data oData
  30. )
  31. {
  32. oPosition = mul(modelViewProj, position);
  33. oData.tex = tex;
  34. oData.pix_no = tex * IN.texture_size;
  35. oData.one = 1.0 / IN.texture_size;
  36. }
  37.  
  38. #pragma parameter INPUT_GAMMA "Input Gamma" 2.5 0.0 10.0 0.1
  39. #pragma parameter OUTPUT_GAMMA "Output Gamma" 2.1 0.0 10.0 0.1
  40. #pragma parameter DARK "Scanline Darkness" 1.0 0.5 5.0 0.1
  41. #ifdef PARAMETER_UNIFORM
  42. uniform float INPUT_GAMMA;
  43. uniform float OUTPUT_GAMMA;
  44. uniform float DARK;
  45. #else
  46. #define INPUT_GAMMA 2.5
  47. #define OUTPUT_GAMMA 2.1
  48. #define DARK 3.0
  49. #endif
  50.  
  51. float4 main_fragment (uniform input IN, in data vertex, uniform sampler2D s0 : TEXUNIT0) : COLOR
  52. {
  53. #define TEX(off) pow(tex2D(s0, vertex.tex + off).rgb, float3(INPUT_GAMMA))
  54.  
  55. float verttest;
  56. float offset_dist;
  57. float3 frame0;
  58. float3 frame1;
  59. float3 frame2;
  60. float3 frame3;
  61. float3 frame4;
  62.  
  63. if (IN.video_size.x > IN.video_size.y)
  64. {
  65. offset_dist = frac(vertex.pix_no.y) - 0.5;
  66. frame0 = TEX(float2(0.0, (-2.0) * vertex.one.y));
  67. frame1 = TEX(float2(0.0, (-1.0) * vertex.one.y));
  68. frame2 = TEX(float2(0.0, (0.0) * vertex.one.y));
  69. frame3 = TEX(float2(0.0, (1.0) * vertex.one.y));
  70. frame4 = TEX(float2(0.0, (2.0) * vertex.one.y));
  71. }
  72. else
  73. {
  74. offset_dist = frac(vertex.pix_no.x) - 0.5;
  75. frame0 = TEX(float2((-2.0) * vertex.one.x, 0.0));
  76. frame1 = TEX(float2((-1.0) * vertex.one.x, 0.0));
  77. frame2 = TEX(float2((0.0) * vertex.one.x, 0.0));
  78. frame3 = TEX(float2((1.0) * vertex.one.x, 0.0));
  79. frame4 = TEX(float2((2.0) * vertex.one.x, 0.0));
  80. }
  81.  
  82. float dist0 = 2.0 + offset_dist;
  83. float dist1 = 1.0 + offset_dist;
  84. float dist2 = 0.0 + offset_dist;
  85. float dist3 = -1.0 + offset_dist;
  86. float dist4 = -2.0 + offset_dist;
  87.  
  88. float3 scanline = frame0 * exp(-5.0 * DARK * dist0 * dist0);
  89. scanline += frame1 * exp(-5.0 * DARK * dist1 * dist1);
  90. scanline += frame2 * exp(-5.0 * DARK * dist2 * dist2);
  91. scanline += frame3 * exp(-5.0 * DARK * dist3 * dist3);
  92. scanline += frame4 * exp(-5.0 * DARK * dist4 * dist4);
  93.  
  94. return float4(pow((1.0 + 0.15 * DARK) * scanline, float3(1.0 / OUTPUT_GAMMA)), 1.0);
  95. }
Advertisement
Add Comment
Please, Sign In to add comment