@woosh/meep-engine 3.15.0 → 3.17.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 (1118) hide show
  1. package/editor/Editor.js +7 -7
  2. package/editor/actions/concrete/TransformModifyAction.d.ts +4 -4
  3. package/editor/actions/concrete/TransformModifyAction.d.ts.map +1 -1
  4. package/editor/actions/concrete/TransformModifyAction.js +4 -4
  5. package/editor/camera/camera_framing.js +7 -7
  6. package/editor/ecs/component/editors/ecs/Transform64Editor.d.ts +20 -0
  7. package/editor/ecs/component/editors/ecs/Transform64Editor.d.ts.map +1 -0
  8. package/editor/ecs/component/editors/ecs/Transform64Editor.js +70 -0
  9. package/editor/ecs/component/prototypeObjectEditor.js +2 -2
  10. package/editor/ecs/component/registerEngineComponentEditors.js +3 -3
  11. package/editor/particles/effect/ParticleEffectDocument.d.ts +411 -0
  12. package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -0
  13. package/editor/particles/effect/ParticleEffectDocument.js +1010 -0
  14. package/editor/particles/effect/ParticleReferenceSimulation.d.ts +113 -0
  15. package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -0
  16. package/editor/particles/effect/ParticleReferenceSimulation.js +377 -0
  17. package/editor/particles/effect/actions/ParticleGroupDefineAction.d.ts +35 -0
  18. package/editor/particles/effect/actions/ParticleGroupDefineAction.d.ts.map +1 -0
  19. package/editor/particles/effect/actions/ParticleGroupDefineAction.js +45 -0
  20. package/editor/particles/effect/make_starter_particle_effect.d.ts +23 -0
  21. package/editor/particles/effect/make_starter_particle_effect.d.ts.map +1 -0
  22. package/editor/particles/effect/make_starter_particle_effect.js +177 -0
  23. package/editor/persistence/buildNewSceneDataset.d.ts.map +1 -1
  24. package/editor/persistence/buildNewSceneDataset.js +10 -8
  25. package/editor/process/symbolic/AudioEmitterSymbolicDisplay.js +67 -67
  26. package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
  27. package/editor/process/symbolic/GridPositionSymbolicDisplay.js +6 -6
  28. package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
  29. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts.map +1 -1
  30. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.js +6 -3
  31. package/editor/process/symbolic/PositionedMarkerSymbolicDisplay.js +6 -6
  32. package/editor/selection/editor_pick.js +130 -130
  33. package/editor/templates/entity_templates.js +7 -7
  34. package/editor/tools/TransformToolV2.d.ts +3 -3
  35. package/editor/tools/TransformToolV2.d.ts.map +1 -1
  36. package/editor/tools/TransformToolV2.js +58 -25
  37. package/editor/tools/paint/TerrainHeightPaintTool.d.ts.map +1 -1
  38. package/editor/tools/paint/TerrainHeightPaintTool.js +11 -9
  39. package/editor/tools/v2/GizmoNode.js +2 -2
  40. package/editor/tools/v2/TransformControls.d.ts +3 -3
  41. package/editor/tools/v2/TransformControls.d.ts.map +1 -1
  42. package/editor/tools/v2/TransformControls.js +1003 -971
  43. package/editor/tools/v2/handle/gizmo_drag_plane.d.ts.map +1 -1
  44. package/editor/tools/v2/handle/gizmo_drag_plane.js +6 -1
  45. package/editor/view/ecs/components/common/AutoCanvasView.js +17 -0
  46. package/editor/view/node-graph/NodeGraphClipboard.d.ts +186 -0
  47. package/editor/view/node-graph/NodeGraphClipboard.d.ts.map +1 -0
  48. package/editor/view/node-graph/NodeGraphClipboard.js +231 -0
  49. package/editor/view/node-graph/NodeGraphEditorView.d.ts +201 -2
  50. package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
  51. package/editor/view/node-graph/NodeGraphEditorView.js +602 -7
  52. package/editor/view/node-graph/NodeGraphMinimapView.d.ts +120 -0
  53. package/editor/view/node-graph/NodeGraphMinimapView.d.ts.map +1 -0
  54. package/editor/view/node-graph/NodeGraphMinimapView.js +859 -0
  55. package/editor/view/node-graph/NodeGraphPaletteView.d.ts +112 -0
  56. package/editor/view/node-graph/NodeGraphPaletteView.d.ts.map +1 -0
  57. package/editor/view/node-graph/NodeGraphPaletteView.js +352 -0
  58. package/editor/view/node-graph/NodeGraphSearchMenuView.d.ts +76 -0
  59. package/editor/view/node-graph/NodeGraphSearchMenuView.d.ts.map +1 -0
  60. package/editor/view/node-graph/NodeGraphSearchMenuView.js +247 -0
  61. package/editor/view/node-graph/NodeGraphView.d.ts +147 -5
  62. package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
  63. package/editor/view/node-graph/NodeGraphView.js +891 -82
  64. package/editor/view/node-graph/NodeIconView.d.ts +33 -0
  65. package/editor/view/node-graph/NodeIconView.d.ts.map +1 -0
  66. package/editor/view/node-graph/NodeIconView.js +54 -0
  67. package/editor/view/node-graph/NodeView.d.ts +71 -1
  68. package/editor/view/node-graph/NodeView.d.ts.map +1 -1
  69. package/editor/view/node-graph/NodeView.js +318 -17
  70. package/editor/view/node-graph/PortView.d.ts +41 -1
  71. package/editor/view/node-graph/PortView.d.ts.map +1 -1
  72. package/editor/view/node-graph/PortView.js +121 -69
  73. package/editor/view/node-graph/actions/ConnectionDeleteAction.d.ts +16 -3
  74. package/editor/view/node-graph/actions/ConnectionDeleteAction.d.ts.map +1 -1
  75. package/editor/view/node-graph/actions/ConnectionDeleteAction.js +29 -3
  76. package/editor/view/node-graph/actions/NodeCreateAction.d.ts +65 -0
  77. package/editor/view/node-graph/actions/NodeCreateAction.d.ts.map +1 -0
  78. package/editor/view/node-graph/actions/NodeCreateAction.js +108 -0
  79. package/editor/view/node-graph/actions/NodeDeleteAction.d.ts +6 -0
  80. package/editor/view/node-graph/actions/NodeDeleteAction.d.ts.map +1 -1
  81. package/editor/view/node-graph/actions/NodeDeleteAction.js +24 -2
  82. package/editor/view/node-graph/actions/connection_bind_actions.d.ts +23 -0
  83. package/editor/view/node-graph/actions/connection_bind_actions.d.ts.map +1 -0
  84. package/editor/view/node-graph/actions/connection_bind_actions.js +39 -0
  85. package/editor/view/node-graph/connection_wire_geometry.d.ts +34 -0
  86. package/editor/view/node-graph/connection_wire_geometry.d.ts.map +1 -1
  87. package/editor/view/node-graph/connection_wire_geometry.js +79 -3
  88. package/editor/view/node-graph/node-graph.css +678 -0
  89. package/editor/view/particles/effect/ParticleCodeEditorView.d.ts +37 -0
  90. package/editor/view/particles/effect/ParticleCodeEditorView.d.ts.map +1 -0
  91. package/editor/view/particles/effect/ParticleCodeEditorView.js +480 -0
  92. package/editor/view/particles/effect/ParticleCurveEditorView.d.ts +20 -0
  93. package/editor/view/particles/effect/ParticleCurveEditorView.d.ts.map +1 -0
  94. package/editor/view/particles/effect/ParticleCurveEditorView.js +574 -0
  95. package/editor/view/particles/effect/ParticleEffectEditorView.d.ts +61 -0
  96. package/editor/view/particles/effect/ParticleEffectEditorView.d.ts.map +1 -0
  97. package/editor/view/particles/effect/ParticleEffectEditorView.js +223 -0
  98. package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts +25 -0
  99. package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -0
  100. package/editor/view/particles/effect/ParticleEmitterInspectorView.js +632 -0
  101. package/editor/view/particles/effect/ParticleGradientEditorView.d.ts +24 -0
  102. package/editor/view/particles/effect/ParticleGradientEditorView.d.ts.map +1 -0
  103. package/editor/view/particles/effect/ParticleGradientEditorView.js +472 -0
  104. package/editor/view/particles/effect/ParticleGraphEditorView.d.ts +161 -0
  105. package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -0
  106. package/editor/view/particles/effect/ParticleGraphEditorView.js +1666 -0
  107. package/editor/view/particles/effect/ParticleNodeParametersView.d.ts +22 -0
  108. package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -0
  109. package/editor/view/particles/effect/ParticleNodeParametersView.js +553 -0
  110. package/editor/view/particles/effect/ParticlePreviewView.d.ts +52 -0
  111. package/editor/view/particles/effect/ParticlePreviewView.d.ts.map +1 -0
  112. package/editor/view/particles/effect/ParticlePreviewView.js +533 -0
  113. package/editor/view/particles/effect/particle-editor.css +644 -0
  114. package/editor/view/prepareMeshLibrary.d.ts.map +1 -1
  115. package/editor/view/prepareMeshLibrary.js +8 -4
  116. package/package.json +1 -1
  117. package/samples/engine/first-scene/main.js +152 -152
  118. package/samples/generation/generators/mir_generator_place_bases.js +3 -3
  119. package/src/core/assert.d.ts +28 -24
  120. package/src/core/assert.d.ts.map +1 -1
  121. package/src/core/assert.js +34 -26
  122. package/src/core/binary/allocator/OffsetAllocator.d.ts +25 -16
  123. package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
  124. package/src/core/binary/allocator/OffsetAllocator.js +10 -1
  125. package/src/core/collection/array/typed/float32_array_hash.d.ts +21 -0
  126. package/src/core/collection/array/typed/float32_array_hash.d.ts.map +1 -0
  127. package/src/core/collection/array/typed/float32_array_hash.js +38 -0
  128. package/src/core/geom/3d/shape/PosedShape3D.d.ts +17 -0
  129. package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
  130. package/src/core/geom/3d/shape/PosedShape3D.js +34 -2
  131. package/src/core/graph/csr/CSRGraph.d.ts +8 -1
  132. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -1
  133. package/src/core/graph/csr/CSRGraph.js +14 -6
  134. package/src/core/graph/format/graphviz/graphviz_escape_html_label.d.ts +17 -0
  135. package/src/core/graph/format/graphviz/graphviz_escape_html_label.d.ts.map +1 -0
  136. package/src/core/graph/format/graphviz/graphviz_escape_html_label.js +25 -0
  137. package/src/core/graph/format/graphviz/graphviz_escape_quoted.d.ts +16 -0
  138. package/src/core/graph/format/graphviz/graphviz_escape_quoted.d.ts.map +1 -0
  139. package/src/core/graph/format/graphviz/graphviz_escape_quoted.js +24 -0
  140. package/src/core/model/node-graph/NodeGraph.d.ts +12 -0
  141. package/src/core/model/node-graph/NodeGraph.d.ts.map +1 -1
  142. package/src/core/model/node-graph/NodeGraph.js +21 -6
  143. package/src/core/model/node-graph/node/NodeDescription.d.ts +36 -0
  144. package/src/core/model/node-graph/node/NodeDescription.d.ts.map +1 -1
  145. package/src/core/model/node-graph/node/NodeDescription.js +41 -0
  146. package/src/core/model/node-graph/visual/ConnectionVisualData.d.ts +119 -0
  147. package/src/core/model/node-graph/visual/ConnectionVisualData.d.ts.map +1 -0
  148. package/src/core/model/node-graph/visual/ConnectionVisualData.js +317 -0
  149. package/src/core/model/node-graph/visual/NodeDescriptionVisualRegistry.d.ts +4 -0
  150. package/src/core/model/node-graph/visual/NodeDescriptionVisualRegistry.d.ts.map +1 -1
  151. package/src/core/model/node-graph/visual/NodeDescriptionVisualRegistry.js +125 -22
  152. package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts +91 -2
  153. package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
  154. package/src/core/model/node-graph/visual/NodeGraphVisualData.js +164 -113
  155. package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.d.ts +162 -0
  156. package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.d.ts.map +1 -0
  157. package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.js +288 -0
  158. package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts +133 -0
  159. package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts.map +1 -0
  160. package/src/core/model/node-graph/visual/layout/LayoutProblem.js +168 -0
  161. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +175 -0
  162. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts.map +1 -0
  163. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js +203 -0
  164. package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts +226 -0
  165. package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts.map +1 -0
  166. package/src/core/model/node-graph/visual/layout/RouteGrid.js +405 -0
  167. package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts +159 -0
  168. package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts.map +1 -0
  169. package/src/core/model/node-graph/visual/layout/RouteSearch.js +436 -0
  170. package/src/core/model/node-graph/visual/layout/RouteSet.d.ts +93 -0
  171. package/src/core/model/node-graph/visual/layout/RouteSet.d.ts.map +1 -0
  172. package/src/core/model/node-graph/visual/layout/RouteSet.js +176 -0
  173. package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.d.ts +48 -0
  174. package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.d.ts.map +1 -0
  175. package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.js +561 -0
  176. package/src/core/model/node-graph/visual/layout/layout_assign_layers.d.ts +34 -0
  177. package/src/core/model/node-graph/visual/layout/layout_assign_layers.d.ts.map +1 -0
  178. package/src/core/model/node-graph/visual/layout/layout_assign_layers.js +202 -0
  179. package/src/core/model/node-graph/visual/layout/layout_break_cycles.d.ts +34 -0
  180. package/src/core/model/node-graph/visual/layout/layout_break_cycles.d.ts.map +1 -0
  181. package/src/core/model/node-graph/visual/layout/layout_break_cycles.js +254 -0
  182. package/src/core/model/node-graph/visual/layout/layout_build_problem.d.ts +29 -0
  183. package/src/core/model/node-graph/visual/layout/layout_build_problem.d.ts.map +1 -0
  184. package/src/core/model/node-graph/visual/layout/layout_build_problem.js +191 -0
  185. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts +35 -0
  186. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts.map +1 -0
  187. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.js +109 -0
  188. package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts +59 -0
  189. package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts.map +1 -0
  190. package/src/core/model/node-graph/visual/layout/layout_node_graph.js +173 -0
  191. package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts +46 -0
  192. package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +1 -0
  193. package/src/core/model/node-graph/visual/layout/layout_order_layers.js +534 -0
  194. package/src/core/model/node-graph/visual/layout/layout_orient_links.d.ts +21 -0
  195. package/src/core/model/node-graph/visual/layout/layout_orient_links.d.ts.map +1 -0
  196. package/src/core/model/node-graph/visual/layout/layout_orient_links.js +49 -0
  197. package/src/core/model/node-graph/visual/layout/route_connections.d.ts +70 -0
  198. package/src/core/model/node-graph/visual/layout/route_connections.d.ts.map +1 -0
  199. package/src/core/model/node-graph/visual/layout/route_connections.js +716 -0
  200. package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts +34 -0
  201. package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts.map +1 -0
  202. package/src/core/model/node-graph/visual/layout/route_grid_build.js +229 -0
  203. package/src/core/model/node-graph/visual/layout/route_nudge.d.ts +31 -0
  204. package/src/core/model/node-graph/visual/layout/route_nudge.d.ts.map +1 -0
  205. package/src/core/model/node-graph/visual/layout/route_nudge.js +249 -0
  206. package/src/core/model/node-graph/visual/layout/route_to_spline.d.ts +29 -0
  207. package/src/core/model/node-graph/visual/layout/route_to_spline.d.ts.map +1 -0
  208. package/src/core/model/node-graph/visual/layout/route_to_spline.js +120 -0
  209. package/src/engine/EngineHarness.d.ts.map +1 -1
  210. package/src/engine/EngineHarness.js +593 -586
  211. package/src/engine/EntityCreator.js +116 -116
  212. package/src/engine/achievements/AchievementManager.js +437 -437
  213. package/src/engine/animation/AnimatedActions.js +111 -111
  214. package/src/engine/animation/AnimationUtils.d.ts.map +1 -1
  215. package/src/engine/animation/AnimationUtils.js +20 -8
  216. package/src/engine/animation/Animations.d.ts +1 -0
  217. package/src/engine/animation/Animations.d.ts.map +1 -1
  218. package/src/engine/animation/Animations.js +74 -66
  219. package/src/engine/animation/clip/bind_property_writer.d.ts.map +1 -1
  220. package/src/engine/animation/clip/bind_property_writer.js +12 -5
  221. package/src/engine/animation/curve/binding/BoundTransform64Writer.d.ts +29 -0
  222. package/src/engine/animation/curve/binding/BoundTransform64Writer.d.ts.map +1 -0
  223. package/src/engine/animation/curve/binding/BoundTransform64Writer.js +80 -0
  224. package/src/engine/animation/removeEntityWithMeshParticlesEffect.js +4 -4
  225. package/src/engine/asset/loaders/gltf_test_fixtures.d.ts.map +1 -1
  226. package/src/engine/asset/loaders/gltf_test_fixtures.js +5 -4
  227. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +12 -12
  228. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  229. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +2078 -2045
  230. package/src/engine/control/first-person/abilities/LedgeGrab.js +1 -1
  231. package/src/engine/control/first-person/abilities/Mantle.js +1 -1
  232. package/src/engine/control/first-person/abilities/Slide.js +1 -1
  233. package/src/engine/control/first-person/collision/KinematicMover.d.ts +5 -9
  234. package/src/engine/control/first-person/collision/KinematicMover.d.ts.map +1 -1
  235. package/src/engine/control/first-person/collision/KinematicMover.js +59 -29
  236. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +2 -2
  237. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
  238. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +7 -7
  239. package/src/engine/ecs/EventType.js +10 -10
  240. package/src/engine/ecs/dynamic_actions/actions/definition/SendRequestActionDescription.d.ts.map +1 -1
  241. package/src/engine/ecs/dynamic_actions/actions/definition/SendRequestActionDescription.js +12 -4
  242. package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts +4 -4
  243. package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts.map +1 -1
  244. package/src/engine/ecs/fow/FogOfWarRevealerSystem.js +10 -11
  245. package/src/engine/ecs/grid/pick.js +1 -1
  246. package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.d.ts +1 -1
  247. package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +13 -13
  248. package/src/engine/ecs/gui/hud/testHudEdgeStick.js +3 -3
  249. package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts +10 -10
  250. package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +1 -1
  251. package/src/engine/ecs/ik/InverseKinematicsSystem.js +8 -8
  252. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts.map +1 -1
  253. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +120 -97
  254. package/src/engine/ecs/ik/ik_bone_chain.d.ts +16 -5
  255. package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +1 -1
  256. package/src/engine/ecs/ik/ik_bone_chain.js +16 -4
  257. package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts +7 -3
  258. package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts.map +1 -1
  259. package/src/engine/ecs/ik/ik_probe_terrain_contact.js +20 -16
  260. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +18 -0
  261. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -0
  262. package/src/engine/ecs/ik/ik_write_local_rotation.js +26 -0
  263. package/src/engine/ecs/parent/EntityNode.d.ts +24 -6
  264. package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
  265. package/src/engine/ecs/parent/EntityNode.js +49 -42
  266. package/src/engine/ecs/parent/EntityNodeFlags.d.ts +0 -1
  267. package/src/engine/ecs/parent/EntityNodeFlags.js +7 -8
  268. package/src/engine/ecs/speaker/VoiceSystem.d.ts +2 -2
  269. package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
  270. package/src/engine/ecs/speaker/VoiceSystem.js +4 -4
  271. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  272. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +2 -0
  273. package/src/engine/ecs/terrain/ecs/Terrain.d.ts +5 -2
  274. package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
  275. package/src/engine/ecs/terrain/ecs/Terrain.js +7 -4
  276. package/src/engine/ecs/terrain/ecs/TerrainSystem.js +3 -3
  277. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts +7 -7
  278. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
  279. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +360 -316
  280. package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.d.ts +41 -0
  281. package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.d.ts.map +1 -0
  282. package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.js +40 -0
  283. package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +521 -0
  284. package/src/engine/ecs/transform/Transform64.d.ts +48 -11
  285. package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
  286. package/src/engine/ecs/transform/Transform64.js +54 -15
  287. package/src/engine/ecs/transform/Transform64SerializationAdapter.d.ts +37 -0
  288. package/src/engine/ecs/transform/Transform64SerializationAdapter.d.ts.map +1 -0
  289. package/src/engine/ecs/transform/Transform64SerializationAdapter.js +75 -0
  290. package/src/engine/ecs/transform/t64_allocation_probe.d.ts +31 -0
  291. package/src/engine/ecs/transform/t64_allocation_probe.d.ts.map +1 -0
  292. package/src/engine/ecs/transform/t64_allocation_probe.js +78 -0
  293. package/src/engine/ecs/transform/t64_announce_change.d.ts +36 -0
  294. package/src/engine/ecs/transform/t64_announce_change.d.ts.map +1 -0
  295. package/src/engine/ecs/transform/t64_announce_change.js +39 -0
  296. package/src/engine/ecs/transform/t64_equals_components.d.ts +30 -0
  297. package/src/engine/ecs/transform/t64_equals_components.d.ts.map +1 -0
  298. package/src/engine/ecs/transform/t64_equals_components.js +59 -0
  299. package/src/engine/ecs/transform/t64_read_rotation.d.ts +13 -0
  300. package/src/engine/ecs/transform/t64_read_rotation.d.ts.map +1 -0
  301. package/src/engine/ecs/transform/t64_read_rotation.js +16 -0
  302. package/src/engine/ecs/transform/t64_read_translation.d.ts +14 -0
  303. package/src/engine/ecs/transform/t64_read_translation.d.ts.map +1 -0
  304. package/src/engine/ecs/transform/t64_read_translation.js +17 -0
  305. package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.d.ts +30 -0
  306. package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.d.ts.map +1 -0
  307. package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.js +29 -0
  308. package/src/engine/ecs/transform-attachment/TransformAttachment.d.ts +5 -5
  309. package/src/engine/ecs/transform-attachment/TransformAttachment.d.ts.map +1 -1
  310. package/src/engine/ecs/transform-attachment/TransformAttachment.js +4 -4
  311. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts +10 -10
  312. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
  313. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +63 -20
  314. package/src/engine/graphics/debug/createDebugLabel.js +3 -3
  315. package/src/engine/graphics/ecs/camera/pp/PerfectPanner.d.ts.map +1 -1
  316. package/src/engine/graphics/ecs/camera/pp/PerfectPanner.js +5 -4
  317. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
  318. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +8 -3
  319. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts +6 -6
  320. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
  321. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +25 -13
  322. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraLanderSystem.js +1 -1
  323. package/src/engine/graphics/ecs/mesh/setMesh.js +2 -2
  324. package/src/engine/graphics/ecs/path/entity/EntityPath.d.ts.map +1 -1
  325. package/src/engine/graphics/ecs/path/entity/EntityPath.js +21 -7
  326. package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.d.ts +4 -4
  327. package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.d.ts.map +1 -1
  328. package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.js +4 -4
  329. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts +2 -2
  330. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
  331. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +141 -135
  332. package/src/engine/graphics/geometry/MikkT/Build4RuleGroups.js +2 -2
  333. package/src/engine/graphics/geometry/MikkT/DegenEpilogue.js +1 -1
  334. package/src/engine/graphics/geometry/MikkT/DegenPrologue.js +1 -1
  335. package/src/engine/graphics/geometry/MikkT/EvalTspace.js +1 -1
  336. package/src/engine/graphics/geometry/MikkT/GenerateTSpaces.js +3 -3
  337. package/src/engine/graphics/render/frame_graph/CORRECTNESS_FIXES_2026_09_04.md +659 -0
  338. package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +21 -5
  339. package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts +45 -0
  340. package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts.map +1 -1
  341. package/src/engine/graphics/render/frame_graph/FrameGraph.js +282 -60
  342. package/src/engine/graphics/render/frame_graph/FramePassBuilder.d.ts.map +1 -1
  343. package/src/engine/graphics/render/frame_graph/FramePassBuilder.js +20 -9
  344. package/src/engine/graphics/render/frame_graph/FramePassNode.d.ts +12 -0
  345. package/src/engine/graphics/render/frame_graph/FramePassNode.d.ts.map +1 -1
  346. package/src/engine/graphics/render/frame_graph/FramePassNode.js +13 -0
  347. package/src/engine/graphics/render/frame_graph/FramePassResources.d.ts.map +1 -1
  348. package/src/engine/graphics/render/frame_graph/FramePassResources.js +5 -0
  349. package/src/engine/graphics/render/frame_graph/ResourceEntry.d.ts +19 -1
  350. package/src/engine/graphics/render/frame_graph/ResourceEntry.d.ts.map +1 -1
  351. package/src/engine/graphics/render/frame_graph/ResourceEntry.js +23 -1
  352. package/src/engine/graphics/render/frame_graph/backend/void/VoidRenderContext.d.ts +15 -1
  353. package/src/engine/graphics/render/frame_graph/backend/void/VoidRenderContext.d.ts.map +1 -1
  354. package/src/engine/graphics/render/frame_graph/backend/void/VoidRenderContext.js +33 -16
  355. package/src/engine/graphics/render/frame_graph/resource/RenderResourceManager.d.ts.map +1 -1
  356. package/src/engine/graphics/render/frame_graph/resource/RenderResourceManager.js +19 -1
  357. package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +6 -6
  358. package/src/engine/graphics3/CameraSystem.d.ts +6 -6
  359. package/src/engine/graphics3/CameraSystem.d.ts.map +1 -1
  360. package/src/engine/graphics3/CameraSystem.js +170 -170
  361. package/src/engine/graphics3/DecalSystem.d.ts +6 -6
  362. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
  363. package/src/engine/graphics3/DecalSystem.js +449 -449
  364. package/src/engine/graphics3/LightSystem.d.ts +6 -6
  365. package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
  366. package/src/engine/graphics3/LightSystem.js +230 -221
  367. package/src/engine/graphics3/MeshSystem.d.ts +6 -6
  368. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
  369. package/src/engine/graphics3/MeshSystem.js +43 -22
  370. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +20 -15
  371. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -1
  372. package/src/engine/graphics3/ParticipatingMediaSystem.js +198 -184
  373. package/src/engine/graphics3/ParticleEmitterSystem.d.ts +6 -6
  374. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -1
  375. package/src/engine/graphics3/ParticleEmitterSystem.js +306 -289
  376. package/src/engine/graphics3/PickingSystem.d.ts +6 -6
  377. package/src/engine/graphics3/PickingSystem.d.ts.map +1 -1
  378. package/src/engine/graphics3/PickingSystem.js +273 -273
  379. package/src/engine/graphics3/ShadedGeometrySystem.d.ts +6 -6
  380. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
  381. package/src/engine/graphics3/ShadedGeometrySystem.js +174 -169
  382. package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -1
  383. package/src/engine/graphics3/TerrainSystem.js +565 -566
  384. package/src/engine/graphics3/Trail3DSystem.d.ts +6 -6
  385. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
  386. package/src/engine/graphics3/Trail3DSystem.js +221 -221
  387. package/src/engine/graphics3/camera_sync_from_transform.d.ts +2 -2
  388. package/src/engine/graphics3/camera_sync_from_transform.d.ts.map +1 -1
  389. package/src/engine/graphics3/camera_sync_from_transform.js +2 -1
  390. package/src/engine/graphics3/debug/gizmo_view_from_camera.js +4 -4
  391. package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts +6 -0
  392. package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts.map +1 -1
  393. package/src/engine/graphics3/particles/GPUParticularRenderer.js +82 -53
  394. package/src/engine/graphics3/particles/particle_gpu_records.d.ts +12 -8
  395. package/src/engine/graphics3/particles/particle_gpu_records.d.ts.map +1 -1
  396. package/src/engine/graphics3/particles/particle_gpu_records.js +53 -45
  397. package/src/engine/graphics3/preview/make_model_preview_scene.js +1 -1
  398. package/src/engine/graphics3/shade_camera_projection_ray.js +4 -4
  399. package/src/engine/graphics3/shade_node_to_entity_composition.d.ts.map +1 -1
  400. package/src/engine/graphics3/shade_node_to_entity_composition.js +88 -84
  401. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts +7 -7
  402. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts.map +1 -1
  403. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.js +8 -8
  404. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts +9 -8
  405. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts.map +1 -1
  406. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.js +25 -8
  407. package/src/engine/input/ecs/controllers/KeyboardCameraController.js +2 -2
  408. package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.d.ts.map +1 -1
  409. package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.js +218 -204
  410. package/src/engine/intelligence/behavior/util/RotationBehavior.js +5 -5
  411. package/src/engine/intelligence/mcts/StateNode.js +1 -1
  412. package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts +7 -7
  413. package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts.map +1 -1
  414. package/src/engine/interpolation/TransformPoseSerializationAdapter.js +14 -15
  415. package/src/engine/interpolation/pose_interpoland.d.ts +2 -2
  416. package/src/engine/interpolation/pose_interpoland.js +4 -4
  417. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts +4 -4
  418. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts.map +1 -1
  419. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.js +39 -14
  420. package/src/engine/network/adapters/TransformReplicationAdapter.d.ts +7 -7
  421. package/src/engine/network/adapters/TransformReplicationAdapter.d.ts.map +1 -1
  422. package/src/engine/network/adapters/TransformReplicationAdapter.js +19 -20
  423. package/src/engine/network/replication/Replicator.d.ts +5 -3
  424. package/src/engine/network/replication/Replicator.d.ts.map +1 -1
  425. package/src/engine/network/replication/Replicator.js +65 -16
  426. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +3 -3
  427. package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
  428. package/src/engine/physics/ccd/linear_sweep.js +9 -3
  429. package/src/engine/physics/constraint/solve_constraints.js +10 -10
  430. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +8 -8
  431. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -1
  432. package/src/engine/physics/ecs/ColliderObserverSystem.js +6 -6
  433. package/src/engine/physics/ecs/PhysicsSystem.d.ts +22 -32
  434. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  435. package/src/engine/physics/ecs/PhysicsSystem.js +2334 -2310
  436. package/src/engine/physics/ecs/find_non_finite_physics_state.js +6 -6
  437. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +7 -7
  438. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
  439. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +16 -8
  440. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +4 -4
  441. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -1
  442. package/src/engine/physics/fluid/ecs/FluidSystem.js +6 -6
  443. package/src/engine/physics/fluid/ecs/WorkerFluidSystem.d.ts +2 -2
  444. package/src/engine/physics/fluid/ecs/WorkerFluidSystem.d.ts.map +1 -1
  445. package/src/engine/physics/fluid/ecs/WorkerFluidSystem.js +4 -4
  446. package/src/engine/physics/fluid/ecs/fluid_reanchor_field.js +7 -7
  447. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +4 -4
  448. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +7 -7
  449. package/src/engine/physics/inertia/world_inverse_inertia.js +1 -1
  450. package/src/engine/physics/integration/integrate_position.d.ts.map +1 -1
  451. package/src/engine/physics/integration/integrate_position.js +13 -12
  452. package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.d.ts.map +1 -1
  453. package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.js +23 -5
  454. package/src/engine/physics/narrowphase/compute_penetration.js +18 -14
  455. package/src/engine/physics/narrowphase/convex_convex_manifold.js +2 -2
  456. package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +9 -9
  457. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
  458. package/src/engine/physics/narrowphase/narrowphase_step.js +95 -68
  459. package/src/engine/physics/narrowphase/refine_ray_concave.js +1 -1
  460. package/src/engine/physics/narrowphase/refine_ray_hit.js +3 -3
  461. package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
  462. package/src/engine/physics/queries/overlap_shape.js +19 -7
  463. package/src/engine/physics/queries/raycast.js +3 -3
  464. package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
  465. package/src/engine/physics/queries/shape_cast.js +628 -620
  466. package/src/engine/physics/solver/solve_contacts.js +10 -10
  467. package/src/engine/physics/vehicle/RaycastVehicle.d.ts +6 -5
  468. package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
  469. package/src/engine/physics/vehicle/RaycastVehicle.js +10 -5
  470. package/src/engine/sound/ecs/SoundListenerSystem.d.ts +16 -4
  471. package/src/engine/sound/ecs/SoundListenerSystem.d.ts.map +1 -1
  472. package/src/engine/sound/ecs/SoundListenerSystem.js +68 -11
  473. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +7 -7
  474. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
  475. package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +343 -338
  476. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +2 -2
  477. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
  478. package/src/engine/sound/ecs/audio/LiveEmitterSet.js +356 -345
  479. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts +23 -2
  480. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts.map +1 -1
  481. package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +174 -140
  482. package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts +6 -6
  483. package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts.map +1 -1
  484. package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.js +185 -184
  485. package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.js +1 -1
  486. package/src/engine/sound/simulation/core/AcousticRegionIndex.d.ts +2 -1
  487. package/src/engine/sound/simulation/core/AcousticRegionIndex.d.ts.map +1 -1
  488. package/src/engine/sound/simulation/core/AcousticRegionIndex.js +4 -3
  489. package/src/engine/sound/simulation/core/AcousticVolumeRegion.d.ts +3 -2
  490. package/src/engine/sound/simulation/core/AcousticVolumeRegion.d.ts.map +1 -1
  491. package/src/engine/sound/simulation/core/AcousticVolumeRegion.js +6 -4
  492. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts +6 -6
  493. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts.map +1 -1
  494. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.js +25 -6
  495. package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.d.ts +7 -7
  496. package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.d.ts.map +1 -1
  497. package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.js +6 -6
  498. package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -1
  499. package/src/engine/sound/sopra/runtime/EventInstance.js +8 -2
  500. package/src/format/scene/gltf/gltf_component_type.d.ts.map +1 -1
  501. package/src/format/scene/gltf/gltf_component_type.js +3 -1
  502. package/src/format/texture/ktx2/ktx2_read.d.ts.map +1 -1
  503. package/src/format/texture/ktx2/ktx2_read.js +2 -1
  504. package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.d.ts.map +1 -1
  505. package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.js +8 -1
  506. package/src/generation/markers/GridCellActionPlaceMarker.d.ts +4 -4
  507. package/src/generation/markers/GridCellActionPlaceMarker.d.ts.map +1 -1
  508. package/src/generation/markers/GridCellActionPlaceMarker.js +16 -6
  509. package/src/generation/markers/MarkerNode.d.ts +3 -3
  510. package/src/generation/markers/MarkerNode.d.ts.map +1 -1
  511. package/src/generation/markers/MarkerNode.js +3 -3
  512. package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.d.ts +4 -4
  513. package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.d.ts.map +1 -1
  514. package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.js +7 -7
  515. package/src/generation/markers/actions/MarkerNodeActionImaginary.d.ts.map +1 -1
  516. package/src/generation/markers/actions/MarkerNodeActionImaginary.js +20 -2
  517. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +1 -1
  518. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts.map +1 -1
  519. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.js +13 -3
  520. package/src/generation/markers/transform/MarkerNodeTransformRotateRandom.d.ts.map +1 -1
  521. package/src/generation/markers/transform/MarkerNodeTransformRotateRandom.js +11 -1
  522. package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.d.ts.map +1 -1
  523. package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.js +8 -4
  524. package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.d.ts.map +1 -1
  525. package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +13 -5
  526. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.d.ts.map +1 -1
  527. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.js +8 -2
  528. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.d.ts.map +1 -1
  529. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.js +16 -2
  530. package/src/shade/device/graph/BufferResourceDescriptor.d.ts.map +1 -1
  531. package/src/shade/device/graph/BufferResourceDescriptor.js +193 -184
  532. package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
  533. package/src/shade/device/graph/TextureResourceDescriptor.js +12 -0
  534. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  535. package/src/shade/device/mock/SoftwareGPUDevice.js +8 -0
  536. package/src/shade/playground/avboit/main.js +3 -3
  537. package/src/shade/playground/basis_textures/main.js +1 -1
  538. package/src/shade/playground/ground_seam/main.js +1 -1
  539. package/src/shade/playground/particle_editor/README.md +216 -0
  540. package/src/shade/playground/particle_editor/index.html +76 -0
  541. package/src/shade/playground/particle_editor/main.d.ts +2 -0
  542. package/src/shade/playground/particle_editor/main.d.ts.map +1 -0
  543. package/src/shade/playground/particle_editor/main.js +139 -0
  544. package/src/shade/playground/particle_system/README.md +92 -62
  545. package/src/shade/playground/particle_system/index.html +67 -21
  546. package/src/shade/playground/particle_system/main.js +247 -102
  547. package/src/shade/{renderer/particles → playground/particle_system}/particle_prototype.d.ts +21 -18
  548. package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -0
  549. package/src/shade/{renderer/particles → playground/particle_system}/particle_prototype.js +196 -181
  550. package/src/shade/playground/particle_system/particle_scene.d.ts +136 -20
  551. package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
  552. package/src/shade/playground/particle_system/particle_scene.js +487 -670
  553. package/src/shade/playground/skinned_blas_refit/sweep_views.js +2 -2
  554. package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts.map +1 -1
  555. package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.js +2 -1
  556. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
  557. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +2 -1
  558. package/src/shade/playground/sponza_path_trace/main.js +1 -1
  559. package/src/shade/playground/volumetrics_froxel/main.js +917 -917
  560. package/src/shade/playground/volumetrics_froxel/measure.js +559 -559
  561. package/src/shade/renderer/Renderer.d.ts +28 -0
  562. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  563. package/src/shade/renderer/Renderer.js +152 -8
  564. package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
  565. package/src/shade/renderer/atmosphere/GPUSky.js +4 -2
  566. package/src/shade/renderer/buffer/graph_read_buffer.d.ts.map +1 -1
  567. package/src/shade/renderer/buffer/graph_read_buffer.js +8 -1
  568. package/src/shade/renderer/buffer/table/GPUTypedTable.js +1 -1
  569. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts +30 -0
  570. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
  571. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +84 -0
  572. package/src/shade/renderer/buffer/table/gpu_database_words.d.ts +24 -0
  573. package/src/shade/renderer/buffer/table/gpu_database_words.d.ts.map +1 -0
  574. package/src/shade/renderer/buffer/table/gpu_database_words.js +92 -0
  575. package/src/shade/renderer/camera/Camera.d.ts +2 -2
  576. package/src/shade/renderer/camera/Camera.d.ts.map +1 -1
  577. package/src/shade/renderer/camera/Camera.js +11 -5
  578. package/src/shade/renderer/camera/GPUCameraContext.d.ts.map +1 -1
  579. package/src/shade/renderer/camera/GPUCameraContext.js +2 -1
  580. package/src/shade/renderer/camera/OrbitalCameraController.d.ts +3 -3
  581. package/src/shade/renderer/camera/OrbitalCameraController.d.ts.map +1 -1
  582. package/src/shade/renderer/camera/OrbitalCameraController.js +31 -16
  583. package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +2 -2
  584. package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
  585. package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +4 -3
  586. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +10 -5
  587. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +1 -1
  588. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +8 -4
  589. package/src/shade/renderer/extension/FrameContext.d.ts.map +1 -1
  590. package/src/shade/renderer/extension/FrameContext.js +5 -0
  591. package/src/shade/renderer/extension/FrameRecord.d.ts +16 -0
  592. package/src/shade/renderer/extension/FrameRecord.d.ts.map +1 -1
  593. package/src/shade/renderer/extension/FrameRecord.js +31 -0
  594. package/src/shade/renderer/extension/GBufferTextures.d.ts +11 -0
  595. package/src/shade/renderer/extension/GBufferTextures.d.ts.map +1 -1
  596. package/src/shade/renderer/extension/GBufferTextures.js +14 -0
  597. package/src/shade/renderer/geometry/attribute/gpu_vertex_buffer_layout_from_spec.js +1 -1
  598. package/src/shade/renderer/geometry/util/geometry_stripify.js +6 -6
  599. package/src/shade/renderer/geometry/virtual/format/prototypeVGEOFormatViewer.js +8 -8
  600. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
  601. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +14 -5
  602. package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.d.ts.map +1 -1
  603. package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.js +17 -9
  604. package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.d.ts +2 -1
  605. package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.d.ts.map +1 -1
  606. package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.js +4 -1
  607. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts +2 -1
  608. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
  609. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +11 -1
  610. package/src/shade/renderer/global_illumination/probe/octahedral/graph_lpv_shade.d.ts +1 -1
  611. package/src/shade/renderer/global_illumination/probe/octahedral/graph_lpv_shade.d.ts.map +1 -1
  612. package/src/shade/renderer/global_illumination/probe/octahedral/graph_lpv_shade.js +4 -2
  613. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
  614. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +5 -1
  615. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
  616. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +35 -11
  617. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  618. package/src/shade/renderer/particles/DESIGN.md +361 -117
  619. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +266 -87
  620. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  621. package/src/shade/renderer/particles/GPUParticleSystem.js +919 -145
  622. package/src/shade/renderer/particles/ParticleConstants.d.ts +134 -5
  623. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  624. package/src/shade/renderer/particles/ParticleConstants.js +148 -6
  625. package/src/shade/renderer/particles/ParticleRenderMode.d.ts +19 -0
  626. package/src/shade/renderer/particles/ParticleRenderMode.d.ts.map +1 -0
  627. package/src/shade/renderer/particles/ParticleRenderMode.js +33 -0
  628. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +5 -4
  629. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -1
  630. package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +11 -15
  631. package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts +2 -2
  632. package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts.map +1 -1
  633. package/src/shade/renderer/particles/coherence/shader_particle_bucket.js +20 -15
  634. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts +7 -8
  635. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts.map +1 -1
  636. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.js +7 -17
  637. package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts +56 -0
  638. package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts.map +1 -0
  639. package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js +68 -0
  640. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.d.ts +39 -0
  641. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.d.ts.map +1 -0
  642. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.js +52 -0
  643. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +83 -0
  644. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -0
  645. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +167 -0
  646. package/src/shade/renderer/particles/data/chunk_particle_emitter.d.ts +21 -5
  647. package/src/shade/renderer/particles/data/chunk_particle_emitter.d.ts.map +1 -1
  648. package/src/shade/renderer/particles/data/chunk_particle_emitter.js +44 -85
  649. package/src/shade/renderer/particles/data/particle_emitter_record.d.ts +37 -0
  650. package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -0
  651. package/src/shade/renderer/particles/data/particle_emitter_record.js +109 -0
  652. package/src/shade/renderer/particles/data/particle_header.d.ts +62 -0
  653. package/src/shade/renderer/particles/data/particle_header.d.ts.map +1 -0
  654. package/src/shade/renderer/particles/data/particle_header.js +103 -0
  655. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +179 -0
  656. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts.map +1 -0
  657. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +303 -0
  658. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +138 -1
  659. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
  660. package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +152 -44
  661. package/src/shade/renderer/particles/graph/ParticleNodeGroup.d.ts +283 -0
  662. package/src/shade/renderer/particles/graph/ParticleNodeGroup.d.ts.map +1 -0
  663. package/src/shade/renderer/particles/graph/ParticleNodeGroup.js +419 -0
  664. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +33 -2
  665. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
  666. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +720 -185
  667. package/src/shade/renderer/particles/graph/ParticleValueType.d.ts +188 -0
  668. package/src/shade/renderer/particles/graph/ParticleValueType.d.ts.map +1 -0
  669. package/src/shade/renderer/particles/graph/ParticleValueType.js +287 -0
  670. package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts +16 -9
  671. package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
  672. package/src/shade/renderer/particles/graph/compile_particle_graph.js +469 -205
  673. package/src/shade/renderer/particles/graph/flatten_particle_graph.d.ts +11 -0
  674. package/src/shade/renderer/particles/graph/flatten_particle_graph.d.ts.map +1 -0
  675. package/src/shade/renderer/particles/graph/flatten_particle_graph.js +244 -0
  676. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts +27 -0
  677. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts.map +1 -0
  678. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.js +81 -0
  679. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts +83 -0
  680. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts.map +1 -0
  681. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.js +294 -0
  682. package/src/shade/renderer/particles/graph/groups/particle_groups_noise.d.ts +22 -0
  683. package/src/shade/renderer/particles/graph/groups/particle_groups_noise.d.ts.map +1 -0
  684. package/src/shade/renderer/particles/graph/groups/particle_groups_noise.js +524 -0
  685. package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.d.ts +22 -0
  686. package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.d.ts.map +1 -0
  687. package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.js +517 -0
  688. package/src/shade/renderer/particles/graph/groups/particle_groups_utility.d.ts +70 -0
  689. package/src/shade/renderer/particles/graph/groups/particle_groups_utility.d.ts.map +1 -0
  690. package/src/shade/renderer/particles/graph/groups/particle_groups_utility.js +161 -0
  691. package/src/shade/renderer/particles/graph/groups/simplex_reference.d.ts +8 -0
  692. package/src/shade/renderer/particles/graph/groups/simplex_reference.d.ts.map +1 -0
  693. package/src/shade/renderer/particles/graph/groups/simplex_reference.js +185 -0
  694. package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts +88 -0
  695. package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts.map +1 -0
  696. package/src/shade/renderer/particles/graph/infer_particle_graph_types.js +234 -0
  697. package/src/shade/renderer/particles/graph/make_particle_group.d.ts +98 -0
  698. package/src/shade/renderer/particles/graph/make_particle_group.d.ts.map +1 -0
  699. package/src/shade/renderer/particles/graph/make_particle_group.js +409 -0
  700. package/src/shade/renderer/particles/graph/particle_compare_ops.d.ts +17 -0
  701. package/src/shade/renderer/particles/graph/particle_compare_ops.d.ts.map +1 -0
  702. package/src/shade/renderer/particles/graph/particle_compare_ops.js +22 -0
  703. package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts +11 -4
  704. package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -1
  705. package/src/shade/renderer/particles/graph/particle_graph_authoring.js +121 -108
  706. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts +58 -0
  707. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts.map +1 -0
  708. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.js +49 -0
  709. package/src/shade/renderer/particles/graph/particle_graph_distributions.d.ts +29 -0
  710. package/src/shade/renderer/particles/graph/particle_graph_distributions.d.ts.map +1 -0
  711. package/src/shade/renderer/particles/graph/particle_graph_distributions.js +170 -0
  712. package/src/shade/renderer/particles/graph/particle_graph_json.d.ts +87 -0
  713. package/src/shade/renderer/particles/graph/particle_graph_json.d.ts.map +1 -0
  714. package/src/shade/renderer/particles/graph/particle_graph_json.js +196 -0
  715. package/src/shade/renderer/particles/graph/particle_group_json.d.ts +86 -0
  716. package/src/shade/renderer/particles/graph/particle_group_json.d.ts.map +1 -0
  717. package/src/shade/renderer/particles/graph/particle_group_json.js +182 -0
  718. package/src/shade/renderer/particles/graph/particle_group_library.d.ts +33 -0
  719. package/src/shade/renderer/particles/graph/particle_group_library.d.ts.map +1 -0
  720. package/src/shade/renderer/particles/graph/particle_group_library.js +75 -0
  721. package/src/shade/renderer/particles/graph/particle_node_library.d.ts +37 -0
  722. package/src/shade/renderer/particles/graph/particle_node_library.d.ts.map +1 -0
  723. package/src/shade/renderer/particles/graph/particle_node_library.js +64 -0
  724. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +186 -0
  725. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -0
  726. package/src/shade/renderer/particles/graph/particle_node_parameters.js +312 -0
  727. package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts +30 -0
  728. package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -0
  729. package/src/shade/renderer/particles/graph/particle_node_presentation.js +342 -0
  730. package/src/shade/renderer/particles/graph/particle_ramp.d.ts +230 -0
  731. package/src/shade/renderer/particles/graph/particle_ramp.d.ts.map +1 -0
  732. package/src/shade/renderer/particles/graph/particle_ramp.js +403 -0
  733. package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +72 -0
  734. package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -0
  735. package/src/shade/renderer/particles/graph/validate_particle_graph.js +495 -0
  736. package/src/shade/renderer/particles/graph_particles.d.ts +98 -69
  737. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  738. package/src/shade/renderer/particles/graph_particles.js +277 -81
  739. package/src/shade/renderer/particles/graph_particles_avboit.d.ts +107 -0
  740. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -0
  741. package/src/shade/renderer/particles/graph_particles_avboit.js +313 -0
  742. package/src/shade/renderer/particles/graph_particles_billboard.d.ts +37 -0
  743. package/src/shade/renderer/particles/graph_particles_billboard.d.ts.map +1 -0
  744. package/src/shade/renderer/particles/graph_particles_billboard.js +93 -0
  745. package/src/shade/renderer/particles/isa/InstructionStream.d.ts +83 -21
  746. package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
  747. package/src/shade/renderer/particles/isa/InstructionStream.js +186 -48
  748. package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts +13 -10
  749. package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts.map +1 -1
  750. package/src/shade/renderer/particles/isa/ParticleAssembler.js +30 -26
  751. package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +74 -21
  752. package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
  753. package/src/shade/renderer/particles/isa/ParticleProgram.js +131 -81
  754. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +372 -22
  755. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
  756. package/src/shade/renderer/particles/isa/ParticleVMISA.js +694 -66
  757. package/src/shade/renderer/particles/isa/particle_assembly.d.ts +173 -0
  758. package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -0
  759. package/src/shade/renderer/particles/isa/particle_assembly.js +1214 -0
  760. package/src/shade/renderer/particles/isa/validate_particle_program.d.ts +9 -0
  761. package/src/shade/renderer/particles/isa/validate_particle_program.d.ts.map +1 -0
  762. package/src/shade/renderer/particles/isa/validate_particle_program.js +128 -0
  763. package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +48 -3
  764. package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
  765. package/src/shade/renderer/particles/layout/ParticleLayout.js +101 -5
  766. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts +77 -0
  767. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map +1 -0
  768. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js +219 -0
  769. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts +83 -0
  770. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts.map +1 -0
  771. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js +283 -0
  772. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.d.ts +133 -0
  773. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.d.ts.map +1 -0
  774. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.js +334 -0
  775. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.d.ts +117 -0
  776. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.d.ts.map +1 -0
  777. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.js +70 -0
  778. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.d.ts +97 -0
  779. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.d.ts.map +1 -0
  780. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +462 -0
  781. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.d.ts +116 -0
  782. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.d.ts.map +1 -0
  783. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.js +687 -0
  784. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts +57 -0
  785. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts.map +1 -0
  786. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +860 -0
  787. package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.d.ts +115 -0
  788. package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.d.ts.map +1 -0
  789. package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.js +264 -0
  790. package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +199 -0
  791. package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -0
  792. package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +477 -0
  793. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts +100 -0
  794. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts.map +1 -0
  795. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.js +236 -0
  796. package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts +371 -0
  797. package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts.map +1 -0
  798. package/src/shade/renderer/particles/optimizer/particle_program_analysis.js +764 -0
  799. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +128 -0
  800. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -0
  801. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +376 -0
  802. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts +43 -0
  803. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts.map +1 -0
  804. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +337 -0
  805. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +107 -0
  806. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -0
  807. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +166 -0
  808. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts +99 -0
  809. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts.map +1 -0
  810. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.js +313 -0
  811. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts +12 -0
  812. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -0
  813. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.js +198 -0
  814. package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts +4 -0
  815. package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -0
  816. package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.js +51 -0
  817. package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts +23 -0
  818. package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -0
  819. package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +678 -0
  820. package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts +22 -0
  821. package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -0
  822. package/src/shade/renderer/particles/optimizer/pass_inline_constants.js +221 -0
  823. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts +4 -0
  824. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -0
  825. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.js +63 -0
  826. package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts +4 -0
  827. package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -0
  828. package/src/shade/renderer/particles/optimizer/pass_pack_registers.js +87 -0
  829. package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts +4 -0
  830. package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -0
  831. package/src/shade/renderer/particles/optimizer/pass_peephole.js +392 -0
  832. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts +4 -0
  833. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -0
  834. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.js +361 -0
  835. package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts +4 -0
  836. package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts.map +1 -0
  837. package/src/shade/renderer/particles/optimizer/pass_schedule.js +244 -0
  838. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts +4 -0
  839. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -0
  840. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +154 -0
  841. package/src/shade/renderer/particles/particle_test_fixtures.d.ts +151 -0
  842. package/src/shade/renderer/particles/particle_test_fixtures.d.ts.map +1 -0
  843. package/src/shade/renderer/particles/particle_test_fixtures.js +229 -0
  844. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +206 -64
  845. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  846. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +404 -83
  847. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +109 -0
  848. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -0
  849. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +127 -0
  850. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +249 -0
  851. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -0
  852. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +425 -0
  853. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +77 -18
  854. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts.map +1 -1
  855. package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts +130 -0
  856. package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts.map +1 -0
  857. package/src/shade/renderer/particles/runtime/ProgramHeap.js +595 -0
  858. package/src/shade/renderer/particles/runtime/ProgramPlacement.d.ts +91 -0
  859. package/src/shade/renderer/particles/runtime/ProgramPlacement.d.ts.map +1 -0
  860. package/src/shade/renderer/particles/runtime/ProgramPlacement.js +106 -0
  861. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +9 -6
  862. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
  863. package/src/shade/renderer/particles/runtime/create_particle_effect.js +22 -19
  864. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.d.ts +17 -0
  865. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.d.ts.map +1 -0
  866. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.js +75 -0
  867. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts +20 -0
  868. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -0
  869. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +94 -0
  870. package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.d.ts +1 -2
  871. package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.d.ts.map +1 -1
  872. package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.js +1 -2
  873. package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.d.ts +11 -0
  874. package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.d.ts.map +1 -0
  875. package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.js +13 -0
  876. package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.d.ts +28 -0
  877. package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.d.ts.map +1 -0
  878. package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.js +136 -0
  879. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_age.d.ts +17 -0
  880. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_age.d.ts.map +1 -0
  881. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_age.js +22 -0
  882. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.d.ts +14 -0
  883. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.d.ts.map +1 -0
  884. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.js +23 -0
  885. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +1 -1
  886. package/src/shade/renderer/particles/shaders/chunk_particle_scene_view_depth.d.ts +18 -0
  887. package/src/shade/renderer/particles/shaders/chunk_particle_scene_view_depth.d.ts.map +1 -0
  888. package/src/shade/renderer/particles/shaders/chunk_particle_scene_view_depth.js +24 -0
  889. package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts +26 -0
  890. package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts.map +1 -0
  891. package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.js +59 -0
  892. package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.d.ts +35 -0
  893. package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.d.ts.map +1 -0
  894. package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.js +133 -0
  895. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts +14 -0
  896. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -0
  897. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +153 -0
  898. package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.d.ts +3 -0
  899. package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.d.ts.map +1 -0
  900. package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.js +124 -0
  901. package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts +19 -0
  902. package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -0
  903. package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +147 -0
  904. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts +27 -8
  905. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  906. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +43 -68
  907. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts +33 -0
  908. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts.map +1 -0
  909. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.js +114 -0
  910. package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.d.ts +5 -0
  911. package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.d.ts.map +1 -0
  912. package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.js +216 -0
  913. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  914. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +7 -3
  915. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
  916. package/src/shade/renderer/particles/shaders/shader_particle_render.js +132 -197
  917. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts +8 -0
  918. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  919. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +42 -56
  920. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts +45 -0
  921. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts.map +1 -0
  922. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.js +123 -0
  923. package/src/shade/renderer/particles/shaders/shader_particle_spawn_commands.d.ts +26 -0
  924. package/src/shade/renderer/particles/shaders/shader_particle_spawn_commands.d.ts.map +1 -0
  925. package/src/shade/renderer/particles/shaders/shader_particle_spawn_commands.js +66 -0
  926. package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts +51 -0
  927. package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts.map +1 -0
  928. package/src/shade/renderer/particles/sort/graph_particle_sort.js +120 -0
  929. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts +1 -1
  930. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  931. package/src/shade/renderer/particles/sort/shader_particle_sort.js +21 -36
  932. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts +6 -0
  933. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts.map +1 -0
  934. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.js +16 -0
  935. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +6 -3
  936. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
  937. package/src/shade/renderer/particles/vm/ParticleVMReference.js +285 -154
  938. package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
  939. package/src/shade/renderer/particles/vm/chunk_particle_vm.js +264 -170
  940. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.d.ts +43 -0
  941. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.d.ts.map +1 -0
  942. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.js +55 -0
  943. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.d.ts +62 -0
  944. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.d.ts.map +1 -0
  945. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.js +86 -0
  946. package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts +1 -2
  947. package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts.map +1 -1
  948. package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.js +0 -3
  949. package/src/shade/renderer/postprocess/dof/gather/DepthOfFieldU.js +1 -1
  950. package/src/shade/renderer/postprocess/dof/raymarch/DepthOfField.js +1 -1
  951. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  952. package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
  953. package/src/shade/renderer/postprocess/nss/NSS.js +3 -2
  954. package/src/shade/renderer/postprocess/nss/generate_NSS_WEIGHTS_ACTUAL.js +3 -2
  955. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +87 -0
  956. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -0
  957. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +61 -0
  958. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +179 -0
  959. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +27 -2
  960. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts +9 -2
  961. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
  962. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +12 -3
  963. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.d.ts +18 -0
  964. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.d.ts.map +1 -0
  965. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.js +58 -0
  966. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +25 -1
  967. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  968. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +69 -10
  969. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts.map +1 -1
  970. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.js +10 -4
  971. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -1
  972. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +4 -39
  973. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts +7 -2
  974. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
  975. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +16 -2
  976. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts +3 -3
  977. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts.map +1 -1
  978. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.js +29 -23
  979. package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.d.ts +2 -2
  980. package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.d.ts.map +1 -1
  981. package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.js +3 -3
  982. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts +4 -4
  983. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts.map +1 -1
  984. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.js +2 -2
  985. package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.d.ts +2 -2
  986. package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.d.ts.map +1 -1
  987. package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.js +2 -2
  988. package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.d.ts +7 -7
  989. package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.d.ts.map +1 -1
  990. package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.js +79 -71
  991. package/src/shade/renderer/shader/chunk/math/chunk_lower_bound_branchless.d.ts.map +1 -1
  992. package/src/shade/renderer/shader/chunk/math/chunk_lower_bound_branchless.js +3 -1
  993. package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.d.ts +22 -0
  994. package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.d.ts.map +1 -0
  995. package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.js +32 -0
  996. package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.d.ts +9 -0
  997. package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.d.ts.map +1 -0
  998. package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.js +19 -0
  999. package/src/shade/renderer/shader/chunk/noise/psrdnoise/README.md +65 -0
  1000. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.d.ts +24 -0
  1001. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.d.ts.map +1 -0
  1002. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.js +83 -0
  1003. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.d.ts +25 -0
  1004. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.d.ts.map +1 -0
  1005. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.js +42 -0
  1006. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.d.ts +31 -0
  1007. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.d.ts.map +1 -0
  1008. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.js +80 -0
  1009. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.d.ts +26 -0
  1010. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.d.ts.map +1 -0
  1011. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.js +109 -0
  1012. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.d.ts +38 -0
  1013. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.d.ts.map +1 -0
  1014. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.js +129 -0
  1015. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.d.ts +21 -0
  1016. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.d.ts.map +1 -0
  1017. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.js +35 -0
  1018. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.d.ts +19 -0
  1019. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.d.ts.map +1 -0
  1020. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.js +28 -0
  1021. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.d.ts +13 -0
  1022. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.d.ts.map +1 -0
  1023. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.js +22 -0
  1024. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.d.ts +22 -0
  1025. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.d.ts.map +1 -0
  1026. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.js +59 -0
  1027. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.d.ts +23 -0
  1028. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.d.ts.map +1 -0
  1029. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.js +74 -0
  1030. package/src/shade/renderer/shader/chunk/random/chunk_hash_to_float01.d.ts +13 -3
  1031. package/src/shade/renderer/shader/chunk/random/chunk_hash_to_float01.d.ts.map +1 -1
  1032. package/src/shade/renderer/shader/chunk/random/chunk_hash_to_float01.js +15 -5
  1033. package/src/shade/renderer/shader/chunk/random/chunk_random_uint.d.ts +8 -0
  1034. package/src/shade/renderer/shader/chunk/random/chunk_random_uint.d.ts.map +1 -1
  1035. package/src/shade/renderer/shader/chunk/random/chunk_random_uint.js +15 -5
  1036. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg.d.ts +7 -0
  1037. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg.d.ts.map +1 -1
  1038. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg.js +17 -7
  1039. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_advance.d.ts +17 -0
  1040. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_advance.d.ts.map +1 -0
  1041. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_advance.js +26 -0
  1042. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_output.d.ts +15 -0
  1043. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_output.d.ts.map +1 -0
  1044. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_output.js +26 -0
  1045. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
  1046. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +8 -2
  1047. package/src/shade/renderer/shadow/map/PointLightShadowmap.d.ts.map +1 -1
  1048. package/src/shade/renderer/shadow/map/PointLightShadowmap.js +7 -2
  1049. package/src/shade/renderer/shadow/map/SpotLightShadowmap.d.ts.map +1 -1
  1050. package/src/shade/renderer/shadow/map/SpotLightShadowmap.js +3 -15
  1051. package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.d.ts.map +1 -1
  1052. package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.js +10 -4
  1053. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +1 -1
  1054. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +7 -2
  1055. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +2 -2
  1056. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +3 -3
  1057. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
  1058. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +3 -3
  1059. package/src/shade/wgsl/emulator/ComputeShaderEmulator.d.ts +34 -1
  1060. package/src/shade/wgsl/emulator/ComputeShaderEmulator.d.ts.map +1 -1
  1061. package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +41 -1
  1062. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts +3 -2
  1063. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  1064. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +115 -15
  1065. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  1066. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +35 -4
  1067. package/src/view/minimap/Minimap.d.ts.map +1 -1
  1068. package/src/view/minimap/Minimap.js +227 -225
  1069. package/src/view/minimap/MinimapCanvasView.js +3 -3
  1070. package/src/view/minimap/MinimapMarker.d.ts +45 -0
  1071. package/src/view/minimap/MinimapMarker.d.ts.map +1 -0
  1072. package/src/view/minimap/MinimapMarker.js +80 -0
  1073. package/src/view/minimap/MinimapMarkerCollection.d.ts +6 -5
  1074. package/src/view/minimap/MinimapMarkerCollection.d.ts.map +1 -1
  1075. package/src/view/minimap/MinimapMarkerCollection.js +6 -6
  1076. package/src/view/minimap/MinimapMarkerSerializationAdapter.d.ts +19 -0
  1077. package/src/view/minimap/MinimapMarkerSerializationAdapter.d.ts.map +1 -0
  1078. package/src/view/minimap/MinimapMarkerSerializationAdapter.js +42 -0
  1079. package/src/view/minimap/dom/MinimapCameraView.d.ts +1 -1
  1080. package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
  1081. package/src/view/minimap/dom/MinimapCameraView.js +18 -4
  1082. package/src/view/minimap/dom/MinimapMarkerView.js +3 -3
  1083. package/src/view/minimap/gl/MarkerGL.js +3 -3
  1084. package/src/view/util/DomLayoutFrame.d.ts +53 -0
  1085. package/src/view/util/DomLayoutFrame.d.ts.map +1 -0
  1086. package/src/view/util/DomLayoutFrame.js +122 -0
  1087. package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.d.ts +0 -15
  1088. package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.d.ts.map +0 -1
  1089. package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.js +0 -19
  1090. package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.d.ts +0 -45
  1091. package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.d.ts.map +0 -1
  1092. package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.js +0 -241
  1093. package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.d.ts +0 -24
  1094. package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.d.ts.map +0 -1
  1095. package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.js +0 -40
  1096. package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.d.ts +0 -19
  1097. package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.d.ts.map +0 -1
  1098. package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.js +0 -28
  1099. package/src/engine/ecs/util/hideEntityGracefully.d.ts +0 -9
  1100. package/src/engine/ecs/util/hideEntityGracefully.d.ts.map +0 -1
  1101. package/src/engine/ecs/util/hideEntityGracefully.js +0 -196
  1102. package/src/shade/renderer/particles/cull/chunk_particle_cull.d.ts +0 -14
  1103. package/src/shade/renderer/particles/cull/chunk_particle_cull.d.ts.map +0 -1
  1104. package/src/shade/renderer/particles/cull/chunk_particle_cull.js +0 -38
  1105. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts +0 -156
  1106. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts.map +0 -1
  1107. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.js +0 -214
  1108. package/src/shade/renderer/particles/particle_prototype.d.ts.map +0 -1
  1109. package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts +0 -43
  1110. package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts.map +0 -1
  1111. package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.js +0 -86
  1112. package/src/shade/renderer/particles/runtime/ProgramArena.js +0 -115
  1113. package/src/shade/renderer/particles/runtime/spawn_request_encoding.d.ts +0 -34
  1114. package/src/shade/renderer/particles/runtime/spawn_request_encoding.d.ts.map +0 -1
  1115. package/src/shade/renderer/particles/runtime/spawn_request_encoding.js +0 -52
  1116. package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts +0 -22
  1117. package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts.map +0 -1
  1118. package/src/shade/renderer/particles/shaders/chunk_particle_context.js +0 -58
