Bloom.hlsl 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "Uniforms.hlsl"
  2. #include "Transform.hlsl"
  3. #include "Samplers.hlsl"
  4. #include "ScreenPos.hlsl"
  5. uniform float cBloomThreshold;
  6. uniform float2 cBloomMix;
  7. uniform float2 cHBlurOffsets;
  8. uniform float2 cHBlurInvSize;
  9. static const float offsets[5] = {
  10. 2.0,
  11. 1.0,
  12. 0.0,
  13. -1.0,
  14. -2.0,
  15. };
  16. static const float weights[5] = {
  17. 0.1,
  18. 0.25,
  19. 0.3,
  20. 0.25,
  21. 0.1
  22. };
  23. void VS(float4 iPos : POSITION,
  24. out float4 oPos : POSITION,
  25. out float2 oTexCoord : TEXCOORD0,
  26. out float2 oScreenPos : TEXCOORD1)
  27. {
  28. float4x3 modelMatrix = iModelMatrix;
  29. float3 worldPos = GetWorldPos(modelMatrix);
  30. oPos = GetClipPos(worldPos);
  31. oTexCoord = GetQuadTexCoord(oPos) + cHBlurOffsets;
  32. oScreenPos = GetScreenPosPreDiv(oPos);
  33. }
  34. void PS(float2 iTexCoord : TEXCOORD0,
  35. float2 iScreenPos : TEXCOORD1,
  36. out float4 oColor : COLOR0)
  37. {
  38. #ifdef BRIGHT
  39. float3 rgb = tex2D(sDiffMap, iScreenPos).rgb;
  40. oColor = float4((rgb - cBloomThreshold) / (1.0 - cBloomThreshold), 1.0);
  41. #endif
  42. #ifdef HBLUR
  43. float3 rgb = 0.0;
  44. for (int i = 0; i < 5; ++i)
  45. rgb += tex2D(sDiffMap, iTexCoord + (float2(offsets[i], 0.0)) * cHBlurInvSize).rgb * weights[i];
  46. oColor = float4(rgb, 1.0);
  47. #endif
  48. #ifdef VBLUR
  49. float3 rgb = 0.0;
  50. for (int i = 0; i < 5; ++i)
  51. rgb += tex2D(sDiffMap, iTexCoord + (float2(0.0, offsets[i])) * cHBlurInvSize).rgb * weights[i];
  52. oColor = float4(rgb, 1.0);
  53. #endif
  54. #ifdef COMBINE
  55. float3 original = tex2D(sDiffMap, iScreenPos).rgb * cBloomMix.x;
  56. float3 bloom = tex2D(sNormalMap, iTexCoord).rgb * cBloomMix.y;
  57. // Prevent oversaturation
  58. original *= saturate(1.0 - bloom);
  59. oColor = float4(original + bloom, 1.0);
  60. #endif
  61. }