@woosh/meep-engine 3.68.0 → 3.70.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 (584) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +2 -17
  4. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +1 -1
  5. package/editor/ecs/component/editors/ecs/Trail3DEditor.js +3 -18
  6. package/package.json +1 -1
  7. package/src/core/bvh8/build/BVH8Converter.d.ts +16 -0
  8. package/src/core/bvh8/build/BVH8Converter.d.ts.map +1 -1
  9. package/src/core/bvh8/build/BVH8Converter.js +64 -37
  10. package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts +25 -0
  11. package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts.map +1 -0
  12. package/src/core/bvh8/build/bvh8_assign_slots_greedy.js +68 -0
  13. package/src/core/bvh8/build/bvh8_from_proxy.d.ts.map +1 -1
  14. package/src/core/bvh8/build/bvh8_from_proxy.js +2 -33
  15. package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts +22 -0
  16. package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts.map +1 -0
  17. package/src/core/bvh8/build/bvh8_node_fit_slots.js +115 -0
  18. package/src/core/bvh8/bvh8_depth.d.ts +8 -0
  19. package/src/core/bvh8/bvh8_depth.d.ts.map +1 -0
  20. package/src/core/bvh8/bvh8_depth.js +39 -0
  21. package/src/core/math/complex/complex_fft_radix2.d.ts +19 -0
  22. package/src/core/math/complex/complex_fft_radix2.d.ts.map +1 -0
  23. package/src/core/math/complex/complex_fft_radix2.js +71 -0
  24. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +33 -65
  25. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
  26. package/src/engine/graphics/ecs/trail3d/Trail3D.js +37 -245
  27. package/src/engine/graphics/ecs/trail3d/Trail3DFlags.d.ts +0 -4
  28. package/src/engine/graphics/ecs/trail3d/Trail3DFlags.js +4 -10
  29. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts +13 -10
  30. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts.map +1 -1
  31. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +28 -37
  32. package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts +10 -0
  33. package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts.map +1 -0
  34. package/src/engine/graphics/ecs/trail3d/trail_knot_count.js +27 -0
  35. package/src/engine/graphics/trail/TrailKnots.d.ts +62 -0
  36. package/src/engine/graphics/trail/TrailKnots.d.ts.map +1 -0
  37. package/src/engine/graphics/trail/TrailKnots.js +137 -0
  38. package/src/engine/graphics/trail/tube/TubeXMaterialSpec.d.ts +1 -1
  39. package/src/engine/graphics/trail/tube/TubeXMaterialSpec.js +1 -1
  40. package/src/engine/graphics3/EntityRowHold.d.ts +48 -0
  41. package/src/engine/graphics3/EntityRowHold.d.ts.map +1 -0
  42. package/src/engine/graphics3/EntityRowHold.js +128 -0
  43. package/src/engine/graphics3/GPUFluidSystem.d.ts +17 -4
  44. package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
  45. package/src/engine/graphics3/GPUFluidSystem.js +113 -16
  46. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +6 -2
  47. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  48. package/src/engine/graphics3/GPUParticleEmitterSystem.js +11 -44
  49. package/src/engine/graphics3/Trail3DSystem.d.ts +69 -35
  50. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
  51. package/src/engine/graphics3/Trail3DSystem.js +380 -81
  52. package/src/engine/physics/cloth/playground/wind_main.js +7 -6
  53. package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts +2 -2
  54. package/src/engine/physics/cloth/wind/AbstractClothWind.js +2 -2
  55. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +3 -3
  56. package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
  57. package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -9
  58. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts +10 -10
  59. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts.map +1 -1
  60. package/src/engine/physics/cloth/wind/ClothGPUFluidWind.js +14 -22
  61. package/src/engine/physics/fluid/FluidAtmosphere.d.ts +16 -2
  62. package/src/engine/physics/fluid/FluidAtmosphere.d.ts.map +1 -1
  63. package/src/engine/physics/fluid/FluidAtmosphere.js +17 -3
  64. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts +1 -2
  65. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts.map +1 -1
  66. package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.js +1 -2
  67. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts +8 -5
  68. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts.map +1 -1
  69. package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.js +60 -17
  70. package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts +17 -0
  71. package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts.map +1 -1
  72. package/src/engine/physics/fluid/ecs/FluidObstacle.js +22 -2
  73. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +6 -5
  74. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
  75. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +14 -3
  76. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +1 -1
  77. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +1 -1
  78. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +33 -47
  79. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  80. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +38 -176
  81. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts +8 -11
  82. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts.map +1 -1
  83. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.js +13 -24
  84. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts +16 -0
  85. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts.map +1 -0
  86. package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.js +35 -0
  87. package/src/engine/physics/fluid/fluid_apply_atmosphere.d.ts +1 -1
  88. package/src/engine/physics/fluid/fluid_apply_atmosphere.js +1 -1
  89. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts +9 -1
  90. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts.map +1 -1
  91. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.js +11 -1
  92. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts +5 -0
  93. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts.map +1 -1
  94. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.js +2 -0
  95. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts +4 -3
  96. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts.map +1 -1
  97. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.js +11 -3
  98. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts +28 -0
  99. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts.map +1 -0
  100. package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.js +29 -0
  101. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts +16 -0
  102. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts.map +1 -0
  103. package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.js +49 -0
  104. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts +11 -0
  105. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts.map +1 -0
  106. package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.js +18 -0
  107. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts +25 -0
  108. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts.map +1 -0
  109. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.js +65 -0
  110. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts +56 -0
  111. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts.map +1 -0
  112. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.js +313 -0
  113. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts +16 -0
  114. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts.map +1 -0
  115. package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.js +69 -0
  116. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +1 -1
  117. package/src/generation/foliage/mesh/branch_ring_triangulate.js +1 -1
  118. package/src/shade/playground/bvh_repro/README.md +8 -6
  119. package/src/shade/playground/bvh_repro/index.html +125 -124
  120. package/src/shade/playground/bvh_repro/main.js +259 -254
  121. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
  122. package/src/shade/playground/foliage_wind/foliage_world.js +7 -4
  123. package/src/shade/playground/grass_surfaces/main.js +3 -2
  124. package/src/shade/playground/particle_ecs/bonfire_wind.d.ts +23 -13
  125. package/src/shade/playground/particle_ecs/bonfire_wind.d.ts.map +1 -1
  126. package/src/shade/playground/particle_ecs/bonfire_wind.js +30 -33
  127. package/src/shade/playground/skinned_blas_refit/README.md +26 -14
  128. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts +14 -9
  129. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  130. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +126 -127
  131. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +95 -95
  132. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts +9 -1
  133. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  134. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +146 -135
  135. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +6 -6
  136. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
  137. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +148 -134
  138. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts +11 -8
  139. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts.map +1 -1
  140. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +342 -202
  141. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +12 -13
  142. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
  143. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +136 -116
  144. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +4 -4
  145. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
  146. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +255 -249
  147. package/src/shade/playground/trails/index.html +50 -0
  148. package/src/shade/playground/trails/main.d.ts +2 -0
  149. package/src/shade/playground/trails/main.d.ts.map +1 -0
  150. package/src/shade/playground/trails/main.js +258 -0
  151. package/src/shade/playground/water_surface/main.js +6 -3
  152. package/src/shade/renderer/animation/GPUAnimationManager.js +2 -2
  153. package/src/shade/renderer/animation/animation_curve_write_keys.d.ts +18 -0
  154. package/src/shade/renderer/animation/animation_curve_write_keys.d.ts.map +1 -0
  155. package/src/shade/renderer/animation/animation_curve_write_keys.js +34 -0
  156. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  157. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +7 -8
  158. package/src/shade/renderer/deferred/tonemap/ColorGrade.d.ts.map +1 -1
  159. package/src/shade/renderer/deferred/tonemap/ColorGrade.js +13 -36
  160. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +2 -2
  161. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts +2 -13
  162. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts.map +1 -1
  163. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.js +6 -21
  164. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts +17 -6
  165. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts.map +1 -1
  166. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.js +38 -178
  167. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts +7 -9
  168. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -1
  169. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +17 -106
  170. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts +7 -17
  171. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts.map +1 -1
  172. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.js +18 -118
  173. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts +111 -0
  174. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts.map +1 -0
  175. package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.js +162 -0
  176. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +37 -8
  177. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
  178. package/src/shade/renderer/fluid/GPUFluidCascade.js +149 -47
  179. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +10 -3
  180. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
  181. package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +69 -10
  182. package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts +19 -0
  183. package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts.map +1 -0
  184. package/src/shade/renderer/fluid/chunk_fluid_far_field.js +43 -0
  185. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts +10 -9
  186. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts.map +1 -1
  187. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.js +14 -12
  188. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts +3 -2
  189. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts.map +1 -1
  190. package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.js +7 -5
  191. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts +17 -9
  192. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts.map +1 -1
  193. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.js +58 -18
  194. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts +23 -11
  195. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
  196. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +371 -335
  197. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.d.ts.map +1 -1
  198. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.js +2 -1
  199. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.d.ts.map +1 -1
  200. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.js +109 -108
  201. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts +5 -3
  202. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts.map +1 -1
  203. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.js +24 -12
  204. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts +14 -0
  205. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts.map +1 -1
  206. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.js +18 -0
  207. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts +3 -1
  208. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts.map +1 -1
  209. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.js +4 -1
  210. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +9 -0
  211. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts.map +1 -1
  212. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.js +20 -4
  213. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts +11 -2
  214. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts.map +1 -1
  215. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.js +59 -2
  216. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts +4 -1
  217. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts.map +1 -1
  218. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.js +367 -341
  219. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts +6 -2
  220. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts.map +1 -1
  221. package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.js +10 -5
  222. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +20 -21
  223. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
  224. package/src/shade/renderer/fluid/mac/FluidMacPasses.js +453 -427
  225. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts +6 -2
  226. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts.map +1 -1
  227. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +340 -282
  228. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +13 -5
  229. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
  230. package/src/shade/renderer/fluid/publish/FluidWindPublish.js +20 -10
  231. package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.d.ts +2 -2
  232. package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.js +2 -2
  233. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts +5 -3
  234. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts.map +1 -1
  235. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.js +147 -142
  236. package/src/shade/renderer/fluid/query/GPUFluidQueries.js +2 -2
  237. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  238. package/src/shade/renderer/geometry/GPUGeometryManager.js +5 -7
  239. package/src/shade/renderer/geometry/MeshletGeometry.d.ts +4 -1
  240. package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
  241. package/src/shade/renderer/geometry/MeshletGeometry.js +4 -1
  242. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts +20 -0
  243. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts.map +1 -1
  244. package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.js +35 -3
  245. package/src/shade/renderer/geometry/blas_from_meshlets.d.ts +9 -3
  246. package/src/shade/renderer/geometry/blas_from_meshlets.d.ts.map +1 -1
  247. package/src/shade/renderer/geometry/blas_from_meshlets.js +16 -30
  248. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts +14 -0
  249. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts.map +1 -0
  250. package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.js +33 -0
  251. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts +18 -21
  252. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts.map +1 -1
  253. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +78 -158
  254. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +18 -39
  255. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  256. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +39 -398
  257. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts +6 -7
  258. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts.map +1 -1
  259. package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.js +5 -7
  260. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts +36 -0
  261. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts.map +1 -0
  262. package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.js +179 -0
  263. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts +30 -0
  264. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts.map +1 -0
  265. package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.js +207 -0
  266. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts +52 -0
  267. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts.map +1 -0
  268. package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.js +464 -0
  269. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts +12 -0
  270. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
  271. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +37 -0
  272. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts.map +1 -1
  273. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js +4 -4
  274. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts.map +1 -1
  275. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js +2 -2
  276. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts.map +1 -1
  277. package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js +2 -2
  278. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  279. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +4 -4
  280. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts.map +1 -1
  281. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.js +2 -2
  282. package/src/shade/renderer/geometry/sr_create_group_RTX.d.ts.map +1 -1
  283. package/src/shade/renderer/geometry/sr_create_group_RTX.js +4 -4
  284. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
  285. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -0
  286. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
  287. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -0
  288. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
  289. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +372 -376
  290. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +9 -10
  291. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -1
  292. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +10 -11
  293. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +2 -2
  294. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +2 -2
  295. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +12 -8
  296. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -1
  297. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +109 -60
  298. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_sdf.js +2 -2
  299. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.js +2 -2
  300. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.d.ts +2 -2
  301. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js +70 -70
  302. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts +6 -7
  303. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts.map +1 -1
  304. package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.js +6 -7
  305. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +3 -3
  306. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +3 -3
  307. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.js +1 -1
  308. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +2 -2
  309. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +3 -3
  310. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts +69 -0
  311. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts.map +1 -0
  312. package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.js +89 -0
  313. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts +41 -0
  314. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts.map +1 -0
  315. package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.js +348 -0
  316. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts +34 -0
  317. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts.map +1 -0
  318. package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.js +291 -0
  319. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts +31 -0
  320. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts.map +1 -0
  321. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.js +175 -0
  322. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts +27 -0
  323. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts.map +1 -0
  324. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.js +48 -0
  325. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts +26 -0
  326. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts.map +1 -0
  327. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.js +118 -0
  328. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts +22 -0
  329. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts.map +1 -0
  330. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.js +143 -0
  331. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts +36 -0
  332. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts.map +1 -0
  333. package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.js +97 -0
  334. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts +49 -0
  335. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts.map +1 -0
  336. package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.js +265 -0
  337. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts +37 -0
  338. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts.map +1 -0
  339. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.js +109 -0
  340. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts +15 -0
  341. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts.map +1 -0
  342. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.js +85 -0
  343. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts +26 -0
  344. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts.map +1 -0
  345. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.js +200 -0
  346. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts +19 -0
  347. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts.map +1 -0
  348. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.js +81 -0
  349. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts +14 -0
  350. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts.map +1 -0
  351. package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.js +101 -0
  352. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts +19 -0
  353. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts.map +1 -0
  354. package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.js +361 -0
  355. package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts +3 -2
  356. package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts.map +1 -1
  357. package/src/shade/renderer/grass/press/shader_grass_press_mark.js +5 -3
  358. package/src/shade/renderer/grass/surface/shader_grass_surface_bake.d.ts.map +1 -1
  359. package/src/shade/renderer/grass/surface/shader_grass_surface_bake.js +5 -6
  360. package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
  361. package/src/shade/renderer/lightmap/GPULightMap.js +1 -0
  362. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  363. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -0
  364. package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
  365. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -0
  366. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts +49 -0
  367. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts.map +1 -0
  368. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.js +144 -0
  369. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts +71 -0
  370. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts.map +1 -0
  371. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.js +152 -0
  372. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts +21 -0
  373. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts.map +1 -0
  374. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.js +30 -0
  375. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts +101 -0
  376. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts.map +1 -0
  377. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.js +306 -0
  378. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +9 -0
  379. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -1
  380. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +11 -4
  381. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +8 -4
  382. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  383. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +60 -33
  384. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts +6 -6
  385. package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts.map +1 -1
  386. package/src/shade/renderer/scene/verify_gpu_tlas_build.js +23 -53
  387. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts +3 -1
  388. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts.map +1 -1
  389. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js +5 -3
  390. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts +28 -0
  391. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts.map +1 -0
  392. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js +29 -0
  393. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts +25 -0
  394. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts.map +1 -0
  395. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.js +97 -0
  396. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts +8 -0
  397. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts.map +1 -1
  398. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.js +23 -14
  399. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts +36 -0
  400. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts.map +1 -0
  401. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.js +222 -0
  402. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts +20 -0
  403. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts.map +1 -0
  404. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.js +30 -0
  405. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts +30 -0
  406. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts.map +1 -0
  407. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.js +91 -0
  408. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts +23 -0
  409. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts.map +1 -0
  410. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.js +40 -0
  411. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts +22 -0
  412. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts.map +1 -1
  413. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.js +121 -70
  414. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts +13 -1
  415. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts.map +1 -1
  416. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.js +117 -61
  417. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts +21 -0
  418. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts.map +1 -1
  419. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.js +111 -72
  420. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts +1 -2
  421. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts.map +1 -1
  422. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.js +83 -54
  423. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts +14 -0
  424. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts.map +1 -1
  425. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.js +92 -60
  426. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts +22 -0
  427. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts.map +1 -1
  428. package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.js +153 -106
  429. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts +21 -0
  430. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts.map +1 -1
  431. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.js +115 -74
  432. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts +5 -2
  433. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts.map +1 -1
  434. package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.js +89 -63
  435. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts +15 -0
  436. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts.map +1 -1
  437. package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.js +108 -63
  438. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts +14 -0
  439. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts.map +1 -1
  440. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.js +94 -60
  441. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  442. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +4 -4
  443. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts +69 -0
  444. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts.map +1 -0
  445. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.js +129 -0
  446. package/src/shade/renderer/trails/GPUTrailSystem.d.ts +164 -0
  447. package/src/shade/renderer/trails/GPUTrailSystem.d.ts.map +1 -0
  448. package/src/shade/renderer/trails/GPUTrailSystem.js +725 -0
  449. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts +14 -0
  450. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts.map +1 -0
  451. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.js +38 -0
  452. package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts +66 -0
  453. package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts.map +1 -0
  454. package/src/shade/renderer/trails/data/TRAIL_KNOT.js +154 -0
  455. package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts +19 -0
  456. package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts.map +1 -0
  457. package/src/shade/renderer/trails/data/TRAIL_RECORD.js +68 -0
  458. package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts +18 -0
  459. package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts.map +1 -0
  460. package/src/shade/renderer/trails/data/TRAIL_STATE.js +43 -0
  461. package/src/shade/renderer/trails/graph_trails.d.ts +58 -0
  462. package/src/shade/renderer/trails/graph_trails.d.ts.map +1 -0
  463. package/src/shade/renderer/trails/graph_trails.js +155 -0
  464. package/src/shade/renderer/trails/graph_trails_avboit.d.ts +126 -0
  465. package/src/shade/renderer/trails/graph_trails_avboit.d.ts.map +1 -0
  466. package/src/shade/renderer/trails/graph_trails_avboit.js +300 -0
  467. package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts +56 -0
  468. package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts.map +1 -0
  469. package/src/shade/renderer/trails/runtime/TrailFadeCurves.js +220 -0
  470. package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts +49 -0
  471. package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts.map +1 -0
  472. package/src/shade/renderer/trails/runtime/TrailKnotPool.js +162 -0
  473. package/src/shade/renderer/trails/runtime/TrailParameters.d.ts +52 -0
  474. package/src/shade/renderer/trails/runtime/TrailParameters.d.ts.map +1 -0
  475. package/src/shade/renderer/trails/runtime/TrailParameters.js +126 -0
  476. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts +23 -0
  477. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts.map +1 -0
  478. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.js +57 -0
  479. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts +14 -0
  480. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts.map +1 -0
  481. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.js +40 -0
  482. package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts +18 -0
  483. package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts.map +1 -0
  484. package/src/shade/renderer/trails/shaders/chunk_trail_seed.js +64 -0
  485. package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts +14 -0
  486. package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts.map +1 -0
  487. package/src/shade/renderer/trails/shaders/chunk_trail_segment.js +51 -0
  488. package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts +48 -0
  489. package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts.map +1 -0
  490. package/src/shade/renderer/trails/shaders/chunk_trail_update.js +197 -0
  491. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts +34 -0
  492. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts.map +1 -0
  493. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.js +111 -0
  494. package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts +24 -0
  495. package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts.map +1 -0
  496. package/src/shade/renderer/trails/shaders/shader_trail_avboit.js +78 -0
  497. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts +23 -0
  498. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts.map +1 -0
  499. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.js +130 -0
  500. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts +29 -0
  501. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts.map +1 -0
  502. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.js +78 -0
  503. package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts +18 -0
  504. package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts.map +1 -0
  505. package/src/shade/renderer/trails/shaders/shader_trail_seed.js +79 -0
  506. package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts +20 -0
  507. package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts.map +1 -0
  508. package/src/shade/renderer/trails/shaders/shader_trail_update.js +101 -0
  509. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -2
  510. package/src/shade/renderer/water/query/shader_water_surface_query.d.ts.map +1 -1
  511. package/src/shade/renderer/water/query/shader_water_surface_query.js +227 -227
  512. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
  513. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +7 -4
  514. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +2 -2
  515. package/src/shade/renderer/wind/GPUSceneWind.d.ts +36 -4
  516. package/src/shade/renderer/wind/GPUSceneWind.d.ts.map +1 -1
  517. package/src/shade/renderer/wind/GPUSceneWind.js +150 -4
  518. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts +9 -3
  519. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts.map +1 -1
  520. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.js +13 -3
  521. package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.d.ts +6 -6
  522. package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.js +6 -6
  523. package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts +39 -0
  524. package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts.map +1 -0
  525. package/src/shade/renderer/wind/chunk_fluid_turbulence.js +63 -0
  526. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts +10 -7
  527. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts.map +1 -1
  528. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.js +34 -11
  529. package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.d.ts +2 -2
  530. package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.js +2 -2
  531. package/src/shade/renderer/wind/wind_field_add_resources.d.ts +6 -4
  532. package/src/shade/renderer/wind/wind_field_add_resources.d.ts.map +1 -1
  533. package/src/shade/renderer/wind/wind_field_add_resources.js +9 -6
  534. package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts +0 -18
  535. package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts.map +0 -1
  536. package/src/engine/graphics/ecs/trail3d/advance_trail.js +0 -42
  537. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts +0 -14
  538. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts.map +0 -1
  539. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +0 -75
  540. package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts +0 -17
  541. package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts.map +0 -1
  542. package/src/engine/graphics/ecs/trail3d/trail_head_position.js +0 -19
  543. package/src/engine/graphics/trail/tube/TubeX.d.ts +0 -186
  544. package/src/engine/graphics/trail/tube/TubeX.d.ts.map +0 -1
  545. package/src/engine/graphics/trail/tube/TubeX.js +0 -575
  546. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts +0 -16
  547. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts.map +0 -1
  548. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.js +0 -34
  549. package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +0 -27
  550. package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +0 -1
  551. package/src/engine/graphics/trail/tube/tube_attributes_spec.js +0 -70
  552. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +0 -38
  553. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts.map +0 -1
  554. package/src/engine/graphics3/trail/trail_tube_write_geometry.js +0 -119
  555. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts +0 -18
  556. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts.map +0 -1
  557. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.js +0 -50
  558. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts +0 -23
  559. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts.map +0 -1
  560. package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.js +0 -87
  561. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts +0 -42
  562. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts.map +0 -1
  563. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.js +0 -141
  564. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts +0 -21
  565. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts.map +0 -1
  566. package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.js +0 -75
  567. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts +0 -17
  568. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts.map +0 -1
  569. package/src/shade/renderer/geometry/meshlet_batch_to_bvh.js +0 -247
  570. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts +0 -7
  571. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts.map +0 -1
  572. package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.js +0 -226
  573. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts +0 -8
  574. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts.map +0 -1
  575. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.js +0 -45
  576. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts +0 -3
  577. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts.map +0 -1
  578. package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.js +0 -105
  579. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts +0 -6
  580. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts.map +0 -1
  581. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.js +0 -86
  582. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts +0 -2
  583. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts.map +0 -1
  584. package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.js +0 -136
