@woosh/meep-engine 3.14.6 → 3.16.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 (1089) 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 +396 -0
  12. package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -0
  13. package/editor/particles/effect/ParticleEffectDocument.js +989 -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/NodeGraphEditorView.d.ts +143 -2
  47. package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
  48. package/editor/view/node-graph/NodeGraphEditorView.js +358 -6
  49. package/editor/view/node-graph/NodeGraphMinimapView.d.ts +120 -0
  50. package/editor/view/node-graph/NodeGraphMinimapView.d.ts.map +1 -0
  51. package/editor/view/node-graph/NodeGraphMinimapView.js +859 -0
  52. package/editor/view/node-graph/NodeGraphPaletteView.d.ts +112 -0
  53. package/editor/view/node-graph/NodeGraphPaletteView.d.ts.map +1 -0
  54. package/editor/view/node-graph/NodeGraphPaletteView.js +352 -0
  55. package/editor/view/node-graph/NodeGraphSearchMenuView.d.ts +76 -0
  56. package/editor/view/node-graph/NodeGraphSearchMenuView.d.ts.map +1 -0
  57. package/editor/view/node-graph/NodeGraphSearchMenuView.js +247 -0
  58. package/editor/view/node-graph/NodeGraphView.d.ts +147 -5
  59. package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
  60. package/editor/view/node-graph/NodeGraphView.js +809 -76
  61. package/editor/view/node-graph/NodeIconView.d.ts +33 -0
  62. package/editor/view/node-graph/NodeIconView.d.ts.map +1 -0
  63. package/editor/view/node-graph/NodeIconView.js +54 -0
  64. package/editor/view/node-graph/NodeView.d.ts +71 -1
  65. package/editor/view/node-graph/NodeView.d.ts.map +1 -1
  66. package/editor/view/node-graph/NodeView.js +318 -17
  67. package/editor/view/node-graph/PortView.d.ts +41 -1
  68. package/editor/view/node-graph/PortView.d.ts.map +1 -1
  69. package/editor/view/node-graph/PortView.js +121 -69
  70. package/editor/view/node-graph/actions/ConnectionDeleteAction.d.ts +16 -3
  71. package/editor/view/node-graph/actions/ConnectionDeleteAction.d.ts.map +1 -1
  72. package/editor/view/node-graph/actions/ConnectionDeleteAction.js +29 -3
  73. package/editor/view/node-graph/actions/NodeCreateAction.d.ts +65 -0
  74. package/editor/view/node-graph/actions/NodeCreateAction.d.ts.map +1 -0
  75. package/editor/view/node-graph/actions/NodeCreateAction.js +108 -0
  76. package/editor/view/node-graph/actions/NodeDeleteAction.d.ts +6 -0
  77. package/editor/view/node-graph/actions/NodeDeleteAction.d.ts.map +1 -1
  78. package/editor/view/node-graph/actions/NodeDeleteAction.js +24 -2
  79. package/editor/view/node-graph/connection_wire_geometry.d.ts +34 -0
  80. package/editor/view/node-graph/connection_wire_geometry.d.ts.map +1 -1
  81. package/editor/view/node-graph/connection_wire_geometry.js +79 -3
  82. package/editor/view/node-graph/node-graph.css +678 -0
  83. package/editor/view/particles/effect/ParticleCodeEditorView.d.ts +37 -0
  84. package/editor/view/particles/effect/ParticleCodeEditorView.d.ts.map +1 -0
  85. package/editor/view/particles/effect/ParticleCodeEditorView.js +479 -0
  86. package/editor/view/particles/effect/ParticleEffectEditorView.d.ts +61 -0
  87. package/editor/view/particles/effect/ParticleEffectEditorView.d.ts.map +1 -0
  88. package/editor/view/particles/effect/ParticleEffectEditorView.js +223 -0
  89. package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts +25 -0
  90. package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -0
  91. package/editor/view/particles/effect/ParticleEmitterInspectorView.js +606 -0
  92. package/editor/view/particles/effect/ParticleGraphEditorView.d.ts +156 -0
  93. package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -0
  94. package/editor/view/particles/effect/ParticleGraphEditorView.js +1636 -0
  95. package/editor/view/particles/effect/ParticleNodeParametersView.d.ts +22 -0
  96. package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -0
  97. package/editor/view/particles/effect/ParticleNodeParametersView.js +520 -0
  98. package/editor/view/particles/effect/ParticlePreviewView.d.ts +52 -0
  99. package/editor/view/particles/effect/ParticlePreviewView.d.ts.map +1 -0
  100. package/editor/view/particles/effect/ParticlePreviewView.js +533 -0
  101. package/editor/view/particles/effect/particle-editor.css +556 -0
  102. package/editor/view/prepareMeshLibrary.d.ts.map +1 -1
  103. package/editor/view/prepareMeshLibrary.js +8 -4
  104. package/package.json +1 -1
  105. package/samples/engine/first-scene/main.js +152 -152
  106. package/samples/generation/generators/mir_generator_place_bases.js +3 -3
  107. package/src/core/assert.d.ts +28 -24
  108. package/src/core/assert.d.ts.map +1 -1
  109. package/src/core/assert.js +34 -26
  110. package/src/core/geom/3d/shape/PosedShape3D.d.ts +17 -0
  111. package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
  112. package/src/core/geom/3d/shape/PosedShape3D.js +34 -2
  113. package/src/core/graph/format/graphviz/graphviz_escape_html_label.d.ts +17 -0
  114. package/src/core/graph/format/graphviz/graphviz_escape_html_label.d.ts.map +1 -0
  115. package/src/core/graph/format/graphviz/graphviz_escape_html_label.js +25 -0
  116. package/src/core/graph/format/graphviz/graphviz_escape_quoted.d.ts +16 -0
  117. package/src/core/graph/format/graphviz/graphviz_escape_quoted.d.ts.map +1 -0
  118. package/src/core/graph/format/graphviz/graphviz_escape_quoted.js +24 -0
  119. package/src/core/model/node-graph/NodeGraph.d.ts +12 -0
  120. package/src/core/model/node-graph/NodeGraph.d.ts.map +1 -1
  121. package/src/core/model/node-graph/NodeGraph.js +21 -6
  122. package/src/core/model/node-graph/node/NodeDescription.d.ts +36 -0
  123. package/src/core/model/node-graph/node/NodeDescription.d.ts.map +1 -1
  124. package/src/core/model/node-graph/node/NodeDescription.js +41 -0
  125. package/src/core/model/node-graph/visual/ConnectionVisualData.d.ts +119 -0
  126. package/src/core/model/node-graph/visual/ConnectionVisualData.d.ts.map +1 -0
  127. package/src/core/model/node-graph/visual/ConnectionVisualData.js +317 -0
  128. package/src/core/model/node-graph/visual/NodeDescriptionVisualRegistry.d.ts +4 -0
  129. package/src/core/model/node-graph/visual/NodeDescriptionVisualRegistry.d.ts.map +1 -1
  130. package/src/core/model/node-graph/visual/NodeDescriptionVisualRegistry.js +125 -22
  131. package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts +91 -2
  132. package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
  133. package/src/core/model/node-graph/visual/NodeGraphVisualData.js +164 -113
  134. package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.d.ts +162 -0
  135. package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.d.ts.map +1 -0
  136. package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.js +288 -0
  137. package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts +109 -0
  138. package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts.map +1 -0
  139. package/src/core/model/node-graph/visual/layout/LayoutProblem.js +141 -0
  140. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +149 -0
  141. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts.map +1 -0
  142. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js +175 -0
  143. package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts +137 -0
  144. package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts.map +1 -0
  145. package/src/core/model/node-graph/visual/layout/RouteGrid.js +242 -0
  146. package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts +114 -0
  147. package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts.map +1 -0
  148. package/src/core/model/node-graph/visual/layout/RouteSearch.js +300 -0
  149. package/src/core/model/node-graph/visual/layout/RouteSet.d.ts +86 -0
  150. package/src/core/model/node-graph/visual/layout/RouteSet.d.ts.map +1 -0
  151. package/src/core/model/node-graph/visual/layout/RouteSet.js +168 -0
  152. package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.d.ts +48 -0
  153. package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.d.ts.map +1 -0
  154. package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.js +555 -0
  155. package/src/core/model/node-graph/visual/layout/layout_assign_layers.d.ts +34 -0
  156. package/src/core/model/node-graph/visual/layout/layout_assign_layers.d.ts.map +1 -0
  157. package/src/core/model/node-graph/visual/layout/layout_assign_layers.js +202 -0
  158. package/src/core/model/node-graph/visual/layout/layout_break_cycles.d.ts +34 -0
  159. package/src/core/model/node-graph/visual/layout/layout_break_cycles.d.ts.map +1 -0
  160. package/src/core/model/node-graph/visual/layout/layout_break_cycles.js +254 -0
  161. package/src/core/model/node-graph/visual/layout/layout_build_problem.d.ts +29 -0
  162. package/src/core/model/node-graph/visual/layout/layout_build_problem.d.ts.map +1 -0
  163. package/src/core/model/node-graph/visual/layout/layout_build_problem.js +184 -0
  164. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts +29 -0
  165. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts.map +1 -0
  166. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.js +95 -0
  167. package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts +56 -0
  168. package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts.map +1 -0
  169. package/src/core/model/node-graph/visual/layout/layout_node_graph.js +131 -0
  170. package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts +36 -0
  171. package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +1 -0
  172. package/src/core/model/node-graph/visual/layout/layout_order_layers.js +415 -0
  173. package/src/core/model/node-graph/visual/layout/layout_orient_links.d.ts +21 -0
  174. package/src/core/model/node-graph/visual/layout/layout_orient_links.d.ts.map +1 -0
  175. package/src/core/model/node-graph/visual/layout/layout_orient_links.js +49 -0
  176. package/src/core/model/node-graph/visual/layout/route_connections.d.ts +41 -0
  177. package/src/core/model/node-graph/visual/layout/route_connections.d.ts.map +1 -0
  178. package/src/core/model/node-graph/visual/layout/route_connections.js +309 -0
  179. package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts +33 -0
  180. package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts.map +1 -0
  181. package/src/core/model/node-graph/visual/layout/route_grid_build.js +237 -0
  182. package/src/core/model/node-graph/visual/layout/route_nudge.d.ts +25 -0
  183. package/src/core/model/node-graph/visual/layout/route_nudge.d.ts.map +1 -0
  184. package/src/core/model/node-graph/visual/layout/route_nudge.js +220 -0
  185. package/src/core/model/node-graph/visual/layout/route_to_spline.d.ts +29 -0
  186. package/src/core/model/node-graph/visual/layout/route_to_spline.d.ts.map +1 -0
  187. package/src/core/model/node-graph/visual/layout/route_to_spline.js +120 -0
  188. package/src/engine/EngineHarness.d.ts.map +1 -1
  189. package/src/engine/EngineHarness.js +593 -586
  190. package/src/engine/EntityCreator.js +116 -116
  191. package/src/engine/achievements/AchievementManager.js +437 -437
  192. package/src/engine/animation/AnimatedActions.js +111 -111
  193. package/src/engine/animation/AnimationUtils.d.ts.map +1 -1
  194. package/src/engine/animation/AnimationUtils.js +246 -234
  195. package/src/engine/animation/Animations.d.ts +1 -0
  196. package/src/engine/animation/Animations.d.ts.map +1 -1
  197. package/src/engine/animation/Animations.js +13 -5
  198. package/src/engine/animation/clip/bind_property_writer.d.ts.map +1 -1
  199. package/src/engine/animation/clip/bind_property_writer.js +12 -5
  200. package/src/engine/animation/curve/binding/BoundTransform64Writer.d.ts +29 -0
  201. package/src/engine/animation/curve/binding/BoundTransform64Writer.d.ts.map +1 -0
  202. package/src/engine/animation/curve/binding/BoundTransform64Writer.js +80 -0
  203. package/src/engine/animation/removeEntityWithMeshParticlesEffect.js +4 -4
  204. package/src/engine/asset/loaders/gltf_test_fixtures.d.ts.map +1 -1
  205. package/src/engine/asset/loaders/gltf_test_fixtures.js +5 -4
  206. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +12 -12
  207. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
  208. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +77 -44
  209. package/src/engine/control/first-person/abilities/LedgeGrab.js +1 -1
  210. package/src/engine/control/first-person/abilities/Mantle.js +1 -1
  211. package/src/engine/control/first-person/abilities/Slide.js +1 -1
  212. package/src/engine/control/first-person/collision/KinematicMover.d.ts +5 -9
  213. package/src/engine/control/first-person/collision/KinematicMover.d.ts.map +1 -1
  214. package/src/engine/control/first-person/collision/KinematicMover.js +59 -29
  215. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +2 -2
  216. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
  217. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +7 -7
  218. package/src/engine/ecs/EventType.d.ts +1 -0
  219. package/src/engine/ecs/EventType.js +35 -10
  220. package/src/engine/ecs/dynamic_actions/actions/definition/SendRequestActionDescription.d.ts.map +1 -1
  221. package/src/engine/ecs/dynamic_actions/actions/definition/SendRequestActionDescription.js +12 -4
  222. package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts +4 -4
  223. package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts.map +1 -1
  224. package/src/engine/ecs/fow/FogOfWarRevealerSystem.js +10 -11
  225. package/src/engine/ecs/grid/pick.js +1 -1
  226. package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.d.ts +1 -1
  227. package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +13 -13
  228. package/src/engine/ecs/gui/hud/testHudEdgeStick.js +3 -3
  229. package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts +10 -10
  230. package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +1 -1
  231. package/src/engine/ecs/ik/InverseKinematicsSystem.js +8 -8
  232. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts.map +1 -1
  233. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +120 -97
  234. package/src/engine/ecs/ik/ik_bone_chain.d.ts +16 -5
  235. package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +1 -1
  236. package/src/engine/ecs/ik/ik_bone_chain.js +16 -4
  237. package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts +7 -3
  238. package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts.map +1 -1
  239. package/src/engine/ecs/ik/ik_probe_terrain_contact.js +20 -16
  240. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +18 -0
  241. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -0
  242. package/src/engine/ecs/ik/ik_write_local_rotation.js +30 -0
  243. package/src/engine/ecs/parent/EntityNode.d.ts +24 -6
  244. package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
  245. package/src/engine/ecs/parent/EntityNode.js +54 -42
  246. package/src/engine/ecs/parent/EntityNodeFlags.d.ts +0 -1
  247. package/src/engine/ecs/parent/EntityNodeFlags.js +7 -8
  248. package/src/engine/ecs/speaker/VoiceSystem.d.ts +2 -2
  249. package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
  250. package/src/engine/ecs/speaker/VoiceSystem.js +4 -4
  251. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  252. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +2 -0
  253. package/src/engine/ecs/terrain/ecs/Terrain.d.ts +5 -2
  254. package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
  255. package/src/engine/ecs/terrain/ecs/Terrain.js +7 -4
  256. package/src/engine/ecs/terrain/ecs/TerrainSystem.js +3 -3
  257. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts +7 -7
  258. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
  259. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +84 -36
  260. package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +513 -0
  261. package/src/engine/ecs/transform/Transform64.d.ts +48 -11
  262. package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
  263. package/src/engine/ecs/transform/Transform64.js +54 -15
  264. package/src/engine/ecs/transform/Transform64SerializationAdapter.d.ts +37 -0
  265. package/src/engine/ecs/transform/Transform64SerializationAdapter.d.ts.map +1 -0
  266. package/src/engine/ecs/transform/Transform64SerializationAdapter.js +75 -0
  267. package/src/engine/ecs/transform/__probe.d.ts +4 -0
  268. package/src/engine/ecs/transform/__probe.d.ts.map +1 -0
  269. package/src/engine/ecs/transform/t64_allocation_probe.d.ts +31 -0
  270. package/src/engine/ecs/transform/t64_allocation_probe.d.ts.map +1 -0
  271. package/src/engine/ecs/transform/t64_allocation_probe.js +78 -0
  272. package/src/engine/ecs/transform/t64_announce_change.d.ts +33 -0
  273. package/src/engine/ecs/transform/t64_announce_change.d.ts.map +1 -0
  274. package/src/engine/ecs/transform/t64_announce_change.js +39 -0
  275. package/src/engine/ecs/transform/t64_equals_components.d.ts +30 -0
  276. package/src/engine/ecs/transform/t64_equals_components.d.ts.map +1 -0
  277. package/src/engine/ecs/transform/t64_equals_components.js +59 -0
  278. package/src/engine/ecs/transform/t64_read_rotation.d.ts +13 -0
  279. package/src/engine/ecs/transform/t64_read_rotation.d.ts.map +1 -0
  280. package/src/engine/ecs/transform/t64_read_rotation.js +16 -0
  281. package/src/engine/ecs/transform/t64_read_translation.d.ts +14 -0
  282. package/src/engine/ecs/transform/t64_read_translation.d.ts.map +1 -0
  283. package/src/engine/ecs/transform/t64_read_translation.js +17 -0
  284. package/src/engine/ecs/transform-attachment/TransformAttachment.d.ts +5 -5
  285. package/src/engine/ecs/transform-attachment/TransformAttachment.d.ts.map +1 -1
  286. package/src/engine/ecs/transform-attachment/TransformAttachment.js +4 -4
  287. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts +10 -10
  288. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
  289. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +71 -20
  290. package/src/engine/graphics/debug/createDebugLabel.js +3 -3
  291. package/src/engine/graphics/ecs/camera/pp/PerfectPanner.d.ts.map +1 -1
  292. package/src/engine/graphics/ecs/camera/pp/PerfectPanner.js +5 -4
  293. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
  294. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +8 -3
  295. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts +6 -6
  296. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
  297. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +25 -13
  298. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraLanderSystem.js +1 -1
  299. package/src/engine/graphics/ecs/mesh/setMesh.js +2 -2
  300. package/src/engine/graphics/ecs/path/entity/EntityPath.d.ts.map +1 -1
  301. package/src/engine/graphics/ecs/path/entity/EntityPath.js +21 -7
  302. package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.d.ts +4 -4
  303. package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.d.ts.map +1 -1
  304. package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.js +4 -4
  305. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts +2 -2
  306. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
  307. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +145 -135
  308. package/src/engine/graphics/geometry/MikkT/Build4RuleGroups.js +2 -2
  309. package/src/engine/graphics/geometry/MikkT/DegenEpilogue.js +1 -1
  310. package/src/engine/graphics/geometry/MikkT/DegenPrologue.js +1 -1
  311. package/src/engine/graphics/geometry/MikkT/EvalTspace.js +1 -1
  312. package/src/engine/graphics/geometry/MikkT/GenerateTSpaces.js +3 -3
  313. package/src/engine/graphics/render/frame_graph/CORRECTNESS_FIXES_2026_09_04.md +659 -0
  314. package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +21 -5
  315. package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts +45 -0
  316. package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts.map +1 -1
  317. package/src/engine/graphics/render/frame_graph/FrameGraph.js +282 -60
  318. package/src/engine/graphics/render/frame_graph/FramePassBuilder.d.ts.map +1 -1
  319. package/src/engine/graphics/render/frame_graph/FramePassBuilder.js +20 -9
  320. package/src/engine/graphics/render/frame_graph/FramePassNode.d.ts +12 -0
  321. package/src/engine/graphics/render/frame_graph/FramePassNode.d.ts.map +1 -1
  322. package/src/engine/graphics/render/frame_graph/FramePassNode.js +13 -0
  323. package/src/engine/graphics/render/frame_graph/FramePassResources.d.ts.map +1 -1
  324. package/src/engine/graphics/render/frame_graph/FramePassResources.js +5 -0
  325. package/src/engine/graphics/render/frame_graph/ResourceEntry.d.ts +19 -1
  326. package/src/engine/graphics/render/frame_graph/ResourceEntry.d.ts.map +1 -1
  327. package/src/engine/graphics/render/frame_graph/ResourceEntry.js +23 -1
  328. package/src/engine/graphics/render/frame_graph/backend/void/VoidRenderContext.d.ts +15 -1
  329. package/src/engine/graphics/render/frame_graph/backend/void/VoidRenderContext.d.ts.map +1 -1
  330. package/src/engine/graphics/render/frame_graph/backend/void/VoidRenderContext.js +33 -16
  331. package/src/engine/graphics/render/frame_graph/resource/RenderResourceManager.d.ts.map +1 -1
  332. package/src/engine/graphics/render/frame_graph/resource/RenderResourceManager.js +19 -1
  333. package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +6 -6
  334. package/src/engine/graphics3/CameraSystem.d.ts +6 -6
  335. package/src/engine/graphics3/CameraSystem.d.ts.map +1 -1
  336. package/src/engine/graphics3/CameraSystem.js +170 -170
  337. package/src/engine/graphics3/DecalSystem.d.ts +6 -6
  338. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
  339. package/src/engine/graphics3/DecalSystem.js +449 -449
  340. package/src/engine/graphics3/LightSystem.d.ts +6 -6
  341. package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
  342. package/src/engine/graphics3/LightSystem.js +234 -221
  343. package/src/engine/graphics3/MeshSystem.d.ts +6 -6
  344. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
  345. package/src/engine/graphics3/MeshSystem.js +53 -22
  346. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +20 -15
  347. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -1
  348. package/src/engine/graphics3/ParticipatingMediaSystem.js +198 -184
  349. package/src/engine/graphics3/ParticleEmitterSystem.d.ts +6 -6
  350. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -1
  351. package/src/engine/graphics3/ParticleEmitterSystem.js +310 -289
  352. package/src/engine/graphics3/PickingSystem.d.ts +6 -6
  353. package/src/engine/graphics3/PickingSystem.d.ts.map +1 -1
  354. package/src/engine/graphics3/PickingSystem.js +273 -273
  355. package/src/engine/graphics3/ShadedGeometrySystem.d.ts +6 -6
  356. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
  357. package/src/engine/graphics3/ShadedGeometrySystem.js +180 -169
  358. package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -1
  359. package/src/engine/graphics3/TerrainSystem.js +565 -566
  360. package/src/engine/graphics3/Trail3DSystem.d.ts +6 -6
  361. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
  362. package/src/engine/graphics3/Trail3DSystem.js +221 -221
  363. package/src/engine/graphics3/camera_sync_from_transform.d.ts +2 -2
  364. package/src/engine/graphics3/camera_sync_from_transform.d.ts.map +1 -1
  365. package/src/engine/graphics3/camera_sync_from_transform.js +2 -1
  366. package/src/engine/graphics3/debug/gizmo_view_from_camera.js +4 -4
  367. package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts +6 -0
  368. package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts.map +1 -1
  369. package/src/engine/graphics3/particles/GPUParticularRenderer.js +82 -53
  370. package/src/engine/graphics3/particles/particle_gpu_records.d.ts +12 -8
  371. package/src/engine/graphics3/particles/particle_gpu_records.d.ts.map +1 -1
  372. package/src/engine/graphics3/particles/particle_gpu_records.js +53 -45
  373. package/src/engine/graphics3/preview/make_model_preview_scene.js +1 -1
  374. package/src/engine/graphics3/shade_camera_projection_ray.js +4 -4
  375. package/src/engine/graphics3/shade_node_to_entity_composition.d.ts.map +1 -1
  376. package/src/engine/graphics3/shade_node_to_entity_composition.js +88 -84
  377. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts +7 -7
  378. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts.map +1 -1
  379. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.js +8 -8
  380. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts +9 -8
  381. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts.map +1 -1
  382. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.js +29 -8
  383. package/src/engine/input/ecs/controllers/KeyboardCameraController.js +2 -2
  384. package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.d.ts.map +1 -1
  385. package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.js +35 -21
  386. package/src/engine/intelligence/behavior/util/RotationBehavior.js +5 -5
  387. package/src/engine/intelligence/mcts/StateNode.js +1 -1
  388. package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts +7 -7
  389. package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts.map +1 -1
  390. package/src/engine/interpolation/TransformPoseSerializationAdapter.js +14 -15
  391. package/src/engine/interpolation/pose_interpoland.d.ts +2 -2
  392. package/src/engine/interpolation/pose_interpoland.js +4 -4
  393. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts +4 -4
  394. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts.map +1 -1
  395. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.js +39 -14
  396. package/src/engine/network/adapters/TransformReplicationAdapter.d.ts +7 -7
  397. package/src/engine/network/adapters/TransformReplicationAdapter.d.ts.map +1 -1
  398. package/src/engine/network/adapters/TransformReplicationAdapter.js +19 -20
  399. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts +48 -0
  400. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
  401. package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +246 -3
  402. package/src/engine/network/replication/Replicator.d.ts +5 -3
  403. package/src/engine/network/replication/Replicator.d.ts.map +1 -1
  404. package/src/engine/network/replication/Replicator.js +65 -16
  405. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +3 -3
  406. package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
  407. package/src/engine/physics/ccd/linear_sweep.js +9 -3
  408. package/src/engine/physics/constraint/solve_constraints.js +10 -10
  409. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +8 -8
  410. package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -1
  411. package/src/engine/physics/ecs/ColliderObserverSystem.js +6 -6
  412. package/src/engine/physics/ecs/PhysicsSystem.d.ts +22 -32
  413. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  414. package/src/engine/physics/ecs/PhysicsSystem.js +2337 -2310
  415. package/src/engine/physics/ecs/find_non_finite_physics_state.js +6 -6
  416. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +7 -7
  417. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
  418. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +16 -8
  419. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +4 -4
  420. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -1
  421. package/src/engine/physics/fluid/ecs/FluidSystem.js +6 -6
  422. package/src/engine/physics/fluid/ecs/WorkerFluidSystem.d.ts +2 -2
  423. package/src/engine/physics/fluid/ecs/WorkerFluidSystem.d.ts.map +1 -1
  424. package/src/engine/physics/fluid/ecs/WorkerFluidSystem.js +4 -4
  425. package/src/engine/physics/fluid/ecs/fluid_reanchor_field.js +7 -7
  426. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +4 -4
  427. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +7 -7
  428. package/src/engine/physics/inertia/world_inverse_inertia.js +1 -1
  429. package/src/engine/physics/integration/integrate_position.d.ts.map +1 -1
  430. package/src/engine/physics/integration/integrate_position.js +13 -12
  431. package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.d.ts.map +1 -1
  432. package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.js +23 -5
  433. package/src/engine/physics/narrowphase/compute_penetration.js +18 -14
  434. package/src/engine/physics/narrowphase/convex_convex_manifold.js +2 -2
  435. package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +9 -9
  436. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
  437. package/src/engine/physics/narrowphase/narrowphase_step.js +95 -68
  438. package/src/engine/physics/narrowphase/refine_ray_concave.js +1 -1
  439. package/src/engine/physics/narrowphase/refine_ray_hit.js +3 -3
  440. package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
  441. package/src/engine/physics/queries/overlap_shape.js +19 -7
  442. package/src/engine/physics/queries/raycast.js +3 -3
  443. package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
  444. package/src/engine/physics/queries/shape_cast.js +628 -620
  445. package/src/engine/physics/solver/solve_contacts.js +10 -10
  446. package/src/engine/physics/vehicle/RaycastVehicle.d.ts +6 -5
  447. package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
  448. package/src/engine/physics/vehicle/RaycastVehicle.js +10 -5
  449. package/src/engine/sound/ecs/SoundListenerSystem.d.ts +16 -4
  450. package/src/engine/sound/ecs/SoundListenerSystem.d.ts.map +1 -1
  451. package/src/engine/sound/ecs/SoundListenerSystem.js +70 -11
  452. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +7 -7
  453. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
  454. package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +343 -338
  455. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +2 -2
  456. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
  457. package/src/engine/sound/ecs/audio/LiveEmitterSet.js +356 -345
  458. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts +23 -2
  459. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts.map +1 -1
  460. package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +174 -140
  461. package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts +6 -6
  462. package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts.map +1 -1
  463. package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.js +185 -184
  464. package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.js +1 -1
  465. package/src/engine/sound/simulation/core/AcousticRegionIndex.d.ts +2 -1
  466. package/src/engine/sound/simulation/core/AcousticRegionIndex.d.ts.map +1 -1
  467. package/src/engine/sound/simulation/core/AcousticRegionIndex.js +4 -3
  468. package/src/engine/sound/simulation/core/AcousticVolumeRegion.d.ts +3 -2
  469. package/src/engine/sound/simulation/core/AcousticVolumeRegion.d.ts.map +1 -1
  470. package/src/engine/sound/simulation/core/AcousticVolumeRegion.js +6 -4
  471. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts +10 -6
  472. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts.map +1 -1
  473. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.js +32 -7
  474. package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.d.ts +7 -7
  475. package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.d.ts.map +1 -1
  476. package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.js +6 -6
  477. package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -1
  478. package/src/engine/sound/sopra/runtime/EventInstance.js +8 -2
  479. package/src/format/scene/gltf/gltf_component_type.d.ts.map +1 -1
  480. package/src/format/scene/gltf/gltf_component_type.js +3 -1
  481. package/src/format/texture/ktx2/ktx2_read.d.ts.map +1 -1
  482. package/src/format/texture/ktx2/ktx2_read.js +2 -1
  483. package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.d.ts.map +1 -1
  484. package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.js +8 -1
  485. package/src/generation/markers/GridCellActionPlaceMarker.d.ts +4 -4
  486. package/src/generation/markers/GridCellActionPlaceMarker.d.ts.map +1 -1
  487. package/src/generation/markers/GridCellActionPlaceMarker.js +16 -6
  488. package/src/generation/markers/MarkerNode.d.ts +3 -3
  489. package/src/generation/markers/MarkerNode.d.ts.map +1 -1
  490. package/src/generation/markers/MarkerNode.js +3 -3
  491. package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.d.ts +4 -4
  492. package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.d.ts.map +1 -1
  493. package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.js +7 -7
  494. package/src/generation/markers/actions/MarkerNodeActionImaginary.d.ts.map +1 -1
  495. package/src/generation/markers/actions/MarkerNodeActionImaginary.js +20 -2
  496. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +1 -1
  497. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts.map +1 -1
  498. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.js +13 -3
  499. package/src/generation/markers/transform/MarkerNodeTransformRotateRandom.d.ts.map +1 -1
  500. package/src/generation/markers/transform/MarkerNodeTransformRotateRandom.js +11 -1
  501. package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.d.ts.map +1 -1
  502. package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.js +8 -4
  503. package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.d.ts.map +1 -1
  504. package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +13 -5
  505. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.d.ts.map +1 -1
  506. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.js +8 -2
  507. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.d.ts.map +1 -1
  508. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.js +16 -2
  509. package/src/shade/RENDERER_CONTRACT.md +584 -580
  510. package/src/shade/device/graph/BufferResourceDescriptor.d.ts.map +1 -1
  511. package/src/shade/device/graph/BufferResourceDescriptor.js +193 -184
  512. package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
  513. package/src/shade/device/graph/TextureResourceDescriptor.js +12 -0
  514. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  515. package/src/shade/device/mock/SoftwareGPUDevice.js +8 -0
  516. package/src/shade/playground/avboit/README.md +117 -0
  517. package/src/shade/playground/avboit/index.html +215 -0
  518. package/src/shade/playground/avboit/main.d.ts +2 -0
  519. package/src/shade/playground/avboit/main.d.ts.map +1 -0
  520. package/src/shade/playground/avboit/main.js +875 -0
  521. package/src/shade/playground/basis_textures/main.js +1 -1
  522. package/src/shade/playground/ground_seam/main.js +1 -1
  523. package/src/shade/playground/particle_editor/README.md +175 -0
  524. package/src/shade/playground/particle_editor/index.html +76 -0
  525. package/src/shade/playground/particle_editor/main.d.ts +2 -0
  526. package/src/shade/playground/particle_editor/main.d.ts.map +1 -0
  527. package/src/shade/playground/particle_editor/main.js +139 -0
  528. package/src/shade/playground/particle_system/README.md +92 -62
  529. package/src/shade/playground/particle_system/index.html +67 -21
  530. package/src/shade/playground/particle_system/main.js +247 -102
  531. package/src/shade/{renderer/particles → playground/particle_system}/particle_prototype.d.ts +21 -18
  532. package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -0
  533. package/src/shade/{renderer/particles → playground/particle_system}/particle_prototype.js +197 -181
  534. package/src/shade/playground/particle_system/particle_scene.d.ts +136 -20
  535. package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
  536. package/src/shade/playground/particle_system/particle_scene.js +487 -670
  537. package/src/shade/playground/skinned_blas_refit/sweep_views.js +2 -2
  538. package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts.map +1 -1
  539. package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.js +2 -1
  540. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
  541. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +2 -1
  542. package/src/shade/playground/sponza_path_trace/main.js +1 -1
  543. package/src/shade/playground/volumetrics_froxel/main.js +917 -917
  544. package/src/shade/playground/volumetrics_froxel/measure.js +559 -559
  545. package/src/shade/renderer/Renderer.d.ts +44 -0
  546. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  547. package/src/shade/renderer/Renderer.js +169 -36
  548. package/src/shade/renderer/ShadeTransparencyMode.d.ts +13 -0
  549. package/src/shade/renderer/ShadeTransparencyMode.d.ts.map +1 -0
  550. package/src/shade/renderer/ShadeTransparencyMode.js +30 -0
  551. package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
  552. package/src/shade/renderer/atmosphere/GPUSky.js +4 -2
  553. package/src/shade/renderer/buffer/graph_read_buffer.d.ts.map +1 -1
  554. package/src/shade/renderer/buffer/graph_read_buffer.js +8 -1
  555. package/src/shade/renderer/buffer/table/GPUTypedTable.js +1 -1
  556. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts +30 -0
  557. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
  558. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +84 -0
  559. package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts +27 -0
  560. package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts.map +1 -0
  561. package/src/shade/renderer/buffer/table/gpu_database_words.d.ts +24 -0
  562. package/src/shade/renderer/buffer/table/gpu_database_words.d.ts.map +1 -0
  563. package/src/shade/renderer/buffer/table/gpu_database_words.js +92 -0
  564. package/src/shade/renderer/camera/Camera.d.ts +2 -2
  565. package/src/shade/renderer/camera/Camera.d.ts.map +1 -1
  566. package/src/shade/renderer/camera/Camera.js +11 -5
  567. package/src/shade/renderer/camera/GPUCameraContext.d.ts.map +1 -1
  568. package/src/shade/renderer/camera/GPUCameraContext.js +2 -1
  569. package/src/shade/renderer/camera/OrbitalCameraController.d.ts +3 -3
  570. package/src/shade/renderer/camera/OrbitalCameraController.d.ts.map +1 -1
  571. package/src/shade/renderer/camera/OrbitalCameraController.js +31 -16
  572. package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +2 -2
  573. package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
  574. package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +4 -3
  575. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +10 -5
  576. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +1 -1
  577. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +8 -4
  578. package/src/shade/renderer/extension/FrameContext.d.ts.map +1 -1
  579. package/src/shade/renderer/extension/FrameContext.js +5 -0
  580. package/src/shade/renderer/extension/FrameRecord.d.ts +16 -0
  581. package/src/shade/renderer/extension/FrameRecord.d.ts.map +1 -1
  582. package/src/shade/renderer/extension/FrameRecord.js +31 -0
  583. package/src/shade/renderer/extension/GBufferTextures.d.ts +11 -0
  584. package/src/shade/renderer/extension/GBufferTextures.d.ts.map +1 -1
  585. package/src/shade/renderer/extension/GBufferTextures.js +14 -0
  586. package/src/shade/renderer/geometry/attribute/gpu_vertex_buffer_layout_from_spec.js +1 -1
  587. package/src/shade/renderer/geometry/util/geometry_stripify.js +6 -6
  588. package/src/shade/renderer/geometry/virtual/format/prototypeVGEOFormatViewer.js +8 -8
  589. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
  590. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +14 -5
  591. package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.d.ts.map +1 -1
  592. package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.js +17 -9
  593. package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.d.ts +2 -1
  594. package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.d.ts.map +1 -1
  595. package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.js +4 -1
  596. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts +2 -1
  597. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
  598. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +11 -1
  599. package/src/shade/renderer/global_illumination/probe/octahedral/graph_lpv_shade.d.ts +1 -1
  600. package/src/shade/renderer/global_illumination/probe/octahedral/graph_lpv_shade.d.ts.map +1 -1
  601. package/src/shade/renderer/global_illumination/probe/octahedral/graph_lpv_shade.js +4 -2
  602. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
  603. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +5 -1
  604. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
  605. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +35 -11
  606. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  607. package/src/shade/renderer/particles/DESIGN.md +271 -112
  608. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +251 -86
  609. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  610. package/src/shade/renderer/particles/GPUParticleSystem.js +822 -146
  611. package/src/shade/renderer/particles/ParticleConstants.d.ts +96 -3
  612. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  613. package/src/shade/renderer/particles/ParticleConstants.js +103 -4
  614. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +5 -4
  615. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -1
  616. package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +11 -15
  617. package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts +2 -2
  618. package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts.map +1 -1
  619. package/src/shade/renderer/particles/coherence/shader_particle_bucket.js +20 -15
  620. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts +7 -8
  621. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts.map +1 -1
  622. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.js +7 -17
  623. package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts +56 -0
  624. package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts.map +1 -0
  625. package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js +68 -0
  626. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.d.ts +39 -0
  627. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.d.ts.map +1 -0
  628. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.js +52 -0
  629. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +83 -0
  630. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -0
  631. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +166 -0
  632. package/src/shade/renderer/particles/data/chunk_particle_emitter.d.ts +21 -5
  633. package/src/shade/renderer/particles/data/chunk_particle_emitter.d.ts.map +1 -1
  634. package/src/shade/renderer/particles/data/chunk_particle_emitter.js +44 -85
  635. package/src/shade/renderer/particles/data/particle_header.d.ts +62 -0
  636. package/src/shade/renderer/particles/data/particle_header.d.ts.map +1 -0
  637. package/src/shade/renderer/particles/data/particle_header.js +103 -0
  638. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +179 -0
  639. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts.map +1 -0
  640. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +303 -0
  641. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +120 -1
  642. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
  643. package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +90 -1
  644. package/src/shade/renderer/particles/graph/ParticleNodeGroup.d.ts +283 -0
  645. package/src/shade/renderer/particles/graph/ParticleNodeGroup.d.ts.map +1 -0
  646. package/src/shade/renderer/particles/graph/ParticleNodeGroup.js +419 -0
  647. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +44 -2
  648. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
  649. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +476 -40
  650. package/src/shade/renderer/particles/graph/ParticleValueType.d.ts +188 -0
  651. package/src/shade/renderer/particles/graph/ParticleValueType.d.ts.map +1 -0
  652. package/src/shade/renderer/particles/graph/ParticleValueType.js +287 -0
  653. package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts +16 -9
  654. package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
  655. package/src/shade/renderer/particles/graph/compile_particle_graph.js +464 -205
  656. package/src/shade/renderer/particles/graph/flatten_particle_graph.d.ts +11 -0
  657. package/src/shade/renderer/particles/graph/flatten_particle_graph.d.ts.map +1 -0
  658. package/src/shade/renderer/particles/graph/flatten_particle_graph.js +213 -0
  659. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts +27 -0
  660. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts.map +1 -0
  661. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.js +75 -0
  662. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts +83 -0
  663. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts.map +1 -0
  664. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.js +319 -0
  665. package/src/shade/renderer/particles/graph/groups/particle_groups_noise.d.ts +22 -0
  666. package/src/shade/renderer/particles/graph/groups/particle_groups_noise.d.ts.map +1 -0
  667. package/src/shade/renderer/particles/graph/groups/particle_groups_noise.js +517 -0
  668. package/src/shade/renderer/particles/graph/groups/particle_groups_utility.d.ts +70 -0
  669. package/src/shade/renderer/particles/graph/groups/particle_groups_utility.d.ts.map +1 -0
  670. package/src/shade/renderer/particles/graph/groups/particle_groups_utility.js +161 -0
  671. package/src/shade/renderer/particles/graph/groups/simplex_reference.d.ts +8 -0
  672. package/src/shade/renderer/particles/graph/groups/simplex_reference.d.ts.map +1 -0
  673. package/src/shade/renderer/particles/graph/groups/simplex_reference.js +159 -0
  674. package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts +88 -0
  675. package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts.map +1 -0
  676. package/src/shade/renderer/particles/graph/infer_particle_graph_types.js +234 -0
  677. package/src/shade/renderer/particles/graph/make_particle_group.d.ts +98 -0
  678. package/src/shade/renderer/particles/graph/make_particle_group.d.ts.map +1 -0
  679. package/src/shade/renderer/particles/graph/make_particle_group.js +427 -0
  680. package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts +11 -4
  681. package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -1
  682. package/src/shade/renderer/particles/graph/particle_graph_authoring.js +121 -108
  683. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts +38 -0
  684. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts.map +1 -0
  685. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.js +25 -0
  686. package/src/shade/renderer/particles/graph/particle_graph_distributions.d.ts +29 -0
  687. package/src/shade/renderer/particles/graph/particle_graph_distributions.d.ts.map +1 -0
  688. package/src/shade/renderer/particles/graph/particle_graph_distributions.js +170 -0
  689. package/src/shade/renderer/particles/graph/particle_graph_json.d.ts +87 -0
  690. package/src/shade/renderer/particles/graph/particle_graph_json.d.ts.map +1 -0
  691. package/src/shade/renderer/particles/graph/particle_graph_json.js +196 -0
  692. package/src/shade/renderer/particles/graph/particle_group_json.d.ts +86 -0
  693. package/src/shade/renderer/particles/graph/particle_group_json.d.ts.map +1 -0
  694. package/src/shade/renderer/particles/graph/particle_group_json.js +182 -0
  695. package/src/shade/renderer/particles/graph/particle_group_library.d.ts +33 -0
  696. package/src/shade/renderer/particles/graph/particle_group_library.d.ts.map +1 -0
  697. package/src/shade/renderer/particles/graph/particle_group_library.js +75 -0
  698. package/src/shade/renderer/particles/graph/particle_node_library.d.ts +37 -0
  699. package/src/shade/renderer/particles/graph/particle_node_library.d.ts.map +1 -0
  700. package/src/shade/renderer/particles/graph/particle_node_library.js +64 -0
  701. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +146 -0
  702. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -0
  703. package/src/shade/renderer/particles/graph/particle_node_parameters.js +234 -0
  704. package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts +30 -0
  705. package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -0
  706. package/src/shade/renderer/particles/graph/particle_node_presentation.js +286 -0
  707. package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +66 -0
  708. package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -0
  709. package/src/shade/renderer/particles/graph/validate_particle_graph.js +439 -0
  710. package/src/shade/renderer/particles/graph_particles.d.ts +143 -68
  711. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  712. package/src/shade/renderer/particles/graph_particles.js +424 -71
  713. package/src/shade/renderer/particles/graph_particles_avboit.d.ts +107 -0
  714. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -0
  715. package/src/shade/renderer/particles/graph_particles_avboit.js +312 -0
  716. package/src/shade/renderer/particles/isa/InstructionStream.d.ts +41 -8
  717. package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
  718. package/src/shade/renderer/particles/isa/InstructionStream.js +111 -33
  719. package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts +13 -10
  720. package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts.map +1 -1
  721. package/src/shade/renderer/particles/isa/ParticleAssembler.js +30 -26
  722. package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +27 -15
  723. package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
  724. package/src/shade/renderer/particles/isa/ParticleProgram.js +139 -34
  725. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +117 -9
  726. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
  727. package/src/shade/renderer/particles/isa/ParticleVMISA.js +296 -37
  728. package/src/shade/renderer/particles/isa/particle_assembly.d.ts +149 -0
  729. package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -0
  730. package/src/shade/renderer/particles/isa/particle_assembly.js +999 -0
  731. package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +25 -3
  732. package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
  733. package/src/shade/renderer/particles/layout/ParticleLayout.js +33 -5
  734. package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +160 -0
  735. package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -0
  736. package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +478 -0
  737. package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts +291 -0
  738. package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts.map +1 -0
  739. package/src/shade/renderer/particles/optimizer/particle_program_analysis.js +647 -0
  740. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +95 -0
  741. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -0
  742. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +213 -0
  743. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts +16 -0
  744. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts.map +1 -0
  745. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +223 -0
  746. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +121 -0
  747. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -0
  748. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +206 -0
  749. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts +11 -0
  750. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -0
  751. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.js +197 -0
  752. package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts +4 -0
  753. package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -0
  754. package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.js +51 -0
  755. package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts +4 -0
  756. package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -0
  757. package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +561 -0
  758. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts +4 -0
  759. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -0
  760. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.js +72 -0
  761. package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts +4 -0
  762. package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -0
  763. package/src/shade/renderer/particles/optimizer/pass_pack_registers.js +86 -0
  764. package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts +4 -0
  765. package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -0
  766. package/src/shade/renderer/particles/optimizer/pass_peephole.js +271 -0
  767. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts +4 -0
  768. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -0
  769. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.js +268 -0
  770. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts +4 -0
  771. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -0
  772. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +151 -0
  773. package/src/shade/renderer/particles/particle_test_fixtures.d.ts +131 -0
  774. package/src/shade/renderer/particles/particle_test_fixtures.d.ts.map +1 -0
  775. package/src/shade/renderer/particles/particle_test_fixtures.js +203 -0
  776. package/src/shade/renderer/particles/runtime/Emitter.d.ts +219 -0
  777. package/src/shade/renderer/particles/runtime/Emitter.d.ts.map +1 -0
  778. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +128 -60
  779. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  780. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +286 -117
  781. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +264 -0
  782. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -0
  783. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +404 -0
  784. package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts +49 -15
  785. package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts.map +1 -1
  786. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +51 -18
  787. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts.map +1 -1
  788. package/src/shade/renderer/particles/runtime/ProgramArena.js +72 -32
  789. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +4 -4
  790. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
  791. package/src/shade/renderer/particles/runtime/create_particle_effect.js +4 -4
  792. package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts +15 -0
  793. package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts.map +1 -0
  794. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.d.ts +17 -0
  795. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.d.ts.map +1 -0
  796. package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.js +75 -0
  797. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts +20 -0
  798. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -0
  799. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +94 -0
  800. package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts +15 -5
  801. package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts.map +1 -1
  802. package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.d.ts +1 -2
  803. package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.d.ts.map +1 -1
  804. package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.js +1 -2
  805. package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.d.ts +11 -0
  806. package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.d.ts.map +1 -0
  807. package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.js +13 -0
  808. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_age.d.ts +17 -0
  809. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_age.d.ts.map +1 -0
  810. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_age.js +22 -0
  811. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.d.ts +14 -0
  812. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.d.ts.map +1 -0
  813. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.js +23 -0
  814. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +1 -1
  815. package/src/shade/renderer/particles/shaders/chunk_particle_scene_view_depth.d.ts +18 -0
  816. package/src/shade/renderer/particles/shaders/chunk_particle_scene_view_depth.d.ts.map +1 -0
  817. package/src/shade/renderer/particles/shaders/chunk_particle_scene_view_depth.js +24 -0
  818. package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts +26 -0
  819. package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts.map +1 -0
  820. package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.js +59 -0
  821. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts +14 -0
  822. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -0
  823. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +153 -0
  824. package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.d.ts +3 -0
  825. package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.d.ts.map +1 -0
  826. package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.js +124 -0
  827. package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts +19 -0
  828. package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -0
  829. package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +147 -0
  830. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts +18 -8
  831. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  832. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +72 -37
  833. package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.d.ts +5 -0
  834. package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.d.ts.map +1 -0
  835. package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.js +216 -0
  836. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  837. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +7 -3
  838. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
  839. package/src/shade/renderer/particles/shaders/shader_particle_render.js +132 -197
  840. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  841. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +78 -24
  842. package/src/shade/renderer/particles/shaders/shader_particle_spawn_commands.d.ts +26 -0
  843. package/src/shade/renderer/particles/shaders/shader_particle_spawn_commands.d.ts.map +1 -0
  844. package/src/shade/renderer/particles/shaders/shader_particle_spawn_commands.js +66 -0
  845. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts +1 -1
  846. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  847. package/src/shade/renderer/particles/sort/shader_particle_sort.js +21 -36
  848. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +2 -2
  849. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
  850. package/src/shade/renderer/particles/vm/ParticleVMReference.js +100 -90
  851. package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
  852. package/src/shade/renderer/particles/vm/chunk_particle_vm.js +270 -138
  853. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts +9 -0
  854. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  855. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +26 -0
  856. package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts +1 -2
  857. package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts.map +1 -1
  858. package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.js +0 -3
  859. package/src/shade/renderer/postprocess/dof/gather/DepthOfFieldU.js +1 -1
  860. package/src/shade/renderer/postprocess/dof/raymarch/DepthOfField.js +1 -1
  861. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  862. package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
  863. package/src/shade/renderer/postprocess/nss/NSS.js +3 -2
  864. package/src/shade/renderer/postprocess/nss/generate_NSS_WEIGHTS_ACTUAL.js +3 -2
  865. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts +7 -2
  866. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  867. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +12 -1
  868. package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.js +1 -1
  869. package/src/shade/renderer/rasterize/forward/FORWARD_VERTEX_SHADER_STRUCT.d.ts +3 -0
  870. package/src/shade/renderer/rasterize/forward/FORWARD_VERTEX_SHADER_STRUCT.d.ts.map +1 -0
  871. package/src/shade/renderer/rasterize/{native/oit → forward}/FORWARD_VERTEX_SHADER_STRUCT.js +4 -4
  872. package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.d.ts +3 -0
  873. package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.d.ts.map +1 -0
  874. package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.js +17 -0
  875. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_brick4.d.ts +1 -1
  876. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -0
  877. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_brick4.js +16 -16
  878. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_ibl.d.ts +1 -1
  879. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -0
  880. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_ibl.js +17 -17
  881. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_material_side_should_draw.d.ts +1 -1
  882. package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.d.ts.map +1 -0
  883. package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_material_side_should_draw.js +2 -2
  884. package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts +3 -0
  885. package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts.map +1 -0
  886. package/src/shade/renderer/rasterize/{native/oit → forward}/vertex_shader_chunk.js +4 -4
  887. package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts +27 -0
  888. package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts.map +1 -0
  889. package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.js +27 -0
  890. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +87 -0
  891. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -0
  892. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +61 -0
  893. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts +107 -0
  894. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -0
  895. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +120 -0
  896. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +642 -0
  897. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +534 -0
  898. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.d.ts +15 -0
  899. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.d.ts.map +1 -0
  900. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.js +33 -0
  901. package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.d.ts +20 -0
  902. package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.d.ts.map +1 -0
  903. package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.js +38 -0
  904. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts +45 -0
  905. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -0
  906. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +139 -0
  907. package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.d.ts +37 -0
  908. package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.d.ts.map +1 -0
  909. package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.js +73 -0
  910. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts +9 -0
  911. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts.map +1 -0
  912. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.js +17 -0
  913. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.d.ts +11 -0
  914. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.d.ts.map +1 -0
  915. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.js +18 -0
  916. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.d.ts +9 -0
  917. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.d.ts.map +1 -0
  918. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.js +17 -0
  919. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.d.ts +9 -0
  920. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.d.ts.map +1 -0
  921. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.js +17 -0
  922. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.d.ts +15 -0
  923. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.d.ts.map +1 -0
  924. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.js +25 -0
  925. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts +17 -0
  926. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts.map +1 -0
  927. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.js +35 -0
  928. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.d.ts +11 -0
  929. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.d.ts.map +1 -0
  930. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.js +21 -0
  931. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.d.ts +9 -0
  932. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.d.ts.map +1 -0
  933. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.js +26 -0
  934. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.d.ts +11 -0
  935. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.d.ts.map +1 -0
  936. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.js +22 -0
  937. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.d.ts +10 -0
  938. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.d.ts.map +1 -0
  939. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.js +21 -0
  940. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts +10 -0
  941. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts.map +1 -0
  942. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.js +32 -0
  943. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.d.ts +18 -0
  944. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.d.ts.map +1 -0
  945. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.js +58 -0
  946. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.d.ts +20 -0
  947. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.d.ts.map +1 -0
  948. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.js +27 -0
  949. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.d.ts +10 -0
  950. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.d.ts.map +1 -0
  951. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.js +18 -0
  952. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.d.ts +9 -0
  953. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.d.ts.map +1 -0
  954. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.js +21 -0
  955. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.d.ts +9 -0
  956. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.d.ts.map +1 -0
  957. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.js +23 -0
  958. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.d.ts +13 -0
  959. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.d.ts.map +1 -0
  960. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.js +27 -0
  961. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.d.ts +22 -0
  962. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.d.ts.map +1 -0
  963. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.js +38 -0
  964. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +141 -0
  965. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -0
  966. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +994 -0
  967. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts +8 -0
  968. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts.map +1 -0
  969. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.js +135 -0
  970. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts +3 -0
  971. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts.map +1 -0
  972. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.js +101 -0
  973. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts +3 -0
  974. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts.map +1 -0
  975. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.js +96 -0
  976. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.d.ts +3 -0
  977. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.d.ts.map +1 -0
  978. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.js +83 -0
  979. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.d.ts +9 -0
  980. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.d.ts.map +1 -0
  981. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.js +119 -0
  982. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts +3 -0
  983. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts.map +1 -0
  984. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.js +87 -0
  985. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +15 -0
  986. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -0
  987. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +202 -0
  988. package/src/shade/renderer/rasterize/native/material_draw_indirect.d.ts +22 -0
  989. package/src/shade/renderer/rasterize/native/material_draw_indirect.d.ts.map +1 -0
  990. package/src/shade/renderer/rasterize/native/material_draw_indirect.js +69 -0
  991. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
  992. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +665 -722
  993. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +3 -3
  994. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +4 -4
  995. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +4 -4
  996. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts +7 -2
  997. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
  998. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +16 -2
  999. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts +3 -3
  1000. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts.map +1 -1
  1001. package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.js +29 -23
  1002. package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.d.ts +2 -2
  1003. package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.d.ts.map +1 -1
  1004. package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.js +3 -3
  1005. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts +4 -4
  1006. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts.map +1 -1
  1007. package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.js +2 -2
  1008. package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.d.ts +2 -2
  1009. package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.d.ts.map +1 -1
  1010. package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.js +2 -2
  1011. package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.d.ts +7 -7
  1012. package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.d.ts.map +1 -1
  1013. package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.js +79 -71
  1014. package/src/shade/renderer/shader/chunk/math/chunk_lower_bound_branchless.d.ts.map +1 -1
  1015. package/src/shade/renderer/shader/chunk/math/chunk_lower_bound_branchless.js +3 -1
  1016. package/src/shade/renderer/shader/chunk/random/chunk_hash_to_float01.d.ts +13 -3
  1017. package/src/shade/renderer/shader/chunk/random/chunk_hash_to_float01.d.ts.map +1 -1
  1018. package/src/shade/renderer/shader/chunk/random/chunk_hash_to_float01.js +15 -5
  1019. package/src/shade/renderer/shader/chunk/random/chunk_random_uint.d.ts +8 -0
  1020. package/src/shade/renderer/shader/chunk/random/chunk_random_uint.d.ts.map +1 -1
  1021. package/src/shade/renderer/shader/chunk/random/chunk_random_uint.js +15 -5
  1022. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg.d.ts +7 -0
  1023. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg.d.ts.map +1 -1
  1024. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg.js +17 -7
  1025. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_advance.d.ts +17 -0
  1026. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_advance.d.ts.map +1 -0
  1027. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_advance.js +26 -0
  1028. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_output.d.ts +15 -0
  1029. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_output.d.ts.map +1 -0
  1030. package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_output.js +26 -0
  1031. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
  1032. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +8 -2
  1033. package/src/shade/renderer/shadow/map/PointLightShadowmap.d.ts.map +1 -1
  1034. package/src/shade/renderer/shadow/map/PointLightShadowmap.js +7 -2
  1035. package/src/shade/renderer/shadow/map/SpotLightShadowmap.d.ts.map +1 -1
  1036. package/src/shade/renderer/shadow/map/SpotLightShadowmap.js +3 -15
  1037. package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.d.ts.map +1 -1
  1038. package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.js +10 -4
  1039. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +1 -1
  1040. package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +7 -2
  1041. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +2 -2
  1042. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +3 -3
  1043. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
  1044. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +3 -3
  1045. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  1046. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +66 -5
  1047. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  1048. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +35 -4
  1049. package/src/view/minimap/Minimap.d.ts.map +1 -1
  1050. package/src/view/minimap/Minimap.js +227 -225
  1051. package/src/view/minimap/MinimapCanvasView.js +3 -3
  1052. package/src/view/minimap/MinimapMarker.d.ts +45 -0
  1053. package/src/view/minimap/MinimapMarker.d.ts.map +1 -0
  1054. package/src/view/minimap/MinimapMarker.js +80 -0
  1055. package/src/view/minimap/MinimapMarkerCollection.d.ts +6 -5
  1056. package/src/view/minimap/MinimapMarkerCollection.d.ts.map +1 -1
  1057. package/src/view/minimap/MinimapMarkerCollection.js +6 -6
  1058. package/src/view/minimap/MinimapMarkerSerializationAdapter.d.ts +19 -0
  1059. package/src/view/minimap/MinimapMarkerSerializationAdapter.d.ts.map +1 -0
  1060. package/src/view/minimap/MinimapMarkerSerializationAdapter.js +42 -0
  1061. package/src/view/minimap/dom/MinimapCameraView.d.ts +1 -1
  1062. package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
  1063. package/src/view/minimap/dom/MinimapCameraView.js +23 -4
  1064. package/src/view/minimap/dom/MinimapMarkerView.js +3 -3
  1065. package/src/view/minimap/gl/MarkerGL.js +3 -3
  1066. package/src/view/util/DomLayoutFrame.d.ts +53 -0
  1067. package/src/view/util/DomLayoutFrame.d.ts.map +1 -0
  1068. package/src/view/util/DomLayoutFrame.js +122 -0
  1069. package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.js +0 -19
  1070. package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.js +0 -241
  1071. package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.js +0 -40
  1072. package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.js +0 -28
  1073. package/src/engine/ecs/util/hideEntityGracefully.js +0 -196
  1074. package/src/shade/renderer/particles/cull/chunk_particle_cull.js +0 -38
  1075. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.js +0 -214
  1076. package/src/shade/renderer/particles/particle_prototype.d.ts.map +0 -1
  1077. package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.js +0 -86
  1078. package/src/shade/renderer/particles/runtime/spawn_request_encoding.js +0 -52
  1079. package/src/shade/renderer/particles/shaders/chunk_particle_context.js +0 -58
  1080. package/src/shade/renderer/rasterize/native/oit/FORWARD_VERTEX_SHADER_STRUCT.d.ts +0 -3
  1081. package/src/shade/renderer/rasterize/native/oit/FORWARD_VERTEX_SHADER_STRUCT.d.ts.map +0 -1
  1082. package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.d.ts +0 -3
  1083. package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.d.ts.map +0 -1
  1084. package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.js +0 -17
  1085. package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_brick4.d.ts.map +0 -1
  1086. package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_ibl.d.ts.map +0 -1
  1087. package/src/shade/renderer/rasterize/native/oit/chunk_material_side_should_draw.d.ts.map +0 -1
  1088. package/src/shade/renderer/rasterize/native/oit/vertex_shader_chunk.d.ts +0 -3
  1089. package/src/shade/renderer/rasterize/native/oit/vertex_shader_chunk.d.ts.map +0 -1
