FinalComposite.ankiprog 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <!--
  2. Copyright (C) 2009-2017, 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/Quad.vert.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. layout(std140, ANKI_SS_BINDING(0, 0)) readonly buffer s0_
  41. {
  42. vec4 u_averageLuminancePad3;
  43. };
  44. layout(location = 0) in vec2 in_uv;
  45. layout(location = 0) out vec3 out_color;
  46. vec3 colorGrading(in vec3 color)
  47. {
  48. const vec3 LUT_SCALE = vec3((float(LUT_SIZE) - 1.0) / float(LUT_SIZE));
  49. const vec3 LUT_OFFSET = vec3(1.0 / (2.0 * float(LUT_SIZE)));
  50. color = min(color, vec3(1.0));
  51. vec3 lutCoords = color * LUT_SCALE + LUT_OFFSET;
  52. return textureLod(u_lut, lutCoords, 0.0).rgb;
  53. }
  54. void main()
  55. {
  56. vec2 uv = in_uv.xy;
  57. #if SHARPEN_ENABLED
  58. out_color = readSharpen(u_isRt, uv, 0.15, true);
  59. #else
  60. out_color = textureLod(u_isRt, uv, 0.0).rgb;
  61. #endif
  62. out_color = tonemap(out_color, readFirstInvocationARB(u_averageLuminancePad3.x), 0.0);
  63. #if BLOOM_ENABLED
  64. vec3 bloom = textureLod(u_ppsBloomLfRt, uv, 0.0).rgb;
  65. out_color += bloom;
  66. #endif
  67. out_color = colorGrading(out_color);
  68. #if BLUE_NOISE
  69. vec3 blueNoise = textureLod(u_blueNoise, vec3(FB_SIZE / vec2(64.0) * uv, u_blueNoiseLayerPad3.x), 0.0).rgb;
  70. blueNoise = blueNoise * 2.0 - 1.0;
  71. blueNoise = sign(blueNoise) * (1.0 - sqrt(1.0 - abs(blueNoise)));
  72. out_color += blueNoise / 255.0;
  73. #endif
  74. #if 0
  75. {
  76. out_color = vec3(textureLod(u_isRt, uv, 0.0).r);
  77. }
  78. #endif
  79. #if DBG_ENABLED
  80. out_color += textureLod(u_dbgRt, uv, 0.0).rgb;
  81. #endif
  82. }
  83. ]]></source>
  84. </shader>
  85. </shaders>
  86. </shaderProgram>