@@ -0,0 +1,144 @@
1
+ import { GPUShaderStage } from "../../../../descriptor/GPUShaderStage.js";
2
+ import { DepthStencilState } from "../../../../descriptor/pipeline/render/DepthStencilState.js";
3
+ import { RenderPipelineDescriptor } from "../../../../descriptor/pipeline/render/RenderPipelineDescriptor.js";
4
+ import { assert } from "../../../../../core/assert.js";
5
+ import { chunk_sample_volumetrics } from "../../../deferred/chunk_sample_volumetrics.js";
6
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
7
+ import { ShaderResourceGroupDescriptor } from "../../../shader/resource/ShaderResourceGroupDescriptor.js";
8
+ import { SAMPLER_LINEAR_UPSCALE } from "../../../texture/SAMPLER_LINEAR_UPSCALE.js";
9
+ import { VIEW_UNIFORM_STRUCT } from "../../../view/VIEW_UNIFORM_STRUCT.js";
10
+ import { VOLUMETRICS_METADATA_STRUCT } from "../../../volumetrics/VOLUMETRICS_METADATA_STRUCT.js";
11
+ import { AVBOIT_EXTINCT_TRANSMITTANCE } from "./AVBOIT_CONSTANTS.js";
12
+ import { AVBOIT_WARP_STRUCT } from "./AVBOIT_WARP_STRUCT.js";
13
+ import { AVBOIT_DRAW_TARGETS } from "./avboit_draw_fragment_body.js";
14
+ import { chunk_avboit_footprint_bias } from "./chunk_avboit_footprint_bias.js";
15
+ import { chunk_avboit_premultiplied_contribution } from "./chunk_avboit_premultiplied_contribution.js";
16
+ import { chunk_avboit_sample_transmittance } from "./chunk_avboit_sample_transmittance.js";
17
+ import { chunk_avboit_unlit_varyings } from "./chunk_avboit_unlit_varyings.js";
18
+ import { chunk_avboit_view_depth_to_virtual } from "./chunk_avboit_view_depth_to_virtual.js";
19
+
20
+ /**
21
+ * What the unlit draw reads once per pass: the view, the warp, the integral and the fog.
22
+ *
23
+ * @type {ShaderResourceGroupDescriptor}
24
+ */
25
+ export const AVBOIT_UNLIT_DRAW_PASS_GROUP = new ShaderResourceGroupDescriptor();
26
+
27
+ AVBOIT_UNLIT_DRAW_PASS_GROUP
28
+ .addUniform("view", VIEW_UNIFORM_STRUCT)
29
+ .addStorageBuffer("warp", AVBOIT_WARP_STRUCT)
30
+ // sampled through sLinear: linear, clamped on every axis, which is what the integral needs
31
+ .addTexture("tIntegral", "float", "3d")
32
+ .addSampler("sLinear", "filtering", SAMPLER_LINEAR_UPSCALE)
33
+ // volumetrics (composited inline)
34
+ .addUniform("volumetrics_metadata", VOLUMETRICS_METADATA_STRUCT)
35
+ .addTexture("tVolumetrics", "float", "3d")
36
+ .addTexture("tSTBN_vec3", "float", "3d");
37
+
38
+ /**
39
+ * The unlit AVBOIT draw's fragment stage, `fs_main`: unlit straight-alpha geometry — a dynamic mesh, a
40
+ * trail — drawn at internal resolution into the four accumulators the transparent meshes and the
41
+ * particles draw into (`avboit_draw_fragment_body`), so it composites against both order-independently.
42
+ * Any vertex stage that hands it `AVBOITUnlitVaryings` (`chunk_avboit_unlit_varyings`) can be linked
43
+ * with it.
44
+ *
45
+ * Per fragment: nothing at all if it has faded out (the unlit splat recorded nothing for it either),
46
+ * then the transmittance of everything in front from the integral texture — a fragment the volume
47
+ * already calls extinct is discarded unshaded — the volumetric fog at its depth, and the accumulators
48
+ * through `avboit_premultiplied_contribution`, the routing every side channel shares.
49
+ *
50
+ * The colour is straight alpha and unlit: it is premultiplied here and never emits — a fragment that
51
+ * can get past the first test covers something — so {@link avboit_unlit_draw_pipeline} does not write
52
+ * the emission target at all rather than blend zeros into it over every covered pixel.
53
+ *
54
+ * The enclosing shader binds {@link AVBOIT_UNLIT_DRAW_PASS_GROUP} and names its vertex entry point
55
+ * anything but `fs_main`.
56
+ *
57
+ * @type {CodeChunk}
58
+ */
59
+ export const chunk_avboit_unlit_draw_fragment = CodeChunk.from(
60
+ //language=WGSL
61
+ `
62
+ struct AVBOITUnlitDrawOutput {
63
+ @location(0) color : vec4<f32>,
64
+ @location(1) norm : vec4<f32>,
65
+ @location(2) extinction : vec4<f32>,
66
+ @location(3) emission : vec4<f32>,
67
+ }
68
+
69
+ @fragment
70
+ fn fs_main(fragment : AVBOITUnlitVaryings) -> AVBOITUnlitDrawOutput {
71
+ // a ribbon seen at an angle runs through depth across a voxel; see avboit_footprint_bias. Taken
72
+ // first, in uniform control flow
73
+ let footprint = avboit_footprint_bias(&warp, fwidth(avboit_view_depth_to_virtual(&warp, fragment.view_depth)));
74
+
75
+ if (fragment.color.a <= 0.0) {
76
+ // faded out: covers nothing, and straight alpha carries no light without coverage
77
+ discard;
78
+ }
79
+
80
+ let screen_uv = fragment.clip.xy / vec2<f32>(f32(view.width), f32(view.height));
81
+
82
+ let transmittance = avboit_sample_transmittance(&warp, tIntegral, sLinear, screen_uv, fragment.view_depth, footprint);
83
+
84
+ if (all(transmittance <= vec3<f32>(${AVBOIT_EXTINCT_TRANSMITTANCE}))) {
85
+ // nothing this fragment contributes survives what is in front of it; skip the shading
86
+ discard;
87
+ }
88
+
89
+ let volumetrics = sample_volumetrics(fragment.view_depth, screen_uv, fragment.clip.xy);
90
+
91
+ let premultiplied = vec4<f32>(fragment.color.rgb * fragment.color.a, fragment.color.a);
92
+
93
+ let contribution = avboit_premultiplied_contribution(premultiplied, transmittance, volumetrics);
94
+
95
+ var out : AVBOITUnlitDrawOutput;
96
+
97
+ out.color = contribution.color;
98
+ out.norm = contribution.norm;
99
+ out.extinction = contribution.extinction;
100
+ out.emission = contribution.emission;
101
+
102
+ return out;
103
+ }
104
+ `, [
105
+ chunk_avboit_unlit_varyings,
106
+ chunk_avboit_view_depth_to_virtual,
107
+ chunk_avboit_footprint_bias,
108
+ chunk_avboit_sample_transmittance,
109
+ chunk_sample_volumetrics,
110
+ chunk_avboit_premultiplied_contribution,
111
+ ]
112
+ );
113
+
114
+ /**
115
+ * The render pipeline for an unlit draw shader: additive into the accumulators with the emission
116
+ * target masked off, the opaque scene's depth tested and never written, both faces.
117
+ *
118
+ * @param {object} params
119
+ * @param {string} params.label
120
+ * @param {import("../../../shader/resource/ShaderResourceSetDescriptor.js").ShaderResourceSetDescriptor} params.resources
121
+ * the shader's resources; must hold {@link AVBOIT_UNLIT_DRAW_PASS_GROUP}
122
+ * @param {string} params.source the assembled shader, with a vertex entry point named `vs_main` and
123
+ * {@link chunk_avboit_unlit_draw_fragment}'s `fs_main`
124
+ * @returns {RenderPipelineDescriptor}
125
+ */
126
+ export function avboit_unlit_draw_pipeline({ label, resources, source }) {
127
+ assert.isString(label, "label");
128
+ assert.isString(source, "source");
129
+ assert.notEqual(resources.groups.indexOf(AVBOIT_UNLIT_DRAW_PASS_GROUP), -1, "resources must hold the unlit draw's pass group");
130
+
131
+ return RenderPipelineDescriptor.from({
132
+ label,
133
+ layout: resources.generatePipelineLayout(GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT),
134
+ vertex: { module: { code: source }, entryPoint: "vs_main" },
135
+ fragment: {
136
+ module: { code: source },
137
+ entryPoint: "fs_main",
138
+ // color, norm, extinction — and not emission
139
+ targets: AVBOIT_DRAW_TARGETS.map((target, i) => ({ ...target, writeMask: [0xF, 0xF, 0xF, 0][i] })),
140
+ },
141
+ depthStencil: DepthStencilState.from({ format: "depth32float", depthWriteEnabled: false, depthCompare: "greater" }),
142
+ primitive: { topology: "triangle-list", cullMode: "none" },
143
+ });
144
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * The render pipeline for an unlit splat shader: no depth, one never-written attachment to size the
3
+ * raster ({@link AVBOIT_UNLIT_SPLAT_SAMPLES} samples, not the volume's single-sampled one the meshlet
4
+ * and particle splats share), both faces — a trail is seen from inside and out.
5
+ *
6
+ * The layout is built group by group: the volume's atomics are fragment-only, and WebGPU refuses a
7
+ * read-write storage buffer that is visible to the vertex stage. Every other group is visible to both
8
+ * stages, so a group the shader shares with other pipelines keeps the one layout they all declare.
9
+ *
10
+ * @param {object} params
11
+ * @param {string} params.label
12
+ * @param {import("../../../shader/resource/ShaderResourceSetDescriptor.js").ShaderResourceSetDescriptor} params.resources
13
+ * the shader's resources; must hold {@link AVBOIT_UNLIT_SPLAT_PASS_GROUP} and `AVBOIT_SPLAT_VOLUME_GROUP`
14
+ * @param {string} params.source the assembled shader, with a vertex entry point named `vs_main` and
15
+ * {@link chunk_avboit_unlit_splat_fragment}'s `fs_main`
16
+ * @returns {RenderPipelineDescriptor}
17
+ */
18
+ export function avboit_unlit_splat_pipeline({ label, resources, source }: {
19
+ label: string;
20
+ resources: import("../../../shader/resource/ShaderResourceSetDescriptor.js").ShaderResourceSetDescriptor;
21
+ source: string;
22
+ }): RenderPipelineDescriptor;
23
+ /**
24
+ * Samples per pixel of the unlit splat's raster, which is what a fragment's extinction is weighted by
25
+ * the share of. Four, being the only count above one that WebGPU guarantees.
26
+ * @type {number}
27
+ */
28
+ export const AVBOIT_UNLIT_SPLAT_SAMPLES: number;
29
+ /**
30
+ * What the unlit splat reads once per pass: the warp, which places a view depth in the volume.
31
+ *
32
+ * @type {ShaderResourceGroupDescriptor}
33
+ */
34
+ export const AVBOIT_UNLIT_SPLAT_PASS_GROUP: ShaderResourceGroupDescriptor;
35
+ /**
36
+ * The unlit AVBOIT splat's fragment stage, `fs_main`: unlit straight-alpha geometry — a dynamic mesh,
37
+ * a trail — adding its extinction into the voxel volume through `avboit_splat_slice`, the same write
38
+ * path as the meshlet and particle splats, so a trail, a particle and a surface at one depth pile up in
39
+ * one field. Any vertex stage that hands it `AVBOITUnlitVaryings` (`chunk_avboit_unlit_varyings`) can
40
+ * be linked with it.
41
+ *
42
+ * Coverage is the varyings' alpha through `avboit_coverage` — the function the unlit draw weights the
43
+ * same fragment by — and `T_self = 1 - coverage`, untinted. A fragment that has faded to nothing covers
44
+ * nothing and writes nothing, which on a trail is its whole aged-out tail.
45
+ *
46
+ * **Weighted by the share of the voxel the triangle covers.** A voxel is eight pixels across, and a
47
+ * trail is often narrower than that. Sampled at the voxel's centre alone, a thin trail either crosses
48
+ * the centre and writes its full extinction there or misses it and writes nothing, so its occlusion of
49
+ * what lies behind it comes and goes as it moves by a fraction of a voxel. The raster has
50
+ * {@link AVBOIT_UNLIT_SPLAT_SAMPLES} samples per pixel, the fragment runs wherever any of them is
51
+ * covered, and its extinction is scaled by the covered fraction: the voxel gets the triangle's
52
+ * extinction averaged over its footprint, as a volume that coarse can hold it. The triangles of one
53
+ * mesh cover disjoint samples, so the fractions of the triangles sharing a voxel add up to at most one
54
+ * layer; a fully covered voxel is written exactly as an unweighted splat would write it. What remains
55
+ * is the average's own bias — a trail a fraction of a voxel wide occludes what is behind it by that
56
+ * fraction of its extinction — which holds still as the trail moves.
57
+ *
58
+ * Depth is the fragment's own view depth from the varyings, through curve → warp → physical and the
59
+ * two-slice linear split the other splats make. No depth attachment, for the reason the meshlet splat
60
+ * has none: a splat behind an opaque surface lies deeper than anything the draw will look it up for.
61
+ *
62
+ * The enclosing shader binds {@link AVBOIT_UNLIT_SPLAT_PASS_GROUP} and `AVBOIT_SPLAT_VOLUME_GROUP`,
63
+ * and names its vertex entry point anything but `fs_main`.
64
+ *
65
+ * @type {CodeChunk}
66
+ */
67
+ export const chunk_avboit_unlit_splat_fragment: CodeChunk;
68
+ import { RenderPipelineDescriptor } from "../../../../descriptor/pipeline/render/RenderPipelineDescriptor.js";
69
+ import { ShaderResourceGroupDescriptor } from "../../../shader/resource/ShaderResourceGroupDescriptor.js";
70
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
71
+ //# sourceMappingURL=avboit_unlit_splat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"avboit_unlit_splat.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.js"],"names":[],"mappings":"AAwGA;;;;;;;;;;;;;;;;GAgBG;AACH;IAP0B,KAAK,EAApB,MAAM;IACgG,SAAS,EAA/G,OAAO,yDAAyD,EAAE,2BAA2B;IAE9E,MAAM,EAArB,MAAM;IAEJ,wBAAwB,CAgCpC;AAzID;;;;GAIG;AACH,yCAFU,MAAM,CAE4B;AAE5C;;;;GAIG;AACH,4CAFU,6BAA6B,CAE0C;AAKjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,gDAFU,SAAS,CAyCjB;yCApGuC,oEAAoE;8CAG/D,2DAA2D;0BAD/E,uCAAuC"}
@@ -0,0 +1,152 @@
1
+ import { GPUShaderStage } from "../../../../descriptor/GPUShaderStage.js";
2
+ import { PipelineLayoutDescriptor } from "../../../../descriptor/pipeline/PipelineLayoutDescriptor.js";
3
+ import { RenderPipelineDescriptor } from "../../../../descriptor/pipeline/render/RenderPipelineDescriptor.js";
4
+ import { assert } from "../../../../../core/assert.js";
5
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
6
+ import { ShaderResourceGroupDescriptor } from "../../../shader/resource/ShaderResourceGroupDescriptor.js";
7
+ import { AVBOIT_WARP_STRUCT } from "./AVBOIT_WARP_STRUCT.js";
8
+ import { chunk_avboit_coverage } from "./chunk_avboit_coverage.js";
9
+ import { chunk_avboit_splat_slice } from "./chunk_avboit_splat_slice.js";
10
+ import { chunk_avboit_transmittance_to_extinction } from "./chunk_avboit_transmittance_to_extinction.js";
11
+ import { chunk_avboit_unlit_varyings } from "./chunk_avboit_unlit_varyings.js";
12
+ import { chunk_avboit_view_depth_to_physical } from "./chunk_avboit_view_depth_to_physical.js";
13
+ import { AVBOIT_SPLAT_DUMMY_FORMAT, AVBOIT_SPLAT_VOLUME_GROUP } from "./shader_avboit_splat.js";
14
+
15
+ /**
16
+ * Samples per pixel of the unlit splat's raster, which is what a fragment's extinction is weighted by
17
+ * the share of. Four, being the only count above one that WebGPU guarantees.
18
+ * @type {number}
19
+ */
20
+ export const AVBOIT_UNLIT_SPLAT_SAMPLES = 4;
21
+
22
+ /**
23
+ * What the unlit splat reads once per pass: the warp, which places a view depth in the volume.
24
+ *
25
+ * @type {ShaderResourceGroupDescriptor}
26
+ */
27
+ export const AVBOIT_UNLIT_SPLAT_PASS_GROUP = new ShaderResourceGroupDescriptor();
28
+
29
+ AVBOIT_UNLIT_SPLAT_PASS_GROUP
30
+ .addStorageBuffer("warp", AVBOIT_WARP_STRUCT);
31
+
32
+ /**
33
+ * The unlit AVBOIT splat's fragment stage, `fs_main`: unlit straight-alpha geometry — a dynamic mesh,
34
+ * a trail — adding its extinction into the voxel volume through `avboit_splat_slice`, the same write
35
+ * path as the meshlet and particle splats, so a trail, a particle and a surface at one depth pile up in
36
+ * one field. Any vertex stage that hands it `AVBOITUnlitVaryings` (`chunk_avboit_unlit_varyings`) can
37
+ * be linked with it.
38
+ *
39
+ * Coverage is the varyings' alpha through `avboit_coverage` — the function the unlit draw weights the
40
+ * same fragment by — and `T_self = 1 - coverage`, untinted. A fragment that has faded to nothing covers
41
+ * nothing and writes nothing, which on a trail is its whole aged-out tail.
42
+ *
43
+ * **Weighted by the share of the voxel the triangle covers.** A voxel is eight pixels across, and a
44
+ * trail is often narrower than that. Sampled at the voxel's centre alone, a thin trail either crosses
45
+ * the centre and writes its full extinction there or misses it and writes nothing, so its occlusion of
46
+ * what lies behind it comes and goes as it moves by a fraction of a voxel. The raster has
47
+ * {@link AVBOIT_UNLIT_SPLAT_SAMPLES} samples per pixel, the fragment runs wherever any of them is
48
+ * covered, and its extinction is scaled by the covered fraction: the voxel gets the triangle's
49
+ * extinction averaged over its footprint, as a volume that coarse can hold it. The triangles of one
50
+ * mesh cover disjoint samples, so the fractions of the triangles sharing a voxel add up to at most one
51
+ * layer; a fully covered voxel is written exactly as an unweighted splat would write it. What remains
52
+ * is the average's own bias — a trail a fraction of a voxel wide occludes what is behind it by that
53
+ * fraction of its extinction — which holds still as the trail moves.
54
+ *
55
+ * Depth is the fragment's own view depth from the varyings, through curve → warp → physical and the
56
+ * two-slice linear split the other splats make. No depth attachment, for the reason the meshlet splat
57
+ * has none: a splat behind an opaque surface lies deeper than anything the draw will look it up for.
58
+ *
59
+ * The enclosing shader binds {@link AVBOIT_UNLIT_SPLAT_PASS_GROUP} and `AVBOIT_SPLAT_VOLUME_GROUP`,
60
+ * and names its vertex entry point anything but `fs_main`.
61
+ *
62
+ * @type {CodeChunk}
63
+ */
64
+ export const chunk_avboit_unlit_splat_fragment = CodeChunk.from(
65
+ //language=WGSL
66
+ `
67
+ @fragment
68
+ fn fs_main(fragment : AVBOITUnlitVaryings, @builtin(sample_mask) sample_mask : u32) {
69
+ // the coverage the draw weights this fragment by, through the same function
70
+ let coverage = avboit_coverage(fragment.color.a);
71
+
72
+ if (coverage <= 0.0) {
73
+ // faded out: occludes nothing
74
+ return;
75
+ }
76
+
77
+ // the share of the voxel's samples this triangle covers
78
+ let footprint = f32(countOneBits(sample_mask)) / ${AVBOIT_UNLIT_SPLAT_SAMPLES}.0;
79
+
80
+ let extinction = avboit_transmittance_to_extinction(vec3<f32>(1.0 - coverage)) * footprint;
81
+
82
+ let p = avboit_view_depth_to_physical(&warp, fragment.view_depth);
83
+
84
+ // fragment.clip is @builtin(position): .xy the low-resolution pixel
85
+ let texel = vec2<u32>(fragment.clip.xy);
86
+ let column = texel.y * warp.voxel_width + texel.x;
87
+
88
+ // linear splat between the two slices around the fragment
89
+ let c = p - 0.5;
90
+ let slice = i32(floor(c));
91
+ let fraction = c - floor(c);
92
+
93
+ avboit_splat_slice(column, slice, extinction * (1.0 - fraction), texel);
94
+ avboit_splat_slice(column, slice + 1, extinction * fraction, texel);
95
+ }
96
+ `, [
97
+ chunk_avboit_unlit_varyings,
98
+ chunk_avboit_coverage,
99
+ chunk_avboit_transmittance_to_extinction,
100
+ chunk_avboit_view_depth_to_physical,
101
+ chunk_avboit_splat_slice,
102
+ ]
103
+ );
104
+
105
+ /**
106
+ * The render pipeline for an unlit splat shader: no depth, one never-written attachment to size the
107
+ * raster ({@link AVBOIT_UNLIT_SPLAT_SAMPLES} samples, not the volume's single-sampled one the meshlet
108
+ * and particle splats share), both faces — a trail is seen from inside and out.
109
+ *
110
+ * The layout is built group by group: the volume's atomics are fragment-only, and WebGPU refuses a
111
+ * read-write storage buffer that is visible to the vertex stage. Every other group is visible to both
112
+ * stages, so a group the shader shares with other pipelines keeps the one layout they all declare.
113
+ *
114
+ * @param {object} params
115
+ * @param {string} params.label
116
+ * @param {import("../../../shader/resource/ShaderResourceSetDescriptor.js").ShaderResourceSetDescriptor} params.resources
117
+ * the shader's resources; must hold {@link AVBOIT_UNLIT_SPLAT_PASS_GROUP} and `AVBOIT_SPLAT_VOLUME_GROUP`
118
+ * @param {string} params.source the assembled shader, with a vertex entry point named `vs_main` and
119
+ * {@link chunk_avboit_unlit_splat_fragment}'s `fs_main`
120
+ * @returns {RenderPipelineDescriptor}
121
+ */
122
+ export function avboit_unlit_splat_pipeline({ label, resources, source }) {
123
+ assert.isString(label, "label");
124
+ assert.isString(source, "source");
125
+
126
+ const groups = resources.groups;
127
+
128
+ assert.notEqual(groups.indexOf(AVBOIT_UNLIT_SPLAT_PASS_GROUP), -1, "resources must hold the unlit splat's pass group");
129
+ assert.notEqual(groups.indexOf(AVBOIT_SPLAT_VOLUME_GROUP), -1, "resources must hold the splat volume group");
130
+
131
+ const layout = PipelineLayoutDescriptor.from(
132
+ groups.map(group => group.generateBindGroupLayoutDescriptor(
133
+ group === AVBOIT_SPLAT_VOLUME_GROUP
134
+ ? GPUShaderStage.FRAGMENT
135
+ : GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT
136
+ )),
137
+ resources.immediateSize
138
+ );
139
+
140
+ return RenderPipelineDescriptor.from({
141
+ label,
142
+ layout,
143
+ vertex: { module: { code: source }, entryPoint: "vs_main" },
144
+ fragment: {
145
+ module: { code: source },
146
+ entryPoint: "fs_main",
147
+ targets: [{ format: AVBOIT_SPLAT_DUMMY_FORMAT, writeMask: 0 }],
148
+ },
149
+ primitive: { topology: "triangle-list", cullMode: "none" },
150
+ multisample: { count: AVBOIT_UNLIT_SPLAT_SAMPLES },
151
+ });
152
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * What a vertex stage hands the unlit AVBOIT fragment stages (`chunk_avboit_unlit_splat_fragment`,
3
+ * `chunk_avboit_unlit_draw_fragment`): `struct AVBOITUnlitVaryings`.
4
+ *
5
+ * - `clip` is the clip-space position.
6
+ * - `color` is straight, not premultiplied: RGB and the fragment's own opacity.
7
+ * - `view_depth` is the vertex's view-space depth, interpolated across the triangle. The splat
8
+ * positions a fragment's extinction by it and the draw looks the volume up at it, so both take it
9
+ * from here rather than reconstructing it from `@builtin(position).z`.
10
+ *
11
+ * `color` and `view_depth` are interpolated at the **centroid** of the samples a triangle covers. The
12
+ * splat is multisampled, and a thin triangle can cover some of a pixel's samples but not its centre;
13
+ * at the centre its depth and alpha would be extrapolated off the triangle's edge, which on a ribbon
14
+ * seen nearly edge-on lands the extinction slices away from the ribbon. The draw has one sample, where
15
+ * a fragment exists only if the centre is covered and the centroid is the centre.
16
+ *
17
+ * @type {CodeChunk}
18
+ */
19
+ export const chunk_avboit_unlit_varyings: CodeChunk;
20
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
21
+ //# sourceMappingURL=chunk_avboit_unlit_varyings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_avboit_unlit_varyings.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,0CAFU,SAAS,CAWjB;0BA7BwB,uCAAuC"}
@@ -0,0 +1,30 @@
1
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
2
+
3
+ /**
4
+ * What a vertex stage hands the unlit AVBOIT fragment stages (`chunk_avboit_unlit_splat_fragment`,
5
+ * `chunk_avboit_unlit_draw_fragment`): `struct AVBOITUnlitVaryings`.
6
+ *
7
+ * - `clip` is the clip-space position.
8
+ * - `color` is straight, not premultiplied: RGB and the fragment's own opacity.
9
+ * - `view_depth` is the vertex's view-space depth, interpolated across the triangle. The splat
10
+ * positions a fragment's extinction by it and the draw looks the volume up at it, so both take it
11
+ * from here rather than reconstructing it from `@builtin(position).z`.
12
+ *
13
+ * `color` and `view_depth` are interpolated at the **centroid** of the samples a triangle covers. The
14
+ * splat is multisampled, and a thin triangle can cover some of a pixel's samples but not its centre;
15
+ * at the centre its depth and alpha would be extrapolated off the triangle's edge, which on a ribbon
16
+ * seen nearly edge-on lands the extinction slices away from the ribbon. The draw has one sample, where
17
+ * a fragment exists only if the centre is covered and the centroid is the centre.
18
+ *
19
+ * @type {CodeChunk}
20
+ */
21
+ export const chunk_avboit_unlit_varyings = CodeChunk.from(
22
+ //language=WGSL
23
+ `
24
+ struct AVBOITUnlitVaryings {
25
+ @builtin(position) clip : vec4<f32>,
26
+ @location(0) @interpolate(perspective, centroid) color : vec4<f32>,
27
+ @location(1) @interpolate(perspective, centroid) view_depth : f32,
28
+ }
29
+ `
30
+ );
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Splat a channel's unlit geometry into the voxel volume.
3
+ *
4
+ * The raster is multisampled ({@link AVBOIT_UNLIT_SPLAT_SAMPLES}), so it cannot use the volume's
5
+ * single-sampled splat target: the pass makes its own at the volume's resolution, never written,
6
+ * cleared and discarded, and hands the volume's back untouched.
7
+ *
8
+ * @param {object} params
9
+ * @param {import("../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} params.graph
10
+ * @param {string} params.label the pass's label; its target is labelled after it
11
+ * @param {import("../../../../descriptor/pipeline/render/RenderPipelineDescriptor.js").RenderPipelineDescriptor} params.pipeline
12
+ * from `avboit_unlit_splat_pipeline`
13
+ * @param {import("../../../shader/resource/ShaderResourceSetDescriptor.js").ShaderResourceSetDescriptor} params.resources
14
+ * the pipeline's shader resources
15
+ * @param {Object<string, number>} params.inputs graph handles the channel's draws read, by name
16
+ * @param {number} params.warp graph handle
17
+ * @param {number[]} params.voxel_resolution the volume's width and height, which the raster is
18
+ * @param {{extinction: number, overflow: number, dummy: number}} params.volume the volume, to add to
19
+ * @param {function(): boolean} params.is_empty asked when the pass executes; `true` records no render pass
20
+ * @param {function(GPURenderPassEncoder, GraphicsContext, Object<string, *>): void} params.record issues
21
+ * the draws into the open pass, whose pass-level groups are set, with `inputs` resolved
22
+ * @returns {{extinction: number, overflow: number, dummy: number}} the volume after the write
23
+ */
24
+ export function graph_avboit_unlit_splat({ graph, label, pipeline, resources, inputs, warp, voxel_resolution, volume, is_empty, record, }: {
25
+ graph: import("../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
26
+ label: string;
27
+ pipeline: import("../../../../descriptor/pipeline/render/RenderPipelineDescriptor.js").RenderPipelineDescriptor;
28
+ resources: import("../../../shader/resource/ShaderResourceSetDescriptor.js").ShaderResourceSetDescriptor;
29
+ inputs: {
30
+ [x: string]: number;
31
+ };
32
+ warp: number;
33
+ voxel_resolution: number[];
34
+ volume: {
35
+ extinction: number;
36
+ overflow: number;
37
+ dummy: number;
38
+ };
39
+ is_empty: () => boolean;
40
+ record: (arg0: GPURenderPassEncoder, arg1: GraphicsContext, arg2: {
41
+ [x: string]: any;
42
+ }) => void;
43
+ }): {
44
+ extinction: number;
45
+ overflow: number;
46
+ dummy: number;
47
+ };
48
+ /**
49
+ * Draw a channel's unlit geometry into the four accumulators, depth-tested against the opaque scene.
50
+ *
51
+ * @param {object} params
52
+ * @param {import("../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} params.graph
53
+ * @param {string} params.label
54
+ * @param {import("../../../../descriptor/pipeline/render/RenderPipelineDescriptor.js").RenderPipelineDescriptor} params.pipeline
55
+ * from `avboit_unlit_draw_pipeline`
56
+ * @param {import("../../../shader/resource/ShaderResourceSetDescriptor.js").ShaderResourceSetDescriptor} params.resources
57
+ * the pipeline's shader resources
58
+ * @param {Object<string, number>} params.inputs graph handles the channel's draws read, by name
59
+ * @param {import("../../../view/GPUViewContext.js").GPUViewContext} params.view_ctx
60
+ * @param {number} params.depth_texture graph handle of the opaque scene's depth — tested, never written
61
+ * @param {number} params.warp graph handle
62
+ * @param {number} params.integral graph handle of the integral texture
63
+ * @param {number} params.volumetrics_lut graph handle
64
+ * @param {number} params.volumetrics_metadata graph handle
65
+ * @param {{color: number, norm: number, extinction: number, emission: number}} params.accumulators to add to
66
+ * @param {function(): boolean} params.is_empty asked when the pass executes; `true` records no render pass
67
+ * @param {function(GPURenderPassEncoder, GraphicsContext, Object<string, *>): void} params.record issues
68
+ * the draws into the open pass, whose pass-level group is set, with `inputs` resolved
69
+ * @returns {{color: number, norm: number, extinction: number, emission: number}} the accumulators after the draw
70
+ */
71
+ export function graph_avboit_unlit_draw({ graph, label, pipeline, resources, inputs, view_ctx, depth_texture, warp, integral, volumetrics_lut, volumetrics_metadata, accumulators, is_empty, record, }: {
72
+ graph: import("../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
73
+ label: string;
74
+ pipeline: import("../../../../descriptor/pipeline/render/RenderPipelineDescriptor.js").RenderPipelineDescriptor;
75
+ resources: import("../../../shader/resource/ShaderResourceSetDescriptor.js").ShaderResourceSetDescriptor;
76
+ inputs: {
77
+ [x: string]: number;
78
+ };
79
+ view_ctx: import("../../../view/GPUViewContext.js").GPUViewContext;
80
+ depth_texture: number;
81
+ warp: number;
82
+ integral: number;
83
+ volumetrics_lut: number;
84
+ volumetrics_metadata: number;
85
+ accumulators: {
86
+ color: number;
87
+ norm: number;
88
+ extinction: number;
89
+ emission: number;
90
+ };
91
+ is_empty: () => boolean;
92
+ record: (arg0: GPURenderPassEncoder, arg1: GraphicsContext, arg2: {
93
+ [x: string]: any;
94
+ }) => void;
95
+ }): {
96
+ color: number;
97
+ norm: number;
98
+ extinction: number;
99
+ emission: number;
100
+ };
101
+ //# sourceMappingURL=graph_avboit_unlit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph_avboit_unlit.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.js"],"names":[],"mappings":"AAuEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;IAfwG,KAAK,EAAlG,OAAO,iEAAiE,EAAE,UAAU;IACrE,KAAK,EAApB,MAAM;IACwG,QAAQ,EAAtH,OAAO,oEAAoE,EAAE,wBAAwB;IAEC,SAAS,EAA/G,OAAO,yDAAyD,EAAE,2BAA2B;IAE9D,MAAM;YAA9B,MAAM,GAAE,MAAM;;IACN,IAAI,EAAnB,MAAM;IACW,gBAAgB,EAAjC,MAAM,EAAE;IACsD,MAAM,EAApE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC;IACzB,QAAQ,QAAxB,OAAO;IAC8D,MAAM;YAAhC,MAAM;UAAO,IAAI;IAEtE;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CA4FjE;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;IAnBwG,KAAK,EAAlG,OAAO,iEAAiE,EAAE,UAAU;IACrE,KAAK,EAApB,MAAM;IACwG,QAAQ,EAAtH,OAAO,oEAAoE,EAAE,wBAAwB;IAEC,SAAS,EAA/G,OAAO,yDAAyD,EAAE,2BAA2B;IAE9D,MAAM;YAA9B,MAAM,GAAE,MAAM;;IAC4C,QAAQ,EAAzE,OAAO,iCAAiC,EAAE,cAAc;IACzC,aAAa,EAA5B,MAAM;IACS,IAAI,EAAnB,MAAM;IACS,QAAQ,EAAvB,MAAM;IACS,eAAe,EAA9B,MAAM;IACS,oBAAoB,EAAnC,MAAM;IACsE,YAAY,EAAxF;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC;IACvC,QAAQ,QAAxB,OAAO;IAC8D,MAAM;YAAhC,MAAM;UAAO,IAAI;IAEtE;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAkG/E"}