@zephyr3d/scene 0.9.27 → 0.10.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 (502) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +54 -0
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +279 -55
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +171 -1
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +104 -178
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +25436 -15990
  109. package/dist/index.js +65 -11
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/lambert.js +4 -1
  118. package/dist/material/lambert.js.map +1 -1
  119. package/dist/material/material.js +66 -4
  120. package/dist/material/material.js.map +1 -1
  121. package/dist/material/meshmaterial.js +118 -45
  122. package/dist/material/meshmaterial.js.map +1 -1
  123. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  124. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  126. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  128. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  130. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  132. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  133. package/dist/material/mixins/lit.js +191 -83
  134. package/dist/material/mixins/lit.js.map +1 -1
  135. package/dist/material/mixins/pbr/common.js +31 -206
  136. package/dist/material/mixins/pbr/common.js.map +1 -1
  137. package/dist/material/mtoon.js +1 -1
  138. package/dist/material/mtoon.js.map +1 -1
  139. package/dist/material/pbrmr.js +3 -0
  140. package/dist/material/pbrmr.js.map +1 -1
  141. package/dist/material/pbrsg.js +3 -0
  142. package/dist/material/pbrsg.js.map +1 -1
  143. package/dist/material/sdf_debug.js +78 -0
  144. package/dist/material/sdf_debug.js.map +1 -0
  145. package/dist/material/shader/helper.js +333 -191
  146. package/dist/material/shader/helper.js.map +1 -1
  147. package/dist/material/shader/terrain_blend.js +204 -43
  148. package/dist/material/shader/terrain_blend.js.map +1 -1
  149. package/dist/material/skin.js +331 -297
  150. package/dist/material/skin.js.map +1 -1
  151. package/dist/material/skinprofile.js +1058 -0
  152. package/dist/material/skinprofile.js.map +1 -0
  153. package/dist/material/sss.js +353 -0
  154. package/dist/material/sss.js.map +1 -0
  155. package/dist/material/sss_kernel.js +265 -0
  156. package/dist/material/sss_kernel.js.map +1 -0
  157. package/dist/material/sssprofile.js +879 -0
  158. package/dist/material/sssprofile.js.map +1 -0
  159. package/dist/material/subsurfaceprofile.js +4 -8
  160. package/dist/material/subsurfaceprofile.js.map +1 -1
  161. package/dist/material/terrain-cm.js +464 -188
  162. package/dist/material/terrain-cm.js.map +1 -1
  163. package/dist/material/unlit.js +3 -0
  164. package/dist/material/unlit.js.map +1 -1
  165. package/dist/material/water.js +1261 -1438
  166. package/dist/material/water.js.map +1 -1
  167. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  168. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  169. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  172. package/dist/physics/character.js +226 -0
  173. package/dist/physics/character.js.map +1 -0
  174. package/dist/physics/collider.js +209 -0
  175. package/dist/physics/collider.js.map +1 -0
  176. package/dist/physics/events.js +79 -0
  177. package/dist/physics/events.js.map +1 -0
  178. package/dist/physics/joint.js +272 -0
  179. package/dist/physics/joint.js.map +1 -0
  180. package/dist/physics/node_physics.js +234 -0
  181. package/dist/physics/node_physics.js.map +1 -0
  182. package/dist/physics/part.js +91 -0
  183. package/dist/physics/part.js.map +1 -0
  184. package/dist/physics/rigid_body.js +379 -0
  185. package/dist/physics/rigid_body.js.map +1 -0
  186. package/dist/physics/vehicle.js +335 -0
  187. package/dist/physics/vehicle.js.map +1 -0
  188. package/dist/physics/world.js +25 -0
  189. package/dist/physics/world.js.map +1 -0
  190. package/dist/posteffect/bloom.js +49 -14
  191. package/dist/posteffect/bloom.js.map +1 -1
  192. package/dist/posteffect/motionblur.js +106 -106
  193. package/dist/posteffect/motionblur.js.map +1 -1
  194. package/dist/posteffect/postsss.js +572 -0
  195. package/dist/posteffect/postsss.js.map +1 -0
  196. package/dist/posteffect/sao.js +2 -6
  197. package/dist/posteffect/sao.js.map +1 -1
  198. package/dist/posteffect/skinsss.js +605 -355
  199. package/dist/posteffect/skinsss.js.map +1 -1
  200. package/dist/posteffect/ssgi.js +91 -162
  201. package/dist/posteffect/ssgi.js.map +1 -1
  202. package/dist/posteffect/ssr.js +3 -11
  203. package/dist/posteffect/ssr.js.map +1 -1
  204. package/dist/posteffect/sss.js +4 -13
  205. package/dist/posteffect/sss.js.map +1 -1
  206. package/dist/posteffect/taa.js +1 -0
  207. package/dist/posteffect/taa.js.map +1 -1
  208. package/dist/render/abuffer_oit.js +3 -2
  209. package/dist/render/abuffer_oit.js.map +1 -1
  210. package/dist/render/clipmap.js +179 -64
  211. package/dist/render/clipmap.js.map +1 -1
  212. package/dist/render/cluster_light.js +958 -224
  213. package/dist/render/cluster_light.js.map +1 -1
  214. package/dist/render/cull_visitor.js +25 -5
  215. package/dist/render/cull_visitor.js.map +1 -1
  216. package/dist/render/debug_views.js +37 -0
  217. package/dist/render/debug_views.js.map +1 -0
  218. package/dist/render/depthpass.js +5 -1
  219. package/dist/render/depthpass.js.map +1 -1
  220. package/dist/render/drawable_mixin.js +53 -6
  221. package/dist/render/drawable_mixin.js.map +1 -1
  222. package/dist/render/dualdepthpeeling_oit.js +5 -5
  223. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  224. package/dist/render/envlight.js +196 -113
  225. package/dist/render/envlight.js.map +1 -1
  226. package/dist/render/fbm_wavegenerator.js +5 -10
  227. package/dist/render/fbm_wavegenerator.js.map +1 -1
  228. package/dist/render/fft_wavegenerator.js +247 -157
  229. package/dist/render/fft_wavegenerator.js.map +1 -1
  230. package/dist/render/gerstner_wavegenerator.js +16 -38
  231. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  232. package/dist/render/gi/probe_volume.js +1334 -0
  233. package/dist/render/gi/probe_volume.js.map +1 -0
  234. package/dist/render/gi/scene_gi.js +282 -0
  235. package/dist/render/gi/scene_gi.js.map +1 -0
  236. package/dist/render/gi/voxel_atlas.js +198 -0
  237. package/dist/render/gi/voxel_atlas.js.map +1 -0
  238. package/dist/render/gi/voxel_lighting.js +652 -0
  239. package/dist/render/gi/voxel_lighting.js.map +1 -0
  240. package/dist/render/gi/voxel_scene.js +642 -0
  241. package/dist/render/gi/voxel_scene.js.map +1 -0
  242. package/dist/render/gi/voxelize_pass.js +223 -0
  243. package/dist/render/gi/voxelize_pass.js.map +1 -0
  244. package/dist/render/globalbindgroup_allocator.js +3 -2
  245. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  246. package/dist/render/gpu_picking.js +9 -36
  247. package/dist/render/gpu_picking.js.map +1 -1
  248. package/dist/render/instance_culling.js +499 -0
  249. package/dist/render/instance_culling.js.map +1 -0
  250. package/dist/render/lightpass.js +19 -8
  251. package/dist/render/lightpass.js.map +1 -1
  252. package/dist/render/lod.js +46 -0
  253. package/dist/render/lod.js.map +1 -0
  254. package/dist/render/primitive.js +301 -9
  255. package/dist/render/primitive.js.map +1 -1
  256. package/dist/render/primitive_readback.js +209 -0
  257. package/dist/render/primitive_readback.js.map +1 -0
  258. package/dist/render/render_queue.js +162 -11
  259. package/dist/render/render_queue.js.map +1 -1
  260. package/dist/render/renderer.js +10 -7
  261. package/dist/render/renderer.js.map +1 -1
  262. package/dist/render/rendergraph/blackboard.js +14 -1
  263. package/dist/render/rendergraph/blackboard.js.map +1 -1
  264. package/dist/render/rendergraph/executor.js +136 -0
  265. package/dist/render/rendergraph/executor.js.map +1 -1
  266. package/dist/render/rendergraph/forward_plus_builder.js +272 -55
  267. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  268. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  269. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  270. package/dist/render/rendergraph/scene_render_context.js +31 -2
  271. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  272. package/dist/render/rendergraph/types.js.map +1 -1
  273. package/dist/render/renderpass.js +28 -5
  274. package/dist/render/renderpass.js.map +1 -1
  275. package/dist/render/sdf/box_allocator.js +98 -0
  276. package/dist/render/sdf/box_allocator.js.map +1 -0
  277. package/dist/render/sdf/global_sdf.js +865 -0
  278. package/dist/render/sdf/global_sdf.js.map +1 -0
  279. package/dist/render/sdf/scene_sdf.js +562 -0
  280. package/dist/render/sdf/scene_sdf.js.map +1 -0
  281. package/dist/render/sdf/sdf_atlas.js +227 -0
  282. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  283. package/dist/render/sdf/sdf_programs.js +42 -0
  284. package/dist/render/sdf/sdf_programs.js.map +1 -0
  285. package/dist/render/sdf/sdf_view.js +199 -0
  286. package/dist/render/sdf/sdf_view.js.map +1 -0
  287. package/dist/render/sdf/waterline.js +610 -0
  288. package/dist/render/sdf/waterline.js.map +1 -0
  289. package/dist/render/shadow_mask_pass.js +142 -25
  290. package/dist/render/shadow_mask_pass.js.map +1 -1
  291. package/dist/render/shore_wave_generator.js +1193 -0
  292. package/dist/render/shore_wave_generator.js.map +1 -0
  293. package/dist/render/sky.js +516 -86
  294. package/dist/render/sky.js.map +1 -1
  295. package/dist/render/transmission_thickness_pass.js +477 -0
  296. package/dist/render/transmission_thickness_pass.js.map +1 -0
  297. package/dist/render/underwater.js +58 -158
  298. package/dist/render/underwater.js.map +1 -1
  299. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  300. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  301. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  302. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  303. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  304. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  305. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  306. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  307. package/dist/render/volumetric_cloud/resources.js +380 -0
  308. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  309. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  310. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  311. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  312. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  313. package/dist/render/water_caustics.js +134 -319
  314. package/dist/render/water_caustics.js.map +1 -1
  315. package/dist/render/water_foam.js +627 -0
  316. package/dist/render/water_foam.js.map +1 -0
  317. package/dist/render/water_interaction.js +1795 -0
  318. package/dist/render/water_interaction.js.map +1 -0
  319. package/dist/render/weightedblended_oit.js +3 -3
  320. package/dist/render/weightedblended_oit.js.map +1 -1
  321. package/dist/scene/basesprite.js +9 -4
  322. package/dist/scene/basesprite.js.map +1 -1
  323. package/dist/scene/batchgroup.js +108 -12
  324. package/dist/scene/batchgroup.js.map +1 -1
  325. package/dist/scene/environment.js +28 -7
  326. package/dist/scene/environment.js.map +1 -1
  327. package/dist/scene/foliage.js +1020 -0
  328. package/dist/scene/foliage.js.map +1 -0
  329. package/dist/scene/foliage_buckets.js +147 -0
  330. package/dist/scene/foliage_buckets.js.map +1 -0
  331. package/dist/scene/foliage_mask.js +358 -0
  332. package/dist/scene/foliage_mask.js.map +1 -0
  333. package/dist/scene/hair.js +15 -4
  334. package/dist/scene/hair.js.map +1 -1
  335. package/dist/scene/light.js +179 -13
  336. package/dist/scene/light.js.map +1 -1
  337. package/dist/scene/mesh.js +327 -45
  338. package/dist/scene/mesh.js.map +1 -1
  339. package/dist/scene/meshdrawable.js +6 -0
  340. package/dist/scene/meshdrawable.js.map +1 -1
  341. package/dist/scene/msdftext.js +9 -3
  342. package/dist/scene/msdftext.js.map +1 -1
  343. package/dist/scene/msdftextsprite.js +9 -3
  344. package/dist/scene/msdftextsprite.js.map +1 -1
  345. package/dist/scene/particlesys.js +8 -2
  346. package/dist/scene/particlesys.js.map +1 -1
  347. package/dist/scene/physics_settings.js +157 -0
  348. package/dist/scene/physics_settings.js.map +1 -0
  349. package/dist/scene/scene.js +190 -44
  350. package/dist/scene/scene.js.map +1 -1
  351. package/dist/scene/scene_node.js +147 -6
  352. package/dist/scene/scene_node.js.map +1 -1
  353. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  354. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  355. package/dist/scene/terrain-cm/grass.js +881 -42
  356. package/dist/scene/terrain-cm/grass.js.map +1 -1
  357. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  358. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  359. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  360. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  361. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  362. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  363. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  364. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  365. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  366. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  367. package/dist/scene/update_queue.js +54 -0
  368. package/dist/scene/update_queue.js.map +1 -0
  369. package/dist/scene/water.js +633 -268
  370. package/dist/scene/water.js.map +1 -1
  371. package/dist/scene/water_surface_sampler.js +324 -0
  372. package/dist/scene/water_surface_sampler.js.map +1 -0
  373. package/dist/scene/wind.js +317 -0
  374. package/dist/scene/wind.js.map +1 -0
  375. package/dist/shaders/atmosphere.js +388 -166
  376. package/dist/shaders/atmosphere.js.map +1 -1
  377. package/dist/shaders/fog.js +100 -32
  378. package/dist/shaders/fog.js.map +1 -1
  379. package/dist/shaders/gi.js +365 -0
  380. package/dist/shaders/gi.js.map +1 -0
  381. package/dist/shaders/ltc_rect.js +202 -0
  382. package/dist/shaders/ltc_rect.js.map +1 -0
  383. package/dist/shaders/misc.js +1 -10
  384. package/dist/shaders/misc.js.map +1 -1
  385. package/dist/shaders/noise.js +5 -1
  386. package/dist/shaders/noise.js.map +1 -1
  387. package/dist/shaders/probes.js +309 -0
  388. package/dist/shaders/probes.js.map +1 -0
  389. package/dist/shaders/sdf.js +537 -0
  390. package/dist/shaders/sdf.js.map +1 -0
  391. package/dist/shaders/shadow.js +104 -70
  392. package/dist/shaders/shadow.js.map +1 -1
  393. package/dist/shaders/skin_brdf.js +243 -0
  394. package/dist/shaders/skin_brdf.js.map +1 -0
  395. package/dist/shaders/ssgi.js +63 -0
  396. package/dist/shaders/ssgi.js.map +1 -0
  397. package/dist/shaders/ssgi_reprojection.js +118 -0
  398. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  399. package/dist/shaders/ssr.js +6 -159
  400. package/dist/shaders/ssr.js.map +1 -1
  401. package/dist/shaders/temporal.js +38 -27
  402. package/dist/shaders/temporal.js.map +1 -1
  403. package/dist/shaders/water.js +32 -82
  404. package/dist/shaders/water.js.map +1 -1
  405. package/dist/shaders/water_medium.js +7 -21
  406. package/dist/shaders/water_medium.js.map +1 -1
  407. package/dist/shadow/dom.js +110 -19
  408. package/dist/shadow/dom.js.map +1 -1
  409. package/dist/shadow/esm.js +3 -3
  410. package/dist/shadow/esm.js.map +1 -1
  411. package/dist/shadow/pcf_opt.js +15 -48
  412. package/dist/shadow/pcf_opt.js.map +1 -1
  413. package/dist/shadow/pcf_pd.js +15 -53
  414. package/dist/shadow/pcf_pd.js.map +1 -1
  415. package/dist/shadow/pcss.js +34 -9
  416. package/dist/shadow/pcss.js.map +1 -1
  417. package/dist/shadow/shadow_impl.js +3 -8
  418. package/dist/shadow/shadow_impl.js.map +1 -1
  419. package/dist/shadow/shadow_region.js +40 -2
  420. package/dist/shadow/shadow_region.js.map +1 -1
  421. package/dist/shadow/shadowmapper.js +93 -53
  422. package/dist/shadow/shadowmapper.js.map +1 -1
  423. package/dist/shadow/ssm.js +18 -72
  424. package/dist/shadow/ssm.js.map +1 -1
  425. package/dist/shadow/vsm.js +3 -3
  426. package/dist/shadow/vsm.js.map +1 -1
  427. package/dist/shapes/shape.js +44 -1
  428. package/dist/shapes/shape.js.map +1 -1
  429. package/dist/utility/buoyancy.js +287 -0
  430. package/dist/utility/buoyancy.js.map +1 -0
  431. package/dist/utility/physical.js +10 -1
  432. package/dist/utility/physical.js.map +1 -1
  433. package/dist/utility/pmrem.js +17 -43
  434. package/dist/utility/pmrem.js.map +1 -1
  435. package/dist/utility/sdf/bake.js +435 -0
  436. package/dist/utility/sdf/bake.js.map +1 -0
  437. package/dist/utility/sdf/bvh.js +576 -0
  438. package/dist/utility/sdf/bvh.js.map +1 -0
  439. package/dist/utility/serialization/manager.js +34 -6
  440. package/dist/utility/serialization/manager.js.map +1 -1
  441. package/dist/utility/serialization/scene/animation.js +46 -5
  442. package/dist/utility/serialization/scene/animation.js.map +1 -1
  443. package/dist/utility/serialization/scene/batch.js +11 -4
  444. package/dist/utility/serialization/scene/batch.js.map +1 -1
  445. package/dist/utility/serialization/scene/camera.js +87 -254
  446. package/dist/utility/serialization/scene/camera.js.map +1 -1
  447. package/dist/utility/serialization/scene/cloth.js +25 -0
  448. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  449. package/dist/utility/serialization/scene/common.js +14 -6
  450. package/dist/utility/serialization/scene/common.js.map +1 -1
  451. package/dist/utility/serialization/scene/foliage.js +821 -0
  452. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  453. package/dist/utility/serialization/scene/hair.js +11 -4
  454. package/dist/utility/serialization/scene/hair.js.map +1 -1
  455. package/dist/utility/serialization/scene/light.js +115 -7
  456. package/dist/utility/serialization/scene/light.js.map +1 -1
  457. package/dist/utility/serialization/scene/material.js +388 -220
  458. package/dist/utility/serialization/scene/material.js.map +1 -1
  459. package/dist/utility/serialization/scene/mesh.js +69 -4
  460. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  461. package/dist/utility/serialization/scene/node.js +140 -5
  462. package/dist/utility/serialization/scene/node.js.map +1 -1
  463. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  464. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  465. package/dist/utility/serialization/scene/particle.js +11 -4
  466. package/dist/utility/serialization/scene/particle.js.map +1 -1
  467. package/dist/utility/serialization/scene/physics.js +120 -0
  468. package/dist/utility/serialization/scene/physics.js.map +1 -0
  469. package/dist/utility/serialization/scene/primitive.js +124 -10
  470. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  471. package/dist/utility/serialization/scene/scene.js +1687 -51
  472. package/dist/utility/serialization/scene/scene.js.map +1 -1
  473. package/dist/utility/serialization/scene/sprite.js +11 -4
  474. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  475. package/dist/utility/serialization/scene/terrain.js +163 -33
  476. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  477. package/dist/utility/serialization/scene/text.js +11 -4
  478. package/dist/utility/serialization/scene/text.js.map +1 -1
  479. package/dist/utility/serialization/scene/water.js +1543 -264
  480. package/dist/utility/serialization/scene/water.js.map +1 -1
  481. package/dist/utility/serialization/types.js.map +1 -1
  482. package/dist/utility/shprojector.js +10 -22
  483. package/dist/utility/shprojector.js.map +1 -1
  484. package/dist/utility/textures/foam.js +170 -0
  485. package/dist/utility/textures/foam.js.map +1 -0
  486. package/dist/utility/textures/ggxlut.js +17 -43
  487. package/dist/utility/textures/ggxlut.js.map +1 -1
  488. package/dist/utility/textures/ltcdata.js +4 -4
  489. package/dist/utility/textures/ltcdata.js.map +1 -1
  490. package/dist/utility/textures/ltclut.js +16 -6
  491. package/dist/utility/textures/ltclut.js.map +1 -1
  492. package/dist/utility/unsupported.js +24 -0
  493. package/dist/utility/unsupported.js.map +1 -0
  494. package/dist/values.js +13 -1
  495. package/dist/values.js.map +1 -1
  496. package/package.json +25 -12
  497. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  498. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  499. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  500. package/src/asset/meshoptimizer/LICENSE +21 -0
  501. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  502. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -4,6 +4,7 @@ import { ShaderHelper } from '../material/shader/helper.js';
