@woosh/meep-engine 3.16.0 → 3.17.1

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 (431) hide show
  1. package/README.md +8 -72
  2. package/editor/particles/effect/ParticleEffectDocument.d.ts +21 -6
  3. package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
  4. package/editor/particles/effect/ParticleEffectDocument.js +38 -17
  5. package/editor/view/node-graph/NodeGraphClipboard.d.ts +186 -0
  6. package/editor/view/node-graph/NodeGraphClipboard.d.ts.map +1 -0
  7. package/editor/view/node-graph/NodeGraphClipboard.js +231 -0
  8. package/editor/view/node-graph/NodeGraphEditorView.d.ts +59 -1
  9. package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
  10. package/editor/view/node-graph/NodeGraphEditorView.js +248 -5
  11. package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
  12. package/editor/view/node-graph/NodeGraphView.js +84 -8
  13. package/editor/view/node-graph/actions/connection_bind_actions.d.ts +23 -0
  14. package/editor/view/node-graph/actions/connection_bind_actions.d.ts.map +1 -0
  15. package/editor/view/node-graph/actions/connection_bind_actions.js +39 -0
  16. package/editor/view/particles/effect/ParticleCodeEditorView.d.ts.map +1 -1
  17. package/editor/view/particles/effect/ParticleCodeEditorView.js +4 -3
  18. package/editor/view/particles/effect/ParticleCurveEditorView.d.ts +20 -0
  19. package/editor/view/particles/effect/ParticleCurveEditorView.d.ts.map +1 -0
  20. package/editor/view/particles/effect/ParticleCurveEditorView.js +574 -0
  21. package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
  22. package/editor/view/particles/effect/ParticleEmitterInspectorView.js +27 -1
  23. package/editor/view/particles/effect/ParticleGradientEditorView.d.ts +24 -0
  24. package/editor/view/particles/effect/ParticleGradientEditorView.d.ts.map +1 -0
  25. package/editor/view/particles/effect/ParticleGradientEditorView.js +472 -0
  26. package/editor/view/particles/effect/ParticleGraphEditorView.d.ts +5 -0
  27. package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -1
  28. package/editor/view/particles/effect/ParticleGraphEditorView.js +61 -31
  29. package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
  30. package/editor/view/particles/effect/ParticleNodeParametersView.js +33 -0
  31. package/editor/view/particles/effect/particle-editor.css +123 -35
  32. package/package.json +1 -1
  33. package/src/core/binary/allocator/OffsetAllocator.d.ts +25 -16
  34. package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
  35. package/src/core/binary/allocator/OffsetAllocator.js +10 -1
  36. package/src/core/collection/array/typed/float32_array_hash.d.ts +21 -0
  37. package/src/core/collection/array/typed/float32_array_hash.d.ts.map +1 -0
  38. package/src/core/collection/array/typed/float32_array_hash.js +38 -0
  39. package/src/core/graph/csr/CSRGraph.d.ts +8 -1
  40. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -1
  41. package/src/core/graph/csr/CSRGraph.js +14 -6
  42. package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts +24 -0
  43. package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts.map +1 -1
  44. package/src/core/model/node-graph/visual/layout/LayoutProblem.js +27 -0
  45. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +26 -0
  46. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts.map +1 -1
  47. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js +28 -0
  48. package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts +92 -3
  49. package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts.map +1 -1
  50. package/src/core/model/node-graph/visual/layout/RouteGrid.js +405 -242
  51. package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts +50 -5
  52. package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts.map +1 -1
  53. package/src/core/model/node-graph/visual/layout/RouteSearch.js +160 -24
  54. package/src/core/model/node-graph/visual/layout/RouteSet.d.ts +7 -0
  55. package/src/core/model/node-graph/visual/layout/RouteSet.d.ts.map +1 -1
  56. package/src/core/model/node-graph/visual/layout/RouteSet.js +8 -0
  57. package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.js +9 -3
  58. package/src/core/model/node-graph/visual/layout/layout_build_problem.d.ts.map +1 -1
  59. package/src/core/model/node-graph/visual/layout/layout_build_problem.js +7 -0
  60. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts +9 -3
  61. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts.map +1 -1
  62. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.js +17 -3
  63. package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts +9 -6
  64. package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts.map +1 -1
  65. package/src/core/model/node-graph/visual/layout/layout_node_graph.js +49 -7
  66. package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts +11 -1
  67. package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +1 -1
  68. package/src/core/model/node-graph/visual/layout/layout_order_layers.js +135 -16
  69. package/src/core/model/node-graph/visual/layout/route_connections.d.ts +29 -0
  70. package/src/core/model/node-graph/visual/layout/route_connections.d.ts.map +1 -1
  71. package/src/core/model/node-graph/visual/layout/route_connections.js +716 -309
  72. package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts +3 -2
  73. package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts.map +1 -1
  74. package/src/core/model/node-graph/visual/layout/route_grid_build.js +7 -15
  75. package/src/core/model/node-graph/visual/layout/route_nudge.d.ts +6 -0
  76. package/src/core/model/node-graph/visual/layout/route_nudge.d.ts.map +1 -1
  77. package/src/core/model/node-graph/visual/layout/route_nudge.js +42 -13
  78. package/src/engine/animation/AnimationUtils.js +246 -246
  79. package/src/engine/animation/Animations.js +74 -74
  80. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +2078 -2078
  81. package/src/engine/ecs/EventType.d.ts +0 -1
  82. package/src/engine/ecs/EventType.js +1 -26
  83. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +1 -1
  84. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -1
  85. package/src/engine/ecs/ik/ik_write_local_rotation.js +3 -7
  86. package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
  87. package/src/engine/ecs/parent/EntityNode.js +4 -9
  88. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
  89. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +360 -364
  90. package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.d.ts +41 -0
  91. package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.d.ts.map +1 -0
  92. package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.js +40 -0
  93. package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +8 -0
  94. package/src/engine/ecs/transform/t64_announce_change.d.ts +10 -7
  95. package/src/engine/ecs/transform/t64_announce_change.d.ts.map +1 -1
  96. package/src/engine/ecs/transform/t64_announce_change.js +12 -12
  97. package/src/engine/ecs/transform/t64_set_rotation_axis_angle.d.ts +25 -0
  98. package/src/engine/ecs/transform/t64_set_rotation_axis_angle.d.ts.map +1 -0
  99. package/src/engine/ecs/transform/t64_set_rotation_axis_angle.js +45 -0
  100. package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.d.ts +30 -0
  101. package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.d.ts.map +1 -0
  102. package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.js +29 -0
  103. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
  104. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +13 -21
  105. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
  106. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +4 -8
  107. package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
  108. package/src/engine/graphics3/LightSystem.js +4 -8
  109. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
  110. package/src/engine/graphics3/MeshSystem.js +9 -19
  111. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -1
  112. package/src/engine/graphics3/ParticleEmitterSystem.js +4 -8
  113. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
  114. package/src/engine/graphics3/ShadedGeometrySystem.js +4 -10
  115. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts +1 -1
  116. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts.map +1 -1
  117. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.js +4 -8
  118. package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.js +218 -218
  119. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  120. package/src/engine/physics/ecs/PhysicsSystem.js +2 -5
  121. package/src/engine/sound/ecs/SoundListenerSystem.d.ts.map +1 -1
  122. package/src/engine/sound/ecs/SoundListenerSystem.js +6 -8
  123. package/src/engine/sound/simulation/AcousticSimulator.d.ts +11 -8
  124. package/src/engine/sound/simulation/AcousticSimulator.d.ts.map +1 -1
  125. package/src/engine/sound/simulation/AcousticSimulator.js +45 -36
  126. package/src/engine/sound/simulation/README.md +2 -2
  127. package/src/engine/sound/simulation/core/OcclusionSolver.d.ts.map +1 -1
  128. package/src/engine/sound/simulation/core/VolumeField.d.ts +9 -9
  129. package/src/engine/sound/simulation/core/VolumeField.d.ts.map +1 -1
  130. package/src/engine/sound/simulation/core/VolumeField.js +29 -13
  131. package/src/engine/sound/simulation/core/acoustic_occlusion_solve.d.ts +31 -0
  132. package/src/engine/sound/simulation/core/acoustic_occlusion_solve.d.ts.map +1 -0
  133. package/src/engine/sound/simulation/core/acoustic_occlusion_solve.js +134 -0
  134. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts +0 -4
  135. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts.map +1 -1
  136. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.js +5 -11
  137. package/src/shade/playground/particle_editor/README.md +43 -2
  138. package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
  139. package/src/shade/playground/particle_system/particle_prototype.js +4 -5
  140. package/src/shade/playground/particle_system/particle_scene.js +4 -4
  141. package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
  142. package/src/shade/playground/volumetrics_froxel/main.js +6 -1
  143. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  144. package/src/shade/renderer/Renderer.js +13 -1
  145. package/src/shade/renderer/particles/DESIGN.md +104 -19
  146. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +64 -50
  147. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  148. package/src/shade/renderer/particles/GPUParticleSystem.js +176 -78
  149. package/src/shade/renderer/particles/ParticleConstants.d.ts +59 -23
  150. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  151. package/src/shade/renderer/particles/ParticleConstants.js +66 -23
  152. package/src/shade/renderer/particles/ParticleRenderMode.d.ts +19 -0
  153. package/src/shade/renderer/particles/ParticleRenderMode.d.ts.map +1 -0
  154. package/src/shade/renderer/particles/ParticleRenderMode.js +33 -0
  155. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
  156. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +167 -166
  157. package/src/shade/renderer/particles/data/particle_emitter_record.d.ts +37 -0
  158. package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -0
  159. package/src/shade/renderer/particles/data/particle_emitter_record.js +109 -0
  160. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +3 -3
  161. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +303 -303
  162. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +18 -0
  163. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
  164. package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +152 -133
  165. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +0 -11
  166. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
  167. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +720 -621
  168. package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
  169. package/src/shade/renderer/particles/graph/compile_particle_graph.js +8 -3
  170. package/src/shade/renderer/particles/graph/flatten_particle_graph.d.ts.map +1 -1
  171. package/src/shade/renderer/particles/graph/flatten_particle_graph.js +244 -213
  172. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts.map +1 -1
  173. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.js +6 -0
  174. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts.map +1 -1
  175. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.js +294 -319
  176. package/src/shade/renderer/particles/graph/groups/particle_groups_noise.d.ts.map +1 -1
  177. package/src/shade/renderer/particles/graph/groups/particle_groups_noise.js +524 -517
  178. package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.d.ts +22 -0
  179. package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.d.ts.map +1 -0
  180. package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.js +517 -0
  181. package/src/shade/renderer/particles/graph/groups/simplex_reference.d.ts.map +1 -1
  182. package/src/shade/renderer/particles/graph/groups/simplex_reference.js +185 -159
  183. package/src/shade/renderer/particles/graph/make_particle_group.d.ts.map +1 -1
  184. package/src/shade/renderer/particles/graph/make_particle_group.js +2 -20
  185. package/src/shade/renderer/particles/graph/particle_compare_ops.d.ts +17 -0
  186. package/src/shade/renderer/particles/graph/particle_compare_ops.d.ts.map +1 -0
  187. package/src/shade/renderer/particles/graph/particle_compare_ops.js +22 -0
  188. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts +28 -8
  189. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts.map +1 -1
  190. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.js +49 -25
  191. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +40 -0
  192. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
  193. package/src/shade/renderer/particles/graph/particle_node_parameters.js +312 -234
  194. package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
  195. package/src/shade/renderer/particles/graph/particle_node_presentation.js +59 -3
  196. package/src/shade/renderer/particles/graph/particle_ramp.d.ts +230 -0
  197. package/src/shade/renderer/particles/graph/particle_ramp.d.ts.map +1 -0
  198. package/src/shade/renderer/particles/graph/particle_ramp.js +403 -0
  199. package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +7 -1
  200. package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -1
  201. package/src/shade/renderer/particles/graph/validate_particle_graph.js +66 -10
  202. package/src/shade/renderer/particles/graph_particles.d.ts +23 -69
  203. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  204. package/src/shade/renderer/particles/graph_particles.js +105 -262
  205. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  206. package/src/shade/renderer/particles/graph_particles_avboit.js +3 -2
  207. package/src/shade/renderer/particles/graph_particles_billboard.d.ts +37 -0
  208. package/src/shade/renderer/particles/graph_particles_billboard.d.ts.map +1 -0
  209. package/src/shade/renderer/particles/graph_particles_billboard.js +93 -0
  210. package/src/shade/renderer/particles/isa/InstructionStream.d.ts +51 -22
  211. package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
  212. package/src/shade/renderer/particles/isa/InstructionStream.js +98 -38
  213. package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +49 -8
  214. package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
  215. package/src/shade/renderer/particles/isa/ParticleProgram.js +95 -150
  216. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +306 -64
  217. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
  218. package/src/shade/renderer/particles/isa/ParticleVMISA.js +505 -136
  219. package/src/shade/renderer/particles/isa/particle_assembly.d.ts +36 -12
  220. package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
  221. package/src/shade/renderer/particles/isa/particle_assembly.js +354 -139
  222. package/src/shade/renderer/particles/isa/validate_particle_program.d.ts +9 -0
  223. package/src/shade/renderer/particles/isa/validate_particle_program.d.ts.map +1 -0
  224. package/src/shade/renderer/particles/isa/validate_particle_program.js +128 -0
  225. package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +23 -0
  226. package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
  227. package/src/shade/renderer/particles/layout/ParticleLayout.js +68 -0
  228. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts +77 -0
  229. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map +1 -0
  230. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js +219 -0
  231. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts +83 -0
  232. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts.map +1 -0
  233. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js +283 -0
  234. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.d.ts +133 -0
  235. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.d.ts.map +1 -0
  236. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.js +334 -0
  237. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.d.ts +117 -0
  238. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.d.ts.map +1 -0
  239. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.js +70 -0
  240. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.d.ts +97 -0
  241. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.d.ts.map +1 -0
  242. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +462 -0
  243. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.d.ts +116 -0
  244. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.d.ts.map +1 -0
  245. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.js +687 -0
  246. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts +57 -0
  247. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts.map +1 -0
  248. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +860 -0
  249. package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.d.ts +115 -0
  250. package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.d.ts.map +1 -0
  251. package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.js +264 -0
  252. package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +81 -42
  253. package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
  254. package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +477 -478
  255. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts +100 -0
  256. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts.map +1 -0
  257. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.js +236 -0
  258. package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts +139 -59
  259. package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts.map +1 -1
  260. package/src/shade/renderer/particles/optimizer/particle_program_analysis.js +764 -647
  261. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +40 -7
  262. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
  263. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +376 -213
  264. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts +30 -3
  265. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts.map +1 -1
  266. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +337 -223
  267. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +24 -38
  268. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
  269. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +166 -206
  270. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts +99 -0
  271. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts.map +1 -0
  272. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.js +313 -0
  273. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts +3 -2
  274. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -1
  275. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.js +198 -197
  276. package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -1
  277. package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts +19 -0
  278. package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -1
  279. package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +678 -561
  280. package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts +22 -0
  281. package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -0
  282. package/src/shade/renderer/particles/optimizer/pass_inline_constants.js +221 -0
  283. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
  284. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.js +63 -72
  285. package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
  286. package/src/shade/renderer/particles/optimizer/pass_pack_registers.js +87 -86
  287. package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
  288. package/src/shade/renderer/particles/optimizer/pass_peephole.js +392 -271
  289. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
  290. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.js +361 -268
  291. package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts +4 -0
  292. package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts.map +1 -0
  293. package/src/shade/renderer/particles/optimizer/pass_schedule.js +244 -0
  294. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
  295. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +154 -151
  296. package/src/shade/renderer/particles/particle_test_fixtures.d.ts +20 -0
  297. package/src/shade/renderer/particles/particle_test_fixtures.d.ts.map +1 -1
  298. package/src/shade/renderer/particles/particle_test_fixtures.js +229 -203
  299. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +99 -25
  300. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  301. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +438 -286
  302. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +109 -0
  303. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -0
  304. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +127 -0
  305. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +87 -102
  306. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  307. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +184 -163
  308. package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts +130 -0
  309. package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts.map +1 -0
  310. package/src/shade/renderer/particles/runtime/ProgramHeap.js +595 -0
  311. package/src/shade/renderer/particles/runtime/ProgramPlacement.d.ts +91 -0
  312. package/src/shade/renderer/particles/runtime/ProgramPlacement.d.ts.map +1 -0
  313. package/src/shade/renderer/particles/runtime/ProgramPlacement.js +106 -0
  314. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +5 -2
  315. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
  316. package/src/shade/renderer/particles/runtime/create_particle_effect.js +22 -19
  317. package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.d.ts +28 -0
  318. package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.d.ts.map +1 -0
  319. package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.js +136 -0
  320. package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.d.ts +35 -0
  321. package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.d.ts.map +1 -0
  322. package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.js +133 -0
  323. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts +18 -9
  324. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  325. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +20 -80
  326. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts +33 -0
  327. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts.map +1 -0
  328. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.js +114 -0
  329. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts +8 -0
  330. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  331. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +33 -101
  332. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts +45 -0
  333. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts.map +1 -0
  334. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.js +123 -0
  335. package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts +51 -0
  336. package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts.map +1 -0
  337. package/src/shade/renderer/particles/sort/graph_particle_sort.js +120 -0
  338. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts +6 -0
  339. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts.map +1 -0
  340. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.js +16 -0
  341. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +4 -1
  342. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
  343. package/src/shade/renderer/particles/vm/ParticleVMReference.js +261 -140
  344. package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
  345. package/src/shade/renderer/particles/vm/chunk_particle_vm.js +217 -255
  346. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.d.ts +43 -0
  347. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.d.ts.map +1 -0
  348. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.js +55 -0
  349. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.d.ts +62 -0
  350. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.d.ts.map +1 -0
  351. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.js +86 -0
  352. package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.d.ts +22 -0
  353. package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.d.ts.map +1 -0
  354. package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.js +32 -0
  355. package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.d.ts +9 -0
  356. package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.d.ts.map +1 -0
  357. package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.js +19 -0
  358. package/src/shade/renderer/shader/chunk/noise/psrdnoise/README.md +65 -0
  359. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.d.ts +24 -0
  360. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.d.ts.map +1 -0
  361. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.js +83 -0
  362. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.d.ts +25 -0
  363. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.d.ts.map +1 -0
  364. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.js +42 -0
  365. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.d.ts +31 -0
  366. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.d.ts.map +1 -0
  367. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.js +80 -0
  368. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.d.ts +26 -0
  369. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.d.ts.map +1 -0
  370. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.js +109 -0
  371. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.d.ts +38 -0
  372. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.d.ts.map +1 -0
  373. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.js +129 -0
  374. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.d.ts +21 -0
  375. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.d.ts.map +1 -0
  376. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.js +35 -0
  377. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.d.ts +19 -0
  378. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.d.ts.map +1 -0
  379. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.js +28 -0
  380. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.d.ts +13 -0
  381. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.d.ts.map +1 -0
  382. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.js +22 -0
  383. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.d.ts +22 -0
  384. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.d.ts.map +1 -0
  385. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.js +59 -0
  386. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.d.ts +23 -0
  387. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.d.ts.map +1 -0
  388. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.js +74 -0
  389. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +7 -0
  390. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
  391. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +7 -0
  392. package/src/shade/wgsl/emulator/ComputeShaderEmulator.d.ts +34 -1
  393. package/src/shade/wgsl/emulator/ComputeShaderEmulator.d.ts.map +1 -1
  394. package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +41 -1
  395. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts +3 -2
  396. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  397. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +49 -10
  398. package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
  399. package/src/view/minimap/dom/MinimapCameraView.js +4 -9
  400. package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.d.ts +0 -15
  401. package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.d.ts.map +0 -1
  402. package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.d.ts +0 -45
  403. package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.d.ts.map +0 -1
  404. package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.d.ts +0 -24
  405. package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.d.ts.map +0 -1
  406. package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.d.ts +0 -19
  407. package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.d.ts.map +0 -1
  408. package/src/engine/ecs/transform/__probe.d.ts +0 -4
  409. package/src/engine/ecs/transform/__probe.d.ts.map +0 -1
  410. package/src/engine/ecs/util/hideEntityGracefully.d.ts +0 -9
  411. package/src/engine/ecs/util/hideEntityGracefully.d.ts.map +0 -1
  412. package/src/engine/sound/simulation/core/OcclusionSolver.js +0 -112
  413. package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts +0 -27
  414. package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts.map +0 -1
  415. package/src/shade/renderer/particles/cull/chunk_particle_cull.d.ts +0 -14
  416. package/src/shade/renderer/particles/cull/chunk_particle_cull.d.ts.map +0 -1
  417. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts +0 -156
  418. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts.map +0 -1
  419. package/src/shade/renderer/particles/runtime/Emitter.d.ts +0 -219
  420. package/src/shade/renderer/particles/runtime/Emitter.d.ts.map +0 -1
  421. package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts +0 -77
  422. package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts.map +0 -1
  423. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +0 -89
  424. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts.map +0 -1
  425. package/src/shade/renderer/particles/runtime/ProgramArena.js +0 -155
  426. package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts +0 -15
  427. package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts.map +0 -1
  428. package/src/shade/renderer/particles/runtime/spawn_request_encoding.d.ts +0 -34
  429. package/src/shade/renderer/particles/runtime/spawn_request_encoding.d.ts.map +0 -1
  430. package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts +0 -32
  431. package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts.map +0 -1