@@ -1,117 +1,438 @@
1
1
  import { assert } from "../../../../core/assert.js";
2
+ import { GPUDatabase } from "../../buffer/table/GPUDatabase.js";
2
3
  import {
3
- EMITTER_ATTACH_NONE,
4
- EMITTER_STRIDE,
5
- make_emitter_flags,
6
- pack_emitter,
7
- } from "../data/PARTICLE_EMITTER_LAYOUT.js";
8
- import { ProgramArena } from "./ProgramArena.js";
4
+ PARTICLE_DATABASE_INITIAL_SIZE,
5
+ PARTICLE_DATABASE_SPEC,
6
+ PARTICLE_EMITTER_STATE_TABLE,
7
+ PARTICLE_EMITTER_TABLE
8
+ } from "../data/PARTICLE_DATABASE_SPEC.js";
9
+ import { PARTICLE_EMITTER_STATE_EMPTY } from "../data/PARTICLE_EMITTER_STATE.js";
10
+ import { create_emitter_record, write_emitter_record } from "../data/particle_emitter_record.js";
11
+ import { PARTICLE_GENERATION_FIRST, particle_generation_next } from "../data/particle_header.js";
12
+ import { GPUParticleEmitterContext } from "./GPUParticleEmitterContext.js";
13
+ import { ParticleEmitter } from "./ParticleEmitter.js";
14
+ import { ProgramHeap } from "./ProgramHeap.js";
9
15
 
