@woosh/meep-engine 3.14.5 → 3.15.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/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/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 +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/RENDERER_CONTRACT.md +584 -580
- 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/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 +17 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +29 -28
- 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/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/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/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/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 +463 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +509 -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 +38 -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 +130 -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_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 +117 -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 +935 -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 +81 -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 +237 -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/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
- 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
|
@@ -17,6 +17,10 @@ It has to be `http://localhost` rather than `file://`: WebGPU needs a secure con
|
|
|
17
17
|
imports from `file://` are blocked by CORS anyway. The page imports nothing but meep's own relative
|
|
18
18
|
ESM, so any static server rooted at the repo also serves it.
|
|
19
19
|
|
|
20
|
+
**It needs `subgroups`**, and refuses to start without it. The simulate input list is bucketed by VM
|
|
21
|
+
program so no wave spans two programs, and the bucket offsets come from `graph_prefix_scan_csdldf`,
|
|
22
|
+
which is built on subgroup ops.
|
|
23
|
+
|
|
20
24
|
**It needs immediate data**, and refuses to start without it. Emit, simulate and build-indirect each
|
|
21
25
|
carry their per-dispatch state (`u_dt`, `u_time`, `u_frame`, and for emit the request count and the
|
|
22
26
|
pool capacity) as an immediate block rather than as a transient uniform buffer, so an adapter whose
|
|
@@ -35,6 +39,12 @@ Four emitters sharing one 32k pool, chosen so each renderer path is visible at o
|
|
|
35
39
|
| sparks | additive | **stretched** | short-lived, gravity-fed, stretched along velocity — the one non-billboard projection |
|
|
36
40
|
| dust | alpha | billboard, soft-depth | a wide slow drift, so the ground plane and the low wall both get a soft intersection |
|
|
37
41
|
|
|
42
|
+
Four distinct compiled programs, so this is also where the simulation-order bucketing has something
|
|
43
|
+
to do: without it a simulate wave holds fire, smoke, spark and dust particles side by side, each
|
|
44
|
+
wanting different opcodes out of the interpreter's `switch` and different registers out of its
|
|
45
|
+
dynamically-indexed file. Nothing on screen changes when it is on — it is a coherence change, not a
|
|
46
|
+
visual one — which is why it is pinned by specs rather than by looking.
|
|
47
|
+
|
|
38
48
|
Ground plane and three boxes are drawn first into a reverse-Z `depth32float` buffer. The billboard
|
|
39
49
|
pass loads that colour target and depth-tests against the same buffer read-only, so particles are
|
|
40
50
|
**occluded** by the boxes and the soft-depth emitters sample the depth they were occluded by.
|
|
@@ -75,9 +85,10 @@ npx vitest run src/shade/playground/particle_system/particle_scene.spec.js
|
|
|
75
85
|
|
|
76
86
|
That mock runs no shaders, so the spec asserts nothing about what a pass computed. What it does
|
|
77
87
|
assert is that the frame is legal and wired the way the design requires — pass order and
|
|
78
|
-
attachments,
|
|
79
|
-
|
|
80
|
-
|
|
88
|
+
attachments, no frame reading the list it appends to, the immediate blocks written before every
|
|
89
|
+
dispatch that declares them, simulate and the draw both taking their counts from the indirect
|
|
90
|
+
buffers, and the two orderings staying in separate buffers: simulate reads the program-coherent
|
|
91
|
+
list, the billboard draw reads the alive list. Any WebGPU validation failure anywhere in the frame arrives as an
|
|
81
92
|
uncaptured error, which every test fails on.
|
|
82
93
|
|
|
83
94
|
The picture is the browser's job; the spec cannot see it.
|
|
@@ -105,6 +105,7 @@
|
|
|
105
105
|
<div><span class="key">alive</span><span id="stat-alive">—</span></div>
|
|
106
106
|
<div><span class="key">free</span><span id="stat-dead">—</span></div>
|
|
107
107
|
<div><span class="key">draw instances</span><span id="stat-draw">—</span></div>
|
|
108
|
+
<div><span class="key">sim lanes</span><span id="stat-sim-lanes">—</span></div>
|
|
108
109
|
<div><span class="key">sim workgroups</span><span id="stat-dispatch">—</span></div>
|
|
109
110
|
</div>
|
|
110
111
|
|
|
@@ -39,7 +39,17 @@ async function main() {
|
|
|
39
39
|
return show_message("No WebGPU adapter — this browser exposes the API but has no usable GPU.");
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
// The coherence pass's bucket offsets come from the CSDLDF prefix scan, which is built on
|
|
43
|
+
// subgroup ops — refusing by name beats the pipeline-creation error a device without it raises.
|
|
44
|
+
if (!adapter.features.has("subgroups")) {
|
|
45
|
+
return show_message(
|
|
46
|
+
"This browser's WebGPU adapter does not offer the 'subgroups' feature.\n"
|
|
47
|
+
+ "The simulate list's program-coherent bucketing scans its bin counts with the CSDLDF\n"
|
|
48
|
+
+ "prefix scan, which is built on subgroup ops."
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const device = await adapter.requestDevice({ requiredFeatures: ["subgroups"] });
|
|
43
53
|
device.addEventListener?.("uncapturederror", (e) => console.error("WebGPU error:", e.error.message));
|
|
44
54
|
|
|
45
55
|
// Every compute pass here carries its per-dispatch state as immediate data, an optional
|
|
@@ -148,7 +158,7 @@ async function main() {
|
|
|
148
158
|
}
|
|
149
159
|
|
|
150
160
|
/** Push one stats snapshot into the overlay. Absent elements are simply skipped. */
|
|
151
|
-
function write_hud({ fps, alive, dead, dispatch, draw }) {
|
|
161
|
+
function write_hud({ fps, alive, dead, dispatch, draw, sim_padded }) {
|
|
152
162
|
const put = (id, value) => {
|
|
153
163
|
const node = document.getElementById(id);
|
|
154
164
|
if (node !== null) {
|
|
@@ -160,6 +170,9 @@ function write_hud({ fps, alive, dead, dispatch, draw }) {
|
|
|
160
170
|
put("stat-alive", alive.toLocaleString());
|
|
161
171
|
put("stat-dead", dead.toLocaleString());
|
|
162
172
|
put("stat-draw", draw[1].toLocaleString());
|
|
173
|
+
// Padding rounds each program's run up to a whole workgroup, so this is >= alive; the gap is
|
|
174
|
+
// what wave-coherence costs in lanes.
|
|
175
|
+
put("stat-sim-lanes", sim_padded.toLocaleString());
|
|
163
176
|
put("stat-dispatch", dispatch[0].toLocaleString());
|
|
164
177
|
}
|
|
165
178
|
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
* @typedef {object} ParticleSceneStats
|
|
3
3
|
* @property {number} alive particles alive at the end of the captured frame
|
|
4
4
|
* @property {number} dead free slots left in the pool
|
|
5
|
-
* @property {number} alive_in the snapshot next frame's simulate reads as its input length
|
|
5
|
+
* @property {number} alive_in the snapshot next frame's simulate reads as its input length — the
|
|
6
|
+
* PADDED length of the coherence list, so it is `sim_padded` from the captured frame, not `alive`
|
|
7
|
+
* @property {number} sim_padded length of the program-coherent list the coherence pass built this
|
|
8
|
+
* frame; the gap to `alive` is the lanes padding costs to keep each wave on one VM program
|
|
6
9
|
* @property {number[]} dispatch simulate's indirect dispatch args, `[x, y, z]` workgroups
|
|
7
10
|
* @property {number[]} draw the billboard draw's indirect args, `[vertices, instances]`
|
|
8
11
|
*/
|
|
@@ -37,9 +40,15 @@ export type ParticleSceneStats = {
|
|
|
37
40
|
*/
|
|
38
41
|
dead: number;
|
|
39
42
|
/**
|
|
40
|
-
* the snapshot next frame's simulate reads as its input length
|
|
43
|
+
* the snapshot next frame's simulate reads as its input length — the
|
|
44
|
+
* PADDED length of the coherence list, so it is `sim_padded` from the captured frame, not `alive`
|
|
41
45
|
*/
|
|
42
46
|
alive_in: number;
|
|
47
|
+
/**
|
|
48
|
+
* length of the program-coherent list the coherence pass built this
|
|
49
|
+
* frame; the gap to `alive` is the lanes padding costs to keep each wave on one VM program
|
|
50
|
+
*/
|
|
51
|
+
sim_padded: number;
|
|
43
52
|
/**
|
|
44
53
|
* simulate's indirect dispatch args, `[x, y, z]` workgroups
|
|
45
54
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"particle_scene.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/particle_system/particle_scene.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"particle_scene.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/particle_system/particle_scene.js"],"names":[],"mappings":"AA4FA;;;;;;;;;;GAUG;AAEH;;;;;;;;GAQG;AACH;IAJqC,YAAY;IACrB,QAAQ,GAAzB,MAAM;IACJ,MAAM,CAiUlB;AAjWD;;;;GAIG;AACH,0CAA2C;AAE3C,wGAAwG;AACxG,sCAAuC;;;;;WAOzB,MAAM;;;;UACN,MAAM;;;;;cACN,MAAM;;;;;gBAEN,MAAM;;;;cAEN,MAAM,EAAE;;;;UACR,MAAM,EAAE"}
|
|
@@ -4,7 +4,23 @@ import { m4_look_at } from "../../../core/geom/3d/mat4/m4_look_at.js";
|
|
|
4
4
|
import { m4_multiply } from "../../../core/geom/3d/mat4/m4_multiply.js";
|
|
5
5
|
import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
|
|
6
6
|
import { CAMERA_UNIFORM_STRUCT } from "../../renderer/camera/CAMERA_UNIFORM_STRUCT.js";
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
PARTICLE_RECORD_WORD_COUNT,
|
|
9
|
+
PARTICLE_SIMULATE_WORKGROUP_SIZE,
|
|
10
|
+
} from "../../renderer/particles/ParticleConstants.js";
|
|
11
|
+
import {
|
|
12
|
+
PREFIX_SCAN_CSDLDF_HEADER_WORDS,
|
|
13
|
+
PREFIX_SCAN_CSDLDF_PARTITION_SIZE,
|
|
14
|
+
shader_prefix_scan_csdldf,
|
|
15
|
+
} from "../../renderer/gpu_primitive/prefix_sum/v1/shader_prefix_scan_csdldf.js";
|
|
16
|
+
import { build_indirect_compute_dispatch_command } from "../../renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
|
|
17
|
+
import {
|
|
18
|
+
shader_particle_bucket_fill,
|
|
19
|
+
shader_particle_bucket_histogram,
|
|
20
|
+
shader_particle_bucket_pad,
|
|
21
|
+
shader_particle_bucket_reset,
|
|
22
|
+
shader_particle_bucket_scatter,
|
|
23
|
+
} from "../../renderer/particles/coherence/shader_particle_bucket.js";
|
|
8
24
|
import { PARTICLE_COUNTER_COUNT } from "../../renderer/particles/data/PARTICLE_COUNTERS.js";
|
|
9
25
|
import { EMITTER_BLEND, EMITTER_PROJECTION } from "../../renderer/particles/data/PARTICLE_EMITTER_LAYOUT.js";
|
|
10
26
|
import { NodeGraph } from "../../../core/model/node-graph/NodeGraph.js";
|
|
@@ -23,10 +39,7 @@ import {
|
|
|
23
39
|
shader_particle_build_indirect,
|
|
24
40
|
shader_particle_reset_counters,
|
|
25
41
|
} from "../../renderer/particles/shaders/shader_particle_finalize.js";
|
|
26
|
-
import {
|
|
27
|
-
PARTICLE_SIMULATE_WORKGROUP_SIZE,
|
|
28
|
-
shader_particle_simulate,
|
|
29
|
-
} from "../../renderer/particles/shaders/shader_particle_simulate.js";
|
|
42
|
+
import { shader_particle_simulate } from "../../renderer/particles/shaders/shader_particle_simulate.js";
|
|
30
43
|
|
|
31
44
|
/**
|
|
32
45
|
* The scene the particle playground draws, with every reference to the page removed: it takes a
|
|
@@ -50,6 +63,12 @@ import {
|
|
|
50
63
|
* billboard draw via `drawIndirect`, both from args the build-indirect pass writes on the GPU. No
|
|
51
64
|
* CPU readback participates in sizing anything — a stale CPU count would orphan alive-list entries
|
|
52
65
|
* when the population grows and double-free slots when it shrinks.
|
|
66
|
+
*
|
|
67
|
+
* The four emitters run four distinct compiled programs, so this is also where the simulation-order
|
|
68
|
+
* bucketing has something to do: without it a simulate wave holds fire, smoke, spark and dust
|
|
69
|
+
* particles side by side, each wanting different opcodes out of the interpreter's switch. The
|
|
70
|
+
* bucketing passes are encoded directly here rather than through `graph_particles`, which is the
|
|
71
|
+
* frame-graph wiring of the same sequence.
|
|
53
72
|
*/
|
|
54
73
|
|
|
55
74
|
/** Maximum simultaneous particles across every emitter — they share one pool. */
|
|
@@ -75,7 +94,10 @@ const STATS_OFFSET_DRAW_ARGS = 48;
|
|
|
75
94
|
* @typedef {object} ParticleSceneStats
|
|
76
95
|
* @property {number} alive particles alive at the end of the captured frame
|
|
77
96
|
* @property {number} dead free slots left in the pool
|
|
78
|
-
* @property {number} alive_in the snapshot next frame's simulate reads as its input length
|
|
97
|
+
* @property {number} alive_in the snapshot next frame's simulate reads as its input length — the
|
|
98
|
+
* PADDED length of the coherence list, so it is `sim_padded` from the captured frame, not `alive`
|
|
99
|
+
* @property {number} sim_padded length of the program-coherent list the coherence pass built this
|
|
100
|
+
* frame; the gap to `alive` is the lanes padding costs to keep each wave on one VM program
|
|
79
101
|
* @property {number[]} dispatch simulate's indirect dispatch args, `[x, y, z]` workgroups
|
|
80
102
|
* @property {number[]} draw the billboard draw's indirect args, `[vertices, instances]`
|
|
81
103
|
*/
|
|
@@ -148,6 +170,37 @@ export function create_particle_scene(graphics, { color_format, capacity = PARTI
|
|
|
148
170
|
const dispatch_args = device.createBuffer({ label: "particles/dispatch_args", size: 3 * 4, usage: args_usage });
|
|
149
171
|
const draw_args = device.createBuffer({ label: "particles/draw_args", size: 4 * 4, usage: args_usage });
|
|
150
172
|
|
|
173
|
+
// --- simulation-order (coherence) buffers -------------------------------------------------
|
|
174
|
+
//
|
|
175
|
+
// A separate set from the render-order sort's, on purpose: one list is grouped by VM program and
|
|
176
|
+
// camera-independent, the other is back-to-front by view depth. Sharing a buffer between them
|
|
177
|
+
// would couple a camera-driven ordering to a program-driven one.
|
|
178
|
+
const sizes = system.bufferSizes();
|
|
179
|
+
const buckets = system.bucketCount();
|
|
180
|
+
const sim_list = device.createBuffer({ label: "particles/sim_list", size: sizes.sim_list, usage: storage });
|
|
181
|
+
const sim_keys = device.createBuffer({ label: "particles/sim_keys", size: sizes.sim_keys, usage: storage });
|
|
182
|
+
const sim_histogram = device.createBuffer({ label: "particles/sim_histogram", size: sizes.sim_histogram, usage: storage });
|
|
183
|
+
const sim_bucket_counts = device.createBuffer({ label: "particles/sim_bucket_counts", size: sizes.sim_bucket_counts, usage: storage });
|
|
184
|
+
const sim_cursor = device.createBuffer({ label: "particles/sim_cursor", size: sizes.sim_cursor, usage: storage });
|
|
185
|
+
const sim_dispatch_args = device.createBuffer({ label: "particles/sim_dispatch_args", size: sizes.sim_dispatch_args, usage: args_usage });
|
|
186
|
+
|
|
187
|
+
// Scratch the reused CSDLDF scan needs: the indirect command it is dispatched with, and its
|
|
188
|
+
// decoupled-lookback spine. One partition covers every plausible bucket count.
|
|
189
|
+
const scan_command = device.createBuffer({
|
|
190
|
+
label: "particles/sim_scan_command",
|
|
191
|
+
size: 3 * 4,
|
|
192
|
+
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.INDIRECT,
|
|
193
|
+
});
|
|
194
|
+
// Cleared at the top of every frame, not just on creation: the spine carries per-partition
|
|
195
|
+
// flags, and a stale FLAG_INCLUSIVE left over from last frame is read as this frame's answer.
|
|
196
|
+
// The frame-graph wiring gets this for free from `BufferResourceDescriptor.empty`; encoding by
|
|
197
|
+
// hand has to ask. Rounded to a 256-byte allocation rather than the 8 bytes one partition needs.
|
|
198
|
+
const scan_spine = device.createBuffer({
|
|
199
|
+
label: "particles/sim_scan_spine",
|
|
200
|
+
size: Math.max(256, Math.ceil(buckets / PREFIX_SCAN_CSDLDF_PARTITION_SIZE) * 2 * 4),
|
|
201
|
+
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
|
|
202
|
+
});
|
|
203
|
+
|
|
151
204
|
const initial = system.initialFreeList();
|
|
152
205
|
device.queue.writeBuffer(dead, 0, initial.dead);
|
|
153
206
|
device.queue.writeBuffer(counters, 0, initial.counters);
|
|
@@ -205,7 +258,12 @@ export function create_particle_scene(graphics, { color_format, capacity = PARTI
|
|
|
205
258
|
capacity,
|
|
206
259
|
|
|
207
260
|
/** Buffers a harness may inspect. Not for the frame loop, which never reads them back. */
|
|
208
|
-
buffers: {
|
|
261
|
+
buffers: {
|
|
262
|
+
pool, alive_a, alive_b, dead, counters, spawn_requests, emitters, program, constants,
|
|
263
|
+
dispatch_args, draw_args,
|
|
264
|
+
sim_list, sim_keys, sim_histogram, sim_bucket_counts, sim_cursor, sim_dispatch_args,
|
|
265
|
+
sim_scan_command: scan_command, sim_scan_spine: scan_spine,
|
|
266
|
+
},
|
|
209
267
|
|
|
210
268
|
/**
|
|
211
269
|
* Encode one whole frame: geometry, then emit + simulate + build-indirect, then the
|
|
@@ -259,13 +317,59 @@ export function create_particle_scene(graphics, { color_format, capacity = PARTI
|
|
|
259
317
|
encoder: cmd,
|
|
260
318
|
bindings: {
|
|
261
319
|
emitters, program, vm_constants: constants, pool,
|
|
262
|
-
|
|
320
|
+
sim_list, alive_out: alive_write, dead, counters,
|
|
263
321
|
settings: { u_dt: dt, u_time: time, u_frame: system.frame },
|
|
264
322
|
},
|
|
265
323
|
command: dispatch_args,
|
|
266
324
|
});
|
|
267
325
|
|
|
268
|
-
//
|
|
326
|
+
// --- coherence: regroup the finished alive list by VM program for NEXT frame's simulate ---
|
|
327
|
+
//
|
|
328
|
+
// Reads the list emit and simulate have both finished appending to, and rewrites
|
|
329
|
+
// `sim_list` — the buffer simulate read a few lines above. Consecutive dispatches are
|
|
330
|
+
// ordered, so the read is complete before the write lands.
|
|
331
|
+
shader_particle_bucket_reset.dispatchThreads({
|
|
332
|
+
encoder: cmd,
|
|
333
|
+
bindings: { counters, histogram: sim_histogram, cursor: sim_cursor, sim_dispatch_args, u_bucket_count: buckets },
|
|
334
|
+
thread_count_x: bucket_reset_thread_count(buckets),
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
shader_particle_bucket_histogram.dispatchIndirect({
|
|
338
|
+
encoder: cmd,
|
|
339
|
+
bindings: { emitters, pool, alive: alive_write, keys: sim_keys, histogram: sim_histogram, counters },
|
|
340
|
+
command: sim_dispatch_args,
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
shader_particle_bucket_pad.dispatchThreads({
|
|
344
|
+
encoder: cmd,
|
|
345
|
+
bindings: { histogram: sim_histogram, bucket_counts: sim_bucket_counts, u_bucket_count: buckets },
|
|
346
|
+
thread_count_x: buckets,
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
// The same scan the radix sort runs its spine through, reused unmodified.
|
|
350
|
+
cmd.clearBuffer(scan_spine, 0, scan_spine.size);
|
|
351
|
+
build_indirect_compute_dispatch_command(
|
|
352
|
+
PREFIX_SCAN_CSDLDF_PARTITION_SIZE, cmd, sim_histogram, 0, scan_command, 0,
|
|
353
|
+
);
|
|
354
|
+
shader_prefix_scan_csdldf.dispatchIndirect({
|
|
355
|
+
encoder: cmd,
|
|
356
|
+
command: scan_command,
|
|
357
|
+
bindings: { scan_in: sim_histogram, spine: scan_spine },
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
shader_particle_bucket_scatter.dispatchIndirect({
|
|
361
|
+
encoder: cmd,
|
|
362
|
+
bindings: { keys: sim_keys, alive: alive_write, scanned: sim_histogram, cursor: sim_cursor, sim_list, counters },
|
|
363
|
+
command: sim_dispatch_args,
|
|
364
|
+
});
|
|
365
|
+
|
|
366
|
+
shader_particle_bucket_fill.dispatchThreads({
|
|
367
|
+
encoder: cmd,
|
|
368
|
+
bindings: { bucket_counts: sim_bucket_counts, scanned: sim_histogram, sim_list, counters, u_bucket_count: buckets },
|
|
369
|
+
thread_count_x: buckets * PARTICLE_SIMULATE_WORKGROUP_SIZE,
|
|
370
|
+
});
|
|
371
|
+
|
|
372
|
+
// Snapshot the padded list length (next frame's simulate input) + write this frame's draw args.
|
|
269
373
|
shader_particle_build_indirect.dispatch({
|
|
270
374
|
encoder: cmd,
|
|
271
375
|
bindings: { counters, dispatch_args, draw_args, u_workgroup_size: PARTICLE_SIMULATE_WORKGROUP_SIZE },
|
|
@@ -320,6 +424,7 @@ export function create_particle_scene(graphics, { color_format, capacity = PARTI
|
|
|
320
424
|
alive: words[0],
|
|
321
425
|
dead: words[1],
|
|
322
426
|
alive_in: words[4],
|
|
427
|
+
sim_padded: words[5],
|
|
323
428
|
dispatch: [words[dispatch_base], words[dispatch_base + 1], words[dispatch_base + 2]],
|
|
324
429
|
draw: [words[draw_base], words[draw_base + 1]],
|
|
325
430
|
};
|
|
@@ -529,6 +634,18 @@ function translation(x, y, z) {
|
|
|
529
634
|
return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, x, y, z, 1];
|
|
530
635
|
}
|
|
531
636
|
|
|
637
|
+
/**
|
|
638
|
+
* Threads the bucket reset pass needs: enough to cover the scan's header plus its bins, rounded up
|
|
639
|
+
* to the whole `vec4` the last bin lands in (the scan reads whole `vec4`s, so the tail has to be
|
|
640
|
+
* cleared too or garbage joins the sums).
|
|
641
|
+
*
|
|
642
|
+
* @param {number} bucket_count
|
|
643
|
+
* @returns {number}
|
|
644
|
+
*/
|
|
645
|
+
function bucket_reset_thread_count(bucket_count) {
|
|
646
|
+
return PREFIX_SCAN_CSDLDF_HEADER_WORDS + ((bucket_count + 3) & ~3);
|
|
647
|
+
}
|
|
648
|
+
|
|
532
649
|
function data_buffer(device, label, data, usage) {
|
|
533
650
|
const buffer = device.createBuffer({ label, size: Math.max(data.byteLength, 4), usage });
|
|
534
651
|
device.queue.writeBuffer(buffer, 0, data);
|
|
@@ -118,6 +118,7 @@ export class GraphicsContext {
|
|
|
118
118
|
readonly isGraphicsContext: boolean;
|
|
119
119
|
#private;
|
|
120
120
|
}
|
|
121
|
+
export type BinaryBuffer = import("../../core/binary/BinaryBuffer.js").BinaryBuffer;
|
|
121
122
|
import { GPUGeometryManager } from "./geometry/GPUGeometryManager.js";
|
|
122
123
|
import { GPUMaterialManager } from "./material/GPUMaterialManager.js";
|
|
123
124
|
import { GPUSamplerManager } from "./GPUSamplerManager.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphicsContext.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/GraphicsContext.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GraphicsContext.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/GraphicsContext.js"],"names":[],"mappings":"AA4BA;IAoJI,yBA8BC;IAjLD;;OAEG;IACH,YAFU,kBAAkB,CAEjB;IAEX;;OAEG;IACH,WAFU,kBAAkB,CAElB;IAOV;;OAEG;IACH,UAFU,iBAAiB,CAElB;IAET;;;OAGG;IACH,qDAOC;IAOD;;;OAGG;IACH,6CAEC;IAED;;OAEG;IACH,kBAFU,qBAAqB,CAEd;IAEjB;;OAEG;IACH,kBAFU,qBAAqB,CAEd;IAEjB;;OAEG;IACH,mBAFU,sBAAsB,CAEd;IAGlB;;OAEG;IACH,gBAFU,oBAAoB,CAEf;IAEf;;OAEG;IACH,UAFU,cAAc,CAEf;IAET;;;;OAIG;IACH,kBAFU,qBAAqB,CAEd;IAEjB;;OAEG;IACH,aAFU,gBAAgB,CAEd;IAQZ;;;OAGG;IACH,uBAFU,kBAAkB,CAEN;IAEtB;;;;OAIG;IACH,yBAFU,wBAAwB,CAEV;IAExB;;;OAGG;IACH,0BAFU,yBAAyB,CAEV;IAEzB;;;OAGG;IACH,oBAFU,mBAAmB,CAEV;IAUnB;;;OAGG;IACH,8BAEC;IAED,uBAMC;IAED;;;OAGG;IACH,wBAEC;IAkCD;;;;;;;;OAQG;IACH,gGALW,oBAAoB,EAAE,cACtB;QAAC,MAAM,EAAE,YAAY,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,QAmE9D;IAED;;;;OAIG;IACH,mDAFa,gBAAgB,CAI5B;IAED;;OAEG;IACH,+BAcC;IAED,4BAEC;IAED,eAmBC;IAED,gBAcC;IAGL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;;CAN1C;2BAtUY,OAAO,mCAAmC,EAAE,YAAY;mCAZlC,kCAAkC;mCAGlC,kCAAkC;kCADnC,wBAAwB;2CAEf,mDAAmD;oCAH1D,2CAA2C;sCAXzC,6CAA6C;sCAC7C,6CAA6C;uCAF5C,8CAA8C;qCAIhD,0CAA0C;+BAchD,6BAA6B;sCACtB,4CAA4C;iCAbjD,+BAA+B;mCAC7B,gCAAgC;yCAC1B,sCAAsC;0CAErC,uCAAuC;oCAO7C,kCAAkC;iCARtB,8BAA8B"}
|
|
@@ -20,6 +20,10 @@ import { GPUTextureAllocator } from "./texture/GPUTextureAllocator.js";
|
|
|
20
20
|
import { TextureManager } from "./texture/TextureManager.js";
|
|
21
21
|
import { VirtualTextureManager } from "./texture/virtual/VirtualTextureManager.js";
|
|
22
22
|
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @typedef {import("../../core/binary/BinaryBuffer.js").BinaryBuffer} BinaryBuffer
|
|
26
|
+
*/
|
|
23
27
|
const DEBUG_LOGGING = false;
|
|
24
28
|
|
|
25
29
|
export class GraphicsContext {
|
|
@@ -11,7 +11,7 @@ export class Renderer {
|
|
|
11
11
|
*
|
|
12
12
|
* @returns {HTMLCanvasElement|OffscreenCanvas|undefined}
|
|
13
13
|
*/
|
|
14
|
-
get canvas():
|
|
14
|
+
get canvas(): HTMLCanvasElement | OffscreenCanvas;
|
|
15
15
|
/**
|
|
16
16
|
* @type {GPUDevice}
|
|
17
17
|
*/
|
|
@@ -29,6 +29,20 @@ export class Renderer {
|
|
|
29
29
|
* @type {ShadeIndirectLightingMode}
|
|
30
30
|
*/
|
|
31
31
|
indirect_lighting_mode: ShadeIndirectLightingMode;
|
|
32
|
+
/**
|
|
33
|
+
* Which order-independent transparency technique draws the transparent buckets. Both modes
|
|
34
|
+
* are wired at the single transparency call site and take the same inputs, so this is safe to
|
|
35
|
+
* flip at runtime for an A/B. See {@link ShadeTransparencyMode} for what each one costs and
|
|
36
|
+
* needs from the device. AVBOIT is the default since 2026-09-03: depth-complexity invariant
|
|
37
|
+
* where MBOIT leaks stacked surfaces, and no 32-bit float blending.
|
|
38
|
+
* @type {ShadeTransparencyMode}
|
|
39
|
+
*/
|
|
40
|
+
transparency_mode: ShadeTransparencyMode;
|
|
41
|
+
/**
|
|
42
|
+
* Switches of the AVBOIT mode, read every frame while {@link transparency_mode} selects it.
|
|
43
|
+
* @type {AVBOITSettings}
|
|
44
|
+
*/
|
|
45
|
+
avboit: AVBOITSettings;
|
|
32
46
|
feature_ssr_enabled: boolean;
|
|
33
47
|
feature_ssao_enabled: boolean;
|
|
34
48
|
/**
|
|
@@ -388,6 +402,8 @@ export class Renderer {
|
|
|
388
402
|
}
|
|
389
403
|
import { SceneManager } from "./scene/SceneManager.js";
|
|
390
404
|
import { ShadeIndirectLightingMode } from "./ShadeIndirectLightingMode.js";
|
|
405
|
+
import { ShadeTransparencyMode } from "./ShadeTransparencyMode.js";
|
|
406
|
+
import { AVBOITSettings } from "./rasterize/native/avboit/AVBOITSettings.js";
|
|
391
407
|
import { MotionBlur } from "./postprocess/motion_blur/MotionBlur.js";
|
|
392
408
|
import { DepthOfField } from "./postprocess/dof/raymarch/DepthOfField.js";
|
|
393
409
|
import { DepthOfFieldU } from "./postprocess/dof/gather/DepthOfFieldU.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/Renderer.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/Renderer.js"],"names":[],"mappings":"AAiGA;IAOI,0BAEC;IAED;;OAEG;IACH,0BAAQ;IAER;;;;;;OAMG;IACH,kDAEC;IAED;;OAEG;IACH,kBAAO;IAYP;;;OAGG;IACH,2BAEC;IAaD,0CAGC;IAED,uCAEC;IAED;;;;OAIG;IACH,wBAFU,yBAAyB,CAEoB;IAEvD;;;;;;;OAOG;IACH,mBAFU,qBAAqB,CAEkB;IAEjD;;;OAGG;IACH,QAFU,cAAc,CAEM;IAE9B,6BAA4B;IAC5B,8BAA4B;IAC5B;;;;OAIG;IACH,mCAAkC;IAClC;;;;;;;OAOG;IACH,mCAFU,OAAO,CAEyB;IAC1C,+BAA6B;IAC7B,4CAA0C;IAkB1C,uCAKC;IArBD;;;;;;;;;;OAUG;IACH,oCAGC;IASD;;;;;;;OAOG;IACH,0BAFU,OAAO,CAEe;IAQhC;;;;;OAKG;IACH,sCAOC;IAjBD,mCAEC;IAiBD;;;;;;;;;OASG;IACH,6BAFU,OAAO,CAEmB;IAWpC;;;;;OAKG;IACH,8BAA+C;IAE/C;;;;;;;;OAQG;IACH,6BAFU,OAAO,CAEmB;IAEpC;;;;;;;;;;;;;;OAcG;IACH,8BAFU,OAAO,CAEoB;IAErC;;;;;;;;;;OAUG;IACH,qBAFU,OAAO,CAEW;IAU5B;;;;;OAKG;IACH,wBAA0C;IAE1C;;;;;;;;OAQG;IACH,eAFU,UAAU,GAAC,QAAQ,CAEF;IAU3B;;;;OAIG;IACH,gCAAwD;IAExD;;;;;;;;;;;;OAYG;IACH,gBAFU,OAAO,CAEK;IAEtB;;;OAGG;IACH,4BAFU,OAAO,CAEiB;IAKlC;;;OAGG;IACH,yBAEC;IAOD;;;OAGG;IACH,gCAEC;IAcD;;;;;;;;;OASG;IACH,qBAA+B;IAE/B,wBAA+B;IAgB/B;;;OAGG;IACH,2CAeC;IAED;;;OAGG;IACH,wCAEC;IA0BD;;;OAGG;IACH,iCAEC;IAED;;;;OAIG;IACH,2BAEC;IAQD;;;OAGG;IACH,+CAIC;IAED;;;OAGG;IACH,gDAIC;IAwCD;;;OAGG;IACH,6BAcC;IA1BD;;;OAGG;IACH,0BAEC;IAsBD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,iBAFU,oBAAkB,IAAI,CAET;IAEvB;;OAEG;IACH;;;;;;;;;;;;;;OAcG;IACH,2DAEC;IAED;;;;;OAKG;IACH,8CAFa,OAAO,CAInB;IAED;;;OAGG;IACH,uBAHW,UAAU,GACR,MAAM,CAIlB;IAgBD;;;;OAIG;IACH,iCAFY,gBAAgB,CAW3B;IAED;;;OAGG;IACH,6BAYC;IAED;;;;OAIG;IACH,wCAFa,2BAA2B,CAcvC;IAGD;;;OAGG;IACH,+BAuBC;IAmMD;;;;OAIG;IACH,0BAEC;IAgBD;;;;;;OAMG;IACH,cAFU,iBAAiB,CAEU;IAErC;;;;;;OAMG;IACH,eAgBC;IAiFD;;;;;OAKG;IACH,+EAkOC;IAED;;OAEG;IACH,gBAGC;IAQD,4BAwBC;IAqID;;;;;OAKG;IACH,UAHW,MAAM,KACN,MAAM,QAgBhB;IAoFD,0CAMC;IAED;;;;;;;;;;OAUG;IACH,qEAHW,MAAM,GACJ,OAAO,CAsBnB;IAED;;;;;;;;;;;;;;;OAeG;IACH,8EAJW,MAAM,UACN,iBAAiB,GACf,OAAO,CAm1BnB;;CACJ;6BAn5E4B,yBAAyB;0CACZ,gCAAgC;sCACpC,4BAA4B;+BACnC,6CAA6C;2BAzBjD,yCAAyC;6BAFvC,4CAA4C;8BAD3C,2CAA2C;4BAsC7C,uBAAuB;gCA3CnB,sBAAsB;mBArCnC,oCAAoC;oBACnC,4BAA4B;kCA4Ed,gCAAgC;2BAzDvC,2BAA2B;iCAuDrB,0CAA0C;4CAzC/B,+DAA+D;yBAgClF,yBAAyB;kCAQhB,wBAAwB;oBA5BtC,0BAA0B;uCAPP,sDAAsD"}
|
|
@@ -54,6 +54,9 @@ import { shader_debug_velocity } from "./postprocess/velocity/shader_debug_veloc
|
|
|
54
54
|
import {
|
|
55
55
|
graph_rasterize_meshes_transparent_oit
|
|
56
56
|
} from "./rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js";
|
|
57
|
+
import {
|
|
58
|
+
graph_rasterize_meshes_transparent_avboit
|
|
59
|
+
} from "./rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js";
|
|
57
60
|
import {
|
|
58
61
|
viz_rasterization_alpha_tested_pass_descriptor
|
|
59
62
|
} from "./rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js";
|
|
@@ -65,6 +68,8 @@ import { graph_rasterize_scene } from "./rasterize/standard/graph_rasterize_scen
|
|
|
65
68
|
import { ReSTIRDI } from "./restir/di/ReSTIRDI.js";
|
|
66
69
|
import { SceneManager } from "./scene/SceneManager.js";
|
|
67
70
|
import { ShadeIndirectLightingMode } from "./ShadeIndirectLightingMode.js";
|
|
71
|
+
import { ShadeTransparencyMode } from "./ShadeTransparencyMode.js";
|
|
72
|
+
import { AVBOITSettings } from "./rasterize/native/avboit/AVBOITSettings.js";
|
|
68
73
|
import { graph_image_pass } from "./shader/graph/graph_image_pass.js";
|
|
69
74
|
import { graph_import_buffer } from "./shader/graph/graph_import_buffer.js";
|
|
70
75
|
import { graph_import_texture } from "./shader/graph/graph_import_texture.js";
|
|
@@ -167,6 +172,22 @@ export class Renderer {
|
|
|
167
172
|
*/
|
|
168
173
|
indirect_lighting_mode = ShadeIndirectLightingMode.IBL;
|
|
169
174
|
|
|
175
|
+
/**
|
|
176
|
+
* Which order-independent transparency technique draws the transparent buckets. Both modes
|
|
177
|
+
* are wired at the single transparency call site and take the same inputs, so this is safe to
|
|
178
|
+
* flip at runtime for an A/B. See {@link ShadeTransparencyMode} for what each one costs and
|
|
179
|
+
* needs from the device. AVBOIT is the default since 2026-09-03: depth-complexity invariant
|
|
180
|
+
* where MBOIT leaks stacked surfaces, and no 32-bit float blending.
|
|
181
|
+
* @type {ShadeTransparencyMode}
|
|
182
|
+
*/
|
|
183
|
+
transparency_mode = ShadeTransparencyMode.AVBOIT;
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Switches of the AVBOIT mode, read every frame while {@link transparency_mode} selects it.
|
|
187
|
+
* @type {AVBOITSettings}
|
|
188
|
+
*/
|
|
189
|
+
avboit = new AVBOITSettings();
|
|
190
|
+
|
|
170
191
|
feature_ssr_enabled = false;
|
|
171
192
|
feature_ssao_enabled = true;
|
|
172
193
|
/**
|
|
@@ -2178,35 +2199,8 @@ export class Renderer {
|
|
|
2178
2199
|
|
|
2179
2200
|
}
|
|
2180
2201
|
|
|
2181
|
-
// current_color_out = indirect_diffuse
|
|
2182
|
-
// current_color_out = indirect_specular
|
|
2183
|
-
|
|
2184
2202
|
}
|
|
2185
2203
|
|
|
2186
|
-
// current_color_out = graph_decode_rgbe9995_to_rgb16float({
|
|
2187
|
-
// graph,
|
|
2188
|
-
// input:indirect_diffuse_near_field,
|
|
2189
|
-
// resolution: view_ctx.resolution,
|
|
2190
|
-
// });
|
|
2191
|
-
//
|
|
2192
|
-
// const [norm] = graph_image_pass({
|
|
2193
|
-
// shader: shader_decode_octahedral_normal,
|
|
2194
|
-
// inputs:{
|
|
2195
|
-
// tInput: bent_normals,
|
|
2196
|
-
// },
|
|
2197
|
-
// graph,
|
|
2198
|
-
// output_resolution: view_ctx.resolution,
|
|
2199
|
-
// });
|
|
2200
|
-
//
|
|
2201
|
-
// [current_color_out] = graph_image_pass({
|
|
2202
|
-
// graph,
|
|
2203
|
-
// shader: shader_draw_normals,
|
|
2204
|
-
// inputs:{
|
|
2205
|
-
// tInput: norm,
|
|
2206
|
-
// },
|
|
2207
|
-
// output_resolution: view_ctx.resolution,
|
|
2208
|
-
// });
|
|
2209
|
-
|
|
2210
2204
|
// Composite volumetric fog over the finalized opaque + background + indirect colour.
|
|
2211
2205
|
// A dedicated pass (not inline in the shading shaders) because indirect lighting is added
|
|
2212
2206
|
// in a separate additively-blended pass, so the full surface radiance only exists here.
|
|
@@ -2250,7 +2244,13 @@ export class Renderer {
|
|
|
2250
2244
|
// do transparent alpha pass
|
|
2251
2245
|
graph.push_scope("transparencies");
|
|
2252
2246
|
|
|
2253
|
-
|
|
2247
|
+
// Mutually exclusive by construction: one orchestrator runs at this one call site, and both
|
|
2248
|
+
// take the same argument object, so the mode is a pure selector.
|
|
2249
|
+
const graph_rasterize_meshes_transparent = this.transparency_mode === ShadeTransparencyMode.AVBOIT
|
|
2250
|
+
? graph_rasterize_meshes_transparent_avboit
|
|
2251
|
+
: graph_rasterize_meshes_transparent_oit;
|
|
2252
|
+
|
|
2253
|
+
current_color_out = graph_rasterize_meshes_transparent({
|
|
2254
2254
|
graph,
|
|
2255
2255
|
buckets: gr_render_buckets,
|
|
2256
2256
|
view_ctx,
|
|
@@ -2270,6 +2270,7 @@ export class Renderer {
|
|
|
2270
2270
|
volumetrics_metadata: volumetrics.metadata,
|
|
2271
2271
|
|
|
2272
2272
|
indirect_lighting_mode: this.indirect_lighting_mode,
|
|
2273
|
+
avboit: this.avboit,
|
|
2273
2274
|
});
|
|
2274
2275
|
|
|
2275
2276
|
graph.pop_scope();
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Selects which order-independent transparency technique draws the transparent buckets.
|
|
3
|
+
*
|
|
4
|
+
* Both modes share everything up to the draw commands (material filtering, meshlet expansion, HZB
|
|
5
|
+
* culling) and both composite onto the scene colour at `FramePhase.AfterLighting`; they differ in
|
|
6
|
+
* how the per-pixel transmittance in front of a fragment is represented.
|
|
7
|
+
*/
|
|
8
|
+
export type ShadeTransparencyMode = number;
|
|
9
|
+
export namespace ShadeTransparencyMode {
|
|
10
|
+
let MBOIT: number;
|
|
11
|
+
let AVBOIT: number;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=ShadeTransparencyMode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShadeTransparencyMode.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/ShadeTransparencyMode.js"],"names":[],"mappings":";;;;;;;oCAOU,MAAM"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Selects which order-independent transparency technique draws the transparent buckets.
|
|
3
|
+
*
|
|
4
|
+
* Both modes share everything up to the draw commands (material filtering, meshlet expansion, HZB
|
|
5
|
+
* culling) and both composite onto the scene colour at `FramePhase.AfterLighting`; they differ in
|
|
6
|
+
* how the per-pixel transmittance in front of a fragment is represented.
|
|
7
|
+
*
|
|
8
|
+
* @enum {number}
|
|
9
|
+
*/
|
|
10
|
+
export const ShadeTransparencyMode = {
|
|
11
|
+
/**
|
|
12
|
+
* Moment-based OIT (Peters et al. 2017): four power moments of the transmittance function per
|
|
13
|
+
* pixel, additively blended at full resolution into `r32float` + `rgba32float` targets, which
|
|
14
|
+
* is what puts `float32-blendable` on the device floor. Smooth, cheap, and not depth-complexity
|
|
15
|
+
* invariant — stacked opaque-ish layers leak. The default until 2026-09-03.
|
|
16
|
+
*
|
|
17
|
+
* See `rasterize/native/oit/`.
|
|
18
|
+
*/
|
|
19
|
+
MBOIT: 0,
|
|
20
|
+
/**
|
|
21
|
+
* Adaptive voxel-based OIT (Drobot, SIGGRAPH 2025): extinction splatted into a 1/8-resolution
|
|
22
|
+
* voxel volume whose depth axis is adaptively packed onto 128 physical slices, integrated into a
|
|
23
|
+
* 3D transmittance lookup. Depth-complexity and shift invariant, filters the background per
|
|
24
|
+
* channel for transmissive materials (opt-in, `Renderer.avboit`), and needs no 32-bit float
|
|
25
|
+
* blending. The default.
|
|
26
|
+
*
|
|
27
|
+
* See `rasterize/native/avboit/`.
|
|
28
|
+
*/
|
|
29
|
+
AVBOIT: 1,
|
|
30
|
+
};
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Round-trips a {@link MeshletGeometry} through a `BinaryBuffer`.
|
|
3
|
+
*
|
|
4
|
+
* **This is the offline meshlet format**, and saying so is the point of this docblock: nothing
|
|
5
|
+
* documented it as the intended pipeline, so a consumer reasonably assumed
|
|
6
|
+
* {@link meshlet_geometry_build_from_geometry} was the only route from a `Geometry` to something
|
|
7
|
+
* the renderer draws — and paid 1.25 seconds of unbroken main thread per 200k-triangle level for
|
|
8
|
+
* it, at load, synchronously (GAP-008).
|
|
9
|
+
*
|
|
10
|
+
* The pipeline this supports: build the meshlets once in the asset build, serialize here, ship the
|
|
11
|
+
* bytes, and let the runtime deserialize and upload. `serialize_bvh` decides whether the BLAS
|
|
12
|
+
* travels with them or is rebuilt on load — carrying it costs bytes and saves the rebuild.
|
|
13
|
+
*/
|
|
1
14
|
export class MeshletGeometrySerializationAdapter extends BinaryClassSerializationAdapter<any> {
|
|
2
15
|
constructor();
|
|
3
16
|
klass: typeof MeshletGeometry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeshletGeometrySerializationAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.js"],"names":[],"mappings":"AAMA;;IAGI,8BAAwB;IAGxB,uBAAqB;IAErB;;;OAGG;IACH,8BAFW,eAAe,QA6BzB;IAED;;;OAGG;IACH,gCAFW,eAAe,QAyCzB;CACJ;
|
|
1
|
+
{"version":3,"file":"MeshletGeometrySerializationAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;GAYG;AACH;;IAGI,8BAAwB;IAGxB,uBAAqB;IAErB;;;OAGG;IACH,8BAFW,eAAe,QA6BzB;IAED;;;OAGG;IACH,gCAFW,eAAe,QAyCzB;CACJ;gDAtGM,uEAAuE;gCAE9C,sBAAsB"}
|
|
@@ -4,6 +4,19 @@ import {
|
|
|
4
4
|
import { blas_from_meshlets } from "./blas_from_meshlets.js";
|
|
5
5
|
import { MeshletGeometry } from "./MeshletGeometry.js";
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Round-trips a {@link MeshletGeometry} through a `BinaryBuffer`.
|
|
9
|
+
*
|
|
10
|
+
* **This is the offline meshlet format**, and saying so is the point of this docblock: nothing
|
|
11
|
+
* documented it as the intended pipeline, so a consumer reasonably assumed
|
|
12
|
+
* {@link meshlet_geometry_build_from_geometry} was the only route from a `Geometry` to something
|
|
13
|
+
* the renderer draws — and paid 1.25 seconds of unbroken main thread per 200k-triangle level for
|
|
14
|
+
* it, at load, synchronously (GAP-008).
|
|
15
|
+
*
|
|
16
|
+
* The pipeline this supports: build the meshlets once in the asset build, serialize here, ship the
|
|
17
|
+
* bytes, and let the runtime deserialize and upload. `serialize_bvh` decides whether the BLAS
|
|
18
|
+
* travels with them or is rebuilt on load — carrying it costs bytes and saves the rebuild.
|
|
19
|
+
*/
|
|
7
20
|
export class MeshletGeometrySerializationAdapter extends BinaryClassSerializationAdapter {
|
|
8
21
|
|
|
9
22
|
version = 0
|
|
@@ -3,9 +3,27 @@
|
|
|
3
3
|
* to fill an existing instance (e.g. a subclass of `MeshletGeometry`)
|
|
4
4
|
* in place; otherwise a fresh instance is created and returned.
|
|
5
5
|
*
|
|
6
|
+
* **This is synchronous, single-threaded, and it is not cheap — so at load time it belongs
|
|
7
|
+
* OFFLINE, not on the frame loop.** Measured converting one level's meshes: 3.3k triangles across
|
|
8
|
+
* 23 meshes took 53 ms, 7.5k across 30 took 74 ms, and **199k across 45 took 1,246 ms** — an
|
|
9
|
+
* unbroken second and a quarter of main thread, scaling linearly, on a level that is small.
|
|
10
|
+
* Reported from a port as GAP-008.
|
|
11
|
+
*
|
|
12
|
+
* **The offline route already exists and is the intended pipeline.**
|
|
13
|
+
* {@link MeshletGeometrySerializationAdapter} round-trips a `MeshletGeometry` to and from a
|
|
14
|
+
* `BinaryBuffer` losslessly, so an asset build can call this once, serialize the result beside the
|
|
15
|
+
* source mesh, and leave the runtime with a deserialize and an upload. Nothing about this function
|
|
16
|
+
* needs to run in a browser. If you are calling it from a level loader, that is the thing to change
|
|
17
|
+
* first — before reaching for a worker, which only moves the cost.
|
|
18
|
+
*
|
|
19
|
+
* A pooled worker-backed geometry service, with meshlet construction as one of the things it
|
|
20
|
+
* serves, is where this is going; it is not here yet, and it would not remove the reason to build
|
|
21
|
+
* offline.
|
|
22
|
+
*
|
|
6
23
|
* @param {Geometry} geometry
|
|
7
24
|
* @param {MeshletGeometry} [out]
|
|
8
25
|
* @returns {MeshletGeometry}
|
|
26
|
+
* @see MeshletGeometrySerializationAdapter for the offline format
|
|
9
27
|
*/
|
|
10
28
|
export function meshlet_geometry_build_from_geometry(geometry: Geometry, out?: MeshletGeometry): MeshletGeometry;
|
|
11
29
|
import { MeshletGeometry } from "./MeshletGeometry.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meshlet_geometry_build_from_geometry.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.js"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"meshlet_geometry_build_from_geometry.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,+EAJW,eAAe,GACb,eAAe,CAqC3B;gCA/D+B,sBAAsB"}
|