@woosh/meep-engine 3.14.5 → 3.14.6
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/README.md +6 -0
- package/editor/Editor.d.ts +162 -0
- package/editor/Editor.d.ts.map +1 -0
- package/editor/EditorCameraNavigation.d.ts +22 -0
- package/editor/EditorCameraNavigation.d.ts.map +1 -0
- package/editor/EditorKeyMap.d.ts +28 -0
- package/editor/EditorKeyMap.d.ts.map +1 -0
- package/editor/SelectionVisualizer.d.ts +37 -0
- package/editor/SelectionVisualizer.d.ts.map +1 -0
- package/editor/actions/concrete/ActionInvalidateSampler.d.ts +18 -0
- package/editor/actions/concrete/ActionInvalidateSampler.d.ts.map +1 -0
- package/editor/actions/concrete/ActionUpdateTexture.d.ts +12 -0
- package/editor/actions/concrete/ActionUpdateTexture.d.ts.map +1 -0
- package/editor/actions/concrete/ActionUpdateTexture.js +1 -1
- package/editor/actions/concrete/ArrayCopyAction.d.ts +20 -0
- package/editor/actions/concrete/ArrayCopyAction.d.ts.map +1 -0
- package/editor/actions/concrete/ComponentAddAction.d.ts +15 -0
- package/editor/actions/concrete/ComponentAddAction.d.ts.map +1 -0
- package/editor/actions/concrete/ComponentRemoveAction.d.ts +11 -0
- package/editor/actions/concrete/ComponentRemoveAction.d.ts.map +1 -0
- package/editor/actions/concrete/EntityCreateAction.d.ts +18 -0
- package/editor/actions/concrete/EntityCreateAction.d.ts.map +1 -0
- package/editor/actions/concrete/EntityRemoveAction.d.ts +11 -0
- package/editor/actions/concrete/EntityRemoveAction.d.ts.map +1 -0
- package/editor/actions/concrete/ModifyPatchSampler2DAction.d.ts +47 -0
- package/editor/actions/concrete/ModifyPatchSampler2DAction.d.ts.map +1 -0
- package/editor/actions/concrete/ModifyPatchTextureArray2DAction.d.ts +38 -0
- package/editor/actions/concrete/ModifyPatchTextureArray2DAction.d.ts.map +1 -0
- package/editor/actions/concrete/PaintTerrainOverlayAction.d.ts +23 -0
- package/editor/actions/concrete/PaintTerrainOverlayAction.d.ts.map +1 -0
- package/editor/actions/concrete/PatchTerrainHeightAction.d.ts +32 -0
- package/editor/actions/concrete/PatchTerrainHeightAction.d.ts.map +1 -0
- package/editor/actions/concrete/SelectionAddAction.d.ts +19 -0
- package/editor/actions/concrete/SelectionAddAction.d.ts.map +1 -0
- package/editor/actions/concrete/SelectionClearAction.d.ts +9 -0
- package/editor/actions/concrete/SelectionClearAction.d.ts.map +1 -0
- package/editor/actions/concrete/SelectionRemoveAction.d.ts +10 -0
- package/editor/actions/concrete/SelectionRemoveAction.d.ts.map +1 -0
- package/editor/actions/concrete/TransformModifyAction.d.ts +17 -0
- package/editor/actions/concrete/TransformModifyAction.d.ts.map +1 -0
- package/editor/actions/concrete/WriteGridValueAction.d.ts +14 -0
- package/editor/actions/concrete/WriteGridValueAction.d.ts.map +1 -0
- package/editor/camera/camera_framing.d.ts +33 -0
- package/editor/camera/camera_framing.d.ts.map +1 -0
- package/editor/clipboard.d.ts +19 -0
- package/editor/clipboard.d.ts.map +1 -0
- package/editor/ecs/EditorEntity.d.ts +16 -0
- package/editor/ecs/EditorEntity.d.ts.map +1 -0
- package/editor/ecs/EditorEntitySystem.d.ts +8 -0
- package/editor/ecs/EditorEntitySystem.d.ts.map +1 -0
- package/editor/ecs/component/TypeEditor.d.ts +7 -1
- package/editor/ecs/component/TypeEditor.d.ts.map +1 -1
- package/editor/ecs/component/TypeEditor.js +5 -0
- package/editor/ecs/component/editors/ColorEditor.d.ts +7 -0
- package/editor/ecs/component/editors/ColorEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/HTMLElementEditor.d.ts +7 -0
- package/editor/ecs/component/editors/HTMLElementEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ImagePathEditor.d.ts +7 -0
- package/editor/ecs/component/editors/ImagePathEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/LargeStringEditor.d.ts +16 -0
- package/editor/ecs/component/editors/LargeStringEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/NumericIntervalEditor.d.ts +7 -0
- package/editor/ecs/component/editors/NumericIntervalEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ObservedBooleanEditor.d.ts +7 -0
- package/editor/ecs/component/editors/ObservedBooleanEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ObservedEnumEditor.d.ts +7 -0
- package/editor/ecs/component/editors/ObservedEnumEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ObservedIntegerEditor.d.ts +7 -0
- package/editor/ecs/component/editors/ObservedIntegerEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ObservedStringEditor.d.ts +7 -0
- package/editor/ecs/component/editors/ObservedStringEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/Sampler2DEditor.d.ts +7 -0
- package/editor/ecs/component/editors/Sampler2DEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/collection/ListEditor.d.ts +8 -0
- package/editor/ecs/component/editors/collection/ListEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/common/BitFlagsEditor.d.ts +12 -0
- package/editor/ecs/component/editors/common/BitFlagsEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/common/EnumEditor.d.ts +8 -0
- package/editor/ecs/component/editors/common/EnumEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/common/makeV3_editor.d.ts +15 -0
- package/editor/ecs/component/editors/common/makeV3_editor.d.ts.map +1 -0
- package/editor/ecs/component/editors/common/noEditor.d.ts +3 -0
- package/editor/ecs/component/editors/common/noEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/common/two_way_sync.d.ts +22 -0
- package/editor/ecs/component/editors/common/two_way_sync.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/GridObstacleEditor.d.ts +7 -0
- package/editor/ecs/component/editors/ecs/GridObstacleEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/MinimapMarkerEditor.d.ts +14 -0
- package/editor/ecs/component/editors/ecs/MinimapMarkerEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts +20 -0
- package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts +12 -0
- package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts +14 -0
- package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts +52 -0
- package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts +47 -0
- package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/SGMeshEditor.d.ts +21 -0
- package/editor/ecs/component/editors/ecs/SGMeshEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/ShadedGeometryEditor.d.ts +26 -0
- package/editor/ecs/component/editors/ecs/ShadedGeometryEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts +16 -0
- package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/Trail2DEditor.d.ts +15 -0
- package/editor/ecs/component/editors/ecs/Trail2DEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +42 -0
- package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/TransformEditor.d.ts +20 -0
- package/editor/ecs/component/editors/ecs/TransformEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/buildGridObstaclePreview.d.ts +8 -0
- package/editor/ecs/component/editors/ecs/buildGridObstaclePreview.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/terrain/SplatMappingEditor.d.ts +19 -0
- package/editor/ecs/component/editors/ecs/terrain/SplatMappingEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.d.ts +27 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainLayerEditor.d.ts +16 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainLayerEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainLayersEditor.d.ts +19 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainLayersEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainOverlayEditor.d.ts +18 -0
- package/editor/ecs/component/editors/ecs/terrain/TerrainOverlayEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/geom/QuaternionEditor.d.ts +6 -0
- package/editor/ecs/component/editors/geom/QuaternionEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/geom/Vector1Editor.d.ts +7 -0
- package/editor/ecs/component/editors/geom/Vector1Editor.d.ts.map +1 -0
- package/editor/ecs/component/editors/geom/Vector2Editor.d.ts +6 -0
- package/editor/ecs/component/editors/geom/Vector2Editor.d.ts.map +1 -0
- package/editor/ecs/component/editors/geom/Vector3Editor.d.ts +6 -0
- package/editor/ecs/component/editors/geom/Vector3Editor.d.ts.map +1 -0
- package/editor/ecs/component/editors/geom/Vector4Editor.d.ts +6 -0
- package/editor/ecs/component/editors/geom/Vector4Editor.d.ts.map +1 -0
- package/editor/ecs/component/editors/primitive/ArrayEditor.d.ts +8 -0
- package/editor/ecs/component/editors/primitive/ArrayEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/primitive/BooleanEditor.d.ts +7 -0
- package/editor/ecs/component/editors/primitive/BooleanEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/primitive/FunctionEditor.d.ts +7 -0
- package/editor/ecs/component/editors/primitive/FunctionEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/primitive/NumberEditor.d.ts +8 -0
- package/editor/ecs/component/editors/primitive/NumberEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/primitive/StringEditor.d.ts +7 -0
- package/editor/ecs/component/editors/primitive/StringEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/shade/MeshletGeometryEditor.d.ts +28 -0
- package/editor/ecs/component/editors/shade/MeshletGeometryEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/shade/ShadeImageEditor.d.ts +29 -0
- package/editor/ecs/component/editors/shade/ShadeImageEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/shade/ShadeMaterialEditor.d.ts +28 -0
- package/editor/ecs/component/editors/shade/ShadeMaterialEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/shade/ShadeTextureEditor.d.ts +41 -0
- package/editor/ecs/component/editors/shade/ShadeTextureEditor.d.ts.map +1 -0
- package/editor/ecs/component/editors/shade/StandardShadeMaterialEditor.d.ts +31 -0
- package/editor/ecs/component/editors/shade/StandardShadeMaterialEditor.d.ts.map +1 -0
- package/editor/ecs/component/prototypeObjectEditor.d.ts +2 -0
- package/editor/ecs/component/prototypeObjectEditor.d.ts.map +1 -0
- package/editor/ecs/component/registerBasicTypeEditors.d.ts +11 -0
- package/editor/ecs/component/registerBasicTypeEditors.d.ts.map +1 -0
- package/editor/ecs/component/registerEngineComponentEditors.d.ts +8 -0
- package/editor/ecs/component/registerEngineComponentEditors.d.ts.map +1 -0
- package/editor/enableEditor.d.ts +14 -0
- package/editor/enableEditor.d.ts.map +1 -0
- package/editor/entity_world_bounds.d.ts +17 -0
- package/editor/entity_world_bounds.d.ts.map +1 -0
- package/editor/library/MeshLibrary.d.ts +13 -0
- package/editor/library/MeshLibrary.d.ts.map +1 -0
- package/editor/particles/lut_ops.d.ts +34 -0
- package/editor/particles/lut_ops.d.ts.map +1 -0
- package/editor/particles/particleEditEvents.d.ts +11 -0
- package/editor/particles/particleEditEvents.d.ts.map +1 -0
- package/editor/particles/rebuildParticleEmitter.d.ts +11 -0
- package/editor/particles/rebuildParticleEmitter.d.ts.map +1 -0
- package/editor/persistence/EditorLayoutStore.d.ts +30 -0
- package/editor/persistence/EditorLayoutStore.d.ts.map +1 -0
- package/editor/persistence/SceneMetadata.d.ts +38 -0
- package/editor/persistence/SceneMetadata.d.ts.map +1 -0
- package/editor/persistence/SceneSlotManager.d.ts +40 -0
- package/editor/persistence/SceneSlotManager.d.ts.map +1 -0
- package/editor/persistence/buildNewSceneDataset.d.ts +10 -0
- package/editor/persistence/buildNewSceneDataset.d.ts.map +1 -0
- package/editor/persistence/files.d.ts +24 -0
- package/editor/persistence/files.d.ts.map +1 -0
- package/editor/persistence/scene_import.d.ts +45 -0
- package/editor/persistence/scene_import.d.ts.map +1 -0
- package/editor/persistence/scene_serialization.d.ts +36 -0
- package/editor/persistence/scene_serialization.d.ts.map +1 -0
- package/editor/persistence/string_buffer_codec.d.ts +20 -0
- package/editor/persistence/string_buffer_codec.d.ts.map +1 -0
- package/editor/process/DisableGameUIProcess.d.ts +8 -0
- package/editor/process/DisableGameUIProcess.d.ts.map +1 -0
- package/editor/process/EditorProcess.d.ts +19 -0
- package/editor/process/EditorProcess.d.ts.map +1 -0
- package/editor/process/GridDisplayProcess.d.ts +35 -0
- package/editor/process/GridDisplayProcess.d.ts.map +1 -0
- package/editor/process/ObstacleGridDisplayProcess.d.ts +13 -0
- package/editor/process/ObstacleGridDisplayProcess.d.ts.map +1 -0
- package/editor/process/ParticleEmitterRebuildProcess.d.ts +66 -0
- package/editor/process/ParticleEmitterRebuildProcess.d.ts.map +1 -0
- package/editor/process/ProcessEngine.d.ts +30 -0
- package/editor/process/ProcessEngine.d.ts.map +1 -0
- package/editor/process/SymbolicDisplayProcess.d.ts +23 -0
- package/editor/process/SymbolicDisplayProcess.d.ts.map +1 -0
- package/editor/process/symbolic/AudioEmitterSymbolicDisplay.d.ts +17 -0
- package/editor/process/symbolic/AudioEmitterSymbolicDisplay.d.ts.map +1 -0
- package/editor/process/symbolic/CameraSymbolicDisplay.d.ts +25 -0
- package/editor/process/symbolic/CameraSymbolicDisplay.d.ts.map +1 -0
- package/editor/process/symbolic/GridPositionSymbolicDisplay.d.ts +19 -0
- package/editor/process/symbolic/GridPositionSymbolicDisplay.d.ts.map +1 -0
- package/editor/process/symbolic/LightSymbolicDisplay.d.ts +19 -0
- package/editor/process/symbolic/LightSymbolicDisplay.d.ts.map +1 -0
- package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts +18 -0
- package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts.map +1 -0
- package/editor/process/symbolic/PathSymbolicDisplay.d.ts +20 -0
- package/editor/process/symbolic/PathSymbolicDisplay.d.ts.map +1 -0
- package/editor/process/symbolic/PositionedMarkerSymbolicDisplay.d.ts +25 -0
- package/editor/process/symbolic/PositionedMarkerSymbolicDisplay.d.ts.map +1 -0
- package/editor/process/symbolic/SymbolicDisplay.d.ts +48 -0
- package/editor/process/symbolic/SymbolicDisplay.d.ts.map +1 -0
- package/editor/process/symbolic/gizmo_draw_wire_box_oriented.d.ts +13 -0
- package/editor/process/symbolic/gizmo_draw_wire_box_oriented.d.ts.map +1 -0
- package/editor/process/symbolic/gizmo_draw_wire_circle.d.ts +18 -0
- package/editor/process/symbolic/gizmo_draw_wire_circle.d.ts.map +1 -0
- package/editor/prototypeEditorShell.d.ts +13 -0
- package/editor/prototypeEditorShell.d.ts.map +1 -0
- package/editor/selection/editor_pick.d.ts +43 -0
- package/editor/selection/editor_pick.d.ts.map +1 -0
- package/editor/selection/screen_rect_frustum.d.ts +32 -0
- package/editor/selection/screen_rect_frustum.d.ts.map +1 -0
- package/editor/templates/entity_templates.d.ts +19 -0
- package/editor/templates/entity_templates.d.ts.map +1 -0
- package/editor/tools/GridPaintTool.d.ts +18 -0
- package/editor/tools/GridPaintTool.d.ts.map +1 -0
- package/editor/tools/SelectionTool.d.ts +38 -0
- package/editor/tools/SelectionTool.d.ts.map +1 -0
- package/editor/tools/SelectionTool.js +2 -2
- package/editor/tools/TransformToolV2.d.ts +70 -0
- package/editor/tools/TransformToolV2.d.ts.map +1 -0
- package/editor/tools/engine/Tool.d.ts +88 -0
- package/editor/tools/engine/Tool.d.ts.map +1 -0
- package/editor/tools/engine/ToolEngine.d.ts +22 -0
- package/editor/tools/engine/ToolEngine.d.ts.map +1 -0
- package/editor/tools/engine/ToolState.d.ts +7 -0
- package/editor/tools/engine/ToolState.d.ts.map +1 -0
- package/editor/tools/paint/TerrainHeightPaintTool.d.ts +18 -0
- package/editor/tools/paint/TerrainHeightPaintTool.d.ts.map +1 -0
- package/editor/tools/paint/TerrainPaintTool.d.ts +82 -0
- package/editor/tools/paint/TerrainPaintTool.d.ts.map +1 -0
- package/editor/tools/paint/TerrainTexturePaintTool.d.ts +19 -0
- package/editor/tools/paint/TerrainTexturePaintTool.d.ts.map +1 -0
- package/editor/tools/v2/BlenderCameraOrientationGizmo.d.ts +139 -0
- package/editor/tools/v2/BlenderCameraOrientationGizmo.d.ts.map +1 -0
- package/editor/tools/v2/GizmoNode.d.ts +21 -0
- package/editor/tools/v2/GizmoNode.d.ts.map +1 -0
- package/editor/tools/v2/TransformControls.d.ts +219 -0
- package/editor/tools/v2/TransformControls.d.ts.map +1 -0
- package/editor/tools/v2/TransformMode.d.ts +7 -0
- package/editor/tools/v2/TransformMode.d.ts.map +1 -0
- package/editor/tools/v2/handle/gizmo_drag_plane.d.ts +37 -0
- package/editor/tools/v2/handle/gizmo_drag_plane.d.ts.map +1 -0
- package/editor/tools/v2/handle/gizmo_draw.d.ts +14 -0
- package/editor/tools/v2/handle/gizmo_draw.d.ts.map +1 -0
- package/editor/tools/v2/handle/gizmo_handles.d.ts +160 -0
- package/editor/tools/v2/handle/gizmo_handles.d.ts.map +1 -0
- package/editor/tools/v2/handle/gizmo_ray_shapes.d.ts +103 -0
- package/editor/tools/v2/handle/gizmo_ray_shapes.d.ts.map +1 -0
- package/editor/view/GridPickCoordinateView.d.ts +22 -0
- package/editor/view/GridPickCoordinateView.d.ts.map +1 -0
- package/editor/view/ecs/ComponentControlView.d.ts +24 -0
- package/editor/view/ecs/ComponentControlView.d.ts.map +1 -0
- package/editor/view/ecs/EntityEditor.d.ts +25 -0
- package/editor/view/ecs/EntityEditor.d.ts.map +1 -0
- package/editor/view/ecs/EntityList.d.ts +22 -0
- package/editor/view/ecs/EntityList.d.ts.map +1 -0
- package/editor/view/ecs/HierarchicalEntityListView.d.ts +25 -0
- package/editor/view/ecs/HierarchicalEntityListView.d.ts.map +1 -0
- package/editor/view/ecs/components/DatGuiController.d.ts +2 -0
- package/editor/view/ecs/components/DatGuiController.d.ts.map +1 -0
- package/editor/view/ecs/components/color/GaugeView.d.ts +9 -5
- package/editor/view/ecs/components/color/GaugeView.d.ts.map +1 -1
- package/editor/view/ecs/components/color/GaugeView.js +4 -4
- package/editor/view/ecs/components/common/NumberController.d.ts +9 -5
- package/editor/view/ecs/components/common/NumberController.d.ts.map +1 -1
- package/editor/view/ecs/components/common/NumberController.js +4 -4
- package/editor/view/ecs/components/common/NumericIntervalController.d.ts +10 -0
- package/editor/view/ecs/components/common/NumericIntervalController.d.ts.map +1 -0
- package/editor/view/ecs/components/common/TextController.d.ts.map +1 -1
- package/editor/view/library/MeshLibraryView.d.ts +16 -0
- package/editor/view/library/MeshLibraryView.d.ts.map +1 -0
- package/editor/view/library/mesh_library_drag.d.ts +21 -0
- package/editor/view/library/mesh_library_drag.d.ts.map +1 -0
- package/editor/view/library/model_thumbnail_source.d.ts +12 -0
- package/editor/view/library/model_thumbnail_source.d.ts.map +1 -0
- package/editor/view/makeEntityDecorators.d.ts +6 -0
- package/editor/view/makeEntityDecorators.d.ts.map +1 -0
- package/editor/view/node-graph/NodeGraphCamera.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphSelection.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeView.d.ts.map +1 -1
- package/editor/view/node-graph/PortView.d.ts.map +1 -1
- package/editor/view/node-graph/actions/ConnectionCreateAction.d.ts.map +1 -1
- package/editor/view/node-graph/actions/ConnectionDeleteAction.d.ts.map +1 -1
- package/editor/view/node-graph/actions/NodeDeleteAction.d.ts.map +1 -1
- package/editor/view/node-graph/actions/NodeParameterSetAction.d.ts.map +1 -1
- package/editor/view/node-graph/actions/NodesMoveAction.d.ts.map +1 -1
- package/editor/view/node-graph/actions/SelectionSetAction.d.ts.map +1 -1
- package/editor/view/node-graph/connection_wire_geometry.d.ts.map +1 -1
- package/editor/view/particles/ColorLutGradientView.d.ts +19 -0
- package/editor/view/particles/ColorLutGradientView.d.ts.map +1 -0
- package/editor/view/particles/ScalarLutCurveView.d.ts +19 -0
- package/editor/view/particles/ScalarLutCurveView.d.ts.map +1 -0
- package/editor/view/prepareMeshLibrary.d.ts +7 -0
- package/editor/view/prepareMeshLibrary.d.ts.map +1 -0
- package/editor/view/process/ProcessView.d.ts +14 -0
- package/editor/view/process/ProcessView.d.ts.map +1 -0
- package/editor/view/shell/EditorShellView.d.ts +18 -0
- package/editor/view/shell/EditorShellView.d.ts.map +1 -0
- package/editor/view/shell/SceneTreePanelView.d.ts +17 -0
- package/editor/view/shell/SceneTreePanelView.d.ts.map +1 -0
- package/editor/view/shell/ViewportPanelView.d.ts +18 -0
- package/editor/view/shell/ViewportPanelView.d.ts.map +1 -0
- package/editor/view/tools/ToolSettingsView.d.ts +22 -0
- package/editor/view/tools/ToolSettingsView.d.ts.map +1 -0
- package/editor/view/tools/ToolView.d.ts +13 -0
- package/editor/view/tools/ToolView.d.ts.map +1 -0
- package/editor/view/v2/SplitView.d.ts +2 -0
- package/editor/view/v2/SplitView.d.ts.map +1 -0
- package/package.json +9 -11
- package/samples/engine/README.md +113 -0
- package/samples/engine/first-scene/index.html +32 -0
- package/samples/engine/first-scene/main.js +152 -0
- package/src/core/assert.d.ts +2 -2
- package/src/core/binary/BitSet.d.ts +2 -2
- package/src/core/binary/BitSet.d.ts.map +1 -1
- package/src/core/binary/BitSet.js +1 -1
- package/src/core/bvh2/bvh3/BVH.d.ts +4 -0
- package/src/core/bvh2/bvh3/BVH.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/BVH.js +4 -0
- package/src/core/bvh2/bvh3/BvhClient.d.ts +4 -0
- package/src/core/bvh2/bvh3/BvhClient.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/BvhClient.js +4 -0
- package/src/core/collection/array/array_sort_quick.d.ts +1 -1
- package/src/core/collection/list/List.d.ts +7 -3
- package/src/core/collection/list/List.d.ts.map +1 -1
- package/src/core/collection/list/List.js +6 -2
- package/src/core/collection/table/RowFirstTableSpec.d.ts.map +1 -1
- package/src/core/collection/table/RowFirstTableSpec.js +0 -4
- package/src/core/color/Color.d.ts +1 -0
- package/src/core/color/Color.d.ts.map +1 -1
- package/src/core/color/Color.js +4 -0
- package/src/core/events/signal/SignalBinding.d.ts +4 -0
- package/src/core/events/signal/SignalBinding.d.ts.map +1 -1
- package/src/core/events/signal/SignalBinding.js +4 -0
- package/src/core/geom/2d/quad-tree/QuadTreeDatum.d.ts +5 -1
- package/src/core/geom/2d/quad-tree/QuadTreeDatum.d.ts.map +1 -1
- package/src/core/geom/2d/quad-tree/QuadTreeDatum.js +4 -0
- package/src/core/geom/3d/SurfacePoint3.d.ts +2 -2
- package/src/core/geom/3d/SurfacePoint3.d.ts.map +1 -1
- package/src/core/geom/3d/SurfacePoint3.js +1 -1
- package/src/core/geom/3d/aabb/AABB3.d.ts +63 -7
- package/src/core/geom/3d/aabb/AABB3.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/AABB3.js +17 -3
- package/src/core/geom/3d/plane/plane3_compute_intersection_objects.js +2 -2
- package/src/core/geom/3d/ray/Ray3.d.ts +4 -4
- package/src/core/geom/3d/shape/AbstractShape3D.d.ts +10 -3
- package/src/core/geom/3d/shape/AbstractShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/AbstractShape3D.js +9 -2
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts +2 -2
- package/src/core/geom/3d/sphere/harmonics/sh3_rotate.d.ts +1 -1
- package/src/core/geom/Vector1.d.ts +4 -0
- package/src/core/geom/Vector1.d.ts.map +1 -1
- package/src/core/geom/Vector1.js +4 -0
- package/src/core/geom/Vector2.d.ts +4 -0
- package/src/core/geom/Vector2.d.ts.map +1 -1
- package/src/core/geom/Vector2.js +4 -0
- package/src/core/geom/Vector3.d.ts +4 -0
- package/src/core/geom/Vector3.d.ts.map +1 -1
- package/src/core/geom/Vector3.js +4 -0
- package/src/core/geom/Vector4.d.ts +4 -0
- package/src/core/geom/Vector4.d.ts.map +1 -1
- package/src/core/geom/Vector4.js +4 -0
- package/src/core/geom/packing/max-rect/MaxRectanglesPacker.d.ts +6 -2
- package/src/core/geom/packing/max-rect/MaxRectanglesPacker.d.ts.map +1 -1
- package/src/core/geom/packing/max-rect/MaxRectanglesPacker.js +4 -0
- package/src/core/geom/packing/miniball/Subspan.d.ts +4 -4
- package/src/core/geom/packing/miniball/Subspan.d.ts.map +1 -1
- package/src/core/geom/packing/miniball/Subspan.js +2 -2
- package/src/core/math/interval/NumericInterval.d.ts +4 -0
- package/src/core/math/interval/NumericInterval.d.ts.map +1 -1
- package/src/core/math/interval/NumericInterval.js +4 -0
- package/src/core/math/random/roundFair.d.ts +2 -2
- package/src/core/math/random/roundFair.d.ts.map +1 -1
- package/src/core/math/random/roundFair.js +1 -1
- package/src/core/model/BoundedValue.d.ts +4 -0
- package/src/core/model/BoundedValue.d.ts.map +1 -1
- package/src/core/model/BoundedValue.js +4 -0
- package/src/core/model/ObservedBoolean.d.ts +4 -0
- package/src/core/model/ObservedBoolean.d.ts.map +1 -1
- package/src/core/model/ObservedBoolean.js +4 -0
- package/src/core/model/ObservedInteger.d.ts +4 -0
- package/src/core/model/ObservedInteger.d.ts.map +1 -1
- package/src/core/model/ObservedInteger.js +4 -0
- package/src/core/model/ObservedString.d.ts +4 -0
- package/src/core/model/ObservedString.d.ts.map +1 -1
- package/src/core/model/ObservedString.js +4 -0
- package/src/core/model/stat/Stat.d.ts +7 -3
- package/src/core/model/stat/Stat.d.ts.map +1 -1
- package/src/core/model/stat/Stat.js +4 -0
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +65 -0
- package/src/engine/EngineHarness.d.ts +8 -1
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +10 -14
- package/src/engine/animation/clip/ecd_bind_animation_curve.d.ts +2 -2
- package/src/engine/animation/clip/ecd_bind_animation_curve.d.ts.map +1 -1
- package/src/engine/animation/clip/ecd_bind_animation_curve.js +4 -4
- package/src/engine/asset/loaders/async_traverse_three_object.d.ts +2 -2
- package/src/engine/asset/loaders/async_traverse_three_object.d.ts.map +1 -1
- package/src/engine/asset/loaders/async_traverse_three_object.js +1 -1
- package/src/engine/asset/loaders/image/codec/ThreadedImageDecoder.d.ts +7 -3
- package/src/engine/asset/loaders/image/codec/ThreadedImageDecoder.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/codec/ThreadedImageDecoder.js +33 -3
- package/src/engine/control/first-person/DESIGN.md +20 -2
- package/src/engine/control/first-person/DESIGN_COLLISION.md +17 -0
- package/src/engine/control/first-person/collision/KinematicMover.d.ts +58 -11
- package/src/engine/control/first-person/collision/KinematicMover.d.ts.map +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.js +97 -20
- package/src/engine/ecs/Entity.js +1 -1
- package/src/engine/ecs/EntityComponentDataset.d.ts +2 -2
- package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
- package/src/engine/ecs/EntityComponentDataset.js +1 -1
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +27 -3
- package/src/engine/ecs/animation/Animation.d.ts +17 -3
- package/src/engine/ecs/animation/Animation.d.ts.map +1 -1
- package/src/engine/ecs/animation/Animation.js +26 -6
- package/src/engine/ecs/terrain/TerrainPreview.d.ts +4 -0
- package/src/engine/ecs/terrain/TerrainPreview.d.ts.map +1 -1
- package/src/engine/ecs/terrain/TerrainPreview.js +4 -0
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts +4 -4
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +2 -2
- package/src/engine/ecs/terrain/ecs/makeTerrainWorkerProxy.d.ts +3 -2
- package/src/engine/ecs/terrain/ecs/makeTerrainWorkerProxy.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/makeTerrainWorkerProxy.js +25 -2
- package/src/engine/ecs/transform/Transform64.d.ts +4 -4
- package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform64.js +2 -2
- package/src/engine/graphics/ecs/decal/v2/Decal.d.ts +26 -0
- package/src/engine/graphics/ecs/decal/v2/Decal.d.ts.map +1 -1
- package/src/engine/graphics/ecs/decal/v2/Decal.js +26 -0
- package/src/engine/graphics/ecs/light/Light.d.ts +38 -1
- package/src/engine/graphics/ecs/light/Light.d.ts.map +1 -1
- package/src/engine/graphics/ecs/light/Light.js +51 -1
- package/src/engine/graphics/ecs/mesh/copyToVector3.d.ts +3 -3
- package/src/engine/graphics/ecs/mesh/copyToVector3.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh/copyToVector3.js +2 -2
- package/src/engine/graphics/ecs/mesh/setMesh.d.ts +2 -2
- package/src/engine/graphics/ecs/mesh/setMesh.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh/setMesh.js +1 -1
- package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts +2 -2
- package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts.map +1 -1
- package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.js +1 -1
- package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts +3 -3
- package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts.map +1 -1
- package/src/engine/graphics/geometry/buffered/computeGeometryEquality.js +2 -2
- package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts +2 -2
- package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts.map +1 -1
- package/src/engine/graphics/geometry/buffered/computeGeometryHash.js +1 -1
- package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts +2 -2
- package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts.map +1 -1
- package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.js +1 -1
- package/src/engine/graphics/geometry/compute_geometry_polycount.d.ts +2 -2
- package/src/engine/graphics/geometry/compute_geometry_polycount.d.ts.map +1 -1
- package/src/engine/graphics/geometry/compute_geometry_polycount.js +1 -1
- package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts +3 -3
- package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts.map +1 -1
- package/src/engine/graphics/geometry/ribbon/copyAttributeV3.js +2 -2
- package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts +4 -4
- package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts.map +1 -1
- package/src/engine/graphics/geometry/ribbon/copyAttributeValue.js +3 -3
- package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts +3 -3
- package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts.map +1 -1
- package/src/engine/graphics/geometry/ribbon/equalAttributeV3.js +2 -2
- package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts +4 -4
- package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts.map +1 -1
- package/src/engine/graphics/geometry/ribbon/equalAttributeValue.js +3 -3
- package/src/engine/graphics/geometry/scaleGeometryToBox.d.ts +2 -2
- package/src/engine/graphics/geometry/scaleGeometryToBox.d.ts.map +1 -1
- package/src/engine/graphics/geometry/scaleGeometryToBox.js +1 -1
- package/src/engine/graphics/impostors/card_cluster/FacePlaneAssignment.d.ts +2 -2
- package/src/engine/graphics/impostors/card_cluster/FacePlaneAssignment.d.ts.map +1 -1
- package/src/engine/graphics/impostors/card_cluster/FacePlaneAssignment.js +1 -1
- package/src/engine/graphics/impostors/octahedral/ImpostorDescription.d.ts +2 -2
- package/src/engine/graphics/impostors/octahedral/ImpostorDescription.d.ts.map +1 -1
- package/src/engine/graphics/impostors/octahedral/ImpostorDescription.js +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +4 -12
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +2 -2
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts +5 -20
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts +24 -24
- package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +16 -16
- package/src/engine/graphics/render/layers/RenderLayer.d.ts +4 -4
- package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +1 -1
- package/src/engine/graphics/render/layers/RenderLayer.js +2 -2
- package/src/engine/graphics/render/make_bvh_visibility_builder.js +1 -1
- package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts +1 -1
- package/src/engine/graphics/render/visibility/VisibilityComputer.js +1 -1
- package/src/engine/graphics/texture/computeThreeTextureInternalFormatFromDataType.d.ts +2 -2
- package/src/engine/graphics/texture/computeThreeTextureInternalFormatFromDataType.d.ts.map +1 -1
- package/src/engine/graphics/texture/computeThreeTextureInternalFormatFromDataType.js +1 -1
- package/src/engine/graphics3/DecalSystem.d.ts +8 -0
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem.js +8 -0
- package/src/engine/graphics3/GraphicsEngine.d.ts +19 -8
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine.js +22 -11
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem.js +11 -1
- package/src/engine/input/devices/gamepad/GamepadStickCalibration.d.ts +4 -0
- package/src/engine/input/devices/gamepad/GamepadStickCalibration.d.ts.map +1 -1
- package/src/engine/input/devices/gamepad/GamepadStickCalibration.js +4 -0
- package/src/engine/navigation/mesh/NavigationMesh.d.ts +90 -9
- package/src/engine/navigation/mesh/NavigationMesh.d.ts.map +1 -1
- package/src/engine/navigation/mesh/NavigationMesh.js +80 -8
- package/src/engine/network/NetworkSession.d.ts +60 -0
- package/src/engine/network/NetworkSession.d.ts.map +1 -1
- package/src/engine/network/NetworkSession.js +141 -1
- package/src/engine/network/replication/Replicator.d.ts +18 -0
- package/src/engine/network/replication/Replicator.d.ts.map +1 -1
- package/src/engine/network/replication/Replicator.js +98 -0
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +27 -0
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +27 -0
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/sound/SoundEngine.d.ts +24 -0
- package/src/engine/sound/SoundEngine.d.ts.map +1 -1
- package/src/engine/sound/SoundEngine.js +29 -11
- package/src/engine/sound/simulation/configureAcousticSimulation.d.ts +12 -4
- package/src/engine/sound/simulation/configureAcousticSimulation.d.ts.map +1 -1
- package/src/engine/sound/simulation/configureAcousticSimulation.js +10 -4
- package/src/engine/sound/simulation/ecs/AcousticProbeFieldSystem.d.ts +3 -1
- package/src/engine/sound/simulation/ecs/AcousticProbeFieldSystem.d.ts.map +1 -1
- package/src/engine/sound/simulation/ecs/AcousticProbeFieldSystem.js +27 -1
- package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts +34 -0
- package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts.map +1 -1
- package/src/engine/sound/simulation/render/ProbeReverbRenderer.js +61 -2
- package/src/engine/sound/simulation/render/reverbImpulseResponse.d.ts.map +1 -1
- package/src/engine/sound/simulation/render/reverbImpulseResponse.js +9 -0
- package/src/shade/playground/particle_system/README.md +14 -3
- package/src/shade/playground/particle_system/index.html +1 -0
- package/src/shade/playground/particle_system/main.js +15 -2
- package/src/shade/playground/particle_system/particle_scene.d.ts +11 -2
- package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_scene.js +126 -9
- package/src/shade/renderer/GraphicsContext.d.ts +1 -0
- package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
- package/src/shade/renderer/GraphicsContext.js +4 -0
- package/src/shade/renderer/Renderer.d.ts +1 -1
- package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts +13 -0
- package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts.map +1 -1
- package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.js +13 -0
- package/src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.d.ts +18 -0
- package/src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.js +18 -0
- package/src/shade/renderer/global_illumination/lpv/LightProbeVolume.d.ts +4 -0
- package/src/shade/renderer/global_illumination/lpv/LightProbeVolume.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/LightProbeVolume.js +4 -0
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts +12 -0
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.js +13 -0
- package/src/shade/renderer/light/environment/rgbe/parse_rgbe.d.ts +1 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/particles/DESIGN.md +66 -15
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +29 -5
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +61 -6
- package/src/shade/renderer/particles/ParticleConstants.d.ts +31 -0
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +33 -0
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +61 -0
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -0
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +179 -0
- package/src/shade/renderer/particles/coherence/particle_program_buckets.d.ts +63 -0
- package/src/shade/renderer/particles/coherence/particle_program_buckets.d.ts.map +1 -0
- package/src/shade/renderer/particles/coherence/particle_program_buckets.js +116 -0
- package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts +59 -0
- package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts.map +1 -0
- package/src/shade/renderer/particles/coherence/shader_particle_bucket.js +344 -0
- package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts +27 -5
- package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.js +27 -5
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts +13 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.js +15 -1
- package/src/shade/renderer/particles/data/chunk_particle_emitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/chunk_particle_emitter.js +3 -0
- package/src/shade/renderer/particles/graph_particles.d.ts +39 -11
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +60 -20
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +8 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +8 -1
- package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +22 -2
- package/src/shade/renderer/particles/runtime/ProgramArena.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ProgramArena.js +54 -3
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +32 -14
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts +2 -23
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +40 -11
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts +6 -17
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.js +60 -9
- package/src/shade/wgsl/emulator/CPUBitmapData.d.ts +1 -1
- package/src/view/DOM.d.ts +69 -0
- package/src/view/DOM.d.ts.map +1 -0
- package/src/view/DOM.js +2 -1
- package/src/view/common/LocalizedLabelView.d.ts +50 -0
- package/src/view/common/LocalizedLabelView.d.ts.map +1 -0
- package/src/view/controller/controls/GuiControl.d.ts +19 -0
- package/src/view/controller/controls/GuiControl.d.ts.map +1 -0
- package/src/view/elements/FrameRateView.d.ts +45 -0
- package/src/view/elements/FrameRateView.d.ts.map +1 -0
- package/src/view/elements/FrameRateView.js +131 -0
- package/src/view/elements/SliderView.d.ts +37 -0
- package/src/view/elements/SliderView.d.ts.map +1 -0
- package/src/view/elements/SliderView.js +71 -0
- package/src/view/elements/navigation/ViewStack.d.ts +1 -1
- package/src/view/elements/navigation/ViewStack.js +1 -1
- package/src/view/elements/notify/NotificationView.d.ts +22 -0
- package/src/view/elements/notify/NotificationView.d.ts.map +1 -0
- package/src/view/tooltip/TooltipView.d.ts +5 -1
- package/src/view/tooltip/TooltipView.d.ts.map +1 -1
- package/src/view/tooltip/TooltipView.js +4 -0
|
@@ -12,11 +12,18 @@
|
|
|
12
12
|
* 1. reset counters (snapshot the previous alive count as this frame's simulate input, zero the new
|
|
13
13
|
* alive count)
|
|
14
14
|
* 2. emit — run SPAWN for each scheduled spawn request (pop dead -> init -> append alive)
|
|
15
|
-
* 3. simulate — one dispatch runs every emitter's UPDATE over the
|
|
16
|
-
* survivors into the new alive list and freed slots into the dead list
|
|
17
|
-
* 4.
|
|
18
|
-
*
|
|
19
|
-
*
|
|
15
|
+
* 3. simulate — one dispatch runs every emitter's UPDATE over the coherence list built last frame,
|
|
16
|
+
* compacting survivors into the new alive list and freed slots into the dead list
|
|
17
|
+
* 4. bucket — regroup the new alive list by VM program, padded to whole workgroups, into the list
|
|
18
|
+
* NEXT frame's simulate consumes (`coherence/`)
|
|
19
|
+
* 5. build indirect — derive next frame's simulate dispatch from the padded list length and this
|
|
20
|
+
* frame's render draw instance count from the alive count
|
|
21
|
+
* 6. sort (optional) — histogram -> csdldf scan -> scatter to a back-to-front index list
|
|
22
|
+
* 7. render — one instanced billboard draw over the sorted list
|
|
23
|
+
*
|
|
24
|
+
* Steps 4 and 6 are two different orderings of the same particles and share nothing: the
|
|
25
|
+
* simulation order is program-coherent and camera-independent, the render order is back-to-front
|
|
26
|
+
* and changes with the camera. Separate buffers, separate passes, separate counter slots.
|
|
20
27
|
*
|
|
21
28
|
* The alive lists ping-pong by frame parity, exactly like the ReSTIR reservoirs.
|
|
22
29
|
*
|
|
@@ -49,6 +56,13 @@ export class GPUParticleSystem {
|
|
|
49
56
|
/** CPU shadow of the packed emitter buffer (for in-place transform patching) */
|
|
50
57
|
emitter_cpu: Uint32Array;
|
|
51
58
|
emitters_dirty: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Distinct compiled programs across the emitter set — the number of buckets the coherence
|
|
61
|
+
* pass sorts into. Known only after {@link buildEmitterData}; until then the emitter count
|
|
62
|
+
* is a safe upper bound (programs can be shared, never invented).
|
|
63
|
+
* @type {number|undefined}
|
|
64
|
+
*/
|
|
65
|
+
program_count: number | undefined;
|
|
52
66
|
/**
|
|
53
67
|
* Register an emitter.
|
|
54
68
|
* @param {object} config see {@link EmitterRegistry#add}
|
|
@@ -82,6 +96,16 @@ export class GPUParticleSystem {
|
|
|
82
96
|
program: Uint32Array;
|
|
83
97
|
constants: Uint32Array;
|
|
84
98
|
};
|
|
99
|
+
/**
|
|
100
|
+
* Number of simulation-order buckets — one per distinct compiled program.
|
|
101
|
+
*
|
|
102
|
+
* This is the coherence pass's only host-provided number, and it is static topology rather than
|
|
103
|
+
* per-frame state: it changes when the emitter set changes, not as particles are born and die.
|
|
104
|
+
* Everything the pass measures per frame stays on the GPU.
|
|
105
|
+
*
|
|
106
|
+
* @returns {number}
|
|
107
|
+
*/
|
|
108
|
+
bucketCount(): number;
|
|
85
109
|
/**
|
|
86
110
|
* Sizes of the persistent buffers, in bytes. Exposed for tests and allocation.
|
|
87
111
|
* @returns {object}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUParticleSystem.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/particles/GPUParticleSystem.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUParticleSystem.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/particles/GPUParticleSystem.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH;IACI;;;;OAIG;IACH,sBAJW,MAAM;QAEW,QAAQ,GAAzB,MAAM;OA8BhB;IAxBG,cAAwB;IACxB,iBAAwB;IAExB,0BAAqC;IACrC,kCAA6C;IAE7C,gEAAgE;IAChE,aADW,IAAI,MAAM,EAAE,MAAM,CAAC,CACF;IAE5B,qBAAqB;IACrB,OADW,MAAM,CACH;IAEd,mCAAmC;IACnC,aAAwB;IACxB,gFAAgF;IAChF,yBAA4B;IAC5B,wBAA0B;IAC1B;;;;;OAKG;IACH,eAFU,MAAM,GAAC,SAAS,CAEI;IAGlC;;;;OAIG;IACH,mBAHW,MAAM,GACJ,MAAM,CAMlB;IAED;;;;;OAKG;IACH,4BAHW,MAAM,QACN,MAAM,QAIhB;IAED;;;;;;;OAOG;IACH,WALW,MAAM;oCAES,MAAM,KAAK,OAAO;QAC/B,WAAW,CAiBvB;IAED;;;OAGG;IACH,oBAFa;QAAC,QAAQ,EAAE,WAAW,CAAC;QAAC,OAAO,EAAE,WAAW,CAAC;QAAC,SAAS,EAAE,WAAW,CAAA;KAAC,CAQjF;IAED;;;;;;;;OAQG;IACH,eAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,eAFa,MAAM,CA+BlB;IAED;;;OAGG;IACH;cAFoB,WAAW;kBAAY,WAAW;MAUrD;IAED;;;OAGG;IACH;cAFoB,MAAM;eAAS,MAAM;MAKxC;CACJ;gCA3M+B,8BAA8B;uCACvB,qCAAqC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import { PARTICLE_RECORD_WORD_COUNT } from "./ParticleConstants.js";
|
|
2
|
+
import { PARTICLE_RECORD_WORD_COUNT, PARTICLE_SIMULATE_WORKGROUP_SIZE } from "./ParticleConstants.js";
|
|
3
|
+
import { PREFIX_SCAN_CSDLDF_HEADER_WORDS } from "../gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.js";
|
|
3
4
|
import { EMITTER_STRIDE, write_emitter_transform } from "./data/PARTICLE_EMITTER_LAYOUT.js";
|
|
4
5
|
import { PARTICLE_COUNTER, PARTICLE_COUNTER_COUNT } from "./data/PARTICLE_COUNTERS.js";
|
|
5
6
|
import { EmitterRegistry } from "./runtime/EmitterRegistry.js";
|
|
@@ -19,11 +20,18 @@ import { ParticleSpawnScheduler } from "./runtime/ParticleSpawnScheduler.js";
|
|
|
19
20
|
* 1. reset counters (snapshot the previous alive count as this frame's simulate input, zero the new
|
|
20
21
|
* alive count)
|
|
21
22
|
* 2. emit — run SPAWN for each scheduled spawn request (pop dead -> init -> append alive)
|
|
22
|
-
* 3. simulate — one dispatch runs every emitter's UPDATE over the
|
|
23
|
-
* survivors into the new alive list and freed slots into the dead list
|
|
24
|
-
* 4.
|
|
25
|
-
*
|
|
26
|
-
*
|
|
23
|
+
* 3. simulate — one dispatch runs every emitter's UPDATE over the coherence list built last frame,
|
|
24
|
+
* compacting survivors into the new alive list and freed slots into the dead list
|
|
25
|
+
* 4. bucket — regroup the new alive list by VM program, padded to whole workgroups, into the list
|
|
26
|
+
* NEXT frame's simulate consumes (`coherence/`)
|
|
27
|
+
* 5. build indirect — derive next frame's simulate dispatch from the padded list length and this
|
|
28
|
+
* frame's render draw instance count from the alive count
|
|
29
|
+
* 6. sort (optional) — histogram -> csdldf scan -> scatter to a back-to-front index list
|
|
30
|
+
* 7. render — one instanced billboard draw over the sorted list
|
|
31
|
+
*
|
|
32
|
+
* Steps 4 and 6 are two different orderings of the same particles and share nothing: the
|
|
33
|
+
* simulation order is program-coherent and camera-independent, the render order is back-to-front
|
|
34
|
+
* and changes with the camera. Separate buffers, separate passes, separate counter slots.
|
|
27
35
|
*
|
|
28
36
|
* The alive lists ping-pong by frame parity, exactly like the ReSTIR reservoirs.
|
|
29
37
|
*
|
|
@@ -61,6 +69,13 @@ export class GPUParticleSystem {
|
|
|
61
69
|
/** CPU shadow of the packed emitter buffer (for in-place transform patching) */
|
|
62
70
|
this.emitter_cpu = undefined;
|
|
63
71
|
this.emitters_dirty = true;
|
|
72
|
+
/**
|
|
73
|
+
* Distinct compiled programs across the emitter set — the number of buckets the coherence
|
|
74
|
+
* pass sorts into. Known only after {@link buildEmitterData}; until then the emitter count
|
|
75
|
+
* is a safe upper bound (programs can be shared, never invented).
|
|
76
|
+
* @type {number|undefined}
|
|
77
|
+
*/
|
|
78
|
+
this.program_count = undefined;
|
|
64
79
|
}
|
|
65
80
|
|
|
66
81
|
/**
|
|
@@ -116,24 +131,56 @@ export class GPUParticleSystem {
|
|
|
116
131
|
buildEmitterData() {
|
|
117
132
|
const built = this.registry.build();
|
|
118
133
|
this.emitter_cpu = built.emitters;
|
|
134
|
+
this.program_count = built.program_count;
|
|
119
135
|
this.emitters_dirty = false;
|
|
120
136
|
return built;
|
|
121
137
|
}
|
|
122
138
|
|
|
139
|
+
/**
|
|
140
|
+
* Number of simulation-order buckets — one per distinct compiled program.
|
|
141
|
+
*
|
|
142
|
+
* This is the coherence pass's only host-provided number, and it is static topology rather than
|
|
143
|
+
* per-frame state: it changes when the emitter set changes, not as particles are born and die.
|
|
144
|
+
* Everything the pass measures per frame stays on the GPU.
|
|
145
|
+
*
|
|
146
|
+
* @returns {number}
|
|
147
|
+
*/
|
|
148
|
+
bucketCount() {
|
|
149
|
+
return Math.max(1, this.program_count ?? this.registry.count);
|
|
150
|
+
}
|
|
151
|
+
|
|
123
152
|
/**
|
|
124
153
|
* Sizes of the persistent buffers, in bytes. Exposed for tests and allocation.
|
|
125
154
|
* @returns {object}
|
|
126
155
|
*/
|
|
127
156
|
bufferSizes() {
|
|
128
157
|
const u32 = 4;
|
|
158
|
+
const buckets = this.bucketCount();
|
|
159
|
+
|
|
129
160
|
return {
|
|
130
161
|
pool: this.capacity * PARTICLE_RECORD_WORD_COUNT * u32,
|
|
131
162
|
alive_list: this.capacity * u32,
|
|
132
163
|
dead_list: this.capacity * u32,
|
|
133
164
|
counters: PARTICLE_COUNTER_COUNT * u32,
|
|
165
|
+
// render order (sort/)
|
|
134
166
|
sorted: this.capacity * u32,
|
|
135
167
|
keys: this.capacity * u32,
|
|
136
168
|
emitter_record: EMITTER_STRIDE * u32,
|
|
169
|
+
|
|
170
|
+
// simulation order (coherence/) — a separate set of buffers on purpose; sharing any of
|
|
171
|
+
// them with the render order would couple a camera-driven ordering to a program-driven
|
|
172
|
+
// one.
|
|
173
|
+
//
|
|
174
|
+
// Padding rounds each bucket up to a whole workgroup, so it can add at most
|
|
175
|
+
// `workgroup - 1` entries per bucket; one whole workgroup per bucket is the bound.
|
|
176
|
+
sim_list: (this.capacity + buckets * PARTICLE_SIMULATE_WORKGROUP_SIZE) * u32,
|
|
177
|
+
sim_keys: this.capacity * u32,
|
|
178
|
+
// `{count, elements}` for the CSDLDF scan; the scan reads whole vec4s, so the bins are
|
|
179
|
+
// rounded up to a multiple of four.
|
|
180
|
+
sim_histogram: (PREFIX_SCAN_CSDLDF_HEADER_WORDS + round_up_4(buckets)) * u32,
|
|
181
|
+
sim_bucket_counts: buckets * u32,
|
|
182
|
+
sim_cursor: buckets * u32,
|
|
183
|
+
sim_dispatch_args: 3 * u32,
|
|
137
184
|
};
|
|
138
185
|
}
|
|
139
186
|
|
|
@@ -160,3 +207,11 @@ export class GPUParticleSystem {
|
|
|
160
207
|
return { read, write: 1 - read };
|
|
161
208
|
}
|
|
162
209
|
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* @param {number} value
|
|
213
|
+
* @returns {number} `value` rounded up to a multiple of four
|
|
214
|
+
*/
|
|
215
|
+
function round_up_4(value) {
|
|
216
|
+
return (value + 3) & ~3;
|
|
217
|
+
}
|
|
@@ -42,4 +42,35 @@ export const PARTICLE_VM_INSTRUCTION_WORDS: number;
|
|
|
42
42
|
* @type {number}
|
|
43
43
|
*/
|
|
44
44
|
export const PARTICLE_VM_MAX_INSTRUCTIONS: number;
|
|
45
|
+
/**
|
|
46
|
+
* Threads per workgroup in the simulate dispatch — and therefore the granularity the simulate input
|
|
47
|
+
* list is bucketed to (see `coherence/`).
|
|
48
|
+
*
|
|
49
|
+
* 64 is a multiple of both subgroup widths a WebGPU implementation plausibly reports (32 on NVIDIA
|
|
50
|
+
* and RDNA wave32, 64 on GCN wave64), so aligning a bucket to it aligns it to a wave without the
|
|
51
|
+
* shader ever having to query `subgroup_size`. It is also a power of two, which is what lets the
|
|
52
|
+
* round-up be a mask rather than a divide — the WGSL emulator's `/` is float division, so an
|
|
53
|
+
* integer-truncating round-up would read differently there than on a device.
|
|
54
|
+
*
|
|
55
|
+
* Lives here rather than in the simulate shader because the bucketing passes, the CPU reference and
|
|
56
|
+
* the indirect-args pass all have to agree on it; `shaders/shader_particle_simulate.js` re-exports
|
|
57
|
+
* it for callers that think of it as that pass's property.
|
|
58
|
+
*
|
|
59
|
+
* @type {number}
|
|
60
|
+
*/
|
|
61
|
+
export const PARTICLE_SIMULATE_WORKGROUP_SIZE: number;
|
|
62
|
+
/**
|
|
63
|
+
* Slot value carried by a padding entry in the simulate input list.
|
|
64
|
+
*
|
|
65
|
+
* Bucketing pads each program's run out to {@link PARTICLE_SIMULATE_WORKGROUP_SIZE} so no wave ever
|
|
66
|
+
* spans two VM programs; the entries that padding adds name no particle. The simulate shader must
|
|
67
|
+
* recognise this and return BEFORE the compaction atomics, so a padding lane never appends to the
|
|
68
|
+
* alive list and never pushes a slot onto the dead (free) list.
|
|
69
|
+
*
|
|
70
|
+
* `0xffffffff` is not a reachable slot index: a slot index addresses `pool` at
|
|
71
|
+
* `slot * PARTICLE_RECORD_WORD_COUNT`, so a pool with 2^32-1 slots would need 512 GiB.
|
|
72
|
+
*
|
|
73
|
+
* @type {number}
|
|
74
|
+
*/
|
|
75
|
+
export const PARTICLE_SIM_PAD_SLOT: number;
|
|
45
76
|
//# sourceMappingURL=ParticleConstants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticleConstants.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/particles/ParticleConstants.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;GASG;AACH,yCAFU,MAAM,CAE6B;AAE7C;;;GAGG;AACH,6CAFU,MAAM,CAEgC;AAEhD;;;GAGG;AACH,8CAFU,MAAM,CAEiC;AAEjD;;;GAGG;AACH,yCAFU,MAAM,CAE6B;AAE7C;;;GAGG;AACH,4CAFU,MAAM,CAE+B;AAE/C;;;;GAIG;AACH,2CAFU,MAAM,CAEgC"}
|
|
1
|
+
{"version":3,"file":"ParticleConstants.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/particles/ParticleConstants.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;;;;GASG;AACH,yCAFU,MAAM,CAE6B;AAE7C;;;GAGG;AACH,6CAFU,MAAM,CAEgC;AAEhD;;;GAGG;AACH,8CAFU,MAAM,CAEiC;AAEjD;;;GAGG;AACH,yCAFU,MAAM,CAE6B;AAE7C;;;GAGG;AACH,4CAFU,MAAM,CAE+B;AAE/C;;;;GAIG;AACH,2CAFU,MAAM,CAEgC;AAEhD;;;;;;;;;;;;;;;GAeG;AACH,+CAFU,MAAM,CAEmC;AAEnD;;;;;;;;;;;;GAYG;AACH,oCAFU,MAAM,CAEgC"}
|
|
@@ -48,3 +48,36 @@ export const PARTICLE_VM_INSTRUCTION_WORDS = 5;
|
|
|
48
48
|
* @type {number}
|
|
49
49
|
*/
|
|
50
50
|
export const PARTICLE_VM_MAX_INSTRUCTIONS = 256;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Threads per workgroup in the simulate dispatch — and therefore the granularity the simulate input
|
|
54
|
+
* list is bucketed to (see `coherence/`).
|
|
55
|
+
*
|
|
56
|
+
* 64 is a multiple of both subgroup widths a WebGPU implementation plausibly reports (32 on NVIDIA
|
|
57
|
+
* and RDNA wave32, 64 on GCN wave64), so aligning a bucket to it aligns it to a wave without the
|
|
58
|
+
* shader ever having to query `subgroup_size`. It is also a power of two, which is what lets the
|
|
59
|
+
* round-up be a mask rather than a divide — the WGSL emulator's `/` is float division, so an
|
|
60
|
+
* integer-truncating round-up would read differently there than on a device.
|
|
61
|
+
*
|
|
62
|
+
* Lives here rather than in the simulate shader because the bucketing passes, the CPU reference and
|
|
63
|
+
* the indirect-args pass all have to agree on it; `shaders/shader_particle_simulate.js` re-exports
|
|
64
|
+
* it for callers that think of it as that pass's property.
|
|
65
|
+
*
|
|
66
|
+
* @type {number}
|
|
67
|
+
*/
|
|
68
|
+
export const PARTICLE_SIMULATE_WORKGROUP_SIZE = 64;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Slot value carried by a padding entry in the simulate input list.
|
|
72
|
+
*
|
|
73
|
+
* Bucketing pads each program's run out to {@link PARTICLE_SIMULATE_WORKGROUP_SIZE} so no wave ever
|
|
74
|
+
* spans two VM programs; the entries that padding adds name no particle. The simulate shader must
|
|
75
|
+
* recognise this and return BEFORE the compaction atomics, so a padding lane never appends to the
|
|
76
|
+
* alive list and never pushes a slot onto the dead (free) list.
|
|
77
|
+
*
|
|
78
|
+
* `0xffffffff` is not a reachable slot index: a slot index addresses `pool` at
|
|
79
|
+
* `slot * PARTICLE_RECORD_WORD_COUNT`, so a pool with 2^32-1 slots would need 512 GiB.
|
|
80
|
+
*
|
|
81
|
+
* @type {number}
|
|
82
|
+
*/
|
|
83
|
+
export const PARTICLE_SIM_PAD_SLOT = 0xffffffff;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frame-graph wiring for the simulation-order bucketing: turns the frame's freshly compacted alive
|
|
3
|
+
* list into the program-coherent, workgroup-padded list NEXT frame's simulate consumes.
|
|
4
|
+
*
|
|
5
|
+
* Runs at the end of the frame, after emit and simulate have both finished appending to the alive
|
|
6
|
+
* list and before the build-indirect pass, which reads the padded length this produces
|
|
7
|
+
* ({@link PARTICLE_COUNTER.SIM_PADDED}) and turns it into next frame's dispatch args and bound.
|
|
8
|
+
*
|
|
9
|
+
* Six passes, the middle one being `graph_prefix_scan_csdldf` reused unchanged — the same scan the
|
|
10
|
+
* radix sort runs its spine through. Reusing it is deliberate: it is the one prefix scan in this
|
|
11
|
+
* codebase whose only cross-workgroup wait is CSDLDF's own bounded-spin-then-fallback, so the pass
|
|
12
|
+
* makes progress on a scheduler that offers no fairness guarantee. A hand-rolled scan here would be
|
|
13
|
+
* a second place to get that wrong.
|
|
14
|
+
*
|
|
15
|
+
* Nothing on this path reads back to the CPU. The only host-supplied number is `bucket_count`, and
|
|
16
|
+
* that is static topology — it changes when the emitter set does, never as particles are born and
|
|
17
|
+
* die. The per-frame quantities (the alive count, the bin sizes, the padded total) are produced and
|
|
18
|
+
* consumed entirely on the GPU, including the dispatch size of the two per-particle passes, which
|
|
19
|
+
* the reset pass writes into `sim_dispatch_args` from the GPU's own alive count.
|
|
20
|
+
*
|
|
21
|
+
* @param {object} params
|
|
22
|
+
* @param {import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} params.graph
|
|
23
|
+
* @param {object} params.gpu persistent buffers owned by the feature (GPUBuffer instances)
|
|
24
|
+
* @param {GPUBuffer} params.gpu.sim_list the padded, program-coherent index list this produces
|
|
25
|
+
* @param {GPUBuffer} params.gpu.sim_keys per-alive-entry program id
|
|
26
|
+
* @param {GPUBuffer} params.gpu.sim_histogram `{count, elements}` bins for the CSDLDF scan
|
|
27
|
+
* @param {GPUBuffer} params.gpu.sim_bucket_counts raw (unpadded) per-bucket counts
|
|
28
|
+
* @param {GPUBuffer} params.gpu.sim_cursor per-bucket scatter cursor
|
|
29
|
+
* @param {GPUBuffer} params.gpu.sim_dispatch_args indirect args for the two per-particle passes
|
|
30
|
+
* @param {number} params.emitters graph handle of the packed emitter records
|
|
31
|
+
* @param {number} params.pool graph handle of the particle pool
|
|
32
|
+
* @param {number} params.alive graph handle of this frame's compacted alive list
|
|
33
|
+
* @param {number} params.counters graph handle of the atomic counters
|
|
34
|
+
* @param {number} params.sim_list graph handle of the list this rewrites. Passed in rather than
|
|
35
|
+
* imported here because the simulate pass reads it earlier in the same frame: importing the same
|
|
36
|
+
* GPUBuffer twice makes two resource entries the graph cannot see are the same memory, so the read
|
|
37
|
+
* and the write end up on separate dependency chains
|
|
38
|
+
* @param {number} params.bucket_count number of distinct compiled programs
|
|
39
|
+
* @returns {{counters: number, sim_list: number}} the threaded handles downstream passes must read
|
|
40
|
+
*/
|
|
41
|
+
export function graph_particle_bucket({ graph, gpu, emitters, pool, alive, counters, sim_list, bucket_count }: {
|
|
42
|
+
graph: import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
|
|
43
|
+
gpu: {
|
|
44
|
+
sim_list: GPUBuffer;
|
|
45
|
+
sim_keys: GPUBuffer;
|
|
46
|
+
sim_histogram: GPUBuffer;
|
|
47
|
+
sim_bucket_counts: GPUBuffer;
|
|
48
|
+
sim_cursor: GPUBuffer;
|
|
49
|
+
sim_dispatch_args: GPUBuffer;
|
|
50
|
+
};
|
|
51
|
+
emitters: number;
|
|
52
|
+
pool: number;
|
|
53
|
+
alive: number;
|
|
54
|
+
counters: number;
|
|
55
|
+
sim_list: number;
|
|
56
|
+
bucket_count: number;
|
|
57
|
+
}): {
|
|
58
|
+
counters: number;
|
|
59
|
+
sim_list: number;
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=graph_particle_bucket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph_particle_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/coherence/graph_particle_bucket.js"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH;IAnBqG,KAAK,EAA/F,OAAO,8DAA8D,EAAE,UAAU;IAClE,GAAG;QACI,QAAQ;QACR,QAAQ;QACR,aAAa;QACb,iBAAiB;QACjB,UAAU;QACV,iBAAiB;;IACxB,QAAQ,EAAvB,MAAM;IACS,IAAI,EAAnB,MAAM;IACS,KAAK,EAApB,MAAM;IACS,QAAQ,EAAvB,MAAM;IACS,QAAQ,EAAvB,MAAM;IAIS,YAAY,EAA3B,MAAM;IACJ;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAqGhD"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import { graph_compute_indirect_pass } from "../../shader/graph/compute/graph_compute_indirect_pass.js";
|
|
3
|
+
import { graph_compute_pass } from "../../shader/graph/compute/graph_compute_pass.js";
|
|
4
|
+
import { graph_import_buffer } from "../../shader/graph/graph_import_buffer.js";
|
|
5
|
+
import {
|
|
6
|
+
PREFIX_SCAN_CSDLDF_HEADER_WORDS,
|
|
7
|
+
} from "../../gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.js";
|
|
8
|
+
import { graph_prefix_scan_csdldf } from "../../gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js";
|
|
9
|
+
import { PARTICLE_SIMULATE_WORKGROUP_SIZE } from "../ParticleConstants.js";
|
|
10
|
+
import {
|
|
11
|
+
shader_particle_bucket_fill,
|
|
12
|
+
shader_particle_bucket_histogram,
|
|
13
|
+
shader_particle_bucket_pad,
|
|
14
|
+
shader_particle_bucket_reset,
|
|
15
|
+
shader_particle_bucket_scatter,
|
|
16
|
+
} from "./shader_particle_bucket.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Frame-graph wiring for the simulation-order bucketing: turns the frame's freshly compacted alive
|
|
20
|
+
* list into the program-coherent, workgroup-padded list NEXT frame's simulate consumes.
|
|
21
|
+
*
|
|
22
|
+
* Runs at the end of the frame, after emit and simulate have both finished appending to the alive
|
|
23
|
+
* list and before the build-indirect pass, which reads the padded length this produces
|
|
24
|
+
* ({@link PARTICLE_COUNTER.SIM_PADDED}) and turns it into next frame's dispatch args and bound.
|
|
25
|
+
*
|
|
26
|
+
* Six passes, the middle one being `graph_prefix_scan_csdldf` reused unchanged — the same scan the
|
|
27
|
+
* radix sort runs its spine through. Reusing it is deliberate: it is the one prefix scan in this
|
|
28
|
+
* codebase whose only cross-workgroup wait is CSDLDF's own bounded-spin-then-fallback, so the pass
|
|
29
|
+
* makes progress on a scheduler that offers no fairness guarantee. A hand-rolled scan here would be
|
|
30
|
+
* a second place to get that wrong.
|
|
31
|
+
*
|
|
32
|
+
* Nothing on this path reads back to the CPU. The only host-supplied number is `bucket_count`, and
|
|
33
|
+
* that is static topology — it changes when the emitter set does, never as particles are born and
|
|
34
|
+
* die. The per-frame quantities (the alive count, the bin sizes, the padded total) are produced and
|
|
35
|
+
* consumed entirely on the GPU, including the dispatch size of the two per-particle passes, which
|
|
36
|
+
* the reset pass writes into `sim_dispatch_args` from the GPU's own alive count.
|
|
37
|
+
*
|
|
38
|
+
* @param {object} params
|
|
39
|
+
* @param {import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} params.graph
|
|
40
|
+
* @param {object} params.gpu persistent buffers owned by the feature (GPUBuffer instances)
|
|
41
|
+
* @param {GPUBuffer} params.gpu.sim_list the padded, program-coherent index list this produces
|
|
42
|
+
* @param {GPUBuffer} params.gpu.sim_keys per-alive-entry program id
|
|
43
|
+
* @param {GPUBuffer} params.gpu.sim_histogram `{count, elements}` bins for the CSDLDF scan
|
|
44
|
+
* @param {GPUBuffer} params.gpu.sim_bucket_counts raw (unpadded) per-bucket counts
|
|
45
|
+
* @param {GPUBuffer} params.gpu.sim_cursor per-bucket scatter cursor
|
|
46
|
+
* @param {GPUBuffer} params.gpu.sim_dispatch_args indirect args for the two per-particle passes
|
|
47
|
+
* @param {number} params.emitters graph handle of the packed emitter records
|
|
48
|
+
* @param {number} params.pool graph handle of the particle pool
|
|
49
|
+
* @param {number} params.alive graph handle of this frame's compacted alive list
|
|
50
|
+
* @param {number} params.counters graph handle of the atomic counters
|
|
51
|
+
* @param {number} params.sim_list graph handle of the list this rewrites. Passed in rather than
|
|
52
|
+
* imported here because the simulate pass reads it earlier in the same frame: importing the same
|
|
53
|
+
* GPUBuffer twice makes two resource entries the graph cannot see are the same memory, so the read
|
|
54
|
+
* and the write end up on separate dependency chains
|
|
55
|
+
* @param {number} params.bucket_count number of distinct compiled programs
|
|
56
|
+
* @returns {{counters: number, sim_list: number}} the threaded handles downstream passes must read
|
|
57
|
+
*/
|
|
58
|
+
export function graph_particle_bucket({ graph, gpu, emitters, pool, alive, counters, sim_list, bucket_count }) {
|
|
59
|
+
assert.defined(graph, "graph");
|
|
60
|
+
assert.isPositiveInteger(bucket_count, "bucket_count");
|
|
61
|
+
assert.isNonNegativeInteger(sim_list, "sim_list");
|
|
62
|
+
|
|
63
|
+
// Sized from the bucket count, which only changes when the emitter set does — so a caller that
|
|
64
|
+
// added an emitter and did not reallocate gets told here rather than scattering out of bounds.
|
|
65
|
+
const bin_words = PREFIX_SCAN_CSDLDF_HEADER_WORDS + round_up_4(bucket_count);
|
|
66
|
+
assert.greaterThanOrEqual(gpu.sim_histogram.size, bin_words * Uint32Array.BYTES_PER_ELEMENT, "sim_histogram is too small for the bucket count");
|
|
67
|
+
assert.greaterThanOrEqual(gpu.sim_cursor.size, bucket_count * Uint32Array.BYTES_PER_ELEMENT, "sim_cursor is too small for the bucket count");
|
|
68
|
+
assert.greaterThanOrEqual(gpu.sim_bucket_counts.size, bucket_count * Uint32Array.BYTES_PER_ELEMENT, "sim_bucket_counts is too small for the bucket count");
|
|
69
|
+
|
|
70
|
+
// Every buffer a pass WRITES must be THREADED: the write returns a renamed (versioned) handle
|
|
71
|
+
// and the next pass must read THAT one. Reading the original import instead leaves the ordering
|
|
72
|
+
// between the two passes unexpressed — the graph's own validator rejects it, because both
|
|
73
|
+
// versions name one piece of memory and the stale-looking read silently returns the new
|
|
74
|
+
// contents.
|
|
75
|
+
let keys = graph_import_buffer(graph, gpu.sim_keys, "particles/sim_keys");
|
|
76
|
+
let histogram = graph_import_buffer(graph, gpu.sim_histogram, "particles/sim_histogram");
|
|
77
|
+
let cursor = graph_import_buffer(graph, gpu.sim_cursor, "particles/sim_cursor");
|
|
78
|
+
let bucket_counts = graph_import_buffer(graph, gpu.sim_bucket_counts, "particles/sim_bucket_counts");
|
|
79
|
+
let dispatch_args = graph_import_buffer(graph, gpu.sim_dispatch_args, "particles/sim_dispatch_args");
|
|
80
|
+
|
|
81
|
+
// 0. Clear the bins and cursors, write the scan's {count} header, and size the two per-particle
|
|
82
|
+
// passes below from the GPU's own alive count.
|
|
83
|
+
{
|
|
84
|
+
const out = graph_compute_pass({
|
|
85
|
+
graph,
|
|
86
|
+
shader: shader_particle_bucket_reset,
|
|
87
|
+
bindings: { counters, histogram, cursor, sim_dispatch_args: dispatch_args, u_bucket_count: bucket_count },
|
|
88
|
+
group_count: [reset_group_count(bucket_count), 1, 1],
|
|
89
|
+
});
|
|
90
|
+
counters = out.counters;
|
|
91
|
+
histogram = out.histogram;
|
|
92
|
+
cursor = out.cursor;
|
|
93
|
+
dispatch_args = out.sim_dispatch_args;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// 1. One bin per PROGRAM. Indirect, because the thread count is the alive count.
|
|
97
|
+
{
|
|
98
|
+
const out = graph_compute_indirect_pass({
|
|
99
|
+
graph,
|
|
100
|
+
shader: shader_particle_bucket_histogram,
|
|
101
|
+
bindings: { emitters, pool, alive, keys, histogram, counters },
|
|
102
|
+
command: dispatch_args,
|
|
103
|
+
});
|
|
104
|
+
keys = out.keys;
|
|
105
|
+
histogram = out.histogram;
|
|
106
|
+
counters = out.counters;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// 2. Round every bin up to a whole workgroup BEFORE the scan — that is what puts each bucket
|
|
110
|
+
// boundary on a wave boundary rather than in the middle of one.
|
|
111
|
+
{
|
|
112
|
+
const out = graph_compute_pass({
|
|
113
|
+
graph,
|
|
114
|
+
shader: shader_particle_bucket_pad,
|
|
115
|
+
bindings: { histogram, bucket_counts, u_bucket_count: bucket_count },
|
|
116
|
+
group_count: [Math.ceil(bucket_count / PARTICLE_SIMULATE_WORKGROUP_SIZE), 1, 1],
|
|
117
|
+
});
|
|
118
|
+
histogram = out.histogram;
|
|
119
|
+
bucket_counts = out.bucket_counts;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// 3. Inclusive prefix sums of the padded bins, in place.
|
|
123
|
+
const scanned = graph_prefix_scan_csdldf({
|
|
124
|
+
graph,
|
|
125
|
+
data: histogram,
|
|
126
|
+
element_max_count: bucket_count,
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// 4. Place each alive entry at its bucket's offset plus an atomic rank.
|
|
130
|
+
{
|
|
131
|
+
const out = graph_compute_indirect_pass({
|
|
132
|
+
graph,
|
|
133
|
+
shader: shader_particle_bucket_scatter,
|
|
134
|
+
bindings: { keys, alive, scanned, cursor, sim_list, counters },
|
|
135
|
+
command: dispatch_args,
|
|
136
|
+
});
|
|
137
|
+
cursor = out.cursor;
|
|
138
|
+
sim_list = out.sim_list;
|
|
139
|
+
counters = out.counters;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// 5. Stamp the padding sentinel into each bucket's tail and publish the padded total. One
|
|
143
|
+
// workgroup per bucket: padding is at most a workgroup less one entry, and a bucket whose
|
|
144
|
+
// particles all died has no scatter thread to ride along with.
|
|
145
|
+
{
|
|
146
|
+
const out = graph_compute_pass({
|
|
147
|
+
graph,
|
|
148
|
+
shader: shader_particle_bucket_fill,
|
|
149
|
+
bindings: { bucket_counts, scanned, sim_list, counters, u_bucket_count: bucket_count },
|
|
150
|
+
group_count: [bucket_count, 1, 1],
|
|
151
|
+
});
|
|
152
|
+
sim_list = out.sim_list;
|
|
153
|
+
counters = out.counters;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return { counters, sim_list };
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Workgroups the reset pass needs to cover its widest loop — the scan header plus the bins, rounded
|
|
161
|
+
* up to the whole `vec4` the last bin lands in (the scan reads whole `vec4`s, so the tail has to be
|
|
162
|
+
* cleared too or garbage joins the sums).
|
|
163
|
+
*
|
|
164
|
+
* @param {number} bucket_count
|
|
165
|
+
* @returns {number}
|
|
166
|
+
*/
|
|
167
|
+
function reset_group_count(bucket_count) {
|
|
168
|
+
const words = PREFIX_SCAN_CSDLDF_HEADER_WORDS + round_up_4(bucket_count);
|
|
169
|
+
|
|
170
|
+
return Math.ceil(words / PARTICLE_SIMULATE_WORKGROUP_SIZE);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* @param {number} value
|
|
175
|
+
* @returns {number} `value` rounded up to a multiple of four — the scan reads whole `vec4`s
|
|
176
|
+
*/
|
|
177
|
+
function round_up_4(value) {
|
|
178
|
+
return (value + 3) & ~3;
|
|
179
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Round `value` up to a multiple of {@link PARTICLE_SIMULATE_WORKGROUP_SIZE}.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the WGSL, which does this with a mask rather than a divide — see
|
|
5
|
+
* {@link PARTICLE_SIMULATE_WORKGROUP_SIZE} for why.
|
|
6
|
+
*
|
|
7
|
+
* @param {number} value
|
|
8
|
+
* @returns {number}
|
|
9
|
+
*/
|
|
10
|
+
export function particle_bucket_round_up(value: number): number;
|
|
11
|
+
/**
|
|
12
|
+
* @typedef {object} ParticleProgramBucketLayout
|
|
13
|
+
* @property {number[]} counts particles per program, before padding
|
|
14
|
+
* @property {number[]} padded_counts each count rounded up to a whole workgroup
|
|
15
|
+
* @property {number[]} offsets first index of each program's run in the padded list
|
|
16
|
+
* @property {number} total length of the padded list — what sizes the simulate dispatch
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Bucket sizes and start offsets, exactly as the GPU derives them: an atomic histogram, a round-up
|
|
20
|
+
* of each bin to a whole workgroup, and an exclusive prefix sum of the *padded* bins (the GPU takes
|
|
21
|
+
* that sum from `graph_prefix_scan_csdldf`, the same scan the radix sort runs its spine through).
|
|
22
|
+
*
|
|
23
|
+
* A program with no particles contributes nothing: `round_up(0)` is 0, so empty buckets neither
|
|
24
|
+
* consume a workgroup nor shift the offsets of the buckets after them.
|
|
25
|
+
*
|
|
26
|
+
* @param {ArrayLike<number>} programs program id of each alive entry
|
|
27
|
+
* @param {number} program_count number of distinct programs (the bucket count)
|
|
28
|
+
* @returns {ParticleProgramBucketLayout}
|
|
29
|
+
*/
|
|
30
|
+
export function particle_program_bucket_layout(programs: ArrayLike<number>, program_count: number): ParticleProgramBucketLayout;
|
|
31
|
+
/**
|
|
32
|
+
* The simulate pass's input list: pool slot indices grouped by program, each group padded out to a
|
|
33
|
+
* workgroup boundary with {@link PARTICLE_SIM_PAD_SLOT}.
|
|
34
|
+
*
|
|
35
|
+
* Order within a bucket is arrival order here and arbitrary on the GPU (the scatter takes its rank
|
|
36
|
+
* from an atomic), which is fine — nothing downstream depends on the order of particles running the
|
|
37
|
+
* same program.
|
|
38
|
+
*
|
|
39
|
+
* @param {ArrayLike<number>} slots pool slot index of each alive entry
|
|
40
|
+
* @param {ArrayLike<number>} programs program id of each alive entry, parallel to `slots`
|
|
41
|
+
* @param {number} program_count number of distinct programs (the bucket count)
|
|
42
|
+
* @returns {number[]} the padded, program-coherent indirection list
|
|
43
|
+
*/
|
|
44
|
+
export function particle_program_bucket_list(slots: ArrayLike<number>, programs: ArrayLike<number>, program_count: number): number[];
|
|
45
|
+
export type ParticleProgramBucketLayout = {
|
|
46
|
+
/**
|
|
47
|
+
* particles per program, before padding
|
|
48
|
+
*/
|
|
49
|
+
counts: number[];
|
|
50
|
+
/**
|
|
51
|
+
* each count rounded up to a whole workgroup
|
|
52
|
+
*/
|
|
53
|
+
padded_counts: number[];
|
|
54
|
+
/**
|
|
55
|
+
* first index of each program's run in the padded list
|
|
56
|
+
*/
|
|
57
|
+
offsets: number[];
|
|
58
|
+
/**
|
|
59
|
+
* length of the padded list — what sizes the simulate dispatch
|
|
60
|
+
*/
|
|
61
|
+
total: number;
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=particle_program_buckets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"particle_program_buckets.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/coherence/particle_program_buckets.js"],"names":[],"mappings":"AAwCA;;;;;;;;GAQG;AACH,gDAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;GAMG;AAEH;;;;;;;;;;;GAWG;AACH,yDAJW,UAAU,MAAM,CAAC,iBACjB,MAAM,GACJ,2BAA2B,CAkBvC;AAED;;;;;;;;;;;;GAYG;AACH,oDALW,UAAU,MAAM,CAAC,YACjB,UAAU,MAAM,CAAC,iBACjB,MAAM,GACJ,MAAM,EAAE,CAapB;;;;;YA5Da,MAAM,EAAE;;;;mBACR,MAAM,EAAE;;;;aACR,MAAM,EAAE;;;;WACR,MAAM"}
|