HDRBloomTonemap.qml 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. // Copyright (C) 2020 The Qt Company Ltd.
  2. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
  3. import QtQuick
  4. import QtQuick3D
  5. Effect {
  6. readonly property TextureInput downsample2: TextureInput {
  7. texture: Texture {}
  8. }
  9. readonly property TextureInput downsample4: TextureInput {
  10. texture: Texture {}
  11. }
  12. property real gamma: 1 // 0.1 - 4
  13. property real exposure: 0 // -9 - 9
  14. readonly property real exposureExp2: Math.pow(2, exposure)
  15. property real bloomThreshold: 1
  16. property real blurFalloff: 0 // 0 - 10
  17. readonly property real negativeBlurFalloffExp2: Math.pow(2, -blurFalloff)
  18. property real tonemappingLerp: 1 // 0 - 1
  19. property real channelThreshold: 1
  20. readonly property real poissonRotation: 0
  21. readonly property real poissonDistance: 4
  22. Shader {
  23. id: luminosityVert
  24. stage: Shader.Vertex
  25. shader: "qrc:/qtquick3deffects/shaders/luminosity.vert"
  26. }
  27. Shader {
  28. id: luminosityFrag
  29. stage: Shader.Fragment
  30. shader: "qrc:/qtquick3deffects/shaders/luminosity.frag"
  31. }
  32. Shader {
  33. id: blurVert
  34. stage: Shader.Vertex
  35. shader: "qrc:/qtquick3deffects/shaders/poissonblur.vert"
  36. }
  37. Shader {
  38. id: blurFrag
  39. stage: Shader.Fragment
  40. shader: "qrc:/qtquick3deffects/shaders/poissonblur.frag"
  41. }
  42. Shader {
  43. id: combiner
  44. stage: Shader.Fragment
  45. shader: "qrc:/qtquick3deffects/shaders/combiner.frag"
  46. }
  47. Buffer {
  48. id: luminosity_buffer2
  49. name: "luminosity_buffer2"
  50. format: Buffer.RGBA8
  51. textureFilterOperation: Buffer.Linear
  52. textureCoordOperation: Buffer.ClampToEdge
  53. bufferFlags: Buffer.None
  54. sizeMultiplier: 0.5
  55. }
  56. Buffer {
  57. id: downsample_buffer2
  58. name: "downsample_buffer2"
  59. format: Buffer.RGBA8
  60. textureFilterOperation: Buffer.Linear
  61. textureCoordOperation: Buffer.ClampToEdge
  62. bufferFlags: Buffer.None
  63. sizeMultiplier: 0.5
  64. }
  65. Buffer {
  66. id: downsample_buffer4
  67. name: "downsample_buffer4"
  68. format: Buffer.RGBA8
  69. textureFilterOperation: Buffer.Linear
  70. textureCoordOperation: Buffer.ClampToEdge
  71. bufferFlags: Buffer.None
  72. sizeMultiplier: 0.25
  73. }
  74. passes: [
  75. Pass {
  76. shaders: [ luminosityVert, luminosityFrag ]
  77. output: downsample_buffer2
  78. },
  79. Pass {
  80. shaders: [ luminosityVert, luminosityFrag ]
  81. commands: BufferInput {
  82. buffer: downsample_buffer2
  83. }
  84. output: luminosity_buffer2
  85. },
  86. Pass {
  87. shaders: [ blurVert, blurFrag ]
  88. commands: BufferInput {
  89. buffer: luminosity_buffer2
  90. }
  91. output: downsample_buffer2
  92. },
  93. Pass {
  94. shaders: [ blurVert, blurFrag ]
  95. commands: [
  96. SetUniformValue {
  97. target: "poissonRotation"
  98. value: 0.62831
  99. },
  100. BufferInput {
  101. buffer: luminosity_buffer2
  102. }
  103. ]
  104. output: downsample_buffer4
  105. },
  106. Pass {
  107. shaders: [ combiner ]
  108. commands: [
  109. BufferInput {
  110. sampler: "downsample2"
  111. buffer: downsample_buffer2
  112. },
  113. BufferInput {
  114. sampler: "downsample4"
  115. buffer: downsample_buffer4
  116. }
  117. ]
  118. }
  119. ]
  120. }