AllIn1OneShaderFunctions.cginc 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. //BLURS-------------------------------------------------------------------------
  2. half4 Blur(half2 uv, sampler2D source, half Intensity)
  3. {
  4. half step = 0.00390625f * Intensity;
  5. half4 result = half4 (0, 0, 0, 0);
  6. half2 texCoord = half2(0, 0);
  7. texCoord = uv + half2(-step, -step);
  8. result += tex2D(source, texCoord);
  9. texCoord = uv + half2(-step, 0);
  10. result += 2.0 * tex2D(source, texCoord);
  11. texCoord = uv + half2(-step, step);
  12. result += tex2D(source, texCoord);
  13. texCoord = uv + half2(0, -step);
  14. result += 2.0 * tex2D(source, texCoord);
  15. texCoord = uv;
  16. result += 4.0 * tex2D(source, texCoord);
  17. texCoord = uv + half2(0, step);
  18. result += 2.0 * tex2D(source, texCoord);
  19. texCoord = uv + half2(step, -step);
  20. result += tex2D(source, texCoord);
  21. texCoord = uv + half2(step, 0);
  22. result += 2.0* tex2D(source, texCoord);
  23. texCoord = uv + half2(step, -step);
  24. result += tex2D(source, texCoord);
  25. result = result * 0.0625;
  26. return result;
  27. }
  28. half BlurHD_G(half bhqp, half x)
  29. {
  30. return exp(-(x * x) / (2.0 * bhqp * bhqp));
  31. }
  32. half4 BlurHD(half2 uv, sampler2D source, half Intensity)
  33. {
  34. int iterations = 16;
  35. int halfIterations = iterations / 2;
  36. half sigmaX = 0.1 + Intensity * 0.5;
  37. half sigmaY = sigmaX;
  38. half total = 0.0;
  39. half4 ret = half4(0, 0, 0, 0);
  40. for (int iy = 0; iy < iterations; ++iy)
  41. {
  42. half fy = BlurHD_G(sigmaY, half(iy) -half(halfIterations));
  43. half offsety = half(iy - halfIterations) * 0.00390625;
  44. for (int ix = 0; ix < iterations; ++ix)
  45. {
  46. half fx = BlurHD_G(sigmaX, half(ix) - half(halfIterations));
  47. half offsetx = half(ix - halfIterations) * 0.00390625;
  48. total += fx * fy;
  49. ret += tex2D(source, uv + half2(offsetx, offsety)) * fx * fy;
  50. }
  51. }
  52. return ret / total;
  53. }
  54. //-----------------------------------------------------------------------
  55. half rand(half2 seed, half offset) {
  56. return (frac(sin(dot(seed, half2(12.9898, 78.233))) * 43758.5453) + offset) % 1.0;
  57. }
  58. half rand2(half2 seed, half offset) {
  59. return (frac(sin(dot(seed * floor(50 + (_Time % 1.0) * 12.), half2(127.1, 311.7))) * 43758.5453123) + offset) % 1.0;
  60. }
  61. //-----------------------------------------------------------------------
  62. half RemapFloat(half inValue, half inMin, half inMax, half outMin, half outMax){
  63. return outMin + (inValue - inMin) * (outMax - outMin) / (inMax - inMin);
  64. }