FinalComposite.ankiprog 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <!--
  2. Copyright (C) 2009-2018, Panagiotis Christopoulos Charitos and contributors.
  3. All rights reserved.
  4. Code licensed under the BSD License.
  5. http://www.anki3d.org/LICENSE
  6. -->
  7. <shaderProgram>
  8. <mutators>
  9. <mutator name="BLUE_NOISE" values="0 1"/>
  10. <mutator name="SHARPEN_ENABLED" values="0 1"/>
  11. <mutator name="BLOOM_ENABLED" values="0 1"/>
  12. <mutator name="DBG_ENABLED" values="0 1"/>
  13. </mutators>
  14. <shaders>
  15. <shader type="vert">
  16. <source><![CDATA[
  17. #include "shaders/QuadVert.glsl"
  18. ]]></source>
  19. </shader>
  20. <shader type="frag">
  21. <inputs>
  22. <input name="LUT_SIZE" type="uint" const="1"/>
  23. <input name="FB_SIZE" type="uvec2" const="1"/>
  24. </inputs>
  25. <source><![CDATA[
  26. #include "shaders/Common.glsl"
  27. #include "shaders/Tonemapping.glsl"
  28. #include "shaders/Functions.glsl"
  29. layout(ANKI_TEX_BINDING(0, 0)) uniform sampler2D u_isRt;
  30. layout(ANKI_TEX_BINDING(0, 1)) uniform sampler2D u_ppsBloomLfRt;
  31. layout(ANKI_TEX_BINDING(0, 2)) uniform sampler3D u_lut;
  32. layout(ANKI_TEX_BINDING(0, 3)) uniform sampler2DArray u_blueNoise;
  33. #if DBG_ENABLED
  34. layout(ANKI_TEX_BINDING(0, 5)) uniform sampler2D u_dbgRt;
  35. #endif
  36. layout(std140, ANKI_UBO_BINDING(0, 0)) uniform u0_
  37. {
  38. vec4 u_blueNoiseLayerPad3;
  39. };
  40. #define TONEMAPPING_BINDING 1
  41. #include "shaders/TonemappingResources.glsl"
  42. layout(location = 0) in vec2 in_uv;
  43. layout(location = 0) out vec3 out_color;
  44. vec3 colorGrading(in vec3 color)
  45. {
  46. const vec3 LUT_SCALE = vec3((float(LUT_SIZE) - 1.0) / float(LUT_SIZE));
  47. const vec3 LUT_OFFSET = vec3(1.0 / (2.0 * float(LUT_SIZE)));
  48. color = min(color, vec3(1.0));
  49. vec3 lutCoords = color * LUT_SCALE + LUT_OFFSET;
  50. return textureLod(u_lut, lutCoords, 0.0).rgb;
  51. }
  52. void main()
  53. {
  54. vec2 uv = in_uv.xy;
  55. #if SHARPEN_ENABLED
  56. out_color = readSharpen(u_isRt, uv, 0.15, true);
  57. #else
  58. out_color = textureLod(u_isRt, uv, 0.0).rgb;
  59. #endif
  60. out_color = tonemap(out_color, readFirstInvocationARB(u_exposureThreshold0));
  61. #if BLOOM_ENABLED
  62. vec3 bloom = textureLod(u_ppsBloomLfRt, uv, 0.0).rgb;
  63. out_color += bloom;
  64. #endif
  65. out_color = colorGrading(out_color);
  66. #if BLUE_NOISE
  67. vec3 blueNoise = textureLod(u_blueNoise, vec3(FB_SIZE / vec2(64.0) * uv, u_blueNoiseLayerPad3.x), 0.0).rgb;
  68. blueNoise = blueNoise * 2.0 - 1.0;
  69. blueNoise = sign(blueNoise) * (1.0 - sqrt(1.0 - abs(blueNoise)));
  70. out_color += blueNoise / 255.0;
  71. #endif
  72. #if 0
  73. {
  74. out_color = vec3(textureLod(u_isRt, uv, 0.0).rgb);
  75. }
  76. #endif
  77. #if DBG_ENABLED
  78. out_color += textureLod(u_dbgRt, uv, 0.0).rgb;
  79. #endif
  80. }
  81. ]]></source>
  82. </shader>
  83. </shaders>
  84. </shaderProgram>