10
- const IDENTITY = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
11
- const RENDER_KEYS = ["position", "size", "color", "rotation", "frame", "velocity"];
16
+ /**
17
+ * Staging for one emitter row. Reused across every write — the table serializes it into its page
18
+ * shadow synchronously, so nothing outlives the call. This is what keeps a frame's flush free of
19
+ * allocation whatever the number of rows it restages.
20
+ */
21
+ const RECORD = create_emitter_record();
12
22
 
13
23
  /**
14
- * CPU-side registry of emitters. Each emitter binds a compiled effect (from
15
- * {@link ./create_particle_effect.js}) to instance parameters — world transform, spawn rate, blend /
16
- * projection / feature flags, bounds, render-attribute binding, atlas region and flipbook grid.
24
+ * The emitter set: {@link ParticleEmitter} instances on the CPU, one GPU table row each.
25
+ *
26
+ * Rows live in a {@link GPUDatabase} table ({@link ../data/PARTICLE_DATABASE_SPEC.js}), which is
27
+ * what makes the set editable at runtime. Adding an emitter stages one record; removing one frees
28
+ * its slot for the next add; changing one restages that record and nothing else. Rows are handed
29
+ * out by the table and are stable for an emitter's lifetime — they have to be, because every live
30
+ * particle's record header stores the row of the emitter that spawned it.
31
+ *
32
+ * Reuse of a freed row is made safe by the **generation**: every add takes the next value of one
33
+ * running counter, so no two emitters this registry has ever registered share one, and the
34
+ * particles of a removed emitter — which carry its generation — cannot be mistaken for the new
35
+ * tenant's. The simulate pass kills them on sight; see {@link ../data/particle_header.js}.
36
+ *
37
+ * **None of that bookkeeping is on the emitter.** An emitter is a scene node and a description of
38
+ * an effect, with nothing in it that depends on a device; the row, the generation, the program
39
+ * placement, the node's `transforms` row and the atlas patch are a
40
+ * {@link ./GPUParticleEmitterContext.js} this registry holds against the emitter and hands out
41
+ * through {@link EmitterRegistry#context}. Registering an emitter creates one, removing it destroys
42
+ * one, and an emitter with no context here is an emitter this registry does not have.
17
43
  *
18
- * {@link build} produces the three upload-ready buffers the GPU passes consume: the packed emitter
19
- * records, the concatenated program instructions, and the constant pool. Emitters are few and
20
- * long-lived, so the whole set is repacked when it changes.
44
+ * The GPU-owned per-emitter state is the database's second table, claimed and released here at the
45
+ * emitter's row and never written by the CPU otherwise.
46
+ *
47
+ * Programs are the one thing NOT in the database: they are variable-length and shared, so they go
48
+ * into a packed {@link ProgramHeap} buffer and the emitter record carries offsets into it. The heap
49
+ * is content-deduplicated and reference-counted — two emitters compiled from the same graph land on
50
+ * one program id, which is what the simulation-order bucketing buckets on, and the last emitter of
51
+ * an effect is what releases it.
21
52
  */