@@ -1,345 +1,356 @@
1
- import { EventInstanceState } from "../../sopra/runtime/EventInstance.js";
2
- import { SpatialAudioIndex } from "./SpatialAudioIndex.js";
3
-
4
- /**
5
- * Sort rank entries nearest-first by effective (stickiness-discounted) distance.
6
- * @param {{effective:number}} a
7
- * @param {{effective:number}} b
8
- * @returns {number}
9
- */
10
- function compareByEffective(a, b) {
11
- return a.effective - b.effective;
12
- }
13
-
14
- /**
15
- * The live/dormant lifecycle for spatial audio emitters (P5.2). Wraps a {@link SpatialAudioIndex} (the
16
- * BVH broadphase) and, on each {@link refresh}, promotes the nearest in-range emitters — up to a global
17
- * voice budget to live sopra {@link EventInstance}s, demoting the rest. This bounds the live-instance
18
- * count (and therefore WebAudio nodes + the per-frame tick) to the budget, no matter how many emitters
19
- * are registered. A registered-but-dormant emitter costs only its BVH leaf: no instance, no nodes, no
20
- * per-frame work.
21
- *
22
- * "Voice slots" are the budget, allocated at promotion. Stealing is by distance: at budget, a closer
23
- * emitter bumps a farther live one (demoted). A small stickiness keeps the live set stable so emitters
24
- * near the budget cutoff don't flicker promote/demote each frame (rank hysteresis the audible kind;
25
- * range-edge churn at `distanceMax` is inaudible, gain 0 there, and is handled later with chain
26
- * pooling).
27
- *
28
- * Demotion policy: a hard **cut** when an emitter is culled out of range (already inaudible — gain ≈ 0
29
- * past `distanceMax`), a click-safe **fade** when a still-in-range live emitter loses its slot to a
30
- * closer one (contention). Phase reconstruction on promote is P5.4. Intended for persistent (looping)
31
- * emitters; a finite event that self-ends is dropped from the live set via its `onEnded`.
32
- *
33
- * Budget vs per-event polyphony — they are INDEPENDENT, composed caps. `budget` bounds the global live
34
- * count; sopra's {@link VoiceManager} `EventDescription.maxInstances` (keyed by event CONTENT) bounds
35
- * concurrent instances of one content-equal event. If a managed event's `maxInstances` is below the
36
- * number of its content-equal emitters that can be live at once, sopra gates the budget: with
37
- * `stealMode None` a promote is denied (`playEvent` null) and the emitter stays dormant (retried each
38
- * refresh see the test); with `stealMode Oldest` sopra steals between them and the two layers fight
39
- * (churn). So for spatial ambience where you want up to `budget` copies of one sound audible, give that
40
- * event a `maxInstances` that count (this is a content/wiring decision finalised in P5.6).
41
- */
42
- export class LiveEmitterSet {
43
-
44
- /**
45
- * @type {SopraEngine}
46
- */
47
- #sopra;
48
-
49
- /**
50
- * @type {SpatialAudioIndex}
51
- */
52
- #index = new SpatialAudioIndex();
53
-
54
- /**
55
- * @type {number}
56
- */
57
- #budget;
58
-
59
- /**
60
- * Live-emitter distance discount in [0, 1]; a live emitter at distance d competes as `d * stickiness`
61
- * so a newcomer must be more than that much closer to steal its slot.
62
- * @type {number}
63
- */
64
- #stickiness;
65
-
66
- /**
67
- * Fade-out duration (seconds) when a still-in-range live emitter loses its slot to a closer one
68
- * (contention) a hard cut there would click. Demotion by cull (out of range) is an immediate stop.
69
- * @type {number}
70
- */
71
- #fadeOutSeconds;
72
-
73
- /**
74
- * entity -> { event, position, gainDb, playingSince }. `gainDb` is the per-emitter instance gain
75
- * (e.g. the owning `AudioEmitter.volume` in dB) re-applied on every promotion so it survives a
76
- * demote→re-promote cycle; `playingSince` carries the continuous-clock phase (see {@link add}).
77
- * @type {Map<number, {event: EventDescription, position: Vector3, gainDb: number, playingSince: number, acoustic: boolean, pathing: boolean, sourceRadius: number, orientation: Quaternion|null, directivity: AcousticDirectivity|null}>}
78
- */
79
- #emitters = new Map();
80
-
81
- /**
82
- * entity -> the live instance
83
- * @type {Map<number, EventInstance>}
84
- */
85
- #live = new Map();
86
-
87
- /**
88
- * Reused candidate buffer for {@link SpatialAudioIndex.queryAudible} (grows, never shrinks; only
89
- * `[0, count)` is valid each refresh) keeps the cull allocation-free.
90
- * @type {number[]}
91
- */
92
- #candidates = [];
93
-
94
- /**
95
- * Reused refresh scratch (the cull runs every tick, so it must not allocate containers per frame):
96
- * `#ranked` collects `{entity, effective}` for in-range candidates to sort by distance; `#inRange` and
97
- * `#target` are the in-range and nearest-budget sets; `#demoteScratch` snapshots the live entities to
98
- * demote (so `#demote` can mutate `#live` mid-loop). All cleared at the top of each {@link refresh}.
99
- */
100
- #ranked = [];
101
- #inRange = new Set();
102
- #target = new Set();
103
- #demoteScratch = [];
104
-
105
- /**
106
- * @param {SopraEngine} sopra
107
- * @param {{budget?:number, liveStickiness?:number, fadeOutSeconds?:number}} [options]
108
- */
109
- constructor(sopra, { budget = 64, liveStickiness = 0.8, fadeOutSeconds = 0.15 } = {}) {
110
- this.#sopra = sopra;
111
- this.#budget = budget;
112
- this.#stickiness = liveStickiness;
113
- this.#fadeOutSeconds = fadeOutSeconds;
114
- }
115
-
116
- /**
117
- * @returns {number} live (sounding) emitter count
118
- */
119
- get liveCount() {
120
- return this.#live.size;
121
- }
122
-
123
- /**
124
- * @returns {number} registered emitter count
125
- */
126
- get size() {
127
- return this.#emitters.size;
128
- }
129
-
130
- /**
131
- * @param {number} entity
132
- * @returns {boolean}
133
- */
134
- isLive(entity) {
135
- return this.#live.has(entity);
136
- }
137
-
138
- /**
139
- * @param {number} entity
140
- * @returns {EventInstance|undefined} the live instance, or undefined if dormant/unknown
141
- */
142
- instanceOf(entity) {
143
- return this.#live.get(entity);
144
- }
145
-
146
- /**
147
- * Register an emitter (dormant until a refresh promotes it).
148
- * @param {number} entity
149
- * @param {EventDescription} event
150
- * @param {Vector3} position shared position vector (tracked reactively by the spatial index)
151
- * @param {number} [gainDb] per-emitter instance gain in dB, applied on every promotion (default 0 = unity)
152
- * @param {boolean} [acoustic] opt the promoted instances into the acoustic simulation (default false)
153
- * @param {boolean} [pathing] opt the promoted instances into corner-leakage render (default false)
154
- * @param {number} [sourceRadius] apparent acoustic radius for volumetric occlusion (default 0.5)
155
- * @param {Quaternion|null} [orientation] shared source orientation ref (tracks the entity), for directivity
156
- * @param {AcousticDirectivity|null} [directivity] source radiation directivity (null = omni)
157
- */
158
- add(entity, event, position, gainDb = 0, acoustic = false, pathing = false, sourceRadius = 0.5, orientation = null, directivity = null) {
159
- this.#index.add(entity, event, position);
160
- // playingSince: continuous-clock semantics — the emitter has been "playing" since it linked, so a
161
- // later promotion resumes the loop at the phase it should be at (see #promote + EventInstance startTime).
162
- this.#emitters.set(entity, { event, position, gainDb, playingSince: this.#sopra.currentTime, acoustic, pathing, sourceRadius, orientation, directivity });
163
- }
164
-
165
- /**
166
- * Invoke `callback` for each currently-live instance (bounded by the budget). Used by the
167
- * `AudioEmitterSystem` to feed live spatial instances to the acoustic simulation.
168
- * @param {function(EventInstance):void} callback
169
- */
170
- forEachLive(callback) {
171
- for (const instance of this.#live.values()) {
172
- callback(instance);
173
- }
174
- }
175
-
176
- /**
177
- * Set the per-emitter instance gain (dB). Updates the stored value so a future promotion replays it,
178
- * and applies it immediately if the emitter is currently live. A no-op for an unknown entity, and for
179
- * a fading (contention-demoted) instance it is out of the live map, so it finishes its fade
180
- * untouched and the new gain only takes effect on the next promotion.
181
- * @param {number} entity
182
- * @param {number} gainDb
183
- */
184
- setGainDb(entity, gainDb) {
185
- const record = this.#emitters.get(entity);
186
-
187
- if (record === undefined) {
188
- return;
189
- }
190
-
191
- record.gainDb = gainDb;
192
-
193
- const instance = this.#live.get(entity);
194
- if (instance !== undefined) {
195
- instance.setGainDb(gainDb);
196
- }
197
- }
198
-
199
- /**
200
- * Unregister an emitter, demoting it first if live.
201
- * @param {number} entity
202
- */
203
- remove(entity) {
204
- if (this.#live.has(entity)) {
205
- this.#demote(entity, false); // unlink = the entity is gone -> hard cut
206
- }
207
-
208
- this.#index.remove(entity);
209
- this.#emitters.delete(entity);
210
- }
211
-
212
- /**
213
- * Recompute the live set for the current listener position: promote the nearest in-range emitters up
214
- * to the budget, demote the rest. Cheap enough to call every tick — the BVH point-query is
215
- * O(log n + candidates) and the diff is re-derived from {@link #live} each call (no maintained state
216
- * to drift), so there is no reason to throttle it. Allocation-free apart from the per-candidate rank
217
- * entries: the scratch containers are reused across calls.
218
- * @param {Vector3} listenerPosition
219
- */
220
- refresh(listenerPosition) {
221
- const candidates = this.#candidates;
222
- const candidateCount = this.#index.queryAudible(candidates, 0, listenerPosition);
223
-
224
- // rank truly-in-range candidates by effective distance (live emitters get a stickiness discount)
225
- const ranked = this.#ranked;
226
- ranked.length = 0;
227
- const inRange = this.#inRange;
228
- inRange.clear();
229
- for (let i = 0; i < candidateCount; i++) {
230
- const entity = candidates[i];
231
- const record = this.#emitters.get(entity);
232
- const distance = record.position.distanceTo(listenerPosition);
233
-
234
- // queryAudible's leaf is a conservative cube; keep only the true (spherical) in-range set
235
- if (distance > record.event.distanceMax) {
236
- continue;
237
- }
238
-
239
- inRange.add(entity);
240
-
241
- const sticky = this.#live.has(entity) ? this.#stickiness : 1;
242
- ranked.push({ entity, effective: distance * sticky });
243
- }
244
-
245
- ranked.sort(compareByEffective);
246
-
247
- const target = this.#target;
248
- target.clear();
249
- const limit = Math.min(this.#budget, ranked.length);
250
- for (let i = 0; i < limit; i++) {
251
- target.add(ranked[i].entity);
252
- }
253
-
254
- // demote live emitters not in the target (snapshot first — #demote mutates #live). A demoted
255
- // emitter still in range lost its slot to a closer one (contention) -> fade; one that left range
256
- // is already inaudible -> hard cut.
257
- const demote = this.#demoteScratch;
258
- demote.length = 0;
259
- for (const entity of this.#live.keys()) {
260
- if (!target.has(entity)) {
261
- demote.push(entity);
262
- }
263
- }
264
- for (let i = 0; i < demote.length; i++) {
265
- const entity = demote[i];
266
- this.#demote(entity, inRange.has(entity));
267
- }
268
-
269
- // promote target emitters not yet live (re-derived from #live, so a denied/self-ended promotion
270
- // is retried next refresh automatically)
271
- for (const entity of target) {
272
- if (!this.#live.has(entity)) {
273
- this.#promote(entity);
274
- }
275
- }
276
- }
277
-
278
- /**
279
- * @param {number} entity
280
- */
281
- #promote(entity) {
282
- const record = this.#emitters.get(entity);
283
- const event = record.event;
284
-
285
- // a looping event is persistent; a finite one self-releases when it finishes
286
- const oneShot = !event.rootClip.loops();
287
-
288
- // startTime resumes the loop at the phase it should be at given real elapsed time (continuous clock)
289
- const instance = this.#sopra.playEvent(event, {
290
- busId: event.busId,
291
- position: record.position,
292
- oneShot,
293
- startTime: record.playingSince,
294
- acoustic: record.acoustic,
295
- pathing: record.pathing,
296
- sourceRadius: record.sourceRadius,
297
- orientation: record.orientation,
298
- directivity: record.directivity
299
- });
300
-
301
- if (instance === null) {
302
- // denied by the per-event voice limit (stealMode None) — stay dormant, retry next refresh
303
- return;
304
- }
305
-
306
- if (instance.state === EventInstanceState.Stopped) {
307
- // a finite event whose play time already elapsed under the continuous clock self-stopped
308
- // during start (playhead past its end) — nothing to track. (Loops never hit this.)
309
- return;
310
- }
311
-
312
- this.#live.set(entity, instance);
313
-
314
- // replay the emitter's gain onto the fresh instance (it starts at the event's nominal gain)
315
- instance.setGainDb(record.gainDb);
316
-
317
- // if the instance ends on its own (finite content / asset-load failure), drop the stale entry
318
- instance.onEnded.add(() => {
319
- if (this.#live.get(entity) === instance) {
320
- this.#live.delete(entity);
321
- }
322
- });
323
- }
324
-
325
- /**
326
- * @param {number} entity
327
- * @param {boolean} fade fade out (contention — still audible) vs hard stop (culled out of range)
328
- */
329
- #demote(entity, fade) {
330
- const instance = this.#live.get(entity);
331
-
332
- // delete BEFORE stopping: stop() fires onEnded synchronously and that handler keys off whether
333
- // this entity still maps to this instance, so removing it first makes the handler a no-op. (A
334
- // faded instance keeps playing until its audio-clock deadline; it is already out of #live, so it
335
- // no longer occupies a budget slot, and if the same entity is re-promoted meanwhile the new
336
- // instance is a different object — the old fade's onEnded still no-ops.)
337
- this.#live.delete(entity);
338
-
339
- if (fade) {
340
- instance.fadeOutAndStop(this.#fadeOutSeconds);
341
- } else {
342
- instance.stop();
343
- }
344
- }
345
- }
1
+ import { EventInstanceState } from "../../sopra/runtime/EventInstance.js";
2
+ import { SpatialAudioIndex } from "./SpatialAudioIndex.js";
3
+ import { v3_distance } from "../../../../core/geom/vec3/v3_distance.js";
4
+
5
+ /**
6
+ * Sort rank entries nearest-first by effective (stickiness-discounted) distance.
7
+ * @param {{effective:number}} a
8
+ * @param {{effective:number}} b
9
+ * @returns {number}
10
+ */
11
+ function compareByEffective(a, b) {
12
+ return a.effective - b.effective;
13
+ }
14
+
15
+ /**
16
+ * The live/dormant lifecycle for spatial audio emitters (P5.2). Wraps a {@link SpatialAudioIndex} (the
17
+ * BVH broadphase) and, on each {@link refresh}, promotes the nearest in-range emitters up to a global
18
+ * voice budget to live sopra {@link EventInstance}s, demoting the rest. This bounds the live-instance
19
+ * count (and therefore WebAudio nodes + the per-frame tick) to the budget, no matter how many emitters
20
+ * are registered. A registered-but-dormant emitter costs only its BVH leaf: no instance, no nodes, no
21
+ * per-frame work.
22
+ *
23
+ * "Voice slots" are the budget, allocated at promotion. Stealing is by distance: at budget, a closer
24
+ * emitter bumps a farther live one (demoted). A small stickiness keeps the live set stable so emitters
25
+ * near the budget cutoff don't flicker promote/demote each frame (rank hysteresis the audible kind;
26
+ * range-edge churn at `distanceMax` is inaudible, gain ≈ 0 there, and is handled later with chain
27
+ * pooling).
28
+ *
29
+ * Demotion policy: a hard **cut** when an emitter is culled out of range (already inaudible gain 0
30
+ * past `distanceMax`), a click-safe **fade** when a still-in-range live emitter loses its slot to a
31
+ * closer one (contention). Phase reconstruction on promote is P5.4. Intended for persistent (looping)
32
+ * emitters; a finite event that self-ends is dropped from the live set via its `onEnded`.
33
+ *
34
+ * Budget vs per-event polyphony — they are INDEPENDENT, composed caps. `budget` bounds the global live
35
+ * count; sopra's {@link VoiceManager} `EventDescription.maxInstances` (keyed by event CONTENT) bounds
36
+ * concurrent instances of one content-equal event. If a managed event's `maxInstances` is below the
37
+ * number of its content-equal emitters that can be live at once, sopra gates the budget: with
38
+ * `stealMode None` a promote is denied (`playEvent` null) and the emitter stays dormant (retried each
39
+ * refresh see the test); with `stealMode Oldest` sopra steals between them and the two layers fight
40
+ * (churn). So for spatial ambience where you want up to `budget` copies of one sound audible, give that
41
+ * event a `maxInstances` ≥ that count (this is a content/wiring decision finalised in P5.6).
42
+ */
43
+ export class LiveEmitterSet {
44
+
45
+ /**
46
+ * @type {SopraEngine}
47
+ */
48
+ #sopra;
49
+
50
+ /**
51
+ * @type {SpatialAudioIndex}
52
+ */
53
+ #index = new SpatialAudioIndex();
54
+
55
+ /**
56
+ * @type {number}
57
+ */
58
+ #budget;
59
+
60
+ /**
61
+ * Live-emitter distance discount in [0, 1]; a live emitter at distance d competes as `d * stickiness`
62
+ * so a newcomer must be more than that much closer to steal its slot.
63
+ * @type {number}
64
+ */
65
+ #stickiness;
66
+
67
+ /**
68
+ * Fade-out duration (seconds) when a still-in-range live emitter loses its slot to a closer one
69
+ * (contention) — a hard cut there would click. Demotion by cull (out of range) is an immediate stop.
70
+ * @type {number}
71
+ */
72
+ #fadeOutSeconds;
73
+
74
+ /**
75
+ * entity -> { event, position, gainDb, playingSince }. `gainDb` is the per-emitter instance gain
76
+ * (e.g. the owning `AudioEmitter.volume` in dB) re-applied on every promotion so it survives a
77
+ * demote→re-promote cycle; `playingSince` carries the continuous-clock phase (see {@link add}).
78
+ * @type {Map<number, {event: EventDescription, position: Vector3, gainDb: number, playingSince: number, acoustic: boolean, pathing: boolean, sourceRadius: number, orientation: Quaternion|null, directivity: AcousticDirectivity|null}>}
79
+ */
80
+ #emitters = new Map();
81
+
82
+ /**
83
+ * entity -> the live instance
84
+ * @type {Map<number, EventInstance>}
85
+ */
86
+ #live = new Map();
87
+
88
+ /**
89
+ * Reused candidate buffer for {@link SpatialAudioIndex.queryAudible} (grows, never shrinks; only
90
+ * `[0, count)` is valid each refresh) — keeps the cull allocation-free.
91
+ * @type {number[]}
92
+ */
93
+ #candidates = [];
94
+
95
+ /**
96
+ * Reused refresh scratch (the cull runs every tick, so it must not allocate containers per frame):
97
+ * `#ranked` collects `{entity, effective}` for in-range candidates to sort by distance; `#inRange` and
98
+ * `#target` are the in-range and nearest-budget sets; `#demoteScratch` snapshots the live entities to
99
+ * demote (so `#demote` can mutate `#live` mid-loop). All cleared at the top of each {@link refresh}.
100
+ */
101
+ #ranked = [];
102
+ #inRange = new Set();
103
+ #target = new Set();
104
+ #demoteScratch = [];
105
+
106
+ /**
107
+ * @param {SopraEngine} sopra
108
+ * @param {{budget?:number, liveStickiness?:number, fadeOutSeconds?:number}} [options]
109
+ */
110
+ constructor(sopra, { budget = 64, liveStickiness = 0.8, fadeOutSeconds = 0.15 } = {}) {
111
+ this.#sopra = sopra;
112
+ this.#budget = budget;
113
+ this.#stickiness = liveStickiness;
114
+ this.#fadeOutSeconds = fadeOutSeconds;
115
+ }
116
+
117
+ /**
118
+ * @returns {number} live (sounding) emitter count
119
+ */
120
+ get liveCount() {
121
+ return this.#live.size;
122
+ }
123
+
124
+ /**
125
+ * @returns {number} registered emitter count
126
+ */
127
+ get size() {
128
+ return this.#emitters.size;
129
+ }
130
+
131
+ /**
132
+ * @param {number} entity
133
+ * @returns {boolean}
134
+ */
135
+ isLive(entity) {
136
+ return this.#live.has(entity);
137
+ }
138
+
139
+ /**
140
+ * @param {number} entity
141
+ * @returns {EventInstance|undefined} the live instance, or undefined if dormant/unknown
142
+ */
143
+ instanceOf(entity) {
144
+ return this.#live.get(entity);
145
+ }
146
+
147
+ /**
148
+ * Register an emitter (dormant until a refresh promotes it).
149
+ * @param {number} entity
150
+ * @param {EventDescription} event
151
+ * @param {Vector3} position shared position vector (tracked reactively by the spatial index)
152
+ * @param {number} [gainDb] per-emitter instance gain in dB, applied on every promotion (default 0 = unity)
153
+ * @param {boolean} [acoustic] opt the promoted instances into the acoustic simulation (default false)
154
+ * @param {boolean} [pathing] opt the promoted instances into corner-leakage render (default false)
155
+ * @param {number} [sourceRadius] apparent acoustic radius for volumetric occlusion (default 0.5)
156
+ * @param {Quaternion|null} [orientation] shared source orientation ref (tracks the entity), for directivity
157
+ * @param {AcousticDirectivity|null} [directivity] source radiation directivity (null = omni)
158
+ */
159
+ add(entity, event, position, gainDb = 0, acoustic = false, pathing = false, sourceRadius = 0.5, orientation = null, directivity = null) {
160
+ this.#index.add(entity, event, position);
161
+ // playingSince: continuous-clock semantics the emitter has been "playing" since it linked, so a
162
+ // later promotion resumes the loop at the phase it should be at (see #promote + EventInstance startTime).
163
+ this.#emitters.set(entity, { event, position, gainDb, playingSince: this.#sopra.currentTime, acoustic, pathing, sourceRadius, orientation, directivity });
164
+ }
165
+
166
+ /**
167
+ * Invoke `callback` for each currently-live instance (bounded by the budget). Used by the
168
+ * `AudioEmitterSystem` to feed live spatial instances to the acoustic simulation.
169
+ * @param {function(EventInstance):void} callback
170
+ */
171
+ forEachLive(callback) {
172
+ for (const instance of this.#live.values()) {
173
+ callback(instance);
174
+ }
175
+ }
176
+
177
+ /**
178
+ * Set the per-emitter instance gain (dB). Updates the stored value so a future promotion replays it,
179
+ * and applies it immediately if the emitter is currently live. A no-op for an unknown entity, and for
180
+ * a fading (contention-demoted) instance it is out of the live map, so it finishes its fade
181
+ * untouched and the new gain only takes effect on the next promotion.
182
+ * @param {number} entity
183
+ * @param {number} gainDb
184
+ */
185
+ setGainDb(entity, gainDb) {
186
+ const record = this.#emitters.get(entity);
187
+
188
+ if (record === undefined) {
189
+ return;
190
+ }
191
+
192
+ record.gainDb = gainDb;
193
+
194
+ const instance = this.#live.get(entity);
195
+ if (instance !== undefined) {
196
+ instance.setGainDb(gainDb);
197
+ }
198
+ }
199
+
200
+ /**
201
+ * Unregister an emitter, demoting it first if live.
202
+ * @param {number} entity
203
+ */
204
+ remove(entity) {
205
+ if (this.#live.has(entity)) {
206
+ this.#demote(entity, false); // unlink = the entity is gone -> hard cut
207
+ }
208
+
209
+ this.#index.remove(entity);
210
+ this.#emitters.delete(entity);
211
+ }
212
+
213
+ /**
214
+ * Recompute the live set for the current listener position: promote the nearest in-range emitters up
215
+ * to the budget, demote the rest. Cheap enough to call every tick the BVH point-query is
216
+ * O(log n + candidates) and the diff is re-derived from {@link #live} each call (no maintained state
217
+ * to drift), so there is no reason to throttle it. Allocation-free apart from the per-candidate rank
218
+ * entries: the scratch containers are reused across calls.
219
+ * @param {number[]|Float64Array} listenerPosition reads 3 elements
220
+ */
221
+ refresh(listenerPosition) {
222
+ // The translations are live views over the entities' transforms, so the positions are
223
+ // already current - only the BVH leaves are stale, and a transform has no signal to refit
224
+ // them on. One pass here costs what the per-move refits cost before.
225
+ this.#index.refresh_all();
226
+
227
+ const candidates = this.#candidates;
228
+ const candidateCount = this.#index.queryAudible(candidates, 0, listenerPosition);
229
+
230
+ // rank truly-in-range candidates by effective distance (live emitters get a stickiness discount)
231
+ const ranked = this.#ranked;
232
+ ranked.length = 0;
233
+ const inRange = this.#inRange;
234
+ inRange.clear();
235
+ for (let i = 0; i < candidateCount; i++) {
236
+ const entity = candidates[i];
237
+ const record = this.#emitters.get(entity);
238
+ // both are Float64Array-addressed: the record holds a live translation view and the
239
+ // listener pose comes from a transform as well
240
+ const distance = v3_distance(
241
+ record.position[0], record.position[1], record.position[2],
242
+ listenerPosition[0], listenerPosition[1], listenerPosition[2]
243
+ );
244
+
245
+ // queryAudible's leaf is a conservative cube; keep only the true (spherical) in-range set
246
+ if (distance > record.event.distanceMax) {
247
+ continue;
248
+ }
249
+
250
+ inRange.add(entity);
251
+
252
+ const sticky = this.#live.has(entity) ? this.#stickiness : 1;
253
+ ranked.push({ entity, effective: distance * sticky });
254
+ }
255
+
256
+ ranked.sort(compareByEffective);
257
+
258
+ const target = this.#target;
259
+ target.clear();
260
+ const limit = Math.min(this.#budget, ranked.length);
261
+ for (let i = 0; i < limit; i++) {
262
+ target.add(ranked[i].entity);
263
+ }
264
+
265
+ // demote live emitters not in the target (snapshot first — #demote mutates #live). A demoted
266
+ // emitter still in range lost its slot to a closer one (contention) -> fade; one that left range
267
+ // is already inaudible -> hard cut.
268
+ const demote = this.#demoteScratch;
269
+ demote.length = 0;
270
+ for (const entity of this.#live.keys()) {
271
+ if (!target.has(entity)) {
272
+ demote.push(entity);
273
+ }
274
+ }
275
+ for (let i = 0; i < demote.length; i++) {
276
+ const entity = demote[i];
277
+ this.#demote(entity, inRange.has(entity));
278
+ }
279
+
280
+ // promote target emitters not yet live (re-derived from #live, so a denied/self-ended promotion
281
+ // is retried next refresh automatically)
282
+ for (const entity of target) {
283
+ if (!this.#live.has(entity)) {
284
+ this.#promote(entity);
285
+ }
286
+ }
287
+ }
288
+
289
+ /**
290
+ * @param {number} entity
291
+ */
292
+ #promote(entity) {
293
+ const record = this.#emitters.get(entity);
294
+ const event = record.event;
295
+
296
+ // a looping event is persistent; a finite one self-releases when it finishes
297
+ const oneShot = !event.rootClip.loops();
298
+
299
+ // startTime resumes the loop at the phase it should be at given real elapsed time (continuous clock)
300
+ const instance = this.#sopra.playEvent(event, {
301
+ busId: event.busId,
302
+ position: record.position,
303
+ oneShot,
304
+ startTime: record.playingSince,
305
+ acoustic: record.acoustic,
306
+ pathing: record.pathing,
307
+ sourceRadius: record.sourceRadius,
308
+ orientation: record.orientation,
309
+ directivity: record.directivity
310
+ });
311
+
312
+ if (instance === null) {
313
+ // denied by the per-event voice limit (stealMode None) — stay dormant, retry next refresh
314
+ return;
315
+ }
316
+
317
+ if (instance.state === EventInstanceState.Stopped) {
318
+ // a finite event whose play time already elapsed under the continuous clock self-stopped
319
+ // during start (playhead past its end) — nothing to track. (Loops never hit this.)
320
+ return;
321
+ }
322
+
323
+ this.#live.set(entity, instance);
324
+
325
+ // replay the emitter's gain onto the fresh instance (it starts at the event's nominal gain)
326
+ instance.setGainDb(record.gainDb);
327
+
328
+ // if the instance ends on its own (finite content / asset-load failure), drop the stale entry
329
+ instance.onEnded.add(() => {
330
+ if (this.#live.get(entity) === instance) {
331
+ this.#live.delete(entity);
332
+ }
333
+ });
334
+ }
335
+
336
+ /**
337
+ * @param {number} entity
338
+ * @param {boolean} fade fade out (contention — still audible) vs hard stop (culled out of range)
339
+ */
340
+ #demote(entity, fade) {
341
+ const instance = this.#live.get(entity);
342
+
343
+ // delete BEFORE stopping: stop() fires onEnded synchronously and that handler keys off whether
344
+ // this entity still maps to this instance, so removing it first makes the handler a no-op. (A
345
+ // faded instance keeps playing until its audio-clock deadline; it is already out of #live, so it
346
+ // no longer occupies a budget slot, and if the same entity is re-promoted meanwhile the new
347
+ // instance is a different object — the old fade's onEnded still no-ops.)
348
+ this.#live.delete(entity);
349
+
350
+ if (fade) {
351
+ instance.fadeOutAndStop(this.#fadeOutSeconds);
352
+ } else {
353
+ instance.stop();
354
+ }
355
+ }
356
+ }