@@ -1,112 +0,0 @@
1
- import { Ray3 } from "../../../../core/geom/3d/ray/Ray3.js";
2
- import { sphere_fibonacci_point } from "../../../../core/geom/3d/sphere/sphere_fibonacci_point.js";
3
- import { random_orthonormal_basis } from "../../../../core/geom/random/random_orthonormal_basis.js";
4
- import { v3_matrix3_rotate } from "../../../../core/geom/vec3/v3_matrix3_rotate.js";
5
- import { RayHit } from "./RayHit.js";
6
-
7
- // module-static scratch — reused across calls so a solve allocates nothing. Typed throughout (the
8
- // vectors carry direction cosines / band ratios, so Float64 native precision is free here).
9
- const RAY = new Ray3();
10
- const HIT = new RayHit();
11
- const FIBONACCI = new Float64Array(3);
12
- const DIRECTION = new Float64Array(3);
13
- const ROTATION = new Float64Array(9);
14
- const TRANSMISSION = new Float64Array(3);
15
-
16
- /**
17
- * Computes per-source occlusion + transmission by shooting rays from the listener toward points spread
18
- * over the source's sphere and counting how many are blocked by the {@link AcousticOccluderIndex}.
19
- *
20
- * - Volumetric (not boolean): occlusion is the FRACTION of blocked rays, so partially-hidden sources
21
- * attenuate smoothly instead of popping on/off.
22
- * - Transmission: blocked rays accumulate their occluder's per-band transmission; the average is the
23
- * energy that leaks through.
24
- * - Temporal: the fibonacci sample set is randomly re-oriented each tick (seeded), and the result is
25
- * folded into an {@link AcousticSourceState} via EMA — so a low per-tick ray count integrates over
26
- * frames and the output stays frame-stable.
27
- *
28
- * Pure: geometry in, numbers out. No WebAudio, no ECS, no allocation.
29
- */
30
- export class OcclusionSolver {
31
- /**
32
- * @param {Vector3} listener listener world position
33
- * @param {Vector3} source source world position
34
- * @param {number} sourceRadius apparent radius of the source (0 = point source → boolean occlusion)
35
- * @param {AcousticOccluderIndex} index
36
- * @param {number} rayCount rays shot this tick (≥ 1)
37
- * @param {number} smoothing EMA factor in (0, 1] — 1 = no smoothing
38
- * @param {function():number} random seeded RNG; decorrelates the sample set per call
39
- * @param {AcousticSourceState} state per-source temporal accumulation (mutated)
40
- * @param {AcousticSolution} out occlusion + transmission written here (medium untouched)
41
- */
42
- solve(listener, source, sourceRadius, index, rayCount, smoothing, random, state, out) {
43
- // a per-tick random orientation for the fibonacci set (decorrelation over frames)
44
- random_orthonormal_basis(ROTATION, 0, random);
45
-
46
- const lx = listener.x;
47
- const ly = listener.y;
48
- const lz = listener.z;
49
-
50
- const sx = source.x;
51
- const sy = source.y;
52
- const sz = source.z;
53
-
54
- let blocked = 0;
55
- let t0 = 0;
56
- let t1 = 0;
57
- let t2 = 0;
58
-
59
- for (let i = 0; i < rayCount; i++) {
60
- sphere_fibonacci_point(FIBONACCI, 0, i, rayCount);
61
- v3_matrix3_rotate(DIRECTION, 0, FIBONACCI[0], FIBONACCI[1], FIBONACCI[2], ROTATION);
62
-
63
- // a sample point spread over the source's sphere
64
- const px = sx + DIRECTION[0] * sourceRadius;
65
- const py = sy + DIRECTION[1] * sourceRadius;
66
- const pz = sz + DIRECTION[2] * sourceRadius;
67
-
68
- const dx = px - lx;
69
- const dy = py - ly;
70
- const dz = pz - lz;
71
-
72
- const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);
73
-
74
- if (distance <= 1e-6) {
75
- // listener sitting on the source — treat as unoccluded for this ray
76
- continue;
77
- }
78
-
79
- const inv = 1 / distance;
80
-
81
- RAY.setOrigin(lx, ly, lz);
82
- RAY.setDirection(dx * inv, dy * inv, dz * inv);
83
- RAY.tMax = distance;
84
-
85
- if (index.closestHit(RAY, HIT)) {
86
- blocked++;
87
-
88
- const transmission = HIT.material.transmission;
89
- t0 += transmission[0];
90
- t1 += transmission[1];
91
- t2 += transmission[2];
92
- }
93
- }
94
-
95
- const occlusion = blocked / rayCount;
96
-
97
- // instantaneous transmission = average blocker transmission; transparent when nothing blocked
98
- if (blocked > 0) {
99
- const inv = 1 / blocked;
100
- TRANSMISSION[0] = t0 * inv;
101
- TRANSMISSION[1] = t1 * inv;
102
- TRANSMISSION[2] = t2 * inv;
103
- } else {
104
- TRANSMISSION[0] = 1;
105
- TRANSMISSION[1] = 1;
106
- TRANSMISSION[2] = 1;
107
- }
108
-
109
- state.integrate(occlusion, TRANSMISSION, smoothing);
110
- state.writeTo(out);
111
- }
112
- }
@@ -1,27 +0,0 @@
1
- /**
2
- * Build the `array<u32>` image of a {@link GPUDatabase} — the exact bytes the generated marshalling
3
- * functions ({@link GPUTypedTableDescriptor#chunk_read} and friends) index: the page address table,
4
- * then pages at the addresses it names, each page's records past its
5
- * `[u32 live_count][u32 occupancy_bitmap...]` header.
6
- *
7
- * This exists for the WGSL emulator. The production route to those bytes is a compute dispatch
8
- * ({@link ./gpu_table_element_upload_shader.js}) against a live device, and the software device
9
- * records dispatches without running them — so a spec that wants to run a database-reading shader
10
- * on the CPU has no way to obtain a filled buffer. Everything here is derived from the descriptor's
11
- * own published geometry (`page_lookup_address`, `elements_per_page`, `page_header_words`,
12
- * `packed_element_size_bytes`), which is the same geometry the upload shader receives as its
13
- * settings, so the two cannot drift apart silently.
14
- *
15
- * Pages are allocated in ascending (table index, page index) order — the addresses therefore differ
16
- * from what a live database's slot allocator would hand out for the same writes. Nothing reads a
17
- * page address except through the table, so the layout is equivalent, not identical.
18
- *
19
- * @param {GPUDatabaseDefinition} definition
20
- * @param {Object<string, Iterable<[number, *]>>} contents records per table name, as
21
- * `[element_index, value]` pairs (a `Map`, or an array of pairs)
22
- * @returns {Uint32Array}
23
- */
24
- export function gpu_database_emulator_image(definition: GPUDatabaseDefinition, contents: {
25
- [x: string]: Iterable<[number, any]>;
26
- }): Uint32Array;
27
- //# sourceMappingURL=gpu_database_emulator_image.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gpu_database_emulator_image.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/buffer/table/gpu_database_emulator_image.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH;QAJkB,MAAM,GAAE,SAAS,CAAC,MAAM,MAAI,CAAC;IAElC,WAAW,CAwFvB"}
@@ -1,14 +0,0 @@
1
- /**
2
- * Frustum culling math for emitter simulation culling (the optional, flagged "sleep when culled"
3
- * feature). A bounding sphere is visible unless it lies fully outside any frustum plane. Planes
4
- * follow the engine's Gribb-Hartmann convention (world space, `dot(n, p) + d >= 0` inside).
5
- *
6
- * The occlusion half of the test reuses the engine's HiZ query
7
- * (`src/webgpu/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.js`) in the cull pass;
8
- * this chunk holds the emulator-testable frustum math.
9
- *
10
- * @type {CodeChunk}
11
- */
12
- export const chunk_particle_cull: CodeChunk;
13
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
14
- //# sourceMappingURL=chunk_particle_cull.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunk_particle_cull.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/cull/chunk_particle_cull.js"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,kCAFU,SAAS,CA0BhB;0BArCuB,oCAAoC"}
@@ -1,156 +0,0 @@
1
- /**
2
- * Compose the flags word from feature toggles + blend + projection.
3
- * @param {object} options
4
- * @param {boolean} [options.lighting]
5
- * @param {boolean} [options.soft_depth]
6
- * @param {boolean} [options.sort]
7
- * @param {boolean} [options.cull]
8
- * @param {number} [options.blend] see {@link EMITTER_BLEND}
9
- * @param {number} [options.projection] see {@link EMITTER_PROJECTION}
10
- * @returns {number}
11
- */
12
- export function make_emitter_flags({ lighting, soft_depth, sort, cull, blend, projection }?: {
13
- lighting?: boolean;
14
- soft_depth?: boolean;
15
- sort?: boolean;
16
- cull?: boolean;
17
- blend?: number;
18
- projection?: number;
19
- }): number;
20
- /** @param {number} flags @returns {number} the blend mode */
21
- export function emitter_flags_blend(flags: number): number;
22
- /** @param {number} flags @returns {number} the projection mode */
23
- export function emitter_flags_projection(flags: number): number;
24
- /**
25
- * Write one emitter record into a shared `u32` view (and its `f32` alias) at record `index`.
26
- *
27
- * @param {Uint32Array} u32 view over the emitter buffer
28
- * @param {Float32Array} f32 f32 alias over the same buffer
29
- * @param {number} index emitter index
30
- * @param {object} def emitter definition
31
- * @param {number} def.spawn_offset
32
- * @param {number} def.spawn_count
33
- * @param {number} def.update_offset
34
- * @param {number} def.update_count
35
- * @param {number} def.constant_offset
36
- * @param {number} def.seed
37
- * @param {number} def.flags
38
- * @param {number} def.spawn_rate
39
- * @param {number[]} def.transform 16-element column-major matrix
40
- * @param {number[]} [def.bounds_center] length-3
41
- * @param {number} [def.bounds_radius]
42
- * @param {object} [def.render] { position, size, color, rotation, frame } attribute word offsets
43
- * @param {number[]} [def.atlas_region] length-4 [uvOffsetX, uvOffsetY, uvScaleX, uvScaleY]
44
- * @param {number[]} [def.flipbook] length-2 [cols, rows]
45
- * @param {number} [def.program_id] dense program id, the simulation-order bucket key
46
- */
47
- export function pack_emitter(u32: Uint32Array, f32: Float32Array, index: number, def: {
48
- spawn_offset: number;
49
- spawn_count: number;
50
- update_offset: number;
51
- update_count: number;
52
- constant_offset: number;
53
- seed: number;
54
- flags: number;
55
- spawn_rate: number;
56
- transform: number[];
57
- bounds_center?: number[];
58
- bounds_radius?: number;
59
- render?: object;
60
- atlas_region?: number[];
61
- flipbook?: number[];
62
- program_id?: number;
63
- }): void;
64
- /**
65
- * Overwrite just an emitter's world transform in a packed buffer.
66
- *
67
- * Used for scene-node / bone attachment: each frame the feature copies the attached `Node3D`'s
68
- * world matrix (`transform_global`) into the emitter record and re-uploads the changed region, so
69
- * the emitter spawns and simulates wherever the bone currently is. Cheaper than repacking the whole
70
- * emitter set.
71
- *
72
- * @param {Float32Array} f32 f32 alias over the emitter buffer
73
- * @param {number} index emitter index
74
- * @param {ArrayLike<number>} matrix 16-element column-major world matrix
75
- */
76
- export function write_emitter_transform(f32: Float32Array, index: number, matrix: ArrayLike<number>): void;
77
- /**
78
- * GPU memory layout for a single emitter record, addressed as `u32` words.
79
- *
80
- * Emitters are read on the GPU via explicit indexed access into an `array<u32>` (the same strategy
81
- * GPUDatabase uses on-device) rather than an `array<Struct>` binding — this keeps the simulate/emit
82
- * shaders trivially testable through the WGSL emulator. The word offsets here are the single source
83
- * of truth shared by the JS packer ({@link pack_emitter}) and the WGSL reader
84
- * ({@link ../data/chunk_particle_emitter.js}, which interpolates them).
85
- *
86
- * f32 fields are stored as their bit pattern and read back with `bitcast<f32>`.
87
- */
88
- /** Word offsets within an emitter record. */
89
- export const EMITTER_FIELD: Readonly<{
90
- SPAWN_OFFSET: 0;
91
- SPAWN_COUNT: 1;
92
- UPDATE_OFFSET: 2;
93
- UPDATE_COUNT: 3;
94
- CONSTANT_OFFSET: 4;
95
- SEED: 5;
96
- FLAGS: 6;
97
- SPAWN_RATE: 7;
98
- TRANSFORM: 8;
99
- BOUNDS_CENTER: 24;
100
- BOUNDS_RADIUS: 27;
101
- RENDER_POSITION: 28;
102
- RENDER_SIZE: 29;
103
- RENDER_COLOR: 30;
104
- RENDER_ROTATION: 31;
105
- RENDER_FRAME: 32;
106
- ATLAS_REGION: 33;
107
- FLIPBOOK: 37;
108
- RENDER_VELOCITY: 39;
109
- /**
110
- * u32 — dense id of the compiled program this emitter runs, assigned by
111
- * {@link ../runtime/ProgramArena.js}. Emitters sharing a program share an id.
112
- *
113
- * The simulation-order bucketing (`coherence/`) histograms on this: it needs a small dense
114
- * integer to index a bin with, which neither the emitter index (one bucket per emitter, even
115
- * when they run the same code) nor `UPDATE_OFFSET` (an arena word offset, arbitrarily large
116
- * and sparse) gives it.
117
- */
118
- PROGRAM_ID: 40;
119
- }>;
120
- /** Number of `u32` words per emitter record. */
121
- export const EMITTER_STRIDE: 41;
122
- /** Sentinel for an absent render-attribute binding. */
123
- export const EMITTER_ATTRIBUTE_ABSENT: 4294967295;
124
- /** Sentinel for "not attached to a scene node". */
125
- export const EMITTER_ATTACH_NONE: 4294967295;
126
- /**
127
- * Emitter flag bits. Blend mode occupies bits [4,6), projection mode bits [6,9).
128
- */
129
- export const EMITTER_FLAG: Readonly<{
130
- LIGHTING: number;
131
- SOFT_DEPTH: number;
132
- SORT: number;
133
- CULL: number;
134
- }>;
135
- /** Blend modes (stored in flag bits [4,6)). All expressed by one premultiplied blend pipeline. */
136
- export const EMITTER_BLEND: Readonly<{
137
- ALPHA: 0;
138
- ADDITIVE: 1;
139
- PREMULTIPLIED: 2;
140
- }>;
141
- /** Projection / orientation modes (stored in flag bits [6,9)). */
142
- export const EMITTER_PROJECTION: Readonly<{
143
- BILLBOARD: 0;
144
- STRETCHED: 1;
145
- HORIZONTAL: 2;
146
- VERTICAL: 3;
147
- FACING_WORLD: 4;
148
- }>;
149
- /** Shift/mask constants exposed for the WGSL reader to interpolate. */
150
- export const EMITTER_FLAG_ENCODING: Readonly<{
151
- BLEND_SHIFT: 4;
152
- BLEND_MASK: number;
153
- PROJECTION_SHIFT: 6;
154
- PROJECTION_MASK: number;
155
- }>;
156
- //# sourceMappingURL=PARTICLE_EMITTER_LAYOUT.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PARTICLE_EMITTER_LAYOUT.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.js"],"names":[],"mappings":"AA4FA;;;;;;;;;;GAUG;AACH;IAR6B,QAAQ,GAA1B,OAAO;IACW,UAAU,GAA5B,OAAO;IACW,IAAI,GAAtB,OAAO;IACW,IAAI,GAAtB,OAAO;IACU,KAAK,GAAtB,MAAM;IACW,UAAU,GAA3B,MAAM;IACJ,MAAM,CAWlB;AAED,6DAA6D;AAC7D,2CADY,MAAM,GAAkB,MAAM,CAGzC;AAED,kEAAkE;AAClE,gDADY,MAAM,GAAkB,MAAM,CAGzC;AAOD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,kCApBW,WAAW,OACX,YAAY,SACZ,MAAM;IAEM,YAAY,EAAxB,MAAM;IACM,WAAW,EAAvB,MAAM;IACM,aAAa,EAAzB,MAAM;IACM,YAAY,EAAxB,MAAM;IACM,eAAe,EAA3B,MAAM;IACM,IAAI,EAAhB,MAAM;IACM,KAAK,EAAjB,MAAM;IACM,UAAU,EAAtB,MAAM;IACQ,SAAS,EAAvB,MAAM,EAAE;IACO,aAAa,GAA5B,MAAM,EAAE;IACK,aAAa,GAA1B,MAAM;IACO,MAAM,GAAnB,MAAM;IACS,YAAY,GAA3B,MAAM,EAAE;IACO,QAAQ,GAAvB,MAAM,EAAE;IACK,UAAU,GAAvB,MAAM;SA0ChB;AAED;;;;;;;;;;;GAWG;AACH,6CAJW,YAAY,SACZ,MAAM,UACN,UAAU,MAAM,CAAC,QAO3B;AAnND;;;;;;;;;;GAUG;AAEH,6CAA6C;AAC7C;;;;;;;;;;;;;;;;;;;;IA0BI;;;;;;;;OAQG;;GAEJ;AAEH,gDAAgD;AAChD,gCAAiC;AAEjC,uDAAuD;AACvD,kDAAmD;AAEnD,mDAAmD;AACnD,6CAA8C;AAE9C;;GAEG;AACH;;;;;GAKG;AAEH,kGAAkG;AAClG;;;;GAIG;AAKH,kEAAkE;AAClE;;;;;;GAMG;AAqCH,uEAAuE;AACvE;;;;;GAEG"}
@@ -1,219 +0,0 @@
1
- /**
2
- * Render channels an emitter can bind to one of its effect's per-particle attributes. The names
3
- * match the `render_*` fields of {@link ../data/PARTICLE_EMITTER_STRUCT.js}.
4
- *
5
- * @type {string[]}
6
- */
7
- export const EMITTER_RENDER_CHANNELS: string[];
8
- /**
9
- * One emitter: a compiled effect bound to instance parameters — world transform, spawn rate,
10
- * blend / projection / feature flags, bounds sphere, render-attribute bindings, atlas region and
11
- * flipbook grid.
12
- *
13
- * This is the CPU model of exactly one row of the emitter table
14
- * ({@link ../data/PARTICLE_EMITTER_STRUCT.js}); {@link to_record} is the whole of the translation
15
- * between the two. Fields are plain data with no setters — after changing any of them, set
16
- * {@link dirty} so {@link ../runtime/EmitterRegistry.js} restages the row on its next flush. The
17
- * flag rather than a setter per field because a row is restaged whole either way: one changed field
18
- * and ten cost the same upload.
19
- *
20
- * Instances are created by {@link EmitterRegistry#add}, which assigns {@link id} and resolves the
21
- * program placement. Constructing one directly gives you an emitter no table knows about.
22
- */
23
- export class Emitter {
24
- /**
25
- * Build an emitter from a plain description. Every parameter is optional except the effect —
26
- * an emitter with no program has nothing to run.
27
- *
28
- * @param {object} config
29
- * @param {{layout: object, program: object}} config.effect compiled effect, see
30
- * {@link ./create_particle_effect.js}
31
- * @param {ArrayLike<number>} [config.transform] 16-element column-major local-to-world
32
- * @param {number} [config.seed]
33
- * @param {number} [config.spawn_rate] particles/second
34
- * @param {object} [config.flags] passed to {@link make_emitter_flags}
35
- * @param {{center?: ArrayLike<number>, radius?: number}} [config.bounds]
36
- * @param {Object<string,string>} [config.render] render channel -> attribute name
37
- * @param {ArrayLike<number>} [config.atlas_region] [uvOffsetX, uvOffsetY, uvScaleX, uvScaleY]
38
- * @param {ArrayLike<number>} [config.flipbook] [cols, rows]
39
- * @param {object} [config.node] scene node to follow, see {@link attach_to}
40
- * @returns {Emitter}
41
- */
42
- static from(config: {
43
- effect: {
44
- layout: object;
45
- program: object;
46
- };
47
- transform?: ArrayLike<number>;
48
- seed?: number;
49
- spawn_rate?: number;
50
- flags?: object;
51
- bounds?: {
52
- center?: ArrayLike<number>;
53
- radius?: number;
54
- };
55
- render?: {
56
- [x: string]: string;
57
- };
58
- atlas_region?: ArrayLike<number>;
59
- flipbook?: ArrayLike<number>;
60
- node?: object;
61
- }): Emitter;
62
- /**
63
- * Row this emitter occupies in the emitter table. Stable for the emitter's whole life — it is
64
- * what every live particle's record header stores, so it cannot be renumbered while particles
65
- * are in flight. `-1` until the registry assigns one.
66
- *
67
- * @type {number}
68
- */
69
- id: number;
70
- /**
71
- * Compiled effect: the per-particle attribute layout plus the SPAWN/UPDATE bytecode.
72
- *
73
- * @type {{layout: import("../layout/ParticleLayout.js").ParticleLayout, program: import("../isa/ParticleProgram.js").ParticleProgram}}
74
- */
75
- effect: {
76
- layout: import("../layout/ParticleLayout.js").ParticleLayout;
77
- program: import("../isa/ParticleProgram.js").ParticleProgram;
78
- };
79
- /**
80
- * Where this emitter's program sits in the shared arena, and the dense program id the
81
- * simulation-order bucketing keys on. Assigned by {@link EmitterRegistry#add} from
82
- * {@link ../runtime/ProgramArena.js}; emitters compiled from the same graph share one.
83
- *
84
- * @type {{spawn_offset: number, spawn_count: number, update_offset: number, update_count: number, constant_offset: number, program_id: number}}
85
- */
86
- placement: {
87
- spawn_offset: number;
88
- spawn_count: number;
89
- update_offset: number;
90
- update_count: number;
91
- constant_offset: number;
92
- program_id: number;
93
- };
94
- /**
95
- * Local-to-world, column-major.
96
- * @type {Float32Array}
97
- */
98
- transform: Float32Array;
99
- /**
100
- * Base RNG seed.
101
- *
102
- * Two emitters running one program produce identical particles from identical seeds, so leaving
103
- * this at 0 is almost never what an author wants — {@link EmitterRegistry#add} reads 0 as
104
- * "unset" and derives one from the row instead.
105
- *
106
- * @type {number}
107
- */
108
- seed: number;
109
- /**
110
- * Continuous emission rate, particles per second. Consumed on the CPU by
111
- * {@link ./ParticleSpawnScheduler.js} and carried in the record for shaders that want it.
112
- * @type {number}
113
- */
114
- spawn_rate: number;
115
- /**
116
- * Packed feature / blend / projection bits — see {@link make_emitter_flags}.
117
- * @type {number}
118
- */
119
- flags: number;
120
- /**
121
- * Bounding sphere in emitter-local space, used by the optional simulation culling.
122
- * @type {Float32Array}
123
- */
124
- bounds_center: Float32Array;
125
- /**
126
- * @type {number}
127
- */
128
- bounds_radius: number;
129
- /**
130
- * Atlas sub-rect: uv offset `.xy`, uv scale `.zw`. Mirrors meep's `AtlasPatch`.
131
- * @type {Float32Array}
132
- */
133
- atlas_region: Float32Array;
134
- /**
135
- * Flipbook grid: columns, rows. `[1, 1]` is a single frame.
136
- * @type {Float32Array}
137
- */
138
- flipbook: Float32Array;
139
- /** @type {number} record word offset of world position, or {@link EMITTER_ATTRIBUTE_ABSENT} */
140
- render_position: number;
141
- /** @type {number} record word offset of size */
142
- render_size: number;
143
- /** @type {number} record word offset of rgba colour */
144
- render_color: number;
145
- /** @type {number} record word offset of roll angle, radians */
146
- render_rotation: number;
147
- /** @type {number} record word offset of flipbook frame index */
148
- render_frame: number;
149
- /** @type {number} record word offset of velocity, read by the STRETCHED projection */
150
- render_velocity: number;
151
- /**
152
- * Scene node (bone) this emitter follows, if any. While set, the system copies the node's world
153
- * matrix into {@link transform} every frame, so the emitter spawns and simulates wherever the
154
- * bone currently is.
155
- *
156
- * @type {{transform_global: {matrix: ArrayLike<number>}}|undefined}
157
- */
158
- node: {
159
- transform_global: {
160
- matrix: ArrayLike<number>;
161
- };
162
- } | undefined;
163
- /**
164
- * Whether the table row is out of step with the fields above. Set it after changing anything;
165
- * {@link EmitterRegistry#flush} clears it once the row has been staged for upload.
166
- *
167
- * @type {boolean}
168
- */
169
- dirty: boolean;
170
- /**
171
- * Point the emitter at a scene node, or at nothing.
172
- *
173
- * @param {{transform_global: {matrix: ArrayLike<number>}}} [node]
174
- */
175
- attach_to(node?: {
176
- transform_global: {
177
- matrix: ArrayLike<number>;
178
- };
179
- }): void;
180
- /**
181
- * Copy a world matrix into {@link transform} and mark the row for re-upload.
182
- *
183
- * @param {ArrayLike<number>} matrix 16-element column-major
184
- */
185
- set_transform(matrix: ArrayLike<number>): void;
186
- /**
187
- * Bind render channels to per-particle attributes of this emitter's effect, by attribute name.
188
- * Channels left out of `channels` keep whatever they had; a channel that was never bound stays
189
- * at {@link EMITTER_ATTRIBUTE_ABSENT}, which the passes read as "this emitter has no such
190
- * attribute" — the render pass substitutes a default, the sort pass treats the particle as
191
- * being at the origin.
192
- *
193
- * The record stores word offsets rather than names because that is what the render and sort
194
- * passes index a particle record with; resolving here is the only place a name is involved.
195
- *
196
- * @param {Object<string,string>} channels channel name (see {@link EMITTER_RENDER_CHANNELS}) ->
197
- * attribute name in the effect's layout
198
- */
199
- bind_render(channels: {
200
- [x: string]: string;
201
- }): void;
202
- /**
203
- * This emitter as the value the emitter table stores — every field of
204
- * {@link ../data/PARTICLE_EMITTER_STRUCT.js}, none omitted.
205
- *
206
- * Omitting one would not write zeros: the serializer skips absent fields, and table pages are
207
- * recycled buffers, so a skipped field keeps whatever the previous tenant of the slot left
208
- * there.
209
- *
210
- * @returns {object}
211
- */
212
- to_record(): object;
213
- /**
214
- * @readonly
215
- * @type {boolean}
216
- */
217
- readonly isEmitter: boolean;
218
- }
219
- //# sourceMappingURL=Emitter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Emitter.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/runtime/Emitter.js"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,sCAFU,MAAM,EAAE,CAIf;AAEH;;;;;;;;;;;;;;GAcG;AACH;IAqNI;;;;;;;;;;;;;;;;;OAiBG;IACH;QAbqD,MAAM,EAAhD;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAC;QAEN,SAAS,GAApC,UAAU,MAAM,CAAC;QACD,IAAI,GAApB,MAAM;QACU,UAAU,GAA1B,MAAM;QACU,KAAK,GAArB,MAAM;QACiD,MAAM,GAA7D;YAAC,MAAM,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAC;QACd,MAAM;gBAA9B,MAAM,GAAC,MAAM;;QACO,YAAY,GAAvC,UAAU,MAAM,CAAC;QACU,QAAQ,GAAnC,UAAU,MAAM,CAAC;QACD,IAAI,GAApB,MAAM;QACJ,OAAO,CAoDnB;IAvRD;;;;;;OAMG;IACH,IAFU,MAAM,CAER;IAER;;;;OAIG;IACH,QAFU;QAAC,MAAM,EAAE,OAAO,6BAA6B,EAAE,cAAc,CAAC;QAAC,OAAO,EAAE,OAAO,2BAA2B,EAAE,eAAe,CAAA;KAAC,CAE/H;IAEP;;;;;;OAMG;IACH,WAFU;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CAErI;IAEV;;;OAGG;IACH,WAFU,YAAY,CAEiB;IAEvC;;;;;;;;OAQG;IACH,MAFU,MAAM,CAEP;IAET;;;;OAIG;IACH,YAFU,MAAM,CAED;IAEf;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,eAFU,YAAY,CAEc;IAEpC;;OAEG;IACH,eAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,cAFU,YAAY,CAEwB;IAE9C;;;OAGG;IACH,UAFU,YAAY,CAEc;IAEpC,+FAA+F;IAC/F,iBADW,MAAM,CAC0B;IAC3C,gDAAgD;IAChD,aADW,MAAM,CACsB;IACvC,uDAAuD;IACvD,cADW,MAAM,CACuB;IACxC,+DAA+D;IAC/D,iBADW,MAAM,CAC0B;IAC3C,gEAAgE;IAChE,cADW,MAAM,CACuB;IACxC,sFAAsF;IACtF,iBADW,MAAM,CAC0B;IAE3C;;;;;;OAMG;IACH,MAFU;QAAC,gBAAgB,EAAE;YAAC,MAAM,EAAE,UAAU,MAAM,CAAC,CAAA;SAAC,CAAA;KAAC,GAAC,SAAS,CAE9D;IAEL;;;;;OAKG;IACH,OAFU,OAAO,CAEJ;IAEb;;;;OAIG;IACH,iBAFW;QAAC,gBAAgB,EAAE;YAAC,MAAM,EAAE,UAAU,MAAM,CAAC,CAAA;SAAC,CAAA;KAAC,QAIzD;IAED;;;;OAIG;IACH,sBAFW,UAAU,MAAM,CAAC,QAO3B;IAED;;;;;;;;;;;;OAYG;IACH;YAHkB,MAAM,GAAC,MAAM;aA2B9B;IAED;;;;;;;;;OASG;IACH,aAFa,MAAM,CAiClB;IAyEL;;;OAGG;IACH,oBAFU,OAAO,CAEU;CAN1B"}
@@ -1,77 +0,0 @@
1
- /**
2
- * CPU-side spawn scheduling. Each frame it turns per-emitter spawn rates (and the cull/sleep state)
3
- * into a flat list of spawn requests (packed emitter id + batch fraction per particle to create,
4
- * see {@link spawn_request_pack}) that the emit pass consumes. Emitters are few and CPU-authored,
5
- * so deciding *how many* to spawn on the CPU is cheap and keeps the GPU emit pass a simple
6
- * "one thread per new particle".
7
- *
8
- * Sleep-when-culled: a culled emitter accumulates sleep time and spawns nothing. When it becomes
9
- * visible again it emits a bounded catch-up burst approximating the spawns it missed, mirroring the
10
- * catch-up in meep's ParticularEngine (but capped so a long occlusion can't spike the pool).
11
- *
12
- * State is keyed by {@link Emitter#id}, not by position in the emitter array: ids are stable and
13
- * sparse, positions are neither, and a positional key would silently hand a new emitter the
14
- * accumulator and sleep debt of whichever one used to sit at its index.
15
- */
16
- export class ParticleSpawnScheduler {
17
- /**
18
- * @param {object} [options]
19
- * @param {number} [options.max_catchup_seconds] cap on how much missed time a wake burst covers
20
- */
21
- constructor({ max_catchup_seconds }?: {
22
- max_catchup_seconds?: number;
23
- });
24
- /**
25
- * Cap on how much missed time a wake-up burst covers, in seconds.
26
- * @type {number}
27
- */
28
- max_catchup_seconds: number;
29
- /**
30
- * Emitter id -> its bookkeeping.
31
- * @type {Map<number, ParticleSpawnState>}
32
- */
33
- state: Map<number, ParticleSpawnState>;
34
- /**
35
- * Drop bookkeeping for an emitter that is no longer registered, so a later emitter reusing that
36
- * table row starts from zero instead of inheriting a stranger's accumulator.
37
- *
38
- * @param {number} id
39
- */
40
- forget(id: number): void;
41
- /**
42
- * Produce this frame's spawn requests.
43
- *
44
- * @param {Iterable<import("./Emitter.js").Emitter>} emitters the live emitters
45
- * @param {number} dt seconds
46
- * @param {(emitter: import("./Emitter.js").Emitter) => boolean} [is_visible] cull predicate
47
- * (default: all visible)
48
- * @param {number} [capacity] optional hard cap on total requests this frame
49
- * @returns {Uint32Array} flat list of packed spawn requests (emitter id + batch fraction),
50
- * one per particle to spawn — see {@link spawn_request_pack}
51
- */
52
- tick(emitters: Iterable<import("./Emitter.js").Emitter>, dt: number, is_visible?: (emitter: import("./Emitter.js").Emitter) => boolean, capacity?: number): Uint32Array;
53
- #private;
54
- }
55
- /**
56
- * Per-emitter spawn bookkeeping, carried across frames.
57
- */
58
- declare class ParticleSpawnState {
59
- /**
60
- * Fractional particles owed. A rate of 0.5/s at 60fps owes 1/120 of a particle per frame; the
61
- * whole part is emitted and the remainder carried, so the emitter fires once every two seconds
62
- * rather than never.
63
- * @type {number}
64
- */
65
- accumulator: number;
66
- /**
67
- * Seconds spent culled since the emitter was last visible.
68
- * @type {number}
69
- */
70
- sleep_time: number;
71
- /**
72
- * @type {boolean}
73
- */
74
- was_visible: boolean;
75
- }
76
- export {};
77
- //# sourceMappingURL=ParticleSpawnScheduler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ParticleSpawnScheduler.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/runtime/ParticleSpawnScheduler.js"],"names":[],"mappings":"AA0BA;;;;;;;;;;;;;;GAcG;AACH;IAcI;;;OAGG;IACH;QAF4B,mBAAmB,GAApC,MAAM;OAIhB;IAlBD;;;OAGG;IACH,qBAFU,MAAM,CAEQ;IAExB;;;OAGG;IACH,OAFU,IAAI,MAAM,EAAE,kBAAkB,CAAC,CAEvB;IA2BlB;;;;;OAKG;IACH,WAFW,MAAM,QAIhB;IAED;;;;;;;;;;OAUG;IACH,eARW,SAAS,OAAO,cAAc,EAAE,OAAO,CAAC,MACxC,MAAM,yBACI,OAAO,cAAc,EAAE,OAAO,KAAK,OAAO,aAEpD,MAAM,GACJ,WAAW,CA6CvB;;CACJ;AA9ID;;GAEG;AACH;IACI;;;;;OAKG;IACH,aAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,YAFU,MAAM,CAED;IAEf;;OAEG;IACH,aAFU,OAAO,CAEE;CACtB"}