@woosh/meep-engine 3.33.0 → 3.35.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 (503) hide show
  1. package/editor/Editor.d.ts.map +1 -1
  2. package/editor/Editor.js +0 -3
  3. package/editor/ecs/component/prototypeObjectEditor.js +1 -165
  4. package/editor/ecs/component/registerBasicTypeEditors.d.ts.map +1 -1
  5. package/editor/ecs/component/registerBasicTypeEditors.js +0 -5
  6. package/editor/ecs/component/registerEngineComponentEditors.d.ts.map +1 -1
  7. package/editor/ecs/component/registerEngineComponentEditors.js +0 -20
  8. package/editor/process/SymbolicDisplayProcess.d.ts.map +1 -1
  9. package/editor/process/SymbolicDisplayProcess.js +100 -106
  10. package/editor/prototypeEditorShell.d.ts.map +1 -1
  11. package/editor/prototypeEditorShell.js +190 -186
  12. package/editor/templates/entity_templates.d.ts.map +1 -1
  13. package/editor/templates/entity_templates.js +10 -27
  14. package/editor/view/makeEntityDecorators.js +2 -2
  15. package/package.json +1 -1
  16. package/src/{engine/graphics/particles/particular/engine → core/geom/3d/aabb}/MovingBoundingBox.d.ts +3 -3
  17. package/src/core/geom/3d/aabb/MovingBoundingBox.d.ts.map +1 -0
  18. package/src/{engine/graphics/particles/particular/engine → core/geom/3d/aabb}/MovingBoundingBox.js +5 -5
  19. package/src/core/math/lookup/RGBA_LUT_HEATMAP_IR.d.ts +3 -0
  20. package/src/core/math/lookup/RGBA_LUT_HEATMAP_IR.d.ts.map +1 -0
  21. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGBA_LUT_HEATMAP_IR.js +1 -1
  22. package/src/core/math/lookup/RGB_LUT_INFERNO.d.ts +6 -0
  23. package/src/core/math/lookup/RGB_LUT_INFERNO.d.ts.map +1 -0
  24. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_INFERNO.js +1 -1
  25. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_TURBO.d.ts +1 -1
  26. package/src/core/math/lookup/RGB_LUT_TURBO.d.ts.map +1 -0
  27. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_TURBO.js +1 -1
  28. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_VIRIDIS.d.ts +1 -1
  29. package/src/core/math/lookup/RGB_LUT_VIRIDIS.d.ts.map +1 -0
  30. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_VIRIDIS.js +1 -1
  31. package/src/engine/animation/AnimatedActions.d.ts.map +1 -1
  32. package/src/engine/animation/AnimatedActions.js +2 -4
  33. package/src/engine/animation/AnimationUtils.d.ts +1 -17
  34. package/src/engine/animation/AnimationUtils.d.ts.map +1 -1
  35. package/src/engine/animation/AnimationUtils.js +138 -246
  36. package/src/engine/ecs/EntityManager.d.ts +1 -1
  37. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  38. package/src/engine/ecs/EntityManager.js +2 -2
  39. package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +268 -275
  40. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  41. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +0 -10
  42. package/src/engine/graphics/geometry/distribute_points_on_indexed_triangles.d.ts.map +1 -0
  43. package/src/engine/graphics/{particles/particular/engine/utils → geometry}/distribute_points_on_indexed_triangles.js +3 -3
  44. package/src/engine/graphics/{particles/particular/engine/utils/volume → texture/sampler}/lut_to_sampler.d.ts +1 -1
  45. package/src/engine/graphics/texture/sampler/lut_to_sampler.d.ts.map +1 -0
  46. package/src/engine/graphics/{particles/particular/engine/utils/volume → texture/sampler}/lut_to_sampler.js +1 -1
  47. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +0 -3
  48. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  49. package/src/engine/graphics3/GPUParticleEmitterSystem.js +0 -3
  50. package/src/engine/network/NetworkSession.d.ts +1 -1
  51. package/src/engine/network/NetworkSession.js +1 -1
  52. package/src/engine/physics/cloth/MEASUREMENTS.md +115 -0
  53. package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
  54. package/src/engine/physics/cloth/solver/cloth_contact_find.js +2 -0
  55. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts +9 -0
  56. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
  57. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +30 -7
  58. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  59. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
  60. package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +12 -2
  61. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +11 -2
  62. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
  63. package/src/engine/sound/ecs/audio/LiveEmitterSet.js +14 -7
  64. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts +6 -15
  65. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts.map +1 -1
  66. package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +161 -174
  67. package/src/shade/device/mock/SoftwareGPUBuffer.d.ts +5 -3
  68. package/src/shade/device/mock/SoftwareGPUBuffer.d.ts.map +1 -1
  69. package/src/shade/device/mock/SoftwareGPUBuffer.js +32 -3
  70. package/src/shade/device/timing/profile/GPUProfileSession.d.ts +25 -11
  71. package/src/shade/device/timing/profile/GPUProfileSession.d.ts.map +1 -1
  72. package/src/shade/device/timing/profile/GPUProfileSession.js +553 -474
  73. package/src/shade/playground/avboit/main.d.ts.map +1 -1
  74. package/src/shade/playground/avboit/main.js +888 -916
  75. package/src/shade/playground/caldera/main.js +73 -60
  76. package/src/shade/playground/particle_ecs/README.md +13 -7
  77. package/src/shade/playground/particle_ecs/bonfire_effects.d.ts +5 -5
  78. package/src/shade/playground/particle_ecs/bonfire_effects.js +5 -5
  79. package/src/shade/playground/particle_ecs/effects/smoke.json +1859 -1859
  80. package/src/shade/playground/particle_ecs/effects/soot.json +1605 -1605
  81. package/src/shade/playground/particle_system/README.md +1 -2
  82. package/src/shade/playground/profile_hotkey.d.ts.map +1 -1
  83. package/src/shade/playground/profile_hotkey.js +4 -40
  84. package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
  85. package/src/shade/playground/skinned_blas_refit/main.js +4 -39
  86. package/src/shade/playground/vgeo_runtime/main.js +25 -77
  87. package/src/shade/playground/vgeo_scene/main.js +2231 -2217
  88. package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
  89. package/src/shade/playground/volumetrics_froxel/main.js +4 -39
  90. package/src/shade/playground/volumetrics_froxel/measure.d.ts.map +1 -1
  91. package/src/shade/playground/volumetrics_froxel/measure.js +2 -4
  92. package/src/shade/renderer/GraphicsContext.d.ts +7 -0
  93. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  94. package/src/shade/renderer/GraphicsContext.js +11 -2
  95. package/src/shade/renderer/Renderer.d.ts +1 -1
  96. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  97. package/src/shade/renderer/Renderer.js +41 -1
  98. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +8 -0
  99. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  100. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +21 -0
  101. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +1 -1
  102. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  103. package/src/shade/renderer/geometry/GPUGeometryManager.js +9 -10
  104. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +5 -0
  105. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  106. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +11 -0
  107. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts +12 -0
  108. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts.map +1 -1
  109. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.js +25 -0
  110. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +115 -101
  111. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  112. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +282 -140
  113. package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +30 -0
  114. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +4 -1
  115. package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +536 -0
  116. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +6 -2
  117. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
  118. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +68 -19
  119. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts +2 -1
  120. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
  121. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +17 -1
  122. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts +4 -0
  123. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts.map +1 -1
  124. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +42 -12
  125. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +93 -12
  126. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
  127. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +166 -20
  128. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts.map +1 -1
  129. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js +30 -7
  130. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
  131. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +12 -5
  132. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -1
  133. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +2 -2
  134. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
  135. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +23 -13
  136. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts.map +1 -1
  137. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.js +1 -2
  138. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -1
  139. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +1 -2
  140. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
  141. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +10 -6
  142. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts +45 -17
  143. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts.map +1 -1
  144. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js +61 -19
  145. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts +8 -11
  146. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts.map +1 -1
  147. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.js +9 -16
  148. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
  149. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +25 -10
  150. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js +10 -8
  151. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.d.ts +1 -0
  152. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.js +19 -7
  153. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts +4 -2
  154. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts.map +1 -1
  155. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.js +4 -2
  156. package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.d.ts +4 -0
  157. package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.d.ts.map +1 -1
  158. package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.js +7 -0
  159. package/src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.d.ts.map +1 -1
  160. package/src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.js +1 -0
  161. package/src/shade/renderer/light/GPULightCollection.d.ts +9 -1
  162. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  163. package/src/shade/renderer/light/GPULightCollection.js +41 -0
  164. package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts +37 -0
  165. package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts.map +1 -0
  166. package/src/shade/renderer/light/environment/shader_project_environment_sh.js +105 -0
  167. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  168. package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
  169. package/src/shade/renderer/material/GPUMaterialManager.js +2 -0
  170. package/src/shade/renderer/particles/DESIGN.md +69 -18
  171. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +7 -1
  172. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  173. package/src/shade/renderer/particles/GPUParticleSystem.js +1247 -1244
  174. package/src/shade/renderer/particles/ParticleConstants.d.ts +1 -3
  175. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  176. package/src/shade/renderer/particles/ParticleConstants.js +1 -3
  177. package/src/shade/renderer/particles/graph_particles_avboit.d.ts +7 -1
  178. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  179. package/src/shade/renderer/particles/graph_particles_avboit.js +9 -0
  180. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts +3 -4
  181. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -1
  182. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +7 -6
  183. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +15 -9
  184. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts.map +1 -1
  185. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +29 -11
  186. package/src/shade/renderer/particles/shaders/chunk_particle_lighting_model.d.ts +24 -0
  187. package/src/shade/renderer/particles/shaders/chunk_particle_lighting_model.d.ts.map +1 -0
  188. package/src/shade/renderer/particles/shaders/chunk_particle_lighting_model.js +45 -0
  189. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts +3 -0
  190. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts.map +1 -1
  191. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +38 -0
  192. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  193. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +190 -185
  194. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts +45 -0
  195. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts.map +1 -0
  196. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.js +99 -0
  197. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts +4 -4
  198. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.js +36 -36
  199. package/src/shade/renderer/rasterize/bucket/shader_gather_bucket.d.ts +15 -0
  200. package/src/shade/renderer/rasterize/bucket/shader_gather_bucket.d.ts.map +1 -0
  201. package/src/shade/renderer/rasterize/bucket/shader_gather_bucket.js +103 -0
  202. package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.d.ts +3 -0
  203. package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.d.ts.map +1 -1
  204. package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.js +6 -1
  205. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts +26 -0
  206. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts.map +1 -0
  207. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.js +91 -0
  208. package/src/shade/renderer/rasterize/fast/graph_gather_meshes_from_buckets.d.ts +22 -0
  209. package/src/shade/renderer/rasterize/fast/graph_gather_meshes_from_buckets.d.ts.map +1 -0
  210. package/src/shade/renderer/rasterize/fast/graph_gather_meshes_from_buckets.js +102 -0
  211. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts +2 -1
  212. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
  213. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +28 -24
  214. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +8 -0
  215. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  216. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +5 -0
  217. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +8 -1
  218. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  219. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +9 -0
  220. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  221. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +32 -28
  222. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  223. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +9 -105
  224. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +5 -0
  225. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  226. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +11 -0
  227. package/src/shade/renderer/scene/GPUSceneContext.d.ts +11 -3
  228. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  229. package/src/shade/renderer/scene/GPUSceneContext.js +93 -21
  230. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +4 -1
  231. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
  232. package/src/shade/renderer/scene/rows/GPUSceneRows.js +5 -23
  233. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  234. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +63 -0
  235. package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.d.ts +12 -0
  236. package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.d.ts.map +1 -0
  237. package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.js +11 -0
  238. package/src/shade/renderer/shadow/map/Shadowmap.d.ts +15 -0
  239. package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
  240. package/src/shade/renderer/shadow/map/Shadowmap.js +17 -0
  241. package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.d.ts +25 -0
  242. package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.d.ts.map +1 -0
  243. package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.js +22 -0
  244. package/src/shade/renderer/shadow/map/shadowmap_update_score.d.ts.map +1 -1
  245. package/src/shade/renderer/shadow/map/shadowmap_update_score.js +5 -2
  246. package/src/shade/renderer/texture/TextureManager.d.ts +2 -1
  247. package/src/shade/renderer/texture/TextureManager.d.ts.map +1 -1
  248. package/src/shade/renderer/texture/TextureManager.js +4 -1
  249. package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +1 -1
  250. package/src/shade/renderer/util/Uint32BufferSamplingStats.d.ts +9 -1
  251. package/src/shade/renderer/util/Uint32BufferSamplingStats.d.ts.map +1 -1
  252. package/src/shade/renderer/util/Uint32BufferSamplingStats.js +55 -5
  253. package/src/shade/renderer/view/ViewManager.d.ts +7 -1
  254. package/src/shade/renderer/view/ViewManager.d.ts.map +1 -1
  255. package/src/shade/renderer/view/ViewManager.js +17 -1
  256. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
  257. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +1 -0
  258. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +13 -3
  259. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  260. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +9 -1
  261. package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.d.ts +39 -0
  262. package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.d.ts.map +1 -0
  263. package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.js +107 -0
  264. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts +15 -0
  265. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts.map +1 -0
  266. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.js +44 -0
  267. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts +19 -0
  268. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts.map +1 -0
  269. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.js +48 -0
  270. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts +29 -0
  271. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts.map +1 -0
  272. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.js +90 -0
  273. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_brick4.d.ts +10 -0
  274. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_brick4.d.ts.map +1 -0
  275. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_brick4.js +55 -0
  276. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_ibl.d.ts +10 -0
  277. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_ibl.d.ts.map +1 -0
  278. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_ibl.js +47 -0
  279. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_lpv.d.ts +10 -0
  280. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_lpv.d.ts.map +1 -0
  281. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_lpv.js +63 -0
  282. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts +17 -0
  283. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts.map +1 -0
  284. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.js +26 -0
  285. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +8 -1
  286. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  287. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +50 -2
  288. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  289. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +488 -436
  290. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts +1 -1
  291. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  292. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +254 -63
  293. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts +0 -20
  294. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts.map +0 -1
  295. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js +0 -35
  296. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts +0 -12
  297. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts.map +0 -1
  298. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.js +0 -17
  299. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts +0 -14
  300. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts.map +0 -1
  301. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.js +0 -18
  302. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts +0 -52
  303. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts.map +0 -1
  304. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.js +0 -58
  305. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts +0 -47
  306. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts.map +0 -1
  307. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.js +0 -58
  308. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts +0 -16
  309. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts.map +0 -1
  310. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.js +0 -21
  311. package/editor/particles/rebuildParticleEmitter.d.ts +0 -11
  312. package/editor/particles/rebuildParticleEmitter.d.ts.map +0 -1
  313. package/editor/particles/rebuildParticleEmitter.js +0 -31
  314. package/editor/process/ParticleEmitterRebuildProcess.d.ts +0 -66
  315. package/editor/process/ParticleEmitterRebuildProcess.d.ts.map +0 -1
  316. package/editor/process/ParticleEmitterRebuildProcess.js +0 -217
  317. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts +0 -18
  318. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts.map +0 -1
  319. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.js +0 -140
  320. package/src/engine/animation/removeEntityGenericEffect.d.ts +0 -18
  321. package/src/engine/animation/removeEntityGenericEffect.d.ts.map +0 -1
  322. package/src/engine/animation/removeEntityGenericEffect.js +0 -160
  323. package/src/engine/animation/removeEntityWithMeshParticlesEffect.d.ts +0 -16
  324. package/src/engine/animation/removeEntityWithMeshParticlesEffect.d.ts.map +0 -1
  325. package/src/engine/animation/removeEntityWithMeshParticlesEffect.js +0 -194
  326. package/src/engine/graphics/ecs/sprite/Sprite.d.ts +0 -15
  327. package/src/engine/graphics/ecs/sprite/Sprite.d.ts.map +0 -1
  328. package/src/engine/graphics/ecs/sprite/Sprite.js +0 -14
  329. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts +0 -11
  330. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +0 -1
  331. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +0 -144
  332. package/src/engine/graphics/particles/particular/engine/MovingBoundingBox.d.ts.map +0 -1
  333. package/src/engine/graphics/particles/particular/engine/ParticularEngine.d.ts +0 -61
  334. package/src/engine/graphics/particles/particular/engine/ParticularEngine.d.ts.map +0 -1
  335. package/src/engine/graphics/particles/particular/engine/ParticularEngine.js +0 -229
  336. package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.d.ts +0 -6
  337. package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.d.ts.map +0 -1
  338. package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.js +0 -8
  339. package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.d.ts +0 -7
  340. package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.d.ts.map +0 -1
  341. package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.js +0 -9
  342. package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.d.ts +0 -13
  343. package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.d.ts.map +0 -1
  344. package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.js +0 -12
  345. package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.d.ts +0 -3
  346. package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.d.ts.map +0 -1
  347. package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +0 -84
  348. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +0 -285
  349. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +0 -1
  350. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +0 -1201
  351. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.d.ts +0 -19
  352. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.d.ts.map +0 -1
  353. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js +0 -67
  354. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts +0 -197
  355. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts.map +0 -1
  356. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +0 -398
  357. package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.d.ts +0 -5
  358. package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.d.ts.map +0 -1
  359. package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.js +0 -4
  360. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts +0 -162
  361. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts.map +0 -1
  362. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +0 -472
  363. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts +0 -10
  364. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts.map +0 -1
  365. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +0 -37
  366. package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.d.ts +0 -9
  367. package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.d.ts.map +0 -1
  368. package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +0 -25
  369. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts +0 -19
  370. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts.map +0 -1
  371. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +0 -28
  372. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.d.ts +0 -19
  373. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.d.ts.map +0 -1
  374. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.js +0 -162
  375. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.d.ts +0 -5
  376. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.d.ts.map +0 -1
  377. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.js +0 -103
  378. package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.d.ts +0 -8
  379. package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.d.ts.map +0 -1
  380. package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.js +0 -28
  381. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts +0 -2
  382. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts.map +0 -1
  383. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +0 -2
  384. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts +0 -2
  385. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts.map +0 -1
  386. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.js +0 -2
  387. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.d.ts +0 -60
  388. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.d.ts.map +0 -1
  389. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.js +0 -128
  390. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.d.ts +0 -47
  391. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.d.ts.map +0 -1
  392. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +0 -77
  393. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.d.ts +0 -45
  394. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.d.ts.map +0 -1
  395. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.js +0 -93
  396. package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.d.ts +0 -95
  397. package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.d.ts.map +0 -1
  398. package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +0 -239
  399. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGBA_LUT_HEATMAP_IR.d.ts +0 -3
  400. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGBA_LUT_HEATMAP_IR.d.ts.map +0 -1
  401. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts +0 -6
  402. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts.map +0 -1
  403. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.d.ts.map +0 -1
  404. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.d.ts.map +0 -1
  405. package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.d.ts +0 -13
  406. package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.d.ts.map +0 -1
  407. package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.js +0 -28
  408. package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.d.ts +0 -9
  409. package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.d.ts.map +0 -1
  410. package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +0 -24
  411. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.d.ts +0 -13
  412. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.d.ts.map +0 -1
  413. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.js +0 -27
  414. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.d.ts +0 -33
  415. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.d.ts.map +0 -1
  416. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.js +0 -80
  417. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts +0 -49
  418. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts.map +0 -1
  419. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.js +0 -135
  420. package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.d.ts +0 -7
  421. package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.d.ts.map +0 -1
  422. package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.js +0 -14
  423. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.d.ts +0 -41
  424. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.d.ts.map +0 -1
  425. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.js +0 -59
  426. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.d.ts +0 -4
  427. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.d.ts.map +0 -1
  428. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +0 -56
  429. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.d.ts +0 -4
  430. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.d.ts.map +0 -1
  431. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +0 -84
  432. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts +0 -4
  433. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts.map +0 -1
  434. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +0 -80
  435. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.d.ts +0 -29
  436. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.d.ts.map +0 -1
  437. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.js +0 -43
  438. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.d.ts +0 -5
  439. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.d.ts.map +0 -1
  440. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +0 -104
  441. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.d.ts +0 -9
  442. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.d.ts.map +0 -1
  443. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.js +0 -11
  444. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.d.ts +0 -9
  445. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.d.ts.map +0 -1
  446. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.js +0 -64
  447. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.d.ts +0 -9
  448. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.d.ts.map +0 -1
  449. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +0 -172
  450. package/src/engine/graphics/particles/particular/engine/utils/distribute_points_on_indexed_triangles.d.ts.map +0 -1
  451. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts +0 -20
  452. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts.map +0 -1
  453. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +0 -84
  454. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts +0 -81
  455. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts.map +0 -1
  456. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +0 -200
  457. package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.d.ts +0 -6
  458. package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.d.ts.map +0 -1
  459. package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.js +0 -8
  460. package/src/engine/graphics/particles/particular/engine/utils/volume/lut_to_sampler.d.ts.map +0 -1
  461. package/src/engine/graphics/particles/particular/group/Operation.d.ts +0 -20
  462. package/src/engine/graphics/particles/particular/group/Operation.d.ts.map +0 -1
  463. package/src/engine/graphics/particles/particular/group/Operation.js +0 -20
  464. package/src/engine/graphics/particles/particular/group/OperationType.d.ts +0 -7
  465. package/src/engine/graphics/particles/particular/group/OperationType.d.ts.map +0 -1
  466. package/src/engine/graphics/particles/particular/group/OperationType.js +0 -9
  467. package/src/engine/graphics/particles/particular/group/ParticleAttribute.d.ts +0 -27
  468. package/src/engine/graphics/particles/particular/group/ParticleAttribute.d.ts.map +0 -1
  469. package/src/engine/graphics/particles/particular/group/ParticleAttribute.js +0 -27
  470. package/src/engine/graphics/particles/particular/group/ParticleAttributeType.d.ts +0 -8
  471. package/src/engine/graphics/particles/particular/group/ParticleAttributeType.d.ts.map +0 -1
  472. package/src/engine/graphics/particles/particular/group/ParticleAttributeType.js +0 -11
  473. package/src/engine/graphics/particles/particular/group/ParticleDataType.d.ts +0 -7
  474. package/src/engine/graphics/particles/particular/group/ParticleDataType.d.ts.map +0 -1
  475. package/src/engine/graphics/particles/particular/group/ParticleDataType.js +0 -10
  476. package/src/engine/graphics/particles/particular/group/ParticleSpecification.d.ts +0 -24
  477. package/src/engine/graphics/particles/particular/group/ParticleSpecification.d.ts.map +0 -1
  478. package/src/engine/graphics/particles/particular/group/ParticleSpecification.js +0 -48
  479. package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.d.ts +0 -7
  480. package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.d.ts.map +0 -1
  481. package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +0 -20
  482. package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.d.ts +0 -6
  483. package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.d.ts.map +0 -1
  484. package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.js +0 -162
  485. package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.d.ts +0 -8
  486. package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.d.ts.map +0 -1
  487. package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +0 -19
  488. package/src/engine/graphics3/ParticleEmitterSystem.d.ts +0 -77
  489. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +0 -1
  490. package/src/engine/graphics3/ParticleEmitterSystem.js +0 -307
  491. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +0 -10
  492. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +0 -1
  493. package/src/engine/graphics3/ParticleEmitterSystem3.js +0 -10
  494. package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts +0 -61
  495. package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts.map +0 -1
  496. package/src/engine/graphics3/particles/GPUParticularRenderer.js +0 -627
  497. package/src/engine/graphics3/particles/particle_gpu_records.d.ts +0 -85
  498. package/src/engine/graphics3/particles/particle_gpu_records.d.ts.map +0 -1
  499. package/src/engine/graphics3/particles/particle_gpu_records.js +0 -227
  500. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts +0 -35
  501. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +0 -1
  502. package/src/shade/renderer/particles/shaders/shader_particle_render.js +0 -135
  503. /package/src/engine/graphics/{particles/particular/engine/utils → geometry}/distribute_points_on_indexed_triangles.d.ts +0 -0
