@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,1201 +0,0 @@
1
- import { assert } from "../../../../../../core/assert.js";
2
- import { BvhClient } from "../../../../../../core/bvh2/bvh3/BvhClient.js";
3
- import { combine_hash } from "../../../../../../core/collection/array/combine_hash.js";
4
- import List from "../../../../../../core/collection/list/List.js";
5
- import { SCRATCH_UINT32_TRAVERSAL_STACK } from "../../../../../../core/collection/SCRATCH_UINT32_TRAVERSAL_STACK.js";
6
- import { AABB3 } from "../../../../../../core/geom/3d/aabb/AABB3.js";
7
- import { aabb3_array_combine } from "../../../../../../core/geom/3d/aabb/aabb3_array_combine.js";
8
- import { aabb3_expand_array } from "../../../../../../core/geom/3d/aabb/aabb3_expand_array.js";
9
- import { m4_compose } from "../../../../../../core/geom/3d/mat4/m4_compose.js";
10
- import Quaternion from "../../../../../../core/geom/Quaternion.js";
11
- import { v3_dot_array } from "../../../../../../core/geom/vec3/v3_dot_array.js";
12
- import Vector3 from "../../../../../../core/geom/Vector3.js";
13
- import { lerp } from "../../../../../../core/math/lerp.js";
14
- import { max2 } from "../../../../../../core/math/max2.js";
15
- import { min2 } from "../../../../../../core/math/min2.js";
16
- import { BlendingType } from "../../../../texture/sampler/BlendingType.js";
17
- import { ParameterSet } from "../parameter/ParameterSet.js";
18
- import { ParticleParameter } from "../parameter/ParticleParameter.js";
19
- import { update_parameters } from "../simulator/update_parameters.js";
20
- import { computeEmissionFunction } from "./computeEmissionFunction.js";
21
- import {
22
- PARTICLE_ATTRIBUTE_AGE,
23
- PARTICLE_ATTRIBUTE_BLEND,
24
- PARTICLE_ATTRIBUTE_DEATH_AGE,
25
- PARTICLE_ATTRIBUTE_LAYER_POSITION,
26
- PARTICLE_ATTRIBUTE_POSITION,
27
- PARTICLE_ATTRIBUTE_ROTATION,
28
- PARTICLE_ATTRIBUTE_ROTATION_SPEED,
29
- PARTICLE_ATTRIBUTE_SIZE,
30
- PARTICLE_ATTRIBUTE_SIZE_INITIAL,
31
- PARTICLE_ATTRIBUTE_UV,
32
- PARTICLE_ATTRIBUTE_VELOCITY
33
- } from "./PARTICLE_ATTRIBUTES.js";
34
- import { ParticleEmitterFlag } from "./ParticleEmitterFlag.js";
35
- import { ParticleLayer } from "./ParticleLayer.js";
36
- import { ParticleParameters } from "./ParticleParameters.js";
37
- import { ParticlePool } from "./ParticlePool.js";
38
- import { PARTICULAR_PARTICLE_SPECIFICATION } from "./PARTICULAR_PARTICLE_SPECIFICATION.js";
39
- import { write_particle_patch_uv } from "./write_particle_patch_uv.js";
40
-
41
-
42
- const SERIALIZABLE_FLAGS = ParticleEmitterFlag.PreWarm
43
- | ParticleEmitterFlag.DepthSorting
44
- | ParticleEmitterFlag.DepthReadDisabled
45
- | ParticleEmitterFlag.DepthSoftDisabled
46
- | ParticleEmitterFlag.AlignOnVelocity
47
- ;
48
-
49
- /**
50
- * Used to store AABB3 corners during bounding box calculation
51
- * @readonly
52
- * @type {Float64Array}
53
- */
54
- const corners = new Float64Array(24);
55
-
56
- const scratch_sort_direction = new Float32Array(3);
57
-
58
- /**
59
- *
60
- * @type {Float32Array}
61
- */
62
- const scratch_aabb3 = new Float32Array(6);
63
-
64
- /**
65
- *
66
- * @type {number[]}
67
- */
68
- const scratch_v3_array = [];
69
-
70
- /**
71
- *
72
- * @param {ParameterSet} parameters
73
- */
74
- function generateStandardParameterSet(parameters) {
75
- const pScale = new ParticleParameter(ParticleParameters.Scale, 1);
76
- pScale.setDefault([1], [0]);
77
-
78
- const pColor = new ParticleParameter(ParticleParameters.Color, 4);
79
- pColor.setDefault([1, 1, 1, 1], [0]);
80
-
81
- parameters.add(pScale);
82
- parameters.add(pColor);
83
- }
84
-
85
-
86
- let id_counter = 0;
87
-
88
- /**
89
- * @deprecated Legacy, use `ParticleEffect` instead. It can do everything this emitter can do and more.
90
- */
91
- export class ParticleEmitter {
92
- /**
93
- * @type {number}
94
- */
95
- id = id_counter++;
96
-
97
- /**
98
- * @private
99
- * @readonly
100
- * @type {List<ParticleLayer>}
101
- */
102
- layers = new List();
103
-
104
- /**
105
- *
106
- * @type {Vector3}
107
- */
108
- position = new Vector3(0, 0, 0);
109
- scale = new Vector3(1, 1, 1);
110
- rotation = new Quaternion(0, 0, 0, 1);
111
-
112
- /**
113
- *
114
- * @type {Vector3}
115
- * @readonly
116
- * @private
117
- */
118
- __lastSpawnPosition = new Vector3(0, 0, 0);
119
-
120
- /**
121
- * How long has this emitter been sleeping for?
122
- * This amount of time needs to be simulated when we wake the emitter up, but we can typically do it in a small number of large steps
123
- * @type {number}
124
- */
125
- sleepTime = 0;
126
-
127
- /**
128
- * How much simulated time this emitter has been advanced by, in seconds.
129
- *
130
- * A simulation step that evolves a field over time reads its clock from
131
- * here rather than keeping one of its own, because `ParticularEngine` holds
132
- * ONE instance of each step and reuses it for every emitter in the scene: a
133
- * clock on the step would advance once per emitter per frame, so an
134
- * effect's motion would change when an unrelated effect was spawned
135
- * somewhere else. It also gets the catch-up loop right — waking an emitter
136
- * advances that emitter's own clock by the time it slept and nobody else's.
137
- *
138
- * @type {number}
139
- */
140
- simulated_time = 0;
141
-
142
- /**
143
- *
144
- * @type {BlendingType|number}
145
- */
146
- blendingMode = BlendingType.Normal;
147
-
148
- /**
149
- *
150
- * @type {ParticlePool|null}
151
- */
152
- particles = null;
153
-
154
- /**
155
- * @readonly
156
- * @type {BvhClient}
157
- */
158
- bvh_leaf = new BvhClient();
159
-
160
-
161
- /**
162
- * Upper-bound of bounds for an individual particle
163
- * @readonly
164
- * @type {AABB3}
165
- */
166
- particleBounds = new AABB3(Infinity, Infinity, Infinity, -Infinity, -Infinity, -Infinity);
167
-
168
- /**
169
- * @readonly
170
- * @type {AABB3}
171
- */
172
- emissionBounds = new AABB3(0, 0, 0, 0, 0, 0);
173
-
174
-
175
- /**
176
- * Bit Field of {@link ParticleEmitterFlag}
177
- * @type {number}
178
- */
179
- flags = ParticleEmitterFlag.DepthSorting | ParticleEmitterFlag.HashNeedUpdate | ParticleEmitterFlag.Emitting;
180
-
181
- /**
182
- *
183
- * @type {number}
184
- * @private
185
- */
186
- __hash = 0;
187
-
188
-
189
- /**
190
- * @readonly
191
- * @type {ParameterSet}
192
- */
193
- parameters = new ParameterSet();
194
-
195
- constructor() {
196
- generateStandardParameterSet(this.parameters);
197
-
198
-
199
- this.position.onChanged.add(this.updateTransform, this);
200
- this.scale.onChanged.add(this.updateTransform, this);
201
- this.rotation.onChanged.add(this.updateTransform, this);
202
- }
203
-
204
- updateTransform() {
205
- this.setFlag(ParticleEmitterFlag.BaseBoundsNeedUpdate);
206
-
207
- this.computeBoundingBox();
208
- }
209
-
210
- /**
211
- *
212
- * @param {number|ParticleEmitterFlag} flag
213
- * @returns {void}
214
- */
215
- setFlag(flag) {
216
- this.flags |= flag;
217
- }
218
-
219
- /**
220
- *
221
- * @param {number|ParticleEmitterFlag} flag
222
- * @returns {void}
223
- */
224
- clearFlag(flag) {
225
- this.flags &= ~flag;
226
- }
227
-
228
- /**
229
- *
230
- * @param {number|ParticleEmitterFlag} flag
231
- * @param {boolean} value
232
- */
233
- writeFlag(flag, value) {
234
- if (value) {
235
- this.setFlag(flag);
236
- } else {
237
- this.clearFlag(flag);
238
- }
239
- }
240
-
241
- /**
242
- *
243
- * @param {number|ParticleEmitterFlag} flag
244
- * @returns {boolean}
245
- */
246
- getFlag(flag) {
247
- return (this.flags & flag) === flag;
248
- }
249
-
250
- /**
251
- * @private
252
- */
253
- registerLayerParameters() {
254
- const layers = this.layers;
255
- const layer_count = layers.length;
256
-
257
- const parameters = this.parameters;
258
-
259
- parameters.setTrackCount(layer_count);
260
-
261
- for (let i = 0; i < layer_count; i++) {
262
- const layer = layers.get(i);
263
-
264
- parameters.setTracks(i, layer.parameterTracks);
265
- }
266
- }
267
-
268
- toJSON() {
269
- return {
270
- position: this.position.toJSON(),
271
- scale: this.scale.toJSON(),
272
- rotation: this.rotation.toJSON(),
273
- parameters: this.parameters.toJSON(),
274
- preWarm: this.getFlag(ParticleEmitterFlag.PreWarm),
275
- readDepth: !this.getFlag(ParticleEmitterFlag.DepthReadDisabled),
276
- softDepth: !this.getFlag(ParticleEmitterFlag.DepthSoftDisabled),
277
- velocityAlign: this.getFlag(ParticleEmitterFlag.AlignOnVelocity),
278
- depthSort: this.getFlag(ParticleEmitterFlag.DepthSorting),
279
- receiveLight: this.getFlag(ParticleEmitterFlag.Lit),
280
- blendingMode: this.blendingMode,
281
- layers: this.layers.toJSON()
282
- };
283
- }
284
-
285
- fromJSON(json) {
286
- if (typeof json.blendingMode === "number") {
287
- this.blendingMode = json.blendingMode;
288
- } else {
289
- this.blendingMode = BlendingType.Normal;
290
- }
291
-
292
- if (json.position !== undefined) {
293
- this.position.fromJSON(json.position);
294
- }
295
-
296
- if (json.scale !== undefined) {
297
- this.scale.fromJSON(json.scale);
298
- }
299
-
300
- if (json.rotation !== undefined) {
301
- this.rotation.fromJSON(json.rotation);
302
- }
303
-
304
- if (json.parameters !== undefined) {
305
- this.parameters.fromJSON(json.parameters);
306
- }
307
-
308
- if (typeof json.preWarm === "boolean") {
309
- this.writeFlag(ParticleEmitterFlag.PreWarm, json.preWarm);
310
- } else {
311
- this.writeFlag(ParticleEmitterFlag.PreWarm, false);
312
- }
313
-
314
- if (typeof json.readDepth === 'boolean') {
315
- this.writeFlag(ParticleEmitterFlag.DepthReadDisabled, !json.readDepth);
316
- } else {
317
- this.writeFlag(ParticleEmitterFlag.DepthReadDisabled, false);
318
- }
319
-
320
- if (typeof json.softDepth === 'boolean') {
321
- this.writeFlag(ParticleEmitterFlag.DepthSoftDisabled, !json.softDepth);
322
- } else {
323
- this.writeFlag(ParticleEmitterFlag.DepthSoftDisabled, false);
324
- }
325
-
326
- if (typeof json.velocityAlign === "boolean") {
327
- this.writeFlag(ParticleEmitterFlag.AlignOnVelocity, json.velocityAlign);
328
- } else {
329
- this.writeFlag(ParticleEmitterFlag.AlignOnVelocity, false);
330
- }
331
-
332
- if (typeof json.depthSort === "boolean") {
333
- this.writeFlag(ParticleEmitterFlag.DepthSorting, json.depthSort);
334
- } else {
335
- this.writeFlag(ParticleEmitterFlag.DepthSorting, true);
336
- }
337
-
338
- if (typeof json.receiveLight === "boolean") {
339
- this.writeFlag(ParticleEmitterFlag.Lit, json.receiveLight);
340
- } else {
341
- this.clearFlag(ParticleEmitterFlag.Lit);
342
- }
343
-
344
- this.layers.fromJSON(json.layers, ParticleLayer);
345
-
346
- this.writeFlag(ParticleEmitterFlag.Built, false);
347
- this.setFlag(ParticleEmitterFlag.Emitting);
348
-
349
- //register loaded layers
350
- this.registerLayerParameters();
351
- }
352
-
353
-
354
- /**
355
- *
356
- * @param {ParticleLayer} layer
357
- */
358
- addLayer(layer) {
359
- this.layers.add(layer);
360
-
361
- const numLayers = this.layers.length;
362
- this.parameters.setTrackCount(numLayers);
363
-
364
- this.parameters.setTracks(numLayers - 1, layer.parameterTracks);
365
- }
366
-
367
- /**
368
- *
369
- * @param {(layer: ParticleLayer, index: number) => void} visitor
370
- * @param {*} [thisArg]
371
- */
372
- traverseLayers(visitor, thisArg) {
373
- const layers = this.layers;
374
-
375
- const l = layers.length;
376
-
377
- for (let i = 0; i < l; i++) {
378
- const layer = layers.get(i);
379
-
380
- visitor.call(thisArg, layer, i);
381
- }
382
- }
383
-
384
- /**
385
- * Causes all active particles from a given layer to be destroyed immediately
386
- * @param {ParticleLayer} layer
387
- * @return {number} number of particles destroyed
388
- */
389
- destroyParticlesFromLayer(layer) {
390
- const layers = this.layers;
391
-
392
- const targetLayerIndex = layers.indexOf(layer);
393
-
394
- if (targetLayerIndex === -1) {
395
- //layer doesn't exist
396
- throw new Error('Layer not found');
397
- }
398
-
399
- const particles = this.particles;
400
- const occupancy = particles.occupancy;
401
-
402
- let removeCount = 0;
403
-
404
- for (
405
- let i = occupancy.nextSetBit(0);
406
- i !== -1;
407
- i = occupancy.nextSetBit(i + 1)
408
- ) {
409
-
410
- const layerPosition = particles.readAttributeScalar(i, PARTICLE_ATTRIBUTE_LAYER_POSITION);
411
-
412
- if (layerPosition !== targetLayerIndex) {
413
- // not the layer we want
414
- continue;
415
- }
416
-
417
- //destroy the particle
418
- occupancy.set(i, false);
419
-
420
- removeCount++;
421
-
422
- }
423
-
424
- if (removeCount > 0) {
425
- //remove dead particles from the pool
426
- particles.compact();
427
- }
428
-
429
- return removeCount;
430
- }
431
-
432
- computeEmissionBounds() {
433
-
434
- let bounds_x0 = Infinity;
435
- let bounds_y0 = Infinity;
436
- let bounds_z0 = Infinity;
437
-
438
- let bounds_x1 = -Infinity;
439
- let bounds_y1 = -Infinity;
440
- let bounds_z1 = -Infinity;
441
-
442
- const layers = this.layers;
443
- const numLayers = layers.length;
444
-
445
- const position = this.position;
446
- const rotation = this.rotation;
447
- const scale = this.scale;
448
-
449
- m4_compose(matrix4, position, rotation, scale);
450
-
451
- for (let i = 0; i < numLayers; i++) {
452
- const particleLayer = layers.get(i);
453
-
454
- particleLayer.computeBoundsAttributes();
455
-
456
- const s_2 = particleLayer.scaledSpriteHalfSize;
457
-
458
- const baseBoundingBox = particleLayer.baseBoundingBox;
459
- baseBoundingBox.getCorners(corners);
460
-
461
- for (let j = 0; j < 24; j += 3) {
462
-
463
- const x = corners[j];
464
- const y = corners[j + 1];
465
- const z = corners[j + 2];
466
-
467
- //apply matrix transform
468
- const _x = matrix4[0] * x + matrix4[4] * y + matrix4[8] * z + matrix4[12];
469
- const _y = matrix4[1] * x + matrix4[5] * y + matrix4[9] * z + matrix4[13];
470
- const _z = matrix4[2] * x + matrix4[6] * y + matrix4[10] * z + matrix4[14];
471
-
472
-
473
- //update bounds
474
- bounds_x0 = min2(bounds_x0, _x - s_2);
475
- bounds_y0 = min2(bounds_y0, _y - s_2);
476
- bounds_z0 = min2(bounds_z0, _z - s_2);
477
-
478
- bounds_x1 = max2(bounds_x1, _x + s_2);
479
- bounds_y1 = max2(bounds_y1, _y + s_2);
480
- bounds_z1 = max2(bounds_z1, _z + s_2);
481
- }
482
- }
483
-
484
- this.emissionBounds.setBounds(
485
- bounds_x0, bounds_y0, bounds_z0,
486
- bounds_x1, bounds_y1, bounds_z1
487
- );
488
-
489
- this.clearFlag(ParticleEmitterFlag.BaseBoundsNeedUpdate);
490
- }
491
-
492
- computeParticleBounds() {
493
- //retire dead particles
494
- const particles = this.particles;
495
-
496
- particles.computeAttributeVector3AxisAlignedBoundingBox(PARTICLE_ATTRIBUTE_POSITION, scratch_aabb3);
497
-
498
- //expand bounds by maximum sprite size
499
- const extents = this.computeSpriteMaxHalfSize();
500
-
501
- aabb3_expand_array(scratch_aabb3, scratch_aabb3, extents);
502
-
503
- //write updated bonds
504
- const bb = this.particleBounds;
505
-
506
- bb.readFromArray(scratch_aabb3);
507
-
508
- this.clearFlag(ParticleEmitterFlag.ParticleBoundsNeedUpdate);
509
- }
510
-
511
- computeBoundingBox() {
512
-
513
- if (this.getFlag(ParticleEmitterFlag.BaseBoundsNeedUpdate)) {
514
- //emission bounds need update
515
- this.computeEmissionBounds();
516
- }
517
-
518
- if (this.getFlag(ParticleEmitterFlag.ParticleBoundsNeedUpdate)) {
519
- //particle bounds need update
520
- this.computeParticleBounds();
521
- }
522
-
523
- const ebb = this.emissionBounds;
524
- const pbb = this.particleBounds;
525
-
526
- aabb3_array_combine(this.bvh_leaf.bounds, 0, ebb, 0, pbb, 0);
527
-
528
- this.bvh_leaf.write_bounds();
529
-
530
- }
531
-
532
- /**
533
- * @param {number} limit longest maximum life per layer, layers that exceed this value are ignored. Measured in seconds
534
- * @returns {number} in seconds
535
- */
536
- computeMaxEmittingParticleLife(limit = 60) {
537
- const layers = this.layers;
538
-
539
- const numLayers = layers.length;
540
-
541
- let i;
542
- let result = 0;
543
-
544
- for (i = 0; i < numLayers; i++) {
545
- const layer = layers.get(i);
546
-
547
- if (layer.emissionRate <= 0 && layer.emissionImmediate <= 0) {
548
- //skip layers with no emission
549
- continue;
550
- }
551
-
552
- const maxLifeTime = layer.particleLife.max;
553
-
554
- if (maxLifeTime > limit) {
555
- //ignore layer, it's above limit
556
- continue;
557
- }
558
-
559
- if (maxLifeTime > result) {
560
- result = maxLifeTime;
561
- }
562
- }
563
-
564
- return result;
565
- }
566
-
567
- build() {
568
-
569
- this.particles = new ParticlePool(PARTICULAR_PARTICLE_SPECIFICATION);
570
-
571
- //make overallocation a bit more aggressive to prevent frequent resizing
572
- this.particles.shrinkFactor = 0.5;
573
-
574
- this.particles.build();
575
-
576
- //build parameters
577
- this.parameters.build();
578
-
579
- //mark bounds for update
580
- this.writeFlag(ParticleEmitterFlag.BaseBoundsNeedUpdate, true);
581
-
582
- //update bounding box
583
- this.computeBoundingBox();
584
-
585
- // mark as built
586
- this.setFlag(ParticleEmitterFlag.Built | ParticleEmitterFlag.HashNeedUpdate);
587
- }
588
-
589
- initialize() {
590
- //set buffered position to current position
591
- this.__lastSpawnPosition.copy(this.position);
592
-
593
- //emit immediate
594
- let i;
595
- const numLayers = this.layers.length;
596
-
597
- if (this.getFlag(ParticleEmitterFlag.PreWarm)) {
598
- //pre-warm the emitter
599
- for (i = 0; i < numLayers; i++) {
600
- const layer = this.layers.get(i);
601
- if (layer.emissionRate > 0 && layer.isEmitting) {
602
- const averageLifetime = (layer.particleLife.max + layer.particleLife.min) / 2;
603
- this.spawnLayerParticlesContinuous(i, averageLifetime);
604
- }
605
- }
606
- }
607
-
608
- for (i = 0; i < numLayers; i++) {
609
- //immediate emission
610
- const layer = this.layers.get(i);
611
- if (layer.emissionImmediate > 0 && layer.isEmitting) {
612
- this.spawnLayerParticlesImmediate(i, layer.emissionImmediate);
613
- }
614
- }
615
-
616
- // Mark as initialized
617
- this.setFlag(ParticleEmitterFlag.Initialized);
618
- }
619
-
620
- /**
621
- * @returns {number}
622
- */
623
- #computeHash() {
624
- const parameters_hash = this.parameters.hash();
625
- const layers_hash = this.layers.hash();
626
-
627
- /**
628
- * Extract relevant flags
629
- * @type {number}
630
- */
631
- const flags = this.flags & (SERIALIZABLE_FLAGS);
632
-
633
- return combine_hash(
634
- parameters_hash,
635
- layers_hash,
636
- this.blendingMode,
637
- flags
638
- );
639
- }
640
-
641
- hash() {
642
- if (this.getFlag(ParticleEmitterFlag.HashNeedUpdate)) {
643
- this.__hash = this.#computeHash();
644
- this.clearFlag(ParticleEmitterFlag.HashNeedUpdate);
645
- }
646
-
647
- return this.__hash;
648
- }
649
-
650
- /**
651
- *
652
- * @param {ParticleEmitter} other
653
- * @returns {boolean}
654
- */
655
- equals(other) {
656
- return this.blendingMode === other.blendingMode
657
- && this.parameters.equals(other.parameters)
658
- && this.layers.equals(other.layers)
659
- // compare the same flag set that #computeHash folds in, otherwise
660
- // equal objects can hash differently
661
- && (this.flags & SERIALIZABLE_FLAGS) === (other.flags & SERIALIZABLE_FLAGS);
662
- }
663
-
664
- /**
665
- * Order the live particles back to front along a view direction, so that whoever draws them
666
- * blends them in the right order.
667
- *
668
- * **The direction is the caller's**, because only whoever is drawing knows which way the frame
669
- * is being looked from. The predecessor took it off a three camera and read `planes[0]` of the
670
- * frustum calling it the near plane, where three's plane order puts the *right* one — so the
671
- * ordering it produced ran across the screen rather than into it.
672
- *
673
- * PRECONDITION: no dead particles may exist in the pool. Make sure to call
674
- * {@link ParticlePool#compact} before sorting.
675
- *
676
- * @param {number} direction_x unit view direction, pointing away from the viewer
677
- * @param {number} direction_y
678
- * @param {number} direction_z
679
- */
680
- sort(direction_x, direction_y, direction_z) {
681
- assert.isNumber(direction_x, 'direction_x');
682
- assert.isNumber(direction_y, 'direction_y');
683
- assert.isNumber(direction_z, 'direction_z');
684
-
685
- //sort particles by distance from camera to ensure proper rendering order
686
- // NOTE we don't use full distance calculation, but DOT product instead, as the final component is always the same and we only care about relative distance for comparison
687
-
688
- /**
689
- *
690
- * @type {ParticlePool}
691
- */
692
- const particles = this.particles;
693
-
694
- const particleCount = particles.size();
695
-
696
- //test pre-condition: NO DEAD PARTICLES IN THE POOL
697
- //assert.notOk(this.particles.hasHoles(), 'Broken pre-condition: particle pool must not have holes. Make sure to call "compact" before sorting');
698
-
699
- scratch_sort_direction[0] = direction_x;
700
- scratch_sort_direction[1] = direction_y;
701
- scratch_sort_direction[2] = direction_z;
702
-
703
- //Bind attribute array directly for faster access
704
- const positionAttribute = particles.attributes[PARTICLE_ATTRIBUTE_POSITION];
705
- const position_array = positionAttribute.array;
706
-
707
-
708
- if (particleCount <= 1) {
709
- //nothing to sort
710
- return;
711
- }
712
-
713
- //Stack-based implementation, avoiding recursion for performance improvement
714
- const stack = SCRATCH_UINT32_TRAVERSAL_STACK;
715
-
716
- const stack_top = stack.pointer;
717
- let stackPointer = stack_top;
718
-
719
- stack[stackPointer++] = 0;
720
- stack[stackPointer++] = particleCount - 1;
721
-
722
- let i, j;
723
-
724
- while (stackPointer > stack_top) {
725
- stackPointer -= 2;
726
-
727
- const right = stack[stackPointer + 1];
728
- const left = stack[stackPointer];
729
-
730
- i = left;
731
- j = right;
732
-
733
- const pivot_index = (left + right) >> 1;
734
-
735
- const pivot = v3_dot_array(position_array, pivot_index * 3, scratch_sort_direction, 0);
736
-
737
- /* partition */
738
- while (i <= j) {
739
-
740
- while (v3_dot_array(position_array, i * 3, scratch_sort_direction, 0) > pivot) {
741
- i++;
742
- }
743
-
744
- while (v3_dot_array(position_array, j * 3, scratch_sort_direction, 0) < pivot) {
745
- j--;
746
- }
747
-
748
- if (i <= j) {
749
-
750
- if (i !== j) {
751
- //do swap
752
- particles.swap(i, j);
753
- }
754
-
755
- i++;
756
- j--;
757
- }
758
- }
759
-
760
- /* recursion */
761
- if (left < j) {
762
- stack[stackPointer++] = left;
763
- stack[stackPointer++] = j;
764
- }
765
- if (i < right) {
766
- stack[stackPointer++] = i;
767
- stack[stackPointer++] = right;
768
- }
769
- }
770
- }
771
-
772
- update() {
773
- this.particles.update();
774
-
775
- //check if sprites need updating
776
- if (this.getFlag(ParticleEmitterFlag.SpritesNeedUpdate)) {
777
- this.#updateSprites();
778
- }
779
- }
780
-
781
- /**
782
- *
783
- * @return {number}
784
- */
785
- computeSpriteMaxHalfSize() {
786
- const layers = this.layers;
787
- const n = layers.length;
788
-
789
- let result = 0;
790
-
791
- for (let i = 0; i < n; i++) {
792
- const particleLayer = layers.get(i);
793
-
794
- result = max2(result, particleLayer.computeScaledSpriteHalfSize());
795
- }
796
-
797
- return result;
798
- }
799
-
800
- /**
801
- *
802
- * @param {number} timeDelta
803
- */
804
- advance(timeDelta) {
805
- this.simulated_time += timeDelta;
806
-
807
- this.emit(timeDelta);
808
-
809
- this.setFlag(ParticleEmitterFlag.ParticleBoundsNeedUpdate);
810
- }
811
-
812
- /**
813
- * Write sprite UVs
814
- */
815
- #updateSprites() {
816
- const particles = this.particles;
817
-
818
- const occupancy = particles.occupancy;
819
-
820
- const layers = this.layers;
821
-
822
- let missingFlag = false;
823
-
824
- //cycle through each particle
825
- for (let i = occupancy.nextSetBit(0); i !== -1; i = occupancy.nextSetBit(i + 1)) {
826
- const layerIndex = particles.readAttributeScalar(i, PARTICLE_ATTRIBUTE_LAYER_POSITION);
827
-
828
- const layer = layers.get(layerIndex);
829
-
830
- const atlasPatch = layer.__atlasPatch;
831
-
832
- if (atlasPatch !== null) {
833
-
834
- write_particle_patch_uv(atlasPatch, particles, i);
835
- } else {
836
- missingFlag = true;
837
- }
838
- }
839
-
840
- this.writeFlag(ParticleEmitterFlag.SpritesNeedUpdate, missingFlag);
841
- }
842
-
843
- /**
844
- * @private
845
- * @param {number} layerIndex
846
- * @param {number} timeDelta period over which particles are being spawned, this will ensure that spawned particles have different initial age
847
- */
848
- spawnLayerParticlesContinuous(layerIndex, timeDelta) {
849
- const layer = this.layers.get(layerIndex);
850
-
851
- if (!(layer.emissionRate > 0)) {
852
- /*
853
- Nothing continuous comes off this layer, and the remainder it carries has to go with
854
- it.
855
-
856
- The arithmetic below starts at time = -timeSinceLastEmission and writes back
857
- timeDelta - time. At rate 0 the period is Infinity, the loop never runs, time never
858
- moves, and the write-back is timeSinceLastEmission += timeDelta: an accumulator with
859
- no drain, because the only reset fires when a frame is longer than the layer average
860
- particle lifetime, which a normal frame never is.
861
-
862
- Zero rate is a supported configuration - initialize() guards its own call with
863
- emissionRate > 0 and computeMaxEmittingParticleLife tests for emissionRate <= 0 - and
864
- a burst-only layer is the natural way to author a one-shot. Such a layer banked about
865
- a minute of remainder per minute of runtime, and because ParticleEmitterSystem#rebuild
866
- reuses the same ParticleLayer objects, raising the rate in the editor afterwards
867
- entered the loop an hour in the past and spawned tens of thousands of particles in one
868
- frame, each able to trigger a pool reallocation.
869
- */
870
- layer.timeSinceLastEmission = 0;
871
-
872
- return;
873
- }
874
-
875
- const random = Math.random;
876
-
877
- /**
878
- *
879
- * @type {ParticlePool}
880
- */
881
- const particles = this.particles;
882
-
883
-
884
- const emissionFunction = computeEmissionFunction(layer.emissionFrom, layer.emissionShape);
885
-
886
- const emissionPeriod = 1 / layer.emissionRate;
887
-
888
- //compute transform matrix of the emitter
889
- const emitter_position = this.position;
890
- const last_spawn_position = this.__lastSpawnPosition;
891
-
892
- m4_compose(matrix4, emitter_position, this.rotation, this.scale);
893
-
894
- let time = -layer.timeSinceLastEmission;
895
-
896
- while (time + emissionPeriod < timeDelta) {
897
- time += emissionPeriod;
898
-
899
- const ref = particles.create();
900
-
901
- // randomize position across the supplied time interval
902
- const f = time / timeDelta;
903
-
904
- //compute position for particle
905
- emissionFunction(random, scratch_v3_array, 0);
906
-
907
- v3position.fromArray(scratch_v3_array, 0);
908
-
909
- //apply layer transform
910
- v3position.multiply(layer.scale);
911
- v3position.add(layer.position);
912
-
913
- if (this.getFlag(ParticleEmitterFlag.PositionChanged)) {
914
- //compute position in between
915
- matrix4[12] = lerp(emitter_position.x, last_spawn_position.x, f);
916
- matrix4[13] = lerp(emitter_position.y, last_spawn_position.y, f);
917
- matrix4[14] = lerp(emitter_position.z, last_spawn_position.z, f);
918
- }
919
-
920
- //apply emitter transform
921
- v3position.applyMatrix4(matrix4);
922
-
923
-
924
- //randomize initial age across time delta
925
- const initialAge = f * timeDelta;
926
-
927
- //write age
928
- particles.writeAttributeScalar(ref, PARTICLE_ATTRIBUTE_AGE, initialAge);
929
-
930
- //write rotation
931
- const rotation = layer.particleRotation.sampleRandom(random);
932
- particles.writeAttributeScalar(ref, PARTICLE_ATTRIBUTE_ROTATION, rotation);
933
-
934
- //write rotation speed
935
- const rotationSpeed = layer.particleRotationSpeed.sampleRandom(random);
936
- particles.writeAttributeScalar(ref, PARTICLE_ATTRIBUTE_ROTATION_SPEED, rotationSpeed);
937
-
938
- //initialize velocity
939
- layer.particleVelocityDirection.sampleRandomDirection(random, v3velocity);
940
- const speed = layer.particleSpeed.sampleRandom(random);
941
-
942
- v3velocity.multiplyScalar(speed);
943
-
944
- particles.writeAttributeVector3(ref, PARTICLE_ATTRIBUTE_VELOCITY, v3velocity.x, v3velocity.y, v3velocity.z);
945
-
946
- //write position
947
- const p_x = v3position.x + v3velocity.x * initialAge;
948
- const p_y = v3position.y + v3velocity.y * initialAge;
949
- const p_z = v3position.z + v3velocity.z * initialAge;
950
-
951
- particles.writeAttributeVector3(ref, PARTICLE_ATTRIBUTE_POSITION, p_x, p_y, p_z);
952
-
953
- //write death age
954
- const deathAge = layer.particleLife.sampleRandom(random);
955
-
956
- particles.writeAttributeScalar(ref, PARTICLE_ATTRIBUTE_DEATH_AGE, deathAge);
957
-
958
- //write particle size
959
- const size = layer.particleSize.sampleRandom(random);
960
-
961
- particles.writeAttributeScalar(ref, PARTICLE_ATTRIBUTE_SIZE_INITIAL, size);
962
-
963
- //write UV
964
- const atlasPatch = layer.__atlasPatch;
965
- if (atlasPatch !== null) {
966
- //patch exists, write it
967
- write_particle_patch_uv(atlasPatch, particles, ref);
968
- } else {
969
- this.setFlag(ParticleEmitterFlag.SpritesNeedUpdate);
970
- }
971
-
972
- particles.writeAttributeScalar(ref, PARTICLE_ATTRIBUTE_LAYER_POSITION, layerIndex);
973
-
974
- update_parameters(ref, particles, layer, initialAge / deathAge);
975
-
976
- particles.writeAttributeScalar(ref, PARTICLE_ATTRIBUTE_BLEND, this.blendingMode);
977
- }
978
-
979
- //update time buffer
980
- layer.timeSinceLastEmission = timeDelta - time;
981
-
982
- this.setFlag(ParticleEmitterFlag.ParticleBoundsNeedUpdate);
983
- }
984
-
985
- /**
986
- * @private
987
- * @param {number} layerIndex
988
- * @param {number} count how many particles to spawn
989
- */
990
- spawnLayerParticlesImmediate(layerIndex, count) {
991
- if (count <= 0) {
992
- return;
993
- }
994
-
995
- const layers = this.layers;
996
-
997
- const layer = layers.get(layerIndex);
998
-
999
- const random = Math.random;
1000
-
1001
- /**
1002
- *
1003
- * @type {ParticlePool}
1004
- */
1005
- const particles = this.particles;
1006
-
1007
- const emissionFunction = computeEmissionFunction(layer.emissionFrom, layer.emissionShape);
1008
-
1009
- //compute transform matrix of the emitter
1010
- m4_compose(matrix4, this.position, this.rotation, this.scale);
1011
-
1012
- //pre-grow particle pool
1013
- particles.growCapacity(particles.capacity + count);
1014
-
1015
- let spritesNeedUpdate = false;
1016
-
1017
- for (let j = 0; j < count; j++) {
1018
- const ref = particles.create();
1019
-
1020
- //compute position for particle
1021
- emissionFunction(random, scratch_v3_array, 0);
1022
-
1023
- v3position.fromArray(scratch_v3_array, 0);
1024
-
1025
- //apply layer transform
1026
- v3position.multiply(layer.scale);
1027
- v3position.add(layer.position);
1028
-
1029
- //apply emitter transform
1030
- v3position.applyMatrix4(matrix4);
1031
-
1032
-
1033
- //randomize initial age across time delta
1034
- const initialAge = 0;
1035
-
1036
- //write age
1037
- particles.writeAttributeScalar(ref, PARTICLE_ATTRIBUTE_AGE, initialAge);
1038
-
1039
- //write rotation
1040
- const rotation = layer.particleRotation.sampleRandom(random);
1041
- particles.writeAttributeScalar(ref, PARTICLE_ATTRIBUTE_ROTATION, rotation);
1042
-
1043
- //write rotation speed
1044
- const rotationSpeed = layer.particleRotationSpeed.sampleRandom(random);
1045
- particles.writeAttributeScalar(ref, PARTICLE_ATTRIBUTE_ROTATION_SPEED, rotationSpeed);
1046
-
1047
- //initialize velocity
1048
- layer.particleVelocityDirection.sampleRandomDirection(random, v3velocity);
1049
- const speed = layer.particleSpeed.sampleRandom(random);
1050
-
1051
- v3velocity.multiplyScalar(speed);
1052
-
1053
- particles.writeAttributeVector3(ref, PARTICLE_ATTRIBUTE_VELOCITY, v3velocity.x, v3velocity.y, v3velocity.z);
1054
-
1055
- //write position
1056
- const p_x = v3position.x + v3velocity.x * initialAge;
1057
- const p_y = v3position.y + v3velocity.y * initialAge;
1058
- const p_z = v3position.z + v3velocity.z * initialAge;
1059
-
1060
- particles.writeAttributeVector3(ref, PARTICLE_ATTRIBUTE_POSITION,
1061
- p_x,
1062
- p_y,
1063
- p_z
1064
- );
1065
-
1066
- //write death age
1067
- const deathAge = layer.particleLife.sampleRandom(random);
1068
-
1069
- particles.writeAttributeScalar(ref, PARTICLE_ATTRIBUTE_DEATH_AGE, deathAge);
1070
-
1071
- //write size
1072
- const size = layer.particleSize.sampleRandom(random);
1073
-
1074
- particles.writeAttributeScalar(ref, PARTICLE_ATTRIBUTE_SIZE_INITIAL, size);
1075
-
1076
- //write UV
1077
- const atlasPatch = layer.__atlasPatch;
1078
-
1079
- if (atlasPatch !== null) {
1080
- //patch exists, write it
1081
- write_particle_patch_uv(atlasPatch, particles, ref);
1082
- } else {
1083
- //patch is not loaded yet, request update
1084
- spritesNeedUpdate = true;
1085
- }
1086
-
1087
- particles.writeAttributeScalar(ref, PARTICLE_ATTRIBUTE_LAYER_POSITION, layerIndex);
1088
-
1089
- update_parameters(ref, particles, layer, initialAge / deathAge);
1090
-
1091
- particles.writeAttributeScalar(ref, PARTICLE_ATTRIBUTE_BLEND, this.blendingMode);
1092
- }
1093
-
1094
- if (spritesNeedUpdate) {
1095
- this.setFlag(ParticleEmitterFlag.SpritesNeedUpdate);
1096
- }
1097
-
1098
- this.setFlag(ParticleEmitterFlag.ParticleBoundsNeedUpdate);
1099
- }
1100
-
1101
- /**
1102
- * @private
1103
- * @param {number} timeDelta
1104
- */
1105
- emit(timeDelta) {
1106
- if (!this.getFlag(ParticleEmitterFlag.Emitting)) {
1107
- return;
1108
- }
1109
-
1110
- const layers = this.layers;
1111
- const numLayers = layers.length;
1112
-
1113
- if (!this.position.equals(this.__lastSpawnPosition)) {
1114
- this.setFlag(ParticleEmitterFlag.PositionChanged);
1115
- }
1116
-
1117
- //emit new particles
1118
- for (let i = 0; i < numLayers; i++) {
1119
- /**
1120
- * @type {ParticleLayer}
1121
- */
1122
- const layer = layers.get(i);
1123
-
1124
- if (!layer.isEmitting) {
1125
- //this layer is not spawning any particles, ignore it
1126
- continue;
1127
- }
1128
-
1129
- const particleLife = layer.particleLife;
1130
-
1131
- const averageLifetime = (particleLife.max + particleLife.min) / 2;
1132
-
1133
- //emitting more than averageLifetime lifetime is unproductive, so we'll crop the emission
1134
- let emissionDelta;
1135
- if (timeDelta > averageLifetime) {
1136
- emissionDelta = averageLifetime;
1137
- layer.timeSinceLastEmission = 0;
1138
- } else {
1139
- emissionDelta = timeDelta;
1140
- }
1141
-
1142
- this.spawnLayerParticlesContinuous(i, emissionDelta);
1143
- }
1144
-
1145
- if (this.getFlag(ParticleEmitterFlag.PositionChanged)) {
1146
- this.__lastSpawnPosition.copy(this.position);
1147
- this.clearFlag(ParticleEmitterFlag.PositionChanged);
1148
- }
1149
- }
1150
-
1151
-
1152
- /**
1153
- * Cleanup used resources, returning the emitter to its pre-{@link build} state.
1154
- *
1155
- * The pool and the parameter tracks are what `build` produces, so dropping them has to drop
1156
- * the flags that say they exist as well - a disposed emitter that still reads as `Built` gets
1157
- * written into by whoever picks it up next, and the pool it writes into has no attributes left.
1158
- * {@link ParticleEmitterSystem#rebuild} clears the same pair before building again.
1159
- */
1160
- dispose() {
1161
- if (this.particles !== null) {
1162
- this.particles.dispose();
1163
- this.particles = null;
1164
- }
1165
-
1166
- this.clearFlag(ParticleEmitterFlag.Built | ParticleEmitterFlag.Initialized);
1167
- }
1168
-
1169
- /**
1170
- *
1171
- * @param json
1172
- * @returns {ParticleEmitter}
1173
- */
1174
- static fromJSON(json) {
1175
- const result = new ParticleEmitter();
1176
- result.fromJSON(json);
1177
- return result
1178
- }
1179
- }
1180
-
1181
- ParticleEmitter.typeName = "ParticleEmitter";
1182
-
1183
- ParticleEmitter.Attributes = {
1184
- PARTICLE_ATTRIBUTE_AGE,
1185
- PARTICLE_ATTRIBUTE_DEATH_AGE,
1186
- PARTICLE_ATTRIBUTE_LAYER_POSITION,
1187
- PARTICLE_ATTRIBUTE_POSITION,
1188
- PARTICLE_ATTRIBUTE_ROTATION,
1189
- PARTICLE_ATTRIBUTE_ROTATION_SPEED,
1190
- PARTICLE_ATTRIBUTE_SIZE,
1191
- PARTICLE_ATTRIBUTE_UV,
1192
- PARTICLE_ATTRIBUTE_VELOCITY
1193
- };
1194
-
1195
- ParticleEmitter.SERIALIZABLE_FLAGS = SERIALIZABLE_FLAGS;
1196
-
1197
-
1198
- const matrix4 = new Float32Array(16);
1199
-
1200
- const v3position = new Vector3();
1201
- const v3velocity = new Vector3();