4
4
  import { fetchSampler } from '../utility/misc.js';
5
5
  import { Vector2, DEPTH_COMPARE_DEFAULT, DEPTH_FARTHEST } from '@zephyr3d/base';
6
6
  import '../render/primitive.js';
7
+ import '../node_modules/meshoptimizer/meshopt_simplifier.js';
7
8
  import { BoxShape } from '../shapes/box.js';
8
9
  import '../shapes/capsule.js';
9
10
  import '../shapes/cylinder.js';
@@ -1 +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 type { PostEffectSetupContext } from './posteffect';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { BoxShape } from '../shapes';\r\nimport { temporalResolve } from '../shaders/temporal';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { DEPTH_COMPARE_DEFAULT, DEPTH_FARTHEST, Vector2 } from '@zephyr3d/base';\r\nimport { RGHistoryResources } from '../render/rendergraph/history_resources';\r\nimport { FrameResources } from '../render/rendergraph/blackboard';\r\nimport type { RGHandle, RGTextureDesc } from '../render/rendergraph/types';\r\n\r\n/** @internal */\r\nexport class TAA extends AbstractPostEffect {\r\n private static _resolveProgram: GPUProgram[] = [];\r\n private static _skyMotionVectorProgram: Nullable<GPUProgram> = null;\r\n private static _box: Primitive;\r\n private static readonly _texSize = new Vector2();\r\n private _bindGroup: Nullable<BindGroup>;\r\n private _skyMotionVectorBindGroup: Nullable<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, DEPTH_COMPARE_DEFAULT));\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(ctx: DrawContext, inputColorTexture: Texture2D, sceneDepthTexture: Texture2D, srgbOutput: boolean) {\r\n const historyManager = ctx.camera.getHistoryResourceManager();\r\n const prevColorTex = historyManager!.tryGetPrevious(RGHistoryResources.TAA_COLOR);\r\n const prevMotionVectorTex = historyManager!.tryGetPrevious(RGHistoryResources.TAA_MOTION_VECTOR);\r\n if (\r\n !prevColorTex ||\r\n !prevMotionVectorTex ||\r\n prevColorTex.width !== inputColorTexture.width ||\r\n prevColorTex.height !== inputColorTexture.height\r\n ) {\r\n this.passThrough(ctx, inputColorTexture, srgbOutput);\r\n } else {\r\n this._resolve(\r\n ctx,\r\n inputColorTexture,\r\n sceneDepthTexture,\r\n ctx.motionVectorTexture!,\r\n prevColorTex,\r\n prevMotionVectorTex,\r\n srgbOutput\r\n );\r\n }\r\n }\r\n /** @internal */\r\n private _resolve(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n motionVectorTexture: Texture2D,\r\n prevColorTex: Texture2D,\r\n prevMotionVectorTex: Texture2D,\r\n srgbOutput: boolean\r\n ) {\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', 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('motionVector', motionVectorTexture, fetchSampler('clamp_nearest_nomip'));\r\n this._bindGroup.setTexture('prevMotionVector', prevMotionVectorTex, fetchSampler('clamp_nearest_nomip'));\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 ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, this._bindGroup);\r\n this.drawFullscreenQuad();\r\n }\r\n /** {@inheritDoc AbstractPostEffect.setup}\r\n *\r\n * Native implementation: previous-frame color/motion-vector textures are\r\n * imported as graph resources at build time and this frame's resolve output\r\n * and motion vectors are queued as retained history commits, making TAA\r\n * fully self-describing (no builder-side history plumbing).\r\n */\r\n setup(s: PostEffectSetupContext): RGHandle {\r\n const { graph, ctx, history, blackboard } = s;\r\n const motionVectorHandle = blackboard.get(FrameResources.MotionVector);\r\n const linearDepthHandle = blackboard.get(FrameResources.LinearDepth);\r\n if (!history || !motionVectorHandle || !linearDepthHandle) {\r\n // No temporal inputs available this frame — the legacy path degrades to\r\n // a pass-through.\r\n return this._setupFromApply(s);\r\n }\r\n const historySize = { width: s.width, height: s.height };\r\n const colorDesc: RGTextureDesc = {\r\n format: s.colorFormat,\r\n sizeMode: 'absolute',\r\n width: s.width,\r\n height: s.height\r\n };\r\n const motionVectorDesc: RGTextureDesc = {\r\n format: 'rgba16f',\r\n sizeMode: 'absolute',\r\n width: s.width,\r\n height: s.height\r\n };\r\n const prevColorHandle = history.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.TAA_COLOR,\r\n colorDesc,\r\n historySize\r\n );\r\n const prevMotionVectorHandle = history.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.TAA_MOTION_VECTOR,\r\n motionVectorDesc,\r\n historySize\r\n );\r\n\r\n return graph.addPass('PostEffect:TAA', (builder) => {\r\n builder.read(s.input);\r\n builder.read(linearDepthHandle);\r\n builder.read(motionVectorHandle);\r\n if (prevColorHandle) {\r\n builder.read(prevColorHandle);\r\n }\r\n if (prevMotionVectorHandle) {\r\n builder.read(prevMotionVectorHandle);\r\n }\r\n for (const dep of s.dependencies) {\r\n builder.read(dep);\r\n }\r\n // requireDepthAttachment is true, so this always resolves to an\r\n // intermediate texture — required anyway for the history commit below.\r\n const output = s.createOutput(builder, { needDepthAttachment: true });\r\n builder.setExecute((rg) => {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n try {\r\n device.setFramebuffer(output.framebuffer ? rg.getFramebuffer(output.framebuffer) : null);\r\n const inputTexture = rg.getTexture<Texture2D>(s.input);\r\n const depthTexture = rg.getTexture<Texture2D>(linearDepthHandle);\r\n const motionVectorTexture = rg.getTexture<Texture2D>(motionVectorHandle);\r\n const prevColorTex = prevColorHandle ? rg.getTexture<Texture2D>(prevColorHandle) : null;\r\n const prevMotionVectorTex = prevMotionVectorHandle\r\n ? rg.getTexture<Texture2D>(prevMotionVectorHandle)\r\n : null;\r\n if (\r\n !prevColorTex ||\r\n !prevMotionVectorTex ||\r\n prevColorTex.width !== inputTexture.width ||\r\n prevColorTex.height !== inputTexture.height\r\n ) {\r\n this.passThrough(ctx, inputTexture, output.srgbOutput);\r\n } else {\r\n this._resolve(\r\n ctx,\r\n inputTexture,\r\n depthTexture,\r\n motionVectorTexture,\r\n prevColorTex,\r\n prevMotionVectorTex,\r\n output.srgbOutput\r\n );\r\n }\r\n // Queue this frame's history: the TAA resolve output and the frame's\r\n // motion vectors. Commits are applied only after the graph executes\r\n // successfully (HistoryResourceManager.commitFrame).\r\n const outputTexture = rg.getTexture<Texture2D>(output.color);\r\n history.queueRetainedCommit(\r\n RGHistoryResources.TAA_COLOR,\r\n {\r\n format: outputTexture.format,\r\n sizeMode: 'absolute',\r\n width: outputTexture.width,\r\n height: outputTexture.height\r\n },\r\n { width: outputTexture.width, height: outputTexture.height },\r\n outputTexture\r\n );\r\n history.queueRetainedCommit(\r\n RGHistoryResources.TAA_MOTION_VECTOR,\r\n {\r\n format: motionVectorTexture.format,\r\n sizeMode: 'absolute',\r\n width: motionVectorTexture.width,\r\n height: motionVectorTexture.height\r\n },\r\n { width: motionVectorTexture.width, height: motionVectorTexture.height },\r\n motionVectorTexture\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return output.color;\r\n });\r\n }\r\n requireLinearDepthTexture(_ctx: DrawContext) {\r\n return true;\r\n }\r\n requireDepthAttachment(_ctx: DrawContext) {\r\n return true;\r\n }\r\n requireMotionVectorTexture(_ctx: DrawContext) {\r\n return true;\r\n }\r\n private static _getSkyMotionVectorProgram(ctx: DrawContext) {\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 = ShaderHelper.farthestClipZ(this, 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 this._skyMotionVectorProgram.name = '@TAA_SkyMotionVector';\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) {\r\n const program = 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, DEPTH_FARTHEST, 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 program.name = '@TAA_Resolve';\r\n return program;\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","DEPTH_COMPARE_DEFAULT","setFramebuffer","draw","popDeviceStates","releaseFrameBuffer","apply","inputColorTexture","sceneDepthTexture","srgbOutput","historyManager","getHistoryResourceManager","prevColorTex","tryGetPrevious","RGHistoryResources","TAA_COLOR","prevMotionVectorTex","TAA_MOTION_VECTOR","width","height","passThrough","_resolve","TAADebug","_getResolveProgram","setTexture","fetchSampler","needFlip","setXY","drawFullscreenQuad","setup","s","graph","history","blackboard","motionVectorHandle","get","FrameResources","MotionVector","linearDepthHandle","LinearDepth","_setupFromApply","historySize","colorDesc","format","colorFormat","sizeMode","motionVectorDesc","prevColorHandle","importPreviousIfCompatible","prevMotionVectorHandle","addPass","builder","read","input","dep","dependencies","output","createOutput","needDepthAttachment","setExecute","rg","framebuffer","getFramebuffer","inputTexture","getTexture","outputTexture","color","queueRetainedCommit","requireLinearDepthTexture","_ctx","requireDepthAttachment","requireMotionVectorTexture","buildRenderProgram","vertex","pb","$inputs","pos","vec3","attrib","VPMatrix","mat4","uniform","cameraPos","prevCameraPos","main","$l","worldPos","add","prevWorldPos","clipPos","mul","vec4","prevClipPos","z","ShaderHelper","farthestClipZ","w","$builtins","position","$outputs","currentPos","prevPos","fragment","motionVector","sub","div","xy","name","BoxShape","size","needNormal","needUV","debug","flip","int","vec2","uv","DEPTH_FARTHEST","$if","notEqual","y","neg","historyColorTex","tex2D","currentColorTex","currentDepthTex","prevMotionVector","texSize","srgbOut","outColor","screenUV","fragCoord","resolvedColor","temporalResolve","equal","$else","linearToGamma"],"mappings":"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"}
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 type { PostEffectSetupContext } from './posteffect';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { BoxShape } from '../shapes';\r\nimport { temporalResolve } from '../shaders/temporal';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { DEPTH_COMPARE_DEFAULT, DEPTH_FARTHEST, Vector2 } from '@zephyr3d/base';\r\nimport { RGHistoryResources } from '../render/rendergraph/history_resources';\r\nimport { FrameResources } from '../render/rendergraph/blackboard';\r\nimport type { RGHandle, RGTextureDesc } from '../render/rendergraph/types';\r\n\r\n/** @internal */\r\nexport class TAA extends AbstractPostEffect {\r\n private static _resolveProgram: GPUProgram[] = [];\r\n private static _skyMotionVectorProgram: Nullable<GPUProgram> = null;\r\n private static _box: Primitive;\r\n private static readonly _texSize = new Vector2();\r\n private _bindGroup: Nullable<BindGroup>;\r\n private _skyMotionVectorBindGroup: Nullable<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, DEPTH_COMPARE_DEFAULT));\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(ctx: DrawContext, inputColorTexture: Texture2D, sceneDepthTexture: Texture2D, srgbOutput: boolean) {\r\n const historyManager = ctx.camera.getHistoryResourceManager();\r\n const prevColorTex = historyManager!.tryGetPrevious(RGHistoryResources.TAA_COLOR);\r\n const prevMotionVectorTex = historyManager!.tryGetPrevious(RGHistoryResources.TAA_MOTION_VECTOR);\r\n if (\r\n !prevColorTex ||\r\n !prevMotionVectorTex ||\r\n prevColorTex.width !== inputColorTexture.width ||\r\n prevColorTex.height !== inputColorTexture.height\r\n ) {\r\n this.passThrough(ctx, inputColorTexture, srgbOutput);\r\n } else {\r\n this._resolve(\r\n ctx,\r\n inputColorTexture,\r\n sceneDepthTexture,\r\n ctx.motionVectorTexture!,\r\n prevColorTex,\r\n prevMotionVectorTex,\r\n srgbOutput\r\n );\r\n }\r\n }\r\n /** @internal */\r\n private _resolve(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n motionVectorTexture: Texture2D,\r\n prevColorTex: Texture2D,\r\n prevMotionVectorTex: Texture2D,\r\n srgbOutput: boolean\r\n ) {\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', 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('motionVector', motionVectorTexture, fetchSampler('clamp_nearest_nomip'));\r\n this._bindGroup.setTexture('prevMotionVector', prevMotionVectorTex, fetchSampler('clamp_nearest_nomip'));\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 ctx.device.setProgram(program);\r\n ctx.device.setBindGroup(0, this._bindGroup);\r\n this.drawFullscreenQuad();\r\n }\r\n /** {@inheritDoc AbstractPostEffect.setup}\r\n *\r\n * Native implementation: previous-frame color/motion-vector textures are\r\n * imported as graph resources at build time and this frame's resolve output\r\n * and motion vectors are queued as retained history commits, making TAA\r\n * fully self-describing (no builder-side history plumbing).\r\n */\r\n setup(s: PostEffectSetupContext): RGHandle {\r\n const { graph, ctx, history, blackboard } = s;\r\n const motionVectorHandle = blackboard.get(FrameResources.MotionVector);\r\n const linearDepthHandle = blackboard.get(FrameResources.LinearDepth);\r\n if (!history || !motionVectorHandle || !linearDepthHandle) {\r\n // No temporal inputs available this frame — the legacy path degrades to\r\n // a pass-through.\r\n return this._setupFromApply(s);\r\n }\r\n const historySize = { width: s.width, height: s.height };\r\n const colorDesc: RGTextureDesc = {\r\n format: s.colorFormat,\r\n sizeMode: 'absolute',\r\n width: s.width,\r\n height: s.height\r\n };\r\n const motionVectorDesc: RGTextureDesc = {\r\n format: 'rgba16f',\r\n sizeMode: 'absolute',\r\n width: s.width,\r\n height: s.height\r\n };\r\n const prevColorHandle = history.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.TAA_COLOR,\r\n colorDesc,\r\n historySize\r\n );\r\n const prevMotionVectorHandle = history.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.TAA_MOTION_VECTOR,\r\n motionVectorDesc,\r\n historySize\r\n );\r\n\r\n return graph.addPass('PostEffect:TAA', (builder) => {\r\n builder.read(s.input);\r\n builder.read(linearDepthHandle);\r\n builder.read(motionVectorHandle);\r\n if (prevColorHandle) {\r\n builder.read(prevColorHandle);\r\n }\r\n if (prevMotionVectorHandle) {\r\n builder.read(prevMotionVectorHandle);\r\n }\r\n for (const dep of s.dependencies) {\r\n builder.read(dep);\r\n }\r\n // requireDepthAttachment is true, so this always resolves to an\r\n // intermediate texture — required anyway for the history commit below.\r\n const output = s.createOutput(builder, { needDepthAttachment: true });\r\n builder.setExecute((rg) => {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n try {\r\n device.setFramebuffer(output.framebuffer ? rg.getFramebuffer(output.framebuffer) : null);\r\n const inputTexture = rg.getTexture<Texture2D>(s.input);\r\n const depthTexture = rg.getTexture<Texture2D>(linearDepthHandle);\r\n const motionVectorTexture = rg.getTexture<Texture2D>(motionVectorHandle);\r\n const prevColorTex = prevColorHandle ? rg.getTexture<Texture2D>(prevColorHandle) : null;\r\n const prevMotionVectorTex = prevMotionVectorHandle\r\n ? rg.getTexture<Texture2D>(prevMotionVectorHandle)\r\n : null;\r\n if (\r\n !prevColorTex ||\r\n !prevMotionVectorTex ||\r\n prevColorTex.width !== inputTexture.width ||\r\n prevColorTex.height !== inputTexture.height\r\n ) {\r\n this.passThrough(ctx, inputTexture, output.srgbOutput);\r\n } else {\r\n this._resolve(\r\n ctx,\r\n inputTexture,\r\n depthTexture,\r\n motionVectorTexture,\r\n prevColorTex,\r\n prevMotionVectorTex,\r\n output.srgbOutput\r\n );\r\n }\r\n // Queue this frame's history: the TAA resolve output and the frame's\r\n // motion vectors. Commits are applied only after the graph executes\r\n // successfully (HistoryResourceManager.commitFrame).\r\n const outputTexture = rg.getTexture<Texture2D>(output.color);\r\n history.queueRetainedCommit(\r\n RGHistoryResources.TAA_COLOR,\r\n {\r\n format: outputTexture.format,\r\n sizeMode: 'absolute',\r\n width: outputTexture.width,\r\n height: outputTexture.height\r\n },\r\n { width: outputTexture.width, height: outputTexture.height },\r\n outputTexture\r\n );\r\n history.queueRetainedCommit(\r\n RGHistoryResources.TAA_MOTION_VECTOR,\r\n {\r\n format: motionVectorTexture.format,\r\n sizeMode: 'absolute',\r\n width: motionVectorTexture.width,\r\n height: motionVectorTexture.height\r\n },\r\n { width: motionVectorTexture.width, height: motionVectorTexture.height },\r\n motionVectorTexture\r\n );\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n });\r\n return output.color;\r\n });\r\n }\r\n requireLinearDepthTexture(_ctx: DrawContext) {\r\n return true;\r\n }\r\n requireDepthAttachment(_ctx: DrawContext) {\r\n return true;\r\n }\r\n requireMotionVectorTexture(_ctx: DrawContext) {\r\n return true;\r\n }\r\n private static _getSkyMotionVectorProgram(ctx: DrawContext) {\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 = ShaderHelper.farthestClipZ(this, 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 this._skyMotionVectorProgram.name = '@TAA_SkyMotionVector';\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) {\r\n const program = 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, DEPTH_FARTHEST, 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 program.name = '@TAA_Resolve';\r\n return program;\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","DEPTH_COMPARE_DEFAULT","setFramebuffer","draw","popDeviceStates","releaseFrameBuffer","apply","inputColorTexture","sceneDepthTexture","srgbOutput","historyManager","getHistoryResourceManager","prevColorTex","tryGetPrevious","RGHistoryResources","TAA_COLOR","prevMotionVectorTex","TAA_MOTION_VECTOR","width","height","passThrough","_resolve","TAADebug","_getResolveProgram","setTexture","fetchSampler","needFlip","setXY","drawFullscreenQuad","setup","s","graph","history","blackboard","motionVectorHandle","get","FrameResources","MotionVector","linearDepthHandle","LinearDepth","_setupFromApply","historySize","colorDesc","format","colorFormat","sizeMode","motionVectorDesc","prevColorHandle","importPreviousIfCompatible","prevMotionVectorHandle","addPass","builder","read","input","dep","dependencies","output","createOutput","needDepthAttachment","setExecute","rg","framebuffer","getFramebuffer","inputTexture","getTexture","outputTexture","color","queueRetainedCommit","requireLinearDepthTexture","_ctx","requireDepthAttachment","requireMotionVectorTexture","buildRenderProgram","vertex","pb","$inputs","pos","vec3","attrib","VPMatrix","mat4","uniform","cameraPos","prevCameraPos","main","$l","worldPos","add","prevWorldPos","clipPos","mul","vec4","prevClipPos","z","ShaderHelper","farthestClipZ","w","$builtins","position","$outputs","currentPos","prevPos","fragment","motionVector","sub","div","xy","name","BoxShape","size","needNormal","needUV","debug","flip","int","vec2","uv","DEPTH_FARTHEST","$if","notEqual","y","neg","historyColorTex","tex2D","currentColorTex","currentDepthTex","prevMotionVector","texSize","srgbOut","outColor","screenUV","fragCoord","resolvedColor","temporalResolve","equal","$else","linearToGamma"],"mappings":";;;;;;;;;;;;;;;;;;AAeA,iBACO,MAAMA,GAAYC,SAAAA,kBAAAA,CAAAA;IACvB,OAAeC,eAAAA,GAAgC,EAAE;AACjD,IAAA,OAAeC,0BAAgD,IAAK;AACpE,IAAA,OAAeC,IAAgB;IAC/B,OAAwBC,QAAAA,GAAW,IAAIC,OAAU,EAAA;IACzCC,UAAgC;IAChCC,yBAA+C;IACvD,WAAc,EAAA;QACZ,KAAK,EAAA;QACL,IAAI,CAACD,UAAU,GAAG,IAAA;AAClB,QAAA,IAAI,CAACE,MAAM,GAAGC,eAAAA,CAAgBC,GAAG;QACjC,IAAI,CAACH,yBAAyB,GAAG,IAAA;AACnC;AACAI,IAAAA,sBAAAA,CAAuBC,GAAgB,EAAE;AACvC,QAAA,MAAMC,EAAKD,GAAAA,GAAAA,CAAIE,MAAM,CAACC,IAAI,CAACC,wBAAwB,CACjD,KAAA,EACA,GACA,CACAJ,EAAAA,GAAAA,CAAIK,mBAAmB,EACvBL,IAAIM,YAAY,CAAA;QAElB,MAAMC,OAAAA,GAAUpB,GAAIqB,CAAAA,0BAA0B,CAACR,GAAAA,CAAAA;AAC/C,QAAA,IAAI,CAAC,IAAI,CAACL,yBAAyB,EAAE;YACnC,IAAI,CAACA,yBAAyB,GAAGK,GAAIE,CAAAA,MAAM,CAACO,eAAe,CAACF,OAAAA,CAAQG,gBAAgB,CAAC,CAAE,CAAA,CAAA;AACzF;QACA,MAAMC,GAAAA,GAAMxB,GAAIyB,CAAAA,OAAO,CAACZ,GAAAA,CAAAA;QACxB,IAAI,CAACL,yBAAyB,CAACkB,QAAQ,CAAC,UAAYb,EAAAA,GAAAA,CAAIc,MAAM,CAACC,oBAAoB,CAAA;QACnF,IAAI,CAACpB,yBAAyB,CAACkB,QAAQ,CAAC,cAAgBb,EAAAA,GAAAA,CAAIc,MAAM,CAACE,YAAY,CAAA;QAC/E,IAAI,CAACrB,yBAAyB,CAACkB,QAAQ,CAAC,WAAab,EAAAA,GAAAA,CAAIc,MAAM,CAACG,gBAAgB,EAAA,CAAA;QAChF,IAAI,CAACtB,yBAAyB,CAACkB,QAAQ,CAAC,eAAiBb,EAAAA,GAAAA,CAAIc,MAAM,CAACI,YAAY,CAAA;QAChFlB,GAAIE,CAAAA,MAAM,CAACiB,gBAAgB,EAAA;QAC3BnB,GAAIE,CAAAA,MAAM,CAACkB,UAAU,CAACb,OAAAA,CAAAA;AACtBP,QAAAA,GAAAA,CAAIE,MAAM,CAACmB,YAAY,CAAC,CAAG,EAAA,IAAI,CAAC1B,yBAAyB,CAAA;AACzDK,QAAAA,GAAAA,CAAIE,MAAM,CAACoB,eAAe,CAAClC,kBAAmBmC,CAAAA,qBAAqB,CAACvB,GAAKwB,EAAAA,qBAAAA,CAAAA,CAAAA;QACzExB,GAAIE,CAAAA,MAAM,CAACuB,cAAc,CAACxB,EAAAA,CAAAA;AAC1BU,QAAAA,GAAAA,CAAIe,IAAI,EAAA;QACR1B,GAAIE,CAAAA,MAAM,CAACyB,eAAe,EAAA;AAC1B3B,QAAAA,GAAAA,CAAIE,MAAM,CAACC,IAAI,CAACyB,kBAAkB,CAAC3B,EAAAA,CAAAA;AACrC;AACA4B,IAAAA,KAAAA,CAAM7B,GAAgB,EAAE8B,iBAA4B,EAAEC,iBAA4B,EAAEC,UAAmB,EAAE;AACvG,QAAA,MAAMC,cAAiBjC,GAAAA,GAAAA,CAAIc,MAAM,CAACoB,yBAAyB,EAAA;AAC3D,QAAA,MAAMC,YAAeF,GAAAA,cAAAA,CAAgBG,cAAc,CAACC,mBAAmBC,SAAS,CAAA;AAChF,QAAA,MAAMC,mBAAsBN,GAAAA,cAAAA,CAAgBG,cAAc,CAACC,mBAAmBG,iBAAiB,CAAA;AAC/F,QAAA,IACE,CAACL,YAAAA,IACD,CAACI,mBAAAA,IACDJ,aAAaM,KAAK,KAAKX,iBAAkBW,CAAAA,KAAK,IAC9CN,YAAaO,CAAAA,MAAM,KAAKZ,iBAAAA,CAAkBY,MAAM,EAChD;AACA,YAAA,IAAI,CAACC,WAAW,CAAC3C,GAAAA,EAAK8B,iBAAmBE,EAAAA,UAAAA,CAAAA;SACpC,MAAA;YACL,IAAI,CAACY,QAAQ,CACX5C,GACA8B,EAAAA,iBAAAA,EACAC,mBACA/B,GAAIK,CAAAA,mBAAmB,EACvB8B,YAAAA,EACAI,mBACAP,EAAAA,UAAAA,CAAAA;AAEJ;AACF;AACA,qBACA,QAAQY,CACN5C,GAAgB,EAChB8B,iBAA4B,EAC5BC,iBAA4B,EAC5B1B,mBAA8B,EAC9B8B,YAAuB,EACvBI,mBAA8B,EAC9BP,UAAmB,EACnB;QACA,IAAIzB,OAAAA,GAAUpB,IAAIE,eAAe,CAACW,IAAIc,MAAM,CAAC+B,QAAQ,CAAC;AACtD,QAAA,IAAI,CAACtC,OAAS,EAAA;AACZA,YAAAA,OAAAA,GAAUpB,IAAI2D,kBAAkB,CAAC9C,KAAKA,GAAIc,CAAAA,MAAM,CAAC+B,QAAQ,CAAA;AACzD1D,YAAAA,GAAAA,CAAIE,eAAe,CAACW,GAAAA,CAAIc,MAAM,CAAC+B,QAAQ,CAAC,GAAGtC,OAAAA;AAC7C;AACA,QAAA,IAAI,CAAC,IAAI,CAACb,UAAU,EAAE;YACpB,IAAI,CAACA,UAAU,GAAGM,GAAIE,CAAAA,MAAM,CAACO,eAAe,CAACF,OAAAA,CAAQG,gBAAgB,CAAC,CAAE,CAAA,CAAA;AAC1E;AACA,QAAA,IAAI,CAAChB,UAAU,CAACqD,UAAU,CAAC,iBAAA,EAAmBZ,cAAca,YAAa,CAAA,oBAAA,CAAA,CAAA;AACzE,QAAA,IAAI,CAACtD,UAAU,CAACqD,UAAU,CAAC,iBAAA,EAAmBjB,mBAAmBkB,YAAa,CAAA,qBAAA,CAAA,CAAA;AAC9E,QAAA,IAAI,CAACtD,UAAU,CAACqD,UAAU,CAAC,iBAAA,EAAmBhB,mBAAmBiB,YAAa,CAAA,qBAAA,CAAA,CAAA;AAC9E,QAAA,IAAI,CAACtD,UAAU,CAACqD,UAAU,CAAC,cAAA,EAAgB1C,qBAAqB2C,YAAa,CAAA,qBAAA,CAAA,CAAA;AAC7E,QAAA,IAAI,CAACtD,UAAU,CAACqD,UAAU,CAAC,kBAAA,EAAoBR,qBAAqBS,YAAa,CAAA,qBAAA,CAAA,CAAA;AACjF,QAAA,IAAI,CAACtD,UAAU,CAACmB,QAAQ,CAAC,MAAA,EAAQ,IAAI,CAACoC,QAAQ,CAACjD,GAAIE,CAAAA,MAAM,IAAI,CAAI,GAAA,CAAA,CAAA;AACjE,QAAA,IAAI,CAACR,UAAU,CAACmB,QAAQ,CAAC,SAAA,EAAWmB,aAAa,CAAI,GAAA,CAAA,CAAA;QACrD7C,GAAIK,CAAAA,QAAQ,CAAC0D,KAAK,CAACnB,kBAAkBU,KAAK,EAAEV,kBAAkBW,MAAM,CAAA;AACpE,QAAA,IAAI,CAAChD,UAAU,CAACmB,QAAQ,CAAC,SAAA,EAAW1B,IAAIK,QAAQ,CAAA;QAChDQ,GAAIE,CAAAA,MAAM,CAACkB,UAAU,CAACb,OAAAA,CAAAA;AACtBP,QAAAA,GAAAA,CAAIE,MAAM,CAACmB,YAAY,CAAC,CAAG,EAAA,IAAI,CAAC3B,UAAU,CAAA;AAC1C,QAAA,IAAI,CAACyD,kBAAkB,EAAA;AACzB;AACA;;;;;;MAOAC,KAAAA,CAAMC,CAAyB,EAAY;QACzC,MAAM,EAAEC,KAAK,EAAEtD,GAAG,EAAEuD,OAAO,EAAEC,UAAU,EAAE,GAAGH,CAAAA;AAC5C,QAAA,MAAMI,kBAAqBD,GAAAA,UAAAA,CAAWE,GAAG,CAACC,eAAeC,YAAY,CAAA;AACrE,QAAA,MAAMC,iBAAoBL,GAAAA,UAAAA,CAAWE,GAAG,CAACC,eAAeG,WAAW,CAAA;AACnE,QAAA,IAAI,CAACP,OAAAA,IAAW,CAACE,kBAAAA,IAAsB,CAACI,iBAAmB,EAAA;;;YAGzD,OAAO,IAAI,CAACE,eAAe,CAACV,CAAAA,CAAAA;AAC9B;AACA,QAAA,MAAMW,WAAc,GAAA;AAAEvB,YAAAA,KAAAA,EAAOY,EAAEZ,KAAK;AAAEC,YAAAA,MAAAA,EAAQW,EAAEX;AAAO,SAAA;AACvD,QAAA,MAAMuB,SAA2B,GAAA;AAC/BC,YAAAA,MAAAA,EAAQb,EAAEc,WAAW;YACrBC,QAAU,EAAA,UAAA;AACV3B,YAAAA,KAAAA,EAAOY,EAAEZ,KAAK;AACdC,YAAAA,MAAAA,EAAQW,EAAEX;AACZ,SAAA;AACA,QAAA,MAAM2B,gBAAkC,GAAA;YACtCH,MAAQ,EAAA,SAAA;YACRE,QAAU,EAAA,UAAA;AACV3B,YAAAA,KAAAA,EAAOY,EAAEZ,KAAK;AACdC,YAAAA,MAAAA,EAAQW,EAAEX;AACZ,SAAA;QACA,MAAM4B,eAAAA,GAAkBf,QAAQgB,0BAA0B,CACxDjB,OACAjB,kBAAmBC,CAAAA,SAAS,EAC5B2B,SACAD,EAAAA,WAAAA,CAAAA;QAEF,MAAMQ,sBAAAA,GAAyBjB,QAAQgB,0BAA0B,CAC/DjB,OACAjB,kBAAmBG,CAAAA,iBAAiB,EACpC6B,gBACAL,EAAAA,WAAAA,CAAAA;AAGF,QAAA,OAAOV,KAAMmB,CAAAA,OAAO,CAAC,gBAAA,EAAkB,CAACC,OAAAA,GAAAA;YACtCA,OAAQC,CAAAA,IAAI,CAACtB,CAAAA,CAAEuB,KAAK,CAAA;AACpBF,YAAAA,OAAAA,CAAQC,IAAI,CAACd,iBAAAA,CAAAA;AACba,YAAAA,OAAAA,CAAQC,IAAI,CAAClB,kBAAAA,CAAAA;AACb,YAAA,IAAIa,eAAiB,EAAA;AACnBI,gBAAAA,OAAAA,CAAQC,IAAI,CAACL,eAAAA,CAAAA;AACf;AACA,YAAA,IAAIE,sBAAwB,EAAA;AAC1BE,gBAAAA,OAAAA,CAAQC,IAAI,CAACH,sBAAAA,CAAAA;AACf;AACA,YAAA,KAAK,MAAMK,GAAAA,IAAOxB,CAAEyB,CAAAA,YAAY,CAAE;AAChCJ,gBAAAA,OAAAA,CAAQC,IAAI,CAACE,GAAAA,CAAAA;AACf;;;AAGA,YAAA,MAAME,MAAS1B,GAAAA,CAAAA,CAAE2B,YAAY,CAACN,OAAS,EAAA;gBAAEO,mBAAqB,EAAA;AAAK,aAAA,CAAA;YACnEP,OAAQQ,CAAAA,UAAU,CAAC,CAACC,EAAAA,GAAAA;gBAClB,MAAMjF,MAAAA,GAASF,IAAIE,MAAM;AACzBA,gBAAAA,MAAAA,CAAOiB,gBAAgB,EAAA;gBACvB,IAAI;oBACFjB,MAAOuB,CAAAA,cAAc,CAACsD,MAAAA,CAAOK,WAAW,GAAGD,GAAGE,cAAc,CAACN,MAAOK,CAAAA,WAAW,CAAI,GAAA,IAAA,CAAA;AACnF,oBAAA,MAAME,YAAeH,GAAAA,EAAAA,CAAGI,UAAU,CAAYlC,EAAEuB,KAAK,CAAA;oBACrD,MAAMtE,YAAAA,GAAe6E,EAAGI,CAAAA,UAAU,CAAY1B,iBAAAA,CAAAA;oBAC9C,MAAMxD,mBAAAA,GAAsB8E,EAAGI,CAAAA,UAAU,CAAY9B,kBAAAA,CAAAA;AACrD,oBAAA,MAAMtB,YAAemC,GAAAA,eAAAA,GAAkBa,EAAGI,CAAAA,UAAU,CAAYjB,eAAmB,CAAA,GAAA,IAAA;AACnF,oBAAA,MAAM/B,mBAAsBiC,GAAAA,sBAAAA,GACxBW,EAAGI,CAAAA,UAAU,CAAYf,sBACzB,CAAA,GAAA,IAAA;AACJ,oBAAA,IACE,CAACrC,YAAAA,IACD,CAACI,mBAAAA,IACDJ,aAAaM,KAAK,KAAK6C,YAAa7C,CAAAA,KAAK,IACzCN,YAAaO,CAAAA,MAAM,KAAK4C,YAAAA,CAAa5C,MAAM,EAC3C;AACA,wBAAA,IAAI,CAACC,WAAW,CAAC3C,GAAKsF,EAAAA,YAAAA,EAAcP,OAAO/C,UAAU,CAAA;qBAChD,MAAA;wBACL,IAAI,CAACY,QAAQ,CACX5C,GACAsF,EAAAA,YAAAA,EACAhF,cACAD,mBACA8B,EAAAA,YAAAA,EACAI,mBACAwC,EAAAA,MAAAA,CAAO/C,UAAU,CAAA;AAErB;;;;AAIA,oBAAA,MAAMwD,aAAgBL,GAAAA,EAAAA,CAAGI,UAAU,CAAYR,OAAOU,KAAK,CAAA;AAC3DlC,oBAAAA,OAAAA,CAAQmC,mBAAmB,CACzBrD,kBAAmBC,CAAAA,SAAS,EAC5B;AACE4B,wBAAAA,MAAAA,EAAQsB,cAActB,MAAM;wBAC5BE,QAAU,EAAA,UAAA;AACV3B,wBAAAA,KAAAA,EAAO+C,cAAc/C,KAAK;AAC1BC,wBAAAA,MAAAA,EAAQ8C,cAAc9C;qBAExB,EAAA;AAAED,wBAAAA,KAAAA,EAAO+C,cAAc/C,KAAK;AAAEC,wBAAAA,MAAAA,EAAQ8C,cAAc9C;qBACpD8C,EAAAA,aAAAA,CAAAA;AAEFjC,oBAAAA,OAAAA,CAAQmC,mBAAmB,CACzBrD,kBAAmBG,CAAAA,iBAAiB,EACpC;AACE0B,wBAAAA,MAAAA,EAAQ7D,oBAAoB6D,MAAM;wBAClCE,QAAU,EAAA,UAAA;AACV3B,wBAAAA,KAAAA,EAAOpC,oBAAoBoC,KAAK;AAChCC,wBAAAA,MAAAA,EAAQrC,oBAAoBqC;qBAE9B,EAAA;AAAED,wBAAAA,KAAAA,EAAOpC,oBAAoBoC,KAAK;AAAEC,wBAAAA,MAAAA,EAAQrC,oBAAoBqC;qBAChErC,EAAAA,mBAAAA,CAAAA;iBAEM,QAAA;AACRH,oBAAAA,MAAAA,CAAOyB,eAAe,EAAA;AACxB;AACF,aAAA,CAAA;AACA,YAAA,OAAOoD,OAAOU,KAAK;AACrB,SAAA,CAAA;AACF;AACAE,IAAAA,yBAAAA,CAA0BC,IAAiB,EAAE;QAC3C,OAAO,IAAA;AACT;AACAC,IAAAA,sBAAAA,CAAuBD,IAAiB,EAAE;QACxC,OAAO,IAAA;AACT;AACAE,IAAAA,0BAAAA,CAA2BF,IAAiB,EAAE;QAC5C,OAAO,IAAA;AACT;IACA,OAAepF,0BAAAA,CAA2BR,GAAgB,EAAE;AAC1D,QAAA,IAAI,CAAC,IAAI,CAACV,uBAAuB,EAAE;AACjC,YAAA,IAAI,CAACA,uBAAuB,GAAGU,IAAIE,MAAM,CAAC6F,kBAAkB,CAAC;AAC3DC,gBAAAA,MAAAA,CAAAA,CAAOC,EAAE,EAAA;oBACP,IAAI,CAACC,OAAO,CAACC,GAAG,GAAGF,EAAGG,CAAAA,IAAI,EAAGC,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpC,oBAAA,IAAI,CAACC,QAAQ,GAAGL,GAAGM,IAAI,EAAA,CAAGC,OAAO,CAAC,CAAA,CAAA;AAClC,oBAAA,IAAI,CAACxF,YAAY,GAAGiF,GAAGM,IAAI,EAAA,CAAGC,OAAO,CAAC,CAAA,CAAA;AACtC,oBAAA,IAAI,CAACC,SAAS,GAAGR,GAAGG,IAAI,EAAA,CAAGI,OAAO,CAAC,CAAA,CAAA;AACnC,oBAAA,IAAI,CAACE,aAAa,GAAGT,GAAGG,IAAI,EAAA,CAAGI,OAAO,CAAC,CAAA,CAAA;AACvCP,oBAAAA,EAAAA,CAAGU,IAAI,CAAC,WAAA;AACN,wBAAA,IAAI,CAACC,EAAE,CAACC,QAAQ,GAAGZ,GAAGa,GAAG,CAAC,IAAI,CAACZ,OAAO,CAACC,GAAG,EAAE,IAAI,CAACM,SAAS,CAAA;AAC1D,wBAAA,IAAI,CAACG,EAAE,CAACG,YAAY,GAAGd,GAAGa,GAAG,CAAC,IAAI,CAACZ,OAAO,CAACC,GAAG,EAAE,IAAI,CAACO,aAAa,CAAA;AAClE,wBAAA,IAAI,CAACE,EAAE,CAACI,OAAO,GAAGf,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACX,QAAQ,EAAEL,EAAGiB,CAAAA,IAAI,CAAC,IAAI,CAACL,QAAQ,EAAE,CAAA,CAAA,CAAA;AAC/D,wBAAA,IAAI,CAACD,EAAE,CAACO,WAAW,GAAGlB,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACjG,YAAY,EAAEiF,EAAGiB,CAAAA,IAAI,CAAC,IAAI,CAACH,YAAY,EAAE,CAAA,CAAA,CAAA;AAC3E,wBAAA,IAAI,CAACC,OAAO,CAACI,CAAC,GAAGC,YAAaC,CAAAA,aAAa,CAAC,IAAI,EAAE,IAAI,CAACN,OAAO,CAACO,CAAC,CAAA;AAChE,wBAAA,IAAI,CAACC,SAAS,CAACC,QAAQ,GAAG,IAAI,CAACT,OAAO;AACtC,wBAAA,IAAI,CAACU,QAAQ,CAACC,UAAU,GAAG,IAAI,CAACX,OAAO;AACvC,wBAAA,IAAI,CAACU,QAAQ,CAACE,OAAO,GAAG,IAAI,CAACT,WAAW;AAC1C,qBAAA,CAAA;AACF,iBAAA;AACAU,gBAAAA,QAAAA,CAAAA,CAAS5B,EAAE,EAAA;AACT,oBAAA,IAAI,CAACyB,QAAQ,CAACjC,KAAK,GAAGQ,GAAGiB,IAAI,EAAA;AAC7BjB,oBAAAA,EAAAA,CAAGU,IAAI,CAAC,WAAA;wBACN,IAAI,CAACC,EAAE,CAACkB,YAAY,GAAG7B,EAAGgB,CAAAA,GAAG,CAC3BhB,EAAAA,CAAG8B,GAAG,CACJ9B,GAAG+B,GAAG,CAAC,IAAI,CAAC9B,OAAO,CAACyB,UAAU,CAACM,EAAE,EAAE,IAAI,CAAC/B,OAAO,CAACyB,UAAU,CAACJ,CAAC,CAAA,EAC5DtB,GAAG+B,GAAG,CAAC,IAAI,CAAC9B,OAAO,CAAC0B,OAAO,CAACK,EAAE,EAAE,IAAI,CAAC/B,OAAO,CAAC0B,OAAO,CAACL,CAAC,CAExD,CAAA,EAAA,GAAA,CAAA;AAEF,wBAAA,IAAI,CAACG,QAAQ,CAACjC,KAAK,GAAGQ,EAAAA,CAAGiB,IAAI,CAAC,IAAI,CAACY,YAAY,EAAE,CAAG,EAAA,CAAA,CAAA;AACtD,qBAAA,CAAA;AACF;AACF,aAAA,CAAA;AACA,YAAA,IAAI,CAACxI,uBAAuB,CAAC4I,IAAI,GAAG,sBAAA;AACtC;QACA,OAAO,IAAI,CAAC5I,uBAAuB;AACrC;IACA,OAAesB,OAAAA,CAAQgF,IAAiB,EAAE;AACxC,QAAA,IAAI,CAAC,IAAI,CAACrG,IAAI,EAAE;AACd,YAAA,IAAI,CAACA,IAAI,GAAG,IAAI4I,QAAS,CAAA;gBACvBC,IAAM,EAAA,CAAA;gBACNC,UAAY,EAAA,KAAA;gBACZC,MAAQ,EAAA;AACV,aAAA,CAAA;AACF;QACA,OAAO,IAAI,CAAC/I,IAAI;AAClB;AACA,IAAA,OAAeuD,kBAAmB9C,CAAAA,GAAgB,EAAEuI,KAAa,EAAE;AACjE,QAAA,MAAMhI,OAAUP,GAAAA,GAAAA,CAAIE,MAAM,CAAC6F,kBAAkB,CAAC;AAC5CC,YAAAA,MAAAA,CAAAA,CAAOC,EAAE,EAAA;AACP,gBAAA,IAAI,CAACuC,IAAI,GAAGvC,GAAGwC,GAAG,EAAA,CAAGjC,OAAO,CAAC,CAAA,CAAA;gBAC7B,IAAI,CAACN,OAAO,CAACC,GAAG,GAAGF,EAAGyC,CAAAA,IAAI,EAAGrC,CAAAA,MAAM,CAAC,UAAA,CAAA;AACpC,gBAAA,IAAI,CAACqB,QAAQ,CAACiB,EAAE,GAAG1C,GAAGyC,IAAI,EAAA;AAC1BzC,gBAAAA,EAAAA,CAAGU,IAAI,CAAC,WAAA;AACN,oBAAA,IAAI,CAACa,SAAS,CAACC,QAAQ,GAAGxB,EAAGiB,CAAAA,IAAI,CAAC,IAAI,CAAChB,OAAO,CAACC,GAAG,EAAEyC,cAAgB,EAAA,CAAA,CAAA;oBACpE,IAAI,CAAClB,QAAQ,CAACiB,EAAE,GAAG1C,EAAGa,CAAAA,GAAG,CAACb,EAAAA,CAAGgB,GAAG,CAAC,IAAI,CAACf,OAAO,CAACC,GAAG,CAAC8B,EAAE,EAAE,GAAA,CAAA,EAAMhC,EAAGyC,CAAAA,IAAI,CAAC,GAAA,CAAA,CAAA;oBACpE,IAAI,CAACG,GAAG,CAAC5C,EAAG6C,CAAAA,QAAQ,CAAC,IAAI,CAACN,IAAI,EAAE,CAAI,CAAA,EAAA,WAAA;AAClC,wBAAA,IAAI,CAAChB,SAAS,CAACC,QAAQ,CAACsB,CAAC,GAAG9C,EAAAA,CAAG+C,GAAG,CAAC,IAAI,CAACxB,SAAS,CAACC,QAAQ,CAACsB,CAAC,CAAA;AAC9D,qBAAA,CAAA;AACF,iBAAA,CAAA;AACF,aAAA;AACAlB,YAAAA,QAAAA,CAAAA,CAAS5B,EAAE,EAAA;AACT,gBAAA,IAAI,CAACgD,eAAe,GAAGhD,GAAGiD,KAAK,EAAA,CAAG1C,OAAO,CAAC,CAAA,CAAA;AAC1C,gBAAA,IAAI,CAAC2C,eAAe,GAAGlD,GAAGiD,KAAK,EAAA,CAAG1C,OAAO,CAAC,CAAA,CAAA;AAC1C,gBAAA,IAAI,CAAC4C,eAAe,GAAGnD,GAAGiD,KAAK,EAAA,CAAG1C,OAAO,CAAC,CAAA,CAAA;AAC1C,gBAAA,IAAI,CAACsB,YAAY,GAAG7B,GAAGiD,KAAK,EAAA,CAAG1C,OAAO,CAAC,CAAA,CAAA;AACvC,gBAAA,IAAI,CAAC6C,gBAAgB,GAAGpD,GAAGiD,KAAK,EAAA,CAAG1C,OAAO,CAAC,CAAA,CAAA;AAC3C,gBAAA,IAAI,CAAC8C,OAAO,GAAGrD,GAAGyC,IAAI,EAAA,CAAGlC,OAAO,CAAC,CAAA,CAAA;AACjC,gBAAA,IAAI,CAAC+C,OAAO,GAAGtD,GAAGwC,GAAG,EAAA,CAAGjC,OAAO,CAAC,CAAA,CAAA;AAChC,gBAAA,IAAI,CAACkB,QAAQ,CAAC8B,QAAQ,GAAGvD,GAAGiB,IAAI,EAAA;AAChCjB,gBAAAA,EAAAA,CAAGU,IAAI,CAAC,WAAA;oBACN,IAAI,CAACC,EAAE,CAAC6C,QAAQ,GAAGxD,EAAG+B,CAAAA,GAAG,CAAC/B,EAAGyC,CAAAA,IAAI,CAAC,IAAI,CAAClB,SAAS,CAACkC,SAAS,CAACzB,EAAE,CAAA,EAAG,IAAI,CAACqB,OAAO,CAAA;AAC5E,oBAAA,IAAI,CAAC1C,EAAE,CAAC+C,aAAa,GAAGC,eACtB,CAAA,IAAI,EACJ,IAAI,CAACT,eAAe,EACpB,IAAI,CAACF,eAAe,EACpB,IAAI,CAACG,eAAe,EACpB,IAAI,CAACtB,YAAY,EACjB,IAAI,CAACuB,gBAAgB,EACrB,IAAI,CAACI,QAAQ,EACb,IAAI,CAACH,OAAO,EACZf,KAAAA,CAAAA;oBAEF,IAAI,CAACM,GAAG,CAAC5C,EAAG4D,CAAAA,KAAK,CAAC,IAAI,CAACN,OAAO,EAAE,CAAI,CAAA,EAAA,WAAA;wBAClC,IAAI,CAAC7B,QAAQ,CAAC8B,QAAQ,GAAGvD,EAAGiB,CAAAA,IAAI,CAAC,IAAI,CAACyC,aAAa,EAAE,CAAA,CAAA;AACvD,qBAAA,CAAA,CAAGG,KAAK,CAAC,WAAA;AACP,wBAAA,IAAI,CAACpC,QAAQ,CAAC8B,QAAQ,GAAGvD,EAAGiB,CAAAA,IAAI,CAAC6C,aAAAA,CAAc,IAAI,EAAE,IAAI,CAACJ,aAAa,CAAG,EAAA,CAAA,CAAA;AAC5E,qBAAA,CAAA;AACF,iBAAA,CAAA;AACF;AACF,SAAA,CAAA;AACApJ,QAAAA,OAAAA,CAAQ2H,IAAI,GAAG,cAAA;QACf,OAAO3H,OAAAA;AACT;AACF;;;;"}
@@ -4,14 +4,15 @@ import { ShaderHelper } from '../material/shader/helper.js';
4
4
  import '../material/lambert.js';
5
5
  import '../material/blinn.js';
6
6
  import '../material/unlit.js';
7
+ import '../material/meshmaterial.js';
7
8
  import '../material/particle.js';
8
9
  import '../material/subsurfaceprofile.js';
9
- import '../material/skin.js';
10
+ import '../material/sssprofile.js';
11
+ import '../material/sss.js';
10
12
  import '../material/eye.js';
11
13
  import '@zephyr3d/device';
12
14
  import '../values.js';
13
15
  import { DEPTH_FARTHEST } from '@zephyr3d/base';
14
- import '../material/meshmaterial.js';
15
16
  import '../material/hair.js';
16
17
  import '../material/hairstrand.js';
17
18
  import '../material/grassmaterial.js';
@@ -1 +1 @@
1
- {"version":3,"file":"abuffer_oit.js","sources":["../../src/render/abuffer_oit.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n DeviceViewport,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet\r\n} from '@zephyr3d/device';\r\nimport { OIT } from './oit';\r\nimport type { DrawContext } from './drawable';\r\nimport { drawFullscreenQuad } from './fullscreenquad';\r\nimport { ShaderHelper } from '../material';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { DEPTH_FARTHEST } from '@zephyr3d/base';\r\n\r\n/**\r\n * per-pixel linked list OIT renderer using ABuffer.\r\n *\r\n * @remarks\r\n * The ABuffer OIT renderer only supports WebGPU device.\r\n *\r\n * @public\r\n */\r\nexport class ABufferOIT extends OIT {\r\n /** Type name of ABufferOIT */\r\n public static readonly type = 'ab';\r\n public static readonly usePremultipliedAlpha = true;\r\n private static readonly MAX_FRAGMENT_LAYERS = 75;\r\n private static _compositeProgram: Nullable<GPUProgram> = null;\r\n private static _compositeBindGroup: Nullable<BindGroup> = null;\r\n private static _compositeRenderStates: Nullable<RenderStateSet> = null;\r\n private static _compositeAdditiveRenderStates: Nullable<RenderStateSet> = null;\r\n private static _ubAlignment = 0;\r\n private _nodeBuffer: Nullable<GPUDataBuffer>;\r\n private _headStagingBuffer: Nullable<GPUDataBuffer>;\r\n private _headBuffer: Nullable<GPUDataBuffer>;\r\n private _scissorOffsetBuffer: Nullable<GPUDataBuffer>;\r\n private readonly _numLayers: number;\r\n private _screenSize: Uint32Array<ArrayBuffer>;\r\n private _hash: Nullable<string>;\r\n private readonly _debug: boolean;\r\n private _scissorSlices: number;\r\n private _scissorHeight: number;\r\n private _currentPass: number;\r\n private _savedScissor: Nullable<DeviceViewport>;\r\n private _singleColorFramebuffer: Nullable<FrameBuffer>;\r\n /**\r\n * Creates an instance of ABufferOIT class\r\n *\r\n * @param numLayers - How many transparent layers, default is 16\r\n */\r\n constructor(numLayers = 16) {\r\n super();\r\n this._nodeBuffer = null;\r\n this._headStagingBuffer = null;\r\n this._headBuffer = null;\r\n this._scissorOffsetBuffer = null;\r\n this._numLayers = numLayers;\r\n this._screenSize = new Uint32Array([0xffffffff, 0xffffffff]);\r\n this._hash = null;\r\n this._debug = false;\r\n this._scissorSlices = 0;\r\n this._scissorHeight = 0;\r\n this._savedScissor = null;\r\n this._currentPass = 0;\r\n this._singleColorFramebuffer = null;\r\n }\r\n /**\r\n * {@inheritDoc OIT.getType}\r\n */\r\n getType() {\r\n return ABufferOIT.type;\r\n }\r\n /**\r\n * {@inheritDoc OIT.supportDevice}\r\n */\r\n supportDevice(deviceType: string) {\r\n return deviceType === 'webgpu';\r\n }\r\n /**\r\n * {@inheritDoc OIT.wantsPremultipliedAlpha}\r\n */\r\n wantsPremultipliedAlpha() {\r\n return ABufferOIT.usePremultipliedAlpha;\r\n }\r\n /**\r\n * {@inheritDoc OIT.wantsAdditiveLightPassAlpha}\r\n */\r\n wantsAdditiveLightPassAlpha() {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.begin}\r\n */\r\n begin(ctx: DrawContext) {\r\n const device = ctx.device;\r\n this._savedScissor = device.getScissor();\r\n const ubAlignment = (ABufferOIT._ubAlignment =\r\n device.getDeviceCaps().shaderCaps.uniformBufferOffsetAlignment);\r\n const viewport = device.getViewport();\r\n const screenWidth = device.screenXToDevice(viewport.width);\r\n const screenHeight = device.screenYToDevice(Math.max(viewport.height, 1));\r\n if (screenWidth !== this._screenSize[0] || screenHeight !== this._screenSize[1]) {\r\n // Mark uniform changed\r\n this.uniformChanged();\r\n // Resize buffers if viewport was changed\r\n this._screenSize[0] = screenWidth;\r\n this._screenSize[1] = screenHeight;\r\n // compute scissor slices\r\n const maxBufferSize = device.getDeviceCaps().shaderCaps.maxStorageBufferSize;\r\n const bytesPerLine = screenWidth * 4 * 4 * this._numLayers;\r\n this._scissorHeight = (maxBufferSize / bytesPerLine) >> 0;\r\n this._scissorSlices = Math.ceil(screenHeight / this._scissorHeight);\r\n const offsetBufferSize = ubAlignment * this._scissorSlices;\r\n const offsetBuffer = new Uint32Array(offsetBufferSize >> 2);\r\n for (let i = 0; i < this._scissorSlices; i++) {\r\n offsetBuffer[i * (ubAlignment >> 2)] = i * this._scissorHeight;\r\n }\r\n if (!this._scissorOffsetBuffer || this._scissorOffsetBuffer.byteLength < offsetBuffer.byteLength) {\r\n this._scissorOffsetBuffer?.dispose();\r\n this._scissorOffsetBuffer = device.createBuffer(offsetBuffer.byteLength, { usage: 'uniform' });\r\n }\r\n this._scissorOffsetBuffer.bufferSubData(0, offsetBuffer);\r\n // resize node buffer\r\n const size = screenWidth * this._scissorHeight * 4;\r\n const nodeBufferSize = size * 4 * this._numLayers;\r\n if (!this._nodeBuffer || nodeBufferSize > this._nodeBuffer.byteLength) {\r\n this._nodeBuffer?.dispose();\r\n this._nodeBuffer = device.createBuffer(nodeBufferSize, { storage: true, usage: 'uniform' });\r\n }\r\n // resize head buffer\r\n const headBufferSize = size + 4;\r\n if (!this._headBuffer || headBufferSize > this._headBuffer.byteLength) {\r\n this._headBuffer?.dispose();\r\n this._headBuffer = device.createBuffer(headBufferSize, { storage: true, usage: 'uniform' });\r\n this._headStagingBuffer?.dispose();\r\n this._headStagingBuffer = device.createBuffer(headBufferSize, { storage: true, usage: 'uniform' });\r\n const tmpArray = new Uint32Array(headBufferSize >> 2);\r\n tmpArray.fill(0xffffffff);\r\n this._headStagingBuffer.bufferSubData(0, tmpArray);\r\n }\r\n }\r\n return this._scissorSlices;\r\n }\r\n /**\r\n * {@inheritDoc OIT.end}\r\n */\r\n end(ctx: DrawContext) {\r\n // Restore scissor rect\r\n ctx.device.setScissor(this._savedScissor);\r\n }\r\n /**\r\n * {@inheritDoc OIT.setupFragmentOutput}\r\n */\r\n setupFragmentOutput(scope: PBGlobalScope) {\r\n const pb = scope.$builder;\r\n scope.Z_AB_scissorOffset = pb.uint().uniformBuffer(2);\r\n scope.Z_AB_nodeBuffer = pb.uvec4[0]().storageBuffer(2);\r\n scope.Z_AB_headImage = pb.atomic_uint[0]().storageBuffer(2);\r\n scope.Z_AB_screenSize = pb.uint().uniform(2);\r\n // Read with textureLoad only\r\n scope.Z_AB_depthTexture = pb.tex2D().uniform(2).noSampler();\r\n scope.$outputs.outColor = pb.vec4();\r\n }\r\n /**\r\n * {@inheritDoc OIT.beginPass}\r\n */\r\n beginPass(ctx: DrawContext, pass: number) {\r\n this._currentPass = pass;\r\n const device = ctx.device;\r\n const currentFramebuffer = device.getFramebuffer();\r\n const colorAttachment = currentFramebuffer?.getColorAttachments()[0] ?? null;\r\n this._singleColorFramebuffer =\r\n currentFramebuffer && currentFramebuffer.getColorAttachments().length > 1 && colorAttachment\r\n ? device.pool.fetchTemporalFramebuffer(\r\n false,\r\n 0,\r\n 0,\r\n colorAttachment,\r\n currentFramebuffer.getDepthAttachment(),\r\n false\r\n )\r\n : null;\r\n if (this._singleColorFramebuffer) {\r\n const viewport = device.getViewport();\r\n const scissor = device.getScissor();\r\n device.pushDeviceStates();\r\n device.setFramebuffer(this._singleColorFramebuffer);\r\n device.setViewport(viewport);\r\n device.setScissor(scissor);\r\n }\r\n const scissorY = pass * this._scissorHeight;\r\n const scissorH =\r\n Math.min((pass + 1) * this._scissorHeight, this._screenSize[1]) - pass * this._scissorHeight;\r\n device.setScissor([\r\n 0,\r\n device.deviceYToScreen(this._screenSize[1] - scissorY - scissorH),\r\n device.deviceXToScreen(this._screenSize[0]),\r\n device.deviceYToScreen(scissorH)\r\n ]);\r\n device.copyBuffer(this._headStagingBuffer!, this._headBuffer!, 0, 0, this._headStagingBuffer!.byteLength);\r\n // Update render hash\r\n this._hash = `${this.getType()}#${this._nodeBuffer!.uid}#${this._headBuffer!.uid}#${\r\n this._scissorOffsetBuffer!.uid\r\n }#${pass}`;\r\n if (this._debug) {\r\n const data = new Uint8Array(this._headBuffer!.byteLength);\r\n const readBuffer = device.createBuffer(this._headBuffer!.byteLength, { usage: 'read' });\r\n device.copyBuffer(this._headBuffer!, readBuffer, 0, 0, this._headBuffer!.byteLength);\r\n readBuffer.getBufferSubData(data).then(() => {\r\n const uint = new Uint32Array(data.buffer);\r\n for (let i = 0; i < uint.length; i++) {\r\n if (uint[i] !== 0xffffffff) {\r\n console.error('Clear head buffer failed');\r\n break;\r\n }\r\n }\r\n readBuffer.dispose();\r\n });\r\n }\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.endPass}\r\n */\r\n endPass(ctx: DrawContext, pass: number) {\r\n const device = ctx.device;\r\n ABufferOIT.getCompositeProgram(device);\r\n const lastBindGroup = device.getBindGroup(0);\r\n const currentFramebuffer = device.getFramebuffer();\r\n const colorAttachment = currentFramebuffer?.getColorAttachments()[0] ?? null;\r\n const singleColorFramebuffer =\r\n !this._singleColorFramebuffer &&\r\n currentFramebuffer &&\r\n currentFramebuffer.getColorAttachments().length > 1 &&\r\n colorAttachment\r\n ? device.pool.fetchTemporalFramebuffer(\r\n false,\r\n 0,\r\n 0,\r\n colorAttachment,\r\n currentFramebuffer.getDepthAttachment(),\r\n false\r\n )\r\n : null;\r\n if (singleColorFramebuffer) {\r\n const viewport = device.getViewport();\r\n const scissor = device.getScissor();\r\n device.pushDeviceStates();\r\n device.setFramebuffer(singleColorFramebuffer);\r\n device.setViewport(viewport);\r\n device.setScissor(scissor);\r\n }\r\n try {\r\n device.setProgram(ABufferOIT.getCompositeProgram(device));\r\n const bindGroup = ABufferOIT._compositeBindGroup!;\r\n bindGroup.setBuffer(\r\n 'scissorOffset',\r\n this._scissorOffsetBuffer!,\r\n 0,\r\n pass * ABufferOIT._ubAlignment,\r\n ABufferOIT._ubAlignment\r\n );\r\n bindGroup.setBuffer('headBuffer', this._headBuffer!);\r\n bindGroup.setBuffer('nodeBuffer', this._nodeBuffer!);\r\n bindGroup.setValue('screenWidth', this._screenSize[0]);\r\n bindGroup.setValue('additiveOnly', ctx.lightBlending ? 1 : 0);\r\n device.setBindGroup(0, bindGroup);\r\n drawFullscreenQuad(\r\n ctx.lightBlending ? ABufferOIT._compositeAdditiveRenderStates! : ABufferOIT._compositeRenderStates!\r\n );\r\n } finally {\r\n if (singleColorFramebuffer) {\r\n device.popDeviceStates();\r\n device.pool.releaseFrameBuffer(singleColorFramebuffer);\r\n } else if (this._singleColorFramebuffer) {\r\n device.popDeviceStates();\r\n device.pool.releaseFrameBuffer(this._singleColorFramebuffer);\r\n this._singleColorFramebuffer = null;\r\n } else {\r\n device.setBindGroup(0, lastBindGroup[0], lastBindGroup[1]);\r\n }\r\n }\r\n }\r\n /**\r\n * {@inheritDoc OIT.calculateHash}\r\n */\r\n calculateHash() {\r\n return this._hash!;\r\n }\r\n /**\r\n * {@inheritDoc OIT.applyUniforms}\r\n */\r\n applyUniforms(ctx: DrawContext, bindGroup: BindGroup) {\r\n bindGroup.setBuffer('Z_AB_nodeBuffer', this._nodeBuffer!);\r\n bindGroup.setBuffer(\r\n 'Z_AB_scissorOffset',\r\n this._scissorOffsetBuffer!,\r\n 0,\r\n this._currentPass * ABufferOIT._ubAlignment,\r\n ABufferOIT._ubAlignment\r\n );\r\n bindGroup.setBuffer('Z_AB_headImage', this._headBuffer!);\r\n bindGroup.setValue('Z_AB_screenSize', this._screenSize[0]);\r\n bindGroup.setTexture('Z_AB_depthTexture', ctx.linearDepthTexture!);\r\n }\r\n /**\r\n * {@inheritDoc OIT.outputFragmentColor}\r\n */\r\n outputFragmentColor(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n // linear depth of current fragment\r\n scope.$l.fragDepth = ShaderHelper.nonLinearDepthToLinearNormalized(scope, scope.$builtins.fragCoord.z);\r\n // linear depth in depth texture\r\n scope.$l.linearDepth = pb.textureLoad(\r\n scope.Z_AB_depthTexture,\r\n pb.ivec2(scope.$builtins.fragCoord.xy),\r\n 0\r\n ).r;\r\n // saved to buffer only if nothing is infront\r\n scope.$if(pb.lessThan(scope.fragDepth, scope.linearDepth), function () {\r\n this.$l.Z_AB_pixelCount = pb.atomicAdd(this.Z_AB_headImage.at(0), 1);\r\n this.$l.Z_AB_nodeOffset = this.Z_AB_pixelCount;\r\n // save if index not exceeded\r\n this.$if(pb.lessThan(this.Z_AB_nodeOffset, pb.arrayLength(this.Z_AB_nodeBuffer)), function () {\r\n this.$l.Z_AB_headOffset = pb.add(\r\n pb.mul(this.Z_AB_screenSize, pb.sub(pb.uint(this.$builtins.fragCoord.y), this.Z_AB_scissorOffset)),\r\n pb.uint(this.$builtins.fragCoord.x)\r\n );\r\n this.$l.Z_AB_oldHead = pb.atomicExchange(\r\n this.Z_AB_headImage.at(pb.add(this.Z_AB_headOffset, 1)),\r\n this.Z_AB_nodeOffset\r\n );\r\n this.$l.Z_AB_colorScale = pb.floatBitsToUint(pb.length(color.rgb));\r\n this.$l.Z_AB_color = pb.pack4x8unorm(pb.vec4(pb.normalize(color.rgb), pb.clamp(color.a, 0, 1)));\r\n this.$l.Z_AB_depth = pb.floatBitsToUint(this.fragDepth);\r\n this.Z_AB_nodeBuffer.setAt(\r\n this.Z_AB_nodeOffset,\r\n pb.uvec4(this.Z_AB_color, this.Z_AB_colorScale, this.Z_AB_depth, this.Z_AB_oldHead)\r\n );\r\n pb.discard();\r\n });\r\n });\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.setRenderStates}\r\n */\r\n setRenderStates(rs: RenderStateSet) {\r\n const stencilStates = rs.useStencilState();\r\n stencilStates.enable(true);\r\n stencilStates.setFrontCompareFunc('always');\r\n stencilStates.setBackCompareFunc('always');\r\n stencilStates.setFrontOp('keep', 'keep', 'replace');\r\n stencilStates.setBackOp('keep', 'keep', 'replace');\r\n stencilStates.setReference(1);\r\n stencilStates.setReadMask(0xff);\r\n }\r\n /** @internal */\r\n private static getCompositeProgram(device: AbstractDevice) {\r\n if (!this._compositeProgram) {\r\n this._compositeProgram = device.buildRenderProgram({\r\n vertex(pb) {\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, DEPTH_FARTHEST, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\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.$outputs.outColor = pb.vec4();\r\n this.scissorOffset = pb.uint().uniformBuffer(0);\r\n this.headBuffer = pb.uint[0]().storageBuffer(0);\r\n this.nodeBuffer = pb.uvec4[0]().storageBuffer(0);\r\n this.screenWidth = pb.uint().uniform(0);\r\n this.additiveOnly = pb.int().uniform(0);\r\n pb.func('unpackColor', [pb.uvec4('x')], function () {\r\n this.$l.colorNorm = pb.unpack4x8unorm(this.x.x);\r\n this.$l.colorScale = pb.uintBitsToFloat(this.x.y);\r\n this.$return(pb.vec4(pb.mul(this.colorNorm.rgb, this.colorScale), this.colorNorm.a));\r\n });\r\n pb.main(function () {\r\n this.$l.fragmentArray = pb.uvec4[ABufferOIT.MAX_FRAGMENT_LAYERS]();\r\n this.$l.fragmentArrayLen = pb.uint(0);\r\n this.$l.offset = pb.add(\r\n pb.mul(this.screenWidth, pb.sub(pb.uint(this.$builtins.fragCoord.y), this.scissorOffset)),\r\n pb.uint(this.$builtins.fragCoord.x)\r\n );\r\n //this.$l.head = this.headBuffer.at(this.offset);\r\n this.$l.head = this.headBuffer.at(pb.add(this.offset, 1));\r\n this.$while(\r\n pb.and(\r\n pb.lessThan(this.fragmentArrayLen, ABufferOIT.MAX_FRAGMENT_LAYERS),\r\n pb.notEqual(this.head, 0xffffffff)\r\n ),\r\n function () {\r\n this.fragmentArray.setAt(this.fragmentArrayLen, this.nodeBuffer.at(this.head));\r\n this.head = this.fragmentArray.at(this.fragmentArrayLen).w;\r\n this.fragmentArrayLen = pb.add(this.fragmentArrayLen, 1);\r\n }\r\n );\r\n this.$if(pb.equal(this.fragmentArrayLen, 0), function () {\r\n this.$outputs.outColor = pb.vec4(0, 0, 0, 1);\r\n }).$else(function () {\r\n // bubble sort\r\n this.$for(pb.uint('i'), 0, pb.sub(this.fragmentArrayLen, 1), function () {\r\n this.$for(pb.uint('j'), 0, pb.sub(pb.sub(this.fragmentArrayLen, 1), this.i), function () {\r\n this.$l.a = this.fragmentArray.at(this.j);\r\n this.$l.b = this.fragmentArray.at(pb.add(this.j, 1));\r\n this.$if(pb.greaterThan(this.a.z, this.b.z), function () {\r\n this.fragmentArray.setAt(this.j, this.b);\r\n this.fragmentArray.setAt(pb.add(this.j, 1), this.a);\r\n });\r\n });\r\n });\r\n // under operator blending\r\n this.$l.c0 = this.unpackColor(this.fragmentArray[0]);\r\n this.$l.c_dst = ABufferOIT.usePremultipliedAlpha ? this.c0.rgb : pb.mul(this.c0.rgb, this.c0.a);\r\n this.$l.a_dst = pb.sub(1, this.c0.a);\r\n this.$for(pb.uint('i'), 1, this.fragmentArrayLen, function () {\r\n this.$l.c = this.unpackColor(this.fragmentArray.at(this.i));\r\n if (ABufferOIT.usePremultipliedAlpha) {\r\n this.c_dst = pb.add(this.c_dst, pb.mul(this.c.rgb, this.a_dst));\r\n } else {\r\n this.c_dst = pb.add(this.c_dst, pb.mul(this.c.rgb, this.c.a, this.a_dst));\r\n }\r\n this.a_dst = pb.mul(this.a_dst, pb.sub(1, this.c.a));\r\n });\r\n this.$outputs.outColor = pb.vec4(\r\n this.c_dst,\r\n pb.equal(this.additiveOnly, 0) ? this.a_dst : pb.float(0)\r\n );\r\n });\r\n });\r\n }\r\n })!;\r\n this._compositeProgram.name = '@ABufferOIT_Composite';\r\n this._compositeBindGroup = device.createBindGroup(this._compositeProgram.bindGroupLayouts[0]);\r\n this._compositeRenderStates = device.createRenderStateSet();\r\n this._compositeRenderStates\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendFuncRGB('one', 'src-alpha')\r\n .setBlendFuncAlpha('zero', 'one');\r\n this._compositeRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n this._compositeAdditiveRenderStates = device.createRenderStateSet();\r\n this._compositeAdditiveRenderStates\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendFuncRGB('one', 'one')\r\n .setBlendFuncAlpha('zero', 'one');\r\n this._compositeAdditiveRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n const stencilStates = this._compositeRenderStates.useStencilState();\r\n stencilStates.enable(false);\r\n stencilStates.setFrontCompareFunc('always');\r\n stencilStates.setBackCompareFunc('always');\r\n stencilStates.setFrontOp('keep', 'keep', 'replace');\r\n stencilStates.setBackOp('keep', 'keep', 'replace');\r\n stencilStates.setReference(0);\r\n stencilStates.setReadMask(0xff);\r\n const additiveStencilStates = this._compositeAdditiveRenderStates.useStencilState();\r\n additiveStencilStates.enable(false);\r\n additiveStencilStates.setFrontCompareFunc('always');\r\n additiveStencilStates.setBackCompareFunc('always');\r\n additiveStencilStates.setFrontOp('keep', 'keep', 'replace');\r\n additiveStencilStates.setBackOp('keep', 'keep', 'replace');\r\n additiveStencilStates.setReference(0);\r\n additiveStencilStates.setReadMask(0xff);\r\n }\r\n return this._compositeProgram;\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._nodeBuffer?.dispose();\r\n this._nodeBuffer = null;\r\n this._headStagingBuffer?.dispose();\r\n this._headStagingBuffer = null;\r\n this._headBuffer?.dispose();\r\n this._headBuffer = null;\r\n this._scissorOffsetBuffer?.dispose();\r\n this._scissorOffsetBuffer = null;\r\n this._hash = null;\r\n this._savedScissor = null;\r\n }\r\n}\r\n"],"names":["ABufferOIT","OIT","type","usePremultipliedAlpha","MAX_FRAGMENT_LAYERS","_compositeProgram","_compositeBindGroup","_compositeRenderStates","_compositeAdditiveRenderStates","_ubAlignment","_nodeBuffer","_headStagingBuffer","_headBuffer","_scissorOffsetBuffer","_numLayers","_screenSize","_hash","_debug","_scissorSlices","_scissorHeight","_currentPass","_savedScissor","_singleColorFramebuffer","numLayers","Uint32Array","getType","supportDevice","deviceType","wantsPremultipliedAlpha","wantsAdditiveLightPassAlpha","begin","ctx","device","getScissor","ubAlignment","getDeviceCaps","shaderCaps","uniformBufferOffsetAlignment","viewport","getViewport","screenWidth","screenXToDevice","width","screenHeight","screenYToDevice","Math","max","height","uniformChanged","maxBufferSize","maxStorageBufferSize","bytesPerLine","ceil","offsetBufferSize","offsetBuffer","i","byteLength","dispose","createBuffer","usage","bufferSubData","size","nodeBufferSize","storage","headBufferSize","tmpArray","fill","end","setScissor","setupFragmentOutput","scope","pb","$builder","Z_AB_scissorOffset","uint","uniformBuffer","Z_AB_nodeBuffer","uvec4","storageBuffer","Z_AB_headImage","atomic_uint","Z_AB_screenSize","uniform","Z_AB_depthTexture","tex2D","noSampler","$outputs","outColor","vec4","beginPass","pass","currentFramebuffer","getFramebuffer","colorAttachment","getColorAttachments","length","pool","fetchTemporalFramebuffer","getDepthAttachment","scissor","pushDeviceStates","setFramebuffer","setViewport","scissorY","scissorH","min","deviceYToScreen","deviceXToScreen","copyBuffer","uid","data","Uint8Array","readBuffer","getBufferSubData","then","buffer","console","error","endPass","getCompositeProgram","lastBindGroup","getBindGroup","singleColorFramebuffer","setProgram","bindGroup","setBuffer","setValue","lightBlending","setBindGroup","drawFullscreenQuad","popDeviceStates","releaseFrameBuffer","calculateHash","applyUniforms","setTexture","linearDepthTexture","outputFragmentColor","color","$l","fragDepth","ShaderHelper","nonLinearDepthToLinearNormalized","$builtins","fragCoord","z","linearDepth","textureLoad","ivec2","xy","r","$if","lessThan","Z_AB_pixelCount","atomicAdd","at","Z_AB_nodeOffset","arrayLength","Z_AB_headOffset","add","mul","sub","y","x","Z_AB_oldHead","atomicExchange","Z_AB_colorScale","floatBitsToUint","rgb","Z_AB_color","pack4x8unorm","normalize","clamp","a","Z_AB_depth","setAt","discard","setRenderStates","rs","stencilStates","useStencilState","enable","setFrontCompareFunc","setBackCompareFunc","setFrontOp","setBackOp","setReference","setReadMask","buildRenderProgram","vertex","$inputs","pos","vec2","attrib","uv","main","position","DEPTH_FARTHEST","neg","fragment","scissorOffset","headBuffer","nodeBuffer","additiveOnly","int","func","colorNorm","unpack4x8unorm","colorScale","uintBitsToFloat","$return","fragmentArray","fragmentArrayLen","offset","head","$while","and","notEqual","w","equal","$else","$for","j","b","greaterThan","c0","unpackColor","c_dst","a_dst","c","float","name","createBindGroup","bindGroupLayouts","createRenderStateSet","useBlendingState","setBlendFuncRGB","setBlendFuncAlpha","useDepthState","enableTest","enableWrite","additiveStencilStates","onDispose"],"mappings":"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"}
1
+ {"version":3,"file":"abuffer_oit.js","sources":["../../src/render/abuffer_oit.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n DeviceViewport,\r\n FrameBuffer,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet\r\n} from '@zephyr3d/device';\r\nimport { OIT } from './oit';\r\nimport type { DrawContext } from './drawable';\r\nimport { drawFullscreenQuad } from './fullscreenquad';\r\nimport { ShaderHelper } from '../material';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { DEPTH_FARTHEST } from '@zephyr3d/base';\r\n\r\n/**\r\n * per-pixel linked list OIT renderer using ABuffer.\r\n *\r\n * @remarks\r\n * The ABuffer OIT renderer only supports WebGPU device.\r\n *\r\n * @public\r\n */\r\nexport class ABufferOIT extends OIT {\r\n /** Type name of ABufferOIT */\r\n public static readonly type = 'ab';\r\n public static readonly usePremultipliedAlpha = true;\r\n private static readonly MAX_FRAGMENT_LAYERS = 75;\r\n private static _compositeProgram: Nullable<GPUProgram> = null;\r\n private static _compositeBindGroup: Nullable<BindGroup> = null;\r\n private static _compositeRenderStates: Nullable<RenderStateSet> = null;\r\n private static _compositeAdditiveRenderStates: Nullable<RenderStateSet> = null;\r\n private static _ubAlignment = 0;\r\n private _nodeBuffer: Nullable<GPUDataBuffer>;\r\n private _headStagingBuffer: Nullable<GPUDataBuffer>;\r\n private _headBuffer: Nullable<GPUDataBuffer>;\r\n private _scissorOffsetBuffer: Nullable<GPUDataBuffer>;\r\n private readonly _numLayers: number;\r\n private _screenSize: Uint32Array<ArrayBuffer>;\r\n private _hash: Nullable<string>;\r\n private readonly _debug: boolean;\r\n private _scissorSlices: number;\r\n private _scissorHeight: number;\r\n private _currentPass: number;\r\n private _savedScissor: Nullable<DeviceViewport>;\r\n private _singleColorFramebuffer: Nullable<FrameBuffer>;\r\n /**\r\n * Creates an instance of ABufferOIT class\r\n *\r\n * @param numLayers - How many transparent layers, default is 16\r\n */\r\n constructor(numLayers = 16) {\r\n super();\r\n this._nodeBuffer = null;\r\n this._headStagingBuffer = null;\r\n this._headBuffer = null;\r\n this._scissorOffsetBuffer = null;\r\n this._numLayers = numLayers;\r\n this._screenSize = new Uint32Array([0xffffffff, 0xffffffff]);\r\n this._hash = null;\r\n this._debug = false;\r\n this._scissorSlices = 0;\r\n this._scissorHeight = 0;\r\n this._savedScissor = null;\r\n this._currentPass = 0;\r\n this._singleColorFramebuffer = null;\r\n }\r\n /**\r\n * {@inheritDoc OIT.getType}\r\n */\r\n getType() {\r\n return ABufferOIT.type;\r\n }\r\n /**\r\n * {@inheritDoc OIT.supportDevice}\r\n */\r\n supportDevice(deviceType: string) {\r\n return deviceType === 'webgpu';\r\n }\r\n /**\r\n * {@inheritDoc OIT.wantsPremultipliedAlpha}\r\n */\r\n wantsPremultipliedAlpha() {\r\n return ABufferOIT.usePremultipliedAlpha;\r\n }\r\n /**\r\n * {@inheritDoc OIT.wantsAdditiveLightPassAlpha}\r\n */\r\n wantsAdditiveLightPassAlpha() {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.begin}\r\n */\r\n begin(ctx: DrawContext) {\r\n const device = ctx.device;\r\n this._savedScissor = device.getScissor();\r\n const ubAlignment = (ABufferOIT._ubAlignment =\r\n device.getDeviceCaps().shaderCaps.uniformBufferOffsetAlignment);\r\n const viewport = device.getViewport();\r\n const screenWidth = device.screenXToDevice(viewport.width);\r\n const screenHeight = device.screenYToDevice(Math.max(viewport.height, 1));\r\n if (screenWidth !== this._screenSize[0] || screenHeight !== this._screenSize[1]) {\r\n // Mark uniform changed\r\n this.uniformChanged();\r\n // Resize buffers if viewport was changed\r\n this._screenSize[0] = screenWidth;\r\n this._screenSize[1] = screenHeight;\r\n // compute scissor slices\r\n const maxBufferSize = device.getDeviceCaps().shaderCaps.maxStorageBufferSize;\r\n const bytesPerLine = screenWidth * 4 * 4 * this._numLayers;\r\n this._scissorHeight = (maxBufferSize / bytesPerLine) >> 0;\r\n this._scissorSlices = Math.ceil(screenHeight / this._scissorHeight);\r\n const offsetBufferSize = ubAlignment * this._scissorSlices;\r\n const offsetBuffer = new Uint32Array(offsetBufferSize >> 2);\r\n for (let i = 0; i < this._scissorSlices; i++) {\r\n offsetBuffer[i * (ubAlignment >> 2)] = i * this._scissorHeight;\r\n }\r\n if (!this._scissorOffsetBuffer || this._scissorOffsetBuffer.byteLength < offsetBuffer.byteLength) {\r\n this._scissorOffsetBuffer?.dispose();\r\n this._scissorOffsetBuffer = device.createBuffer(offsetBuffer.byteLength, { usage: 'uniform' });\r\n }\r\n this._scissorOffsetBuffer.bufferSubData(0, offsetBuffer);\r\n // resize node buffer\r\n const size = screenWidth * this._scissorHeight * 4;\r\n const nodeBufferSize = size * 4 * this._numLayers;\r\n if (!this._nodeBuffer || nodeBufferSize > this._nodeBuffer.byteLength) {\r\n this._nodeBuffer?.dispose();\r\n this._nodeBuffer = device.createBuffer(nodeBufferSize, { storage: true, usage: 'uniform' });\r\n }\r\n // resize head buffer\r\n const headBufferSize = size + 4;\r\n if (!this._headBuffer || headBufferSize > this._headBuffer.byteLength) {\r\n this._headBuffer?.dispose();\r\n this._headBuffer = device.createBuffer(headBufferSize, { storage: true, usage: 'uniform' });\r\n this._headStagingBuffer?.dispose();\r\n this._headStagingBuffer = device.createBuffer(headBufferSize, { storage: true, usage: 'uniform' });\r\n const tmpArray = new Uint32Array(headBufferSize >> 2);\r\n tmpArray.fill(0xffffffff);\r\n this._headStagingBuffer.bufferSubData(0, tmpArray);\r\n }\r\n }\r\n return this._scissorSlices;\r\n }\r\n /**\r\n * {@inheritDoc OIT.end}\r\n */\r\n end(ctx: DrawContext) {\r\n // Restore scissor rect\r\n ctx.device.setScissor(this._savedScissor);\r\n }\r\n /**\r\n * {@inheritDoc OIT.setupFragmentOutput}\r\n */\r\n setupFragmentOutput(scope: PBGlobalScope) {\r\n const pb = scope.$builder;\r\n scope.Z_AB_scissorOffset = pb.uint().uniformBuffer(2);\r\n scope.Z_AB_nodeBuffer = pb.uvec4[0]().storageBuffer(2);\r\n scope.Z_AB_headImage = pb.atomic_uint[0]().storageBuffer(2);\r\n scope.Z_AB_screenSize = pb.uint().uniform(2);\r\n // Read with textureLoad only\r\n scope.Z_AB_depthTexture = pb.tex2D().uniform(2).noSampler();\r\n scope.$outputs.outColor = pb.vec4();\r\n }\r\n /**\r\n * {@inheritDoc OIT.beginPass}\r\n */\r\n beginPass(ctx: DrawContext, pass: number) {\r\n this._currentPass = pass;\r\n const device = ctx.device;\r\n const currentFramebuffer = device.getFramebuffer();\r\n const colorAttachment = currentFramebuffer?.getColorAttachments()[0] ?? null;\r\n this._singleColorFramebuffer =\r\n currentFramebuffer && currentFramebuffer.getColorAttachments().length > 1 && colorAttachment\r\n ? device.pool.fetchTemporalFramebuffer(\r\n false,\r\n 0,\r\n 0,\r\n colorAttachment,\r\n currentFramebuffer.getDepthAttachment(),\r\n false\r\n )\r\n : null;\r\n if (this._singleColorFramebuffer) {\r\n const viewport = device.getViewport();\r\n const scissor = device.getScissor();\r\n device.pushDeviceStates();\r\n device.setFramebuffer(this._singleColorFramebuffer);\r\n device.setViewport(viewport);\r\n device.setScissor(scissor);\r\n }\r\n const scissorY = pass * this._scissorHeight;\r\n const scissorH =\r\n Math.min((pass + 1) * this._scissorHeight, this._screenSize[1]) - pass * this._scissorHeight;\r\n device.setScissor([\r\n 0,\r\n device.deviceYToScreen(this._screenSize[1] - scissorY - scissorH),\r\n device.deviceXToScreen(this._screenSize[0]),\r\n device.deviceYToScreen(scissorH)\r\n ]);\r\n device.copyBuffer(this._headStagingBuffer!, this._headBuffer!, 0, 0, this._headStagingBuffer!.byteLength);\r\n // Update render hash\r\n this._hash = `${this.getType()}#${this._nodeBuffer!.uid}#${this._headBuffer!.uid}#${\r\n this._scissorOffsetBuffer!.uid\r\n }#${pass}`;\r\n if (this._debug) {\r\n const data = new Uint8Array(this._headBuffer!.byteLength);\r\n const readBuffer = device.createBuffer(this._headBuffer!.byteLength, { usage: 'read' });\r\n device.copyBuffer(this._headBuffer!, readBuffer, 0, 0, this._headBuffer!.byteLength);\r\n readBuffer.getBufferSubData(data).then(() => {\r\n const uint = new Uint32Array(data.buffer);\r\n for (let i = 0; i < uint.length; i++) {\r\n if (uint[i] !== 0xffffffff) {\r\n console.error('Clear head buffer failed');\r\n break;\r\n }\r\n }\r\n readBuffer.dispose();\r\n });\r\n }\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.endPass}\r\n */\r\n endPass(ctx: DrawContext, pass: number) {\r\n const device = ctx.device;\r\n ABufferOIT.getCompositeProgram(device);\r\n const lastBindGroup = device.getBindGroup(0);\r\n const currentFramebuffer = device.getFramebuffer();\r\n const colorAttachment = currentFramebuffer?.getColorAttachments()[0] ?? null;\r\n const singleColorFramebuffer =\r\n !this._singleColorFramebuffer &&\r\n currentFramebuffer &&\r\n currentFramebuffer.getColorAttachments().length > 1 &&\r\n colorAttachment\r\n ? device.pool.fetchTemporalFramebuffer(\r\n false,\r\n 0,\r\n 0,\r\n colorAttachment,\r\n currentFramebuffer.getDepthAttachment(),\r\n false\r\n )\r\n : null;\r\n if (singleColorFramebuffer) {\r\n const viewport = device.getViewport();\r\n const scissor = device.getScissor();\r\n device.pushDeviceStates();\r\n device.setFramebuffer(singleColorFramebuffer);\r\n device.setViewport(viewport);\r\n device.setScissor(scissor);\r\n }\r\n try {\r\n device.setProgram(ABufferOIT.getCompositeProgram(device));\r\n const bindGroup = ABufferOIT._compositeBindGroup!;\r\n bindGroup.setBuffer(\r\n 'scissorOffset',\r\n this._scissorOffsetBuffer!,\r\n 0,\r\n pass * ABufferOIT._ubAlignment,\r\n ABufferOIT._ubAlignment\r\n );\r\n bindGroup.setBuffer('headBuffer', this._headBuffer!);\r\n bindGroup.setBuffer('nodeBuffer', this._nodeBuffer!);\r\n bindGroup.setValue('screenWidth', this._screenSize[0]);\r\n bindGroup.setValue('additiveOnly', ctx.lightBlending ? 1 : 0);\r\n device.setBindGroup(0, bindGroup);\r\n drawFullscreenQuad(\r\n ctx.lightBlending ? ABufferOIT._compositeAdditiveRenderStates! : ABufferOIT._compositeRenderStates!\r\n );\r\n } finally {\r\n if (singleColorFramebuffer) {\r\n device.popDeviceStates();\r\n device.pool.releaseFrameBuffer(singleColorFramebuffer);\r\n } else if (this._singleColorFramebuffer) {\r\n device.popDeviceStates();\r\n device.pool.releaseFrameBuffer(this._singleColorFramebuffer);\r\n this._singleColorFramebuffer = null;\r\n } else {\r\n device.setBindGroup(0, lastBindGroup[0], lastBindGroup[1]);\r\n }\r\n }\r\n }\r\n /**\r\n * {@inheritDoc OIT.calculateHash}\r\n */\r\n calculateHash() {\r\n return this._hash!;\r\n }\r\n /**\r\n * {@inheritDoc OIT.applyUniforms}\r\n */\r\n applyUniforms(ctx: DrawContext, bindGroup: BindGroup) {\r\n bindGroup.setBuffer('Z_AB_nodeBuffer', this._nodeBuffer!);\r\n bindGroup.setBuffer(\r\n 'Z_AB_scissorOffset',\r\n this._scissorOffsetBuffer!,\r\n 0,\r\n this._currentPass * ABufferOIT._ubAlignment,\r\n ABufferOIT._ubAlignment\r\n );\r\n bindGroup.setBuffer('Z_AB_headImage', this._headBuffer!);\r\n bindGroup.setValue('Z_AB_screenSize', this._screenSize[0]);\r\n bindGroup.setTexture('Z_AB_depthTexture', ctx.linearDepthTexture!);\r\n }\r\n /**\r\n * {@inheritDoc OIT.outputFragmentColor}\r\n */\r\n outputFragmentColor(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n // linear depth of current fragment\r\n scope.$l.fragDepth = ShaderHelper.nonLinearDepthToLinearNormalized(scope, scope.$builtins.fragCoord.z);\r\n // linear depth in depth texture\r\n scope.$l.linearDepth = pb.textureLoad(\r\n scope.Z_AB_depthTexture,\r\n pb.ivec2(scope.$builtins.fragCoord.xy),\r\n 0\r\n ).r;\r\n // saved to buffer only if nothing is infront\r\n scope.$if(pb.lessThan(scope.fragDepth, scope.linearDepth), function () {\r\n this.$l.Z_AB_pixelCount = pb.atomicAdd(this.Z_AB_headImage.at(0), 1);\r\n this.$l.Z_AB_nodeOffset = this.Z_AB_pixelCount;\r\n // save if index not exceeded\r\n this.$if(pb.lessThan(this.Z_AB_nodeOffset, pb.arrayLength(this.Z_AB_nodeBuffer)), function () {\r\n this.$l.Z_AB_headOffset = pb.add(\r\n pb.mul(this.Z_AB_screenSize, pb.sub(pb.uint(this.$builtins.fragCoord.y), this.Z_AB_scissorOffset)),\r\n pb.uint(this.$builtins.fragCoord.x)\r\n );\r\n this.$l.Z_AB_oldHead = pb.atomicExchange(\r\n this.Z_AB_headImage.at(pb.add(this.Z_AB_headOffset, 1)),\r\n this.Z_AB_nodeOffset\r\n );\r\n this.$l.Z_AB_colorScale = pb.floatBitsToUint(pb.length(color.rgb));\r\n this.$l.Z_AB_color = pb.pack4x8unorm(pb.vec4(pb.normalize(color.rgb), pb.clamp(color.a, 0, 1)));\r\n this.$l.Z_AB_depth = pb.floatBitsToUint(this.fragDepth);\r\n this.Z_AB_nodeBuffer.setAt(\r\n this.Z_AB_nodeOffset,\r\n pb.uvec4(this.Z_AB_color, this.Z_AB_colorScale, this.Z_AB_depth, this.Z_AB_oldHead)\r\n );\r\n pb.discard();\r\n });\r\n });\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.setRenderStates}\r\n */\r\n setRenderStates(rs: RenderStateSet) {\r\n const stencilStates = rs.useStencilState();\r\n stencilStates.enable(true);\r\n stencilStates.setFrontCompareFunc('always');\r\n stencilStates.setBackCompareFunc('always');\r\n stencilStates.setFrontOp('keep', 'keep', 'replace');\r\n stencilStates.setBackOp('keep', 'keep', 'replace');\r\n stencilStates.setReference(1);\r\n stencilStates.setReadMask(0xff);\r\n }\r\n /** @internal */\r\n private static getCompositeProgram(device: AbstractDevice) {\r\n if (!this._compositeProgram) {\r\n this._compositeProgram = device.buildRenderProgram({\r\n vertex(pb) {\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, DEPTH_FARTHEST, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\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.$outputs.outColor = pb.vec4();\r\n this.scissorOffset = pb.uint().uniformBuffer(0);\r\n this.headBuffer = pb.uint[0]().storageBuffer(0);\r\n this.nodeBuffer = pb.uvec4[0]().storageBuffer(0);\r\n this.screenWidth = pb.uint().uniform(0);\r\n this.additiveOnly = pb.int().uniform(0);\r\n pb.func('unpackColor', [pb.uvec4('x')], function () {\r\n this.$l.colorNorm = pb.unpack4x8unorm(this.x.x);\r\n this.$l.colorScale = pb.uintBitsToFloat(this.x.y);\r\n this.$return(pb.vec4(pb.mul(this.colorNorm.rgb, this.colorScale), this.colorNorm.a));\r\n });\r\n pb.main(function () {\r\n this.$l.fragmentArray = pb.uvec4[ABufferOIT.MAX_FRAGMENT_LAYERS]();\r\n this.$l.fragmentArrayLen = pb.uint(0);\r\n this.$l.offset = pb.add(\r\n pb.mul(this.screenWidth, pb.sub(pb.uint(this.$builtins.fragCoord.y), this.scissorOffset)),\r\n pb.uint(this.$builtins.fragCoord.x)\r\n );\r\n //this.$l.head = this.headBuffer.at(this.offset);\r\n this.$l.head = this.headBuffer.at(pb.add(this.offset, 1));\r\n this.$while(\r\n pb.and(\r\n pb.lessThan(this.fragmentArrayLen, ABufferOIT.MAX_FRAGMENT_LAYERS),\r\n pb.notEqual(this.head, 0xffffffff)\r\n ),\r\n function () {\r\n this.fragmentArray.setAt(this.fragmentArrayLen, this.nodeBuffer.at(this.head));\r\n this.head = this.fragmentArray.at(this.fragmentArrayLen).w;\r\n this.fragmentArrayLen = pb.add(this.fragmentArrayLen, 1);\r\n }\r\n );\r\n this.$if(pb.equal(this.fragmentArrayLen, 0), function () {\r\n this.$outputs.outColor = pb.vec4(0, 0, 0, 1);\r\n }).$else(function () {\r\n // bubble sort\r\n this.$for(pb.uint('i'), 0, pb.sub(this.fragmentArrayLen, 1), function () {\r\n this.$for(pb.uint('j'), 0, pb.sub(pb.sub(this.fragmentArrayLen, 1), this.i), function () {\r\n this.$l.a = this.fragmentArray.at(this.j);\r\n this.$l.b = this.fragmentArray.at(pb.add(this.j, 1));\r\n this.$if(pb.greaterThan(this.a.z, this.b.z), function () {\r\n this.fragmentArray.setAt(this.j, this.b);\r\n this.fragmentArray.setAt(pb.add(this.j, 1), this.a);\r\n });\r\n });\r\n });\r\n // under operator blending\r\n this.$l.c0 = this.unpackColor(this.fragmentArray[0]);\r\n this.$l.c_dst = ABufferOIT.usePremultipliedAlpha ? this.c0.rgb : pb.mul(this.c0.rgb, this.c0.a);\r\n this.$l.a_dst = pb.sub(1, this.c0.a);\r\n this.$for(pb.uint('i'), 1, this.fragmentArrayLen, function () {\r\n this.$l.c = this.unpackColor(this.fragmentArray.at(this.i));\r\n if (ABufferOIT.usePremultipliedAlpha) {\r\n this.c_dst = pb.add(this.c_dst, pb.mul(this.c.rgb, this.a_dst));\r\n } else {\r\n this.c_dst = pb.add(this.c_dst, pb.mul(this.c.rgb, this.c.a, this.a_dst));\r\n }\r\n this.a_dst = pb.mul(this.a_dst, pb.sub(1, this.c.a));\r\n });\r\n this.$outputs.outColor = pb.vec4(\r\n this.c_dst,\r\n pb.equal(this.additiveOnly, 0) ? this.a_dst : pb.float(0)\r\n );\r\n });\r\n });\r\n }\r\n })!;\r\n this._compositeProgram.name = '@ABufferOIT_Composite';\r\n this._compositeBindGroup = device.createBindGroup(this._compositeProgram.bindGroupLayouts[0]);\r\n this._compositeRenderStates = device.createRenderStateSet();\r\n this._compositeRenderStates\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendFuncRGB('one', 'src-alpha')\r\n .setBlendFuncAlpha('zero', 'one');\r\n this._compositeRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n this._compositeAdditiveRenderStates = device.createRenderStateSet();\r\n this._compositeAdditiveRenderStates\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendFuncRGB('one', 'one')\r\n .setBlendFuncAlpha('zero', 'one');\r\n this._compositeAdditiveRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n const stencilStates = this._compositeRenderStates.useStencilState();\r\n stencilStates.enable(false);\r\n stencilStates.setFrontCompareFunc('always');\r\n stencilStates.setBackCompareFunc('always');\r\n stencilStates.setFrontOp('keep', 'keep', 'replace');\r\n stencilStates.setBackOp('keep', 'keep', 'replace');\r\n stencilStates.setReference(0);\r\n stencilStates.setReadMask(0xff);\r\n const additiveStencilStates = this._compositeAdditiveRenderStates.useStencilState();\r\n additiveStencilStates.enable(false);\r\n additiveStencilStates.setFrontCompareFunc('always');\r\n additiveStencilStates.setBackCompareFunc('always');\r\n additiveStencilStates.setFrontOp('keep', 'keep', 'replace');\r\n additiveStencilStates.setBackOp('keep', 'keep', 'replace');\r\n additiveStencilStates.setReference(0);\r\n additiveStencilStates.setReadMask(0xff);\r\n }\r\n return this._compositeProgram;\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._nodeBuffer?.dispose();\r\n this._nodeBuffer = null;\r\n this._headStagingBuffer?.dispose();\r\n this._headStagingBuffer = null;\r\n this._headBuffer?.dispose();\r\n this._headBuffer = null;\r\n this._scissorOffsetBuffer?.dispose();\r\n this._scissorOffsetBuffer = null;\r\n this._hash = null;\r\n this._savedScissor = null;\r\n }\r\n}\r\n"],"names":["ABufferOIT","OIT","type","usePremultipliedAlpha","MAX_FRAGMENT_LAYERS","_compositeProgram","_compositeBindGroup","_compositeRenderStates","_compositeAdditiveRenderStates","_ubAlignment","_nodeBuffer","_headStagingBuffer","_headBuffer","_scissorOffsetBuffer","_numLayers","_screenSize","_hash","_debug","_scissorSlices","_scissorHeight","_currentPass","_savedScissor","_singleColorFramebuffer","numLayers","Uint32Array","getType","supportDevice","deviceType","wantsPremultipliedAlpha","wantsAdditiveLightPassAlpha","begin","ctx","device","getScissor","ubAlignment","getDeviceCaps","shaderCaps","uniformBufferOffsetAlignment","viewport","getViewport","screenWidth","screenXToDevice","width","screenHeight","screenYToDevice","Math","max","height","uniformChanged","maxBufferSize","maxStorageBufferSize","bytesPerLine","ceil","offsetBufferSize","offsetBuffer","i","byteLength","dispose","createBuffer","usage","bufferSubData","size","nodeBufferSize","storage","headBufferSize","tmpArray","fill","end","setScissor","setupFragmentOutput","scope","pb","$builder","Z_AB_scissorOffset","uint","uniformBuffer","Z_AB_nodeBuffer","uvec4","storageBuffer","Z_AB_headImage","atomic_uint","Z_AB_screenSize","uniform","Z_AB_depthTexture","tex2D","noSampler","$outputs","outColor","vec4","beginPass","pass","currentFramebuffer","getFramebuffer","colorAttachment","getColorAttachments","length","pool","fetchTemporalFramebuffer","getDepthAttachment","scissor","pushDeviceStates","setFramebuffer","setViewport","scissorY","scissorH","min","deviceYToScreen","deviceXToScreen","copyBuffer","uid","data","Uint8Array","readBuffer","getBufferSubData","then","buffer","console","error","endPass","getCompositeProgram","lastBindGroup","getBindGroup","singleColorFramebuffer","setProgram","bindGroup","setBuffer","setValue","lightBlending","setBindGroup","drawFullscreenQuad","popDeviceStates","releaseFrameBuffer","calculateHash","applyUniforms","setTexture","linearDepthTexture","outputFragmentColor","color","$l","fragDepth","ShaderHelper","nonLinearDepthToLinearNormalized","$builtins","fragCoord","z","linearDepth","textureLoad","ivec2","xy","r","$if","lessThan","Z_AB_pixelCount","atomicAdd","at","Z_AB_nodeOffset","arrayLength","Z_AB_headOffset","add","mul","sub","y","x","Z_AB_oldHead","atomicExchange","Z_AB_colorScale","floatBitsToUint","rgb","Z_AB_color","pack4x8unorm","normalize","clamp","a","Z_AB_depth","setAt","discard","setRenderStates","rs","stencilStates","useStencilState","enable","setFrontCompareFunc","setBackCompareFunc","setFrontOp","setBackOp","setReference","setReadMask","buildRenderProgram","vertex","$inputs","pos","vec2","attrib","uv","main","position","DEPTH_FARTHEST","neg","fragment","scissorOffset","headBuffer","nodeBuffer","additiveOnly","int","func","colorNorm","unpack4x8unorm","colorScale","uintBitsToFloat","$return","fragmentArray","fragmentArrayLen","offset","head","$while","and","notEqual","w","equal","$else","$for","j","b","greaterThan","c0","unpackColor","c_dst","a_dst","c","float","name","createBindGroup","bindGroupLayouts","createRenderStateSet","useBlendingState","setBlendFuncRGB","setBlendFuncAlpha","useDepthState","enableTest","enableWrite","additiveStencilStates","onDispose"],"mappings":"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"}