@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.
- package/editor/Editor.js +7 -7
- package/editor/actions/concrete/TransformModifyAction.d.ts +4 -4
- package/editor/actions/concrete/TransformModifyAction.d.ts.map +1 -1
- package/editor/actions/concrete/TransformModifyAction.js +4 -4
- package/editor/camera/camera_framing.js +7 -7
- package/editor/ecs/component/editors/ecs/Transform64Editor.d.ts +20 -0
- package/editor/ecs/component/editors/ecs/Transform64Editor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/Transform64Editor.js +70 -0
- package/editor/ecs/component/prototypeObjectEditor.js +2 -2
- package/editor/ecs/component/registerEngineComponentEditors.js +3 -3
- package/editor/particles/effect/ParticleEffectDocument.d.ts +396 -0
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -0
- package/editor/particles/effect/ParticleEffectDocument.js +989 -0
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts +113 -0
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -0
- package/editor/particles/effect/ParticleReferenceSimulation.js +377 -0
- package/editor/particles/effect/actions/ParticleGroupDefineAction.d.ts +35 -0
- package/editor/particles/effect/actions/ParticleGroupDefineAction.d.ts.map +1 -0
- package/editor/particles/effect/actions/ParticleGroupDefineAction.js +45 -0
- package/editor/particles/effect/make_starter_particle_effect.d.ts +23 -0
- package/editor/particles/effect/make_starter_particle_effect.d.ts.map +1 -0
- package/editor/particles/effect/make_starter_particle_effect.js +177 -0
- package/editor/persistence/buildNewSceneDataset.d.ts.map +1 -1
- package/editor/persistence/buildNewSceneDataset.js +10 -8
- package/editor/process/symbolic/AudioEmitterSymbolicDisplay.js +67 -67
- package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
- package/editor/process/symbolic/GridPositionSymbolicDisplay.js +6 -6
- package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
- package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts.map +1 -1
- package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.js +6 -3
- package/editor/process/symbolic/PositionedMarkerSymbolicDisplay.js +6 -6
- package/editor/selection/editor_pick.js +130 -130
- package/editor/templates/entity_templates.js +7 -7
- package/editor/tools/TransformToolV2.d.ts +3 -3
- package/editor/tools/TransformToolV2.d.ts.map +1 -1
- package/editor/tools/TransformToolV2.js +58 -25
- package/editor/tools/paint/TerrainHeightPaintTool.d.ts.map +1 -1
- package/editor/tools/paint/TerrainHeightPaintTool.js +11 -9
- package/editor/tools/v2/GizmoNode.js +2 -2
- package/editor/tools/v2/TransformControls.d.ts +3 -3
- package/editor/tools/v2/TransformControls.d.ts.map +1 -1
- package/editor/tools/v2/TransformControls.js +1003 -971
- package/editor/tools/v2/handle/gizmo_drag_plane.d.ts.map +1 -1
- package/editor/tools/v2/handle/gizmo_drag_plane.js +6 -1
- package/editor/view/ecs/components/common/AutoCanvasView.js +17 -0
- package/editor/view/node-graph/NodeGraphEditorView.d.ts +143 -2
- package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphEditorView.js +358 -6
- package/editor/view/node-graph/NodeGraphMinimapView.d.ts +120 -0
- package/editor/view/node-graph/NodeGraphMinimapView.d.ts.map +1 -0
- package/editor/view/node-graph/NodeGraphMinimapView.js +859 -0
- package/editor/view/node-graph/NodeGraphPaletteView.d.ts +112 -0
- package/editor/view/node-graph/NodeGraphPaletteView.d.ts.map +1 -0
- package/editor/view/node-graph/NodeGraphPaletteView.js +352 -0
- package/editor/view/node-graph/NodeGraphSearchMenuView.d.ts +76 -0
- package/editor/view/node-graph/NodeGraphSearchMenuView.d.ts.map +1 -0
- package/editor/view/node-graph/NodeGraphSearchMenuView.js +247 -0
- package/editor/view/node-graph/NodeGraphView.d.ts +147 -5
- package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphView.js +809 -76
- package/editor/view/node-graph/NodeIconView.d.ts +33 -0
- package/editor/view/node-graph/NodeIconView.d.ts.map +1 -0
- package/editor/view/node-graph/NodeIconView.js +54 -0
- package/editor/view/node-graph/NodeView.d.ts +71 -1
- package/editor/view/node-graph/NodeView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeView.js +318 -17
- package/editor/view/node-graph/PortView.d.ts +41 -1
- package/editor/view/node-graph/PortView.d.ts.map +1 -1
- package/editor/view/node-graph/PortView.js +121 -69
- package/editor/view/node-graph/actions/ConnectionDeleteAction.d.ts +16 -3
- package/editor/view/node-graph/actions/ConnectionDeleteAction.d.ts.map +1 -1
- package/editor/view/node-graph/actions/ConnectionDeleteAction.js +29 -3
- package/editor/view/node-graph/actions/NodeCreateAction.d.ts +65 -0
- package/editor/view/node-graph/actions/NodeCreateAction.d.ts.map +1 -0
- package/editor/view/node-graph/actions/NodeCreateAction.js +108 -0
- package/editor/view/node-graph/actions/NodeDeleteAction.d.ts +6 -0
- package/editor/view/node-graph/actions/NodeDeleteAction.d.ts.map +1 -1
- package/editor/view/node-graph/actions/NodeDeleteAction.js +24 -2
- package/editor/view/node-graph/connection_wire_geometry.d.ts +34 -0
- package/editor/view/node-graph/connection_wire_geometry.d.ts.map +1 -1
- package/editor/view/node-graph/connection_wire_geometry.js +79 -3
- package/editor/view/node-graph/node-graph.css +678 -0
- package/editor/view/particles/effect/ParticleCodeEditorView.d.ts +37 -0
- package/editor/view/particles/effect/ParticleCodeEditorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleCodeEditorView.js +479 -0
- package/editor/view/particles/effect/ParticleEffectEditorView.d.ts +61 -0
- package/editor/view/particles/effect/ParticleEffectEditorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleEffectEditorView.js +223 -0
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts +25 -0
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleEmitterInspectorView.js +606 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts +156 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.js +1636 -0
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts +22 -0
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleNodeParametersView.js +520 -0
- package/editor/view/particles/effect/ParticlePreviewView.d.ts +52 -0
- package/editor/view/particles/effect/ParticlePreviewView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticlePreviewView.js +533 -0
- package/editor/view/particles/effect/particle-editor.css +556 -0
- package/editor/view/prepareMeshLibrary.d.ts.map +1 -1
- package/editor/view/prepareMeshLibrary.js +8 -4
- package/package.json +1 -1
- package/samples/engine/first-scene/main.js +152 -152
- package/samples/generation/generators/mir_generator_place_bases.js +3 -3
- package/src/core/assert.d.ts +28 -24
- package/src/core/assert.d.ts.map +1 -1
- package/src/core/assert.js +34 -26
- package/src/core/geom/3d/shape/PosedShape3D.d.ts +17 -0
- package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/PosedShape3D.js +34 -2
- package/src/core/graph/format/graphviz/graphviz_escape_html_label.d.ts +17 -0
- package/src/core/graph/format/graphviz/graphviz_escape_html_label.d.ts.map +1 -0
- package/src/core/graph/format/graphviz/graphviz_escape_html_label.js +25 -0
- package/src/core/graph/format/graphviz/graphviz_escape_quoted.d.ts +16 -0
- package/src/core/graph/format/graphviz/graphviz_escape_quoted.d.ts.map +1 -0
- package/src/core/graph/format/graphviz/graphviz_escape_quoted.js +24 -0
- package/src/core/model/node-graph/NodeGraph.d.ts +12 -0
- package/src/core/model/node-graph/NodeGraph.d.ts.map +1 -1
- package/src/core/model/node-graph/NodeGraph.js +21 -6
- package/src/core/model/node-graph/node/NodeDescription.d.ts +36 -0
- package/src/core/model/node-graph/node/NodeDescription.d.ts.map +1 -1
- package/src/core/model/node-graph/node/NodeDescription.js +41 -0
- package/src/core/model/node-graph/visual/ConnectionVisualData.d.ts +119 -0
- package/src/core/model/node-graph/visual/ConnectionVisualData.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/ConnectionVisualData.js +317 -0
- package/src/core/model/node-graph/visual/NodeDescriptionVisualRegistry.d.ts +4 -0
- package/src/core/model/node-graph/visual/NodeDescriptionVisualRegistry.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/NodeDescriptionVisualRegistry.js +125 -22
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts +91 -2
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/NodeGraphVisualData.js +164 -113
- package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.d.ts +162 -0
- package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.js +288 -0
- package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts +109 -0
- package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/LayoutProblem.js +141 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +149 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js +175 -0
- package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts +137 -0
- package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/RouteGrid.js +242 -0
- package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts +114 -0
- package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/RouteSearch.js +300 -0
- package/src/core/model/node-graph/visual/layout/RouteSet.d.ts +86 -0
- package/src/core/model/node-graph/visual/layout/RouteSet.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/RouteSet.js +168 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.d.ts +48 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.js +555 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_layers.d.ts +34 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_layers.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_layers.js +202 -0
- package/src/core/model/node-graph/visual/layout/layout_break_cycles.d.ts +34 -0
- package/src/core/model/node-graph/visual/layout/layout_break_cycles.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_break_cycles.js +254 -0
- package/src/core/model/node-graph/visual/layout/layout_build_problem.d.ts +29 -0
- package/src/core/model/node-graph/visual/layout/layout_build_problem.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_build_problem.js +184 -0
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts +29 -0
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.js +95 -0
- package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts +56 -0
- package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_node_graph.js +131 -0
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts +36 -0
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_order_layers.js +415 -0
- package/src/core/model/node-graph/visual/layout/layout_orient_links.d.ts +21 -0
- package/src/core/model/node-graph/visual/layout/layout_orient_links.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_orient_links.js +49 -0
- package/src/core/model/node-graph/visual/layout/route_connections.d.ts +41 -0
- package/src/core/model/node-graph/visual/layout/route_connections.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/route_connections.js +309 -0
- package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts +33 -0
- package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/route_grid_build.js +237 -0
- package/src/core/model/node-graph/visual/layout/route_nudge.d.ts +25 -0
- package/src/core/model/node-graph/visual/layout/route_nudge.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/route_nudge.js +220 -0
- package/src/core/model/node-graph/visual/layout/route_to_spline.d.ts +29 -0
- package/src/core/model/node-graph/visual/layout/route_to_spline.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/route_to_spline.js +120 -0
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +593 -586
- package/src/engine/EntityCreator.js +116 -116
- package/src/engine/achievements/AchievementManager.js +437 -437
- package/src/engine/animation/AnimatedActions.js +111 -111
- package/src/engine/animation/AnimationUtils.d.ts.map +1 -1
- package/src/engine/animation/AnimationUtils.js +246 -234
- package/src/engine/animation/Animations.d.ts +1 -0
- package/src/engine/animation/Animations.d.ts.map +1 -1
- package/src/engine/animation/Animations.js +13 -5
- package/src/engine/animation/clip/bind_property_writer.d.ts.map +1 -1
- package/src/engine/animation/clip/bind_property_writer.js +12 -5
- package/src/engine/animation/curve/binding/BoundTransform64Writer.d.ts +29 -0
- package/src/engine/animation/curve/binding/BoundTransform64Writer.d.ts.map +1 -0
- package/src/engine/animation/curve/binding/BoundTransform64Writer.js +80 -0
- package/src/engine/animation/removeEntityWithMeshParticlesEffect.js +4 -4
- package/src/engine/asset/loaders/gltf_test_fixtures.d.ts.map +1 -1
- package/src/engine/asset/loaders/gltf_test_fixtures.js +5 -4
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +12 -12
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +77 -44
- package/src/engine/control/first-person/abilities/LedgeGrab.js +1 -1
- package/src/engine/control/first-person/abilities/Mantle.js +1 -1
- package/src/engine/control/first-person/abilities/Slide.js +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.d.ts +5 -9
- package/src/engine/control/first-person/collision/KinematicMover.d.ts.map +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.js +59 -29
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +2 -2
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +7 -7
- package/src/engine/ecs/EventType.d.ts +1 -0
- package/src/engine/ecs/EventType.js +35 -10
- package/src/engine/ecs/dynamic_actions/actions/definition/SendRequestActionDescription.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/actions/definition/SendRequestActionDescription.js +12 -4
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts +4 -4
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts.map +1 -1
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.js +10 -11
- package/src/engine/ecs/grid/pick.js +1 -1
- package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.d.ts +1 -1
- package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +13 -13
- package/src/engine/ecs/gui/hud/testHudEdgeStick.js +3 -3
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts +10 -10
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +1 -1
- package/src/engine/ecs/ik/InverseKinematicsSystem.js +8 -8
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts.map +1 -1
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +120 -97
- package/src/engine/ecs/ik/ik_bone_chain.d.ts +16 -5
- package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +1 -1
- package/src/engine/ecs/ik/ik_bone_chain.js +16 -4
- package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts +7 -3
- package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts.map +1 -1
- package/src/engine/ecs/ik/ik_probe_terrain_contact.js +20 -16
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +18 -0
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -0
- package/src/engine/ecs/ik/ik_write_local_rotation.js +30 -0
- package/src/engine/ecs/parent/EntityNode.d.ts +24 -6
- package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
- package/src/engine/ecs/parent/EntityNode.js +54 -42
- package/src/engine/ecs/parent/EntityNodeFlags.d.ts +0 -1
- package/src/engine/ecs/parent/EntityNodeFlags.js +7 -8
- package/src/engine/ecs/speaker/VoiceSystem.d.ts +2 -2
- package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
- package/src/engine/ecs/speaker/VoiceSystem.js +4 -4
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +2 -0
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts +5 -2
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/Terrain.js +7 -4
- package/src/engine/ecs/terrain/ecs/TerrainSystem.js +3 -3
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts +7 -7
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +84 -36
- package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +513 -0
- package/src/engine/ecs/transform/Transform64.d.ts +48 -11
- package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform64.js +54 -15
- package/src/engine/ecs/transform/Transform64SerializationAdapter.d.ts +37 -0
- package/src/engine/ecs/transform/Transform64SerializationAdapter.d.ts.map +1 -0
- package/src/engine/ecs/transform/Transform64SerializationAdapter.js +75 -0
- package/src/engine/ecs/transform/__probe.d.ts +4 -0
- package/src/engine/ecs/transform/__probe.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_allocation_probe.d.ts +31 -0
- package/src/engine/ecs/transform/t64_allocation_probe.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_allocation_probe.js +78 -0
- package/src/engine/ecs/transform/t64_announce_change.d.ts +33 -0
- package/src/engine/ecs/transform/t64_announce_change.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_announce_change.js +39 -0
- package/src/engine/ecs/transform/t64_equals_components.d.ts +30 -0
- package/src/engine/ecs/transform/t64_equals_components.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_equals_components.js +59 -0
- package/src/engine/ecs/transform/t64_read_rotation.d.ts +13 -0
- package/src/engine/ecs/transform/t64_read_rotation.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_read_rotation.js +16 -0
- package/src/engine/ecs/transform/t64_read_translation.d.ts +14 -0
- package/src/engine/ecs/transform/t64_read_translation.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_read_translation.js +17 -0
- package/src/engine/ecs/transform-attachment/TransformAttachment.d.ts +5 -5
- package/src/engine/ecs/transform-attachment/TransformAttachment.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachment.js +4 -4
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts +10 -10
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +71 -20
- package/src/engine/graphics/debug/createDebugLabel.js +3 -3
- package/src/engine/graphics/ecs/camera/pp/PerfectPanner.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/pp/PerfectPanner.js +5 -4
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +8 -3
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts +6 -6
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +25 -13
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraLanderSystem.js +1 -1
- package/src/engine/graphics/ecs/mesh/setMesh.js +2 -2
- package/src/engine/graphics/ecs/path/entity/EntityPath.d.ts.map +1 -1
- package/src/engine/graphics/ecs/path/entity/EntityPath.js +21 -7
- package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.d.ts +4 -4
- package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.d.ts.map +1 -1
- package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.js +4 -4
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts +2 -2
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +145 -135
- package/src/engine/graphics/geometry/MikkT/Build4RuleGroups.js +2 -2
- package/src/engine/graphics/geometry/MikkT/DegenEpilogue.js +1 -1
- package/src/engine/graphics/geometry/MikkT/DegenPrologue.js +1 -1
- package/src/engine/graphics/geometry/MikkT/EvalTspace.js +1 -1
- package/src/engine/graphics/geometry/MikkT/GenerateTSpaces.js +3 -3
- package/src/engine/graphics/render/frame_graph/CORRECTNESS_FIXES_2026_09_04.md +659 -0
- package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +21 -5
- package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts +45 -0
- package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FrameGraph.js +282 -60
- package/src/engine/graphics/render/frame_graph/FramePassBuilder.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FramePassBuilder.js +20 -9
- package/src/engine/graphics/render/frame_graph/FramePassNode.d.ts +12 -0
- package/src/engine/graphics/render/frame_graph/FramePassNode.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FramePassNode.js +13 -0
- package/src/engine/graphics/render/frame_graph/FramePassResources.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FramePassResources.js +5 -0
- package/src/engine/graphics/render/frame_graph/ResourceEntry.d.ts +19 -1
- package/src/engine/graphics/render/frame_graph/ResourceEntry.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/ResourceEntry.js +23 -1
- package/src/engine/graphics/render/frame_graph/backend/void/VoidRenderContext.d.ts +15 -1
- package/src/engine/graphics/render/frame_graph/backend/void/VoidRenderContext.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/backend/void/VoidRenderContext.js +33 -16
- package/src/engine/graphics/render/frame_graph/resource/RenderResourceManager.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/resource/RenderResourceManager.js +19 -1
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +6 -6
- package/src/engine/graphics3/CameraSystem.d.ts +6 -6
- package/src/engine/graphics3/CameraSystem.d.ts.map +1 -1
- package/src/engine/graphics3/CameraSystem.js +170 -170
- package/src/engine/graphics3/DecalSystem.d.ts +6 -6
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem.js +449 -449
- package/src/engine/graphics3/LightSystem.d.ts +6 -6
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem.js +234 -221
- package/src/engine/graphics3/MeshSystem.d.ts +6 -6
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem.js +53 -22
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +20 -15
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMediaSystem.js +198 -184
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts +6 -6
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/ParticleEmitterSystem.js +310 -289
- package/src/engine/graphics3/PickingSystem.d.ts +6 -6
- package/src/engine/graphics3/PickingSystem.d.ts.map +1 -1
- package/src/engine/graphics3/PickingSystem.js +273 -273
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +6 -6
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem.js +180 -169
- package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -1
- package/src/engine/graphics3/TerrainSystem.js +565 -566
- package/src/engine/graphics3/Trail3DSystem.d.ts +6 -6
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem.js +221 -221
- package/src/engine/graphics3/camera_sync_from_transform.d.ts +2 -2
- package/src/engine/graphics3/camera_sync_from_transform.d.ts.map +1 -1
- package/src/engine/graphics3/camera_sync_from_transform.js +2 -1
- package/src/engine/graphics3/debug/gizmo_view_from_camera.js +4 -4
- package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts +6 -0
- package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/particles/GPUParticularRenderer.js +82 -53
- package/src/engine/graphics3/particles/particle_gpu_records.d.ts +12 -8
- package/src/engine/graphics3/particles/particle_gpu_records.d.ts.map +1 -1
- package/src/engine/graphics3/particles/particle_gpu_records.js +53 -45
- package/src/engine/graphics3/preview/make_model_preview_scene.js +1 -1
- package/src/engine/graphics3/shade_camera_projection_ray.js +4 -4
- package/src/engine/graphics3/shade_node_to_entity_composition.d.ts.map +1 -1
- package/src/engine/graphics3/shade_node_to_entity_composition.js +88 -84
- package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts +7 -7
- package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts.map +1 -1
- package/src/engine/grid/grid2transform/GridPosition2TransformSystem.js +8 -8
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts +9 -8
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts.map +1 -1
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.js +29 -8
- package/src/engine/input/ecs/controllers/KeyboardCameraController.js +2 -2
- package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.js +35 -21
- package/src/engine/intelligence/behavior/util/RotationBehavior.js +5 -5
- package/src/engine/intelligence/mcts/StateNode.js +1 -1
- package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts +7 -7
- package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/TransformPoseSerializationAdapter.js +14 -15
- package/src/engine/interpolation/pose_interpoland.d.ts +2 -2
- package/src/engine/interpolation/pose_interpoland.js +4 -4
- package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts +4 -4
- package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts.map +1 -1
- package/src/engine/navigation/ecs/path_following/PathFollowingSystem.js +39 -14
- package/src/engine/network/adapters/TransformReplicationAdapter.d.ts +7 -7
- package/src/engine/network/adapters/TransformReplicationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/TransformReplicationAdapter.js +19 -20
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts +48 -0
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +246 -3
- package/src/engine/network/replication/Replicator.d.ts +5 -3
- package/src/engine/network/replication/Replicator.d.ts.map +1 -1
- package/src/engine/network/replication/Replicator.js +65 -16
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +3 -3
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +9 -3
- package/src/engine/physics/constraint/solve_constraints.js +10 -10
- package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +8 -8
- package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/ColliderObserverSystem.js +6 -6
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +22 -32
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +2337 -2310
- package/src/engine/physics/ecs/find_non_finite_physics_state.js +6 -6
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +7 -7
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +16 -8
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +4 -4
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidSystem.js +6 -6
- package/src/engine/physics/fluid/ecs/WorkerFluidSystem.d.ts +2 -2
- package/src/engine/physics/fluid/ecs/WorkerFluidSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/WorkerFluidSystem.js +4 -4
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.js +7 -7
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +4 -4
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +7 -7
- package/src/engine/physics/inertia/world_inverse_inertia.js +1 -1
- package/src/engine/physics/integration/integrate_position.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_position.js +13 -12
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.d.ts.map +1 -1
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.js +23 -5
- package/src/engine/physics/narrowphase/compute_penetration.js +18 -14
- package/src/engine/physics/narrowphase/convex_convex_manifold.js +2 -2
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +9 -9
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +95 -68
- package/src/engine/physics/narrowphase/refine_ray_concave.js +1 -1
- package/src/engine/physics/narrowphase/refine_ray_hit.js +3 -3
- package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
- package/src/engine/physics/queries/overlap_shape.js +19 -7
- package/src/engine/physics/queries/raycast.js +3 -3
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.js +628 -620
- package/src/engine/physics/solver/solve_contacts.js +10 -10
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts +6 -5
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
- package/src/engine/physics/vehicle/RaycastVehicle.js +10 -5
- package/src/engine/sound/ecs/SoundListenerSystem.d.ts +16 -4
- package/src/engine/sound/ecs/SoundListenerSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/SoundListenerSystem.js +70 -11
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +7 -7
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +343 -338
- package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +2 -2
- package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/LiveEmitterSet.js +356 -345
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts +23 -2
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +174 -140
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts +6 -6
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.js +185 -184
- package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.js +1 -1
- package/src/engine/sound/simulation/core/AcousticRegionIndex.d.ts +2 -1
- package/src/engine/sound/simulation/core/AcousticRegionIndex.d.ts.map +1 -1
- package/src/engine/sound/simulation/core/AcousticRegionIndex.js +4 -3
- package/src/engine/sound/simulation/core/AcousticVolumeRegion.d.ts +3 -2
- package/src/engine/sound/simulation/core/AcousticVolumeRegion.d.ts.map +1 -1
- package/src/engine/sound/simulation/core/AcousticVolumeRegion.js +6 -4
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts +10 -6
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts.map +1 -1
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.js +32 -7
- package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.d.ts +7 -7
- package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.d.ts.map +1 -1
- package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.js +6 -6
- package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -1
- package/src/engine/sound/sopra/runtime/EventInstance.js +8 -2
- package/src/format/scene/gltf/gltf_component_type.d.ts.map +1 -1
- package/src/format/scene/gltf/gltf_component_type.js +3 -1
- package/src/format/texture/ktx2/ktx2_read.d.ts.map +1 -1
- package/src/format/texture/ktx2/ktx2_read.js +2 -1
- package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.d.ts.map +1 -1
- package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.js +8 -1
- package/src/generation/markers/GridCellActionPlaceMarker.d.ts +4 -4
- package/src/generation/markers/GridCellActionPlaceMarker.d.ts.map +1 -1
- package/src/generation/markers/GridCellActionPlaceMarker.js +16 -6
- package/src/generation/markers/MarkerNode.d.ts +3 -3
- package/src/generation/markers/MarkerNode.d.ts.map +1 -1
- package/src/generation/markers/MarkerNode.js +3 -3
- package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.d.ts +4 -4
- package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.d.ts.map +1 -1
- package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.js +7 -7
- package/src/generation/markers/actions/MarkerNodeActionImaginary.d.ts.map +1 -1
- package/src/generation/markers/actions/MarkerNodeActionImaginary.js +20 -2
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.js +13 -3
- package/src/generation/markers/transform/MarkerNodeTransformRotateRandom.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformRotateRandom.js +11 -1
- package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.js +8 -4
- package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +13 -5
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.js +8 -2
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.js +16 -2
- package/src/shade/RENDERER_CONTRACT.md +584 -580
- package/src/shade/device/graph/BufferResourceDescriptor.d.ts.map +1 -1
- package/src/shade/device/graph/BufferResourceDescriptor.js +193 -184
- package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
- package/src/shade/device/graph/TextureResourceDescriptor.js +12 -0
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUDevice.js +8 -0
- package/src/shade/playground/avboit/README.md +117 -0
- package/src/shade/playground/avboit/index.html +215 -0
- package/src/shade/playground/avboit/main.d.ts +2 -0
- package/src/shade/playground/avboit/main.d.ts.map +1 -0
- package/src/shade/playground/avboit/main.js +875 -0
- package/src/shade/playground/basis_textures/main.js +1 -1
- package/src/shade/playground/ground_seam/main.js +1 -1
- package/src/shade/playground/particle_editor/README.md +175 -0
- package/src/shade/playground/particle_editor/index.html +76 -0
- package/src/shade/playground/particle_editor/main.d.ts +2 -0
- package/src/shade/playground/particle_editor/main.d.ts.map +1 -0
- package/src/shade/playground/particle_editor/main.js +139 -0
- package/src/shade/playground/particle_system/README.md +92 -62
- package/src/shade/playground/particle_system/index.html +67 -21
- package/src/shade/playground/particle_system/main.js +247 -102
- package/src/shade/{renderer/particles → playground/particle_system}/particle_prototype.d.ts +21 -18
- package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -0
- package/src/shade/{renderer/particles → playground/particle_system}/particle_prototype.js +197 -181
- package/src/shade/playground/particle_system/particle_scene.d.ts +136 -20
- package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_scene.js +487 -670
- package/src/shade/playground/skinned_blas_refit/sweep_views.js +2 -2
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.js +2 -1
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +2 -1
- package/src/shade/playground/sponza_path_trace/main.js +1 -1
- package/src/shade/playground/volumetrics_froxel/main.js +917 -917
- package/src/shade/playground/volumetrics_froxel/measure.js +559 -559
- package/src/shade/renderer/Renderer.d.ts +44 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +169 -36
- package/src/shade/renderer/ShadeTransparencyMode.d.ts +13 -0
- package/src/shade/renderer/ShadeTransparencyMode.d.ts.map +1 -0
- package/src/shade/renderer/ShadeTransparencyMode.js +30 -0
- package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/GPUSky.js +4 -2
- package/src/shade/renderer/buffer/graph_read_buffer.d.ts.map +1 -1
- package/src/shade/renderer/buffer/graph_read_buffer.js +8 -1
- package/src/shade/renderer/buffer/table/GPUTypedTable.js +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts +30 -0
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +84 -0
- package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts +27 -0
- package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/gpu_database_words.d.ts +24 -0
- package/src/shade/renderer/buffer/table/gpu_database_words.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/gpu_database_words.js +92 -0
- package/src/shade/renderer/camera/Camera.d.ts +2 -2
- package/src/shade/renderer/camera/Camera.d.ts.map +1 -1
- package/src/shade/renderer/camera/Camera.js +11 -5
- package/src/shade/renderer/camera/GPUCameraContext.d.ts.map +1 -1
- package/src/shade/renderer/camera/GPUCameraContext.js +2 -1
- package/src/shade/renderer/camera/OrbitalCameraController.d.ts +3 -3
- package/src/shade/renderer/camera/OrbitalCameraController.d.ts.map +1 -1
- package/src/shade/renderer/camera/OrbitalCameraController.js +31 -16
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +2 -2
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +4 -3
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +10 -5
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +8 -4
- package/src/shade/renderer/extension/FrameContext.d.ts.map +1 -1
- package/src/shade/renderer/extension/FrameContext.js +5 -0
- package/src/shade/renderer/extension/FrameRecord.d.ts +16 -0
- package/src/shade/renderer/extension/FrameRecord.d.ts.map +1 -1
- package/src/shade/renderer/extension/FrameRecord.js +31 -0
- package/src/shade/renderer/extension/GBufferTextures.d.ts +11 -0
- package/src/shade/renderer/extension/GBufferTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/GBufferTextures.js +14 -0
- package/src/shade/renderer/geometry/attribute/gpu_vertex_buffer_layout_from_spec.js +1 -1
- package/src/shade/renderer/geometry/util/geometry_stripify.js +6 -6
- package/src/shade/renderer/geometry/virtual/format/prototypeVGEOFormatViewer.js +8 -8
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +14 -5
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.js +17 -9
- package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.js +4 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +11 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/graph_lpv_shade.d.ts +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/graph_lpv_shade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/graph_lpv_shade.js +4 -2
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +5 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +35 -11
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/particles/DESIGN.md +271 -112
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +251 -86
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +822 -146
- package/src/shade/renderer/particles/ParticleConstants.d.ts +96 -3
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +103 -4
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +5 -4
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -1
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +11 -15
- package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts +2 -2
- package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts.map +1 -1
- package/src/shade/renderer/particles/coherence/shader_particle_bucket.js +20 -15
- package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts +7 -8
- package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.js +7 -17
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts +56 -0
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js +68 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.d.ts +39 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.js +52 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +83 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +166 -0
- package/src/shade/renderer/particles/data/chunk_particle_emitter.d.ts +21 -5
- package/src/shade/renderer/particles/data/chunk_particle_emitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/chunk_particle_emitter.js +44 -85
- package/src/shade/renderer/particles/data/particle_header.d.ts +62 -0
- package/src/shade/renderer/particles/data/particle_header.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/particle_header.js +103 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +179 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +303 -0
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +120 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +90 -1
- package/src/shade/renderer/particles/graph/ParticleNodeGroup.d.ts +283 -0
- package/src/shade/renderer/particles/graph/ParticleNodeGroup.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/ParticleNodeGroup.js +419 -0
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +44 -2
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +476 -40
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts +188 -0
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/ParticleValueType.js +287 -0
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts +16 -9
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/compile_particle_graph.js +464 -205
- package/src/shade/renderer/particles/graph/flatten_particle_graph.d.ts +11 -0
- package/src/shade/renderer/particles/graph/flatten_particle_graph.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/flatten_particle_graph.js +213 -0
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts +27 -0
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.js +75 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts +83 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.js +319 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_noise.d.ts +22 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_noise.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_noise.js +517 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_utility.d.ts +70 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_utility.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_utility.js +161 -0
- package/src/shade/renderer/particles/graph/groups/simplex_reference.d.ts +8 -0
- package/src/shade/renderer/particles/graph/groups/simplex_reference.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/simplex_reference.js +159 -0
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts +88 -0
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.js +234 -0
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts +98 -0
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/make_particle_group.js +427 -0
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts +11 -4
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.js +121 -108
- package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts +38 -0
- package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_graph_diagnostic.js +25 -0
- package/src/shade/renderer/particles/graph/particle_graph_distributions.d.ts +29 -0
- package/src/shade/renderer/particles/graph/particle_graph_distributions.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_graph_distributions.js +170 -0
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts +87 -0
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_graph_json.js +196 -0
- package/src/shade/renderer/particles/graph/particle_group_json.d.ts +86 -0
- package/src/shade/renderer/particles/graph/particle_group_json.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_group_json.js +182 -0
- package/src/shade/renderer/particles/graph/particle_group_library.d.ts +33 -0
- package/src/shade/renderer/particles/graph/particle_group_library.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_group_library.js +75 -0
- package/src/shade/renderer/particles/graph/particle_node_library.d.ts +37 -0
- package/src/shade/renderer/particles/graph/particle_node_library.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_node_library.js +64 -0
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +146 -0
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_node_parameters.js +234 -0
- package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts +30 -0
- package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_node_presentation.js +286 -0
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +66 -0
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/validate_particle_graph.js +439 -0
- package/src/shade/renderer/particles/graph_particles.d.ts +143 -68
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +424 -71
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts +107 -0
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph_particles_avboit.js +312 -0
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts +41 -8
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/InstructionStream.js +111 -33
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts +13 -10
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleAssembler.js +30 -26
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +27 -15
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleProgram.js +139 -34
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +117 -9
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.js +296 -37
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts +149 -0
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -0
- package/src/shade/renderer/particles/isa/particle_assembly.js +999 -0
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +25 -3
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
- package/src/shade/renderer/particles/layout/ParticleLayout.js +33 -5
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +160 -0
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +478 -0
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts +291 -0
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.js +647 -0
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +95 -0
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +213 -0
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts +16 -0
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +223 -0
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +121 -0
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +206 -0
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts +11 -0
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.js +197 -0
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.js +51 -0
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +561 -0
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.js +72 -0
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.js +86 -0
- package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_peephole.js +271 -0
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.js +268 -0
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +151 -0
- package/src/shade/renderer/particles/particle_test_fixtures.d.ts +131 -0
- package/src/shade/renderer/particles/particle_test_fixtures.d.ts.map +1 -0
- package/src/shade/renderer/particles/particle_test_fixtures.js +203 -0
- package/src/shade/renderer/particles/runtime/Emitter.d.ts +219 -0
- package/src/shade/renderer/particles/runtime/Emitter.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +128 -60
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +286 -117
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +264 -0
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +404 -0
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts +49 -15
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +51 -18
- package/src/shade/renderer/particles/runtime/ProgramArena.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ProgramArena.js +72 -32
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +4 -4
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/create_particle_effect.js +4 -4
- package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts +15 -0
- package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.d.ts +17 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.js +75 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts +20 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +94 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts +15 -5
- package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.d.ts +1 -2
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.js +1 -2
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.d.ts +11 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.js +13 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emitter_age.d.ts +17 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emitter_age.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emitter_age.js +22 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.d.ts +14 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.js +23 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_scene_view_depth.d.ts +18 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_scene_view_depth.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_scene_view_depth.js +24 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts +26 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.js +59 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts +14 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +153 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.d.ts +3 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.js +124 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts +19 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +147 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts +18 -8
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +72 -37
- package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.d.ts +5 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.js +216 -0
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +7 -3
- package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_render.js +132 -197
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +78 -24
- package/src/shade/renderer/particles/shaders/shader_particle_spawn_commands.d.ts +26 -0
- package/src/shade/renderer/particles/shaders/shader_particle_spawn_commands.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_spawn_commands.js +66 -0
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.js +21 -36
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +2 -2
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.js +100 -90
- package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/chunk_particle_vm.js +270 -138
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts +9 -0
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +26 -0
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts +1 -2
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.js +0 -3
- package/src/shade/renderer/postprocess/dof/gather/DepthOfFieldU.js +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/DepthOfField.js +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.js +3 -2
- package/src/shade/renderer/postprocess/nss/generate_NSS_WEIGHTS_ACTUAL.js +3 -2
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts +7 -2
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +12 -1
- package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.js +1 -1
- package/src/shade/renderer/rasterize/forward/FORWARD_VERTEX_SHADER_STRUCT.d.ts +3 -0
- package/src/shade/renderer/rasterize/forward/FORWARD_VERTEX_SHADER_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/FORWARD_VERTEX_SHADER_STRUCT.js +4 -4
- package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.d.ts +3 -0
- package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.js +17 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_brick4.d.ts +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_brick4.js +16 -16
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_ibl.d.ts +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_ibl.js +17 -17
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_material_side_should_draw.d.ts +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_material_side_should_draw.js +2 -2
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts +3 -0
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/vertex_shader_chunk.js +4 -4
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts +27 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.js +27 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +87 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +61 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts +107 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +120 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +642 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +534 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.d.ts +15 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.js +33 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.d.ts +20 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.js +38 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts +45 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +139 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.d.ts +37 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.js +73 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.js +17 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.d.ts +11 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.js +18 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.js +17 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.js +17 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.d.ts +15 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.js +25 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts +17 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.js +35 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.d.ts +11 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.js +21 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.js +26 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.d.ts +11 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.js +22 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.js +21 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.js +32 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.d.ts +18 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.js +58 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.d.ts +20 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.js +27 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.js +18 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.js +21 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.js +23 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.d.ts +13 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.js +27 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.d.ts +22 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.js +38 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +141 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +994 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts +8 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.js +135 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts +3 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.js +101 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts +3 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.js +96 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.d.ts +3 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.js +83 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.js +119 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts +3 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.js +87 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +15 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +202 -0
- package/src/shade/renderer/rasterize/native/material_draw_indirect.d.ts +22 -0
- package/src/shade/renderer/rasterize/native/material_draw_indirect.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/material_draw_indirect.js +69 -0
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +665 -722
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +3 -3
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +4 -4
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +4 -4
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts +7 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +16 -2
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts +3 -3
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.js +29 -23
- package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.d.ts +2 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.js +3 -3
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts +4 -4
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.js +2 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.d.ts +2 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.js +2 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.d.ts +7 -7
- package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.js +79 -71
- package/src/shade/renderer/shader/chunk/math/chunk_lower_bound_branchless.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/chunk_lower_bound_branchless.js +3 -1
- package/src/shade/renderer/shader/chunk/random/chunk_hash_to_float01.d.ts +13 -3
- package/src/shade/renderer/shader/chunk/random/chunk_hash_to_float01.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/random/chunk_hash_to_float01.js +15 -5
- package/src/shade/renderer/shader/chunk/random/chunk_random_uint.d.ts +8 -0
- package/src/shade/renderer/shader/chunk/random/chunk_random_uint.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/random/chunk_random_uint.js +15 -5
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg.js +17 -7
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_advance.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_advance.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_advance.js +26 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_output.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_output.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_output.js +26 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +8 -2
- package/src/shade/renderer/shadow/map/PointLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/PointLightShadowmap.js +7 -2
- package/src/shade/renderer/shadow/map/SpotLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/SpotLightShadowmap.js +3 -15
- package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.js +10 -4
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +7 -2
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +2 -2
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +3 -3
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +3 -3
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +66 -5
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +35 -4
- package/src/view/minimap/Minimap.d.ts.map +1 -1
- package/src/view/minimap/Minimap.js +227 -225
- package/src/view/minimap/MinimapCanvasView.js +3 -3
- package/src/view/minimap/MinimapMarker.d.ts +45 -0
- package/src/view/minimap/MinimapMarker.d.ts.map +1 -0
- package/src/view/minimap/MinimapMarker.js +80 -0
- package/src/view/minimap/MinimapMarkerCollection.d.ts +6 -5
- package/src/view/minimap/MinimapMarkerCollection.d.ts.map +1 -1
- package/src/view/minimap/MinimapMarkerCollection.js +6 -6
- package/src/view/minimap/MinimapMarkerSerializationAdapter.d.ts +19 -0
- package/src/view/minimap/MinimapMarkerSerializationAdapter.d.ts.map +1 -0
- package/src/view/minimap/MinimapMarkerSerializationAdapter.js +42 -0
- package/src/view/minimap/dom/MinimapCameraView.d.ts +1 -1
- package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapCameraView.js +23 -4
- package/src/view/minimap/dom/MinimapMarkerView.js +3 -3
- package/src/view/minimap/gl/MarkerGL.js +3 -3
- package/src/view/util/DomLayoutFrame.d.ts +53 -0
- package/src/view/util/DomLayoutFrame.d.ts.map +1 -0
- package/src/view/util/DomLayoutFrame.js +122 -0
- package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.js +0 -19
- package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.js +0 -241
- package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.js +0 -40
- package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.js +0 -28
- package/src/engine/ecs/util/hideEntityGracefully.js +0 -196
- package/src/shade/renderer/particles/cull/chunk_particle_cull.js +0 -38
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.js +0 -214
- package/src/shade/renderer/particles/particle_prototype.d.ts.map +0 -1
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.js +0 -86
- package/src/shade/renderer/particles/runtime/spawn_request_encoding.js +0 -52
- package/src/shade/renderer/particles/shaders/chunk_particle_context.js +0 -58
- package/src/shade/renderer/rasterize/native/oit/FORWARD_VERTEX_SHADER_STRUCT.d.ts +0 -3
- package/src/shade/renderer/rasterize/native/oit/FORWARD_VERTEX_SHADER_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.d.ts +0 -3
- package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.js +0 -17
- package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_brick4.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_ibl.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/native/oit/chunk_material_side_should_draw.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/native/oit/vertex_shader_chunk.d.ts +0 -3
- package/src/shade/renderer/rasterize/native/oit/vertex_shader_chunk.d.ts.map +0 -1
|
@@ -0,0 +1,989 @@
|
|
|
1
|
+
import { NodeGraph } from "../../../src/core/model/node-graph/NodeGraph.js";
|
|
2
|
+
import { NodeGraphVisualData } from "../../../src/core/model/node-graph/visual/NodeGraphVisualData.js";
|
|
3
|
+
import Signal from "../../../src/core/events/signal/Signal.js";
|
|
4
|
+
import {
|
|
5
|
+
EMITTER_BLEND,
|
|
6
|
+
EMITTER_PROJECTION,
|
|
7
|
+
make_emitter_flags,
|
|
8
|
+
} from "../../../src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js";
|
|
9
|
+
import { compile_particle_effect } from "../../../src/shade/renderer/particles/graph/compile_particle_graph.js";
|
|
10
|
+
import {
|
|
11
|
+
deserialize_particle_graph,
|
|
12
|
+
serialize_particle_graph,
|
|
13
|
+
} from "../../../src/shade/renderer/particles/graph/particle_graph_json.js";
|
|
14
|
+
import {
|
|
15
|
+
deserialize_particle_group,
|
|
16
|
+
serialize_particle_group,
|
|
17
|
+
} from "../../../src/shade/renderer/particles/graph/particle_group_json.js";
|
|
18
|
+
import {
|
|
19
|
+
particle_library_description_or_undefined,
|
|
20
|
+
} from "../../../src/shade/renderer/particles/graph/particle_node_library.js";
|
|
21
|
+
import {
|
|
22
|
+
PARTICLE_GRAPH_ERROR,
|
|
23
|
+
PARTICLE_GRAPH_PHASE,
|
|
24
|
+
validate_particle_graph,
|
|
25
|
+
} from "../../../src/shade/renderer/particles/graph/validate_particle_graph.js";
|
|
26
|
+
import {
|
|
27
|
+
disassemble_particle_program,
|
|
28
|
+
parse_particle_assembly,
|
|
29
|
+
} from "../../../src/shade/renderer/particles/isa/particle_assembly.js";
|
|
30
|
+
import { PARTICLE_TYPE_COLOR } from "../../../src/shade/renderer/particles/graph/ParticleValueType.js";
|
|
31
|
+
import { ParticleLayout } from "../../../src/shade/renderer/particles/layout/ParticleLayout.js";
|
|
32
|
+
import { optimize_compiled_particle_program } from "../../../src/shade/renderer/particles/optimizer/optimize_particle_program.js";
|
|
33
|
+
import { EMITTER_RENDER_CHANNELS } from "../../../src/shade/renderer/particles/runtime/ParticleEmitter.js";
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* One particle effect being edited: the thing both layers of the editor point at.
|
|
37
|
+
*
|
|
38
|
+
* An effect is four things — the per-particle attribute schema, an INIT graph, an UPDATE graph, and
|
|
39
|
+
* the emitter settings that say how the result is drawn. The graph editor edits the middle two, the
|
|
40
|
+
* code editor edits what they compile to, the emitter inspector edits the last, and the preview
|
|
41
|
+
* watches all of it. Putting them in one object with one change signal is what lets those be four
|
|
42
|
+
* independent views rather than four copies of the same state.
|
|
43
|
+
*
|
|
44
|
+
* ## Which layer is in charge
|
|
45
|
+
*
|
|
46
|
+
* The two editing layers are not two views of one representation — the graph compiles to the
|
|
47
|
+
* program and nothing compiles back. So the document names which one the program comes from:
|
|
48
|
+
*
|
|
49
|
+
* - {@link PARTICLE_EFFECT_SOURCE.GRAPH}: the program is compiled from the graphs on every
|
|
50
|
+
* {@link compile}. The assembly text is a lowering of them, shown but not read.
|
|
51
|
+
* - {@link PARTICLE_EFFECT_SOURCE.ASSEMBLY}: the program is assembled from {@link assembly}. The
|
|
52
|
+
* graphs are still there and still editable, but they are not what runs.
|
|
53
|
+
*
|
|
54
|
+
* {@link lowerToAssembly} moves from the first to the second, seeding the text with what the graphs
|
|
55
|
+
* compile to. Going back is {@link source} set to GRAPH: the text is kept, so an author who
|
|
56
|
+
* switches by accident has not lost their edits, but it stops being what runs.
|
|
57
|
+
*
|
|
58
|
+
* ## Optimizing
|
|
59
|
+
*
|
|
60
|
+
* {@link optimize} runs the compiled program through
|
|
61
|
+
* {@link ../../../src/shade/renderer/particles/optimizer/optimize_particle_program.js the optimizer}
|
|
62
|
+
* before anybody gets it. It is a property of the effect rather than of a view because it changes
|
|
63
|
+
* what runs — the preview, the reference simulation and anything else downstream of {@link compile}
|
|
64
|
+
* all get the optimized program — and a switch that changed what runs while living in one panel
|
|
65
|
+
* would be invisible from the other three.
|
|
66
|
+
*
|
|
67
|
+
* It applies whichever layer is authoritative, including hand-written assembly, which is a program
|
|
68
|
+
* like any other. What it never does is rewrite {@link assembly}: the author's text stays the text
|
|
69
|
+
* they typed, and only the program underneath it changes. See {@link assemblyText}.
|
|
70
|
+
*/
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Which representation {@link ParticleEffectDocument#compile} builds the program from.
|
|
74
|
+
* @enum {string}
|
|
75
|
+
*/
|
|
76
|
+
export const PARTICLE_EFFECT_SOURCE = Object.freeze({
|
|
77
|
+
GRAPH: "graph",
|
|
78
|
+
ASSEMBLY: "assembly",
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* A compile attempt's outcome.
|
|
83
|
+
*
|
|
84
|
+
* @typedef {object} ParticleEffectCompilation
|
|
85
|
+
* @property {import("../../../src/shade/renderer/particles/isa/ParticleProgram.js").ParticleProgram|null} program
|
|
86
|
+
* null when anything went wrong
|
|
87
|
+
* @property {ParticleLayout|null} layout the attribute schema the program was compiled against;
|
|
88
|
+
* null when the declarations themselves are not a valid layout
|
|
89
|
+
* @property {import("../../../src/shade/renderer/particles/isa/ParticleProgram.js").ParticleProgram|null} unoptimized
|
|
90
|
+
* what `program` was built from, before the optimizer. The same object as `program` when
|
|
91
|
+
* {@link ParticleEffectDocument#optimize} is off, so a caller wanting the comparison can always
|
|
92
|
+
* ask for it and gets "no difference" rather than a special case.
|
|
93
|
+
* @property {Array<{scope: string, node: number, line: number, message: string, severity: string}>} diagnostics
|
|
94
|
+
* `scope` is `"init"`, `"update"`, `"assembly"` or `"effect"`; `node` is a node id or -1;
|
|
95
|
+
* `line` is a 1-based assembly line or 0
|
|
96
|
+
*/
|
|
97
|
+
|
|
98
|
+
export class ParticleEffectDocument {
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @type {string}
|
|
102
|
+
*/
|
|
103
|
+
name = "effect";
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* The per-particle attribute declarations, in the order they are packed into a record.
|
|
107
|
+
*
|
|
108
|
+
* `type` is optional and says what the words are for rather than how many there are — see
|
|
109
|
+
* {@link ../../../src/shade/renderer/particles/layout/ParticleLayout.js ParticleLayout}. It is
|
|
110
|
+
* why reading `color` gives a colour in the graph and reading `position` gives a `vec3`.
|
|
111
|
+
*
|
|
112
|
+
* @type {Array<{name: string, components: number, type?: string}>}
|
|
113
|
+
*/
|
|
114
|
+
attributes = [
|
|
115
|
+
{ name: "position", components: 3 },
|
|
116
|
+
{ name: "velocity", components: 3 },
|
|
117
|
+
{ name: "age", components: 1 },
|
|
118
|
+
{ name: "lifetime", components: 1 },
|
|
119
|
+
{ name: "size", components: 1 },
|
|
120
|
+
{ name: "color", components: 4, type: PARTICLE_TYPE_COLOR.name },
|
|
121
|
+
];
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* The node groups this document carries of its own — the ones an author made in it.
|
|
125
|
+
*
|
|
126
|
+
* A group the library ships is code, is shared by every effect, and is looked up by name. One of
|
|
127
|
+
* these is a thing in this file: it travels with the effect, it is nobody else's, and it is
|
|
128
|
+
* always the author's to edit. Two documents may each have a `group.1` and they are different
|
|
129
|
+
* groups, which is why a document resolves its own names first — see {@link groupNamed}.
|
|
130
|
+
*
|
|
131
|
+
* @type {import("../../../src/shade/renderer/particles/graph/ParticleNodeGroup.js").ParticleNodeGroup[]}
|
|
132
|
+
*/
|
|
133
|
+
groups = [];
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* @type {NodeGraph}
|
|
137
|
+
*/
|
|
138
|
+
init = new NodeGraph();
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* @type {NodeGraph}
|
|
142
|
+
*/
|
|
143
|
+
update = new NodeGraph();
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Node positions for the INIT graph. Part of the document, not of the view: an effect whose
|
|
147
|
+
* arrangement is not saved with it has to be re-arranged every time it is opened.
|
|
148
|
+
* @type {NodeGraphVisualData}
|
|
149
|
+
*/
|
|
150
|
+
init_visual = new NodeGraphVisualData();
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* @type {NodeGraphVisualData}
|
|
154
|
+
*/
|
|
155
|
+
update_visual = new NodeGraphVisualData();
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* The emitter settings — everything about the effect that is not the simulation itself. Shaped
|
|
159
|
+
* to be handed straight to {@link ParticleEmitter.from}.
|
|
160
|
+
* @type {object}
|
|
161
|
+
*/
|
|
162
|
+
emitter = {
|
|
163
|
+
spawn_rate: 120,
|
|
164
|
+
blend: EMITTER_BLEND.ADDITIVE,
|
|
165
|
+
projection: EMITTER_PROJECTION.BILLBOARD,
|
|
166
|
+
lighting: false,
|
|
167
|
+
soft_depth: false,
|
|
168
|
+
sort: false,
|
|
169
|
+
cull: false,
|
|
170
|
+
bounds_center: [0, 1, 0],
|
|
171
|
+
bounds_radius: 3,
|
|
172
|
+
atlas_region: [0, 0, 1, 1],
|
|
173
|
+
flipbook: [1, 1],
|
|
174
|
+
/** render channel -> attribute name; a channel absent here is not bound */
|
|
175
|
+
render: {
|
|
176
|
+
position: "position",
|
|
177
|
+
size: "size",
|
|
178
|
+
color: "color",
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Which representation the program comes from.
|
|
184
|
+
* @type {string}
|
|
185
|
+
*/
|
|
186
|
+
source = PARTICLE_EFFECT_SOURCE.GRAPH;
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* The code layer's text buffer. Under {@link PARTICLE_EFFECT_SOURCE.GRAPH} this is a lowering of
|
|
190
|
+
* the graphs, refreshed by {@link compile}; under ASSEMBLY it is the author's, and what runs.
|
|
191
|
+
* @type {string}
|
|
192
|
+
*/
|
|
193
|
+
assembly = "";
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Whether {@link compile} hands back the optimized program.
|
|
197
|
+
*
|
|
198
|
+
* Off by default, and off for every effect saved before it existed, because it is a thing an
|
|
199
|
+
* author turns on to see what it does rather than something done to their effect behind them.
|
|
200
|
+
*
|
|
201
|
+
* @type {boolean}
|
|
202
|
+
*/
|
|
203
|
+
optimize = false;
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Bumped on every {@link touch}. A view that caches something derived from the document can
|
|
207
|
+
* compare against this instead of recomputing on every frame.
|
|
208
|
+
* @type {number}
|
|
209
|
+
*/
|
|
210
|
+
version = 0;
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* @readonly
|
|
214
|
+
*/
|
|
215
|
+
on = {
|
|
216
|
+
/**
|
|
217
|
+
* Something about the effect changed. Carries the document.
|
|
218
|
+
* @readonly
|
|
219
|
+
* @type {Signal<ParticleEffectDocument>}
|
|
220
|
+
*/
|
|
221
|
+
changed: new Signal(),
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Nodes whose parameter signal this document is listening to.
|
|
226
|
+
* @type {Set<NodeInstance>}
|
|
227
|
+
*/
|
|
228
|
+
#watched = new Set();
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* @type {function}
|
|
232
|
+
*/
|
|
233
|
+
#on_node_parameter_changed = () => this.touch();
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* How many {@link batch} calls are open. Zero means a {@link touch} is announced immediately.
|
|
237
|
+
* @type {number}
|
|
238
|
+
*/
|
|
239
|
+
#batch_depth = 0;
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Whether a change happened while a batch was open, and is waiting to be announced.
|
|
243
|
+
* @type {boolean}
|
|
244
|
+
*/
|
|
245
|
+
#batch_pending = false;
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* The last {@link compile}, against the key that produced it.
|
|
249
|
+
*
|
|
250
|
+
* A change to a document is seen by three panels and each of them asks what it compiles to, so
|
|
251
|
+
* without this one edit is three compiles. That was affordable when an effect was forty
|
|
252
|
+
* instructions; a graph with a `curl3` group in it lowers to about four thousand, which is 78ms
|
|
253
|
+
* to compile and another 570ms to optimize on this machine — three times over, on every
|
|
254
|
+
* keystroke.
|
|
255
|
+
*
|
|
256
|
+
* The key is the {@link version} and the two settings that decide what a compile does, rather
|
|
257
|
+
* than the version alone, because {@link lowerToAssembly} compiles under a temporarily changed
|
|
258
|
+
* {@link source} without touching — and a cache that could not tell those apart would hand it
|
|
259
|
+
* back the assembly it was about to replace.
|
|
260
|
+
*
|
|
261
|
+
* @type {{key: string, compilation: ParticleEffectCompilation}|null}
|
|
262
|
+
*/
|
|
263
|
+
#compilation = null;
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* The last {@link #lowerGraphs}, against the version and layout it was made for.
|
|
267
|
+
*
|
|
268
|
+
* Separate from {@link #compilation} because the graph editor asks what is wrong with the graphs
|
|
269
|
+
* without asking what they compile to, and under ASSEMBLY authority those are different
|
|
270
|
+
* questions over the same work.
|
|
271
|
+
*
|
|
272
|
+
* @type {{version: number, layout: ParticleLayout, result: object}|null}
|
|
273
|
+
*/
|
|
274
|
+
#lowering = null;
|
|
275
|
+
|
|
276
|
+
constructor() {
|
|
277
|
+
// A graph edited through the editor's action timeline never passes through this object, so
|
|
278
|
+
// without this the document would be the last to hear about a change to its own contents —
|
|
279
|
+
// and every view downstream of `on.changed` would be showing the effect as it was.
|
|
280
|
+
for (const graph of [this.init, this.update]) {
|
|
281
|
+
graph.on.nodeAdded.add(node => {
|
|
282
|
+
this.#watch(node);
|
|
283
|
+
this.touch();
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
graph.on.nodeRemoved.add(node => {
|
|
287
|
+
this.#unwatch(node);
|
|
288
|
+
this.touch();
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
graph.on.connectionAdded.add(this.touch, this);
|
|
292
|
+
graph.on.connectionRemoved.add(this.touch, this);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* @param {NodeInstance} node
|
|
298
|
+
*/
|
|
299
|
+
#watch(node) {
|
|
300
|
+
if (this.#watched.has(node)) {
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
this.#watched.add(node);
|
|
305
|
+
|
|
306
|
+
node.on.parameterChanged.add(this.#on_node_parameter_changed);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* @param {NodeInstance} node
|
|
311
|
+
*/
|
|
312
|
+
#unwatch(node) {
|
|
313
|
+
if (!this.#watched.delete(node)) {
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
node.on.parameterChanged.remove(this.#on_node_parameter_changed);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Announce a change. Every edit path — a graph action, an attribute added, a parameter set,
|
|
322
|
+
* assembly typed — ends here, and every view that shows the effect is downstream of it.
|
|
323
|
+
*
|
|
324
|
+
* Inside a {@link batch} the announcement is held until the batch ends, and however many changes
|
|
325
|
+
* it covered arrive as one.
|
|
326
|
+
*/
|
|
327
|
+
touch() {
|
|
328
|
+
this.version++;
|
|
329
|
+
|
|
330
|
+
if (this.#batch_depth > 0) {
|
|
331
|
+
this.#batch_pending = true;
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
this.on.changed.send1(this);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Run a run of edits as one change.
|
|
340
|
+
*
|
|
341
|
+
* Loading a document is a hundred and fifty node and connection additions, and every one of them
|
|
342
|
+
* is a change to the document. Without this the preview would recompile the effect once per
|
|
343
|
+
* node, and every control in the editor would rebuild as many times.
|
|
344
|
+
*
|
|
345
|
+
* Nests, and announces even if the body throws — a half-applied edit is still an edit, and a
|
|
346
|
+
* view left showing the state before it would be showing something that is not there.
|
|
347
|
+
*
|
|
348
|
+
* @template T
|
|
349
|
+
* @param {function():T} body
|
|
350
|
+
* @returns {T}
|
|
351
|
+
*/
|
|
352
|
+
batch(body) {
|
|
353
|
+
this.#batch_depth++;
|
|
354
|
+
|
|
355
|
+
try {
|
|
356
|
+
return body();
|
|
357
|
+
} finally {
|
|
358
|
+
this.#batch_depth--;
|
|
359
|
+
|
|
360
|
+
if (this.#batch_depth === 0 && this.#batch_pending) {
|
|
361
|
+
this.#batch_pending = false;
|
|
362
|
+
|
|
363
|
+
this.on.changed.send1(this);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* A node type this document carries of its own, by name; `undefined` for anything else.
|
|
370
|
+
*
|
|
371
|
+
* What every path that resolves a type name consults before the standard library, so that a
|
|
372
|
+
* group made here is found here — see {@link groups}.
|
|
373
|
+
*
|
|
374
|
+
* @param {string} name
|
|
375
|
+
* @returns {import("../../../src/shade/renderer/particles/graph/ParticleNodeDescription.js").ParticleNodeDescription|undefined}
|
|
376
|
+
*/
|
|
377
|
+
ownDescription(name) {
|
|
378
|
+
return this.groupNamed(name)?.description;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* @param {string} name
|
|
383
|
+
* @returns {import("../../../src/shade/renderer/particles/graph/ParticleNodeGroup.js").ParticleNodeGroup|undefined}
|
|
384
|
+
*/
|
|
385
|
+
groupNamed(name) {
|
|
386
|
+
return this.groups.find(group => group.name === name);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/**
|
|
390
|
+
* A name no type answers to yet, here or in the standard library.
|
|
391
|
+
*
|
|
392
|
+
* Groups an author makes are numbered rather than asked about, because a dialog between wanting
|
|
393
|
+
* a group and having one is a dialog in the way. The name is an address and stays put; what an
|
|
394
|
+
* author renames is the label, which is what they read.
|
|
395
|
+
*
|
|
396
|
+
* @param {string} [prefix]
|
|
397
|
+
* @returns {string}
|
|
398
|
+
*/
|
|
399
|
+
unusedGroupName(prefix = "group") {
|
|
400
|
+
for (let index = 1; ; index++) {
|
|
401
|
+
const candidate = `${prefix}.${index}`;
|
|
402
|
+
|
|
403
|
+
const taken = this.groupNamed(candidate) !== undefined
|
|
404
|
+
|| particle_library_description_or_undefined(candidate) !== undefined;
|
|
405
|
+
|
|
406
|
+
if (!taken) {
|
|
407
|
+
return candidate;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* Take on a group.
|
|
414
|
+
*
|
|
415
|
+
* @param {import("../../../src/shade/renderer/particles/graph/ParticleNodeGroup.js").ParticleNodeGroup} group
|
|
416
|
+
* @returns {void}
|
|
417
|
+
* @throws if something already answers to that name
|
|
418
|
+
*/
|
|
419
|
+
addGroup(group) {
|
|
420
|
+
if (this.ownDescription(group.name) !== undefined) {
|
|
421
|
+
throw new Error(`This effect already has a group called '${group.name}'.`);
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
this.groups = this.groups.concat([group]);
|
|
425
|
+
|
|
426
|
+
this.touch();
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/**
|
|
430
|
+
* Give up a group.
|
|
431
|
+
*
|
|
432
|
+
* Nodes still using it are left alone and become unresolvable, which is loud and recoverable;
|
|
433
|
+
* quietly rewriting somebody's graph to remove them would be neither. Callers that remove a group
|
|
434
|
+
* are expected to have removed its uses first, and the undo of a grouping does exactly that.
|
|
435
|
+
*
|
|
436
|
+
* @param {import("../../../src/shade/renderer/particles/graph/ParticleNodeGroup.js").ParticleNodeGroup} group
|
|
437
|
+
* @returns {boolean} false when the document did not have it
|
|
438
|
+
*/
|
|
439
|
+
removeGroup(group) {
|
|
440
|
+
const remaining = this.groups.filter(candidate => candidate !== group);
|
|
441
|
+
|
|
442
|
+
if (remaining.length === this.groups.length) {
|
|
443
|
+
return false;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
this.groups = remaining;
|
|
447
|
+
|
|
448
|
+
this.touch();
|
|
449
|
+
|
|
450
|
+
return true;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* The attribute schema as the compiler and the runtime want it.
|
|
455
|
+
*
|
|
456
|
+
* Rebuilt on demand rather than held, because {@link attributes} is what an author edits and a
|
|
457
|
+
* cached layout would be one edit behind. Building one is a walk over a handful of declarations.
|
|
458
|
+
*
|
|
459
|
+
* @returns {ParticleLayout}
|
|
460
|
+
* @throws if the declarations are not a valid layout (duplicate name, too many words)
|
|
461
|
+
*/
|
|
462
|
+
buildLayout() {
|
|
463
|
+
return new ParticleLayout(this.attributes);
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* Compile the effect as it stands.
|
|
468
|
+
*
|
|
469
|
+
* Never throws: everything that can go wrong comes back as a diagnostic, because every caller is
|
|
470
|
+
* a view that has to show the author what is wrong rather than fall over. Nor does it change the
|
|
471
|
+
* document — a compile that quietly rewrote the assembly buffer would be a change no view was
|
|
472
|
+
* told about.
|
|
473
|
+
*
|
|
474
|
+
* Memoized on {@link #compilation}, so the panels that all ask this on the same change pay for
|
|
475
|
+
* one. The result is shared rather than copied; nobody may write to it.
|
|
476
|
+
*
|
|
477
|
+
* @returns {ParticleEffectCompilation}
|
|
478
|
+
*/
|
|
479
|
+
compile() {
|
|
480
|
+
const key = `${this.version}:${this.source}:${this.optimize}`;
|
|
481
|
+
|
|
482
|
+
if (this.#compilation !== null && this.#compilation.key === key) {
|
|
483
|
+
return this.#compilation.compilation;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
const compilation = this.#compile();
|
|
487
|
+
|
|
488
|
+
this.#compilation = { key, compilation };
|
|
489
|
+
|
|
490
|
+
return compilation;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/**
|
|
494
|
+
* @returns {ParticleEffectCompilation}
|
|
495
|
+
*/
|
|
496
|
+
#compile() {
|
|
497
|
+
/** @type {ParticleEffectCompilation['diagnostics']} */
|
|
498
|
+
const diagnostics = [];
|
|
499
|
+
|
|
500
|
+
let layout;
|
|
501
|
+
|
|
502
|
+
try {
|
|
503
|
+
layout = this.#layout();
|
|
504
|
+
} catch (e) {
|
|
505
|
+
return {
|
|
506
|
+
program: null,
|
|
507
|
+
unoptimized: null,
|
|
508
|
+
layout: null,
|
|
509
|
+
diagnostics: [{ scope: "effect", node: -1, line: 0, message: e.message, severity: PARTICLE_GRAPH_ERROR }],
|
|
510
|
+
};
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
if (this.source === PARTICLE_EFFECT_SOURCE.ASSEMBLY) {
|
|
514
|
+
const { program, diagnostics: assembly_diagnostics } = parse_particle_assembly(this.assembly);
|
|
515
|
+
|
|
516
|
+
for (const diagnostic of assembly_diagnostics) {
|
|
517
|
+
diagnostics.push({
|
|
518
|
+
scope: "assembly",
|
|
519
|
+
node: -1,
|
|
520
|
+
line: diagnostic.line,
|
|
521
|
+
message: diagnostic.message,
|
|
522
|
+
severity: PARTICLE_GRAPH_ERROR,
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
return { ...this.#optimized(program, diagnostics), layout, diagnostics };
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
const lowering = this.#lowerGraphs(layout);
|
|
530
|
+
|
|
531
|
+
diagnostics.push(...lowering.diagnostics);
|
|
532
|
+
|
|
533
|
+
return { ...this.#optimized(lowering.program, diagnostics), layout, diagnostics };
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
/**
|
|
537
|
+
* Run a freshly built program through the optimizer, if the effect asks for it.
|
|
538
|
+
*
|
|
539
|
+
* Called with no options at all, which is the point: what the optimizer will and will not do to
|
|
540
|
+
* an author's arithmetic — `x * 0` folded to `+0`, multiply-add not fused — is argued for where
|
|
541
|
+
* those defaults live, and a tick-box in the editor is not the place to quietly widen it.
|
|
542
|
+
*
|
|
543
|
+
* The optimizer is held to leaving the same record, kill flag and RNG state as what it was
|
|
544
|
+
* given; if it ever throws anyway, that is a bug in it rather than in the effect, so the raw
|
|
545
|
+
* program keeps running and the author is told rather than left with a dead preview.
|
|
546
|
+
*
|
|
547
|
+
* @param {import("../../../src/shade/renderer/particles/isa/ParticleProgram.js").ParticleProgram|null} program
|
|
548
|
+
* @param {ParticleEffectCompilation['diagnostics']} diagnostics appended to
|
|
549
|
+
* @returns {{program: object|null, unoptimized: object|null}}
|
|
550
|
+
*/
|
|
551
|
+
#optimized(program, diagnostics) {
|
|
552
|
+
if (program === null || !this.optimize) {
|
|
553
|
+
return { program, unoptimized: program };
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
try {
|
|
557
|
+
return { program: optimize_compiled_particle_program(program), unoptimized: program };
|
|
558
|
+
} catch (e) {
|
|
559
|
+
diagnostics.push({
|
|
560
|
+
scope: "effect",
|
|
561
|
+
node: -1,
|
|
562
|
+
line: 0,
|
|
563
|
+
message: `optimizer failed, running the unoptimized program: ${e.message}`,
|
|
564
|
+
severity: PARTICLE_GRAPH_ERROR,
|
|
565
|
+
});
|
|
566
|
+
|
|
567
|
+
return { program, unoptimized: program };
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
/**
|
|
572
|
+
* The layout, built once per {@link version}.
|
|
573
|
+
*
|
|
574
|
+
* Held rather than rebuilt only so that a compile and a diagnostics run in the same version
|
|
575
|
+
* share one — {@link #lowerGraphs} caches against the layout it was handed, and two equal
|
|
576
|
+
* layouts are not the same layout. {@link buildLayout} stays the fresh one.
|
|
577
|
+
*
|
|
578
|
+
* @returns {ParticleLayout}
|
|
579
|
+
* @throws as {@link buildLayout}
|
|
580
|
+
*/
|
|
581
|
+
#layout() {
|
|
582
|
+
if (this.#lowering !== null && this.#lowering.version === this.version) {
|
|
583
|
+
return this.#lowering.layout;
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
const layout = this.buildLayout();
|
|
587
|
+
|
|
588
|
+
// parked with a null result: the next #lowerGraphs against this version fills it in, and one
|
|
589
|
+
// that never comes has cost nothing
|
|
590
|
+
this.#lowering = { version: this.version, layout, result: null };
|
|
591
|
+
|
|
592
|
+
return layout;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
/**
|
|
596
|
+
* Check the graphs and, if they hold up, lower them.
|
|
597
|
+
*
|
|
598
|
+
* The one place the graphs are turned into a program, so that asking what is wrong with them and
|
|
599
|
+
* asking what they compile to do the same work rather than two subtly different amounts of it.
|
|
600
|
+
*
|
|
601
|
+
* Memoized against the version and the layout it was handed, for the same reason
|
|
602
|
+
* {@link compile} is: the graph panel asks what is wrong with the graphs on the same change the
|
|
603
|
+
* code panel and the preview ask what they compile to, and lowering a graph with a noise group
|
|
604
|
+
* in it is not cheap enough to do three times.
|
|
605
|
+
*
|
|
606
|
+
* @param {ParticleLayout} layout
|
|
607
|
+
* @returns {{program: import("../../../src/shade/renderer/particles/isa/ParticleProgram.js").ParticleProgram|null, diagnostics: ParticleEffectCompilation['diagnostics']}}
|
|
608
|
+
*/
|
|
609
|
+
#lowerGraphs(layout) {
|
|
610
|
+
if (this.#lowering !== null
|
|
611
|
+
&& this.#lowering.version === this.version
|
|
612
|
+
&& this.#lowering.layout === layout
|
|
613
|
+
&& this.#lowering.result !== null) {
|
|
614
|
+
return this.#lowering.result;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
const result = this.#lowerGraphsUncached(layout);
|
|
618
|
+
|
|
619
|
+
this.#lowering = { version: this.version, layout, result };
|
|
620
|
+
|
|
621
|
+
return result;
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
/**
|
|
625
|
+
* @param {ParticleLayout} layout
|
|
626
|
+
* @returns {{program: import("../../../src/shade/renderer/particles/isa/ParticleProgram.js").ParticleProgram|null, diagnostics: ParticleEffectCompilation['diagnostics']}}
|
|
627
|
+
*/
|
|
628
|
+
#lowerGraphsUncached(layout) {
|
|
629
|
+
const diagnostics = [];
|
|
630
|
+
|
|
631
|
+
for (const scope of Object.values(PARTICLE_GRAPH_PHASE)) {
|
|
632
|
+
// The validator is told which phase it is looking at: some of what is wrong with a
|
|
633
|
+
// graph depends on which of the two it is, and deciding that is its business rather
|
|
634
|
+
// than this document's.
|
|
635
|
+
for (const diagnostic of validate_particle_graph(this[scope], { layout, phase: scope })) {
|
|
636
|
+
diagnostics.push({
|
|
637
|
+
scope,
|
|
638
|
+
node: diagnostic.node,
|
|
639
|
+
line: 0,
|
|
640
|
+
message: diagnostic.message,
|
|
641
|
+
severity: diagnostic.severity,
|
|
642
|
+
});
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
if (diagnostics.some(d => d.severity === PARTICLE_GRAPH_ERROR)) {
|
|
647
|
+
return { program: null, diagnostics };
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
try {
|
|
651
|
+
return {
|
|
652
|
+
program: compile_particle_effect({ init: this.init, update: this.update, layout }),
|
|
653
|
+
diagnostics,
|
|
654
|
+
};
|
|
655
|
+
} catch (e) {
|
|
656
|
+
// What the validator cannot see from the graph alone — running out of registers, most
|
|
657
|
+
// of all — surfaces here, against the effect rather than any one node.
|
|
658
|
+
diagnostics.push({
|
|
659
|
+
scope: "effect",
|
|
660
|
+
node: -1,
|
|
661
|
+
line: 0,
|
|
662
|
+
message: e.message,
|
|
663
|
+
severity: PARTICLE_GRAPH_ERROR,
|
|
664
|
+
});
|
|
665
|
+
|
|
666
|
+
return { program: null, diagnostics };
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
/**
|
|
671
|
+
* What is wrong with the two graphs, whichever layer is authoritative.
|
|
672
|
+
*
|
|
673
|
+
* The graph editor is about the graph. Which representation happens to be running decides what
|
|
674
|
+
* the preview shows, not whether a dangling input in front of the author is worth saying — so
|
|
675
|
+
* this is separate from {@link compile}, which reports on the thing that runs.
|
|
676
|
+
*
|
|
677
|
+
* @param {ParticleLayout} [layout] the schema to check attribute references against; built from
|
|
678
|
+
* the document when not supplied, and skipped when it cannot be built
|
|
679
|
+
* @returns {ParticleEffectCompilation['diagnostics']}
|
|
680
|
+
*/
|
|
681
|
+
graphDiagnostics(layout) {
|
|
682
|
+
let schema = layout;
|
|
683
|
+
|
|
684
|
+
if (schema === undefined) {
|
|
685
|
+
try {
|
|
686
|
+
schema = this.#layout();
|
|
687
|
+
} catch (e) {
|
|
688
|
+
return [{ scope: "effect", node: -1, line: 0, message: e.message, severity: PARTICLE_GRAPH_ERROR }];
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
// copied, because the array behind it is the cached lowering's and a caller sorting or
|
|
693
|
+
// filtering what it was handed would be editing what the next caller is told
|
|
694
|
+
return this.#lowerGraphs(schema).diagnostics.slice();
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
/**
|
|
698
|
+
* Hand the code layer the graphs' output and make it authoritative.
|
|
699
|
+
*
|
|
700
|
+
* A one-way door, and deliberately an explicit one: from here the graphs are no longer what
|
|
701
|
+
* runs, so nothing silently recompiles over the author's instructions.
|
|
702
|
+
*
|
|
703
|
+
* The text is seeded from the *unoptimized* lowering even with {@link optimize} on. The reason
|
|
704
|
+
* to come here is to write something the node library cannot say, and that is done by editing
|
|
705
|
+
* what the graph produced — which means reading it. Folded constants, shared subexpressions and
|
|
706
|
+
* a packed register file are the opposite of readable, and this door does not open the other
|
|
707
|
+
* way, so seeding from them would spend the author's only copy of the legible program. Nothing
|
|
708
|
+
* is lost by it: with the box ticked what they type is optimized on its way to the preview all
|
|
709
|
+
* the same.
|
|
710
|
+
*
|
|
711
|
+
* @returns {ParticleEffectCompilation} the compilation the text was seeded from; when it failed,
|
|
712
|
+
* the source is left alone and the diagnostics say why
|
|
713
|
+
*/
|
|
714
|
+
lowerToAssembly() {
|
|
715
|
+
const previous_source = this.source;
|
|
716
|
+
|
|
717
|
+
this.source = PARTICLE_EFFECT_SOURCE.GRAPH;
|
|
718
|
+
|
|
719
|
+
const compilation = this.compile();
|
|
720
|
+
|
|
721
|
+
if (compilation.program === null) {
|
|
722
|
+
this.source = previous_source;
|
|
723
|
+
|
|
724
|
+
return compilation;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
this.assembly = disassemble_particle_program(compilation.unoptimized);
|
|
728
|
+
this.source = PARTICLE_EFFECT_SOURCE.ASSEMBLY;
|
|
729
|
+
|
|
730
|
+
this.touch();
|
|
731
|
+
|
|
732
|
+
return compilation;
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
/**
|
|
736
|
+
* What the code layer should show: the author's buffer under ASSEMBLY, and what the graphs
|
|
737
|
+
* lower to under GRAPH.
|
|
738
|
+
*
|
|
739
|
+
* Derived rather than cached, so it cannot be a compile behind the graphs. A graph that does not
|
|
740
|
+
* compile has no text to show, and says so where the instructions would be.
|
|
741
|
+
*
|
|
742
|
+
* Under GRAPH this is the program that runs, so with {@link optimize} on it is the optimized
|
|
743
|
+
* one — showing the author the lowering while the preview ran something else would make the
|
|
744
|
+
* panel a lie about the effect. Under ASSEMBLY it stays the author's text whether the box is
|
|
745
|
+
* ticked or not: it is a live buffer they are typing into, and the one thing worse than not
|
|
746
|
+
* seeing the optimized program is having your own text replaced by it mid-edit. What the
|
|
747
|
+
* optimizer made of it shows up in the counts instead.
|
|
748
|
+
*
|
|
749
|
+
* @param {ParticleEffectCompilation} [compilation] a compile already in hand, to save repeating one
|
|
750
|
+
* @returns {string}
|
|
751
|
+
*/
|
|
752
|
+
assemblyText(compilation) {
|
|
753
|
+
if (this.source === PARTICLE_EFFECT_SOURCE.ASSEMBLY) {
|
|
754
|
+
return this.assembly;
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
const result = compilation ?? this.compile();
|
|
758
|
+
|
|
759
|
+
if (result.program === null) {
|
|
760
|
+
return "; the graph does not compile — see the problems below\n";
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
return disassemble_particle_program(result.program);
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
/**
|
|
767
|
+
* Go back to the graphs being what runs. The assembly text is kept — an author who switched by
|
|
768
|
+
* accident has not lost it — but it stops being read.
|
|
769
|
+
*/
|
|
770
|
+
useGraphs() {
|
|
771
|
+
if (this.source === PARTICLE_EFFECT_SOURCE.GRAPH) {
|
|
772
|
+
return;
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
this.source = PARTICLE_EFFECT_SOURCE.GRAPH;
|
|
776
|
+
|
|
777
|
+
this.touch();
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
/**
|
|
781
|
+
* Turn the optimizer on or off. Announces, because it changes what runs.
|
|
782
|
+
*
|
|
783
|
+
* @param {boolean} enabled
|
|
784
|
+
*/
|
|
785
|
+
setOptimize(enabled) {
|
|
786
|
+
if (this.optimize === enabled) {
|
|
787
|
+
return;
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
this.optimize = enabled;
|
|
791
|
+
|
|
792
|
+
this.touch();
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
/**
|
|
796
|
+
* Add an attribute to the per-particle record.
|
|
797
|
+
*
|
|
798
|
+
* @param {string} name
|
|
799
|
+
* @param {number} components 1..4
|
|
800
|
+
* @param {string} [type] what the words are for, see {@link attributes}; omitted, they are
|
|
801
|
+
* whatever `components` of them means and nothing more
|
|
802
|
+
* @throws if the name is taken or the record has no room left
|
|
803
|
+
*/
|
|
804
|
+
addAttribute(name, components, type = undefined) {
|
|
805
|
+
const candidate = this.attributes.concat([{ name, components, type }]);
|
|
806
|
+
|
|
807
|
+
// built rather than assumed: ParticleLayout is where the record's capacity and the
|
|
808
|
+
// duplicate-name rule live, and a layout that throws must not become the document's
|
|
809
|
+
new ParticleLayout(candidate);
|
|
810
|
+
|
|
811
|
+
this.attributes = candidate;
|
|
812
|
+
|
|
813
|
+
this.touch();
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
/**
|
|
817
|
+
* Remove an attribute, and unbind any render channel that pointed at it.
|
|
818
|
+
*
|
|
819
|
+
* Nodes naming it are left alone: they become invalid, which the validator reports against the
|
|
820
|
+
* node, and that is a better outcome than silently rewriting an author's graph.
|
|
821
|
+
*
|
|
822
|
+
* @param {string} name
|
|
823
|
+
* @returns {boolean} false when there was no such attribute
|
|
824
|
+
*/
|
|
825
|
+
removeAttribute(name) {
|
|
826
|
+
const remaining = this.attributes.filter(attribute => attribute.name !== name);
|
|
827
|
+
|
|
828
|
+
if (remaining.length === this.attributes.length) {
|
|
829
|
+
return false;
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
this.attributes = remaining;
|
|
833
|
+
|
|
834
|
+
for (const channel of EMITTER_RENDER_CHANNELS) {
|
|
835
|
+
if (this.emitter.render[channel] === name) {
|
|
836
|
+
delete this.emitter.render[channel];
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
this.touch();
|
|
841
|
+
|
|
842
|
+
return true;
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
/**
|
|
846
|
+
* The emitter settings as {@link ParticleEmitter.from} takes them, with the compiled effect.
|
|
847
|
+
*
|
|
848
|
+
* Render channels naming an attribute the layout no longer has are dropped rather than passed
|
|
849
|
+
* on, because `bind_render` throws on one — and an effect that fails to build over a stale
|
|
850
|
+
* binding is a worse thing to hand an author than one that draws without a colour.
|
|
851
|
+
*
|
|
852
|
+
* @param {{layout: ParticleLayout, program: object}} effect what {@link compile} produced,
|
|
853
|
+
* packaged the way `create_particle_effect` does
|
|
854
|
+
* @returns {object}
|
|
855
|
+
*/
|
|
856
|
+
emitterConfig(effect) {
|
|
857
|
+
const render = {};
|
|
858
|
+
|
|
859
|
+
for (const channel of EMITTER_RENDER_CHANNELS) {
|
|
860
|
+
const attribute = this.emitter.render[channel];
|
|
861
|
+
|
|
862
|
+
if (attribute !== undefined && effect.layout.has(attribute)) {
|
|
863
|
+
render[channel] = attribute;
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
return {
|
|
868
|
+
effect,
|
|
869
|
+
name: this.name,
|
|
870
|
+
spawn_rate: this.emitter.spawn_rate,
|
|
871
|
+
flags: {
|
|
872
|
+
blend: this.emitter.blend,
|
|
873
|
+
projection: this.emitter.projection,
|
|
874
|
+
lighting: this.emitter.lighting,
|
|
875
|
+
soft_depth: this.emitter.soft_depth,
|
|
876
|
+
sort: this.emitter.sort,
|
|
877
|
+
cull: this.emitter.cull,
|
|
878
|
+
},
|
|
879
|
+
bounds: {
|
|
880
|
+
center: this.emitter.bounds_center,
|
|
881
|
+
radius: this.emitter.bounds_radius,
|
|
882
|
+
},
|
|
883
|
+
atlas_region: this.emitter.atlas_region,
|
|
884
|
+
flipbook: this.emitter.flipbook,
|
|
885
|
+
render,
|
|
886
|
+
};
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
/**
|
|
890
|
+
* The emitter's packed flags word, for anything that wants it without building an emitter.
|
|
891
|
+
* @returns {number}
|
|
892
|
+
*/
|
|
893
|
+
emitterFlags() {
|
|
894
|
+
return make_emitter_flags({
|
|
895
|
+
blend: this.emitter.blend,
|
|
896
|
+
projection: this.emitter.projection,
|
|
897
|
+
lighting: this.emitter.lighting,
|
|
898
|
+
soft_depth: this.emitter.soft_depth,
|
|
899
|
+
sort: this.emitter.sort,
|
|
900
|
+
cull: this.emitter.cull,
|
|
901
|
+
});
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
/**
|
|
905
|
+
* @returns {object} the whole document, as JSON
|
|
906
|
+
*/
|
|
907
|
+
toJSON() {
|
|
908
|
+
return {
|
|
909
|
+
name: this.name,
|
|
910
|
+
attributes: this.attributes.map(attribute => ({ ...attribute })),
|
|
911
|
+
groups: this.groups.map(serialize_particle_group),
|
|
912
|
+
init: serialize_particle_graph({ graph: this.init, visual: this.init_visual }),
|
|
913
|
+
update: serialize_particle_graph({ graph: this.update, visual: this.update_visual }),
|
|
914
|
+
emitter: structuredClone(this.emitter),
|
|
915
|
+
source: this.source,
|
|
916
|
+
assembly: this.assembly,
|
|
917
|
+
optimize: this.optimize,
|
|
918
|
+
};
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
/**
|
|
922
|
+
* Replace this document's contents with what the JSON describes.
|
|
923
|
+
*
|
|
924
|
+
* @param {object} json
|
|
925
|
+
* @param {NodeDescriptionVisualRegistry} visualRegistry needed to place nodes whose saved
|
|
926
|
+
* position is missing, and to size the ones that have one
|
|
927
|
+
* @returns {ParticleEffectDocument} this
|
|
928
|
+
*/
|
|
929
|
+
fromJSON(json, visualRegistry) {
|
|
930
|
+
// A load is a hundred and fifty node and connection additions; downstream it is one change
|
|
931
|
+
return this.batch(() => this.#load(json, visualRegistry));
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
/**
|
|
935
|
+
* @param {object} json
|
|
936
|
+
* @param {NodeDescriptionVisualRegistry} visualRegistry
|
|
937
|
+
* @returns {ParticleEffectDocument} this
|
|
938
|
+
*/
|
|
939
|
+
#load(json, visualRegistry) {
|
|
940
|
+
this.name = json.name ?? "effect";
|
|
941
|
+
this.attributes = (json.attributes ?? []).map(attribute => ({ ...attribute }));
|
|
942
|
+
|
|
943
|
+
// `NodeGraph.reset` drops its nodes without announcing them, so the watch list is cleared
|
|
944
|
+
// here rather than being left holding a graph that no longer exists
|
|
945
|
+
for (const node of Array.from(this.#watched)) {
|
|
946
|
+
this.#unwatch(node);
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
// The groups come first: the graphs are written against them by name, and a group's own body
|
|
950
|
+
// may use one written down before it.
|
|
951
|
+
this.groups = [];
|
|
952
|
+
|
|
953
|
+
const resolve = name => this.ownDescription(name);
|
|
954
|
+
|
|
955
|
+
for (const group_json of json.groups ?? []) {
|
|
956
|
+
this.groups.push(deserialize_particle_group({ json: group_json, visualRegistry, resolve }));
|
|
957
|
+
}
|
|
958
|
+
|
|
959
|
+
deserialize_particle_graph({
|
|
960
|
+
json: json.init ?? { nodes: [], connections: [] },
|
|
961
|
+
graph: this.init,
|
|
962
|
+
visual: this.init_visual,
|
|
963
|
+
visualRegistry,
|
|
964
|
+
resolve,
|
|
965
|
+
});
|
|
966
|
+
|
|
967
|
+
deserialize_particle_graph({
|
|
968
|
+
json: json.update ?? { nodes: [], connections: [] },
|
|
969
|
+
graph: this.update,
|
|
970
|
+
visual: this.update_visual,
|
|
971
|
+
visualRegistry,
|
|
972
|
+
resolve,
|
|
973
|
+
});
|
|
974
|
+
|
|
975
|
+
this.emitter = { ...this.emitter, ...structuredClone(json.emitter ?? {}) };
|
|
976
|
+
this.source = json.source === PARTICLE_EFFECT_SOURCE.ASSEMBLY
|
|
977
|
+
? PARTICLE_EFFECT_SOURCE.ASSEMBLY
|
|
978
|
+
: PARTICLE_EFFECT_SOURCE.GRAPH;
|
|
979
|
+
this.assembly = json.assembly ?? "";
|
|
980
|
+
|
|
981
|
+
// absent reads as off, so an effect saved before the optimizer existed opens as the program
|
|
982
|
+
// its author last saw
|
|
983
|
+
this.optimize = json.optimize === true;
|
|
984
|
+
|
|
985
|
+
this.touch();
|
|
986
|
+
|
|
987
|
+
return this;
|
|
988
|
+
}
|
|
989
|
+
}
|