@woosh/meep-engine 3.21.0 → 3.22.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 +96 -213
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
- package/editor/particles/effect/ParticleEffectDocument.js +0 -3
- package/editor/particles/effect/ParticleReferenceSimulation.js +1 -1
- package/editor/persistence/SceneMetadata.d.ts +9 -4
- package/editor/persistence/SceneMetadata.d.ts.map +1 -1
- package/editor/persistence/SceneMetadata.js +4 -3
- package/editor/tools/TransformToolV2.d.ts +2 -1
- package/editor/tools/TransformToolV2.d.ts.map +1 -1
- package/editor/tools/engine/Tool.d.ts +1 -1
- package/editor/tools/engine/Tool.d.ts.map +1 -1
- package/editor/tools/engine/ToolEngine.d.ts +1 -1
- package/editor/tools/engine/ToolEngine.d.ts.map +1 -1
- package/editor/view/ecs/EntityEditor.d.ts +3 -2
- package/editor/view/ecs/EntityEditor.d.ts.map +1 -1
- package/editor/view/ecs/EntityList.d.ts +7 -3
- package/editor/view/ecs/EntityList.d.ts.map +1 -1
- package/editor/view/ecs/EntityList.js +3 -2
- package/editor/view/ecs/components/common/NumericIntervalController.d.ts +8 -3
- package/editor/view/ecs/components/common/NumericIntervalController.d.ts.map +1 -1
- package/editor/view/ecs/components/common/NumericIntervalController.js +3 -2
- package/editor/view/ecs/components/common/TextController.d.ts +7 -3
- package/editor/view/ecs/components/common/TextController.d.ts.map +1 -1
- package/editor/view/ecs/components/common/TextController.js +3 -2
- package/editor/view/library/MeshLibraryView.d.ts.map +1 -1
- package/editor/view/library/MeshLibraryView.js +3 -2
- package/editor/view/node-graph/NodeIconView.d.ts +5 -2
- package/editor/view/node-graph/NodeIconView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeIconView.js +2 -1
- package/editor/view/node-graph/PortView.d.ts +9 -4
- package/editor/view/node-graph/PortView.d.ts.map +1 -1
- package/editor/view/node-graph/PortView.js +4 -3
- package/editor/view/particles/ColorLutGradientView.d.ts +7 -3
- package/editor/view/particles/ColorLutGradientView.d.ts.map +1 -1
- package/editor/view/particles/ColorLutGradientView.js +3 -2
- package/editor/view/particles/ScalarLutCurveView.d.ts +9 -4
- package/editor/view/particles/ScalarLutCurveView.d.ts.map +1 -1
- package/editor/view/particles/ScalarLutCurveView.js +4 -3
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleEmitterInspectorView.js +0 -1
- package/editor/view/tools/ToolView.d.ts +7 -3
- package/editor/view/tools/ToolView.d.ts.map +1 -1
- package/editor/view/tools/ToolView.js +3 -2
- package/package.json +2 -1
- package/src/core/binary/allocator/OffsetAllocator.d.ts +24 -1
- package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
- package/src/core/binary/allocator/OffsetAllocator.js +101 -1
- package/src/core/binary/type/Field.d.ts +5 -1
- package/src/core/binary/type/Field.d.ts.map +1 -1
- package/src/core/binary/type/Field.js +4 -0
- package/src/core/binary/type/Type.d.ts +4 -0
- package/src/core/binary/type/Type.d.ts.map +1 -1
- package/src/core/binary/type/Type.js +4 -0
- package/src/core/cache/Cache.d.ts +15 -7
- package/src/core/cache/Cache.d.ts.map +1 -1
- package/src/core/cache/Cache.js +7 -6
- package/src/core/cache/wtinylfu/CacheRegionWTinylfu.d.ts +5 -2
- package/src/core/cache/wtinylfu/CacheRegionWTinylfu.d.ts.map +1 -1
- package/src/core/cache/wtinylfu/CacheRegionWTinylfu.js +2 -1
- package/src/core/cache/wtinylfu/CacheWTinylfu.d.ts +20 -10
- package/src/core/cache/wtinylfu/CacheWTinylfu.d.ts.map +1 -1
- package/src/core/cache/wtinylfu/CacheWTinylfu.js +9 -8
- package/src/core/collection/CuckooFilter.d.ts +8 -4
- package/src/core/collection/CuckooFilter.d.ts.map +1 -1
- package/src/core/collection/CuckooFilter.js +3 -2
- package/src/core/collection/list/List.d.ts +0 -1
- package/src/core/collection/list/List.d.ts.map +1 -1
- package/src/core/collection/list/List.js +0 -1
- package/src/core/collection/map/HashMap.d.ts +12 -7
- package/src/core/collection/map/HashMap.d.ts.map +1 -1
- package/src/core/collection/map/HashMap.js +5 -5
- package/src/core/collection/map/ObservedMap.d.ts +1 -2
- package/src/core/collection/map/ObservedMap.d.ts.map +1 -1
- package/src/core/collection/map/ObservedMap.js +0 -1
- package/src/core/collection/table/RowFirstTable.d.ts +1 -0
- package/src/core/collection/table/RowFirstTable.d.ts.map +1 -1
- package/src/core/collection/table/RowFirstTable.js +4 -0
- package/src/core/color/Color.d.ts +1 -2
- package/src/core/color/Color.d.ts.map +1 -1
- package/src/core/color/Color.js +5 -4
- package/src/core/color/hsv/hsv2rgb_float.d.ts +23 -1
- package/src/core/color/hsv/hsv2rgb_float.d.ts.map +1 -1
- package/src/core/color/hsv/hsv2rgb_float.js +31 -3
- package/src/core/color/hsv/hsv_to_rgb.d.ts +20 -9
- package/src/core/color/hsv/hsv_to_rgb.d.ts.map +1 -1
- package/src/core/color/hsv/hsv_to_rgb.js +30 -10
- package/src/core/color/hsv/hsv_to_rgb_uint8.d.ts.map +1 -1
- package/src/core/color/hsv/hsv_to_rgb_uint8.js +10 -5
- package/src/core/function/FunctionCompiler.d.ts +9 -4
- package/src/core/function/FunctionCompiler.d.ts.map +1 -1
- package/src/core/function/FunctionCompiler.js +8 -6
- package/src/core/geom/3d/quaternion/quat3_shortest_arc.d.ts +41 -0
- package/src/core/geom/3d/quaternion/quat3_shortest_arc.d.ts.map +1 -0
- package/src/core/geom/3d/quaternion/quat3_shortest_arc.js +94 -0
- package/src/core/geom/3d/ray/Ray3.d.ts +5 -5
- package/src/core/geom/3d/ray/Ray3.d.ts.map +1 -1
- package/src/core/geom/3d/ray/Ray3.js +3 -3
- package/src/core/geom/3d/shape/AbstractShape3D.d.ts +1 -0
- package/src/core/geom/3d/shape/AbstractShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/AbstractShape3D.js +4 -0
- package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts +2 -4
- package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/ConvexHullShape3D.js +0 -2
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts +1 -2
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/TransformedShape3D.js +0 -1
- package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.d.ts +6 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.js +5 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts +2 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryTopology.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/BinaryTopology.js +5 -0
- package/src/core/geom/Quaternion.d.ts +1 -0
- package/src/core/geom/Quaternion.d.ts.map +1 -1
- package/src/core/geom/Quaternion.js +4 -0
- package/src/core/geom/Vector1.d.ts +8 -0
- package/src/core/geom/Vector1.d.ts.map +1 -1
- package/src/core/geom/Vector1.js +6 -0
- package/src/core/geom/Vector3.d.ts +6 -0
- package/src/core/geom/Vector3.d.ts.map +1 -1
- package/src/core/geom/Vector3.js +5 -0
- package/src/core/geom/Vector4.d.ts +10 -2
- package/src/core/geom/Vector4.d.ts.map +1 -1
- package/src/core/geom/Vector4.js +6 -1
- package/src/core/geom/packing/max-rect/MaxRectanglesPacker.d.ts +4 -4
- package/src/core/geom/packing/max-rect/MaxRectanglesPacker.d.ts.map +1 -1
- package/src/core/geom/packing/max-rect/MaxRectanglesPacker.js +1 -1
- package/src/core/graph/convert_graph_to_dot_string.d.ts +7 -3
- package/src/core/graph/convert_graph_to_dot_string.d.ts.map +1 -1
- package/src/core/graph/convert_graph_to_dot_string.js +3 -2
- package/src/core/localization/Localization.d.ts +3 -2
- package/src/core/localization/Localization.d.ts.map +1 -1
- package/src/core/localization/Localization.js +4 -0
- package/src/core/math/noise/create_simplex_noise_2d.js +6 -6
- package/src/core/model/ObservedValue.d.ts +8 -6
- package/src/core/model/ObservedValue.d.ts.map +1 -1
- package/src/core/model/ObservedValue.js +3 -1
- package/src/core/model/node-graph/Connection.d.ts +1 -0
- package/src/core/model/node-graph/Connection.d.ts.map +1 -1
- package/src/core/model/node-graph/Connection.js +4 -0
- package/src/core/model/node-graph/NodeGraph.d.ts +8 -5
- package/src/core/model/node-graph/NodeGraph.d.ts.map +1 -1
- package/src/core/model/node-graph/NodeGraph.js +3 -3
- package/src/core/model/node-graph/json/serializeNodeGraphToJSON.d.ts +9 -4
- package/src/core/model/node-graph/json/serializeNodeGraphToJSON.d.ts.map +1 -1
- package/src/core/model/node-graph/json/serializeNodeGraphToJSON.js +4 -3
- package/src/core/model/node-graph/node/NodeDescription.d.ts +12 -4
- package/src/core/model/node-graph/node/NodeDescription.d.ts.map +1 -1
- package/src/core/model/node-graph/node/NodeDescription.js +10 -3
- package/src/core/model/node-graph/node/NodeInstance.d.ts +5 -2
- package/src/core/model/node-graph/node/NodeInstance.d.ts.map +1 -1
- package/src/core/model/node-graph/node/NodeInstance.js +6 -0
- package/src/core/model/node-graph/node/NodeInstancePortReference.d.ts +5 -2
- package/src/core/model/node-graph/node/NodeInstancePortReference.d.ts.map +1 -1
- package/src/core/model/node-graph/node/NodeInstancePortReference.js +6 -0
- package/src/core/model/node-graph/node/NodeRegistry.d.ts +2 -1
- package/src/core/model/node-graph/node/NodeRegistry.d.ts.map +1 -1
- package/src/core/model/node-graph/node/NodeRegistry.js +4 -0
- package/src/core/model/node-graph/node/Port.d.ts +12 -5
- package/src/core/model/node-graph/node/Port.d.ts.map +1 -1
- package/src/core/model/node-graph/node/Port.js +9 -4
- package/src/core/model/node-graph/util/convert_node_graph_to_dot_string.d.ts +5 -2
- package/src/core/model/node-graph/util/convert_node_graph_to_dot_string.d.ts.map +1 -1
- package/src/core/model/node-graph/util/convert_node_graph_to_dot_string.js +2 -1
- package/src/core/model/node-graph/util/graph_clone_by_node_subset.d.ts +5 -2
- package/src/core/model/node-graph/util/graph_clone_by_node_subset.d.ts.map +1 -1
- package/src/core/model/node-graph/util/graph_clone_by_node_subset.js +2 -1
- package/src/core/model/node-graph/util/graph_collect_connections_amongst_nodes.d.ts +5 -2
- package/src/core/model/node-graph/util/graph_collect_connections_amongst_nodes.d.ts.map +1 -1
- package/src/core/model/node-graph/util/graph_collect_connections_amongst_nodes.js +2 -1
- package/src/core/primitives/Class.d.ts +15 -0
- package/src/core/primitives/Class.d.ts.map +1 -0
- package/src/core/primitives/Class.js +18 -0
- package/src/core/primitives/TypedArray.d.ts +15 -0
- package/src/core/primitives/TypedArray.d.ts.map +1 -0
- package/src/core/primitives/TypedArray.js +27 -0
- package/src/core/process/buildPromiseChain.d.ts +9 -4
- package/src/core/process/buildPromiseChain.d.ts.map +1 -1
- package/src/core/process/buildPromiseChain.js +4 -3
- package/src/core/process/executor/ConcurrentExecutor.d.ts +2 -0
- package/src/core/process/executor/ConcurrentExecutor.d.ts.map +1 -1
- package/src/core/process/executor/ConcurrentExecutor.js +5 -0
- package/src/core/process/task/Task.d.ts +17 -7
- package/src/core/process/task/Task.d.ts.map +1 -1
- package/src/core/process/task/Task.js +12 -6
- package/src/engine/Engine.d.ts +17 -7
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +9 -4
- package/src/engine/EngineConfiguration.d.ts +33 -9
- package/src/engine/EngineConfiguration.d.ts.map +1 -1
- package/src/engine/EngineConfiguration.js +22 -4
- package/src/engine/EngineHarness.d.ts +22 -10
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +13 -8
- package/src/engine/EntityCreator.d.ts +26 -11
- package/src/engine/EntityCreator.d.ts.map +1 -1
- package/src/engine/EntityCreator.js +16 -13
- package/src/engine/animation/EntityAnimation.d.ts +1 -1
- package/src/engine/animation/EntityAnimation.d.ts.map +1 -1
- package/src/engine/animation/curve/actionProcessorOperations/curveActions.d.ts +28 -18
- package/src/engine/animation/curve/actionProcessorOperations/curveActions.d.ts.map +1 -1
- package/src/engine/animation/curve/actionProcessorOperations/curveActions.js +9 -8
- package/src/engine/animation/curve/draw/build_plot_entity_from_array.d.ts +18 -8
- package/src/engine/animation/curve/draw/build_plot_entity_from_array.d.ts.map +1 -1
- package/src/engine/animation/curve/draw/build_plot_entity_from_array.js +8 -7
- package/src/engine/animation/curve/editor/CurveEditorView.d.ts +22 -11
- package/src/engine/animation/curve/editor/CurveEditorView.d.ts.map +1 -1
- package/src/engine/animation/curve/editor/CurveEditorView.js +7 -6
- package/src/engine/animation/curve/editor/DragHandler.d.ts +12 -7
- package/src/engine/animation/curve/editor/DragHandler.d.ts.map +1 -1
- package/src/engine/animation/curve/editor/DragHandler.js +4 -3
- package/src/engine/animation/curve/editor/KeyframeStateManager.d.ts +3 -2
- package/src/engine/animation/curve/editor/KeyframeStateManager.d.ts.map +1 -1
- package/src/engine/animation/curve/editor/canvas2dDrawWorldAxisLabels.d.ts +21 -10
- package/src/engine/animation/curve/editor/canvas2dDrawWorldAxisLabels.d.ts.map +1 -1
- package/src/engine/animation/curve/editor/canvas2dDrawWorldAxisLabels.js +10 -9
- package/src/engine/animation/curve/editor/canvas2dPlotCurveLine.d.ts +20 -9
- package/src/engine/animation/curve/editor/canvas2dPlotCurveLine.d.ts.map +1 -1
- package/src/engine/animation/curve/editor/canvas2dPlotCurveLine.js +9 -8
- package/src/engine/animation/curve/editor/canvas2dPlotCurvePoints.d.ts +15 -7
- package/src/engine/animation/curve/editor/canvas2dPlotCurvePoints.d.ts.map +1 -1
- package/src/engine/animation/curve/editor/canvas2dPlotCurvePoints.js +7 -6
- package/src/engine/animation/curve/editor/createKeyframeDraggableAspect.d.ts +39 -18
- package/src/engine/animation/curve/editor/createKeyframeDraggableAspect.d.ts.map +1 -1
- package/src/engine/animation/curve/editor/createKeyframeDraggableAspect.js +18 -17
- package/src/engine/animation/curve/editor/createPanTool.d.ts +13 -5
- package/src/engine/animation/curve/editor/createPanTool.d.ts.map +1 -1
- package/src/engine/animation/curve/editor/createPanTool.js +5 -4
- package/src/engine/animation/curve/editor/createSelectionBoxTool.d.ts +19 -8
- package/src/engine/animation/curve/editor/createSelectionBoxTool.d.ts.map +1 -1
- package/src/engine/animation/curve/editor/createSelectionBoxTool.js +8 -7
- package/src/engine/animation/keyed2/AnimationTrackPlayback.d.ts +6 -2
- package/src/engine/animation/keyed2/AnimationTrackPlayback.d.ts.map +1 -1
- package/src/engine/animation/keyed2/AnimationTrackPlayback.js +4 -0
- package/src/engine/animation/removeEntityGenericEffect.d.ts +13 -6
- package/src/engine/animation/removeEntityGenericEffect.d.ts.map +1 -1
- package/src/engine/animation/removeEntityGenericEffect.js +6 -5
- package/src/engine/animation/removeEntityWithMeshParticlesEffect.d.ts +11 -5
- package/src/engine/animation/removeEntityWithMeshParticlesEffect.d.ts.map +1 -1
- package/src/engine/animation/removeEntityWithMeshParticlesEffect.js +5 -4
- package/src/engine/asset/Asset.d.ts +6 -3
- package/src/engine/asset/Asset.d.ts.map +1 -1
- package/src/engine/asset/Asset.js +4 -1
- package/src/engine/asset/AssetManager.d.ts +42 -21
- package/src/engine/asset/AssetManager.d.ts.map +1 -1
- package/src/engine/asset/AssetManager.js +20 -12
- package/src/engine/asset/AssetRequest.d.ts +4 -2
- package/src/engine/asset/AssetRequest.d.ts.map +1 -1
- package/src/engine/asset/AssetRequest.js +5 -0
- package/src/engine/asset/AssetRequestScope.d.ts +1 -0
- package/src/engine/asset/AssetRequestScope.d.ts.map +1 -1
- package/src/engine/asset/AssetRequestScope.js +4 -0
- package/src/engine/asset/AssetTransformer.d.ts +7 -1
- package/src/engine/asset/AssetTransformer.d.ts.map +1 -1
- package/src/engine/asset/AssetTransformer.js +5 -0
- package/src/engine/asset/PendingAsset.d.ts +8 -0
- package/src/engine/asset/PendingAsset.d.ts.map +1 -1
- package/src/engine/asset/PendingAsset.js +6 -0
- package/src/engine/asset/loaders/ArrayBufferLoader.d.ts +6 -3
- package/src/engine/asset/loaders/ArrayBufferLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/ArrayBufferLoader.js +2 -1
- package/src/engine/asset/loaders/AssetLoader.d.ts +8 -2
- package/src/engine/asset/loaders/AssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/AssetLoader.js +5 -0
- package/src/engine/asset/loaders/USDSceneBundleAssetLoader.d.ts +10 -0
- package/src/engine/asset/loaders/USDSceneBundleAssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/ImageRGBADataLoader.d.ts +5 -2
- package/src/engine/asset/loaders/image/ImageRGBADataLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/ImageRGBADataLoader.js +2 -1
- package/src/engine/asset/preloader/AssetPreloader.d.ts +2 -1
- package/src/engine/asset/preloader/AssetPreloader.d.ts.map +1 -1
- package/src/engine/asset/preloader/AssetPreloader.js +4 -0
- package/src/engine/development/performance/MetricCollection.d.ts +11 -3
- package/src/engine/development/performance/MetricCollection.d.ts.map +1 -1
- package/src/engine/development/performance/MetricCollection.js +7 -2
- package/src/engine/ecs/Entity.d.ts +3 -2
- package/src/engine/ecs/Entity.d.ts.map +1 -1
- package/src/engine/ecs/Entity.js +9 -1
- package/src/engine/ecs/EntityComponentDataset.d.ts +8 -6
- package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
- package/src/engine/ecs/EntityComponentDataset.js +9 -0
- package/src/engine/ecs/EntityManager.d.ts +2 -1
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +5 -0
- package/src/engine/ecs/EntityObserver.d.ts +4 -0
- package/src/engine/ecs/EntityObserver.d.ts.map +1 -1
- package/src/engine/ecs/EntityObserver.js +4 -0
- package/src/engine/ecs/EntityReference.d.ts +4 -0
- package/src/engine/ecs/EntityReference.d.ts.map +1 -1
- package/src/engine/ecs/EntityReference.js +4 -0
- package/src/engine/ecs/System.d.ts +11 -2
- package/src/engine/ecs/System.d.ts.map +1 -1
- package/src/engine/ecs/System.js +6 -0
- package/src/engine/ecs/async/WorkerSystem.d.ts +10 -0
- package/src/engine/ecs/async/WorkerSystem.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/actions/definition/SpeakLineActionDescription.d.ts +7 -3
- package/src/engine/ecs/dynamic_actions/actions/definition/SpeakLineActionDescription.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/actions/definition/SpeakLineActionDescription.js +3 -2
- package/src/engine/ecs/dynamic_actions/actions/definition/WriteToBlackboardActionDescription.d.ts +7 -3
- package/src/engine/ecs/dynamic_actions/actions/definition/WriteToBlackboardActionDescription.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/actions/definition/WriteToBlackboardActionDescription.js +3 -2
- package/src/engine/ecs/gui/menu/radial/RadialContextMenu.d.ts +36 -17
- package/src/engine/ecs/gui/menu/radial/RadialContextMenu.d.ts.map +1 -1
- package/src/engine/ecs/gui/menu/radial/RadialContextMenu.js +17 -16
- package/src/engine/ecs/gui/parallax/GuiElementParallaxSystem.d.ts +7 -3
- package/src/engine/ecs/gui/parallax/GuiElementParallaxSystem.d.ts.map +1 -1
- package/src/engine/ecs/gui/parallax/GuiElementParallaxSystem.js +3 -2
- package/src/engine/ecs/ik/InverseKinematics.d.ts +17 -8
- package/src/engine/ecs/ik/InverseKinematics.d.ts.map +1 -1
- package/src/engine/ecs/ik/InverseKinematics.js +8 -7
- package/src/engine/ecs/storage/binary/BinaryClassSerializationAdapter.d.ts +9 -0
- package/src/engine/ecs/storage/binary/BinaryClassSerializationAdapter.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/BinaryClassSerializationAdapter.js +9 -0
- package/src/engine/ecs/storage/binary/BinaryClassUpgrader.d.ts +4 -0
- package/src/engine/ecs/storage/binary/BinaryClassUpgrader.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/BinaryClassUpgrader.js +4 -0
- package/src/engine/ecs/storage/binary/BinarySerializationRegistry.d.ts +10 -4
- package/src/engine/ecs/storage/binary/BinarySerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/BinarySerializationRegistry.js +5 -0
- package/src/engine/ecs/storage/binary/collection/BinaryCollectionDeSerializer.d.ts +5 -2
- package/src/engine/ecs/storage/binary/collection/BinaryCollectionDeSerializer.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/collection/BinaryCollectionDeSerializer.js +2 -1
- package/src/engine/ecs/storage/binary/collection/BinaryCollectionSerializer.d.ts +7 -3
- package/src/engine/ecs/storage/binary/collection/BinaryCollectionSerializer.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/collection/BinaryCollectionSerializer.js +3 -2
- package/src/engine/ecs/system/SystemExecutionPhase.d.ts +9 -0
- package/src/engine/ecs/system/SystemExecutionPhase.d.ts.map +1 -0
- package/src/engine/ecs/systems/ScriptSystem.d.ts +1 -0
- package/src/engine/ecs/systems/ScriptSystem.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts +7 -2
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/Terrain.js +8 -0
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSerializationUpgrader_0_1.d.ts +6 -0
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSerializationUpgrader_0_1.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayer.d.ts +3 -1
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayer.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayer.js +5 -0
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.d.ts +3 -1
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.js +5 -0
- package/src/engine/ecs/terrain/ecs/splat/SplatMapping.d.ts +4 -0
- package/src/engine/ecs/terrain/ecs/splat/SplatMapping.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/splat/SplatMapping.js +4 -0
- package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts +7 -2
- package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTile.js +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts +6 -2
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +6 -1
- package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.d.ts +9 -4
- package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.d.ts.map +1 -1
- package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +4 -3
- package/src/engine/ecs/transform/Transform64.d.ts +4 -0
- package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform64.js +4 -0
- package/src/engine/graphics/camera/CameraShakeBehavior.d.ts +20 -10
- package/src/engine/graphics/camera/CameraShakeBehavior.d.ts.map +1 -1
- package/src/engine/graphics/camera/CameraShakeBehavior.js +9 -8
- package/src/engine/graphics/camera/CameraShakeTraumaBehavior.d.ts +8 -4
- package/src/engine/graphics/camera/CameraShakeTraumaBehavior.d.ts.map +1 -1
- package/src/engine/graphics/camera/CameraShakeTraumaBehavior.js +3 -2
- package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts +11 -5
- package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts.map +1 -1
- package/src/engine/graphics/camera/makeOrbitalCameraController.js +5 -4
- package/src/engine/graphics/canvas/canvas2d_draw_grid.d.ts +19 -9
- package/src/engine/graphics/canvas/canvas2d_draw_grid.d.ts.map +1 -1
- package/src/engine/graphics/canvas/canvas2d_draw_grid.js +9 -8
- package/src/engine/graphics/canvas/canvas2d_draw_label.d.ts +17 -8
- package/src/engine/graphics/canvas/canvas2d_draw_label.d.ts.map +1 -1
- package/src/engine/graphics/canvas/canvas2d_draw_label.js +8 -7
- package/src/engine/graphics/canvas/canvas2d_draw_linear_scale.d.ts +21 -10
- package/src/engine/graphics/canvas/canvas2d_draw_linear_scale.d.ts.map +1 -1
- package/src/engine/graphics/canvas/canvas2d_draw_linear_scale.js +10 -9
- package/src/engine/graphics/canvas/canvas2d_plot_data_line.d.ts +18 -8
- package/src/engine/graphics/canvas/canvas2d_plot_data_line.d.ts.map +1 -1
- package/src/engine/graphics/canvas/canvas2d_plot_data_line.js +8 -7
- package/src/engine/graphics/ecs/camera/Camera.d.ts +4 -0
- package/src/engine/graphics/ecs/camera/Camera.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/Camera.js +4 -0
- package/src/engine/graphics/ecs/camera/filter/setup_filtered_camera_controller.d.ts +11 -5
- package/src/engine/graphics/ecs/camera/filter/setup_filtered_camera_controller.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/filter/setup_filtered_camera_controller.js +5 -4
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +5 -5
- package/src/engine/graphics/ecs/particles/ParticleEffect.js +5 -5
- package/src/engine/graphics/ecs/trail3d/make_gradient_stroke.d.ts +19 -9
- package/src/engine/graphics/ecs/trail3d/make_gradient_stroke.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/make_gradient_stroke.js +9 -8
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +3 -0
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +3 -0
- package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts +9 -4
- package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +4 -3
- package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts +7 -1
- package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FrameGraph.js +5 -0
- package/src/engine/graphics/render/frame_graph/FrameGraphNode.d.ts +4 -0
- package/src/engine/graphics/render/frame_graph/FrameGraphNode.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FrameGraphNode.js +4 -0
- package/src/engine/graphics/render/frame_graph/FramePassBuilder.d.ts +9 -1
- package/src/engine/graphics/render/frame_graph/FramePassBuilder.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FramePassBuilder.js +6 -0
- package/src/engine/graphics/render/frame_graph/FramePassNode.d.ts +6 -0
- package/src/engine/graphics/render/frame_graph/FramePassNode.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FramePassNode.js +5 -0
- package/src/engine/graphics/render/frame_graph/FramePassResources.d.ts +7 -1
- package/src/engine/graphics/render/frame_graph/FramePassResources.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FramePassResources.js +5 -0
- package/src/engine/graphics/render/frame_graph/IFrameGraphContext.d.ts +6 -2
- package/src/engine/graphics/render/frame_graph/IFrameGraphContext.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/IFrameGraphContext.js +4 -0
- package/src/engine/graphics/render/frame_graph/ResourceEntry.d.ts +13 -5
- package/src/engine/graphics/render/frame_graph/ResourceEntry.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/ResourceEntry.js +7 -1
- package/src/engine/graphics/render/frame_graph/ResourceNode.d.ts +9 -3
- package/src/engine/graphics/render/frame_graph/ResourceNode.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/ResourceNode.js +6 -1
- package/src/engine/graphics/render/frame_graph/resource/RenderResourceManager.d.ts +5 -1
- package/src/engine/graphics/render/frame_graph/resource/RenderResourceManager.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/resource/RenderResourceManager.js +4 -0
- package/src/engine/graphics/render/frame_graph/resource/ResourceDescriptor.d.ts +7 -3
- package/src/engine/graphics/render/frame_graph/resource/ResourceDescriptor.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/resource/ResourceDescriptor.js +6 -2
- package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts +5 -2
- package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/CachingTextureAtlas.js +2 -1
- package/src/engine/graphics/texture/atlas/TextureAtlasDebugger.d.ts +9 -4
- package/src/engine/graphics/texture/atlas/TextureAtlasDebugger.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/TextureAtlasDebugger.js +4 -3
- package/src/engine/graphics/texture/sampler/Sampler2D.d.ts +4 -0
- package/src/engine/graphics/texture/sampler/Sampler2D.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/Sampler2D.js +4 -0
- package/src/engine/graphics/texture/sampler/debug/prototypeSamplerFiltering.js +3 -2
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +0 -5
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine.d.ts +6 -0
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine.js +9 -0
- package/src/engine/graphics3/ParticipatingMedia.d.ts +9 -4
- package/src/engine/graphics3/ParticipatingMedia.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMedia.js +4 -3
- package/src/engine/graphics3/ShadeCameraAdapter.d.ts +5 -1
- package/src/engine/graphics3/ShadeCameraAdapter.d.ts.map +1 -1
- package/src/engine/graphics3/ShadeCameraAdapter.js +4 -0
- package/src/engine/graphics3/TooltipComponentSystem.d.ts +13 -6
- package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -1
- package/src/engine/graphics3/TooltipComponentSystem.js +6 -5
- package/src/engine/graphics3/VolumetricLightMap.d.ts +5 -2
- package/src/engine/graphics3/VolumetricLightMap.d.ts.map +1 -1
- package/src/engine/graphics3/VolumetricLightMap.js +2 -1
- package/src/engine/input/devices/PointerDevice.d.ts.map +1 -1
- package/src/engine/input/devices/PointerDevice.js +7 -6
- package/src/engine/input/devices/gamepad/GamepadHandle.d.ts +4 -0
- package/src/engine/input/devices/gamepad/GamepadHandle.d.ts.map +1 -1
- package/src/engine/input/devices/gamepad/GamepadHandle.js +4 -0
- package/src/engine/input/devices/touch/observePinch.d.ts +17 -8
- package/src/engine/input/devices/touch/observePinch.d.ts.map +1 -1
- package/src/engine/input/devices/touch/observePinch.js +8 -7
- package/src/engine/input/ecs/components/InputBinding.d.ts +11 -5
- package/src/engine/input/ecs/components/InputBinding.d.ts.map +1 -1
- package/src/engine/input/ecs/components/InputBinding.js +5 -4
- package/src/engine/input/ecs/ism/InputMapSystem.d.ts +4 -0
- package/src/engine/input/ecs/ism/InputMapSystem.d.ts.map +1 -1
- package/src/engine/input/ecs/systems/InputControllerSystem.d.ts +1 -1
- package/src/engine/input/ecs/systems/InputControllerSystem.d.ts.map +1 -1
- package/src/engine/input/ecs/util/TerrainCameraTargetSampler.d.ts +5 -2
- package/src/engine/input/ecs/util/TerrainCameraTargetSampler.d.ts.map +1 -1
- package/src/engine/input/ecs/util/TerrainCameraTargetSampler.js +2 -1
- package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.d.ts +9 -4
- package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.js +4 -3
- package/src/engine/intelligence/behavior/ecs/SendEventBehavior.d.ts +9 -4
- package/src/engine/intelligence/behavior/ecs/SendEventBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/ecs/SendEventBehavior.js +4 -3
- package/src/engine/intelligence/behavior/util/syncExecuteBehaviorToCompletion.d.ts +9 -4
- package/src/engine/intelligence/behavior/util/syncExecuteBehaviorToCompletion.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/util/syncExecuteBehaviorToCompletion.js +4 -3
- package/src/engine/intelligence/mcts/MonteCarlo.d.ts +19 -9
- package/src/engine/intelligence/mcts/MonteCarlo.d.ts.map +1 -1
- package/src/engine/intelligence/mcts/MonteCarlo.js +9 -8
- package/src/engine/intelligence/optimization/RandomOptimizer.d.ts +13 -6
- package/src/engine/intelligence/optimization/RandomOptimizer.d.ts.map +1 -1
- package/src/engine/intelligence/optimization/RandomOptimizer.js +6 -5
- package/src/engine/interpolation/InterpolationSystem.d.ts +4 -0
- package/src/engine/interpolation/InterpolationSystem.d.ts.map +1 -1
- package/src/engine/knowledge/database/StaticKnowledgeDataTable.d.ts +5 -2
- package/src/engine/knowledge/database/StaticKnowledgeDataTable.d.ts.map +1 -1
- package/src/engine/knowledge/database/StaticKnowledgeDataTable.js +6 -0
- package/src/engine/knowledge/database/StaticKnowledgeDataTableDescriptor.d.ts +6 -2
- package/src/engine/knowledge/database/StaticKnowledgeDataTableDescriptor.d.ts.map +1 -1
- package/src/engine/knowledge/database/StaticKnowledgeDataTableDescriptor.js +4 -0
- package/src/engine/knowledge/database/StaticKnowledgeDatabase.d.ts +7 -4
- package/src/engine/knowledge/database/StaticKnowledgeDatabase.d.ts.map +1 -1
- package/src/engine/knowledge/database/StaticKnowledgeDatabase.js +6 -0
- package/src/engine/makeSimpleTaskProgressView.d.ts +10 -4
- package/src/engine/makeSimpleTaskProgressView.d.ts.map +1 -1
- package/src/engine/makeSimpleTaskProgressView.js +4 -3
- package/src/engine/navigation/mesh/build/navmesh_build_topology.d.ts +20 -9
- package/src/engine/navigation/mesh/build/navmesh_build_topology.d.ts.map +1 -1
- package/src/engine/navigation/mesh/build/navmesh_build_topology.js +9 -8
- package/src/engine/network/sim/ActionLog.d.ts +1 -2
- package/src/engine/network/sim/ActionLog.d.ts.map +1 -1
- package/src/engine/network/sim/ActionLog.js +0 -1
- package/src/engine/network/state/InputRing.d.ts +1 -2
- package/src/engine/network/state/InputRing.d.ts.map +1 -1
- package/src/engine/network/state/InputRing.js +0 -1
- package/src/engine/notify/Notification.d.ts +15 -9
- package/src/engine/notify/Notification.d.ts.map +1 -1
- package/src/engine/notify/Notification.js +5 -4
- package/src/engine/options/OptionAbstract.d.ts +4 -0
- package/src/engine/options/OptionAbstract.d.ts.map +1 -1
- package/src/engine/options/OptionAbstract.js +4 -0
- package/src/engine/options/OptionsView.d.ts +10 -4
- package/src/engine/options/OptionsView.d.ts.map +1 -1
- package/src/engine/options/OptionsView.js +4 -3
- package/src/engine/physics/ccd/linear_sweep.d.ts +4 -7
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +3 -1
- package/src/engine/physics/cloth/MEASUREMENTS.md +956 -0
- package/src/engine/physics/cloth/PLAN.md +1581 -0
- package/src/engine/physics/cloth/ecs/Cloth.d.ts +145 -0
- package/src/engine/physics/cloth/ecs/Cloth.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/Cloth.js +212 -0
- package/src/engine/physics/cloth/ecs/ClothDynamics.d.ts +208 -0
- package/src/engine/physics/cloth/ecs/ClothDynamics.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothDynamics.js +331 -0
- package/src/engine/physics/cloth/ecs/ClothDynamicsFlags.d.ts +10 -0
- package/src/engine/physics/cloth/ecs/ClothDynamicsFlags.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothDynamicsFlags.js +57 -0
- package/src/engine/physics/cloth/ecs/ClothExclude.d.ts +45 -0
- package/src/engine/physics/cloth/ecs/ClothExclude.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothExclude.js +59 -0
- package/src/engine/physics/cloth/ecs/ClothFlags.d.ts +10 -0
- package/src/engine/physics/cloth/ecs/ClothFlags.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothFlags.js +47 -0
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +321 -0
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothInstance.js +363 -0
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +149 -0
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/ClothSystem.js +773 -0
- package/src/engine/physics/cloth/ecs/cloth_dynamics_library.d.ts +157 -0
- package/src/engine/physics/cloth/ecs/cloth_dynamics_library.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/cloth_dynamics_library.js +254 -0
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts +235 -0
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/cloth_dynamics_map.js +271 -0
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts +114 -0
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +645 -0
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts +9 -0
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -0
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +449 -0
- package/src/engine/physics/cloth/playground/README.md +185 -0
- package/src/engine/physics/cloth/playground/cloth_playground_build.d.ts +58 -0
- package/src/engine/physics/cloth/playground/cloth_playground_build.d.ts.map +1 -0
- package/src/engine/physics/cloth/playground/cloth_playground_build.js +333 -0
- package/src/engine/physics/cloth/playground/cloth_playground_draw.d.ts +79 -0
- package/src/engine/physics/cloth/playground/cloth_playground_draw.d.ts.map +1 -0
- package/src/engine/physics/cloth/playground/cloth_playground_draw.js +519 -0
- package/src/engine/physics/cloth/playground/index.html +200 -0
- package/src/engine/physics/cloth/playground/main.d.ts +2 -0
- package/src/engine/physics/cloth/playground/main.d.ts.map +1 -0
- package/src/engine/physics/cloth/playground/main.js +876 -0
- package/src/engine/physics/cloth/playground/rig.html +187 -0
- package/src/engine/physics/cloth/playground/rig_build.d.ts +81 -0
- package/src/engine/physics/cloth/playground/rig_build.d.ts.map +1 -0
- package/src/engine/physics/cloth/playground/rig_build.js +296 -0
- package/src/engine/physics/cloth/playground/rig_main.d.ts +2 -0
- package/src/engine/physics/cloth/playground/rig_main.d.ts.map +1 -0
- package/src/engine/physics/cloth/playground/rig_main.js +955 -0
- package/src/engine/physics/cloth/solver/ClothState.d.ts +323 -0
- package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/ClothState.js +673 -0
- package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts +67 -0
- package/src/engine/physics/cloth/solver/cloth_color_particles.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_color_particles.js +220 -0
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts +13 -0
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.js +201 -0
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts +97 -0
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_solver_constants.js +102 -0
- package/src/engine/physics/cloth/solver/cloth_step.d.ts +91 -0
- package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_step.js +289 -0
- package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts +54 -0
- package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_vertex_accumulator.js +56 -0
- package/src/engine/physics/cloth/solver/constraint/cloth_bend_row.d.ts +125 -0
- package/src/engine/physics/cloth/solver/constraint/cloth_bend_row.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/constraint/cloth_bend_row.js +383 -0
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.d.ts +112 -0
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/constraint/cloth_leash_row.js +346 -0
- package/src/engine/physics/cloth/solver/constraint/cloth_stretch_row.d.ts +94 -0
- package/src/engine/physics/cloth/solver/constraint/cloth_stretch_row.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/constraint/cloth_stretch_row.js +383 -0
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.d.ts +27 -0
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.js +104 -0
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +5 -7
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +4 -1
- package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.d.ts +6 -0
- package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/physics/narrowphase/compute_penetration.d.ts +26 -23
- package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/compute_penetration.js +25 -4
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts +16 -23
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +15 -4
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts +4 -6
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_concave.js +3 -1
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts +6 -6
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_hit.js +5 -1
- package/src/engine/physics/queries/shape_cast.d.ts +9 -7
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.js +8 -1
- package/src/engine/platform/EnginePlatform.d.ts +4 -0
- package/src/engine/platform/EnginePlatform.d.ts.map +1 -1
- package/src/engine/platform/EnginePlatform.js +4 -0
- package/src/engine/plugin/EnginePlugin.d.ts +9 -0
- package/src/engine/plugin/EnginePlugin.d.ts.map +1 -1
- package/src/engine/plugin/EnginePlugin.js +9 -0
- package/src/engine/plugin/EnginePluginManager.d.ts +13 -2
- package/src/engine/plugin/EnginePluginManager.d.ts.map +1 -1
- package/src/engine/plugin/EnginePluginManager.js +10 -0
- package/src/engine/save/StorageBackedList.d.ts +8 -4
- package/src/engine/save/StorageBackedList.d.ts.map +1 -1
- package/src/engine/save/StorageBackedList.js +3 -2
- package/src/engine/scene/Scene.d.ts +10 -0
- package/src/engine/scene/Scene.d.ts.map +1 -1
- package/src/engine/scene/Scene.js +7 -0
- package/src/engine/scene/SceneManager.d.ts +4 -0
- package/src/engine/scene/SceneManager.d.ts.map +1 -1
- package/src/engine/scene/SceneManager.js +4 -0
- package/src/engine/scene/SerializedScene.d.ts +8 -4
- package/src/engine/scene/SerializedScene.d.ts.map +1 -1
- package/src/engine/scene/SerializedScene.js +3 -2
- package/src/engine/scene/transitionToScene.d.ts +11 -5
- package/src/engine/scene/transitionToScene.d.ts.map +1 -1
- package/src/engine/scene/transitionToScene.js +5 -4
- package/src/engine/simulation/Ticker.d.ts +5 -2
- package/src/engine/simulation/Ticker.d.ts.map +1 -1
- package/src/engine/simulation/Ticker.js +2 -1
- package/src/engine/sound/SoundEngine.d.ts +4 -0
- package/src/engine/sound/SoundEngine.d.ts.map +1 -1
- package/src/engine/sound/SoundEngine.js +4 -0
- package/src/engine/sound/material/concrete/json/deserializeSoundMaterialFromJSON.d.ts +7 -3
- package/src/engine/sound/material/concrete/json/deserializeSoundMaterialFromJSON.d.ts.map +1 -1
- package/src/engine/sound/material/concrete/json/deserializeSoundMaterialFromJSON.js +3 -2
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts +10 -0
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts.map +1 -1
- package/src/engine/sound/sopra/SopraEngine.d.ts +5 -0
- package/src/engine/sound/sopra/SopraEngine.d.ts.map +1 -1
- package/src/engine/sound/sopra/SopraEngine.js +8 -0
- package/src/engine/sound/sopra/definition/BusDefinition.d.ts +4 -0
- package/src/engine/sound/sopra/definition/BusDefinition.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/BusDefinition.js +4 -0
- package/src/engine/sound/sopra/definition/EventDescription.d.ts +1 -0
- package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/EventDescription.js +4 -0
- package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.d.ts +6 -0
- package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.js +5 -0
- package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts +1 -1
- package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.d.ts +1 -0
- package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts +1 -1
- package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts +10 -2
- package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts.map +1 -1
- package/src/engine/sound/sopra/definition/clip/SampleAudioClip.js +7 -0
- package/src/engine/sound/sopra/definition/clip/SequenceContainerAudioClip.d.ts +1 -1
- package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts +1 -1
- package/src/engine/sound/sopra/runtime/BusGraph.d.ts +4 -0
- package/src/engine/sound/sopra/runtime/BusGraph.d.ts.map +1 -1
- package/src/engine/sound/sopra/runtime/BusGraph.js +4 -0
- package/src/engine/sound/sopra/runtime/EventInstance.d.ts +9 -1
- package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -1
- package/src/engine/sound/sopra/runtime/EventInstance.js +11 -0
- package/src/engine/sound/sopra/runtime/VoiceManager.d.ts +2 -0
- package/src/engine/sound/sopra/runtime/VoiceManager.d.ts.map +1 -1
- package/src/engine/sound/sopra/runtime/VoiceManager.js +5 -0
- package/src/engine/ui/DraggableAspect.d.ts +14 -6
- package/src/engine/ui/DraggableAspect.d.ts.map +1 -1
- package/src/engine/ui/DraggableAspect.js +6 -5
- package/src/engine/ui/GUIEngine.d.ts +73 -26
- package/src/engine/ui/GUIEngine.d.ts.map +1 -1
- package/src/engine/ui/GUIEngine.js +37 -19
- package/src/engine/ui/bindings/DomElementBindingDescription.d.ts +7 -3
- package/src/engine/ui/bindings/DomElementBindingDescription.d.ts.map +1 -1
- package/src/engine/ui/bindings/DomElementBindingDescription.js +3 -2
- package/src/engine/ui/modal/ModalStack.d.ts +4 -0
- package/src/engine/ui/modal/ModalStack.d.ts.map +1 -1
- package/src/engine/ui/modal/ModalStack.js +4 -0
- package/src/engine/ui/notification/AnimatedObjectEmitter.d.ts +4 -0
- package/src/engine/ui/notification/AnimatedObjectEmitter.d.ts.map +1 -1
- package/src/engine/ui/notification/AnimatedObjectEmitter.js +4 -0
- package/src/engine/ui/notification/NotificationManager.d.ts +21 -8
- package/src/engine/ui/notification/NotificationManager.d.ts.map +1 -1
- package/src/engine/ui/notification/NotificationManager.js +10 -3
- package/src/engine/ui/notification/ViewEmitter.d.ts +8 -2
- package/src/engine/ui/notification/ViewEmitter.d.ts.map +1 -1
- package/src/engine/ui/notification/ViewEmitter.js +6 -1
- package/src/engine/ui/scene/SceneGUIContext.d.ts +4 -0
- package/src/engine/ui/scene/SceneGUIContext.d.ts.map +1 -1
- package/src/engine/ui/scene/SceneGUIContext.js +4 -0
- package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.d.ts +9 -4
- package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.d.ts.map +1 -1
- package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.js +4 -3
- package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts +9 -4
- package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts.map +1 -1
- package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.js +4 -3
- package/src/generation/grid/generation/GridTaskApplyActionToCells.d.ts +9 -4
- package/src/generation/grid/generation/GridTaskApplyActionToCells.d.ts.map +1 -1
- package/src/generation/grid/generation/GridTaskApplyActionToCells.js +4 -3
- package/src/generation/grid/generation/discrete/GridTaskActionRuleSet.d.ts +9 -4
- package/src/generation/grid/generation/discrete/GridTaskActionRuleSet.d.ts.map +1 -1
- package/src/generation/grid/generation/discrete/GridTaskActionRuleSet.js +4 -3
- package/src/generation/grid/generation/grid/select/CellSupplierBestN.d.ts +11 -5
- package/src/generation/grid/generation/grid/select/CellSupplierBestN.d.ts.map +1 -1
- package/src/generation/grid/generation/grid/select/CellSupplierBestN.js +5 -4
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.d.ts +9 -4
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.d.ts.map +1 -1
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +12 -10
- package/src/generation/grid/generation/util/buildDistanceMapToObjective.d.ts +19 -9
- package/src/generation/grid/generation/util/buildDistanceMapToObjective.d.ts.map +1 -1
- package/src/generation/grid/generation/util/buildDistanceMapToObjective.js +9 -8
- package/src/generation/grid/generation/util/buildPathFromDistanceMap.d.ts +17 -8
- package/src/generation/grid/generation/util/buildPathFromDistanceMap.d.ts.map +1 -1
- package/src/generation/grid/generation/util/buildPathFromDistanceMap.js +8 -7
- package/src/generation/markers/GridActionRuleSet.d.ts +11 -5
- package/src/generation/markers/GridActionRuleSet.d.ts.map +1 -1
- package/src/generation/markers/GridActionRuleSet.js +5 -4
- package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.d.ts +9 -4
- package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.d.ts.map +1 -1
- package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.js +4 -3
- package/src/generation/markers/actions/MarkerNodeActionImaginary.d.ts +9 -4
- package/src/generation/markers/actions/MarkerNodeActionImaginary.d.ts.map +1 -1
- package/src/generation/markers/actions/MarkerNodeActionImaginary.js +4 -3
- package/src/generation/markers/actions/MarkerProcessingRule.d.ts +11 -5
- package/src/generation/markers/actions/MarkerProcessingRule.d.ts.map +1 -1
- package/src/generation/markers/actions/MarkerProcessingRule.js +5 -4
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.d.ts +5 -2
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +2 -1
- package/src/generation/markers/actions/terrain/MarkerNodeActionPaintTerrain.d.ts +13 -6
- package/src/generation/markers/actions/terrain/MarkerNodeActionPaintTerrain.d.ts.map +1 -1
- package/src/generation/markers/actions/terrain/MarkerNodeActionPaintTerrain.js +6 -5
- package/src/generation/markers/emitter/MarkerNodeEmitterPredicated.d.ts +7 -3
- package/src/generation/markers/emitter/MarkerNodeEmitterPredicated.d.ts.map +1 -1
- package/src/generation/markers/emitter/MarkerNodeEmitterPredicated.js +3 -2
- package/src/generation/placement/GridCellPlacementRule.d.ts +15 -7
- package/src/generation/placement/GridCellPlacementRule.d.ts.map +1 -1
- package/src/generation/placement/GridCellPlacementRule.js +7 -6
- package/src/shade/descriptor/ObjectDescriptorBase.d.ts +8 -3
- package/src/shade/descriptor/ObjectDescriptorBase.d.ts.map +1 -1
- package/src/shade/descriptor/ObjectDescriptorBase.js +7 -2
- package/src/shade/descriptor/binding/BindGroupLayoutDescriptor.d.ts +12 -0
- package/src/shade/descriptor/binding/BindGroupLayoutDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/binding/BindGroupLayoutDescriptor.js +8 -0
- package/src/shade/descriptor/binding/BufferBindingLayout.d.ts +11 -6
- package/src/shade/descriptor/binding/BufferBindingLayout.d.ts.map +1 -1
- package/src/shade/descriptor/binding/BufferBindingLayout.js +5 -4
- package/src/shade/descriptor/binding/SamplerBindingLayout.d.ts +2 -2
- package/src/shade/descriptor/binding/SamplerBindingLayout.d.ts.map +1 -1
- package/src/shade/descriptor/binding/SamplerBindingLayout.js +1 -1
- package/src/shade/descriptor/binding/StorageTextureBindingLayout.d.ts +2 -2
- package/src/shade/descriptor/binding/StorageTextureBindingLayout.d.ts.map +1 -1
- package/src/shade/descriptor/binding/StorageTextureBindingLayout.js +1 -1
- package/src/shade/descriptor/binding/TextureBindingLayout.d.ts +4 -4
- package/src/shade/descriptor/binding/TextureBindingLayout.d.ts.map +1 -1
- package/src/shade/descriptor/binding/TextureBindingLayout.js +2 -2
- package/src/shade/descriptor/blend/BlendComponent.d.ts +6 -6
- package/src/shade/descriptor/blend/BlendComponent.d.ts.map +1 -1
- package/src/shade/descriptor/blend/BlendComponent.js +3 -3
- package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts +12 -0
- package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +8 -0
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +18 -5
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +14 -4
- package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts +4 -1
- package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/DepthStencilState.js +3 -0
- package/src/shade/descriptor/pipeline/render/FragmentState.d.ts +5 -2
- package/src/shade/descriptor/pipeline/render/FragmentState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/FragmentState.js +4 -1
- package/src/shade/descriptor/pipeline/render/PrimitiveState.d.ts +8 -8
- package/src/shade/descriptor/pipeline/render/PrimitiveState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/PrimitiveState.js +4 -4
- package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts +16 -4
- package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/StencilFaceState.js +12 -0
- package/src/shade/descriptor/pipeline/render/VertexState.d.ts +5 -2
- package/src/shade/descriptor/pipeline/render/VertexState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/VertexState.js +4 -1
- package/src/shade/descriptor/texture/SamplerDescriptor.d.ts +24 -6
- package/src/shade/descriptor/texture/SamplerDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/texture/SamplerDescriptor.js +18 -0
- package/src/shade/descriptor/texture/TextureDescriptor.d.ts +2 -2
- package/src/shade/descriptor/texture/TextureDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/texture/TextureDescriptor.js +1 -1
- package/src/shade/device/ShadeGPUCommandContext.d.ts +46 -12
- package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
- package/src/shade/device/ShadeGPUCommandContext.js +28 -8
- package/src/shade/device/graph/GraphicsExecutionContext.d.ts +6 -0
- package/src/shade/device/graph/GraphicsExecutionContext.d.ts.map +1 -1
- package/src/shade/device/graph/GraphicsExecutionContext.js +5 -0
- package/src/shade/device/graph/TextureResourceDescriptor.d.ts +13 -6
- package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
- package/src/shade/device/graph/TextureResourceDescriptor.js +6 -5
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts +6 -0
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts.map +1 -1
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.js +5 -0
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts +6 -0
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts.map +1 -1
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.js +5 -0
- package/src/shade/device/pipeline/ComputePipelineManager.d.ts +9 -1
- package/src/shade/device/pipeline/ComputePipelineManager.d.ts.map +1 -1
- package/src/shade/device/pipeline/ComputePipelineManager.js +6 -0
- package/src/shade/device/pipeline/PipelineLayoutManager.d.ts +6 -0
- package/src/shade/device/pipeline/PipelineLayoutManager.d.ts.map +1 -1
- package/src/shade/device/pipeline/PipelineLayoutManager.js +5 -0
- package/src/shade/device/pipeline/RenderPipelineManager.d.ts +7 -1
- package/src/shade/device/pipeline/RenderPipelineManager.d.ts.map +1 -1
- package/src/shade/device/pipeline/RenderPipelineManager.js +5 -0
- package/src/shade/device/shader/ShaderModuleCompiler.d.ts +4 -0
- package/src/shade/device/shader/ShaderModuleCompiler.d.ts.map +1 -1
- package/src/shade/device/shader/ShaderModuleCompiler.js +4 -0
- package/src/shade/device/timing/profile/GPUFrameRecorder.d.ts +6 -0
- package/src/shade/device/timing/profile/GPUFrameRecorder.d.ts.map +1 -1
- package/src/shade/device/timing/profile/GPUFrameRecorder.js +5 -0
- package/src/shade/device/timing/profile/GPUProfileFrame.d.ts +6 -0
- package/src/shade/device/timing/profile/GPUProfileFrame.d.ts.map +1 -1
- package/src/shade/device/timing/profile/GPUProfileFrame.js +5 -0
- package/src/shade/device/timing/profile/GPUProfileSession.d.ts +1 -0
- package/src/shade/device/timing/profile/GPUProfileSession.d.ts.map +1 -1
- package/src/shade/device/timing/profile/GPUProfileSession.js +4 -0
- package/src/shade/device/timing/profile/GPUProfileSpan.d.ts +4 -0
- package/src/shade/device/timing/profile/GPUProfileSpan.d.ts.map +1 -1
- package/src/shade/device/timing/profile/GPUProfileSpan.js +4 -0
- package/src/shade/playground/add_random_meshes.d.ts +19 -8
- package/src/shade/playground/add_random_meshes.d.ts.map +1 -1
- package/src/shade/playground/add_random_meshes.js +8 -7
- package/src/shade/playground/ground_seam/capture_scene_color.d.ts +4 -0
- package/src/shade/playground/ground_seam/capture_scene_color.d.ts.map +1 -1
- package/src/shade/playground/particle_ecs/index.html +0 -2
- package/src/shade/playground/particle_ecs/main.js +8 -29
- package/src/shade/playground/particle_system/main.js +8 -21
- package/src/shade/playground/particle_system/particle_prototype.js +8 -8
- package/src/shade/playground/particle_system/particle_scene.d.ts +0 -61
- package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_scene.js +0 -57
- package/src/shade/playground/ssr_variance/reference.d.ts +1 -1
- package/src/shade/playground/ssr_variance/reference.d.ts.map +1 -1
- package/src/shade/playground/vgeo_viewer/README.md +11 -2
- package/src/shade/playground/vgeo_viewer/cut_geometry.d.ts.map +1 -1
- package/src/shade/playground/vgeo_viewer/cut_geometry.js +3 -40
- package/src/shade/playground/vgeo_viewer/main.js +14 -0
- package/src/shade/playground/vgeo_viewer/select_cut.d.ts +19 -0
- package/src/shade/playground/vgeo_viewer/select_cut.d.ts.map +1 -1
- package/src/shade/playground/vgeo_viewer/select_cut.js +53 -9
- package/src/shade/renderer/GPUSamplerManager.d.ts +4 -0
- package/src/shade/renderer/GPUSamplerManager.d.ts.map +1 -1
- package/src/shade/renderer/GPUSamplerManager.js +4 -0
- package/src/shade/renderer/GraphicsContext.d.ts +2 -0
- package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
- package/src/shade/renderer/GraphicsContext.js +5 -0
- package/src/shade/renderer/Renderer.d.ts +14 -4
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +70 -67
- package/src/shade/renderer/ResourceManager.d.ts +10 -0
- package/src/shade/renderer/ResourceManager.d.ts.map +1 -1
- package/src/shade/renderer/ResourceManager.js +7 -0
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +18 -11
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +2063 -1958
- package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts +2 -0
- package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts.map +1 -1
- package/src/shade/renderer/animation/ShadeAnimationChannel.js +5 -0
- package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +4 -0
- package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
- package/src/shade/renderer/animation/ShadeAnimationClip.js +4 -0
- package/src/shade/renderer/animation/Skin.d.ts +6 -0
- package/src/shade/renderer/animation/Skin.d.ts.map +1 -1
- package/src/shade/renderer/animation/Skin.js +5 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +48 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +201 -14
- package/src/shade/renderer/binding/BindGroupDescriptor.d.ts +2 -1
- package/src/shade/renderer/binding/BindGroupDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/binding/BindGroupDescriptor.js +4 -0
- package/src/shade/renderer/binding/BindGroupManager.d.ts +1 -0
- package/src/shade/renderer/binding/BindGroupManager.d.ts.map +1 -1
- package/src/shade/renderer/binding/BindGroupManager.js +4 -0
- package/src/shade/renderer/buffer/GPUBufferAllocatorNative.d.ts +4 -0
- package/src/shade/renderer/buffer/GPUBufferAllocatorNative.d.ts.map +1 -1
- package/src/shade/renderer/buffer/GPUBufferAllocatorNative.js +4 -0
- package/src/shade/renderer/buffer/GPUTypedBuffer.d.ts +20 -8
- package/src/shade/renderer/buffer/GPUTypedBuffer.d.ts.map +1 -1
- package/src/shade/renderer/buffer/GPUTypedBuffer.js +11 -6
- package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.d.ts +15 -7
- package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.d.ts.map +1 -1
- package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +7 -6
- package/src/shade/renderer/buffer/inspect_gpu_buffer.d.ts +26 -12
- package/src/shade/renderer/buffer/inspect_gpu_buffer.d.ts.map +1 -1
- package/src/shade/renderer/buffer/inspect_gpu_buffer.js +12 -10
- package/src/shade/renderer/buffer/inspect_gpu_buffer_typed.d.ts +13 -6
- package/src/shade/renderer/buffer/inspect_gpu_buffer_typed.d.ts.map +1 -1
- package/src/shade/renderer/buffer/inspect_gpu_buffer_typed.js +6 -5
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts +13 -5
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +10 -4
- package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts +3 -1
- package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTable.js +5 -0
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts +4 -0
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +4 -0
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts +11 -4
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +9 -3
- package/src/shade/renderer/camera/CameraManager.d.ts +4 -0
- package/src/shade/renderer/camera/CameraManager.d.ts.map +1 -1
- package/src/shade/renderer/camera/CameraManager.js +4 -0
- package/src/shade/renderer/camera/GPUCameraContext.d.ts +4 -2
- package/src/shade/renderer/camera/GPUCameraContext.d.ts.map +1 -1
- package/src/shade/renderer/camera/GPUCameraContext.js +5 -0
- package/src/shade/renderer/extension/FrameContext.d.ts +15 -5
- package/src/shade/renderer/extension/FrameContext.d.ts.map +1 -1
- package/src/shade/renderer/extension/FrameContext.js +7 -0
- package/src/shade/renderer/extension/FrameRecord.d.ts +7 -1
- package/src/shade/renderer/extension/FrameRecord.d.ts.map +1 -1
- package/src/shade/renderer/extension/FrameRecord.js +5 -0
- package/src/shade/renderer/extension/RenderExtension.d.ts +4 -0
- package/src/shade/renderer/extension/RenderExtension.d.ts.map +1 -1
- package/src/shade/renderer/extension/RenderExtension.js +4 -0
- package/src/shade/renderer/geometry/Attribute.d.ts +2 -2
- package/src/shade/renderer/geometry/Attribute.d.ts.map +1 -1
- package/src/shade/renderer/geometry/Attribute.js +1 -1
- package/src/shade/renderer/geometry/GPUGeometryManager.d.ts +30 -2
- package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/GPUGeometryManager.js +642 -591
- package/src/shade/renderer/geometry/GPUGeometryMetadata.d.ts +4 -0
- package/src/shade/renderer/geometry/GPUGeometryMetadata.d.ts.map +1 -1
- package/src/shade/renderer/geometry/GPUGeometryMetadata.js +4 -0
- package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts +7 -3
- package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +3 -2
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +4 -0
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +4 -0
- package/src/shade/renderer/geometry/bvh/bvh_to_gpu_buffer.d.ts +11 -5
- package/src/shade/renderer/geometry/bvh/bvh_to_gpu_buffer.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/bvh_to_gpu_buffer.js +5 -4
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +12 -4
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +10 -3
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts +1 -0
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +4 -0
- package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts +13 -6
- package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet_batch_to_bvh.js +6 -5
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +2 -0
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +5 -0
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts +13 -6
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +6 -5
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts +31 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +345 -0
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.d.ts +11 -5
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.js +5 -4
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts +12 -5
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.js +5 -4
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts +11 -5
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +5 -4
- package/src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.d.ts +5 -1
- package/src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.js +4 -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/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts +7 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +5 -0
- package/src/shade/renderer/global_illumination/lpv/graph_bake_irradiance_lookup_2d.d.ts +11 -5
- package/src/shade/renderer/global_illumination/lpv/graph_bake_irradiance_lookup_2d.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/graph_bake_irradiance_lookup_2d.js +5 -4
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts +9 -4
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +4 -3
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts +9 -4
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +4 -3
- package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts +7 -3
- package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.js +3 -2
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.d.ts +28 -8
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.js +17 -6
- package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.d.ts +13 -6
- package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.js +6 -5
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.d.ts +15 -7
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.js +7 -6
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts +17 -8
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +8 -7
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts +17 -8
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +8 -7
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts +15 -7
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +7 -6
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +19 -9
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +9 -8
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts +9 -4
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js +4 -3
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +11 -5
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +5 -4
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +9 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +6 -0
- package/src/shade/renderer/hiz/generate_downsampler_code.d.ts +11 -5
- package/src/shade/renderer/hiz/generate_downsampler_code.d.ts.map +1 -1
- package/src/shade/renderer/hiz/generate_downsampler_code.js +5 -4
- package/src/shade/renderer/hiz/graph_build_hzb.d.ts +13 -6
- package/src/shade/renderer/hiz/graph_build_hzb.d.ts.map +1 -1
- package/src/shade/renderer/hiz/graph_build_hzb.js +6 -5
- package/src/shade/renderer/light/GPULightCollection.d.ts +4 -1
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +6 -0
- package/src/shade/renderer/light/LightCollection.d.ts +9 -3
- package/src/shade/renderer/light/LightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/LightCollection.js +5 -0
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts +11 -5
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +17 -14
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts +13 -6
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +6 -5
- package/src/shade/renderer/light/cluster/graph_build_light_clusters.d.ts +13 -6
- package/src/shade/renderer/light/cluster/graph_build_light_clusters.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/graph_build_light_clusters.js +6 -5
- package/src/shade/renderer/light/environment/graph_filter_environment_map.d.ts +7 -3
- package/src/shade/renderer/light/environment/graph_filter_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/graph_filter_environment_map.js +3 -2
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts +11 -5
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +5 -4
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/GPUMaterialContext.d.ts +17 -1
- package/src/shade/renderer/material/GPUMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialContext.js +10 -0
- package/src/shade/renderer/material/GPUMaterialManager.d.ts +19 -5
- package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.js +19 -4
- package/src/shade/renderer/material/ShadeMaterial.d.ts +2 -1
- package/src/shade/renderer/material/ShadeMaterial.d.ts.map +1 -1
- package/src/shade/renderer/material/ShadeMaterial.js +4 -0
- package/src/shade/renderer/material/StandardShadeMaterial.d.ts +6 -0
- package/src/shade/renderer/material/StandardShadeMaterial.d.ts.map +1 -1
- package/src/shade/renderer/material/StandardShadeMaterial.js +5 -0
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +12 -0
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +8 -0
- package/src/shade/renderer/particles/DESIGN.md +82 -69
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +93 -48
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +117 -176
- package/src/shade/renderer/particles/ParticleConstants.d.ts +6 -12
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +6 -13
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +4 -4
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +6 -6
- package/src/shade/renderer/particles/coherence/particle_program_buckets.d.ts +2 -1
- package/src/shade/renderer/particles/coherence/particle_program_buckets.d.ts.map +1 -1
- package/src/shade/renderer/particles/coherence/particle_program_buckets.js +6 -8
- package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts.map +1 -1
- package/src/shade/renderer/particles/coherence/shader_particle_bucket.js +4 -3
- package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts +10 -14
- package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.js +10 -14
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +6 -5
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +6 -5
- package/src/shade/renderer/particles/graph_particles.d.ts +19 -32
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +18 -25
- package/src/shade/renderer/particles/graph_particles_avboit.js +16 -16
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +3 -2
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +31 -27
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +4 -4
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +4 -4
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.js +4 -4
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts +7 -6
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +7 -6
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +4 -3
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +4 -3
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts +2 -2
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +10 -10
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +3 -3
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +2 -1
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +13 -16
- package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_render.js +22 -19
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts +10 -3
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +12 -2
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts +7 -3
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +3 -2
- package/src/shade/renderer/postprocess/bloom/graph_bloom_downsample.d.ts +11 -5
- package/src/shade/renderer/postprocess/bloom/graph_bloom_downsample.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/bloom/graph_bloom_downsample.js +5 -4
- package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.d.ts +13 -6
- package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.js +11 -9
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.d.ts +31 -15
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.js +15 -14
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts +21 -10
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.js +10 -9
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts +17 -8
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +8 -7
- package/src/shade/renderer/postprocess/dof/gather/DepthOfFieldU.d.ts +6 -0
- package/src/shade/renderer/postprocess/dof/gather/DepthOfFieldU.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/DepthOfFieldU.js +5 -0
- package/src/shade/renderer/postprocess/dof/raymarch/DepthOfField.d.ts +6 -0
- package/src/shade/renderer/postprocess/dof/raymarch/DepthOfField.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/DepthOfField.js +5 -0
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts +14 -6
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +6 -4
- package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.d.ts +13 -6
- package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.js +6 -5
- package/src/shade/renderer/postprocess/gtao/render_copy_texture.d.ts +28 -13
- package/src/shade/renderer/postprocess/gtao/render_copy_texture.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/render_copy_texture.js +13 -11
- package/src/shade/renderer/postprocess/motion_blur/MotionBlur.d.ts +4 -0
- package/src/shade/renderer/postprocess/motion_blur/MotionBlur.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/motion_blur/MotionBlur.js +4 -0
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +7 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.js +5 -0
- package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.d.ts +9 -4
- package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.js +4 -3
- package/src/shade/renderer/postprocess/ssr/ssr_graph_prefilter_color.d.ts +13 -6
- package/src/shade/renderer/postprocess/ssr/ssr_graph_prefilter_color.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_graph_prefilter_color.js +6 -5
- package/src/shade/renderer/postprocess/taa/TAA.d.ts +15 -7
- package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/TAA.js +7 -6
- package/src/shade/renderer/postprocess/velocity/graph_add_camera_velocity.d.ts +13 -6
- package/src/shade/renderer/postprocess/velocity/graph_add_camera_velocity.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/velocity/graph_add_camera_velocity.js +6 -5
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts +11 -5
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +5 -4
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts +11 -5
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.js +5 -4
- package/src/shade/renderer/rasterize/execute_rasterization_jobs.d.ts +12 -5
- package/src/shade/renderer/rasterize/execute_rasterization_jobs.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/execute_rasterization_jobs.js +5 -4
- package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.d.ts +2 -0
- package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.js +5 -0
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts +11 -5
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.js +5 -4
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.d.ts +9 -4
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.js +4 -3
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.d.ts +11 -5
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.js +5 -4
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts +15 -7
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +7 -6
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_two_way.d.ts +15 -7
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_two_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_two_way.js +7 -6
- package/src/shade/renderer/rasterize/expand/graph_meshlets_expand.d.ts +13 -6
- package/src/shade/renderer/rasterize/expand/graph_meshlets_expand.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_expand.js +6 -5
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.d.ts +17 -8
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.js +8 -7
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_two_way.d.ts +13 -6
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_two_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_two_way.js +6 -5
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts +21 -10
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js +10 -9
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.d.ts +13 -6
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.js +6 -5
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_one_way.d.ts +17 -8
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_one_way.js +8 -7
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_two_way.d.ts +13 -6
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_two_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_two_way.js +6 -5
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts +15 -7
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +7 -6
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts +11 -5
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +5 -4
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts +9 -4
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +4 -3
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +80 -37
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +37 -33
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts +28 -13
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +13 -12
- 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 +12 -11
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +5 -4
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts +9 -4
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +4 -3
- package/src/shade/renderer/restir/di/ReSTIRDI.d.ts +10 -0
- package/src/shade/renderer/restir/di/ReSTIRDI.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/ReSTIRDI.js +7 -0
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +2 -0
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +5 -0
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +4 -0
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +15 -0
- package/src/shade/renderer/scene/InstanceBatch.d.ts +11 -3
- package/src/shade/renderer/scene/InstanceBatch.d.ts.map +1 -1
- package/src/shade/renderer/scene/InstanceBatch.js +6 -0
- package/src/shade/renderer/scene/Mesh.d.ts +8 -2
- package/src/shade/renderer/scene/Mesh.d.ts.map +1 -1
- package/src/shade/renderer/scene/Mesh.js +6 -1
- package/src/shade/renderer/scene/SceneManager.d.ts +6 -0
- package/src/shade/renderer/scene/SceneManager.d.ts.map +1 -1
- package/src/shade/renderer/scene/SceneManager.js +5 -0
- package/src/shade/renderer/scene/SkinnedMesh.d.ts +4 -0
- package/src/shade/renderer/scene/SkinnedMesh.d.ts.map +1 -1
- package/src/shade/renderer/scene/SkinnedMesh.js +4 -0
- package/src/shade/renderer/scene/serialization/serialize_scene.d.ts +7 -3
- package/src/shade/renderer/scene/serialization/serialize_scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/serialization/serialize_scene.js +3 -2
- package/src/shade/renderer/shader/ComputeShader.d.ts +64 -29
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +29 -23
- package/src/shade/renderer/shader/ImageShader.d.ts +9 -4
- package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ImageShader.js +4 -3
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts +10 -4
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/ShaderDescriptor.js +4 -3
- package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.d.ts +7 -3
- package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.js +6 -4
- package/src/shade/renderer/shader/fullscreen/create_full_quad_pipeline_descriptor.d.ts +13 -6
- package/src/shade/renderer/shader/fullscreen/create_full_quad_pipeline_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/fullscreen/create_full_quad_pipeline_descriptor.js +6 -5
- package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.d.ts +13 -6
- package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.d.ts.map +1 -1
- package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.js +6 -5
- package/src/shade/renderer/shader/graph/compute/graph_compute_pass.d.ts +13 -6
- package/src/shade/renderer/shader/graph/compute/graph_compute_pass.d.ts.map +1 -1
- package/src/shade/renderer/shader/graph/compute/graph_compute_pass.js +6 -5
- package/src/shade/renderer/shader/graph/graph_image_pass.d.ts +27 -13
- package/src/shade/renderer/shader/graph/graph_image_pass.d.ts.map +1 -1
- package/src/shade/renderer/shader/graph/graph_image_pass.js +13 -12
- package/src/shade/renderer/shader/graph/graph_import_raw_buffer.d.ts +15 -7
- package/src/shade/renderer/shader/graph/graph_import_raw_buffer.d.ts.map +1 -1
- package/src/shade/renderer/shader/graph/graph_import_raw_buffer.js +7 -6
- package/src/shade/renderer/shader/graph/graph_import_typed_buffer.d.ts +13 -6
- package/src/shade/renderer/shader/graph/graph_import_typed_buffer.d.ts.map +1 -1
- package/src/shade/renderer/shader/graph/graph_import_typed_buffer.js +6 -5
- package/src/shade/renderer/shader/pass/RenderPassColorAttachmentDescriptor.d.ts +7 -3
- package/src/shade/renderer/shader/pass/RenderPassColorAttachmentDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/pass/RenderPassColorAttachmentDescriptor.js +3 -2
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +49 -23
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +23 -20
- package/src/shade/renderer/shader/resource/ShaderResourceDescriptor.d.ts +6 -0
- package/src/shade/renderer/shader/resource/ShaderResourceDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceDescriptor.js +9 -0
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts +11 -2
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.js +7 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts +10 -3
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +9 -2
- package/src/shade/renderer/shader/type/WGSLAttribute.d.ts +2 -2
- package/src/shade/renderer/shader/type/WGSLAttribute.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/WGSLAttribute.js +1 -1
- package/src/shade/renderer/shader/type/WGSLStructField.d.ts +6 -2
- package/src/shade/renderer/shader/type/WGSLStructField.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/WGSLStructField.js +5 -1
- package/src/shade/renderer/shader/type/WebGPUArray.d.ts +0 -2
- package/src/shade/renderer/shader/type/WebGPUArray.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/WebGPUStruct.d.ts +2 -4
- package/src/shade/renderer/shader/type/WebGPUStruct.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/WebGPUStruct.js +1 -1
- package/src/shade/renderer/shader/type/WebGPUType.d.ts +5 -1
- package/src/shade/renderer/shader/type/WebGPUType.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/WebGPUType.js +4 -0
- package/src/shade/renderer/shadow/evsm/graph_evsm_render_cascade.d.ts +7 -3
- package/src/shade/renderer/shadow/evsm/graph_evsm_render_cascade.d.ts.map +1 -1
- package/src/shade/renderer/shadow/evsm/graph_evsm_render_cascade.js +3 -2
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +7 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +10 -0
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts +12 -0
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/Shadowmap.js +8 -0
- package/src/shade/renderer/shadow/map/SpotLightShadowmap.d.ts +2 -2
- package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.d.ts +7 -3
- package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -2
- package/src/shade/renderer/shadow/map/csm_debug_draw_preview.d.ts +11 -5
- package/src/shade/renderer/shadow/map/csm_debug_draw_preview.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/csm_debug_draw_preview.js +5 -4
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.d.ts +13 -6
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +6 -5
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.d.ts +9 -4
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +4 -3
- package/src/shade/renderer/shadow/sdf/brixelizer/Brixelizer.d.ts +11 -5
- package/src/shade/renderer/shadow/sdf/brixelizer/Brixelizer.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/brixelizer/Brixelizer.js +5 -4
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts +1 -0
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +4 -0
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts +13 -6
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +6 -5
- package/src/shade/renderer/texture/GPUTextureAllocator.d.ts +4 -0
- package/src/shade/renderer/texture/GPUTextureAllocator.d.ts.map +1 -1
- package/src/shade/renderer/texture/GPUTextureAllocator.js +4 -0
- package/src/shade/renderer/texture/GPUTextureContext.d.ts +1 -0
- package/src/shade/renderer/texture/GPUTextureContext.d.ts.map +1 -1
- package/src/shade/renderer/texture/GPUTextureContext.js +4 -0
- package/src/shade/renderer/texture/RenderTarget.d.ts +7 -3
- package/src/shade/renderer/texture/RenderTarget.d.ts.map +1 -1
- package/src/shade/renderer/texture/RenderTarget.js +3 -2
- package/src/shade/renderer/texture/ShadeTexture.d.ts +2 -1
- package/src/shade/renderer/texture/ShadeTexture.d.ts.map +1 -1
- package/src/shade/renderer/texture/ShadeTexture.js +4 -0
- package/src/shade/renderer/texture/TextureManager.d.ts +1 -0
- package/src/shade/renderer/texture/TextureManager.d.ts.map +1 -1
- package/src/shade/renderer/texture/TextureManager.js +4 -0
- package/src/shade/renderer/texture/debug_draw_texture.d.ts +9 -4
- package/src/shade/renderer/texture/debug_draw_texture.d.ts.map +1 -1
- package/src/shade/renderer/texture/debug_draw_texture.js +4 -3
- package/src/shade/renderer/texture/download_texture_data.d.ts +17 -6
- package/src/shade/renderer/texture/download_texture_data.d.ts.map +1 -1
- package/src/shade/renderer/texture/download_texture_data.js +10 -5
- package/src/shade/renderer/texture/draw_texture_as_rgba.d.ts +26 -12
- package/src/shade/renderer/texture/draw_texture_as_rgba.d.ts.map +1 -1
- package/src/shade/renderer/texture/draw_texture_as_rgba.js +12 -10
- package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.d.ts.map +1 -1
- package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +5 -4
- package/src/shade/renderer/texture/source/ShadeImage.d.ts +4 -2
- package/src/shade/renderer/texture/source/ShadeImage.d.ts.map +1 -1
- package/src/shade/renderer/texture/source/ShadeImage.js +5 -0
- package/src/shade/renderer/texture/source/ShadeImageSerializationAdapter.d.ts +12 -0
- package/src/shade/renderer/texture/source/ShadeImageSerializationAdapter.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/make_checkers_texture.d.ts +12 -5
- package/src/shade/renderer/texture/util/make_checkers_texture.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/make_checkers_texture.js +5 -4
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts +7 -2
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +8 -0
- package/src/shade/renderer/util/Uint32BufferSamplingStats.d.ts +2 -0
- package/src/shade/renderer/util/Uint32BufferSamplingStats.d.ts.map +1 -1
- package/src/shade/renderer/util/Uint32BufferSamplingStats.js +5 -0
- package/src/shade/renderer/view/GPUViewContext.d.ts +4 -1
- package/src/shade/renderer/view/GPUViewContext.d.ts.map +1 -1
- package/src/shade/renderer/view/GPUViewContext.js +11 -5
- package/src/shade/renderer/view/View.d.ts +6 -0
- package/src/shade/renderer/view/View.d.ts.map +1 -1
- package/src/shade/renderer/view/View.js +5 -0
- package/src/shade/renderer/view/ViewManager.d.ts +11 -1
- package/src/shade/renderer/view/ViewManager.d.ts.map +1 -1
- package/src/shade/renderer/view/ViewManager.js +7 -0
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts +6 -0
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +5 -0
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +15 -6
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +11 -5
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +5 -5
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +1 -1
- package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts +4 -0
- package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/SceneVolumetrics.js +4 -0
- package/src/shade/renderer/volumetrics/build_volumetrics_sun_shadow_transform.d.ts +23 -11
- package/src/shade/renderer/volumetrics/build_volumetrics_sun_shadow_transform.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/build_volumetrics_sun_shadow_transform.js +11 -10
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +37 -18
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +30 -26
- package/src/view/View.d.ts +8 -3
- package/src/view/View.d.ts.map +1 -1
- package/src/view/View.js +7 -2
- package/src/view/asset/AssetLoaderStatusView.d.ts +7 -3
- package/src/view/asset/AssetLoaderStatusView.d.ts.map +1 -1
- package/src/view/asset/AssetLoaderStatusView.js +3 -2
- package/src/view/common/ListView.d.ts +21 -15
- package/src/view/common/ListView.d.ts.map +1 -1
- package/src/view/common/ListView.js +8 -7
- package/src/view/common/LocalizedLabelView.d.ts +15 -7
- package/src/view/common/LocalizedLabelView.d.ts.map +1 -1
- package/src/view/common/LocalizedLabelView.js +7 -6
- package/src/view/common/TabbedView.d.ts +14 -6
- package/src/view/common/TabbedView.d.ts.map +1 -1
- package/src/view/common/TabbedView.js +6 -4
- package/src/view/controller/controls/BooleanVector3Control.d.ts +1 -1
- package/src/view/controller/controls/BooleanVector3Control.d.ts.map +1 -1
- package/src/view/controller/controls/GuiControl.d.ts +1 -1
- package/src/view/controller/controls/GuiControl.d.ts.map +1 -1
- package/src/view/controller/controls/NativeListController.d.ts +15 -7
- package/src/view/controller/controls/NativeListController.d.ts.map +1 -1
- package/src/view/controller/controls/NativeListController.js +7 -6
- package/src/view/controller/controls/Vector1Control.d.ts +1 -1
- package/src/view/controller/controls/Vector1Control.d.ts.map +1 -1
- package/src/view/currency/CompositeCurrencyLabelView.d.ts +10 -5
- package/src/view/currency/CompositeCurrencyLabelView.d.ts.map +1 -1
- package/src/view/currency/CompositeCurrencyLabelView.js +4 -3
- package/src/view/currency/CurrencyDenominationLabelView.d.ts +7 -3
- package/src/view/currency/CurrencyDenominationLabelView.d.ts.map +1 -1
- package/src/view/currency/CurrencyDenominationLabelView.js +3 -2
- package/src/view/elements/CheckboxView.d.ts +7 -3
- package/src/view/elements/CheckboxView.d.ts.map +1 -1
- package/src/view/elements/CheckboxView.js +3 -2
- package/src/view/elements/DropDownSelectionView.d.ts +9 -4
- package/src/view/elements/DropDownSelectionView.d.ts.map +1 -1
- package/src/view/elements/DropDownSelectionView.js +3 -2
- package/src/view/elements/EmptyView.d.ts +29 -13
- package/src/view/elements/EmptyView.d.ts.map +1 -1
- package/src/view/elements/EmptyView.js +13 -11
- package/src/view/elements/SimpleWindow.d.ts +1 -1
- package/src/view/elements/SimpleWindow.d.ts.map +1 -1
- package/src/view/elements/button/ButtonView.d.ts +15 -7
- package/src/view/elements/button/ButtonView.d.ts.map +1 -1
- package/src/view/elements/button/ButtonView.js +7 -6
- package/src/view/elements/image/ImageView.d.ts +7 -3
- package/src/view/elements/image/ImageView.d.ts.map +1 -1
- package/src/view/elements/image/ImageView.js +3 -2
- package/src/view/elements/image/SvgImageView.d.ts +5 -2
- package/src/view/elements/image/SvgImageView.d.ts.map +1 -1
- package/src/view/elements/image/SvgImageView.js +2 -1
- package/src/view/elements/label/LabeledValueView.d.ts +14 -7
- package/src/view/elements/label/LabeledValueView.d.ts.map +1 -1
- package/src/view/elements/label/LabeledValueView.js +6 -5
- package/src/view/elements/progress/SmoothProgressBar.d.ts +14 -7
- package/src/view/elements/progress/SmoothProgressBar.d.ts.map +1 -1
- package/src/view/elements/progress/SmoothProgressBar.js +6 -5
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts +9 -4
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.d.ts.map +1 -1
- package/src/view/elements/progress/segmented/SegmentedResourceBarView.js +4 -3
- package/src/view/elements/radial/RadialMenu.d.ts +19 -9
- package/src/view/elements/radial/RadialMenu.d.ts.map +1 -1
- package/src/view/elements/radial/RadialMenu.js +9 -8
- package/src/view/elements/radial/RadialMenuElementDefinition.d.ts +63 -31
- package/src/view/elements/radial/RadialMenuElementDefinition.d.ts.map +1 -1
- package/src/view/elements/radial/RadialMenuElementDefinition.js +30 -28
- package/src/view/elements/radial/RadialProgressView.d.ts +1 -1
- package/src/view/elements/radial/RadialProgressView.d.ts.map +1 -1
- package/src/view/elements/radial/RadialText.d.ts +18 -10
- package/src/view/elements/radial/RadialText.d.ts.map +1 -1
- package/src/view/elements/radial/RadialText.js +7 -6
- package/src/view/elements/tiles2d/Tile.d.ts +12 -6
- package/src/view/elements/tiles2d/Tile.d.ts.map +1 -1
- package/src/view/elements/tiles2d/Tile.js +4 -3
- package/src/view/elements/tiles2d/TileGrid.d.ts +23 -10
- package/src/view/elements/tiles2d/TileGrid.d.ts.map +1 -1
- package/src/view/elements/tiles2d/TileGrid.js +10 -9
- package/src/view/elements/video/VideoView.d.ts +7 -3
- package/src/view/elements/video/VideoView.d.ts.map +1 -1
- package/src/view/elements/video/VideoView.js +3 -2
- package/src/view/game/achievements/AchievementNotificationView.d.ts +7 -3
- package/src/view/game/achievements/AchievementNotificationView.d.ts.map +1 -1
- package/src/view/game/achievements/AchievementNotificationView.js +3 -2
- package/src/view/graphics/GraphicsContextFailureView.d.ts +11 -5
- package/src/view/graphics/GraphicsContextFailureView.d.ts.map +1 -1
- package/src/view/graphics/GraphicsContextFailureView.js +5 -4
- package/src/view/interaction/InteractionCommand.d.ts +11 -5
- package/src/view/interaction/InteractionCommand.d.ts.map +1 -1
- package/src/view/interaction/InteractionCommand.js +5 -4
- package/src/view/interaction/InterfaceCommand.d.ts +32 -15
- package/src/view/interaction/InterfaceCommand.d.ts.map +1 -1
- package/src/view/interaction/InterfaceCommand.js +15 -13
- package/src/view/interaction/createInterfaceCommandButton.d.ts +9 -4
- package/src/view/interaction/createInterfaceCommandButton.d.ts.map +1 -1
- package/src/view/interaction/createInterfaceCommandButton.js +4 -3
- package/src/view/layout/DockPanel.d.ts +11 -5
- package/src/view/layout/DockPanel.d.ts.map +1 -1
- package/src/view/layout/DockPanel.js +5 -4
- package/src/view/layout/DrawerView.d.ts +7 -3
- package/src/view/layout/DrawerView.d.ts.map +1 -1
- package/src/view/layout/DrawerView.js +3 -2
- package/src/view/layout/FloatingPanelView.d.ts +7 -3
- package/src/view/layout/FloatingPanelView.d.ts.map +1 -1
- package/src/view/layout/FloatingPanelView.js +3 -2
- package/src/view/layout/SplitView.d.ts +11 -5
- package/src/view/layout/SplitView.d.ts.map +1 -1
- package/src/view/layout/SplitView.js +5 -4
- package/src/view/math/FunctionGraphView.d.ts +8 -4
- package/src/view/math/FunctionGraphView.d.ts.map +1 -1
- package/src/view/math/FunctionGraphView.js +3 -2
- package/src/view/minimap/MinimapCanvasView.d.ts +10 -4
- package/src/view/minimap/MinimapCanvasView.d.ts.map +1 -1
- package/src/view/minimap/MinimapCanvasView.js +4 -3
- package/src/view/minimap/dom/MinimapCameraView.d.ts +2 -1
- package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapMarkerView.d.ts +31 -9
- package/src/view/minimap/dom/MinimapMarkerView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapTerrainView.d.ts +9 -4
- package/src/view/minimap/dom/MinimapTerrainView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapTerrainView.js +3 -2
- package/src/view/task/TaskProgressView.d.ts +7 -3
- package/src/view/task/TaskProgressView.d.ts.map +1 -1
- package/src/view/task/TaskProgressView.js +3 -2
- package/src/view/tooltip/DomTooltipManager.d.ts +6 -0
- package/src/view/tooltip/DomTooltipManager.d.ts.map +1 -1
- package/src/view/tooltip/DomTooltipManager.js +5 -0
- package/src/view/tooltip/DomTooltipObserver.d.ts +4 -0
- package/src/view/tooltip/DomTooltipObserver.d.ts.map +1 -1
- package/src/view/tooltip/DomTooltipObserver.js +4 -0
- package/src/view/tooltip/TooltipManager.d.ts +6 -0
- package/src/view/tooltip/TooltipManager.d.ts.map +1 -1
- package/src/view/tooltip/TooltipManager.js +5 -0
- package/src/view/tooltip/TooltipView.d.ts +7 -3
- package/src/view/tooltip/TooltipView.d.ts.map +1 -1
- package/src/view/tooltip/TooltipView.js +5 -1
- package/src/view/tooltip/VisualTip.d.ts +6 -0
- package/src/view/tooltip/VisualTip.d.ts.map +1 -1
- package/src/view/tooltip/VisualTip.js +5 -0
- package/src/view/tooltip/gml/GMLEngine.d.ts +14 -2
- package/src/view/tooltip/gml/GMLEngine.d.ts.map +1 -1
- package/src/view/tooltip/gml/GMLEngine.js +8 -0
- package/src/view/tooltip/gml/compiler/GMLReferenceCompiler.d.ts +10 -0
- package/src/view/tooltip/gml/compiler/GMLReferenceCompiler.d.ts.map +1 -1
- package/src/view/tooltip/gml/compiler/GMLReferenceCompiler.js +7 -0
- package/src/view/util/DomSizeObserver.d.ts +9 -2
- package/src/view/util/DomSizeObserver.d.ts.map +1 -1
- package/src/view/util/DomSizeObserver.js +6 -1
- package/src/shade/renderer/geometry/virtual/format/prototypeVGEOFormatViewer.d.ts +0 -395
- package/src/shade/renderer/geometry/virtual/format/prototypeVGEOFormatViewer.d.ts.map +0 -1
- package/src/shade/renderer/particles/ParticleRenderMode.d.ts +0 -19
- package/src/shade/renderer/particles/ParticleRenderMode.d.ts.map +0 -1
- package/src/shade/renderer/particles/ParticleRenderMode.js +0 -33
- package/src/shade/renderer/particles/graph_particles_billboard.d.ts +0 -37
- package/src/shade/renderer/particles/graph_particles_billboard.d.ts.map +0 -1
- package/src/shade/renderer/particles/graph_particles_billboard.js +0 -93
- package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts +0 -55
- package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts.map +0 -1
- package/src/shade/renderer/particles/sort/graph_particle_sort.js +0 -130
- package/src/shade/renderer/particles/sort/particle_counting_sort.d.ts +0 -26
- package/src/shade/renderer/particles/sort/particle_counting_sort.d.ts.map +0 -1
- package/src/shade/renderer/particles/sort/particle_counting_sort.js +0 -51
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts +0 -14
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +0 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.js +0 -223
|
@@ -0,0 +1,956 @@
|
|
|
1
|
+
# Cloth — measurements
|
|
2
|
+
|
|
3
|
+
> Two milestones, appended in order. §1–§8 are **M0**, the solver core; §9–§15
|
|
4
|
+
> are **M1**, the component and the system. Nothing above a milestone boundary
|
|
5
|
+
> is edited by the milestone below it — a measurement that turned out to be
|
|
6
|
+
> incomplete is corrected by a later section saying so, not by a rewrite.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Cloth — M0 measurements
|
|
11
|
+
|
|
12
|
+
> What the solver core actually does, measured. Written 2026-09-10, against the
|
|
13
|
+
> M0 implementation in `solver/`.
|
|
14
|
+
>
|
|
15
|
+
> Every number here is reproducible from two scripts, both runnable directly
|
|
16
|
+
> under node (through vitest, imported bindings become getters and the
|
|
17
|
+
> cross-module calls that make up the inner loop stop inlining — which is
|
|
18
|
+
> exactly what is being measured):
|
|
19
|
+
>
|
|
20
|
+
> ```
|
|
21
|
+
> node src/engine/physics/cloth/solver/__fixtures__/cloth_constants_sweep.mjs
|
|
22
|
+
> node src/engine/physics/cloth/solver/__fixtures__/cloth_bench.mjs
|
|
23
|
+
> ```
|
|
24
|
+
>
|
|
25
|
+
> There is also a playground, which is where the §6 finding came from:
|
|
26
|
+
> `npm run dev --workspace @woosh/meep-engine`, then
|
|
27
|
+
> `/src/engine/physics/cloth/playground/`. Its presets are the interesting rows
|
|
28
|
+
> of this document, one click each.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 1. What M0 proved wrong in PLAN.md
|
|
33
|
+
|
|
34
|
+
Six things, in the order they were found. Each is folded back into the design
|
|
35
|
+
document; this is the evidence.
|
|
36
|
+
|
|
37
|
+
| # | The design said | The measurement said |
|
|
38
|
+
|---|---|---|
|
|
39
|
+
| 0 | §6 — a stretch row carries a material stiffness `k_stretch` | A *penalty* stiffer than about `8·(m/h²)` makes the step **add** energy — measured at +6.8 J on a sheet whose whole potential is 1.2 J — and no iteration count removes it. Cloth's stretch rows have to be hard. §6 below. |
|
|
40
|
+
| 1 | §5.3 — an SPD Hessian means "no update can increase the local energy" | SPD buys a descent **direction**. A full Newton step of 1 overshoots and climbs where the model stops resembling the energy. §5.3 below. |
|
|
41
|
+
| 2 | §5.2 — drop the geometric-stiffness term `fc·∂²C/∂x²` entirely | Its PSD half is what stops the update overshooting sideways. Keep it; the NSD half is still dropped. §5.1 |
|
|
42
|
+
| 3 | §5.2 — the multiplier and the penalty band apply to every row | They apply only to **hard** rows. On a soft row the multiplier drives `C → 0` and makes a 1 kN/m spring 100× stiffer than Hooke. §3 |
|
|
43
|
+
| 4 | §5.2 — `k_min` and `k_max` are stiffnesses | They are only meaningful as **ratios of the row's own `m/h²`** — the same ratio works across five decades of particle mass; a fixed stiffness does not. §4 |
|
|
44
|
+
| 5 | §5.2 — the 3×3 solve "never fails" | The *cofactor* solve fails: a determinant of −4.8e8 on a matrix with eigenvalues 0.12, 0.12, 5.4e8. LDLᵀ does not. §5.2 |
|
|
45
|
+
| 6 | §17 — under 2 ms per frame per character | **3.50 ms** best case, 4.42 ms median, for 1,024 particles at 2×4. Over by 1.75×. And gathering neighbours is *not* what dominates. §7 |
|
|
46
|
+
|
|
47
|
+
A seventh is a gap rather than an error: §7 P5's jitter mechanism (`γ` decaying
|
|
48
|
+
warm-started duals) only reaches hard rows, because a soft row has no multiplier
|
|
49
|
+
to decay. §6.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 2. The constants
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
α = 0.25 γ = 1 β = 1e5 (unexercised) k_min = k_max = 8·(m/h²)
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
`cloth_solver_constants.js` carries them and says why. The short version:
|
|
60
|
+
|
|
61
|
+
- **α and γ act only through their product.** At a fixed `α·γ` the answer does
|
|
62
|
+
not move at all between `γ = 0.3` and `γ = 1`. `γ` sits at 1 because its
|
|
63
|
+
second job — decaying the penalty — has nothing to do while the band is a
|
|
64
|
+
single point.
|
|
65
|
+
- **`α·γ ≥ 0.5` diverges.** 0.25 is a factor of two clear.
|
|
66
|
+
- **`k_min = k_max` disables the ramp**, which measured as good as any ramped
|
|
67
|
+
alternative for M0's persistent rows and removes a scale-dependence that a
|
|
68
|
+
live ramp reintroduces. The ramp exists for *transient* rows — a contact that
|
|
69
|
+
should arrive soft rather than shock the mesh on its first frame — and M0 has
|
|
70
|
+
none, so **β cannot be chosen from M0 data and M2 must measure it.**
|
|
71
|
+
|
|
72
|
+
### α·γ against the penalty ceiling — 20-link hard chain
|
|
73
|
+
|
|
74
|
+
Cells are `worst |C|/L₀` / `kinetic energy after 400 steps, J`. The kinetic
|
|
75
|
+
column is the one to read: past `α·γ = 0.3` the chain stops settling long before
|
|
76
|
+
it stops being finite.
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
k_max/(m/h²) α·γ=0 α·γ=0.1 α·γ=0.2 α·γ=0.25 α·γ=0.3 α·γ=0.4 α·γ=0.5 α·γ=0.6
|
|
80
|
+
1 3.6e-1/3e-7 3.1e-1/2e-7 2.8e-1/1e-7 2.6e-1/4e-7 2.4e-1/1e-6 2.2e-1/3e-6 1.7e-1/2e-3 8.5e-1/5e-3
|
|
81
|
+
2 1.9e-1/1e-10 1.7e-1/2e-11 1.5e-1/3e-10 1.4e-1/2e-9 1.3e-1/5e-11 1.0e-1/1e-7 9.7e-2/3e-3 diverged
|
|
82
|
+
4 1.0e-1/1e-13 9.1e-2/1e-13 7.9e-2/1e-12 7.3e-2/2e-12 6.7e-2/3e-12 5.7e-2/3e-7 2.8e-1/3e-2 diverged
|
|
83
|
+
8 5.6e-2/2e-13 4.9e-2/3e-14 4.1e-2/3e-13 3.8e-2/1e-11 3.5e-2/2e-9 6.6e-2/3e-4 diverged diverged
|
|
84
|
+
16 4.9e-2/1e-5 2.5e-2/1e-10 2.1e-2/1e-6 4.1e-2/7e-5 3.3e-2/2e-4 2.7e-2/1e-3 diverged diverged
|
|
85
|
+
32 5.5e-2/5e-5 4.9e-2/5e-5 4.4e-2/4e-5 4.1e-2/4e-5 3.9e-2/4e-5 7.6e-2/1e-3 diverged diverged
|
|
86
|
+
128 7.0e-2/3e-4 6.4e-2/2e-4 5.9e-2/2e-4 5.7e-2/2e-4 5.5e-2/2e-4 5.0e-2/2e-4 diverged diverged
|
|
87
|
+
1024 1.3e-1/2e-3 7.3e-2/3e-4 7.6e-2/5e-4 7.3e-2/4e-4 7.1e-2/4e-4 6.6e-2/4e-4 diverged diverged
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## 3. Soft rows must not carry a multiplier
|
|
93
|
+
|
|
94
|
+
The first thing the sweep established, and it reshaped everything after it.
|
|
95
|
+
|
|
96
|
+
A row whose material stiffness is finite is representable as a plain penalty,
|
|
97
|
+
and **a plain penalty at the material stiffness is the material law**. There is
|
|
98
|
+
nothing for a multiplier to add, and adding one anyway is not a small error:
|
|
99
|
+
`λ ← λ + k·C` is an augmented Lagrangian on the equality `C = 0`, so it drives
|
|
100
|
+
`C` to zero whatever `k` is. A 0.05 kg mass on a 1 kN/m spring, whose analytic
|
|
101
|
+
extension is 0.49 mm, settled at **4.8 µm — a hundred times stiffer than it was
|
|
102
|
+
authored as.**
|
|
103
|
+
|
|
104
|
+
The fix is that a row is **hard** exactly when its stiffness is `Infinity`,
|
|
105
|
+
which makes §6's table literal rather than introducing a threshold. A hard row
|
|
106
|
+
gets the augmented Lagrangian; a soft row is a pure penalty and carries no
|
|
107
|
+
multiplier. Afterwards a soft row reads exactly Hooke, and reads it whatever the
|
|
108
|
+
five constants are doing:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
chosen extension/Hooke = 1.0000
|
|
112
|
+
α=0 extension/Hooke = 1.0000
|
|
113
|
+
α=1 γ=1 extension/Hooke = 1.0000
|
|
114
|
+
β=0 extension/Hooke = 1.0000
|
|
115
|
+
band ×1024 extension/Hooke = 1.0000
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
That insensitivity is what makes α, β, γ and the band honest as *global* solver
|
|
119
|
+
internals rather than things an author would eventually have to reach for.
|
|
120
|
+
|
|
121
|
+
### What the multiplier actually buys
|
|
122
|
+
|
|
123
|
+
Not a smaller residual. Measured across chain depths of 5 to 40 and stiffnesses
|
|
124
|
+
from 1e2 to 1e9 at the same budget, a hard row and a stiff penalty give
|
|
125
|
+
comparable `|C|/L₀`, and which wins depends on the phase of the oscillation the
|
|
126
|
+
snapshot catches. What it buys is **settling**: a hard 20-link chain comes to
|
|
127
|
+
rest at 1e-14 J where the same chain on a penalty of any stiffness sits in a
|
|
128
|
+
limit cycle at 1e-4 J. Ten orders of magnitude, and it is §7 P5 rather than P2.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 4. The penalty band is a ratio, not a stiffness
|
|
133
|
+
|
|
134
|
+
Same 20-link hard chain, `α·γ = 0.25`, with `k_max` held at a fixed **multiple**
|
|
135
|
+
of the row's own `m/h²` while the particle mass moves across five decades. The
|
|
136
|
+
residual column repeats exactly; against a fixed stiffness in N/m it does not.
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
mass (kg) m/h² ×0.3 ×1 ×2 ×4 ×8 ×16 ×64 ×256
|
|
140
|
+
5e-6 7.2e-2 7.4e-1/4e-6 2.6e-1/4e-9 1.4e-1/2e-11 7.3e-2/2e-14 3.8e-2/1e-13 4.1e-2/7e-7 4.8e-2/1e-6 6.5e-2/3e-6
|
|
141
|
+
5e-4 7.2e+0 7.4e-1/4e-4 2.6e-1/4e-7 1.4e-1/2e-9 7.3e-2/2e-12 3.8e-2/1e-11 4.1e-2/7e-5 4.8e-2/1e-4 6.5e-2/3e-4
|
|
142
|
+
5e-2 7.2e+2 7.4e-1/4e-2 2.6e-1/4e-5 1.4e-1/2e-7 7.3e-2/2e-10 3.8e-2/1e-9 4.1e-2/7e-3 4.8e-2/1e-2 6.5e-2/3e-2
|
|
143
|
+
5e+0 7.2e+4 7.4e-1/4e+0 2.6e-1/4e-3 1.4e-1/2e-5 7.3e-2/2e-8 3.8e-2/2e-7 4.1e-2/7e-1 4.8e-2/1e+0 6.5e-2/3e+0
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
§5.2's own prose already names `k_max/(m/h²)` as the quantity that matters. It
|
|
147
|
+
stopped one step short of making the ratio the parameter.
|
|
148
|
+
|
|
149
|
+
The optimum is ×8: below it the row is too soft to converge, above it the chain
|
|
150
|
+
stops settling (the kinetic column climbs by four orders of magnitude between
|
|
151
|
+
×8 and ×16). The row's scale is its **effective** inertia along the constraint,
|
|
152
|
+
`1/((wᵢ + wⱼ)·h²)`, so a row with one pinned end sees the free particle's own
|
|
153
|
+
`m/h²` and an interior row sees half of it.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 5. The vertex update
|
|
158
|
+
|
|
159
|
+
### 5.1 The geometric-stiffness term, half of it
|
|
160
|
+
|
|
161
|
+
For a distance row `∂²C/∂x² = (I − g gᵀ)/L`, which is positive semidefinite
|
|
162
|
+
exactly when the row is in tension. Dropping the whole term — §5.2's
|
|
163
|
+
instruction — leaves `H` underestimating the curvature perpendicular to the row
|
|
164
|
+
by `fc/L`, so the update overshoots sideways once that passes the mass term.
|
|
165
|
+
One free particle between two anchors, stepping the tension up:
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
m/h² fc/L ratio ΔE/E with the term dropped with its PSD half kept
|
|
169
|
+
1.44e+2 1.06e+2 7.33e-1 −65.6% −62.9%
|
|
170
|
+
1.44e+2 5.53e+2 3.84e+0 +21.9% −30.1%
|
|
171
|
+
1.44e+2 5.53e+4 3.84e+2 +80.8% −33.9%
|
|
172
|
+
1.44e+2 1.45e+6 1.01e+4 +718.0% −22.6%
|
|
173
|
+
1.44e+2 9.94e+6 6.90e+4 +4140.0% −19.1%
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
The crossover is exactly where the theory puts it, at `fc/L ≈ m/h²`. Keeping the
|
|
177
|
+
PSD half costs nothing structurally: every term in `H` is still positive
|
|
178
|
+
semidefinite on top of a positive definite mass term, so the SPD-by-construction
|
|
179
|
+
argument is intact and there is still no threshold. The compression half stays
|
|
180
|
+
dropped, and dropping it there is conservative — it makes the step shorter than
|
|
181
|
+
Newton, not longer.
|
|
182
|
+
|
|
183
|
+
The term is added whether or not the row is at a clamp. A saturated row applies
|
|
184
|
+
a force of constant *magnitude*, but that force still swings as the row rotates,
|
|
185
|
+
so its geometric curvature is real even though its penalty curvature is gone.
|
|
186
|
+
|
|
187
|
+
### 5.2 LDLᵀ, not a cofactor inverse
|
|
188
|
+
|
|
189
|
+
The two agree in exact arithmetic. In `Float64` they do not. A vertex carrying
|
|
190
|
+
one very stiff row against a small mass term assembles
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
H = [[1.7099e+8, −2.1651e+8, 1.2729e+8],
|
|
194
|
+
[ , 2.7415e+8, −1.6118e+8],
|
|
195
|
+
[ , , 9.4759e+7]]
|
|
196
|
+
|
|
197
|
+
eigenvalues 1.198e−1, 1.198e−1, 5.399e+8 (all positive; condition 4.5e9)
|
|
198
|
+
true determinant 7.752e+6
|
|
199
|
+
cofactor determinant −4.828e+8 ← wrong sign
|
|
200
|
+
LDLᵀ pivots 1.710e+8, 3.120e−1, 1.453e−1 (product 7.752e+6, exact)
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
The determinant is a sum of triple products that has to cancel by the condition
|
|
204
|
+
number squared; the factorisation never forms them. The dev-build assertion
|
|
205
|
+
checks the three pivots, which *is* positive definiteness rather than a proxy
|
|
206
|
+
for it, and it held across every update in the fuzz.
|
|
207
|
+
|
|
208
|
+
### 5.3 A descent direction is not a monotone step
|
|
209
|
+
|
|
210
|
+
`Δ = H⁻¹f` with `H` positive definite gives `f·Δ = fᵀH⁻¹f > 0`. That guarantees
|
|
211
|
+
the energy falls for a *small enough* step. The update takes a full step of 1,
|
|
212
|
+
and where the quadratic model stops resembling the energy, a full step climbs.
|
|
213
|
+
Walking one such step:
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
t E(x₀ + t·Δ) ΔE
|
|
217
|
+
0 −1.9122412072e+7 0
|
|
218
|
+
1e−9 −1.9122412098e+7 −2.6e−2 falling
|
|
219
|
+
1e−7 −1.9122414636e+7 −2.6e+0 falling
|
|
220
|
+
1e−5 −1.9122668457e+7 −2.6e+2 falling
|
|
221
|
+
1e−3 −1.9133645206e+7 −1.1e+4 falling — this is the minimum
|
|
222
|
+
1e−2 −1.8901856618e+7 +2.2e+5 past it
|
|
223
|
+
0.5 −3.1478025715e+6 +1.6e+7
|
|
224
|
+
1 +1.9273328443e+7 +3.8e+7 the step the solver takes
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
The direction is right; the length is a thousand times too long. So the step is
|
|
228
|
+
capped at the **shortest row incident on the particle** — the distance over
|
|
229
|
+
which "the direction to a neighbour" means anything. That radius is the mesh's
|
|
230
|
+
own geometry rather than a tuned constant, it is already in hand from the
|
|
231
|
+
accumulation, and for cloth in any ordinary motion it never binds.
|
|
232
|
+
|
|
233
|
+
With all three corrections in place:
|
|
234
|
+
|
|
235
|
+
| | fraction of updates that climb | worst, relative to the local energy scale |
|
|
236
|
+
|---|---|---|
|
|
237
|
+
| realistic cape, hard rows | 0.0040% | 8.6e−2 |
|
|
238
|
+
| realistic cape, soft rows | 0.0041% | 1.5e−1 |
|
|
239
|
+
| absurd fuzz, 3.0M updates | 1.52% | 1.00 |
|
|
240
|
+
|
|
241
|
+
Those are the thresholds the standing gate in `cloth_solve_vertex.spec.js` holds
|
|
242
|
+
the solver to.
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## 6. Settling, and the gap in P5
|
|
247
|
+
|
|
248
|
+
At the chosen constants a **hard** chain settles hard: a 20-link chain reaches
|
|
249
|
+
1e-11 J and an 80-link one 1e-9 J, and the residual falls monotonically with the
|
|
250
|
+
iteration budget with nothing diverging at any depth.
|
|
251
|
+
|
|
252
|
+
```
|
|
253
|
+
iterations n=1 n=2 n=5 n=10 n=20 n=40 n=80
|
|
254
|
+
1 3.2e-3/0e+0 6.4e-3/1e-16 4.6e-2/3e-5 9.5e-2/6e-7 1.3e-1/2e-3 1.2e+0/2e-2 9.6e-1/3e-1
|
|
255
|
+
2 3.2e-4/0e+0 4.2e-3/0e+0 1.4e-2/2e-16 3.4e-2/1e-6 1.4e-1/6e-4 1.2e-1/7e-3 8.9e-1/1e-2
|
|
256
|
+
4 3.9e-6/0e+0 4.1e-4/0e+0 6.8e-3/1e-16 1.7e-2/2e-15 3.8e-2/1e-11 9.0e-2/3e-5 1.4e-1/7e-3
|
|
257
|
+
8 0.0e+0/0e+0 2.9e-5/1e-17 1.7e-3/1e-16 7.2e-3/1e-15 1.7e-2/9e-14 3.8e-2/8e-13 8.0e-2/1e-4
|
|
258
|
+
16 0.0e+0/0e+0 2.8e-7/0e+0 4.1e-4/5e-16 2.1e-3/1e-15 6.9e-3/3e-14 1.6e-2/2e-13 3.6e-2/9e-10
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
A **soft** row above a certain stiffness does not settle at all, and the reason
|
|
262
|
+
is worse than "nothing is damping it".
|
|
263
|
+
|
|
264
|
+
The threshold is the same ratio §4 turns up: **`k/(m/h²)`**. Below about 8 the
|
|
265
|
+
step is dissipative and the cloth comes to rest; above it the cloth sustains a
|
|
266
|
+
limit cycle for as long as you run it. Measured on a 16×20 sheet, 0.3 kg, hung
|
|
267
|
+
from the top edge at 60 Hz × 2 substeps × 4 iterations, over 1,500 steps:
|
|
268
|
+
|
|
269
|
+
```
|
|
270
|
+
row k/(m/h²) final kinetic energy
|
|
271
|
+
hard (AL, k pinned at ×8) 8 1.9e-12 J settles
|
|
272
|
+
soft, 1e2 N/m 7.4 7.4e-09 J settles
|
|
273
|
+
soft, 1e3 N/m 74 1.9e-02 J does not
|
|
274
|
+
soft, 1e4 N/m 740 7.4e-03 J does not
|
|
275
|
+
soft, 1e5 N/m 7400 2.9e-02 J does not
|
|
276
|
+
soft, 1e4 at 16 iterations 740 3.3e-03 J does not
|
|
277
|
+
soft, 1e4 at 8 substeps 740 1.4e-03 J does not
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
More iterations and more substeps shrink it; neither removes it.
|
|
281
|
+
|
|
282
|
+
And the step is **adding energy**, not merely failing to remove it. Tracking the
|
|
283
|
+
full mechanical energy — kinetic plus gravitational plus elastic — from the rest
|
|
284
|
+
configuration:
|
|
285
|
+
|
|
286
|
+
```
|
|
287
|
+
soft 1e2 (ratio 7) −0.016 J, and flat from step 300 onwards dissipative
|
|
288
|
+
soft 1e4 (ratio 740) +6.8 J, wandering between +1 and +7 J creating it
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
For scale, that sheet's entire gravitational potential over its own length is
|
|
292
|
+
about 1.2 J, so at ratio 740 the solve manufactures several times the whole
|
|
293
|
+
system's energy budget and then holds it there. It stays bounded — the SPD
|
|
294
|
+
Hessian and the trust region cap every individual step — but bounded is not
|
|
295
|
+
rest.
|
|
296
|
+
|
|
297
|
+
Two consequences.
|
|
298
|
+
|
|
299
|
+
**§7 P5's mechanism covers hard rows only.** `γ` decays a multiplier and a soft
|
|
300
|
+
row has none, so no value of any solver constant reaches this. What does reach
|
|
301
|
+
it is `ClothDynamics#damping`, which arrives with the component in M1 — which
|
|
302
|
+
means damping is load-bearing for P5 rather than a taste control, and M1's spec
|
|
303
|
+
has to gate on a soft cloth actually settling.
|
|
304
|
+
|
|
305
|
+
**§6's assignment of stretch to a soft material stiffness does not survive.**
|
|
306
|
+
Real fabric wants a stretch stiffness far above `8·(m/h²)` — for a half-gram
|
|
307
|
+
particle at 60 Hz × 2 substeps that boundary is around 60 N/m, which is a rubber
|
|
308
|
+
band, not a fabric. So a cloth's stretch rows have to be **hard**, and the
|
|
309
|
+
augmented Lagrangian is not an optional refinement over a stiff penalty: it is
|
|
310
|
+
the only formulation of that row that rests. That is the same conclusion §3
|
|
311
|
+
reaches from the other direction, and it is why the playground defaults to hard
|
|
312
|
+
rows.
|
|
313
|
+
|
|
314
|
+
### Iteration-count insensitivity
|
|
315
|
+
|
|
316
|
+
§5.1 claims that adding iterations converges towards the *same* answer rather
|
|
317
|
+
than changing which answer it is. On the cape (20×30 at 2 cm, inextensible, hung
|
|
318
|
+
from its top edge and dropped through 90°), the hem across the budget:
|
|
319
|
+
|
|
320
|
+
```
|
|
321
|
+
iterations= 1 hem=−0.6450 m residual=7.2e-1
|
|
322
|
+
iterations= 2 hem=−0.6201 m residual=2.0e-1
|
|
323
|
+
iterations= 4 hem=−0.5993 m residual=7.5e-2
|
|
324
|
+
iterations= 8 hem=−0.5466 m residual=7.2e-2
|
|
325
|
+
iterations=16 hem=−0.5626 m residual=1.4e-2
|
|
326
|
+
iterations=32 hem=−0.5459 m residual=8.0e-3
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
The sheet is 0.58 m long, so the answer moves 18% of its own length between 1
|
|
330
|
+
iteration and 32, and the residual moves by two orders of magnitude. The claim
|
|
331
|
+
holds in the sense that matters — the answer converges rather than changing
|
|
332
|
+
character, and one iteration is stable rather than broken — but "insensitive" is
|
|
333
|
+
too strong for a mesh 30 rows deep at this budget. §7 P2's tether row is what
|
|
334
|
+
closes that gap, and it lands in M1.
|
|
335
|
+
|
|
336
|
+
### Hostile regimes
|
|
337
|
+
|
|
338
|
+
All eight survive at the chosen constants.
|
|
339
|
+
|
|
340
|
+
```
|
|
341
|
+
stiff + 5 fps ok 1 kg particles on 1e8 N/m rows, 1 substep, 1 iteration
|
|
342
|
+
light + 240 fps ok 10 mg particles, 4 substeps, 8 iterations
|
|
343
|
+
10 m spacing ok a 6×6 sheet with 10 m between particles at 15 fps
|
|
344
|
+
a thousand g ok gravity at −9810 m/s²
|
|
345
|
+
soft as water ok 1e−2 N/m rows (sags 123 m, which is correct)
|
|
346
|
+
zero g, 100 m/s ok no gravity, particles thrown at 100 m/s
|
|
347
|
+
inextensible ok stiffness Infinity
|
|
348
|
+
inextensible cape ok 600 particles, stiffness Infinity
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## 7. The performance budget
|
|
354
|
+
|
|
355
|
+
§17 budgets **under 2 ms per frame per character**, for about 1,000 particles at
|
|
356
|
+
2 substeps × 4 iterations, and says the figure is an estimate to be replaced by
|
|
357
|
+
a measurement. Replaced:
|
|
358
|
+
|
|
359
|
+
```
|
|
360
|
+
# 1024 particles (32×32 patch at 2 cm, 0.5 kg), 2 substeps × 4 iterations
|
|
361
|
+
# 2945 stretch rows, 2821 bend rows, 4 colours, 370.4 KiB of state
|
|
362
|
+
# 8192 vertex updates per frame, 16.8 row incidences per particle
|
|
363
|
+
# Node v24.15.0 on win32/x64, 1200 warm-up frames then 1500 measured, 4 rounds
|
|
364
|
+
|
|
365
|
+
round minima 3.504 3.506 3.644 3.484 best 3.48 ms, spread ±5%
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
**3.48 ms against a 2.000 ms budget — over by 1.74×**, and 3.55 ms when the
|
|
369
|
+
benchmark runs the same configuration alongside its four variants. The minimum is the
|
|
370
|
+
headline because it is what varies least between runs; a cloth's median moves by
|
|
371
|
+
a factor of two depending on whether it is still swinging, and the mean and p95
|
|
372
|
+
move with whatever else the machine is doing.
|
|
373
|
+
|
|
374
|
+
### What the frame is made of
|
|
375
|
+
|
|
376
|
+
Deleting the workload piece by piece, all five variants in one run so the
|
|
377
|
+
comparison is internally consistent:
|
|
378
|
+
|
|
379
|
+
```
|
|
380
|
+
variant MIN ms median share of the frame
|
|
381
|
+
everything 3.552 5.023
|
|
382
|
+
no bend rows 2.688 3.267 bend rows 0.864 ms 24.3%
|
|
383
|
+
no stretch rows 1.133 2.055 stretch rows 2.419 ms 68.1%
|
|
384
|
+
no rows at all 0.253 0.490 everything else 7.1%
|
|
385
|
+
shuffled within each colour 3.563 4.771 locality +0.3%
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
The rows are the frame; predict, warm start, the dual updates and integrate
|
|
389
|
+
together are 7% of it, and the cost is close to linear in both particles and
|
|
390
|
+
sweeps. The split between the two row kinds moves by a few points between runs
|
|
391
|
+
— bend read 18% in one run and 24% in another — so treat it as "stretch is most
|
|
392
|
+
of it, bend is most of the rest".
|
|
393
|
+
|
|
394
|
+
Two things this table does **not** license, and an earlier draft of this
|
|
395
|
+
document claimed both.
|
|
396
|
+
|
|
397
|
+
It does not say a stretch row costs four times what a bend row costs *per
|
|
398
|
+
visit*. The three variants are in different physical states — a cloth with no
|
|
399
|
+
stretch rows is in free fall rather than draping — so the split measures what
|
|
400
|
+
each row kind *causes* in a running step, not the arithmetic in its accumulate.
|
|
401
|
+
|
|
402
|
+
And it does not license attributing the stretch share to any particular part of
|
|
403
|
+
that accumulate. See below.
|
|
404
|
+
|
|
405
|
+
### A warning, because M2, M4 and M5 are told to re-measure
|
|
406
|
+
|
|
407
|
+
**An isolated loop over one accumulate measures the wrong workload.** Without
|
|
408
|
+
`predict` and `integrate` around it, the solve converges after a few passes and
|
|
409
|
+
the positions stop changing; from then on the loop reads a static array with
|
|
410
|
+
perfectly predictable branches, and every number it produces is of a cloth that
|
|
411
|
+
has stopped moving.
|
|
412
|
+
|
|
413
|
+
The size of the error, measured both ways on the same mesh:
|
|
414
|
+
|
|
415
|
+
```
|
|
416
|
+
isolated loop by deletion, in the running step
|
|
417
|
+
bend accumulate 0.72 ms 0.70 ms agree
|
|
418
|
+
stretch accumulate 0.47 ms 2.64 ms disagree, 5.6×
|
|
419
|
+
both 1.19 ms 3.34 ms
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
Bend agrees; stretch does not, and the gap is most of the frame. The dev-build
|
|
423
|
+
assertion machinery is not the explanation — the non-finite tripwire and the
|
|
424
|
+
pivot assertion's message together are 0.118 ms, 3.4% of the step. Nor is it
|
|
425
|
+
`cloth_solve_vertex`'s own arithmetic: the eight colour sweeps called exactly as
|
|
426
|
+
`cloth_step` calls them come to 1.88 ms, and driven on their own — with no
|
|
427
|
+
predict to disturb the cloth — they too are measuring a converged mesh.
|
|
428
|
+
|
|
429
|
+
The honest statement is that **only the end-to-end figures here are
|
|
430
|
+
trustworthy**, and the per-row breakdown an earlier draft gave has been removed
|
|
431
|
+
rather than reconciled. Whoever re-measures at M2 should keep the whole step
|
|
432
|
+
running and vary one thing at a time.
|
|
433
|
+
|
|
434
|
+
### Gathering neighbours is not what dominates
|
|
435
|
+
|
|
436
|
+
§17 predicted it would. The controlled test is to **move every particle to a
|
|
437
|
+
different slot inside its own colour range**. The colouring is untouched — a
|
|
438
|
+
particle's colour *is* which range it sits in, and every particle stays in its
|
|
439
|
+
own — so the sweep does the same work in the same order over the same rows with
|
|
440
|
+
the same branches, and the only thing that moves is the address each particle
|
|
441
|
+
lives at.
|
|
442
|
+
|
|
443
|
+
The control is exact, and checkably so: the reference cloth and the shuffled one
|
|
444
|
+
produce **bit-identical** trajectories, agreeing on the hem position to six
|
|
445
|
+
decimals and on kinetic energy to five significant figures after 200 steps.
|
|
446
|
+
|
|
447
|
+
```
|
|
448
|
+
1024 particles, 370 KiB of state +0.3%
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
Destroying within-colour locality entirely costs nothing measurable at the size
|
|
452
|
+
§17 budgets for — the whole state fits in L2 — so **§17's "gathering neighbour
|
|
453
|
+
positions is what will actually dominate" is wrong**, and there is no
|
|
454
|
+
memory-layout optimisation to win here. Whether that survives at four times the
|
|
455
|
+
size is *not* measured: a cruder probe suggested around 11% at 4,096 particles,
|
|
456
|
+
but that probe relabelled the source vertices, which also changed the greedy
|
|
457
|
+
colouring from four colours to ten, so it is not quotable.
|
|
458
|
+
|
|
459
|
+
Two earlier drafts got this wrong before this one got it right. The first used a
|
|
460
|
+
variant labelled "mesh order, not colour order" that did nothing of the kind —
|
|
461
|
+
it left the particles in colour-permuted storage and merely collapsed the colour
|
|
462
|
+
loop. The second relabelled the source numbering, which moves the particles but
|
|
463
|
+
changes the colouring with them. Only shuffling *within* a colour isolates the
|
|
464
|
+
one variable, and it was worth three attempts because this is the number that
|
|
465
|
+
contradicts the plan.
|
|
466
|
+
|
|
467
|
+
### Scaling, and what fits
|
|
468
|
+
|
|
469
|
+
Four rounds each, so the spread is the figure's real precision:
|
|
470
|
+
|
|
471
|
+
```
|
|
472
|
+
config round minima best spread
|
|
473
|
+
1024 @ 2×4 (the §17 workload) 3.504 3.506 3.644 3.484 3.48 ±5%
|
|
474
|
+
1024 @ 2×2 (half the iterations) 1.700 1.713 1.695 1.716 1.69 ±1% inside
|
|
475
|
+
1024 @ 1×4 (half the substeps) 1.683 1.734 1.765 1.703 1.68 ±5% inside
|
|
476
|
+
484 @ 2×4 (half the particles) 1.543 1.586 1.595 1.605 1.54 ±4% inside
|
|
477
|
+
256 @ 2×4 0.792 0.804 0.791 0.785 0.79 ±2% inside
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
§18's levers, priced:
|
|
481
|
+
|
|
482
|
+
| Lever | Result |
|
|
483
|
+
|---|---|
|
|
484
|
+
| Fewer iterations — "safe, the solver is stable at one" | 1,024 particles at 2×2: **1.69 ms**, comfortably inside |
|
|
485
|
+
| Fewer particles in the proxy | ~500 particles at the full 2×4: **1.54 ms** |
|
|
486
|
+
| Fewer substeps | 1,024 at 1×4: **1.68 ms** |
|
|
487
|
+
| The barycentric binding fallback (§11.2) | not needed to reach the budget |
|
|
488
|
+
|
|
489
|
+
Any one lever is enough on its own, and they compose. What the budget is *not*
|
|
490
|
+
reachable at is 1,000 particles at 2×4, which is the figure §17 wrote down.
|
|
491
|
+
|
|
492
|
+
**Note what the worker does not do.** §12 moves this off the main thread; it does
|
|
493
|
+
not make it cheaper. "2 ms on the worker" with several characters in flight is a
|
|
494
|
+
scheduling question this measurement does not answer.
|
|
495
|
+
|
|
496
|
+
## 8. Topology note
|
|
497
|
+
|
|
498
|
+
The benchmark's 32×32 patch carries **16.8 row incidences per particle** against
|
|
499
|
+
§17's "about a dozen". That is the honest number for a triangulated sheet with a
|
|
500
|
+
stretch row per edge — including the quad diagonals — and a quadratic bend row
|
|
501
|
+
per interior edge, and it makes this measurement about 40% conservative against
|
|
502
|
+
the workload §17 imagined. A proxy that dropped the diagonals, or used a
|
|
503
|
+
quad-dominant mesh, would carry fewer.
|
|
504
|
+
|
|
505
|
+
---
|
|
506
|
+
|
|
507
|
+
# Cloth — M1 measurements
|
|
508
|
+
|
|
509
|
+
> Written 2026-09-10, against the M1 implementation in `ecs/`. Everything above
|
|
510
|
+
> this line is M0's and unchanged.
|
|
511
|
+
>
|
|
512
|
+
> Two scripts, both runnable directly under node — the M0 note applies unchanged,
|
|
513
|
+
> and for the same reason:
|
|
514
|
+
>
|
|
515
|
+
> ```
|
|
516
|
+
> node src/engine/physics/cloth/ecs/__fixtures__/cloth_m1_measure.mjs
|
|
517
|
+
> node src/engine/physics/cloth/ecs/__fixtures__/cloth_library_bench.mjs
|
|
518
|
+
> ```
|
|
519
|
+
>
|
|
520
|
+
> And a second playground page, `playground/rig.html`, which is the entity
|
|
521
|
+
> subtree rather than the solver: a real `EntityManager`, real entities, and
|
|
522
|
+
> `ClothSystem` walking and writing back.
|
|
523
|
+
|
|
524
|
+
---
|
|
525
|
+
|
|
526
|
+
## 9. What M1 proved wrong in PLAN.md
|
|
527
|
+
|
|
528
|
+
Six things, and the first three are sign and scale errors in §6 and §7 that the
|
|
529
|
+
implementation could not have been written around.
|
|
530
|
+
|
|
531
|
+
| # | The design said | The measurement said |
|
|
532
|
+
|---|---|---|
|
|
533
|
+
| 0 | §6 — slack, tether and strain-limit rows clamp to `(−∞, 0]` | Under the solver's own `f -= fc·g` that is the force which pushes a distance row **apart**. A row bounding a distance from *above* needs `[0, +∞)`, and with the table's clamp it never binds at all. §10 |
|
|
534
|
+
| 1 | §3.4 — the leash radius is `slack · d_geo,i` | That makes `slack = 1` a real constraint: a rope hanging straight down cannot swing through 90°, because its tip would move `√2·d_geo`. `2·d_geo` is *provably* inactive given the tether, so the map is `2·slack·d_geo`. §10 |
|
|
535
|
+
| 2 | §7 P1 — the velocity clamp is derived from `thickness` and `h` | `thickness` is a contact radius, so a clamp built from it is a **tunnelling** bound, and a tunnelling bound sits below ordinary cloth speeds: silk at 4 mm gives 0.24 m/s against a measured 29 m/s. The scale that works is the solver's own correction authority. §13 |
|
|
536
|
+
| 3 | §11.1 — "bend rows along each chain" | A chain has no diamond to build a quadratic hinge stencil on. A **skip row** — an ordinary stretch row to the grandparent — costs no new row kind and holds a curved rest shape the quadratic stencil explicitly cannot. §11 |
|
|
537
|
+
| 4 | §17 — the levers each close the 2 ms budget on their own | M1's rows changed the arithmetic. 1,024 particles at 2×4 is **4.61 ms**, not M0's 3.41, and **no single lever reaches 2 ms**. Every garment entry spends two. §14 |
|
|
538
|
+
| 5 | §6 — a strain-limit row governs how far the fabric may extend | It removes about a third of the peak over-stretch at every budget and **never reaches its own allowance** — at `stretch = 1` it asks for 0.1% and delivers 5.9% at 1×1. `ClothDynamics#stretch` is the weakest field in the parameter set. §11 |
|
|
539
|
+
| 6 | §11.1 — the write-back writes `Transform64` | It has to write the **local** `TransformAttachment#transform` too. Writing only the world one leaves the pose one announcement away from being replaced by the authored one, which makes where cloth runs a correctness question; writing both makes a recomposition reproduce it to 1.7e-15 m. §15 |
|
|
540
|
+
|
|
541
|
+
And one thing §4.1 flagged as possibly impossible, which turned out to be
|
|
542
|
+
exactly that: **neither of the engine's two ordering mechanisms can place cloth
|
|
543
|
+
after a poser**, for a structural reason rather than an arithmetic one. What M1
|
|
544
|
+
ships is not a third mechanism — it is a write-back that does not need one. §15.
|
|
545
|
+
|
|
546
|
+
---
|
|
547
|
+
|
|
548
|
+
## 10. The leash: tether, slack, and the bound that is not unconditional
|
|
549
|
+
|
|
550
|
+
### The tether is what makes a low budget viable
|
|
551
|
+
|
|
552
|
+
A 30-link × 3-strand rig at 5 cm, authored horizontally and dropped through
|
|
553
|
+
ninety degrees, `worst max(‖x − p_anchor‖ / d_geo)` over 600 steps:
|
|
554
|
+
|
|
555
|
+
```
|
|
556
|
+
budget tethered no tether
|
|
557
|
+
1x1 1.0155 1.4650
|
|
558
|
+
1x2 1.0039 1.1899
|
|
559
|
+
2x2 1.0020 1.0568
|
|
560
|
+
2x4 1.0012 1.0199
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
That is §7 P2's claim with a number on it. At one iteration per substep the
|
|
564
|
+
untethered rig reaches **half again its own length** — the rubber cape — and the
|
|
565
|
+
tethered one is inside 1.6%. Note the second column at 2×4: four times the
|
|
566
|
+
budget gets the untethered rig to 1.020, which is still worse than one iteration
|
|
567
|
+
*with* tethers. The tether is not a cheaper way to buy convergence; it answers a
|
|
568
|
+
question the per-edge rows cannot, because a per-edge force travels one hop per
|
|
569
|
+
iteration and a long-range row does not travel at all.
|
|
570
|
+
|
|
571
|
+
### The clamp direction, which §6 has backwards
|
|
572
|
+
|
|
573
|
+
The solver applies `f -= fc·g`, so a **positive** `fc` on a distance row pulls
|
|
574
|
+
its two ends together — that is what `cloth_stretch_row.js` means when it adds
|
|
575
|
+
geometric stiffness for a row "in tension" at `fc > 0`. A row that bounds a
|
|
576
|
+
distance from above must therefore admit positive force and no negative force.
|
|
577
|
+
|
|
578
|
+
§6's table gives Slack, Tether and Strain limit `f_min = −∞, f_max = 0`, which
|
|
579
|
+
admits only the force that pushes the two ends apart. Such a row does not bind
|
|
580
|
+
weakly; it never binds at all, and it would drive a particle *away* from its
|
|
581
|
+
leash centre. The table's collision and self-collision rows are consistent with
|
|
582
|
+
the correct rule once you notice that the collision row writes `C` with the
|
|
583
|
+
opposite sense, so the fix is one column in three rows plus the gloss above it:
|
|
584
|
+
"`[0, +∞)` is push-only, `(−∞, 0]` is pull-only" is only true relative to a
|
|
585
|
+
particular sign of `C`. The exact rule is **`[0, +∞)` admits only forces that
|
|
586
|
+
reduce `C`, and `(−∞, 0]` only forces that increase it.**
|
|
587
|
+
|
|
588
|
+
`cloth_leash_row.spec.js` demonstrates it directly: a particle five metres out
|
|
589
|
+
on a two-metre leash assembles `f = (−30, 0, 0)`, and under §6's clamp that is
|
|
590
|
+
clamped to zero.
|
|
591
|
+
|
|
592
|
+
### `slack = 1` was a constraint, and should not have been
|
|
593
|
+
|
|
594
|
+
§3.4 sets each particle's leash radius to `slack · d_geo,i`, and says `slack = 1`
|
|
595
|
+
means "a particle may be anywhere within its own reach of its animated
|
|
596
|
+
position". It does mean that, and that is a real bound: a rope hanging straight
|
|
597
|
+
down cannot swing through ninety degrees, because its tip has to move `√2·d_geo`
|
|
598
|
+
to get there and its leash is `d_geo`.
|
|
599
|
+
|
|
600
|
+
The radius at which the row is provably inert is `2·d_geo`, and the proof is two
|
|
601
|
+
lines. The tether already holds every particle within `d_geo` of the anchor; the
|
|
602
|
+
animated position it is leashed to is also within `d_geo` of the anchor, since a
|
|
603
|
+
chord is never longer than the arc it subtends; so by the triangle inequality the
|
|
604
|
+
two are never more than `2·d_geo` apart. `r_i = 2·slack·d_geo,i` therefore makes
|
|
605
|
+
`slack = 1` mean exactly "no leash", with no sentinel value and no
|
|
606
|
+
discontinuity — the row is simply not built, because a row that cannot bind is
|
|
607
|
+
not worth visiting.
|
|
608
|
+
|
|
609
|
+
### The bound is conditional on the solver's correction authority
|
|
610
|
+
|
|
611
|
+
The trust region caps each vertex update at the shortest row incident on the
|
|
612
|
+
particle (§5.3), so one fixed step can move a particle at most
|
|
613
|
+
`shortest_row · substeps · iterations`. Past that, a bound is not being violated
|
|
614
|
+
so much as not being given a chance to act. The same rig, kicked sideways:
|
|
615
|
+
|
|
616
|
+
```
|
|
617
|
+
budget kick correction authority worst final
|
|
618
|
+
1x1 2 m/s 3.0 m/s 1.043 1.0025
|
|
619
|
+
1x1 6 m/s 3.0 m/s 1.227 1.0025
|
|
620
|
+
1x1 16 m/s 3.0 m/s 6.867 1.0025
|
|
621
|
+
2x4 2 m/s 24.0 m/s 1.003 1.0000
|
|
622
|
+
2x4 6 m/s 24.0 m/s 1.001 1.0000
|
|
623
|
+
2x4 16 m/s 24.0 m/s 1.063 1.0000
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
A kick five times the authority reaches **6.9× the cloth's own reach**; the same
|
|
627
|
+
kick against eight times the authority reaches 1.06×. The excursion is transient
|
|
628
|
+
in every case — the final column is the reachable-set guarantee of §7 P4(c)
|
|
629
|
+
holding, error not accumulating — but "no particle is ever further from the
|
|
630
|
+
anchor than `d_geo`" is not true as stated, and §7 P2 should say what it is
|
|
631
|
+
conditional on.
|
|
632
|
+
|
|
633
|
+
This is also where M1's velocity clamp comes from. §13.
|
|
634
|
+
|
|
635
|
+
---
|
|
636
|
+
|
|
637
|
+
## 11. The strain limit, and what `stretch` is worth
|
|
638
|
+
|
|
639
|
+
A 24-link rope at 5 cm, authored horizontally and dropped, `worst max(link
|
|
640
|
+
length / rest length)` over 600 steps. "Allowance" is what
|
|
641
|
+
`cloth_strain_allowance(stretch)` asks for:
|
|
642
|
+
|
|
643
|
+
```
|
|
644
|
+
budget stretch allowance with the row without it
|
|
645
|
+
1x1 0.2 1.0829 1.0863 1.0922
|
|
646
|
+
1x1 0.5 1.0158 1.0631 1.0922
|
|
647
|
+
1x1 1.0 1.0010 1.0586 1.0922
|
|
648
|
+
2x2 0.2 1.0829 1.0351 1.0351
|
|
649
|
+
2x2 0.5 1.0158 1.0289 1.0351
|
|
650
|
+
2x2 1.0 1.0010 1.0216 1.0351
|
|
651
|
+
2x4 0.2 1.0829 1.0140 1.0140
|
|
652
|
+
2x4 0.5 1.0158 1.0140 1.0140
|
|
653
|
+
2x4 1.0 1.0010 1.0094 1.0140
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
Two readings, and the second is the important one.
|
|
657
|
+
|
|
658
|
+
**The row works**: it removes 34–38% of the peak over-stretch, consistently, at
|
|
659
|
+
every budget. On a chain that costs nothing measurable and it is worth having.
|
|
660
|
+
|
|
661
|
+
**And it does not do what §6 says it does.** At `stretch = 1` it asks for 0.1%
|
|
662
|
+
of strain and delivers 5.9% at 1×1 — a factor of fifty out. The reason is
|
|
663
|
+
structural rather than a tuning failure: a strain-limit row is a *second hard
|
|
664
|
+
row on the same edge with the same gradient*, so it competes for the same trust
|
|
665
|
+
region and the same penalty band as the fabric row it is backing up. It can add
|
|
666
|
+
force in a direction force is already being added in, and nothing more.
|
|
667
|
+
|
|
668
|
+
The consequence for the parameter set is that **`stretch` is a weak control over
|
|
669
|
+
most of its range**. Below about `stretch = 0.35` its allowance is looser than
|
|
670
|
+
what a hard row does unaided and the row is inert — see the 0.2 rows, where
|
|
671
|
+
adding it changes nothing at 2×2 and 2×4. Above it the row helps but cannot
|
|
672
|
+
reach what it was asked for. The library says so by which entries set
|
|
673
|
+
`ClothDynamicsFlags.StrainLimit`: the ones at 2×4, where the residual is already
|
|
674
|
+
around 1%, clear it; the ones at 2×2 and the chains keep it.
|
|
675
|
+
|
|
676
|
+
---
|
|
677
|
+
|
|
678
|
+
## 12. Settling, sleep, and the damping gate
|
|
679
|
+
|
|
680
|
+
### Every library fabric settles and sleeps
|
|
681
|
+
|
|
682
|
+
A 12-link chain at 8 cm, set swinging at 3 m/s, run until the sleep test fires
|
|
683
|
+
(30 consecutive steps with no particle faster than `1e-3 · reach` per second):
|
|
684
|
+
|
|
685
|
+
```
|
|
686
|
+
SILK 770 steps ROPE 501
|
|
687
|
+
COTTON 438 CHAIN 285
|
|
688
|
+
DENIM 220 HAIR 295
|
|
689
|
+
LEATHER 238
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
Twelve seconds at the slowest, and the order is the damping order, which is what
|
|
693
|
+
it should be. Sleep stops the step **and the write-back**, which is what makes
|
|
694
|
+
§7 P5's "bit-identical across the following 300 steps" a fact rather than a
|
|
695
|
+
hope: a pose that is not rewritten cannot drift, and one that is rewritten from
|
|
696
|
+
unchanged inputs is only probably identical.
|
|
697
|
+
|
|
698
|
+
### Damping is load-bearing, and here is the size of it
|
|
699
|
+
|
|
700
|
+
`MEASUREMENTS.md` §6 measured that a **soft** row above about `8·(m/h²)` makes
|
|
701
|
+
the step add energy, and that no solver constant reaches it because `α·γ` decays
|
|
702
|
+
a multiplier and a soft row has none. M1's mapping never produces such a cloth —
|
|
703
|
+
`stretch` maps to `Infinity` precisely because of that measurement — so the row
|
|
704
|
+
stiffness is written in by hand to reproduce it. A 16-link rope at 5 cm with its
|
|
705
|
+
stretch rows forced to 1e5 N/m, a ratio of about 350 against the particle's
|
|
706
|
+
`m/h²` of 288, after 1,500 steps:
|
|
707
|
+
|
|
708
|
+
```
|
|
709
|
+
damping kinetic energy
|
|
710
|
+
0 2.90e-03 J the limit cycle
|
|
711
|
+
0.02 6.18e-05 J
|
|
712
|
+
0.05 2.39e-05 J
|
|
713
|
+
0.12 1.28e-06 J the library's own value
|
|
714
|
+
0.3 7.30e-11 J
|
|
715
|
+
1 1.82e-12 J
|
|
716
|
+
```
|
|
717
|
+
|
|
718
|
+
Three orders of magnitude between undamped and the library default, and seven at
|
|
719
|
+
the top of the range. Note what damping does *not* do: it does not stop the step
|
|
720
|
+
adding energy, it removes energy faster than the step adds it. The equilibrium
|
|
721
|
+
is bounded rather than zero, which is why the numbers keep falling all the way
|
|
722
|
+
to `damping = 1` instead of hitting a floor.
|
|
723
|
+
|
|
724
|
+
---
|
|
725
|
+
|
|
726
|
+
## 13. Teleport, locomotion, and where the velocity clamp comes from
|
|
727
|
+
|
|
728
|
+
### Teleport
|
|
729
|
+
|
|
730
|
+
A 16-link rope at 10 cm, swinging on an anchor that has been moving, then
|
|
731
|
+
teleported a kilometre:
|
|
732
|
+
|
|
733
|
+
```
|
|
734
|
+
mode teleports peak speed first-step local shift tip
|
|
735
|
+
Reset 1 0.000 m/s 1.4890 m (1000.000, −1.600)
|
|
736
|
+
Keep 1 5.582 m/s 0.0779 m (1000.003, −1.600)
|
|
737
|
+
```
|
|
738
|
+
|
|
739
|
+
`Reset` re-seeds at the animated pose with zero velocity and the stabilisation
|
|
740
|
+
window ramps the velocity limit back from nothing over 20 steps; the peak speed
|
|
741
|
+
of exactly zero is what a rope authored hanging straight down does when it is
|
|
742
|
+
put back exactly there. `Keep` carries the shape across: the first-step shift is
|
|
743
|
+
one step of ordinary motion, against a metre and a half for the reset, and the
|
|
744
|
+
peak of 5.6 m/s is the swing it was already carrying.
|
|
745
|
+
|
|
746
|
+
**`Keep` is free, and that is a property of the frame rather than a
|
|
747
|
+
coincidence.** MagicaCloth2's `Keep` applies the anchor delta rigidly to every
|
|
748
|
+
particle; in a frame anchored to the cloth's own entity the particles are
|
|
749
|
+
already anchor-relative, so "apply the delta" is doing nothing at all. The
|
|
750
|
+
implementation of `ClothFlags.TeleportKeep` is a `return`.
|
|
751
|
+
|
|
752
|
+
### Fast locomotion
|
|
753
|
+
|
|
754
|
+
20 links at 10 cm, the anchor running a square wave in velocity — sprint, stop
|
|
755
|
+
dead, sprint back, stop dead, one second a phase, fifteen seconds. "Peak" is the
|
|
756
|
+
fastest particle in the cloth-local frame, which is what the clamp bounds:
|
|
757
|
+
|
|
758
|
+
```
|
|
759
|
+
entry peak clamp headroom teleports worst tether
|
|
760
|
+
SILK 29.32 m/s 192.0 m/s 6.5x 0 1.0000
|
|
761
|
+
COTTON 13.97 192.0 13.7 0 0.9999
|
|
762
|
+
DENIM 13.29 96.0 7.2 0 1.0035
|
|
763
|
+
LEATHER 16.80 96.0 5.7 0 1.0018
|
|
764
|
+
ROPE 13.11 192.0 14.6 0 1.0004
|
|
765
|
+
CHAIN 11.32 288.0 25.4 0 1.0003
|
|
766
|
+
HAIR 13.19 192.0 14.6 0 0.9996
|
|
767
|
+
```
|
|
768
|
+
|
|
769
|
+
Nothing teleports — a sprint is locomotion and the threshold knows it — nothing
|
|
770
|
+
leaves its own reach by more than 0.35%, and the smallest headroom over the
|
|
771
|
+
clamp in the whole library is 5.7×.
|
|
772
|
+
|
|
773
|
+
### Why the clamp is not derived from `thickness`
|
|
774
|
+
|
|
775
|
+
§7 P1 asks for a "per-particle velocity clamp derived from `thickness` and `h`",
|
|
776
|
+
and the table above is why that cannot be M1's clamp. `thickness` is a contact
|
|
777
|
+
radius. A clamp built from it answers "may a swept contact still catch this
|
|
778
|
+
particle", and the answer to that sits *below* ordinary cloth speeds rather than
|
|
779
|
+
above them: silk is 4 mm thick, so at 60 Hz one radius per step is 0.24 m/s
|
|
780
|
+
against the 29.3 m/s the same silk reaches behind a sprinter. Any multiple large
|
|
781
|
+
enough to stop the clamp being a *behaviour* for silk is large enough to be
|
|
782
|
+
meaningless for leather, whose thickness is five times silk's and whose speeds
|
|
783
|
+
are not.
|
|
784
|
+
|
|
785
|
+
The scale that does work is the solver's own **correction authority**,
|
|
786
|
+
`shortest_row · substeps · iterations / dt` — the quantity §10 measured a cloth
|
|
787
|
+
losing its bound past. A clamp at four times it is a bound on the solver being
|
|
788
|
+
asked to do more than it can, it scales with the mesh and the budget rather than
|
|
789
|
+
with a radius nothing reads until M2, and the headroom column above says it is a
|
|
790
|
+
backstop rather than a behaviour. M2 still needs the tunnelling bound; it is a
|
|
791
|
+
different number for a different job and it arrives with the contacts.
|
|
792
|
+
|
|
793
|
+
### Inertia
|
|
794
|
+
|
|
795
|
+
The same profile, 10 links, measuring how far the tip lags the anchor:
|
|
796
|
+
|
|
797
|
+
```
|
|
798
|
+
inertia 0 0.0000 m welded into the anchor frame
|
|
799
|
+
inertia 0.25 0.2031 m
|
|
800
|
+
inertia 0.5 0.3681 m
|
|
801
|
+
inertia 0.75 0.5249 m
|
|
802
|
+
inertia 1 0.6522 m feels all of it
|
|
803
|
+
```
|
|
804
|
+
|
|
805
|
+
Monotone, and zero at zero to the last digit — a cloth that feels none of its
|
|
806
|
+
anchor's motion hangs from a sprinting anchor exactly as it would from a
|
|
807
|
+
stationary one, which is what makes `inertia` a dial rather than a switch with a
|
|
808
|
+
meaningless middle.
|
|
809
|
+
|
|
810
|
+
---
|
|
811
|
+
|
|
812
|
+
## 14. The performance budget, again
|
|
813
|
+
|
|
814
|
+
M0 measured the §17 workload at 3.48 ms and priced three levers that each closed
|
|
815
|
+
it. **M1 added rows, and the levers no longer close it.** A 32×32 sheet at 2 cm,
|
|
816
|
+
2 substeps × 4 iterations, adding M1's rows one at a time to M0's:
|
|
817
|
+
|
|
818
|
+
```
|
|
819
|
+
rows particles / stretch / bend / leash best
|
|
820
|
+
M0 rows only 1024 2945 2821 0 3.412 ms
|
|
821
|
+
+ strain limit 1024 5890 2821 0 4.145 ms
|
|
822
|
+
+ tether 1024 5890 2821 992 4.505 ms
|
|
823
|
+
+ slack 1024 5890 2821 1984 4.605 ms
|
|
824
|
+
```
|
|
825
|
+
|
|
826
|
+
The strain limit is the expensive one, at 0.73 ms — it doubles the stretch
|
|
827
|
+
table, and §7 already said the stretch rows are 69% of the frame. The tether is
|
|
828
|
+
0.36 ms and load-bearing. The slack row is 0.10 ms.
|
|
829
|
+
|
|
830
|
+
Against that, the levers:
|
|
831
|
+
|
|
832
|
+
```
|
|
833
|
+
config with strain limit without it
|
|
834
|
+
1024 @ 2x4 4.669 ms OVER 4.146 ms OVER
|
|
835
|
+
1024 @ 2x2 2.380 OVER 2.106 OVER
|
|
836
|
+
1024 @ 1x4 2.395 OVER 2.071 OVER
|
|
837
|
+
1024 @ 1x2 1.167 inside 1.030 inside
|
|
838
|
+
576 @ 2x2 1.280 inside 1.096 inside
|
|
839
|
+
484 @ 2x4 2.533 OVER 2.019 OVER
|
|
840
|
+
484 @ 2x2 1.093 inside 0.909 inside
|
|
841
|
+
400 @ 2x4 1.721 inside 1.493 inside
|
|
842
|
+
324 @ 2x4 1.400 inside 1.259 inside
|
|
843
|
+
256 @ 2x4 1.107 inside 0.959 inside
|
|
844
|
+
```
|
|
845
|
+
|
|
846
|
+
**No single lever reaches 2 ms.** M0's three — half the iterations, half the
|
|
847
|
+
substeps, half the particles — land at 2.38, 2.40 and 2.53 respectively. Every
|
|
848
|
+
one of them lands *inside* when a second lever is spent with it, and that is what
|
|
849
|
+
the library ships:
|
|
850
|
+
|
|
851
|
+
```
|
|
852
|
+
entry budget particles / stretch / bend / leash / colours best
|
|
853
|
+
SILK 2x4 400 1121 1045 760 4 1.488 ms
|
|
854
|
+
COTTON 2x4 400 1121 1045 760 4 1.484 ms
|
|
855
|
+
DENIM 2x2 576 3266 1541 1104 4 1.256 ms
|
|
856
|
+
LEATHER 2x2 576 3266 1541 1104 4 1.248 ms
|
|
857
|
+
ROPE 2x4 41 119 0 40 3 0.043 ms
|
|
858
|
+
CHAIN 2x6 41 119 0 40 3 0.064 ms
|
|
859
|
+
HAIR 2x4 400 1121 1045 760 4 1.429 ms
|
|
860
|
+
```
|
|
861
|
+
|
|
862
|
+
Node v24.15.0 on win32/x64, 600 warm-up frames then 900 measured, 3 rounds, the
|
|
863
|
+
minimum of the minima. The M0 warning still applies and was heeded: each round
|
|
864
|
+
builds a fresh cloth, because a benchmark that reuses a settled one measures a
|
|
865
|
+
converged mesh.
|
|
866
|
+
|
|
867
|
+
Two notes for whoever re-measures at M2. The 3.412 ms in the first table against
|
|
868
|
+
M0's 3.48 for the same workload is the two harnesses agreeing to 2%, which is
|
|
869
|
+
inside M0's own ±5% spread — the row counts and the topology are the same patch.
|
|
870
|
+
And the unreconciled factor-of-five between deletion and isolated-loop
|
|
871
|
+
attribution that §7 records is **not** resolved here; nothing in M1 re-opened it,
|
|
872
|
+
and nothing here should be quoted as having settled it.
|
|
873
|
+
|
|
874
|
+
---
|
|
875
|
+
|
|
876
|
+
## 15. System ordering: not expressible, and not needed
|
|
877
|
+
|
|
878
|
+
§4.1 named this as M1's to establish and admitted the honest possibility that it
|
|
879
|
+
needs a mechanism the engine does not have. The first half is true. The second
|
|
880
|
+
half was the wrong conclusion to draw from it.
|
|
881
|
+
|
|
882
|
+
### Why neither mechanism reaches it
|
|
883
|
+
|
|
884
|
+
The engine orders systems two ways: registration order, and what each system
|
|
885
|
+
declares in `components_used`. `EntityManager#updateExecutionOrder` scores each
|
|
886
|
+
system as a **sum** over the components it references, weighting `Create` above
|
|
887
|
+
`Write` above `Read`, and sorts descending. A score can therefore only be
|
|
888
|
+
*raised* by touching more components or touching them at a higher access level —
|
|
889
|
+
so the only way to sort **later** is to touch strictly less than the system you
|
|
890
|
+
have to follow, and a consumer of a posed hierarchy touches strictly more.
|
|
891
|
+
|
|
892
|
+
Measured, with the real systems and a poser registered *first*:
|
|
893
|
+
|
|
894
|
+
```
|
|
895
|
+
ClothSystem -> TransformAttachmentSystem -> PoserSystem
|
|
896
|
+
```
|
|
897
|
+
|
|
898
|
+
Registration order cannot rescue it, because ties break by registration and this
|
|
899
|
+
is not a tie. Declaring less is not honestly available either — cloth reads
|
|
900
|
+
`Cloth` to know which entities it owns, and `ClothExclude` and
|
|
901
|
+
`TransformAttachment` to walk them.
|
|
902
|
+
|
|
903
|
+
### What the declaration does buy
|
|
904
|
+
|
|
905
|
+
Half of the ordering, and the half that is a real data dependency. Cloth **writes**
|
|
906
|
+
`TransformAttachment#transform` and `TransformAttachmentSystem` **reads** it, so
|
|
907
|
+
writer-before-reader puts cloth first and the attachment system publishes its
|
|
908
|
+
result. That falls out of `components_used` with nothing else asked for, and it
|
|
909
|
+
is the first line of the order above.
|
|
910
|
+
|
|
911
|
+
### What M1 did about the other half
|
|
912
|
+
|
|
913
|
+
**A first attempt added a third mechanism** — an execution-phase number on
|
|
914
|
+
`System`, sorted ahead of the score, with a `PostPose` value that `ClothSystem`
|
|
915
|
+
declared. It worked, and it was wrong twice over: it put the vocabulary of
|
|
916
|
+
animation and posing into `engine/ecs`, a layer that has none, and it bought an
|
|
917
|
+
ordering the design should not have needed. It is recorded here because the
|
|
918
|
+
reasoning that produced it — "the relation is real, the scheduler cannot express
|
|
919
|
+
it, therefore extend the scheduler" — is exactly the reasoning to be suspicious
|
|
920
|
+
of.
|
|
921
|
+
|
|
922
|
+
What ships instead removes the need. Cloth writes each node's **local**
|
|
923
|
+
`TransformAttachment#transform` alongside its world `Transform64`, so a hierarchy
|
|
924
|
+
recomposition reproduces the simulated pose instead of replacing it with the
|
|
925
|
+
authored one:
|
|
926
|
+
|
|
927
|
+
```
|
|
928
|
+
a full recomposition after the write-back moves the pose by 1.665e-15 m
|
|
929
|
+
```
|
|
930
|
+
|
|
931
|
+
(Compared over the matrix. The quaternion can come back **negated** —
|
|
932
|
+
`multiplyTransforms` decomposes the matrix it just wrote, and `q` and `−q` name
|
|
933
|
+
one rotation, so the sign is the decomposition's to choose. Worth knowing before
|
|
934
|
+
writing any bit-identity assertion over a `Transform64`.)
|
|
935
|
+
|
|
936
|
+
With that, where cloth runs is a quality question. Running before the poser means
|
|
937
|
+
reading last step's anchor pose, so the **shape** is one fixed step stale; the
|
|
938
|
+
**position** is not, because the attachment cascade carries the whole subtree
|
|
939
|
+
rigidly with the anchor from cloth's own local transforms. A 16-link, 1.6 m rope,
|
|
940
|
+
worst world-space difference per node between the two orderings:
|
|
941
|
+
|
|
942
|
+
```
|
|
943
|
+
profile 61 steps 121 steps 240 steps 900 steps
|
|
944
|
+
walk 2.4 m/s 0.046 m 0.032 m 0.050 m 0.049 m
|
|
945
|
+
sprint ±9 m/s 0.149 m 0.131 m 0.349 m 0.142 m
|
|
946
|
+
```
|
|
947
|
+
|
|
948
|
+
Three per cent of the cloth's own length under ordinary motion, up to a fifth of
|
|
949
|
+
it at the sharpest velocity reversal a square wave produces, and **not
|
|
950
|
+
accumulating** — the same figure after fifteen seconds as after two, because the
|
|
951
|
+
leash and the tether bound the reachable set.
|
|
952
|
+
|
|
953
|
+
**`InverseKinematicsSystem` is the same shape and reaches the same conclusion.**
|
|
954
|
+
It reads world `Transform64`s "the hierarchy has already composed" and writes
|
|
955
|
+
local ones back, which is the arrangement above, and is why its scoring being
|
|
956
|
+
ambiguous matters less than it looks.
|