@zephyr3d/scene 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (722) hide show
  1. package/dist/animation/animation.js +149 -27
  2. package/dist/animation/animation.js.map +1 -1
  3. package/dist/animation/animationset.js +173 -73
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js +65 -10
  6. package/dist/animation/animationtrack.js.map +1 -1
  7. package/dist/animation/eulerrotationtrack.js +41 -20
  8. package/dist/animation/eulerrotationtrack.js.map +1 -1
  9. package/dist/animation/morphtarget.js +14 -38
  10. package/dist/animation/morphtarget.js.map +1 -1
  11. package/dist/animation/morphtrack.js +59 -22
  12. package/dist/animation/morphtrack.js.map +1 -1
  13. package/dist/animation/proptrack.js +190 -0
  14. package/dist/animation/proptrack.js.map +1 -0
  15. package/dist/animation/rotationtrack.js +29 -11
  16. package/dist/animation/rotationtrack.js.map +1 -1
  17. package/dist/animation/scaletrack.js +29 -11
  18. package/dist/animation/scaletrack.js.map +1 -1
  19. package/dist/animation/skeleton.js +241 -78
  20. package/dist/animation/skeleton.js.map +1 -1
  21. package/dist/animation/translationtrack.js +30 -11
  22. package/dist/animation/translationtrack.js.map +1 -1
  23. package/dist/app/api.js +43 -0
  24. package/dist/app/api.js.map +1 -0
  25. package/dist/app/app.js +153 -0
  26. package/dist/app/app.js.map +1 -0
  27. package/dist/app/engine.js +312 -0
  28. package/dist/app/engine.js.map +1 -0
  29. package/dist/app/inputmgr.js +351 -0
  30. package/dist/app/inputmgr.js.map +1 -0
  31. package/dist/app/runtimescript.js +62 -0
  32. package/dist/app/runtimescript.js.map +1 -0
  33. package/dist/app/scriptingsystem.js +220 -0
  34. package/dist/app/scriptingsystem.js.map +1 -0
  35. package/dist/app/scriptregistry.js +432 -0
  36. package/dist/app/scriptregistry.js.map +1 -0
  37. package/dist/asset/assetmanager.js +772 -291
  38. package/dist/asset/assetmanager.js.map +1 -1
  39. package/dist/asset/builtin.js +7 -43
  40. package/dist/asset/builtin.js.map +1 -1
  41. package/dist/asset/loaders/dds/dds.js +17 -93
  42. package/dist/asset/loaders/dds/dds.js.map +1 -1
  43. package/dist/asset/loaders/dds/dds_loader.js +8 -18
  44. package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
  45. package/dist/asset/loaders/gltf/gltf_loader.js +36 -42
  46. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  47. package/dist/asset/loaders/gltf/helpers.js +27 -14
  48. package/dist/asset/loaders/gltf/helpers.js.map +1 -1
  49. package/dist/asset/loaders/hdr/hdr.js +17 -12
  50. package/dist/asset/loaders/hdr/hdr.js.map +1 -1
  51. package/dist/asset/loaders/image/tga_Loader.js +13 -16
  52. package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
  53. package/dist/asset/loaders/image/webimage_loader.js +51 -50
  54. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  55. package/dist/asset/loaders/loader.js.map +1 -1
  56. package/dist/asset/model.js +158 -4
  57. package/dist/asset/model.js.map +1 -1
  58. package/dist/blitter/bilateralblur.js +0 -1
  59. package/dist/blitter/bilateralblur.js.map +1 -1
  60. package/dist/blitter/blitter.js +22 -23
  61. package/dist/blitter/blitter.js.map +1 -1
  62. package/dist/blitter/box.js.map +1 -1
  63. package/dist/blitter/copy.js.map +1 -1
  64. package/dist/blitter/gaussianblur.js +23 -23
  65. package/dist/blitter/gaussianblur.js.map +1 -1
  66. package/dist/camera/base.js +141 -34
  67. package/dist/camera/base.js.map +1 -1
  68. package/dist/camera/camera.js +653 -149
  69. package/dist/camera/camera.js.map +1 -1
  70. package/dist/camera/fps.js +2 -10
  71. package/dist/camera/fps.js.map +1 -1
  72. package/dist/camera/orbit.js +132 -59
  73. package/dist/camera/orbit.js.map +1 -1
  74. package/dist/camera/orthocamera.js +37 -12
  75. package/dist/camera/orthocamera.js.map +1 -1
  76. package/dist/camera/perspectivecamera.js +37 -20
  77. package/dist/camera/perspectivecamera.js.map +1 -1
  78. package/dist/index.d.ts +18268 -6982
  79. package/dist/index.js +49 -16
  80. package/dist/index.js.map +1 -1
  81. package/dist/material/blinn.js +5 -0
  82. package/dist/material/blinn.js.map +1 -1
  83. package/dist/material/grassmaterial.js +6 -1
  84. package/dist/material/grassmaterial.js.map +1 -1
  85. package/dist/material/lambert.js +6 -1
  86. package/dist/material/lambert.js.map +1 -1
  87. package/dist/material/material.js +346 -73
  88. package/dist/material/material.js.map +1 -1
  89. package/dist/material/meshmaterial.js +498 -156
  90. package/dist/material/meshmaterial.js.map +1 -1
  91. package/dist/material/mixins/albedocolor.js +5 -1
  92. package/dist/material/mixins/albedocolor.js.map +1 -1
  93. package/dist/material/mixins/foliage.js +3 -3
  94. package/dist/material/mixins/foliage.js.map +1 -1
  95. package/dist/material/mixins/lightmodel/blinnphong.js +18 -5
  96. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  97. package/dist/material/mixins/lightmodel/lambert.js +6 -6
  98. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  99. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +235 -0
  100. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -0
  101. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +52 -15
  102. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  103. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +27 -9
  104. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  105. package/dist/material/mixins/lit.js +16 -4
  106. package/dist/material/mixins/lit.js.map +1 -1
  107. package/dist/material/mixins/pbr/brdf.js +134 -0
  108. package/dist/material/mixins/pbr/brdf.js.map +1 -0
  109. package/dist/material/mixins/pbr/common.js +68 -85
  110. package/dist/material/mixins/pbr/common.js.map +1 -1
  111. package/dist/material/mixins/texture.js +98 -83
  112. package/dist/material/mixins/texture.js.map +1 -1
  113. package/dist/material/mixins/vertexcolor.js +6 -2
  114. package/dist/material/mixins/vertexcolor.js.map +1 -1
  115. package/dist/material/particle.js +272 -0
  116. package/dist/material/particle.js.map +1 -0
  117. package/dist/material/pbrblueprint.js +186 -0
  118. package/dist/material/pbrblueprint.js.map +1 -0
  119. package/dist/material/pbrmr.js +10 -0
  120. package/dist/material/pbrmr.js.map +1 -1
  121. package/dist/material/pbrsg.js +10 -0
  122. package/dist/material/pbrsg.js.map +1 -1
  123. package/dist/material/shader/helper.js +521 -287
  124. package/dist/material/shader/helper.js.map +1 -1
  125. package/dist/material/terrain-cm.js +607 -0
  126. package/dist/material/terrain-cm.js.map +1 -0
  127. package/dist/material/terrainmaterial.js +59 -54
  128. package/dist/material/terrainmaterial.js.map +1 -1
  129. package/dist/material/unlit.js +5 -0
  130. package/dist/material/unlit.js.map +1 -1
  131. package/dist/material/water.js +415 -0
  132. package/dist/material/water.js.map +1 -0
  133. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  134. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  135. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  136. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  137. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  138. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  139. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  140. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  141. package/dist/node_modules/es-module-lexer/dist/lexer.js +5 -0
  142. package/dist/node_modules/es-module-lexer/dist/lexer.js.map +1 -0
  143. package/dist/posteffect/bloom.js +39 -54
  144. package/dist/posteffect/bloom.js.map +1 -1
  145. package/dist/posteffect/compositor.js +95 -128
  146. package/dist/posteffect/compositor.js.map +1 -1
  147. package/dist/posteffect/fxaa.js +10 -18
  148. package/dist/posteffect/fxaa.js.map +1 -1
  149. package/dist/posteffect/grayscale.js +9 -17
  150. package/dist/posteffect/grayscale.js.map +1 -1
  151. package/dist/posteffect/motionblur.js +105 -0
  152. package/dist/posteffect/motionblur.js.map +1 -0
  153. package/dist/posteffect/posteffect.js +66 -35
  154. package/dist/posteffect/posteffect.js.map +1 -1
  155. package/dist/posteffect/sao.js +13 -21
  156. package/dist/posteffect/sao.js.map +1 -1
  157. package/dist/posteffect/ssr.js +60 -100
  158. package/dist/posteffect/ssr.js.map +1 -1
  159. package/dist/posteffect/taa.js +175 -0
  160. package/dist/posteffect/taa.js.map +1 -0
  161. package/dist/posteffect/tonemap.js +12 -20
  162. package/dist/posteffect/tonemap.js.map +1 -1
  163. package/dist/render/abuffer_oit.js +30 -19
  164. package/dist/render/abuffer_oit.js.map +1 -1
  165. package/dist/render/clipmap.js +429 -101
  166. package/dist/render/clipmap.js.map +1 -1
  167. package/dist/render/cluster_light.js +7 -5
  168. package/dist/render/cluster_light.js.map +1 -1
  169. package/dist/render/cull_visitor.js +43 -3
  170. package/dist/render/cull_visitor.js.map +1 -1
  171. package/dist/render/depthpass.js +14 -5
  172. package/dist/render/depthpass.js.map +1 -1
  173. package/dist/render/drawable_mixin.js +113 -40
  174. package/dist/render/drawable_mixin.js.map +1 -1
  175. package/dist/render/envlight.js +86 -141
  176. package/dist/render/envlight.js.map +1 -1
  177. package/dist/render/fbm_wavegenerator.js +234 -0
  178. package/dist/render/fbm_wavegenerator.js.map +1 -0
  179. package/dist/render/fft_wavegenerator.js +64 -50
  180. package/dist/render/fft_wavegenerator.js.map +1 -1
  181. package/dist/render/fullscreenquad.js +2 -2
  182. package/dist/render/fullscreenquad.js.map +1 -1
  183. package/dist/render/gerstner_wavegenerator.js +98 -48
  184. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  185. package/dist/render/globalbindgroup_allocator.js +4 -2
  186. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  187. package/dist/render/hzb.js +6 -3
  188. package/dist/render/hzb.js.map +1 -1
  189. package/dist/render/lightpass.js +19 -18
  190. package/dist/render/lightpass.js.map +1 -1
  191. package/dist/render/objectcolorpass.js +4 -4
  192. package/dist/render/objectcolorpass.js.map +1 -1
  193. package/dist/render/primitive.js +213 -104
  194. package/dist/render/primitive.js.map +1 -1
  195. package/dist/render/render_queue.js +40 -20
  196. package/dist/render/render_queue.js.map +1 -1
  197. package/dist/render/renderbundle_wrapper.js +65 -15
  198. package/dist/render/renderbundle_wrapper.js.map +1 -1
  199. package/dist/render/renderer.js +326 -185
  200. package/dist/render/renderer.js.map +1 -1
  201. package/dist/render/renderpass.js +20 -36
  202. package/dist/render/renderpass.js.map +1 -1
  203. package/dist/render/shadowmap_pass.js +3 -3
  204. package/dist/render/shadowmap_pass.js.map +1 -1
  205. package/dist/render/sky.js +864 -541
  206. package/dist/render/sky.js.map +1 -1
  207. package/dist/render/weightedblended_oit.js +13 -15
  208. package/dist/render/weightedblended_oit.js.map +1 -1
  209. package/dist/scene/batchgroup.js +18 -5
  210. package/dist/scene/batchgroup.js.map +1 -1
  211. package/dist/scene/environment.js +78 -48
  212. package/dist/scene/environment.js.map +1 -1
  213. package/dist/scene/graph_node.js +2 -3
  214. package/dist/scene/graph_node.js.map +1 -1
  215. package/dist/scene/light.js +28 -89
  216. package/dist/scene/light.js.map +1 -1
  217. package/dist/scene/mesh.js +218 -87
  218. package/dist/scene/mesh.js.map +1 -1
  219. package/dist/scene/octree.js +371 -162
  220. package/dist/scene/octree.js.map +1 -1
  221. package/dist/scene/particlesys.js +684 -0
  222. package/dist/scene/particlesys.js.map +1 -0
  223. package/dist/scene/raycast_visitor.js +34 -5
  224. package/dist/scene/raycast_visitor.js.map +1 -1
  225. package/dist/scene/scene.js +309 -85
  226. package/dist/scene/scene.js.map +1 -1
  227. package/dist/scene/scene_node.js +675 -102
  228. package/dist/scene/scene_node.js.map +1 -1
  229. package/dist/scene/terrain/grass.js +48 -49
  230. package/dist/scene/terrain/grass.js.map +1 -1
  231. package/dist/scene/terrain/heightfield.js +46 -44
  232. package/dist/scene/terrain/heightfield.js.map +1 -1
  233. package/dist/scene/terrain/patch.js +20 -29
  234. package/dist/scene/terrain/patch.js.map +1 -1
  235. package/dist/scene/terrain/quadtree.js +58 -27
  236. package/dist/scene/terrain/quadtree.js.map +1 -1
  237. package/dist/scene/terrain/terrain.js +31 -45
  238. package/dist/scene/terrain/terrain.js.map +1 -1
  239. package/dist/scene/terrain-cm/grass.js +603 -0
  240. package/dist/scene/terrain-cm/grass.js.map +1 -0
  241. package/dist/scene/terrain-cm/grassmaterial.js +160 -0
  242. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -0
  243. package/dist/scene/terrain-cm/terrain-cm.js +533 -0
  244. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -0
  245. package/dist/scene/water.js +378 -0
  246. package/dist/scene/water.js.map +1 -0
  247. package/dist/shaders/atmosphere.js +957 -0
  248. package/dist/shaders/atmosphere.js.map +1 -0
  249. package/dist/shaders/fog.js +116 -0
  250. package/dist/shaders/fog.js.map +1 -0
  251. package/dist/shaders/misc.js.map +1 -1
  252. package/dist/shaders/noise.js +217 -8
  253. package/dist/shaders/noise.js.map +1 -1
  254. package/dist/shaders/pbr.js.map +1 -1
  255. package/dist/shaders/shadow.js +8 -8
  256. package/dist/shaders/shadow.js.map +1 -1
  257. package/dist/shaders/ssr.js +87 -39
  258. package/dist/shaders/ssr.js.map +1 -1
  259. package/dist/shaders/temporal.js +216 -0
  260. package/dist/shaders/temporal.js.map +1 -0
  261. package/dist/shaders/water.js +42 -20
  262. package/dist/shaders/water.js.map +1 -1
  263. package/dist/shadow/esm.js +31 -13
  264. package/dist/shadow/esm.js.map +1 -1
  265. package/dist/shadow/pcf_opt.js +12 -13
  266. package/dist/shadow/pcf_opt.js.map +1 -1
  267. package/dist/shadow/pcf_pd.js +12 -13
  268. package/dist/shadow/pcf_pd.js.map +1 -1
  269. package/dist/shadow/shader.js +38 -0
  270. package/dist/shadow/shader.js.map +1 -0
  271. package/dist/shadow/shadow_impl.js.map +1 -1
  272. package/dist/shadow/shadowmapper.js +67 -26
  273. package/dist/shadow/shadowmapper.js.map +1 -1
  274. package/dist/shadow/ssm.js +15 -16
  275. package/dist/shadow/ssm.js.map +1 -1
  276. package/dist/shadow/vsm.js +33 -16
  277. package/dist/shadow/vsm.js.map +1 -1
  278. package/dist/shapes/box.js +181 -83
  279. package/dist/shapes/box.js.map +1 -1
  280. package/dist/shapes/cylinder.js +101 -43
  281. package/dist/shapes/cylinder.js.map +1 -1
  282. package/dist/shapes/plane.js +70 -29
  283. package/dist/shapes/plane.js.map +1 -1
  284. package/dist/shapes/shape.js +120 -17
  285. package/dist/shapes/shape.js.map +1 -1
  286. package/dist/shapes/sphere.js +78 -44
  287. package/dist/shapes/sphere.js.map +1 -1
  288. package/dist/shapes/tetrahedron.js +256 -0
  289. package/dist/shapes/tetrahedron.js.map +1 -0
  290. package/dist/shapes/torus.js +76 -55
  291. package/dist/shapes/torus.js.map +1 -1
  292. package/dist/src/animation/animation.js +127 -0
  293. package/dist/src/animation/animation.js.map +1 -0
  294. package/dist/src/animation/animationset.js +255 -0
  295. package/dist/src/animation/animationset.js.map +1 -0
  296. package/dist/src/animation/animationtrack.js +34 -0
  297. package/dist/src/animation/animationtrack.js.map +1 -0
  298. package/dist/src/animation/eulerrotationtrack.js +52 -0
  299. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  300. package/dist/src/animation/morphtarget.js +93 -0
  301. package/dist/src/animation/morphtarget.js.map +1 -0
  302. package/dist/src/animation/morphtrack.js +70 -0
  303. package/dist/src/animation/morphtrack.js.map +1 -0
  304. package/dist/src/animation/proptrack.js +161 -0
  305. package/dist/src/animation/proptrack.js.map +1 -0
  306. package/dist/src/animation/rotationtrack.js +51 -0
  307. package/dist/src/animation/rotationtrack.js.map +1 -0
  308. package/dist/src/animation/scaletrack.js +50 -0
  309. package/dist/src/animation/scaletrack.js.map +1 -0
  310. package/dist/src/animation/skeleton.js +204 -0
  311. package/dist/src/animation/skeleton.js.map +1 -0
  312. package/dist/src/animation/translationtrack.js +50 -0
  313. package/dist/src/animation/translationtrack.js.map +1 -0
  314. package/dist/{app.js → src/app/app.js} +18 -40
  315. package/dist/src/app/app.js.map +1 -0
  316. package/dist/{input → src/app}/inputmgr.js +41 -16
  317. package/dist/src/app/inputmgr.js.map +1 -0
  318. package/dist/src/asset/assetmanager.js +404 -0
  319. package/dist/src/asset/assetmanager.js.map +1 -0
  320. package/dist/src/asset/builtin.js +337 -0
  321. package/dist/src/asset/builtin.js.map +1 -0
  322. package/dist/src/asset/loaders/dds/dds.js +470 -0
  323. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  324. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  325. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  326. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  327. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  328. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  329. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  330. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  331. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  332. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  333. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  334. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  335. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  336. package/dist/src/asset/loaders/loader.js +45 -0
  337. package/dist/src/asset/loaders/loader.js.map +1 -0
  338. package/dist/src/asset/model.js +414 -0
  339. package/dist/src/asset/model.js.map +1 -0
  340. package/dist/{blitter/depthlimitedgaussion.js → src/blitter/bilateralblur.js} +1 -2
  341. package/dist/src/blitter/bilateralblur.js.map +1 -0
  342. package/dist/src/blitter/blitter.js +390 -0
  343. package/dist/src/blitter/blitter.js.map +1 -0
  344. package/dist/src/blitter/box.js +118 -0
  345. package/dist/src/blitter/box.js.map +1 -0
  346. package/dist/src/blitter/copy.js +22 -0
  347. package/dist/src/blitter/copy.js.map +1 -0
  348. package/dist/src/blitter/gaussianblur.js +228 -0
  349. package/dist/src/blitter/gaussianblur.js.map +1 -0
  350. package/dist/src/camera/base.js +92 -0
  351. package/dist/src/camera/base.js.map +1 -0
  352. package/dist/src/camera/camera.js +1005 -0
  353. package/dist/src/camera/camera.js.map +1 -0
  354. package/dist/src/camera/fps.js +238 -0
  355. package/dist/src/camera/fps.js.map +1 -0
  356. package/dist/src/camera/orbit.js +245 -0
  357. package/dist/src/camera/orbit.js.map +1 -0
  358. package/dist/src/camera/orthocamera.js +167 -0
  359. package/dist/src/camera/orthocamera.js.map +1 -0
  360. package/dist/src/camera/perspectivecamera.js +141 -0
  361. package/dist/src/camera/perspectivecamera.js.map +1 -0
  362. package/dist/src/index.js +120 -0
  363. package/dist/src/index.js.map +1 -0
  364. package/dist/src/material/blinn.js +81 -0
  365. package/dist/src/material/blinn.js.map +1 -0
  366. package/dist/src/material/grassmaterial.js +113 -0
  367. package/dist/src/material/grassmaterial.js.map +1 -0
  368. package/dist/src/material/lambert.js +92 -0
  369. package/dist/src/material/lambert.js.map +1 -0
  370. package/dist/src/material/material.js +301 -0
  371. package/dist/src/material/material.js.map +1 -0
  372. package/dist/src/material/meshmaterial.js +704 -0
  373. package/dist/src/material/meshmaterial.js.map +1 -0
  374. package/dist/src/material/mixins/albedocolor.js +76 -0
  375. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  376. package/dist/src/material/mixins/foliage.js +47 -0
  377. package/dist/src/material/mixins/foliage.js.map +1 -0
  378. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  379. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  380. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  381. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  382. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  383. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  384. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  385. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  386. package/dist/src/material/mixins/lit.js +476 -0
  387. package/dist/src/material/mixins/lit.js.map +1 -0
  388. package/dist/src/material/mixins/pbr/common.js +918 -0
  389. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  390. package/dist/src/material/mixins/texture.js +172 -0
  391. package/dist/src/material/mixins/texture.js.map +1 -0
  392. package/dist/src/material/mixins/vertexcolor.js +56 -0
  393. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  394. package/dist/src/material/particle.js +178 -0
  395. package/dist/src/material/particle.js.map +1 -0
  396. package/dist/src/material/pbrmr.js +97 -0
  397. package/dist/src/material/pbrmr.js.map +1 -0
  398. package/dist/src/material/pbrsg.js +97 -0
  399. package/dist/src/material/pbrsg.js.map +1 -0
  400. package/dist/src/material/shader/helper.js +1209 -0
  401. package/dist/src/material/shader/helper.js.map +1 -0
  402. package/dist/src/material/terrain-cm.js +606 -0
  403. package/dist/src/material/terrain-cm.js.map +1 -0
  404. package/dist/src/material/terrainmaterial.js +375 -0
  405. package/dist/src/material/terrainmaterial.js.map +1 -0
  406. package/dist/src/material/unlit.js +41 -0
  407. package/dist/src/material/unlit.js.map +1 -0
  408. package/dist/src/material/water.js +417 -0
  409. package/dist/src/material/water.js.map +1 -0
  410. package/dist/src/posteffect/bloom.js +361 -0
  411. package/dist/src/posteffect/bloom.js.map +1 -0
  412. package/dist/src/posteffect/compositor.js +226 -0
  413. package/dist/src/posteffect/compositor.js.map +1 -0
  414. package/dist/src/posteffect/fxaa.js +273 -0
  415. package/dist/src/posteffect/fxaa.js.map +1 -0
  416. package/dist/src/posteffect/grayscale.js +69 -0
  417. package/dist/src/posteffect/grayscale.js.map +1 -0
  418. package/dist/src/posteffect/motionblur.js +96 -0
  419. package/dist/src/posteffect/motionblur.js.map +1 -0
  420. package/dist/src/posteffect/posteffect.js +126 -0
  421. package/dist/src/posteffect/posteffect.js.map +1 -0
  422. package/dist/src/posteffect/sao.js +324 -0
  423. package/dist/src/posteffect/sao.js.map +1 -0
  424. package/dist/src/posteffect/ssr.js +489 -0
  425. package/dist/src/posteffect/ssr.js.map +1 -0
  426. package/dist/src/posteffect/taa.js +172 -0
  427. package/dist/src/posteffect/taa.js.map +1 -0
  428. package/dist/src/posteffect/tonemap.js +94 -0
  429. package/dist/src/posteffect/tonemap.js.map +1 -0
  430. package/dist/src/render/abuffer_oit.js +361 -0
  431. package/dist/src/render/abuffer_oit.js.map +1 -0
  432. package/dist/src/render/clipmap.js +851 -0
  433. package/dist/src/render/clipmap.js.map +1 -0
  434. package/dist/src/render/cluster_light.js +333 -0
  435. package/dist/src/render/cluster_light.js.map +1 -0
  436. package/dist/src/render/cull_visitor.js +187 -0
  437. package/dist/src/render/cull_visitor.js.map +1 -0
  438. package/dist/src/render/depthpass.js +68 -0
  439. package/dist/src/render/depthpass.js.map +1 -0
  440. package/dist/src/render/drawable_mixin.js +227 -0
  441. package/dist/src/render/drawable_mixin.js.map +1 -0
  442. package/dist/src/render/envlight.js +463 -0
  443. package/dist/src/render/envlight.js.map +1 -0
  444. package/dist/src/render/fbm_wavegenerator.js +251 -0
  445. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  446. package/dist/src/render/fft_wavegenerator.js +1006 -0
  447. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  448. package/dist/src/render/fullscreenquad.js +38 -0
  449. package/dist/src/render/fullscreenquad.js.map +1 -0
  450. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  451. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  452. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  453. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  454. package/dist/src/render/hzb.js +273 -0
  455. package/dist/src/render/hzb.js.map +1 -0
  456. package/dist/src/render/lightpass.js +172 -0
  457. package/dist/src/render/lightpass.js.map +1 -0
  458. package/dist/src/render/objectcolorpass.js +51 -0
  459. package/dist/src/render/objectcolorpass.js.map +1 -0
  460. package/dist/src/render/primitive.js +364 -0
  461. package/dist/src/render/primitive.js.map +1 -0
  462. package/dist/src/render/render_queue.js +467 -0
  463. package/dist/src/render/render_queue.js.map +1 -0
  464. package/dist/src/render/renderbundle_wrapper.js +152 -0
  465. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  466. package/dist/src/render/renderer.js +455 -0
  467. package/dist/src/render/renderer.js.map +1 -0
  468. package/dist/src/render/renderpass.js +200 -0
  469. package/dist/src/render/renderpass.js.map +1 -0
  470. package/dist/src/render/shadowmap_pass.js +56 -0
  471. package/dist/src/render/shadowmap_pass.js.map +1 -0
  472. package/dist/src/render/sky.js +1103 -0
  473. package/dist/src/render/sky.js.map +1 -0
  474. package/dist/src/render/weightedblended_oit.js +168 -0
  475. package/dist/src/render/weightedblended_oit.js.map +1 -0
  476. package/dist/src/scene/batchgroup.js +162 -0
  477. package/dist/src/scene/batchgroup.js.map +1 -0
  478. package/dist/src/scene/environment.js +209 -0
  479. package/dist/src/scene/environment.js.map +1 -0
  480. package/dist/src/scene/graph_node.js +72 -0
  481. package/dist/src/scene/graph_node.js.map +1 -0
  482. package/dist/src/scene/light.js +416 -0
  483. package/dist/src/scene/light.js.map +1 -0
  484. package/dist/src/scene/mesh.js +341 -0
  485. package/dist/src/scene/mesh.js.map +1 -0
  486. package/dist/src/scene/octree.js +649 -0
  487. package/dist/src/scene/octree.js.map +1 -0
  488. package/dist/src/scene/particlesys.js +738 -0
  489. package/dist/src/scene/particlesys.js.map +1 -0
  490. package/dist/src/scene/raycast_visitor.js +103 -0
  491. package/dist/src/scene/raycast_visitor.js.map +1 -0
  492. package/dist/src/scene/scene.js +284 -0
  493. package/dist/src/scene/scene.js.map +1 -0
  494. package/dist/src/scene/scene_node.js +732 -0
  495. package/dist/src/scene/scene_node.js.map +1 -0
  496. package/dist/src/scene/terrain/grass.js +278 -0
  497. package/dist/src/scene/terrain/grass.js.map +1 -0
  498. package/dist/src/scene/terrain/heightfield.js +475 -0
  499. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  500. package/dist/src/scene/terrain/patch.js +530 -0
  501. package/dist/src/scene/terrain/patch.js.map +1 -0
  502. package/dist/src/scene/terrain/quadtree.js +461 -0
  503. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  504. package/dist/src/scene/terrain/terrain.js +246 -0
  505. package/dist/src/scene/terrain/terrain.js.map +1 -0
  506. package/dist/src/scene/terrain-cm/grass.js +594 -0
  507. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  508. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  509. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  510. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  511. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  512. package/dist/src/scene/water.js +374 -0
  513. package/dist/src/scene/water.js.map +1 -0
  514. package/dist/src/shaders/atmosphere.js +957 -0
  515. package/dist/src/shaders/atmosphere.js.map +1 -0
  516. package/dist/src/shaders/fog.js +112 -0
  517. package/dist/src/shaders/fog.js.map +1 -0
  518. package/dist/src/shaders/misc.js +266 -0
  519. package/dist/src/shaders/misc.js.map +1 -0
  520. package/dist/src/shaders/noise.js +222 -0
  521. package/dist/src/shaders/noise.js.map +1 -0
  522. package/dist/src/shaders/pbr.js +51 -0
  523. package/dist/src/shaders/pbr.js.map +1 -0
  524. package/dist/src/shaders/shadow.js +636 -0
  525. package/dist/src/shaders/shadow.js.map +1 -0
  526. package/dist/src/shaders/ssr.js +490 -0
  527. package/dist/src/shaders/ssr.js.map +1 -0
  528. package/dist/src/shaders/temporal.js +215 -0
  529. package/dist/src/shaders/temporal.js.map +1 -0
  530. package/dist/src/shaders/water.js +756 -0
  531. package/dist/src/shaders/water.js.map +1 -0
  532. package/dist/src/shadow/esm.js +237 -0
  533. package/dist/src/shadow/esm.js.map +1 -0
  534. package/dist/src/shadow/pcf_opt.js +181 -0
  535. package/dist/src/shadow/pcf_opt.js.map +1 -0
  536. package/dist/src/shadow/pcf_pd.js +189 -0
  537. package/dist/src/shadow/pcf_pd.js.map +1 -0
  538. package/dist/src/shadow/shader.js +37 -0
  539. package/dist/src/shadow/shader.js.map +1 -0
  540. package/dist/src/shadow/shadow_impl.js +15 -0
  541. package/dist/src/shadow/shadow_impl.js.map +1 -0
  542. package/dist/src/shadow/shadowmapper.js +790 -0
  543. package/dist/src/shadow/shadowmapper.js.map +1 -0
  544. package/dist/src/shadow/ssm.js +159 -0
  545. package/dist/src/shadow/ssm.js.map +1 -0
  546. package/dist/src/shadow/vsm.js +297 -0
  547. package/dist/src/shadow/vsm.js.map +1 -0
  548. package/dist/src/shapes/box.js +386 -0
  549. package/dist/src/shapes/box.js.map +1 -0
  550. package/dist/src/shapes/cylinder.js +125 -0
  551. package/dist/src/shapes/cylinder.js.map +1 -0
  552. package/dist/src/shapes/plane.js +88 -0
  553. package/dist/src/shapes/plane.js.map +1 -0
  554. package/dist/src/shapes/shape.js +87 -0
  555. package/dist/src/shapes/shape.js.map +1 -0
  556. package/dist/src/shapes/sphere.js +114 -0
  557. package/dist/src/shapes/sphere.js.map +1 -0
  558. package/dist/src/shapes/tetrahedron.js +188 -0
  559. package/dist/src/shapes/tetrahedron.js.map +1 -0
  560. package/dist/src/shapes/torus.js +111 -0
  561. package/dist/src/shapes/torus.js.map +1 -0
  562. package/dist/src/utility/aabbtree.js +400 -0
  563. package/dist/src/utility/aabbtree.js.map +1 -0
  564. package/dist/src/utility/bounding_volume.js +29 -0
  565. package/dist/src/utility/bounding_volume.js.map +1 -0
  566. package/dist/src/utility/debug.js +28 -0
  567. package/dist/src/utility/debug.js.map +1 -0
  568. package/dist/src/utility/draco/decoder.js +116 -0
  569. package/dist/src/utility/draco/decoder.js.map +1 -0
  570. package/dist/src/utility/misc.js +105 -0
  571. package/dist/src/utility/misc.js.map +1 -0
  572. package/dist/src/utility/panorama.js +163 -0
  573. package/dist/src/utility/panorama.js.map +1 -0
  574. package/dist/src/utility/pmrem.js +354 -0
  575. package/dist/src/utility/pmrem.js.map +1 -0
  576. package/dist/src/utility/rendermipmap.js +115 -0
  577. package/dist/src/utility/rendermipmap.js.map +1 -0
  578. package/dist/src/utility/serialization/json.js +402 -0
  579. package/dist/src/utility/serialization/json.js.map +1 -0
  580. package/dist/src/utility/serialization/manager.js +623 -0
  581. package/dist/src/utility/serialization/manager.js.map +1 -0
  582. package/dist/src/utility/serialization/scene/animation.js +248 -0
  583. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  584. package/dist/src/utility/serialization/scene/batch.js +59 -0
  585. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  586. package/dist/src/utility/serialization/scene/camera.js +790 -0
  587. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  588. package/dist/src/utility/serialization/scene/common.js +222 -0
  589. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  590. package/dist/src/utility/serialization/scene/light.js +575 -0
  591. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  592. package/dist/src/utility/serialization/scene/material.js +1111 -0
  593. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  594. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  595. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  596. package/dist/src/utility/serialization/scene/misc.js +39 -0
  597. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  598. package/dist/src/utility/serialization/scene/node.js +451 -0
  599. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  600. package/dist/src/utility/serialization/scene/particle.js +425 -0
  601. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  602. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  603. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  604. package/dist/src/utility/serialization/scene/scene.js +704 -0
  605. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  606. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  607. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  608. package/dist/src/utility/serialization/scene/water.js +465 -0
  609. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  610. package/dist/src/utility/shprojector.js +297 -0
  611. package/dist/src/utility/shprojector.js.map +1 -0
  612. package/dist/{material/mixins → src/utility/textures}/ggxlut.js +1 -1
  613. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  614. package/dist/src/utility/textures/gradientnoise.js +62 -0
  615. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  616. package/dist/src/utility/textures/randomnoise.js +41 -0
  617. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  618. package/dist/src/values.js +162 -0
  619. package/dist/src/values.js.map +1 -0
  620. package/dist/utility/aabbtree.js +15 -5
  621. package/dist/utility/aabbtree.js.map +1 -1
  622. package/dist/utility/blueprint/common/constants.js +851 -0
  623. package/dist/utility/blueprint/common/constants.js.map +1 -0
  624. package/dist/utility/blueprint/common/math.js +2045 -0
  625. package/dist/utility/blueprint/common/math.js.map +1 -0
  626. package/dist/utility/blueprint/common.js +7 -0
  627. package/dist/utility/blueprint/common.js.map +1 -0
  628. package/dist/utility/blueprint/material/common.js +7 -0
  629. package/dist/utility/blueprint/material/common.js.map +1 -0
  630. package/dist/utility/blueprint/material/func.js +521 -0
  631. package/dist/utility/blueprint/material/func.js.map +1 -0
  632. package/dist/utility/blueprint/material/inputs.js +1659 -0
  633. package/dist/utility/blueprint/material/inputs.js.map +1 -0
  634. package/dist/utility/blueprint/material/ir.js +1311 -0
  635. package/dist/utility/blueprint/material/ir.js.map +1 -0
  636. package/dist/utility/blueprint/material/pbr.js +362 -0
  637. package/dist/utility/blueprint/material/pbr.js.map +1 -0
  638. package/dist/utility/blueprint/material/texture.js +1099 -0
  639. package/dist/utility/blueprint/material/texture.js.map +1 -0
  640. package/dist/utility/blueprint/node.js +187 -0
  641. package/dist/utility/blueprint/node.js.map +1 -0
  642. package/dist/utility/bounding_volume.js +0 -1
  643. package/dist/utility/bounding_volume.js.map +1 -1
  644. package/dist/utility/debug.js +26 -0
  645. package/dist/utility/debug.js.map +1 -0
  646. package/dist/utility/draco/decoder.js +1 -1
  647. package/dist/utility/draco/decoder.js.map +1 -1
  648. package/dist/utility/misc.js +18 -6
  649. package/dist/utility/misc.js.map +1 -1
  650. package/dist/utility/panorama.js +8 -6
  651. package/dist/utility/panorama.js.map +1 -1
  652. package/dist/utility/pmrem.js +30 -18
  653. package/dist/utility/pmrem.js.map +1 -1
  654. package/dist/utility/rendermipmap.js +116 -0
  655. package/dist/utility/rendermipmap.js.map +1 -0
  656. package/dist/utility/serialization/blueprint/constants.js +255 -0
  657. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  658. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  659. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  660. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  661. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  662. package/dist/utility/serialization/json.js +402 -0
  663. package/dist/utility/serialization/json.js.map +1 -0
  664. package/dist/utility/serialization/manager.js +1176 -0
  665. package/dist/utility/serialization/manager.js.map +1 -0
  666. package/dist/utility/serialization/scene/animation.js +699 -0
  667. package/dist/utility/serialization/scene/animation.js.map +1 -0
  668. package/dist/utility/serialization/scene/batch.js +53 -0
  669. package/dist/utility/serialization/scene/batch.js.map +1 -0
  670. package/dist/utility/serialization/scene/camera.js +808 -0
  671. package/dist/utility/serialization/scene/camera.js.map +1 -0
  672. package/dist/utility/serialization/scene/common.js +224 -0
  673. package/dist/utility/serialization/scene/common.js.map +1 -0
  674. package/dist/utility/serialization/scene/light.js +589 -0
  675. package/dist/utility/serialization/scene/light.js.map +1 -0
  676. package/dist/utility/serialization/scene/material.js +942 -0
  677. package/dist/utility/serialization/scene/material.js.map +1 -0
  678. package/dist/utility/serialization/scene/mesh.js +374 -0
  679. package/dist/utility/serialization/scene/mesh.js.map +1 -0
  680. package/dist/utility/serialization/scene/misc.js +39 -0
  681. package/dist/utility/serialization/scene/misc.js.map +1 -0
  682. package/dist/utility/serialization/scene/node.js +391 -0
  683. package/dist/utility/serialization/scene/node.js.map +1 -0
  684. package/dist/utility/serialization/scene/particle.js +425 -0
  685. package/dist/utility/serialization/scene/particle.js.map +1 -0
  686. package/dist/utility/serialization/scene/primitive.js +582 -0
  687. package/dist/utility/serialization/scene/primitive.js.map +1 -0
  688. package/dist/utility/serialization/scene/scene.js +763 -0
  689. package/dist/utility/serialization/scene/scene.js.map +1 -0
  690. package/dist/utility/serialization/scene/terrain.js +495 -0
  691. package/dist/utility/serialization/scene/terrain.js.map +1 -0
  692. package/dist/utility/serialization/scene/water.js +465 -0
  693. package/dist/utility/serialization/scene/water.js.map +1 -0
  694. package/dist/utility/shprojector.js +313 -0
  695. package/dist/utility/shprojector.js.map +1 -0
  696. package/dist/utility/textures/ggxlut.js +4 -5
  697. package/dist/utility/textures/ggxlut.js.map +1 -1
  698. package/dist/utility/textures/gradientnoise.js +2 -1
  699. package/dist/utility/textures/gradientnoise.js.map +1 -1
  700. package/dist/utility/textures/randomnoise.js +1 -0
  701. package/dist/utility/textures/randomnoise.js.map +1 -1
  702. package/dist/values.js +91 -4
  703. package/dist/values.js.map +1 -1
  704. package/package.json +29 -15
  705. package/dist/app.js.map +0 -1
  706. package/dist/blitter/depthlimitedgaussion.js.map +0 -1
  707. package/dist/input/inputmgr.js.map +0 -1
  708. package/dist/material/mixins/ggxlut.js.map +0 -1
  709. package/dist/posteffect/water.js +0 -508
  710. package/dist/posteffect/water.js.map +0 -1
  711. package/dist/render/oit.js +0 -16
  712. package/dist/render/oit.js.map +0 -1
  713. package/dist/render/scatteringlut.js +0 -634
  714. package/dist/render/scatteringlut.js.map +0 -1
  715. package/dist/render/watermesh.js +0 -193
  716. package/dist/render/watermesh.js.map +0 -1
  717. package/dist/render/wavegenerator.js +0 -8
  718. package/dist/render/wavegenerator.js.map +0 -1
  719. package/dist/scene/xform.js +0 -247
  720. package/dist/scene/xform.js.map +0 -1
  721. package/dist/utility/shprojection.js +0 -442
  722. package/dist/utility/shprojection.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssr.js","sources":["../../../src/posteffect/ssr.ts"],"sourcesContent":["import { AbstractPostEffect, PostEffectLayer } from './posteffect';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport type { BindGroup, FrameBuffer, GPUProgram, Texture2D } from '@zephyr3d/device';\r\nimport type { DrawContext } from '../render';\r\nimport { screenSpaceRayTracing_HiZ, screenSpaceRayTracing_Linear2D, SSR_calcJitter } from '../shaders/ssr';\r\nimport { Matrix4x4, Vector2, Vector4 } from '@zephyr3d/base';\r\nimport { copyTexture, fetchSampler } from '../utility/misc';\r\nimport { BilateralBlurBlitter } from '../blitter/bilateralblur';\r\nimport { ShaderHelper } from '../material';\r\n\r\n/**\r\n * SSR post effect\r\n *\r\n * @remarks\r\n * Internal used in light pass\r\n *\r\n * @internal\r\n */\r\nexport class SSR extends AbstractPostEffect {\r\n private static _programs: Record<string, GPUProgram> = {};\r\n private static _resolveProgram: Record<string, GPUProgram> = {};\r\n private static _combineProgram: GPUProgram = undefined;\r\n private static _blurBlitterH: BilateralBlurBlitter = null;\r\n private static _blurBlitterV: BilateralBlurBlitter = null;\r\n private _bindgroups: Record<string, BindGroup>;\r\n private _resolveBindGroup: Record<string, BindGroup>;\r\n private _combineBindGroup: BindGroup;\r\n /**\r\n * Creates an instance of SSR post effect\r\n */\r\n constructor() {\r\n super();\r\n this._layer = PostEffectLayer.opaque;\r\n this._bindgroups = {};\r\n this._resolveBindGroup = {};\r\n this._combineBindGroup = null;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireLinearDepthTexture} */\r\n requireLinearDepthTexture(): boolean {\r\n return true;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireDepthAttachment} */\r\n requireDepthAttachment(): boolean {\r\n return true;\r\n }\r\n /** @internal */\r\n blurPass(\r\n ctx: DrawContext,\r\n blitter: BilateralBlurBlitter,\r\n blurSizeTex: Texture2D,\r\n blurSizeIndex: number,\r\n blurSizeScale: number,\r\n kernelRadius: number,\r\n stdDev: number,\r\n depthCutoff: number,\r\n fbFrom: FrameBuffer,\r\n fbTo: FrameBuffer\r\n ) {\r\n const size = new Vector2(fbFrom.getWidth(), fbFrom.getHeight());\r\n blitter.kernelRadius = kernelRadius;\r\n blitter.stdDev = stdDev;\r\n blitter.size = size;\r\n blitter.depthTex = ctx.linearDepthTexture;\r\n blitter.depthCutoff = depthCutoff;\r\n blitter.blurSizeTex = blurSizeTex;\r\n blitter.blurSizeIndex = blurSizeIndex;\r\n blitter.blurSizeScale = blurSizeScale;\r\n blitter.sampler = fetchSampler('clamp_nearest_nomip');\r\n blitter.cameraNearFar.setXY(ctx.camera.getNearPlane(), ctx.camera.getFarPlane());\r\n blitter.srgbOut = false;\r\n blitter.blit(fbFrom.getColorAttachments()[0] as Texture2D, fbTo, fetchSampler('clamp_linear_nomip'));\r\n }\r\n /** @internal */\r\n combine(ctx: DrawContext, inputColorTexture: Texture2D, reflectanceTex: Texture2D, srgbOut: boolean) {\r\n const device = ctx.device;\r\n let program = SSR._combineProgram;\r\n if (program === undefined) {\r\n program = this._createCombineProgrm(ctx);\r\n SSR._combineProgram = program;\r\n }\r\n if (!this._combineBindGroup) {\r\n this._combineBindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n }\r\n const linearSampler = fetchSampler('clamp_linear');\r\n this._combineBindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n this._combineBindGroup.setTexture('reflectanceTex', reflectanceTex, linearSampler);\r\n this._combineBindGroup.setTexture('roughnessTex', ctx.SSRRoughnessTexture, linearSampler);\r\n this._combineBindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n this._combineBindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight()\r\n )\r\n );\r\n this._combineBindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n this._combineBindGroup.setValue('srgbOut', srgbOut ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, this._combineBindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** @internal */\r\n resolve(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n intersectTexture: Texture2D\r\n ) {\r\n const device = ctx.device;\r\n const hash = ctx.env.light.envLight ? ctx.env.light.getHash() : '';\r\n let program = SSR._resolveProgram[hash];\r\n if (program === undefined) {\r\n program = this._createResolveProgram(ctx);\r\n SSR._resolveProgram[hash] = program;\r\n }\r\n let bindGroup = this._resolveBindGroup[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n this._resolveBindGroup[hash] = bindGroup;\r\n }\r\n const nearestSampler = fetchSampler('clamp_nearest');\r\n const linearSampler = fetchSampler('clamp_linear');\r\n bindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n bindGroup.setTexture('intersectTex', intersectTexture, nearestSampler);\r\n bindGroup.setTexture('roughnessTex', ctx.SSRRoughnessTexture, nearestSampler);\r\n bindGroup.setTexture('normalTex', ctx.SSRNormalTexture, nearestSampler);\r\n bindGroup.setTexture('depthTex', sceneDepthTexture, nearestSampler);\r\n bindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n bindGroup.setValue('cameraNearFar', new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane()));\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height\r\n )\r\n );\r\n bindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n bindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n bindGroup.setValue('invViewMatrix', ctx.camera.worldMatrix);\r\n if (ctx.env.light.envLight) {\r\n bindGroup.setValue('envLightStrength', ctx.env.light.strength);\r\n ctx.env.light.envLight.updateBindGroup(bindGroup);\r\n }\r\n bindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** @internal */\r\n intersect(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n blur: boolean,\r\n srgbOut: boolean\r\n ) {\r\n const device = ctx.device;\r\n const hash = `${Number(blur)}:${\r\n ctx.env.light.envLight ? ctx.env.light.getHash() : ''\r\n }:${!!ctx.HiZTexture}:${!!ctx.primaryCamera.ssrCalcThickness}`;\r\n let program = SSR._programs[hash];\r\n if (program === undefined) {\r\n program = this._createIntersectProgram(ctx, blur);\r\n SSR._programs[hash] = program;\r\n }\r\n let bindGroup = this._bindgroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n this._bindgroups[hash] = bindGroup;\r\n }\r\n const nearestSampler = fetchSampler('clamp_nearest');\r\n const linearSampler = fetchSampler('clamp_linear');\r\n if (!blur) {\r\n bindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n if (ctx.env.light.envLight) {\r\n bindGroup.setValue('envLightStrength', ctx.env.light.strength);\r\n ctx.env.light.envLight.updateBindGroup(bindGroup);\r\n }\r\n }\r\n bindGroup.setTexture('roughnessTex', ctx.SSRRoughnessTexture, nearestSampler);\r\n bindGroup.setTexture('normalTex', ctx.SSRNormalTexture, nearestSampler);\r\n bindGroup.setTexture('depthTex', sceneDepthTexture, nearestSampler);\r\n bindGroup.setValue('cameraNearFar', new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane()));\r\n bindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\r\n bindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n bindGroup.setValue('projMatrix', ctx.camera.getProjectionMatrix());\r\n bindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n bindGroup.setValue('invViewMatrix', ctx.camera.worldMatrix);\r\n bindGroup.setValue('ssrParams', ctx.camera.ssrParams);\r\n bindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n if (ctx.HiZTexture) {\r\n bindGroup.setTexture('hizTex', ctx.HiZTexture, nearestSampler);\r\n bindGroup.setValue('depthMipLevels', ctx.HiZTexture.mipLevelCount);\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n ctx.HiZTexture.width,\r\n ctx.HiZTexture.height\r\n )\r\n );\r\n } else {\r\n bindGroup.setValue('ssrStride', ctx.camera.ssrStride);\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height\r\n )\r\n );\r\n }\r\n bindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n bindGroup.setValue('srgbOut', srgbOut ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** {@inheritDoc AbstractPostEffect.apply} */\r\n apply(ctx: DrawContext, inputColorTexture: Texture2D, sceneDepthTexture: Texture2D, srgbOutput: boolean) {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n copyTexture(\r\n inputColorTexture,\r\n device.getFramebuffer(),\r\n fetchSampler('clamp_nearest_nomip'),\r\n AbstractPostEffect.getDefaultRenderState(ctx, 'eq')\r\n );\r\n\r\n const intersectFramebuffer = device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n );\r\n const pingpongFramebuffer = [\r\n device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n ),\r\n device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n )\r\n ];\r\n device.setFramebuffer(intersectFramebuffer);\r\n this.intersect(ctx, inputColorTexture, sceneDepthTexture, true, false);\r\n const intersectTex = intersectFramebuffer.getColorAttachments()[0] as Texture2D;\r\n device.setFramebuffer(pingpongFramebuffer[0]);\r\n this.resolve(ctx, inputColorTexture, sceneDepthTexture, intersectTex);\r\n if (ctx.camera.ssrBlurScale > 0 && ctx.camera.ssrBlurKernelSize > 0) {\r\n const blurSizeScale = 255 * ctx.camera.ssrBlurScale;\r\n const kernelRadius = (Math.max(1, ctx.camera.ssrBlurKernelSize >> 0) - 1) >> 1;\r\n const stdDev = ctx.camera.ssrBlurStdDev;\r\n const depthCutoff = ctx.camera.ssrBlurDepthCutoff;\r\n const blitterH = (SSR._blurBlitterH = SSR._blurBlitterH ?? new BilateralBlurBlitter(false));\r\n blitterH.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, 'gt');\r\n this.blurPass(\r\n ctx,\r\n blitterH,\r\n intersectTex,\r\n 2,\r\n blurSizeScale,\r\n kernelRadius,\r\n stdDev,\r\n depthCutoff,\r\n pingpongFramebuffer[0],\r\n pingpongFramebuffer[1]\r\n );\r\n const blitterV = (SSR._blurBlitterV = SSR._blurBlitterV ?? new BilateralBlurBlitter(true));\r\n blitterV.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, 'gt');\r\n this.blurPass(\r\n ctx,\r\n blitterV,\r\n intersectTex,\r\n 2,\r\n blurSizeScale,\r\n kernelRadius,\r\n stdDev,\r\n depthCutoff,\r\n pingpongFramebuffer[1],\r\n pingpongFramebuffer[0]\r\n );\r\n }\r\n device.popDeviceStates();\r\n this.combine(\r\n ctx,\r\n inputColorTexture,\r\n pingpongFramebuffer[0].getColorAttachments()[0] as Texture2D,\r\n srgbOutput\r\n );\r\n device.pool.releaseFrameBuffer(intersectFramebuffer);\r\n device.pool.releaseFrameBuffer(pingpongFramebuffer[0]);\r\n device.pool.releaseFrameBuffer(pingpongFramebuffer[1]);\r\n }\r\n /** @internal */\r\n private _createCombineProgrm(ctx: DrawContext): GPUProgram {\r\n return ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n this.reflectanceTex = pb.tex2D().uniform(0);\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func(\r\n 'resolveSample',\r\n [pb.vec3('sceneColor'), pb.vec3('reflectance'), pb.vec4('roughnessValue')],\r\n function () {\r\n this.$l.r = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n this.color = pb.add(\r\n pb.mul(this.r, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n this.$return(this.color);\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.sceneColor = pb.textureSampleLevel(this.colorTex, this.screenUV, 0).rgb;\r\n this.$l.roughnessInfo = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$l.combined = pb.vec3();\r\n this.$if(pb.greaterThanEqual(this.roughnessInfo.a, this.ssrMaxRoughness), function () {\r\n this.combined = this.sceneColor;\r\n }).$else(function () {\r\n this.$l.reflectance = pb.textureSampleLevel(this.reflectanceTex, this.screenUV, 0).rgb;\r\n this.combined = this.resolveSample(this.sceneColor, this.reflectance, this.roughnessInfo);\r\n });\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.combined, 1);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.combined), 1);\r\n });\r\n });\r\n }\r\n });\r\n }\r\n /** @internal */\r\n private _createResolveProgram(ctx: DrawContext): GPUProgram {\r\n return ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (ctx.env.light.envLight) {\r\n ctx.env.light.envLight.initShaderBindings(pb);\r\n }\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n this.intersectTex = pb.tex2D().uniform(0);\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invViewMatrix = pb.mat4().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n if (ctx.env.light.envLight) {\r\n this.envLightStrength = pb.float().uniform(0);\r\n ctx.env.light.envLight.initShaderBindings(pb);\r\n }\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('getPosition', [pb.vec2('uv'), pb.mat4('mat')], function () {\r\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = pb.div(\r\n pb.sub(pb.div(this.cameraNearFar.x, this.linearDepth), this.cameraNearFar.y),\r\n pb.sub(this.cameraNearFar.x, this.cameraNearFar.y)\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n pb.sub(pb.mul(pb.clamp(this.nonLinearDepth, 0, 1), 2), 1),\r\n 1\r\n );\r\n this.$l.wPos = pb.mul(this.mat, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.wPos.xyz, this.wPos.w), this.linearDepth));\r\n });\r\n pb.func(\r\n 'resolveSample',\r\n [pb.vec3('sceneColor'), pb.vec3('reflectance'), pb.vec4('roughnessValue')],\r\n function () {\r\n this.$l.r = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n this.color = pb.add(\r\n pb.mul(this.r, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n this.$return(this.color);\r\n }\r\n );\r\n pb.func('resolveEnvRadiance', [pb.vec2('uv'), pb.vec4('roughnessInfo')], function () {\r\n if (!ctx.env.light.envLight) {\r\n this.$return(pb.vec3(0));\r\n return;\r\n }\r\n this.$l.pos = this.getPosition(this.uv, this.invProjMatrix);\r\n this.$if(pb.greaterThanEqual(this.pos.w, 1), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n this.$l.roughness = this.roughnessInfo.a;\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewVec = pb.normalize(this.viewPos);\r\n this.$l.viewNormal = pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz;\r\n this.$l.reflectVec = pb.add(\r\n pb.reflect(this.viewVec, this.viewNormal),\r\n SSR_calcJitter(this, this.viewPos, this.roughness)\r\n );\r\n this.$l.reflectVecW = pb.mul(this.invViewMatrix, pb.vec4(this.reflectVec, 0)).xyz;\r\n this.$l.roughness2 = pb.float(0);\r\n this.$l.env = pb.mul(\r\n ctx.env.light.envLight.getRadiance(this, this.reflectVecW, this.roughness2),\r\n this.envLightStrength\r\n );\r\n this.$return(pb.min(this.env, pb.vec3(1)));\r\n });\r\n pb.func(\r\n 'resolveReflectance',\r\n [pb.vec2('uv'), pb.vec3('reflectSceneColor'), pb.vec4('roughnessInfo'), pb.float('alpha')],\r\n function () {\r\n this.$l.env = this.resolveEnvRadiance(this.uv, this.roughnessInfo);\r\n this.$l.reflectance = pb.mix(this.env, this.reflectSceneColor, this.alpha);\r\n this.$return(this.reflectance);\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.roughnessInfo = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$if(pb.greaterThanEqual(this.roughnessInfo.a, this.ssrMaxRoughness), function () {\r\n pb.discard();\r\n });\r\n this.$l.intersectSample = pb.textureSampleLevel(this.intersectTex, this.screenUV, 0);\r\n this.$l.reflectance = pb.vec3();\r\n this.$if(pb.greaterThan(this.intersectSample.w, 0), function () {\r\n this.$l.indirectIntersectSample = pb.textureSampleLevel(\r\n this.intersectTex,\r\n this.intersectSample.xy,\r\n 0\r\n );\r\n this.$l.indirectRoughnessInfo = pb.textureSampleLevel(\r\n this.roughnessTex,\r\n this.intersectSample.xy,\r\n 0\r\n );\r\n this.$l.indirectReflectance = pb.vec3();\r\n this.$if(pb.greaterThan(this.indirectIntersectSample.w, 0), function () {\r\n this.$l.indirectReflectSceneColor = pb.textureSampleLevel(\r\n this.colorTex,\r\n this.indirectIntersectSample.xy,\r\n 0\r\n ).rgb;\r\n this.indirectReflectance = this.resolveReflectance(\r\n this.intersectSample.xy,\r\n this.indirectReflectSceneColor,\r\n this.indirectRoughnessInfo,\r\n this.indirectIntersectSample.w\r\n );\r\n }).$else(function () {\r\n this.indirectReflectance = this.resolveEnvRadiance(\r\n this.intersectSample.xy,\r\n this.indirectRoughnessInfo\r\n );\r\n });\r\n this.$l.reflectSceneColor = pb.textureSampleLevel(this.colorTex, this.intersectSample.xy, 0).rgb;\r\n this.$l.reflectSceneColor = this.resolveSample(\r\n this.reflectSceneColor,\r\n this.indirectReflectance,\r\n this.indirectRoughnessInfo\r\n );\r\n this.reflectance = this.resolveReflectance(\r\n this.screenUV,\r\n this.reflectSceneColor,\r\n this.roughnessInfo,\r\n this.intersectSample.w\r\n );\r\n }).$else(function () {\r\n this.reflectance = this.resolveEnvRadiance(this.screenUV, this.roughnessInfo);\r\n });\r\n this.$outputs.outColor = pb.vec4(this.reflectance, this.intersectSample.z);\r\n });\r\n }\r\n });\r\n }\r\n /** @internal */\r\n private _createIntersectProgram(ctx: DrawContext, blur: boolean): GPUProgram {\r\n return ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (!blur && ctx.env.light.envLight) {\r\n ctx.env.light.envLight.initShaderBindings(pb);\r\n }\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n if (!blur) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n if (ctx.env.light.envLight) {\r\n this.envLightStrength = pb.float().uniform(0);\r\n ctx.env.light.envLight.initShaderBindings(pb);\r\n }\r\n }\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.projMatrix = pb.mat4().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invViewMatrix = pb.mat4().uniform(0);\r\n this.ssrParams = pb.vec4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n if (ctx.HiZTexture) {\r\n this.hizTex = pb.tex2D().uniform(0);\r\n this.depthMipLevels = pb.int().uniform(0);\r\n } else {\r\n this.ssrStride = pb.float().uniform(0);\r\n }\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('getPosition', [pb.vec2('uv'), pb.mat4('mat')], function () {\r\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = pb.div(\r\n pb.sub(pb.div(this.cameraNearFar.x, this.linearDepth), this.cameraNearFar.y),\r\n pb.sub(this.cameraNearFar.x, this.cameraNearFar.y)\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n pb.sub(pb.mul(pb.clamp(this.nonLinearDepth, 0, 1), 2), 1),\r\n 1\r\n );\r\n this.$l.wPos = pb.mul(this.mat, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.wPos.xyz, this.wPos.w), this.linearDepth));\r\n });\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.roughnessValue = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$l.roughness = this.roughnessValue.a;\r\n this.$if(pb.greaterThanEqual(this.roughness, this.ssrMaxRoughness), function () {\r\n pb.discard();\r\n });\r\n if (!blur) {\r\n this.$l.sceneColor = pb.textureSampleLevel(this.colorTex, this.screenUV, 0).rgb;\r\n }\r\n this.$l.pos = this.getPosition(this.screenUV, this.invProjMatrix);\r\n this.$l.linearDepth = this.pos.w;\r\n this.$l.color = pb.vec3(0);\r\n this.$l.a = pb.float();\r\n this.$if(pb.greaterThanEqual(this.linearDepth, 1), function () {\r\n if (!blur) {\r\n this.color = this.sceneColor;\r\n this.a = 1;\r\n }\r\n }).$else(function () {\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.screenUV, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewVec = pb.normalize(this.viewPos);\r\n this.$l.viewNormal = pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz;\r\n this.$l.reflectVec = pb.add(\r\n pb.reflect(this.viewVec, this.viewNormal),\r\n SSR_calcJitter(this, this.viewPos, this.roughness)\r\n );\r\n this.$l.hitInfo = ctx.HiZTexture\r\n ? screenSpaceRayTracing_HiZ(\r\n this,\r\n this.viewPos,\r\n this.reflectVec,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.depthMipLevels,\r\n this.ssrParams.y,\r\n this.ssrParams.z,\r\n this.targetSize,\r\n this.hizTex,\r\n this.normalTex\r\n )\r\n : screenSpaceRayTracing_Linear2D(\r\n this,\r\n this.viewPos,\r\n this.reflectVec,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.ssrParams.x,\r\n this.ssrParams.y,\r\n this.ssrParams.z,\r\n this.ssrStride,\r\n this.targetSize,\r\n this.depthTex,\r\n this.normalTex,\r\n !!ctx.primaryCamera.ssrCalcThickness\r\n );\r\n if (blur) {\r\n this.blurRadius = pb.float(0);\r\n this.$if(pb.greaterThan(this.roughness, 0.001), function () {\r\n this.$l.coneAngle = pb.mul(pb.min(this.roughness, 0.999), Math.PI * 0.5);\r\n this.$l.coneLen = this.$choice(\r\n pb.greaterThan(this.hitInfo.w, 0),\r\n this.hitInfo.z,\r\n pb.min(this.targetSize.z, this.targetSize.w)\r\n );\r\n this.$l.opLen = pb.mul(pb.tan(this.coneAngle), this.coneLen, 2);\r\n this.$l.a2 = pb.mul(this.opLen, this.opLen);\r\n this.$l.fh2 = pb.mul(this.coneLen, this.coneLen, 4);\r\n this.blurRadius = pb.div(\r\n pb.mul(this.opLen, pb.sub(pb.sqrt(pb.add(this.a2, this.fh2)), this.opLen)),\r\n pb.mul(this.coneLen, 4)\r\n );\r\n });\r\n this.a = this.hitInfo.w;\r\n this.color = pb.vec3(this.hitInfo.xy, pb.clamp(pb.div(this.blurRadius, 255), 0, 1));\r\n } else {\r\n if (ctx.env.light.envLight) {\r\n this.$l.reflectVecW = pb.mul(this.invViewMatrix, pb.vec4(this.reflectVec, 0)).xyz;\r\n this.$l.env = pb.mul(\r\n ctx.env.light.envLight.getRadiance(this, this.reflectVecW, this.roughness),\r\n this.envLightStrength\r\n );\r\n } else {\r\n this.$l.env = pb.vec3(0);\r\n }\r\n this.$l.reflectance = pb.mix(\r\n this.env,\r\n pb.textureSampleLevel(this.colorTex, this.hitInfo.xy, 0).rgb,\r\n this.hitInfo.w\r\n );\r\n this.reflectance = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n this.color = pb.add(\r\n pb.mul(this.reflectance, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n }\r\n });\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.color, this.a);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.color), this.a);\r\n });\r\n });\r\n }\r\n });\r\n }\r\n}\r\n"],"names":["SSR","AbstractPostEffect","_programs","_resolveProgram","_combineProgram","undefined","_blurBlitterH","_blurBlitterV","_bindgroups","_resolveBindGroup","_combineBindGroup","_layer","PostEffectLayer","opaque","requireLinearDepthTexture","requireDepthAttachment","blurPass","ctx","blitter","blurSizeTex","blurSizeIndex","blurSizeScale","kernelRadius","stdDev","depthCutoff","fbFrom","fbTo","size","Vector2","getWidth","getHeight","depthTex","linearDepthTexture","sampler","fetchSampler","cameraNearFar","setXY","camera","getNearPlane","getFarPlane","srgbOut","blit","getColorAttachments","combine","inputColorTexture","reflectanceTex","device","program","_createCombineProgrm","createBindGroup","bindGroupLayouts","linearSampler","setTexture","SSRRoughnessTexture","setValue","ssrMaxRoughness","Vector4","getDrawingBufferWidth","getDrawingBufferHeight","needFlip","setProgram","setBindGroup","drawFullscreenQuad","getDefaultRenderState","resolve","sceneDepthTexture","intersectTexture","hash","env","light","envLight","getHash","_createResolveProgram","bindGroup","nearestSampler","SSRNormalTexture","width","height","Matrix4x4","invert","getProjectionMatrix","viewMatrix","worldMatrix","strength","updateBindGroup","intersect","blur","Number","HiZTexture","primaryCamera","ssrCalcThickness","_createIntersectProgram","getWorldPosition","ssrParams","mipLevelCount","ssrStride","apply","srgbOutput","pushDeviceStates","copyTexture","getFramebuffer","intersectFramebuffer","pool","fetchTemporalFramebuffer","depthTexture","pingpongFramebuffer","setFramebuffer","intersectTex","ssrBlurScale","ssrBlurKernelSize","Math","max","ssrBlurStdDev","ssrBlurDepthCutoff","blitterH","BilateralBlurBlitter","renderStates","blitterV","popDeviceStates","releaseFrameBuffer","buildRenderProgram","vertex","pb","flip","int","uniform","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","$if","notEqual","y","neg","fragment","colorTex","tex2D","roughnessTex","targetSize","float","outColor","func","vec3","$l","r","div","reflectance","clamp","roughnessValue","rgb","color","sceneColor","sub","$return","screenUV","fragCoord","textureSampleLevel","roughnessInfo","combined","greaterThanEqual","a","$else","resolveSample","equal","linearToGamma","initShaderBindings","normalTex","mat4","invViewMatrix","invProjMatrix","envLightStrength","linearDepth","ShaderHelper","sampleLinearDepth","nonLinearDepth","x","clipSpacePos","wPos","mat","xyz","w","getPosition","roughness","viewPos","worldNormal","viewVec","normalize","viewNormal","reflectVec","reflect","SSR_calcJitter","reflectVecW","roughness2","getRadiance","min","resolveEnvRadiance","mix","reflectSceneColor","alpha","discard","intersectSample","greaterThan","indirectIntersectSample","indirectRoughnessInfo","indirectReflectance","indirectReflectSceneColor","resolveReflectance","z","cameraPos","projMatrix","hizTex","depthMipLevels","hitInfo","screenSpaceRayTracing_HiZ","screenSpaceRayTracing_Linear2D","blurRadius","coneAngle","PI","coneLen","$choice","opLen","tan","a2","fh2","sqrt"],"mappings":"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"}