@@ -1,185 +1,190 @@
1
- import { RenderPipelineDescriptor } from "../../../descriptor/pipeline/render/RenderPipelineDescriptor.js";
2
- import { DepthStencilState } from "../../../descriptor/pipeline/render/DepthStencilState.js";
3
- import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
4
- import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
5
- import { chunk_sample_volumetrics } from "../../deferred/chunk_sample_volumetrics.js";
6
- import { AVBOIT_EXTINCT_TRANSMITTANCE } from "../../rasterize/native/avboit/AVBOIT_CONSTANTS.js";
7
- import { AVBOIT_WARP_STRUCT } from "../../rasterize/native/avboit/AVBOIT_WARP_STRUCT.js";
8
- import { AVBOIT_DRAW_TARGETS } from "../../rasterize/native/avboit/avboit_draw_fragment_body.js";
9
- import { chunk_avboit_sample_transmittance } from "../../rasterize/native/avboit/chunk_avboit_sample_transmittance.js";
10
- import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
11
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
12
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
13
- import { SAMPLER_LINEAR_UPSCALE } from "../../texture/SAMPLER_LINEAR_UPSCALE.js";
14
- import { VIEW_UNIFORM_STRUCT } from "../../view/VIEW_UNIFORM_STRUCT.js";
15
- import { VOLUMETRICS_METADATA_STRUCT } from "../../volumetrics/VOLUMETRICS_METADATA_STRUCT.js";
16
- import { EMITTER_FLAG } from "../data/PARTICLE_EMITTER_STRUCT.js";
17
- import { PARTICLE_SOFT_FADE_RANGE } from "../ParticleConstants.js";
18
- import { chunk_particle_avboit_contribution } from "./chunk_particle_avboit_contribution.js";
19
- import { chunk_particle_scene_view_depth } from "./chunk_particle_scene_view_depth.js";
20
- import { chunk_particle_billboard_vertex } from "./chunk_particle_billboard_vertex.js";
21
- import { chunk_particle_lighting_unlit } from "./chunk_particle_lighting.js";
22
-
23
- /**
24
- * The particles' AVBOIT draw: the billboard quads at internal resolution, depth-tested against the
25
- * opaque scene, into the four accumulators the transparent meshes draw into
26
- * (`avboit_draw_fragment_body`). The particle counterpart of `shader_avboit_draw_ibl`.
27
- *
28
- * Per fragment: the atlas sample times the particle colour, the soft-depth fade against the scene
29
- * depth and the lighting hook, the volumetric fog composite exactly as the mesh draw applies it,
30
- * then the transmittance of everything in front from the integral texture — and a fragment the
31
- * volume already calls extinct is discarded unshaded.
32
- *
33
- * What is written depends on how the particle blends:
34
- *
35
- * - **alpha / premultiplied** — a surface: `color += premultiplied × T`, `norm += coverage × T`,
36
- * `extinction += -log(1 - coverage)`, the same three the meshes write, with an untinted
37
- * `T_self = 1 - coverage`; the splat recorded exactly that.
38
- * - **additive** — light: `emission += premultiplied × T`, nothing else. It joins the resolve
39
- * attenuated by what is in front of it and outside the coverage normalization, which is what an
40
- * additive fragment means.
41
- *
42
- * The scene depth is bound twice: as the read-only depth attachment the pipeline tests against, and
43
- * as the texture the soft fade reads. Both are reads, which WebGPU allows within one pass; the pass
44
- * is recorded with the attachment read-only for that reason.
45
- */
46
-
47
- const resources = new ShaderResourceSetDescriptor();
48
-
49
- resources.createGroup()
50
- .addUniform("camera", CAMERA_UNIFORM_STRUCT)
51
- .addUniform("view", VIEW_UNIFORM_STRUCT)
52
- .addStorageBuffer("warp", AVBOIT_WARP_STRUCT)
53
- .addStorageBuffer("pool", WebGPUArray.u32, false)
54
- .addStorageBuffer("draw_list", WebGPUArray.u32, false)
55
- .addStorageBuffer("emitter_database", WebGPUArray.u32, false)
56
- .addTexture("atlas", "float")
57
- .addSampler("atlas_sampler", "filtering")
58
- .addTexture("scene_depth", "unfilterable-float")
59
- // sampled through sLinear: linear, clamped on every axis, which is what the integral needs
60
- .addTexture("tIntegral", "float", "3d")
61
- .addSampler("sLinear", "filtering", SAMPLER_LINEAR_UPSCALE)
62
- // volumetrics (composited inline)
63
- .addUniform("volumetrics_metadata", VOLUMETRICS_METADATA_STRUCT)
64
- .addTexture("tVolumetrics", "float", "3d")
65
- .addTexture("tSTBN_vec3", "float", "3d");
66
-
67
- const body = CodeChunk.from(
68
- /* language=wgsl */ `
69
- const PARTICLE_FLAG_SOFT_DEPTH : u32 = ${EMITTER_FLAG.SOFT_DEPTH}u;
70
- const PARTICLE_FLAG_LIGHTING : u32 = ${EMITTER_FLAG.LIGHTING}u;
71
- const PARTICLE_SOFT_FADE_RANGE : f32 = ${PARTICLE_SOFT_FADE_RANGE};
72
-
73
- struct ParticleAVBOITDrawOutput {
74
- @location(0) color : vec4<f32>,
75
- @location(1) norm : vec4<f32>,
76
- @location(2) extinction : vec4<f32>,
77
- @location(3) emission : vec4<f32>,
78
- }
79
-
80
- // Each draw uses the same GPU-owned alive list. Clip the other modes before rasterization.
81
- fn particle_avboit_vertex(vi : u32, ii : u32, blend : u32) -> ParticleVertexOut {
82
- var out = particle_billboard_vertex(vi, ii);
83
- if (particle_avboit_draw_blend(out.color, out.blend) != blend) {
84
- out.clip = vec4<f32>(2.0, 2.0, 2.0, 1.0);
85
- }
86
- return out;
87
- }
88
-
89
- @vertex
90
- fn vs_alpha(@builtin(vertex_index) vi : u32, @builtin(instance_index) ii : u32) -> ParticleVertexOut {
91
- return particle_avboit_vertex(vi, ii, PARTICLE_BLEND_ALPHA);
92
- }
93
-
94
- @vertex
95
- fn vs_additive(@builtin(vertex_index) vi : u32, @builtin(instance_index) ii : u32) -> ParticleVertexOut {
96
- return particle_avboit_vertex(vi, ii, PARTICLE_BLEND_ADDITIVE);
97
- }
98
-
99
- @vertex
100
- fn vs_general(@builtin(vertex_index) vi : u32, @builtin(instance_index) ii : u32) -> ParticleVertexOut {
101
- return particle_avboit_vertex(vi, ii, PARTICLE_BLEND_PREMULTIPLIED);
102
- }
103
-
104
- @fragment
105
- fn fs_main(in : ParticleVertexOut) -> ParticleAVBOITDrawOutput {
106
- let screen_uv = in.clip.xy / vec2<f32>(f32(view.width), f32(view.height));
107
-
108
- let transmittance = avboit_sample_transmittance(&warp, tIntegral, sLinear, screen_uv, in.view_depth);
109
-
110
- if (all(transmittance <= vec3<f32>(${AVBOIT_EXTINCT_TRANSMITTANCE}))) {
111
- // nothing this fragment contributes survives what is in front of it; skip the shading
112
- discard;
113
- }
114
-
115
- var color = textureSample(atlas, atlas_sampler, in.uv) * in.color;
116
-
117
- if ((in.flags & PARTICLE_FLAG_SOFT_DEPTH) != 0u) {
118
- let scene_vd = particle_scene_view_depth(textureLoad(scene_depth, vec2<i32>(in.clip.xy), 0).r, camera);
119
- color = particle_fade_color(color, in.blend, particle_soft_fade(scene_vd, in.view_depth, PARTICLE_SOFT_FADE_RANGE));
120
- }
121
-
122
- if ((in.flags & PARTICLE_FLAG_LIGHTING) != 0u) {
123
- color = particle_apply_lighting(color, in.world_position, normalize(in.normal));
124
- }
125
-
126
- if (particle_avboit_is_empty(color, in.blend)) {
127
- discard;
128
- }
129
-
130
- let volumetrics = sample_volumetrics(in.view_depth, screen_uv, in.clip.xy);
131
-
132
- let contribution = particle_avboit_contribution(color, in.blend, transmittance, volumetrics);
133
-
134
- var out : ParticleAVBOITDrawOutput;
135
-
136
- out.color = contribution.color;
137
- out.norm = contribution.norm;
138
- out.extinction = contribution.extinction;
139
- out.emission = contribution.emission;
140
-
141
- return out;
142
- }
143
- `, [
144
- chunk_particle_avboit_contribution,
145
- chunk_particle_scene_view_depth,
146
- chunk_particle_billboard_vertex,
147
- chunk_particle_lighting_unlit,
148
- chunk_sample_volumetrics,
149
- chunk_avboit_sample_transmittance,
150
- ]);
151
-
152
- const descriptor = ShaderDescriptor.from({ label: "Particle AVBOIT Draw", body, resources });
153
-
154
- /**
155
- * The variants share WGSL, bindings and attachments; only the vertex entry point and target writes
156
- * differ. Disabling unused targets avoids blending zeros over every billboard pixel.
157
- * @param {string} label
158
- * @param {string} entryPoint
159
- * @param {number[]} writeMasks
160
- * @returns {RenderPipelineDescriptor}
161
- */
162
- function create_draw_pipeline(label, entryPoint, writeMasks) {
163
- return RenderPipelineDescriptor.from({
164
- label,
165
- layout: resources.generatePipelineLayout(GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT),
166
- vertex: { module: { code: descriptor.source }, entryPoint },
167
- fragment: {
168
- module: { code: descriptor.source },
169
- entryPoint: "fs_main",
170
- targets: AVBOIT_DRAW_TARGETS.map((target, i) => ({ ...target, writeMask: writeMasks[i] })),
171
- },
172
- depthStencil: DepthStencilState.from({ format: "depth32float", depthWriteEnabled: false, depthCompare: "greater" }),
173
- primitive: { topology: "triangle-list", cullMode: "none" },
174
- });
175
- }
176
-
177
- export const PARTICLE_AVBOIT_DRAW_ALPHA_PIPELINE = create_draw_pipeline("Particle AVBOIT Draw Alpha", "vs_alpha", [0xF, 0xF, 0xF, 0]);
178
- export const PARTICLE_AVBOIT_DRAW_ADDITIVE_PIPELINE = create_draw_pipeline("Particle AVBOIT Draw Additive", "vs_additive", [0, 0, 0, 0xF]);
179
- export const PARTICLE_AVBOIT_DRAW_GENERAL_PIPELINE = create_draw_pipeline("Particle AVBOIT Draw General", "vs_general", [0xF, 0xF, 0xF, 0xF]);
180
-
181
- /** The draw shader's resource set, for building its bind group. */
182
- export const PARTICLE_AVBOIT_DRAW_RESOURCES = resources;
183
-
184
- /** The assembled shader, for the validity tier. */
185
- export const shader_particle_avboit_draw = descriptor;
1
+ import { RenderPipelineDescriptor } from "../../../descriptor/pipeline/render/RenderPipelineDescriptor.js";
2
+ import { DepthStencilState } from "../../../descriptor/pipeline/render/DepthStencilState.js";
3
+ import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
4
+ import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
5
+ import { chunk_sample_volumetrics } from "../../deferred/chunk_sample_volumetrics.js";
6
+ import { AVBOIT_EXTINCT_TRANSMITTANCE } from "../../rasterize/native/avboit/AVBOIT_CONSTANTS.js";
7
+ import { AVBOIT_WARP_STRUCT } from "../../rasterize/native/avboit/AVBOIT_WARP_STRUCT.js";
8
+ import { AVBOIT_DRAW_TARGETS } from "../../rasterize/native/avboit/avboit_draw_fragment_body.js";
9
+ import { chunk_avboit_sample_transmittance } from "../../rasterize/native/avboit/chunk_avboit_sample_transmittance.js";
10
+ import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
11
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
12
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
13
+ import { SAMPLER_LINEAR_UPSCALE } from "../../texture/SAMPLER_LINEAR_UPSCALE.js";
14
+ import { VIEW_UNIFORM_STRUCT } from "../../view/VIEW_UNIFORM_STRUCT.js";
15
+ import { VOLUMETRICS_METADATA_STRUCT } from "../../volumetrics/VOLUMETRICS_METADATA_STRUCT.js";
16
+ import { EMITTER_FLAG } from "../data/PARTICLE_EMITTER_STRUCT.js";
17
+ import { PARTICLE_SOFT_FADE_RANGE } from "../ParticleConstants.js";
18
+ import { chunk_particle_avboit_contribution } from "./chunk_particle_avboit_contribution.js";
19
+ import { chunk_particle_scene_view_depth } from "./chunk_particle_scene_view_depth.js";
20
+ import { chunk_particle_billboard_vertex } from "./chunk_particle_billboard_vertex.js";
21
+ import { chunk_particle_lighting } from "./chunk_particle_lighting.js";
22
+
23
+ /**
24
+ * The particles' AVBOIT draw: the billboard quads at internal resolution, depth-tested against the
25
+ * opaque scene, into the four accumulators the transparent meshes draw into
26
+ * (`avboit_draw_fragment_body`). The particle counterpart of `shader_avboit_draw_ibl`.
27
+ *
28
+ * Per fragment: the atlas sample times the particle colour, the soft-depth fade against the scene
29
+ * depth, lighting for an emitter flagged `EMITTER_FLAG.LIGHTING` (`chunk_particle_lighting`: the
30
+ * froxel irradiance volume: the lights and the indirect lighting), the volumetric fog composite exactly as the
31
+ * mesh draw applies it, then the transmittance of everything in front from the integral texture —
32
+ * and a fragment the volume already calls extinct is discarded unshaded. An emitter without the
33
+ * flag is its own colour, which is what an additive one wants.
34
+ *
35
+ * What is written depends on how the particle blends:
36
+ *
37
+ * - **alpha / premultiplied** — a surface: `color += premultiplied × T`, `norm += coverage × T`,
38
+ * `extinction += -log(1 - coverage)`, the same three the meshes write, with an untinted
39
+ * `T_self = 1 - coverage`; the splat recorded exactly that.
40
+ * - **additive** — light: `emission += premultiplied × T`, nothing else. It joins the resolve
41
+ * attenuated by what is in front of it and outside the coverage normalization, which is what an
42
+ * additive fragment means.
43
+ *
44
+ * The scene depth is bound twice: as the read-only depth attachment the pipeline tests against, and
45
+ * as the texture the soft fade reads. Both are reads, which WebGPU allows within one pass; the pass
46
+ * is recorded with the attachment read-only for that reason.
47
+ */
48
+
49
+ const resources = new ShaderResourceSetDescriptor();
50
+
51
+ resources.createGroup()
52
+ .addUniform("camera", CAMERA_UNIFORM_STRUCT)
53
+ .addUniform("view", VIEW_UNIFORM_STRUCT)
54
+ .addStorageBuffer("warp", AVBOIT_WARP_STRUCT)
55
+ .addStorageBuffer("pool", WebGPUArray.u32, false)
56
+ .addStorageBuffer("draw_list", WebGPUArray.u32, false)
57
+ .addStorageBuffer("emitter_database", WebGPUArray.u32, false)
58
+ .addTexture("atlas", "float")
59
+ .addSampler("atlas_sampler", "filtering")
60
+ .addTexture("scene_depth", "unfilterable-float")
61
+ // sampled through sLinear: linear, clamped on every axis, which is what the integral needs
62
+ .addTexture("tIntegral", "float", "3d")
63
+ .addSampler("sLinear", "filtering", SAMPLER_LINEAR_UPSCALE)
64
+ // volumetrics (composited inline)
65
+ .addUniform("volumetrics_metadata", VOLUMETRICS_METADATA_STRUCT)
66
+ .addTexture("tVolumetrics", "float", "3d")
67
+ .addTexture("tSTBN_vec3", "float", "3d")
68
+ // lighting (chunk_particle_lighting): the froxel irradiance volume, trilinear through sLinear
69
+ .addTexture("tIrradianceY", "float", "3d")
70
+ .addTexture("tIrradianceCoCg", "float", "3d");
71
+
72
+ const body = CodeChunk.from(
73
+ /* language=wgsl */ `
74
+ const PARTICLE_FLAG_SOFT_DEPTH : u32 = ${EMITTER_FLAG.SOFT_DEPTH}u;
75
+ const PARTICLE_FLAG_LIGHTING : u32 = ${EMITTER_FLAG.LIGHTING}u;
76
+ const PARTICLE_SOFT_FADE_RANGE : f32 = ${PARTICLE_SOFT_FADE_RANGE};
77
+
78
+ struct ParticleAVBOITDrawOutput {
79
+ @location(0) color : vec4<f32>,
80
+ @location(1) norm : vec4<f32>,
81
+ @location(2) extinction : vec4<f32>,
82
+ @location(3) emission : vec4<f32>,
83
+ }
84
+
85
+ // Each draw uses the same GPU-owned alive list. Clip the other modes before rasterization.
86
+ fn particle_avboit_vertex(vi : u32, ii : u32, blend : u32) -> ParticleVertexOut {
87
+ var out = particle_billboard_vertex(vi, ii);
88
+ if (particle_avboit_draw_blend(out.color, out.blend) != blend) {
89
+ out.clip = vec4<f32>(2.0, 2.0, 2.0, 1.0);
90
+ }
91
+ return out;
92
+ }
93
+
94
+ @vertex
95
+ fn vs_alpha(@builtin(vertex_index) vi : u32, @builtin(instance_index) ii : u32) -> ParticleVertexOut {
96
+ return particle_avboit_vertex(vi, ii, PARTICLE_BLEND_ALPHA);
97
+ }
98
+
99
+ @vertex
100
+ fn vs_additive(@builtin(vertex_index) vi : u32, @builtin(instance_index) ii : u32) -> ParticleVertexOut {
101
+ return particle_avboit_vertex(vi, ii, PARTICLE_BLEND_ADDITIVE);
102
+ }
103
+
104
+ @vertex
105
+ fn vs_general(@builtin(vertex_index) vi : u32, @builtin(instance_index) ii : u32) -> ParticleVertexOut {
106
+ return particle_avboit_vertex(vi, ii, PARTICLE_BLEND_PREMULTIPLIED);
107
+ }
108
+
109
+ @fragment
110
+ fn fs_main(in : ParticleVertexOut) -> ParticleAVBOITDrawOutput {
111
+ let screen_uv = in.clip.xy / vec2<f32>(f32(view.width), f32(view.height));
112
+
113
+ let transmittance = avboit_sample_transmittance(&warp, tIntegral, sLinear, screen_uv, in.view_depth);
114
+
115
+ if (all(transmittance <= vec3<f32>(${AVBOIT_EXTINCT_TRANSMITTANCE}))) {
116
+ // nothing this fragment contributes survives what is in front of it; skip the shading
117
+ discard;
118
+ }
119
+
120
+ var color = textureSample(atlas, atlas_sampler, in.uv) * in.color;
121
+
122
+ if ((in.flags & PARTICLE_FLAG_SOFT_DEPTH) != 0u) {
123
+ let scene_vd = particle_scene_view_depth(textureLoad(scene_depth, vec2<i32>(in.clip.xy), 0).r, camera);
124
+ color = particle_fade_color(color, in.blend, particle_soft_fade(scene_vd, in.view_depth, PARTICLE_SOFT_FADE_RANGE));
125
+ }
126
+
127
+ if ((in.flags & PARTICLE_FLAG_LIGHTING) != 0u) {
128
+ color = particle_apply_lighting(color, in.world_position, normalize(in.normal));
129
+ }
130
+
131
+ if (particle_avboit_is_empty(color, in.blend)) {
132
+ discard;
133
+ }
134
+
135
+ let volumetrics = sample_volumetrics(in.view_depth, screen_uv, in.clip.xy);
136
+
137
+ let contribution = particle_avboit_contribution(color, in.blend, transmittance, volumetrics);
138
+
139
+ var out : ParticleAVBOITDrawOutput;
140
+
141
+ out.color = contribution.color;
142
+ out.norm = contribution.norm;
143
+ out.extinction = contribution.extinction;
144
+ out.emission = contribution.emission;
145
+
146
+ return out;
147
+ }
148
+ `, [
149
+ chunk_particle_avboit_contribution,
150
+ chunk_particle_scene_view_depth,
151
+ chunk_particle_billboard_vertex,
152
+ chunk_particle_lighting,
153
+ chunk_sample_volumetrics,
154
+ chunk_avboit_sample_transmittance,
155
+ ]);
156
+
157
+ const descriptor = ShaderDescriptor.from({ label: "Particle AVBOIT Draw", body, resources });
158
+
159
+ /**
160
+ * The variants share WGSL, bindings and attachments; only the vertex entry point and target writes
161
+ * differ. Disabling unused targets avoids blending zeros over every billboard pixel.
162
+ * @param {string} label
163
+ * @param {string} entryPoint
164
+ * @param {number[]} writeMasks
165
+ * @returns {RenderPipelineDescriptor}
166
+ */
167
+ function create_draw_pipeline(label, entryPoint, writeMasks) {
168
+ return RenderPipelineDescriptor.from({
169
+ label,
170
+ layout: resources.generatePipelineLayout(GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT),
171
+ vertex: { module: { code: descriptor.source }, entryPoint },
172
+ fragment: {
173
+ module: { code: descriptor.source },
174
+ entryPoint: "fs_main",
175
+ targets: AVBOIT_DRAW_TARGETS.map((target, i) => ({ ...target, writeMask: writeMasks[i] })),
176
+ },
177
+ depthStencil: DepthStencilState.from({ format: "depth32float", depthWriteEnabled: false, depthCompare: "greater" }),
178
+ primitive: { topology: "triangle-list", cullMode: "none" },
179
+ });
180
+ }
181
+
182
+ export const PARTICLE_AVBOIT_DRAW_ALPHA_PIPELINE = create_draw_pipeline("Particle AVBOIT Draw Alpha", "vs_alpha", [0xF, 0xF, 0xF, 0]);
183
+ export const PARTICLE_AVBOIT_DRAW_ADDITIVE_PIPELINE = create_draw_pipeline("Particle AVBOIT Draw Additive", "vs_additive", [0, 0, 0, 0xF]);
184
+ export const PARTICLE_AVBOIT_DRAW_GENERAL_PIPELINE = create_draw_pipeline("Particle AVBOIT Draw General", "vs_general", [0xF, 0xF, 0xF, 0xF]);
185
+
186
+ /** The draw shader's resource set, for building its bind group. */
187
+ export const PARTICLE_AVBOIT_DRAW_RESOURCES = resources;
188
+
189
+ /** The assembled shader, for the validity tier. */
190
+ export const shader_particle_avboit_draw = descriptor;
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Draw one view's meshlets, of several opaque buckets at once, each bucket under its own pipeline
3
+ * state.
4
+ *
5
+ * The other half of cutting a view once (CUT_PLAN_2026_09_14 §7 6b). Expansion and the
6
+ * virtual-geometry cut run over every opaque instance of the view together, so what comes out is
7
+ * one collection with every bucket in it, and the buckets are separated here, after the fact: sort
8
+ * by bucket, then one draw per bucket over its slice.
9
+ *
10
+ * With a single bucket there is nothing to separate — every meshlet is in it — and the collection
11
+ * is drawn as it is.
12
+ *
13
+ * @param {Object} options
14
+ * @param {FrameGraph} options.graph
15
+ * @param {GPUViewContext} options.view
16
+ * @param {number} options.input_meshlets every meshlet to draw, all of them in `buckets`
17
+ * @param {{draw_mode: number, side: number, bucket_id: number}[]} options.buckets the opaque
18
+ * buckets drawn, as {@link rasterization_opaque_buckets} yields them; at least one
19
+ * @param {number} options.depth
20
+ * @param {number[]} options.color_targets
21
+ * @param {RenderPassDescriptor} options.pass_descriptor
22
+ * @param {boolean} options.clear_targets whether the first draw clears
23
+ * @param {Readonly<Record<number, GPUCullMode>>} options.cull_policy
24
+ * @param {number[]} [options.viewport]
25
+ * @param {GPUCollectionLimits} options.limits
26
+ * @returns {[number, number[]]} depth and colour handles, as {@link graph_meshlets_rasterize}
27
+ */
28
+ export function graph_meshlets_rasterize_by_bucket({ graph, view, input_meshlets, buckets, depth, color_targets, pass_descriptor, clear_targets, cull_policy, viewport, limits, }: {
29
+ graph: FrameGraph;
30
+ view: GPUViewContext;
31
+ input_meshlets: number;
32
+ buckets: {
33
+ draw_mode: number;
34
+ side: number;
35
+ bucket_id: number;
36
+ }[];
37
+ depth: number;
38
+ color_targets: number[];
39
+ pass_descriptor: RenderPassDescriptor;
40
+ clear_targets: boolean;
41
+ cull_policy: Readonly<Record<number, GPUCullMode>>;
42
+ viewport?: number[];
43
+ limits: GPUCollectionLimits;
44
+ }): [number, number[]];
45
+ //# sourceMappingURL=graph_meshlets_rasterize_by_bucket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph_meshlets_rasterize_by_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH;IAd+B,KAAK;IACD,IAAI;IACZ,cAAc,EAA9B,MAAM;IAC0D,OAAO,EAAvE;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,EAAE;IAEtC,KAAK,EAArB,MAAM;IACY,aAAa,EAA/B,MAAM,EAAE;IACsB,eAAe;IAC5B,aAAa,EAA9B,OAAO;IACwC,WAAW,EAA1D,SAAS,OAAO,MAAM,cAAc,CAAC;IAClB,QAAQ,GAA3B,MAAM,EAAE;IACqB,MAAM;IACjC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAmE9B"}
@@ -0,0 +1,99 @@
1
+ import { assert } from "../../../../core/assert.js";
2
+ import { graph_extract_meshlets_from_bucket } from "../expand/bucket/meshlet/graph_extract_meshlets_from_bucket.js";
3
+ import { graph_sort_meshlets_by_bucket_id } from "../expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.js";
4
+ import { graph_meshlets_rasterize } from "../expand/graph_meshlets_rasterize.js";
5
+ import { construct_primitive_state } from "./construct_primitive_state.js";
6
+
7
+ /**
8
+ * Draw one view's meshlets, of several opaque buckets at once, each bucket under its own pipeline
9
+ * state.
10
+ *
11
+ * The other half of cutting a view once (CUT_PLAN_2026_09_14 §7 6b). Expansion and the
12
+ * virtual-geometry cut run over every opaque instance of the view together, so what comes out is
13
+ * one collection with every bucket in it, and the buckets are separated here, after the fact: sort
14
+ * by bucket, then one draw per bucket over its slice.
15
+ *
16
+ * With a single bucket there is nothing to separate — every meshlet is in it — and the collection
17
+ * is drawn as it is.
18
+ *
19
+ * @param {Object} options
20
+ * @param {FrameGraph} options.graph
21
+ * @param {GPUViewContext} options.view
22
+ * @param {number} options.input_meshlets every meshlet to draw, all of them in `buckets`
23
+ * @param {{draw_mode: number, side: number, bucket_id: number}[]} options.buckets the opaque
24
+ * buckets drawn, as {@link rasterization_opaque_buckets} yields them; at least one
25
+ * @param {number} options.depth
26
+ * @param {number[]} options.color_targets
27
+ * @param {RenderPassDescriptor} options.pass_descriptor
28
+ * @param {boolean} options.clear_targets whether the first draw clears
29
+ * @param {Readonly<Record<number, GPUCullMode>>} options.cull_policy
30
+ * @param {number[]} [options.viewport]
31
+ * @param {GPUCollectionLimits} options.limits
32
+ * @returns {[number, number[]]} depth and colour handles, as {@link graph_meshlets_rasterize}
33
+ */
34
+ export function graph_meshlets_rasterize_by_bucket({
35
+ graph,
36
+ view,
37
+ input_meshlets,
38
+ buckets,
39
+ depth,
40
+ color_targets,
41
+ pass_descriptor,
42
+ clear_targets,
43
+ cull_policy,
44
+ viewport,
45
+ limits,
46
+ }) {
47
+ assert.isArray(buckets, 'buckets');
48
+ assert.greaterThanOrEqual(buckets.length, 1, 'buckets.length');
49
+
50
+ if (buckets.length === 1) {
51
+ const { draw_mode, side } = buckets[0];
52
+
53
+ return graph_meshlets_rasterize({
54
+ graph,
55
+ view,
56
+ input_meshlets,
57
+ depth,
58
+ color_targets,
59
+ pass_descriptor,
60
+ clear_targets,
61
+ primitive_state: construct_primitive_state(draw_mode, side, cull_policy),
62
+ viewport,
63
+ });
64
+ }
65
+
66
+ const sorted = graph_sort_meshlets_by_bucket_id({
67
+ graph,
68
+ input_meshlets,
69
+ scene_ctx: view.scene,
70
+ limits,
71
+ });
72
+
73
+ let clear = clear_targets;
74
+
75
+ for (const { draw_mode, side, bucket_id } of buckets) {
76
+ const meshlets = graph_extract_meshlets_from_bucket({
77
+ graph,
78
+ buckets: sorted,
79
+ bucket_id,
80
+ limits,
81
+ });
82
+
83
+ [depth, color_targets] = graph_meshlets_rasterize({
84
+ graph,
85
+ view,
86
+ input_meshlets: meshlets,
87
+ depth,
88
+ color_targets,
89
+ pass_descriptor,
90
+ clear_targets: clear,
91
+ primitive_state: construct_primitive_state(draw_mode, side, cull_policy),
92
+ viewport,
93
+ });
94
+
95
+ clear = false;
96
+ }
97
+
98
+ return [depth, color_targets];
99
+ }
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * The opaque rasterization buckets a scene has anything in, once each.
3
3
  *