22
53
  export class EmitterRegistry {
23
- constructor() {
24
- /** @type {object[]} */
25
- this.emitters = [];
54
+
55
+ /**
56
+ * @type {GPUDatabase}
57
+ */
58
+ database;
59
+
60
+ /**
61
+ * Packed instruction + constant buffers for every distinct program in the set.
62
+ * @type {ProgramHeap}
63
+ */
64
+ programs = new ProgramHeap();
65
+
66
+ /**
67
+ * The live emitters, in no particular order — the row in {@link context} is the identity.
68
+ * @type {ParticleEmitter[]}
69
+ */
70
+ emitters = [];
71
+
72
+ /**
73
+ * The live emitters by table row. Sparse: a freed row reads `undefined` until it is reused.
74
+ * Rows are small dense integers handed out lowest-free-first, so an array is the right index.
75
+ *
76
+ * @type {ParticleEmitter[]}
77
+ */
78
+ by_row = [];
79
+
80
+ /**
81
+ * Whether {@link programs} has changed since {@link build_program} last packed it. The buffer is
82
+ * monolithic (a program is variable-length, so there is no table to page it into), so any change
83
+ * means re-uploading it whole — which is why the heap dedupes by content, and why this is
84
+ * separate from the per-row dirtiness the table tracks.
85
+ *
86
+ * Read off the heap's own version rather than kept as a flag: there is then no path that changes
87
+ * the programs and forgets to say so.
88
+ *
89
+ * @returns {boolean}
90
+ */
91
+ get programs_dirty() {
92
+ return this.programs.version !== this.#built_programs_version;
26
93
  }
27
94
 
28
- /** @returns {number} number of registered emitters */
95
+ /**
96
+ * {@link ProgramHeap#version} the last {@link build_program} packed. `-1` for "nothing has been
97
+ * built yet", which no version reaches.
98
+ *
99
+ * @type {number}
100
+ */
101
+ #built_programs_version = -1;
102
+
103
+ /**
104
+ * {@link ProgramHeap#placement_version} the rows were last staged against. When the heap repacks,
105
+ * every program that was already placed moves, so every row built from the old offsets has to be
106
+ * written again — see {@link flush}.
107
+ *
108
+ * @type {number}
109
+ */
110
+ #staged_placement_version = 0;
111
+
112
+ /**
113
+ * What this registry knows about each emitter it holds, and the only place any of it exists.
114
+ *
115
+ * @type {Map<ParticleEmitter, GPUParticleEmitterContext>}
116
+ */
117
+ #contexts = new Map();
118
+
119
+ /**
120
+ * The generation the next add will take.
121
+ * @type {number}
122
+ */
123
+ #generation = PARTICLE_GENERATION_FIRST;
124
+
125
+ /**
126
+ * @param {GPUDevice} device
127
+ */
128
+ constructor(device) {
129
+ assert.defined(device, 'device');
130
+
131
+ this.database = new GPUDatabase({
132
+ device,
133
+ definition: PARTICLE_DATABASE_SPEC,
134
+ label: 'Particles / Emitters',
135
+ initial_data_size_bytes: PARTICLE_DATABASE_INITIAL_SIZE,
136
+ });
137
+ }
138
+
139
+ /**
140
+ * The emitter table.
141
+ * @returns {GPUTypedTable}
142
+ */
143
+ get table() {
144
+ return this.database.get(PARTICLE_EMITTER_TABLE);
145
+ }
146
+
147
+ /**
148
+ * The GPU-owned state table: one row per emitter, at the emitter's row, claimed and released
149
+ * here and otherwise the GPU's.
150
+ * @returns {GPUTypedTable}
151
+ */
152
+ get state_table() {
153
+ return this.database.get(PARTICLE_EMITTER_STATE_TABLE);
154
+ }
155
+
156
+ /**
157
+ * @returns {number} number of live emitters
158
+ */
29
159
  get count() {
30
160
  return this.emitters.length;
31
161
  }
32
162
 
33
163
  /**
34
- * Register an emitter.
164
+ * Number of distinct compiled programs registered.
165
+ * @returns {number}
166
+ */
167
+ get program_count() {
168
+ return this.programs.program_count;
169
+ }
170
+
171
+ /**
172
+ * Number of buckets the simulation-order coherence pass histograms into: every live program id
173
+ * is below it. See {@link ProgramHeap#program_id_capacity}.
35
174
  *
36
- * @param {object} config
37
- * @param {{layout: object, program: object}} config.effect compiled effect
38
- * @param {number[]} [config.transform] 16-element column-major local-to-world matrix
39
- * @param {number} [config.seed]
40
- * @param {number} [config.spawn_rate] particles/second
41
- * @param {object} [config.flags] passed to {@link make_emitter_flags}
42
- * @param {{center?: number[], radius?: number}} [config.bounds]
43
- * @param {Object<string,string>} [config.render] map of render channel -> attribute name
44
- * @param {number[]} [config.atlas_region] [uvOffsetX, uvOffsetY, uvScaleX, uvScaleY]
45
- * @param {number[]} [config.flipbook] [cols, rows]
46
- * @param {number} [config.attach_row] scene transforms row for bone attachment
47
- * @returns {number} the emitter index
175
+ * @returns {number}
48
176
  */
49
- add(config) {
50
- assert.defined(config.effect, "config.effect");
51
- assert.defined(config.effect.program, "config.effect.program");
52
- assert.defined(config.effect.layout, "config.effect.layout");
177
+ get program_id_capacity() {
178
+ return this.programs.program_id_capacity;
179
+ }
53
180
 
54
- this.emitters.push(config);
55
- return this.emitters.length - 1;
181
+ /**
182
+ * Register slots the hungriest registered effect needs — a property of the whole set, since
183
+ * there is one simulate pipeline and it is chosen once. What a caller does with the number (pick
184
+ * a register backing, refuse the effect, warn an author) is the caller's; see
185
+ * {@link ProgramHeap#max_register_count}.
186
+ *
187
+ * @returns {number}
188
+ */
189
+ get max_register_count() {
190
+ return this.programs.max_register_count;
56
191
  }
57
192
 
58
193
  /**
59
- * Pack all emitters + their programs into upload-ready buffers.
194
+ * What this registry assigned an emitter: its table row, generation, program placement, the
195
+ * `transforms` row of its node and its atlas patch.
60
196
  *
61
- * `program_count` is the number of DISTINCT programs across the emitter set — the bucket count
62
- * the simulation-order coherence pass histograms into. It is CPU-known and low-churn (it only
63
- * changes when the emitter set does), which is why that pass can size its histogram, its cursor
64
- * and its padding dispatch on the host without any of the per-frame counts ever leaving the GPU.
197
+ * `undefined` for an emitter this registry does not hold — which is the way to ask whether one
198
+ * is live, there being no `-1` on the emitter to read instead.
65
199
  *
66
- * @returns {{ emitters: Uint32Array, program: Uint32Array, constants: Uint32Array, program_count: number }}
200
+ * @param {ParticleEmitter} emitter
201
+ * @returns {GPUParticleEmitterContext|undefined}
67
202
  */
68
- build() {
69
- const arena = new ProgramArena();
70
- const emitters = new Uint32Array(Math.max(1, this.emitters.length) * EMITTER_STRIDE);
71
- const f32 = new Float32Array(emitters.buffer);
203
+ context(emitter) {
204
+ return this.#contexts.get(emitter);
205
+ }
72
206
 
73
- this.emitters.forEach((config, index) => {
74
- const offsets = arena.add(config.effect.program);
75
- const layout = config.effect.layout;
207
+ /**
208
+ * Register an emitter and give it a table row.
209
+ *
210
+ * @param {ParticleEmitter|object} config a {@link ParticleEmitter}, or a description
211
+ * {@link ParticleEmitter.from} accepts
212
+ * @param {number} [transform_row] the emitter node's row in the scene's `transforms` table, if
213
+ * already known; {@link set_transform_row} sets it later otherwise
214
+ * @returns {ParticleEmitter}
215
+ */
216
+ add(config, transform_row = 0) {
217
+ const emitter = config.isParticleEmitter === true ? config : ParticleEmitter.from(config);
76
218
 
77
- const render = {};
78
- if (config.render !== undefined) {
79
- for (const key of RENDER_KEYS) {
80
- const attribute = config.render[key];
81
- if (attribute !== undefined) {
82
- render[key] = layout.offsetOf(attribute);
83
- }
84
- }
85
- }
219
+ assert.equal(this.#contexts.has(emitter), false, 'this emitter is already registered');
86
220
 
87
- pack_emitter(emitters, f32, index, {
88
- ...offsets,
89
- seed: config.seed ?? (index + 1),
90
- flags: make_emitter_flags(config.flags ?? {}),
91
- spawn_rate: config.spawn_rate ?? 0,
92
- transform: config.transform ?? IDENTITY,
93
- bounds_center: config.bounds?.center,
94
- bounds_radius: config.bounds?.radius,
95
- render,
96
- atlas_region: config.atlas_region,
97
- flipbook: config.flipbook,
98
- });
99
- });
221
+ const context = new GPUParticleEmitterContext();
222
+
223
+ context.placement = this.programs.acquire(emitter.program);
224
+
225
+ context.generation = this.#generation;
226
+ this.#generation = particle_generation_next(this.#generation);
227
+
228
+ context.transform_row = transform_row;
100
229
 
101
- return {
102
- emitters,
103
- program: arena.build_instruction_buffer(),
104
- constants: arena.build_constant_buffer(),
105
- program_count: Math.max(1, arena.program_count),
106
- };
230
+ // The table picks the slot — the lowest free one, so a removed emitter's row is reused
231
+ // rather than the id space growing without bound.
232
+ context.row = this.table.add(write_emitter_record(RECORD, emitter, context));
233
+ context.staged(emitter);
234
+
235
+ // Claim the state row alongside: zeroed, so the first tick starts it over. The CPU never
236
+ // writes it again — see PARTICLE_EMITTER_STATE.
237
+ this.state_table.set(context.row, PARTICLE_EMITTER_STATE_EMPTY);
238
+
239
+ this.#contexts.set(emitter, context);
240
+ this.emitters.push(emitter);
241
+ this.by_row[context.row] = emitter;
242
+
243
+ return emitter;
107
244
  }
108
245
 
109
246
  /**
110
- * The scene-node row an emitter is attached to (for bone attachment), or the "none" sentinel.
111
- * @param {number} index
112
- * @returns {number}
247
+ * Unregister an emitter and free its table row.
248
+ *
249
+ * Its particles are not touched here; they carry its generation, the row they will read is
250
+ * zero-filled (or a later tenant's, with a different generation), and the simulate pass frees
251
+ * them the next time it sees them. Retiring an emitter gently — spawn rate to zero, remove once
252
+ * its particles have died — remains available to an author who wants the tail to play out.
253
+ *
254
+ * The emitter itself comes out of this unchanged: what it loses is its context, which is
255
+ * everything being registered gave it. Its program goes with the context — the heap counts
256
+ * references, so an effect is only unpacked when its last emitter leaves.
257
+ *
258
+ * @param {ParticleEmitter} emitter
259
+ */
260
+ remove(emitter) {
261
+ assert.defined(emitter, 'emitter');
262
+ assert.equal(emitter.isParticleEmitter, true, 'emitter.isParticleEmitter !== true');
263
+
264
+ const context = this.#contexts.get(emitter);
265
+
266
+ assert.defined(context, 'emitter is not registered here');
267
+
268
+ const position = this.emitters.indexOf(emitter);
269
+
270
+ // Swap-remove: order carries no meaning, and a splice would allocate.
271
+ const last = this.emitters.pop();
272
+
273
+ if (last !== emitter) {
274
+ this.emitters[position] = last;
275
+ }
276
+
277
+ this.by_row[context.row] = undefined;
278
+ this.table.remove(context.row);
279
+ this.state_table.remove(context.row);
280
+
281
+ this.programs.release(context.placement);
282
+
283
+ context.placement = null;
284
+
285
+ this.#contexts.delete(emitter);
286
+ }
287
+
288
+ /**
289
+ * Give a registered emitter different bytecode to run: its old program loses a reference, the new
290
+ * one gains one, and its row is restaged with the new placement.
291
+ *
292
+ * This is the runtime edit the emitter table has always allowed and the program buffer used not
293
+ * to — an author reworking an effect in the editor changes the program of an emitter that is
294
+ * already live, and the effect it used to run goes away with the last emitter that ran it.
295
+ *
296
+ * The attribute {@link ../layout/ParticleLayout.js layout} is NOT part of this and must not
297
+ * change with it: particles already in flight are laid out the old way, and new bytecode reading
298
+ * them at new offsets would read somebody else's field. Re-laying-out an effect means new
299
+ * emitters.
300
+ *
301
+ * @param {ParticleEmitter} emitter
302
+ * @param {import("../isa/ParticleProgram.js").ParticleProgram} program
303
+ */
304
+ set_program(emitter, program) {
305
+ assert.defined(program, 'program');
306
+
307
+ const context = this.#contexts.get(emitter);
308
+
309
+ assert.defined(context, 'emitter is not registered here');
310
+
311
+ const previous = context.placement;
312
+
313
+ // acquired before the old one is let go, so that re-setting the program an emitter already
314
+ // runs — which is what an editor does on every keystroke that changes nothing — neither
315
+ // unpacks it nor gives it a new id
316
+ context.placement = this.programs.acquire(program);
317
+
318
+ emitter.program = program;
319
+
320
+ this.programs.release(previous);
321
+
322
+ context.invalidate();
323
+ }
324
+
325
+ /**
326
+ * Look up a live emitter by its table row.
327
+ *
328
+ * @param {number} row
329
+ * @returns {ParticleEmitter|undefined}
330
+ */
331
+ get(row) {
332
+ return this.by_row[row];
333
+ }
334
+
335
+ /**
336
+ * Point an emitter's record at its node's row in the scene's `transforms` table. The row is
337
+ * restaged on the next flush.
338
+ *
339
+ * @param {ParticleEmitter} emitter
340
+ * @param {number} transform_row
113
341
  */
114
- attachRow(index) {
115
- return this.emitters[index]?.attach_row ?? EMITTER_ATTACH_NONE;
342
+ set_transform_row(emitter, transform_row) {
343
+ assert.isNonNegativeInteger(transform_row, 'transform_row');
344
+
345
+ const context = this.#contexts.get(emitter);
346
+
347
+ assert.defined(context, 'emitter is not registered here');
348
+
349
+ if (context.transform_row === transform_row) {
350
+ return;
351
+ }
352
+
353
+ context.transform_row = transform_row;
354
+ context.invalidate();
355
+ }
356
+
357
+ /**
358
+ * Point an emitter's record at the patch its texture was packed into: uv offset `.xy`, uv scale
359
+ * `.zw`. The row is restaged on the next flush.
360
+ *
361
+ * For whoever owns the atlas to call, on registration and again after every repack — a repack
362
+ * moves every patch, and an emitter left holding the old one draws the wrong image.
363
+ *
364
+ * @param {ParticleEmitter} emitter
365
+ * @param {ArrayLike<number>} region [uvOffsetX, uvOffsetY, uvScaleX, uvScaleY]
366
+ */
367
+ set_atlas_region(emitter, region) {
368
+ assert.equal(region.length, 4, 'region.length');
369
+
370
+ const context = this.#contexts.get(emitter);
371
+
372
+ assert.defined(context, 'emitter is not registered here');
373
+
374
+ const atlas_region = context.atlas_region;
375
+
376
+ if (
377
+ atlas_region[0] === region[0] && atlas_region[1] === region[1]
378
+ && atlas_region[2] === region[2] && atlas_region[3] === region[3]
379
+ ) {
380
+ return;
381
+ }
382
+
383
+ atlas_region.set(region);
384
+ context.invalidate();
385
+ }
386
+
387
+ /**
388
+ * Restage the table rows of every emitter whose fields have moved since the last flush.
389
+ *
390
+ * "Moved" is the node's own change counter: an emitter is restaged when its
391
+ * {@link ../../scene/Node3D.js Node3D#version} is not the one its row was staged from, or when
392
+ * something in its context changed. So an author marks an edited emitter the way they mark any
393
+ * edited node, with `needsUpdate = true`, and there is no second flag to forget.
394
+ *
395
+ * Cheap to call every frame: an emitter that has not changed costs one integer comparison, and
396
+ * the table coalesces repeated writes to one row within a frame anyway. Walks the context map
397
+ * rather than the emitter list so that a pass over the set is not also a lookup per emitter.
398
+ * Stages through the one module-static record, so a frame's restaging allocates nothing however
399
+ * many rows it touches.
400
+ */
401
+ flush() {
402
+ const table = this.table;
403
+
404
+ const placement_version = this.programs.placement_version;
405
+
406
+ // A repack moved every program that was already placed, so every row holds offsets into
407
+ // where its code used to be. That is the one change no emitter announces — it is not an edit
408
+ // to any of them — so it is asked of the heap once here rather than pushed onto each context.
409
+ const relocated = placement_version !== this.#staged_placement_version;
410
+
411
+ this.#staged_placement_version = placement_version;
412
+
413
+ for (const [emitter, context] of this.#contexts) {
414
+ if (!relocated && !context.is_stale(emitter)) {
415
+ continue;
416
+ }
417
+
418
+ table.set(context.row, write_emitter_record(RECORD, emitter, context));
419
+ context.staged(emitter);
420
+ }
421
+ }
422
+
423
+ /**
424
+ * The packed program buffer — header, constant pools, code — rebuilt whole.
425
+ *
426
+ * Call when {@link programs_dirty}; it answers the flag. The buffer is monolithic (a program is
427
+ * variable-length, so there is no table to page it into), so this is a full rebuild — the heap's
428
+ * content deduplication is what keeps it rare (it changes only when an effect the set has never
429
+ * seen is registered, or when the sections are repacked to make room for one).
430
+ *
431
+ * @returns {Uint32Array}
432
+ */
433
+ build_program() {
434
+ this.#built_programs_version = this.programs.version;
435
+
436
+ return this.programs.build_buffer();
116
437
  }
117
438
  }
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Everything the GPU side knows about one {@link ./ParticleEmitter.js} that the emitter itself has
3
+ * no business knowing.
4
+ *
5
+ * An emitter is a scene node and a description of an effect: what to run, how fast, how big, which
6
+ * attribute is the colour. None of that depends on a device. The rest — which row of the emitter
7
+ * table it was given, which tenancy of that row it is, where its program was placed in the program
8
+ * heap, which `transforms` row its node ended up in, where its texture was packed into the atlas —
9
+ * is the particle system's bookkeeping, true only while the emitter is registered and only for the
10
+ * registry that registered it. Kept on the emitter it would travel with a saved effect, mean
11
+ * nothing when loaded, and be there for an author to set to a number the table has never heard of.
12
+ *
13
+ * So it lives here, in an object the registry owns and hands out ({@link ./EmitterRegistry.js#context}),
14
+ * and an emitter that no registry holds simply has none. That is also what makes "is this emitter
15
+ * live?" a question with one answer — the presence of a context — rather than a `row` of `-1` that
16
+ * anything could have written.
17
+ *
18
+ * Fields are set by the registry. Reading them is what a caller wants (the spawn ring addresses an
19
+ * emitter by row, a spec reads the generation a particle header should carry); writing them outside
20
+ * of {@link ./EmitterRegistry.js} desynchronises the context from the table it describes.
21
+ */
22
+ export class GPUParticleEmitterContext {
23
+ /**
24
+ * Row this emitter occupies in the emitter table. Stable for as long as the emitter is
25
+ * registered — it is what every live particle's record header stores, so it cannot be
26
+ * renumbered while particles are in flight.
27
+ *
28
+ * Not to be confused with {@link ./ParticleEmitter.js Node3D#id}, which is the node's own
29
+ * identity and the key the scene context maps to a `transforms` row.
30
+ *
31
+ * @type {number}
32
+ */
33
+ row: number;
34
+ /**
35
+ * Which tenancy of {@link row} this is. Distinct from every other the registry has ever handed
36
+ * out, and never zero. Stamped into every particle the emitter spawns, and what lets the
37
+ * simulate pass tell those particles from a later tenant's.
38
+ *
39
+ * @type {number}
40
+ */
41
+ generation: number;
42
+ /**
43
+ * Row of the scene database's `transforms` table the emitter's node occupies, as the scene
44
+ * context reported it — what the record's `node` field carries. `0` (the scene root) until
45
+ * bound, so an emitter registered before its node is placed still reads a valid row.
46
+ *
47
+ * @type {number}
48
+ */
49
+ transform_row: number;
50
+ /**
51
+ * Where this emitter's program sits in the shared {@link ./ProgramHeap.js}, and the program id
52
+ * the simulation-order bucketing keys on. Emitters compiled from the same graph hold the same
53
+ * object — which is also why it is held rather than copied out: the heap rewrites its offsets in
54
+ * place when it moves the program.
55
+ *
56
+ * @type {import("./ProgramPlacement.js").ProgramPlacement|null}
57
+ */
58
+ placement: import("./ProgramPlacement.js").ProgramPlacement | null;
59
+ /**
60
+ * Where {@link ./ParticleEmitter.js#texture} landed in the particle system's atlas: uv offset
61
+ * `.xy`, uv scale `.zw`. Mirrors meep's `AtlasPatch`.
62
+ *
63
+ * Resolved, never authored. The emitter names an image; which sheet it is packed into and where
64
+ * is the system's answer, and it changes without the emitter changing — a repack moves every
65
+ * patch. `[0, 0, 1, 1]` is the whole sheet, which is what an emitter with no texture of its own
66
+ * gets: the default atlas is a single white texel.
67
+ *
68
+ * @type {Float32Array}
69
+ */
70
+ atlas_region: Float32Array;
71
+ /**
72
+ * The emitter's {@link ../../scene/Node3D.js Node3D#version} as of the last time its row was
73
+ * staged, or `-1` for a row that must be restaged whatever the emitter says.
74
+ *
75
+ * This is the whole of the dirty tracking: {@link ./EmitterRegistry.js#flush} restages an
76
+ * emitter whose version has moved since. A node already counts its own changes for the
77
+ * renderer, and a second flag on the emitter saying the same thing would be one more thing to
78
+ * forget to set — so the emitter carries none, and an author who changes a field marks it the
79
+ * way they mark any node change, with `needsUpdate = true`.
80
+ *
81
+ * The version is the node's, so it also moves when the node merely moves, and the row is
82
+ * restaged for a change it does not hold. That costs one row: an emitter that moved is an
83
+ * emitter whose `transforms` row the scene context is uploading this frame anyway.
84
+ *
85
+ * A version of `-1` is unreachable for a node — the counter starts at 0 and only rises — so it
86
+ * is safe as the "not staged" sentinel, and it is what the fields above are set back to when
87
+ * one of *them* changes, since those move without the emitter moving.
88
+ *
89
+ * @type {number}
90
+ */
91
+ staged_version: number;
92
+ /**
93
+ * @param {import("./ParticleEmitter.js").ParticleEmitter} emitter the emitter this describes
94
+ * @returns {boolean} whether the table row is out of step with `emitter`
95
+ */
96
+ is_stale(emitter: import("./ParticleEmitter.js").ParticleEmitter): boolean;
97
+ /**
98
+ * Mark the row as needing to be restaged on the next flush, for a change the emitter's version
99
+ * does not record — one of this context's own fields.
100
+ */
101
+ invalidate(): void;
102
+ /**
103
+ * Record that the table row now holds `emitter` as it currently is.
104
+ *
105
+ * @param {import("./ParticleEmitter.js").ParticleEmitter} emitter
106
+ */
107
+ staged(emitter: import("./ParticleEmitter.js").ParticleEmitter): void;
108
+ }
109
+ //# sourceMappingURL=GPUParticleEmitterContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GPUParticleEmitterContext.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IAEI;;;;;;;;;OASG;IACH,KAFU,MAAM,CAEP;IAET;;;;;;OAMG;IACH,YAFU,MAAM,CAED;IAEf;;;;;;OAMG;IACH,eAFU,MAAM,CAEE;IAElB;;;;;;;OAOG;IACH,WAFU,OAAO,uBAAuB,EAAE,gBAAgB,GAAC,IAAI,CAE9C;IAEjB;;;;;;;;;;OAUG;IACH,cAFU,YAAY,CAEwB;IAE9C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gBAFU,MAAM,CAEI;IAEpB;;;OAGG;IACH,kBAHW,OAAO,sBAAsB,EAAE,eAAe,GAC5C,OAAO,CAInB;IAED;;;OAGG;IACH,mBAEC;IAED;;;;OAIG;IACH,gBAFW,OAAO,sBAAsB,EAAE,eAAe,QAMxD;CACJ"}