@@ -0,0 +1,172 @@
1
+ import { AbstractPostEffect, PostEffectLayer } from './posteffect.js';
2
+ import { linearToGamma } from '../shaders/misc.js';
3
+ import { fetchSampler } from '../utility/misc.js';
4
+ import { Vector2 } from '@zephyr3d/base';
5
+ import '@zephyr3d/device';
6
+ import { BoxShape } from '../shapes/box.js';
7
+ import '../shapes/cylinder.js';
8
+ import '../shapes/torus.js';
9
+ import '../shapes/plane.js';
10
+ import '../shapes/sphere.js';
11
+ import '../shapes/tetrahedron.js';
12
+ import { temporalResolve } from '../shaders/temporal.js';
13
+
14
+ /** @internal */ class TAA extends AbstractPostEffect {
15
+ static _resolveProgram = [];
16
+ static _skyMotionVectorProgram = null;
17
+ static _box;
18
+ static _texSize = new Vector2();
19
+ _bindGroup;
20
+ _skyMotionVectorBindGroup;
21
+ constructor(){
22
+ super();
23
+ this._bindGroup = null;
24
+ this._layer = PostEffectLayer.end;
25
+ this._skyMotionVectorBindGroup = null;
26
+ }
27
+ renderSkyMotionVectors(ctx) {
28
+ const fb = ctx.device.pool.fetchTemporalFramebuffer(false, 0, 0, ctx.motionVectorTexture, ctx.depthTexture);
29
+ const program = TAA._getSkyMotionVectorProgram(ctx);
30
+ if (!this._skyMotionVectorBindGroup) {
31
+ this._skyMotionVectorBindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);
32
+ }
33
+ const box = TAA._getBox(ctx);
34
+ this._skyMotionVectorBindGroup.setValue('VPMatrix', ctx.camera.viewProjectionMatrix);
35
+ this._skyMotionVectorBindGroup.setValue('prevVPMatrix', ctx.camera.prevVPMatrix);
36
+ this._skyMotionVectorBindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());
37
+ this._skyMotionVectorBindGroup.setValue('prevCameraPos', ctx.camera.prevPosition);
38
+ ctx.device.pushDeviceStates();
39
+ ctx.device.setProgram(program);
40
+ ctx.device.setBindGroup(0, this._skyMotionVectorBindGroup);
41
+ ctx.device.setRenderStates(AbstractPostEffect.getDefaultRenderState(ctx, 'le'));
42
+ ctx.device.setFramebuffer(fb);
43
+ box.draw();
44
+ ctx.device.popDeviceStates();
45
+ ctx.device.pool.releaseFrameBuffer(fb);
46
+ }
47
+ apply(ctx, inputColorTexture, sceneDepthTexture, srgbOutput) {
48
+ const data = ctx.camera.getHistoryData();
49
+ if (!data.prevColorTex || !data.prevMotionVectorTex || data.prevColorTex.width !== inputColorTexture.width || data.prevColorTex.height !== inputColorTexture.height) {
50
+ this.passThrough(ctx, inputColorTexture, srgbOutput);
51
+ } else {
52
+ //this.renderSkyMotionVectors(ctx);
53
+ let program = TAA._resolveProgram[ctx.camera.TAADebug];
54
+ if (!program) {
55
+ program = TAA._getResolveProgram(ctx, ctx.camera.TAADebug);
56
+ TAA._resolveProgram[ctx.camera.TAADebug] = program;
57
+ }
58
+ if (!this._bindGroup) {
59
+ this._bindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);
60
+ }
61
+ this._bindGroup.setTexture('historyColorTex', data.prevColorTex, fetchSampler('clamp_linear_nomip'));
62
+ this._bindGroup.setTexture('currentColorTex', inputColorTexture, fetchSampler('clamp_nearest_nomip'));
63
+ this._bindGroup.setTexture('currentDepthTex', sceneDepthTexture, fetchSampler('clamp_nearest_nomip'));
64
+ this._bindGroup.setTexture('motionVector', ctx.motionVectorTexture, fetchSampler('clamp_nearest_nomip'));
65
+ this._bindGroup.setTexture('prevMotionVector', data.prevMotionVectorTex, fetchSampler('clamp_nearest_nomip'));
66
+ this._bindGroup.setValue('flip', this.needFlip(ctx.device) ? 1 : 0);
67
+ this._bindGroup.setValue('srgbOut', srgbOutput ? 1 : 0);
68
+ TAA._texSize.setXY(sceneDepthTexture.width, sceneDepthTexture.height);
69
+ this._bindGroup.setValue('texSize', TAA._texSize);
70
+ //this.passThrough(ctx, inputColorTexture, srgbOutput, AbstractPostEffect.getZTestEqualRenderState(ctx));
71
+ ctx.device.setProgram(program);
72
+ ctx.device.setBindGroup(0, this._bindGroup);
73
+ this.drawFullscreenQuad();
74
+ }
75
+ if (data.prevColorTex) {
76
+ ctx.device.pool.releaseTexture(data.prevColorTex);
77
+ }
78
+ const currentColorTex = ctx.device.getFramebuffer().getColorAttachments()[0];
79
+ ctx.device.pool.retainTexture(currentColorTex);
80
+ data.prevColorTex = currentColorTex;
81
+ if (data.prevMotionVectorTex) {
82
+ ctx.device.pool.releaseTexture(data.prevMotionVectorTex);
83
+ }
84
+ ctx.device.pool.retainTexture(ctx.motionVectorTexture);
85
+ data.prevMotionVectorTex = ctx.motionVectorTexture;
86
+ }
87
+ requireLinearDepthTexture(_ctx) {
88
+ return true;
89
+ }
90
+ requireDepthAttachment(_ctx) {
91
+ return true;
92
+ }
93
+ static _getSkyMotionVectorProgram(ctx) {
94
+ if (!this._skyMotionVectorProgram) {
95
+ this._skyMotionVectorProgram = ctx.device.buildRenderProgram({
96
+ vertex (pb) {
97
+ this.$inputs.pos = pb.vec3().attrib('position');
98
+ this.VPMatrix = pb.mat4().uniform(0);
99
+ this.prevVPMatrix = pb.mat4().uniform(0);
100
+ this.cameraPos = pb.vec3().uniform(0);
101
+ this.prevCameraPos = pb.vec3().uniform(0);
102
+ pb.main(function() {
103
+ this.$l.worldPos = pb.add(this.$inputs.pos, this.cameraPos);
104
+ this.$l.prevWorldPos = pb.add(this.$inputs.pos, this.prevCameraPos);
105
+ this.$l.clipPos = pb.mul(this.VPMatrix, pb.vec4(this.worldPos, 1));
106
+ this.$l.prevClipPos = pb.mul(this.prevVPMatrix, pb.vec4(this.prevWorldPos, 1));
107
+ this.clipPos.z = this.clipPos.w;
108
+ this.$builtins.position = this.clipPos;
109
+ this.$outputs.currentPos = this.clipPos;
110
+ this.$outputs.prevPos = this.prevClipPos;
111
+ });
112
+ },
113
+ fragment (pb) {
114
+ this.$outputs.color = pb.vec4();
115
+ pb.main(function() {
116
+ this.$l.motionVector = pb.mul(pb.sub(pb.div(this.$inputs.currentPos.xy, this.$inputs.currentPos.w), pb.div(this.$inputs.prevPos.xy, this.$inputs.prevPos.w)), 0.5);
117
+ this.$outputs.color = pb.vec4(this.motionVector, 0, 1);
118
+ });
119
+ }
120
+ });
121
+ }
122
+ return this._skyMotionVectorProgram;
123
+ }
124
+ static _getBox(_ctx) {
125
+ if (!this._box) {
126
+ this._box = new BoxShape({
127
+ size: 2,
128
+ needNormal: false,
129
+ needUV: false
130
+ });
131
+ }
132
+ return this._box;
133
+ }
134
+ static _getResolveProgram(ctx, debug) {
135
+ return ctx.device.buildRenderProgram({
136
+ vertex (pb) {
137
+ this.flip = pb.int().uniform(0);
138
+ this.$inputs.pos = pb.vec2().attrib('position');
139
+ this.$outputs.uv = pb.vec2();
140
+ pb.main(function() {
141
+ this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);
142
+ this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));
143
+ this.$if(pb.notEqual(this.flip, 0), function() {
144
+ this.$builtins.position.y = pb.neg(this.$builtins.position.y);
145
+ });
146
+ });
147
+ },
148
+ fragment (pb) {
149
+ this.historyColorTex = pb.tex2D().uniform(0);
150
+ this.currentColorTex = pb.tex2D().uniform(0);
151
+ this.currentDepthTex = pb.tex2D().uniform(0);
152
+ this.motionVector = pb.tex2D().uniform(0);
153
+ this.prevMotionVector = pb.tex2D().uniform(0);
154
+ this.texSize = pb.vec2().uniform(0);
155
+ this.srgbOut = pb.int().uniform(0);
156
+ this.$outputs.outColor = pb.vec4();
157
+ pb.main(function() {
158
+ this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.texSize);
159
+ this.$l.resolvedColor = temporalResolve(this, this.currentColorTex, this.historyColorTex, this.currentDepthTex, this.motionVector, this.prevMotionVector, this.screenUV, this.texSize, debug);
160
+ this.$if(pb.equal(this.srgbOut, 0), function() {
161
+ this.$outputs.outColor = pb.vec4(this.resolvedColor, 1);
162
+ }).$else(function() {
163
+ this.$outputs.outColor = pb.vec4(linearToGamma(this, this.resolvedColor), 1);
164
+ });
165
+ });
166
+ }
167
+ });
168
+ }
169
+ }
170
+
171
+ export { TAA };
172
+ //# sourceMappingURL=taa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taa.js","sources":["../../../src/posteffect/taa.ts"],"sourcesContent":["import type { BindGroup, GPUProgram, Texture2D } from '@zephyr3d/device';\r\nimport type { DrawContext, Primitive } from '../render';\r\nimport { AbstractPostEffect, PostEffectLayer } from './posteffect';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { BoxShape } from '../shapes';\r\nimport { temporalResolve } from '../shaders/temporal';\r\nimport { Vector2 } from '@zephyr3d/base';\r\n\r\n/** @internal */\r\nexport class TAA extends AbstractPostEffect {\r\n private static _resolveProgram: GPUProgram[] = [];\r\n private static _skyMotionVectorProgram: GPUProgram = null;\r\n private static _box: Primitive;\r\n private static readonly _texSize = new Vector2();\r\n private _bindGroup: BindGroup;\r\n private _skyMotionVectorBindGroup: BindGroup;\r\n constructor() {\r\n super();\r\n this._bindGroup = null;\r\n this._layer = PostEffectLayer.end;\r\n this._skyMotionVectorBindGroup = null;\r\n }\r\n renderSkyMotionVectors(ctx: DrawContext) {\r\n const fb = ctx.device.pool.fetchTemporalFramebuffer(\r\n false,\r\n 0,\r\n 0,\r\n ctx.motionVectorTexture,\r\n ctx.depthTexture\r\n );\r\n const program = TAA._getSkyMotionVectorProgram(ctx);\r\n if (!this._skyMotionVectorBindGroup) {\r\n this._skyMotionVectorBindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n }\r\n const box = TAA._getBox(ctx);\r\n this._skyMotionVectorBindGroup.setValue('VPMatrix', ctx.camera.viewProjectionMatrix);\r\n this._skyMotionVectorBindGroup.setValue('prevVPMatrix', ctx.camera.prevVPMatrix);\r\n this._skyMotionVectorBindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\r\n this._skyMotionVectorBindGroup.setValue('prevCameraPos', ctx.camera.prevPosition);\r\n ctx.device.pushDeviceStates();\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, this._skyMotionVectorBindGroup);\r\n ctx.device.setRenderStates(AbstractPostEffect.getDefaultRenderState(ctx, 'le'));\r\n ctx.device.setFramebuffer(fb);\r\n box.draw();\r\n ctx.device.popDeviceStates();\r\n ctx.device.pool.releaseFrameBuffer(fb);\r\n }\r\n apply(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n srgbOutput: boolean\r\n ): void {\r\n const data = ctx.camera.getHistoryData();\r\n if (\r\n !data.prevColorTex ||\r\n !data.prevMotionVectorTex ||\r\n data.prevColorTex.width !== inputColorTexture.width ||\r\n data.prevColorTex.height !== inputColorTexture.height\r\n ) {\r\n this.passThrough(ctx, inputColorTexture, srgbOutput);\r\n } else {\r\n //this.renderSkyMotionVectors(ctx);\r\n let program = TAA._resolveProgram[ctx.camera.TAADebug];\r\n if (!program) {\r\n program = TAA._getResolveProgram(ctx, ctx.camera.TAADebug);\r\n TAA._resolveProgram[ctx.camera.TAADebug] = program;\r\n }\r\n if (!this._bindGroup) {\r\n this._bindGroup = ctx.device.createBindGroup(program.bindGroupLayouts[0]);\r\n }\r\n this._bindGroup.setTexture('historyColorTex', data.prevColorTex, fetchSampler('clamp_linear_nomip'));\r\n this._bindGroup.setTexture('currentColorTex', inputColorTexture, fetchSampler('clamp_nearest_nomip'));\r\n this._bindGroup.setTexture('currentDepthTex', sceneDepthTexture, fetchSampler('clamp_nearest_nomip'));\r\n this._bindGroup.setTexture(\r\n 'motionVector',\r\n ctx.motionVectorTexture,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n this._bindGroup.setTexture(\r\n 'prevMotionVector',\r\n data.prevMotionVectorTex,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n this._bindGroup.setValue('flip', this.needFlip(ctx.device) ? 1 : 0);\r\n this._bindGroup.setValue('srgbOut', srgbOutput ? 1 : 0);\r\n TAA._texSize.setXY(sceneDepthTexture.width, sceneDepthTexture.height);\r\n this._bindGroup.setValue('texSize', TAA._texSize);\r\n //this.passThrough(ctx, inputColorTexture, srgbOutput, AbstractPostEffect.getZTestEqualRenderState(ctx));\r\n ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, this._bindGroup);\r\n this.drawFullscreenQuad();\r\n }\r\n if (data.prevColorTex) {\r\n ctx.device.pool.releaseTexture(data.prevColorTex);\r\n }\r\n const currentColorTex = ctx.device.getFramebuffer().getColorAttachments()[0];\r\n ctx.device.pool.retainTexture(currentColorTex);\r\n data.prevColorTex = currentColorTex;\r\n if (data.prevMotionVectorTex) {\r\n ctx.device.pool.releaseTexture(data.prevMotionVectorTex);\r\n }\r\n ctx.device.pool.retainTexture(ctx.motionVectorTexture);\r\n data.prevMotionVectorTex = ctx.motionVectorTexture;\r\n }\r\n requireLinearDepthTexture(_ctx: DrawContext): boolean {\r\n return true;\r\n }\r\n requireDepthAttachment(_ctx: DrawContext): boolean {\r\n return true;\r\n }\r\n private static _getSkyMotionVectorProgram(ctx: DrawContext): GPUProgram {\r\n if (!this._skyMotionVectorProgram) {\r\n this._skyMotionVectorProgram = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec3().attrib('position');\r\n this.VPMatrix = pb.mat4().uniform(0);\r\n this.prevVPMatrix = pb.mat4().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.prevCameraPos = pb.vec3().uniform(0);\r\n pb.main(function () {\r\n this.$l.worldPos = pb.add(this.$inputs.pos, this.cameraPos);\r\n this.$l.prevWorldPos = pb.add(this.$inputs.pos, this.prevCameraPos);\r\n this.$l.clipPos = pb.mul(this.VPMatrix, pb.vec4(this.worldPos, 1));\r\n this.$l.prevClipPos = pb.mul(this.prevVPMatrix, pb.vec4(this.prevWorldPos, 1));\r\n this.clipPos.z = this.clipPos.w;\r\n this.$builtins.position = this.clipPos;\r\n this.$outputs.currentPos = this.clipPos;\r\n this.$outputs.prevPos = this.prevClipPos;\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n pb.main(function () {\r\n this.$l.motionVector = pb.mul(\r\n pb.sub(\r\n pb.div(this.$inputs.currentPos.xy, this.$inputs.currentPos.w),\r\n pb.div(this.$inputs.prevPos.xy, this.$inputs.prevPos.w)\r\n ),\r\n 0.5\r\n );\r\n this.$outputs.color = pb.vec4(this.motionVector, 0, 1);\r\n });\r\n }\r\n });\r\n }\r\n return this._skyMotionVectorProgram;\r\n }\r\n private static _getBox(_ctx: DrawContext) {\r\n if (!this._box) {\r\n this._box = new BoxShape({\r\n size: 2,\r\n needNormal: false,\r\n needUV: false\r\n });\r\n }\r\n return this._box;\r\n }\r\n private static _getResolveProgram(ctx: DrawContext, debug: number): GPUProgram {\r\n return ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n this.historyColorTex = pb.tex2D().uniform(0);\r\n this.currentColorTex = pb.tex2D().uniform(0);\r\n this.currentDepthTex = pb.tex2D().uniform(0);\r\n this.motionVector = pb.tex2D().uniform(0);\r\n this.prevMotionVector = pb.tex2D().uniform(0);\r\n this.texSize = pb.vec2().uniform(0);\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.texSize);\r\n this.$l.resolvedColor = temporalResolve(\r\n this,\r\n this.currentColorTex,\r\n this.historyColorTex,\r\n this.currentDepthTex,\r\n this.motionVector,\r\n this.prevMotionVector,\r\n this.screenUV,\r\n this.texSize,\r\n debug\r\n );\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.resolvedColor, 1);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.resolvedColor), 1);\r\n });\r\n });\r\n }\r\n });\r\n }\r\n}\r\n"],"names":["TAA","AbstractPostEffect","_resolveProgram","_skyMotionVectorProgram","_box","_texSize","Vector2","_bindGroup","_skyMotionVectorBindGroup","_layer","PostEffectLayer","end","renderSkyMotionVectors","ctx","fb","device","pool","fetchTemporalFramebuffer","motionVectorTexture","depthTexture","program","_getSkyMotionVectorProgram","createBindGroup","bindGroupLayouts","box","_getBox","setValue","camera","viewProjectionMatrix","prevVPMatrix","getWorldPosition","prevPosition","pushDeviceStates","setProgram","setBindGroup","setRenderStates","getDefaultRenderState","setFramebuffer","draw","popDeviceStates","releaseFrameBuffer","apply","inputColorTexture","sceneDepthTexture","srgbOutput","data","getHistoryData","prevColorTex","prevMotionVectorTex","width","height","passThrough","TAADebug","_getResolveProgram","setTexture","fetchSampler","needFlip","setXY","drawFullscreenQuad","releaseTexture","currentColorTex","getFramebuffer","getColorAttachments","retainTexture","requireLinearDepthTexture","_ctx","requireDepthAttachment","buildRenderProgram","vertex","pb","$inputs","pos","vec3","attrib","VPMatrix","mat4","uniform","cameraPos","prevCameraPos","main","$l","worldPos","add","prevWorldPos","clipPos","mul","vec4","prevClipPos","z","w","$builtins","position","$outputs","currentPos","prevPos","fragment","color","motionVector","sub","div","xy","BoxShape","size","needNormal","needUV","debug","flip","int","vec2","uv","$if","notEqual","y","neg","historyColorTex","tex2D","currentDepthTex","prevMotionVector","texSize","srgbOut","outColor","screenUV","fragCoord","resolvedColor","temporalResolve","equal","$else","linearToGamma"],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import { AbstractPostEffect, PostEffectLayer } from './posteffect.js';
2
+ import { linearToGamma } from '../shaders/misc.js';
3
+ import { fetchSampler } from '../utility/misc.js';
4
+
5
+ /**
6
+ * The tonemap post effect
7
+ * @public
8
+ */ class Tonemap extends AbstractPostEffect {
9
+ static _programTonemap = null;
10
+ static _bindgroupTonemap = null;
11
+ _exposure;
12
+ /**
13
+ * Creates an instance of tonemap post effect
14
+ */ constructor(){
15
+ super();
16
+ this._layer = PostEffectLayer.transparent;
17
+ this._exposure = 1;
18
+ }
19
+ /** Exposure value */ get exposure() {
20
+ return this._exposure;
21
+ }
22
+ set exposure(val) {
23
+ this._exposure = val;
24
+ }
25
+ /** {@inheritDoc AbstractPostEffect.requireLinearDepthTexture} */ requireLinearDepthTexture() {
26
+ return false;
27
+ }
28
+ /** {@inheritDoc AbstractPostEffect.requireDepthAttachment} */ requireDepthAttachment() {
29
+ return false;
30
+ }
31
+ /** {@inheritDoc AbstractPostEffect.apply} */ apply(ctx, inputColorTexture, sceneDepthTexture, srgbOutput) {
32
+ const device = ctx.device;
33
+ this._prepare(device, inputColorTexture);
34
+ this._tonemap(device, inputColorTexture, srgbOutput);
35
+ }
36
+ /** @internal */ _tonemap(device, inputColorTexture, sRGBOutput) {
37
+ Tonemap._bindgroupTonemap.setValue('srgbOut', sRGBOutput ? 1 : 0);
38
+ Tonemap._bindgroupTonemap.setValue('exposure', this._exposure);
39
+ Tonemap._bindgroupTonemap.setValue('flip', this.needFlip(device) ? 1 : 0);
40
+ Tonemap._bindgroupTonemap.setTexture('tex', inputColorTexture, fetchSampler('clamp_nearest_nomip'));
41
+ device.setProgram(Tonemap._programTonemap);
42
+ device.setBindGroup(0, Tonemap._bindgroupTonemap);
43
+ this.drawFullscreenQuad();
44
+ }
45
+ /** @internal */ _prepare(device, _srcTexture) {
46
+ if (!Tonemap._programTonemap) {
47
+ Tonemap._programTonemap = device.buildRenderProgram({
48
+ vertex (pb) {
49
+ this.flip = pb.int().uniform(0);
50
+ this.$inputs.pos = pb.vec2().attrib('position');
51
+ this.$outputs.uv = pb.vec2();
52
+ pb.main(function() {
53
+ this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);
54
+ this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));
55
+ this.$if(pb.notEqual(this.flip, 0), function() {
56
+ this.$builtins.position.y = pb.neg(this.$builtins.position.y);
57
+ });
58
+ });
59
+ },
60
+ fragment (pb) {
61
+ this.srgbOut = pb.int().uniform(0);
62
+ this.exposure = pb.float().uniform(0);
63
+ this.tex = pb.tex2D().uniform(0);
64
+ this.$outputs.outColor = pb.vec4();
65
+ pb.func('RRTAndODTFit', [
66
+ pb.vec3('v')
67
+ ], function() {
68
+ this.$l.a = pb.sub(pb.mul(this.v, pb.add(this.v, pb.vec3(0.0245786))), pb.vec3(0.000090537));
69
+ this.$l.b = pb.add(pb.mul(this.v, pb.add(pb.mul(this.v, 0.983729), pb.vec3(0.432951))), pb.vec3(0.238081));
70
+ this.$return(pb.div(this.a, this.b));
71
+ });
72
+ pb.main(function() {
73
+ this.$l.vSample = pb.textureSample(this.tex, this.$inputs.uv);
74
+ this.$l.ACESInputMat = pb.mat3(0.59719, 0.076, 0.0284, 0.35458, 0.90834, 0.13383, 0.04823, 0.01566, 0.83777);
75
+ this.$l.ACESOutputMat = pb.mat3(1.60475, -0.10208, -327e-5, -0.53108, 1.10813, -0.07276, -0.07367, -605e-5, 1.07602);
76
+ this.$l.color = pb.mul(this.vSample.rgb, pb.div(this.exposure, 0.6));
77
+ this.color = pb.mul(this.ACESInputMat, this.color);
78
+ this.color = this.RRTAndODTFit(this.color);
79
+ this.color = pb.mul(this.ACESOutputMat, this.color);
80
+ this.color = pb.clamp(this.color, pb.vec3(0), pb.vec3(1));
81
+ this.$if(pb.notEqual(this.srgbOut, 0), function() {
82
+ this.$l.color = linearToGamma(this, this.color);
83
+ });
84
+ this.$outputs.outColor = pb.vec4(this.color, 1);
85
+ });
86
+ }
87
+ });
88
+ Tonemap._bindgroupTonemap = device.createBindGroup(Tonemap._programTonemap.bindGroupLayouts[0]);
89
+ }
90
+ }
91
+ }
92
+
93
+ export { Tonemap };
94
+ //# sourceMappingURL=tonemap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tonemap.js","sources":["../../../src/posteffect/tonemap.ts"],"sourcesContent":["import { AbstractPostEffect, PostEffectLayer } from './posteffect';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport type { AbstractDevice, BindGroup, GPUProgram, Texture2D } from '@zephyr3d/device';\r\nimport type { DrawContext } from '../render';\r\nimport { fetchSampler } from '../utility/misc';\r\n\r\n/**\r\n * The tonemap post effect\r\n * @public\r\n */\r\nexport class Tonemap extends AbstractPostEffect {\r\n private static _programTonemap: GPUProgram = null;\r\n private static _bindgroupTonemap: BindGroup = null;\r\n private _exposure: number;\r\n /**\r\n * Creates an instance of tonemap post effect\r\n */\r\n constructor() {\r\n super();\r\n this._layer = PostEffectLayer.transparent;\r\n this._exposure = 1;\r\n }\r\n /** Exposure value */\r\n get exposure(): number {\r\n return this._exposure;\r\n }\r\n set exposure(val: number) {\r\n this._exposure = val;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireLinearDepthTexture} */\r\n requireLinearDepthTexture(): boolean {\r\n return false;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireDepthAttachment} */\r\n requireDepthAttachment(): boolean {\r\n return false;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.apply} */\r\n apply(ctx: DrawContext, inputColorTexture: Texture2D, sceneDepthTexture: Texture2D, srgbOutput: boolean) {\r\n const device = ctx.device;\r\n this._prepare(device, inputColorTexture);\r\n this._tonemap(device, inputColorTexture, srgbOutput);\r\n }\r\n /** @internal */\r\n private _tonemap(device: AbstractDevice, inputColorTexture: Texture2D, sRGBOutput: boolean) {\r\n Tonemap._bindgroupTonemap.setValue('srgbOut', sRGBOutput ? 1 : 0);\r\n Tonemap._bindgroupTonemap.setValue('exposure', this._exposure);\r\n Tonemap._bindgroupTonemap.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n Tonemap._bindgroupTonemap.setTexture('tex', inputColorTexture, fetchSampler('clamp_nearest_nomip'));\r\n device.setProgram(Tonemap._programTonemap);\r\n device.setBindGroup(0, Tonemap._bindgroupTonemap);\r\n this.drawFullscreenQuad();\r\n }\r\n /** @internal */\r\n private _prepare(device: AbstractDevice, _srcTexture: Texture2D) {\r\n if (!Tonemap._programTonemap) {\r\n Tonemap._programTonemap = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 0, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n this.srgbOut = pb.int().uniform(0);\r\n this.exposure = pb.float().uniform(0);\r\n this.tex = pb.tex2D().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('RRTAndODTFit', [pb.vec3('v')], function () {\r\n this.$l.a = pb.sub(pb.mul(this.v, pb.add(this.v, pb.vec3(0.0245786))), pb.vec3(0.000090537));\r\n this.$l.b = pb.add(\r\n pb.mul(this.v, pb.add(pb.mul(this.v, 0.983729), pb.vec3(0.432951))),\r\n pb.vec3(0.238081)\r\n );\r\n this.$return(pb.div(this.a, this.b));\r\n });\r\n pb.main(function () {\r\n this.$l.vSample = pb.textureSample(this.tex, this.$inputs.uv);\r\n this.$l.ACESInputMat = pb.mat3(\r\n 0.59719,\r\n 0.076,\r\n 0.0284,\r\n 0.35458,\r\n 0.90834,\r\n 0.13383,\r\n 0.04823,\r\n 0.01566,\r\n 0.83777\r\n );\r\n this.$l.ACESOutputMat = pb.mat3(\r\n 1.60475,\r\n -0.10208,\r\n -0.00327,\r\n -0.53108,\r\n 1.10813,\r\n -0.07276,\r\n -0.07367,\r\n -0.00605,\r\n 1.07602\r\n );\r\n this.$l.color = pb.mul(this.vSample.rgb, pb.div(this.exposure, 0.6));\r\n this.color = pb.mul(this.ACESInputMat, this.color);\r\n this.color = this.RRTAndODTFit(this.color);\r\n this.color = pb.mul(this.ACESOutputMat, this.color);\r\n this.color = pb.clamp(this.color, pb.vec3(0), pb.vec3(1));\r\n this.$if(pb.notEqual(this.srgbOut, 0), function () {\r\n this.$l.color = linearToGamma(this, this.color);\r\n });\r\n this.$outputs.outColor = pb.vec4(this.color, 1);\r\n });\r\n }\r\n });\r\n Tonemap._bindgroupTonemap = device.createBindGroup(Tonemap._programTonemap.bindGroupLayouts[0]);\r\n }\r\n }\r\n}\r\n"],"names":["Tonemap","AbstractPostEffect","_programTonemap","_bindgroupTonemap","_exposure","_layer","PostEffectLayer","transparent","exposure","val","requireLinearDepthTexture","requireDepthAttachment","apply","ctx","inputColorTexture","sceneDepthTexture","srgbOutput","device","_prepare","_tonemap","sRGBOutput","setValue","needFlip","setTexture","fetchSampler","setProgram","setBindGroup","drawFullscreenQuad","_srcTexture","buildRenderProgram","vertex","pb","flip","int","uniform","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","$if","notEqual","y","neg","fragment","srgbOut","float","tex","tex2D","outColor","func","vec3","$l","a","sub","v","b","$return","div","vSample","textureSample","ACESInputMat","mat3","ACESOutputMat","color","rgb","RRTAndODTFit","clamp","linearToGamma","createBindGroup","bindGroupLayouts"],"mappings":"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"}