4
- * Every opaque path records one pass per bucket, and the pass is expensive — extract, expand to
5
- * meshlets, select a virtual-geometry cut, one render pass. So what is iterated has to be the
6
- * *buckets*, and iterating `ShadeDrawSide` is not that: `Front` and `Back` are one bucket, and a
7
- * loop over the enum visits it twice and draws the scene's single-sided geometry twice.
4
+ * Every opaque path records work per bucket — a filter, a slice of the sorted meshlets, a render
5
+ * pass. So what is iterated has to be the *buckets*, and iterating `ShadeDrawSide` is not that:
6
+ * `Front` and `Back` are one bucket, and a loop over the enum visits it twice and draws the scene's
7
+ * single-sided geometry twice.
8
8
  *
9
9
  * Which is why this exists rather than the three callers each writing the loop: the enum is the
10
10
  * obvious thing to reach for and it is wrong, and it is wrong in a way that costs a whole pass and
@@ -1,36 +1,36 @@
1
- import { ShadeDrawMode } from "../../material/ShadeDrawMode.js";
2
- import { TransparencyMode } from "../../material/TransparencyMode.js";
3
- import { rasterization_material_bucket } from "../expand/bucket/chunk_rasterization_material_bucket.js";
4
- import { RASTERIZATION_BUCKET_SIDES } from "./construct_primitive_state.js";
5
-
6
- /**
7
- * The opaque rasterization buckets a scene has anything in, once each.
8
- *
9
- * Every opaque path records one pass per bucket, and the pass is expensive — extract, expand to
10
- * meshlets, select a virtual-geometry cut, one render pass. So what is iterated has to be the
11
- * *buckets*, and iterating `ShadeDrawSide` is not that: `Front` and `Back` are one bucket, and a
12
- * loop over the enum visits it twice and draws the scene's single-sided geometry twice.
13
- *
14
- * Which is why this exists rather than the three callers each writing the loop: the enum is the
15
- * obvious thing to reach for and it is wrong, and it is wrong in a way that costs a whole pass and
16
- * shows up in nothing but a frame time.
17
- *
18
- * @param {Set<number>} active_buckets bucket ids any material in the scene asks for
19
- * @yields {{draw_mode: ShadeDrawMode, side: ShadeDrawSide, bucket_id: number}} `side` is the
20
- * bucket's representative, which is what {@link construct_primitive_state} wants
21
- */
22
- export function* rasterization_opaque_buckets(active_buckets) {
23
- for (const draw_mode of Object.values(ShadeDrawMode)) {
24
- for (const side of RASTERIZATION_BUCKET_SIDES) {
25
-
26
- const bucket_id = rasterization_material_bucket(TransparencyMode.Opaque, draw_mode, side);
27
-
28
- if (!active_buckets.has(bucket_id)) {
29
- // no matching materials, skip
30
- continue;
31
- }
32
-
33
- yield { draw_mode, side, bucket_id };
34
- }
35
- }
36
- }
1
+ import { ShadeDrawMode } from "../../material/ShadeDrawMode.js";
2
+ import { TransparencyMode } from "../../material/TransparencyMode.js";
3
+ import { rasterization_material_bucket } from "../expand/bucket/chunk_rasterization_material_bucket.js";
4
+ import { RASTERIZATION_BUCKET_SIDES } from "./construct_primitive_state.js";
5
+
6
+ /**
7
+ * The opaque rasterization buckets a scene has anything in, once each.
8
+ *
9
+ * Every opaque path records work per bucket — a filter, a slice of the sorted meshlets, a render
10
+ * pass. So what is iterated has to be the *buckets*, and iterating `ShadeDrawSide` is not that:
11
+ * `Front` and `Back` are one bucket, and a loop over the enum visits it twice and draws the scene's
12
+ * single-sided geometry twice.
13
+ *
14
+ * Which is why this exists rather than the three callers each writing the loop: the enum is the
15
+ * obvious thing to reach for and it is wrong, and it is wrong in a way that costs a whole pass and
16
+ * shows up in nothing but a frame time.
17
+ *
18
+ * @param {Set<number>} active_buckets bucket ids any material in the scene asks for
19
+ * @yields {{draw_mode: ShadeDrawMode, side: ShadeDrawSide, bucket_id: number}} `side` is the
20
+ * bucket's representative, which is what {@link construct_primitive_state} wants
21
+ */
22
+ export function* rasterization_opaque_buckets(active_buckets) {
23
+ for (const draw_mode of Object.values(ShadeDrawMode)) {
24
+ for (const side of RASTERIZATION_BUCKET_SIDES) {
25
+
26
+ const bucket_id = rasterization_material_bucket(TransparencyMode.Opaque, draw_mode, side);
27
+
28
+ if (!active_buckets.has(bucket_id)) {
29
+ // no matching materials, skip
30
+ continue;
31
+ }
32
+
33
+ yield { draw_mode, side, bucket_id };
34
+ }
35
+ }
36
+ }