@woosh/meep-engine 3.20.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/build/bundle-worker-terrain.js +1 -1
- package/editor/Editor.d.ts.map +1 -1
- package/editor/enableEditor.d.ts.map +1 -1
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
- package/editor/particles/effect/ParticleEffectDocument.js +0 -3
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
- 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/templates/entity_templates.d.ts.map +1 -1
- 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/tools/v2/GizmoNode.d.ts +1 -1
- package/editor/tools/v2/GizmoNode.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/HierarchicalEntityListView.d.ts +3 -3
- package/editor/view/ecs/HierarchicalEntityListView.d.ts.map +1 -1
- 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/makeEntityDecorators.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphClipboard.d.ts.map +1 -1
- 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/ToolSettingsView.d.ts +1 -1
- package/editor/view/tools/ToolSettingsView.d.ts.map +1 -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 +13 -12
- package/src/core/IdPool.d.ts.map +1 -1
- package/src/core/binary/32BitEncoder.d.ts.map +1 -1
- package/src/core/binary/BinaryBuffer.d.ts +1 -1
- package/src/core/binary/BinaryBuffer.d.ts.map +1 -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/bvh2/binary/2/BinaryUint32BVH.d.ts +1 -1
- package/src/core/bvh2/binary/2/BinaryUint32BVH.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/BVH.d.ts +3 -3
- package/src/core/bvh2/bvh3/BVH.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/BVH.js +1 -2
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_nearest_to_point_filtered.d.ts.map +1 -1
- package/src/core/bvh2/traversal/aabb3_detailed_volume_intersection_callback_based.d.ts.map +1 -1
- package/src/core/cache/Cache.d.ts +16 -8
- 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/list/ListForwarder.d.ts +1 -1
- package/src/core/collection/list/ListForwarder.d.ts.map +1 -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/set/ArraySet.d.ts.map +1 -1
- package/src/core/collection/table/RowFirstTable.d.ts +2 -1
- package/src/core/collection/table/RowFirstTable.d.ts.map +1 -1
- package/src/core/collection/table/RowFirstTable.js +4 -0
- package/src/core/collection/table/bind/TableRecord.d.ts +1 -1
- package/src/core/collection/table/bind/TableRecord.d.ts.map +1 -1
- package/src/core/color/Color.d.ts +9 -10
- 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/color/hsv/rgb_to_hsv.d.ts.map +1 -1
- package/src/core/events/signal/Signal.d.ts +1 -1
- package/src/core/events/signal/Signal.d.ts.map +1 -1
- package/src/core/events/signal/signal_aggregate_by_time_window.d.ts.map +1 -1
- package/src/core/fsm/simple/SimpleStateMachineDescription.d.ts.map +1 -1
- 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/2d/aabb/AABB2.d.ts +4 -4
- package/src/core/geom/2d/aabb/AABB2.d.ts.map +1 -1
- package/src/core/geom/2d/bvh/BVH2D.d.ts +1 -1
- package/src/core/geom/2d/bvh/BVH2D.d.ts.map +1 -1
- package/src/core/geom/2d/triangle/tri2_rasterize_conservative.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/AABB3.d.ts +6 -6
- package/src/core/geom/3d/aabb/AABB3.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/atlas_bench_lib.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/atlas_compute_charts.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/atlas_generate.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/pack/atlas_pack_charts.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/param/atlas_chart_param_validity.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_bff.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_lscm.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/segment/atlas_compute_planar_regions.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/segment/atlas_segment_charts.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/segment/atlas_segment_charts_atomic.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/m4_decompose.d.ts +7 -1
- package/src/core/geom/3d/mat4/m4_decompose.d.ts.map +1 -1
- package/src/core/geom/3d/quadric/Quadric3.d.ts +11 -11
- package/src/core/geom/3d/quadric/Quadric3.d.ts.map +1 -1
- 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 +8 -8
- 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 +2 -3
- 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/tetrahedra/TetrahedralMesh.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/delaunay/debug/push_boundary_with_validation.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/delaunay/debug/validate_cavity_boundary.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_improve_quality.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/validate_tetrahedral_mesh.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/validate_tetrahedron_neighbourhood.d.ts.map +1 -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/3d/topology/struct/binary/io/bt_mesh_to_indexed_geometry.d.ts.map +1 -1
- package/src/core/geom/3d/util/aabb3_emit_point_grid.d.ts.map +1 -1
- package/src/core/geom/Quaternion.d.ts +5 -4
- 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 +9 -1
- package/src/core/geom/Vector1.d.ts.map +1 -1
- package/src/core/geom/Vector1.js +6 -0
- package/src/core/geom/Vector2.d.ts +2 -2
- package/src/core/geom/Vector2.d.ts.map +1 -1
- package/src/core/geom/Vector3.d.ts +9 -3
- 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 +14 -6
- 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/geom/packing/max-rect/find_best_container.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_hash.d.ts +12 -0
- package/src/core/geom/vec3/v3_hash.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_hash.js +19 -0
- package/src/core/geom/vec3/v3_lerp.d.ts +3 -1
- package/src/core/geom/vec3/v3_lerp.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_set.d.ts +14 -0
- package/src/core/geom/vec3/v3_set.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_set.js +17 -0
- package/src/core/geom/vec3/v3_slerp.d.ts +3 -1
- package/src/core/geom/vec3/v3_slerp.d.ts.map +1 -1
- package/src/core/geom/vec4/v4_equals_array.d.ts +11 -0
- package/src/core/geom/vec4/v4_equals_array.d.ts.map +1 -0
- package/src/core/geom/vec4/v4_equals_array.js +16 -0
- package/src/core/geom/vec4/v4_hash.d.ts +12 -0
- package/src/core/geom/vec4/v4_hash.d.ts.map +1 -0
- package/src/core/geom/vec4/v4_hash.js +18 -0
- package/src/core/geom/vec4/v4_set.d.ts +15 -0
- package/src/core/geom/vec4/v4_set.d.ts.map +1 -0
- package/src/core/geom/vec4/v4_set.js +19 -0
- 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/graph/metis/native/bisection/split_graph_two_way.d.ts.map +1 -1
- package/src/core/graph/metis/native/metis_partition_kway.d.ts.map +1 -1
- package/src/core/graph/metis/native/refine/fm_kway.d.ts.map +1 -1
- package/src/core/json/abstractJSONSerializer.d.ts.map +1 -1
- package/src/core/lang/reactive/AbstractCachingParser.d.ts.map +1 -1
- 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/linalg/cg/cg_solve.d.ts.map +1 -1
- package/src/core/math/noise/create_simplex_noise_2d.d.ts.map +1 -1
- package/src/core/math/noise/create_simplex_noise_2d.js +6 -6
- package/src/core/math/physics/mie/compute_bhmie_optical_properties.d.ts.map +1 -1
- package/src/core/math/physics/mie/compute_mie_particle_properties_rgb.d.ts.map +1 -1
- package/src/core/math/random/seededRandom_Mulberry32.d.ts +1 -1
- package/src/core/math/random/seededRandom_Mulberry32.d.ts.map +1 -1
- package/src/core/model/ModuleRegistry.d.ts.map +1 -1
- 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/model/node-graph/visual/layout/layout_assign_coordinates.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +1 -1
- package/src/core/model/reactive/model/ReactiveExpression.d.ts.map +1 -1
- package/src/core/model/validate_enum_schema.d.ts.map +1 -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/Future.d.ts.map +1 -1
- 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/core/process/task/util/countTask.d.ts.map +1 -1
- package/src/core/process/task/util/randomCountTask.d.ts.map +1 -1
- package/src/core/process/worker/WorkerBuilder.d.ts.map +1 -1
- package/src/engine/Clock.d.ts +1 -1
- package/src/engine/Clock.d.ts.map +1 -1
- 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/Animations.d.ts.map +1 -1
- package/src/engine/animation/EntityAnimation.d.ts +1 -1
- package/src/engine/animation/EntityAnimation.d.ts.map +1 -1
- package/src/engine/animation/TransitionFunctions.d.ts.map +1 -1
- package/src/engine/animation/Tween.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/curve/editor/uploadViaElement.d.ts.map +1 -1
- package/src/engine/animation/curve/view/AnimationCurveView.d.ts +1 -1
- package/src/engine/animation/curve/view/AnimationCurveView.d.ts.map +1 -1
- 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/loaders/image/avif/encode_image_source.d.ts.map +1 -1
- package/src/engine/asset/loaders/image/avif/threaded_image_encoder.d.ts.map +1 -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/browserInfo.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/LedgeGrab.js +9 -9
- package/src/engine/control/first-person/abilities/Mantle.js +8 -8
- package/src/engine/control/first-person/abilities/ScrambleUp.js +2 -2
- package/src/engine/control/first-person/abilities/WallJump.js +2 -2
- package/src/engine/control/first-person/abilities/WallRun.js +3 -3
- package/src/engine/control/first-person/collision/KinematicMover.d.ts +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.d.ts.map +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.js +19 -46
- package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts +17 -5
- package/src/engine/control/first-person/sensors/FirstPersonSensors.d.ts.map +1 -1
- package/src/engine/control/first-person/sensors/FirstPersonSensors.js +20 -7
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +9 -8
- package/src/engine/control/first-person/test/buildTestPlayer.d.ts.map +1 -1
- 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/animation/Animation.d.ts +1 -1
- package/src/engine/ecs/animation/Animation.d.ts.map +1 -1
- package/src/engine/ecs/async/SystemWorkerLoopback.d.ts +3 -3
- package/src/engine/ecs/async/SystemWorkerLoopback.d.ts.map +1 -1
- 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/DynamicActorSystem.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/grid/pick.d.ts.map +1 -1
- 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/guid/UUID.d.ts +1 -1
- package/src/engine/ecs/guid/UUID.d.ts.map +1 -1
- 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/ik/OneBoneSurfaceAlignmentSolver.d.ts.map +1 -1
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +26 -9
- package/src/engine/ecs/parent/EntityNode.d.ts +1 -1
- package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
- package/src/engine/ecs/parent/FaceEditor.d.ts +7 -7
- package/src/engine/ecs/parent/FaceEditor.d.ts.map +1 -1
- 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/storage/binary/object/BinaryObjectSerializationAdapter2.d.ts +2 -2
- package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter2.d.ts.map +1 -1
- 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/TerrainClouds.d.ts +1 -1
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts +8 -3
- 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/TerrainSystem.d.ts.map +1 -1
- 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/overlay/TerrainOverlay.d.ts +1 -1
- package/src/engine/ecs/terrain/overlay/TerrainOverlay.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts +8 -3
- 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 +7 -3
- 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/terrain/util/obtainTerrain.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform64.d.ts +10 -6
- package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform64.js +4 -0
- package/src/engine/ecs/transform-attachment/TransformAttachment.d.ts +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachment.d.ts.map +1 -1
- package/src/engine/graphics/FrameRunner.d.ts.map +1 -1
- 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/camera_traverse_active.d.ts.map +1 -1
- 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/pp/PerfectPanner.d.ts +1 -1
- package/src/engine/graphics/ecs/camera/pp/PerfectPanner.d.ts.map +1 -1
- 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/highlight/HighlightDefinition.d.ts +1 -1
- package/src/engine/graphics/ecs/highlight/HighlightDefinition.d.ts.map +1 -1
- package/src/engine/graphics/ecs/make_bvh_depth_range_computer.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.d.ts +4 -4
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.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/path/tube/TubePathStyle.d.ts +1 -1
- package/src/engine/graphics/ecs/path/tube/TubePathStyle.d.ts.map +1 -1
- package/src/engine/graphics/ecs/path/tube/build/computeFrenetFrames.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +3 -3
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
- 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/geometry/buffered/build_height_field_geometry.d.ts +1 -1
- package/src/engine/graphics/geometry/buffered/build_height_field_geometry.d.ts.map +1 -1
- package/src/engine/graphics/geometry/buffered/query/GeometrySpatialQueryAccelerator.d.ts +1 -1
- package/src/engine/graphics/geometry/buffered/query/GeometrySpatialQueryAccelerator.d.ts.map +1 -1
- package/src/engine/graphics/make_ray_from_viewport_position.d.ts.map +1 -1
- 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/emitter/computeEmissionFunction.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/utils/distribute_points_on_indexed_triangles.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts.map +1 -1
- package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts +12 -7
- 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/render/gizmo/GizmoShapeRenderingInterface.d.ts +1 -1
- package/src/engine/graphics/render/gizmo/GizmoShapeRenderingInterface.d.ts.map +1 -1
- package/src/engine/graphics/render/layers/RenderLayer.d.ts +3 -3
- package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +1 -1
- package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts +1 -1
- package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts.map +1 -1
- package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts +2 -2
- package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.d.ts +1 -1
- package/src/engine/graphics/sh3/path_tracer/PathTracedMesh.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.d.ts.map +1 -1
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +5 -1
- package/src/engine/graphics/texture/3d/SingleChannelSampler3D.d.ts +1 -1
- package/src/engine/graphics/texture/3d/SingleChannelSampler3D.d.ts.map +1 -1
- 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/graphics/texture/sampler/filter/sampler2d_scale_down_generic.d.ts +1 -1
- package/src/engine/graphics/texture/sampler/filter/sampler2d_scale_down_generic.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_max.d.ts +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_max.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_min.d.ts +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_min.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_combine.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_compute_texel_value_conversion_scale_to_uint8.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/search/make_edge_condition_channel_threshold.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/search/sampler2d_find_pixels.d.ts.map +1 -1
- package/src/engine/graphics/texture/virtual/VirtualTextureTileLoader.d.ts +3 -3
- package/src/engine/graphics/texture/virtual/VirtualTextureTileLoader.d.ts.map +1 -1
- package/src/engine/graphics/texture/virtual/VirtualTextureUsage.d.ts +1 -1
- package/src/engine/graphics/texture/virtual/VirtualTextureUsage.d.ts.map +1 -1
- package/src/engine/graphics/texture/virtual/debug/UsageDebugView.d.ts +2 -2
- package/src/engine/graphics/texture/virtual/debug/UsageDebugView.d.ts.map +1 -1
- package/src/engine/graphics/texture/virtual/debug/UsagePyramidDebugView.d.ts +1 -1
- package/src/engine/graphics/texture/virtual/debug/UsagePyramidDebugView.d.ts.map +1 -1
- package/src/engine/graphics/texture/virtual/tile/decompose_finger_print.d.ts.map +1 -1
- 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/HighlightOutlineSystem.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMedia.d.ts +10 -5
- 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 +6 -3
- package/src/engine/graphics3/VolumetricLightMap.d.ts.map +1 -1
- package/src/engine/graphics3/VolumetricLightMap.js +2 -1
- package/src/engine/graphics3/decal/graph_build_decal_clusters.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
- package/src/engine/graphics3/preview/make_model_preview_scene.d.ts.map +1 -1
- package/src/engine/graphics3/terrain/GPUTerrainSplatRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts.map +1 -1
- package/src/engine/grid/obstacle/GridObstacle.d.ts.map +1 -1
- package/src/engine/input/devices/GamepadDevice.d.ts +1 -1
- package/src/engine/input/devices/GamepadDevice.d.ts.map +1 -1
- package/src/engine/input/devices/PointerDevice.d.ts +1 -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/controllers/KeyboardCameraController.d.ts.map +1 -1
- package/src/engine/input/ecs/controllers/KeyboardCameraController.js +11 -2
- 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/BehaviorComponent.d.ts +1 -1
- package/src/engine/intelligence/behavior/ecs/BehaviorComponent.d.ts.map +1 -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/primitive/ActionBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/util/RotationBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/util/RotationBehavior.js +14 -2
- 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/blackboard/Blackboard.d.ts.map +1 -1
- package/src/engine/intelligence/mcts/MonteCarlo.d.ts +20 -10
- package/src/engine/intelligence/mcts/MonteCarlo.d.ts.map +1 -1
- package/src/engine/intelligence/mcts/MonteCarlo.js +9 -8
- package/src/engine/intelligence/mcts/StateNode.d.ts.map +1 -1
- package/src/engine/intelligence/optimization/RandomOptimizer.d.ts +14 -7
- 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 +8 -5
- 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/ecs/path_following/PathFollower.d.ts +2 -2
- package/src/engine/navigation/ecs/path_following/PathFollower.d.ts.map +1 -1
- 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/NetworkSession.d.ts.map +1 -1
- package/src/engine/network/PriorityFetch.d.ts +2 -2
- package/src/engine/network/PriorityFetch.d.ts.map +1 -1
- package/src/engine/network/diagnostics/BandwidthMeter.d.ts.map +1 -1
- package/src/engine/network/ecs/owner_authorization.d.ts.map +1 -1
- package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
- package/src/engine/network/replication/Replicator.d.ts +1 -1
- package/src/engine/network/replication/Replicator.d.ts.map +1 -1
- 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/sim/SimActionExecutor.d.ts +1 -1
- package/src/engine/network/sim/SimActionExecutor.d.ts.map +1 -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/network/time/RenderPlayout.d.ts.map +1 -1
- package/src/engine/network/transport/Channel.d.ts.map +1 -1
- package/src/engine/network/transport/fragments/FragmentRetention.d.ts.map +1 -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/body/SolverBodyState.d.ts +11 -11
- package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
- package/src/engine/physics/body/SolverBodyState.js +13 -13
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +4 -4
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +2 -2
- package/src/engine/physics/broadphase/generate_pairs.d.ts +3 -3
- package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -1
- package/src/engine/physics/broadphase/generate_pairs.js +1 -1
- package/src/engine/physics/ccd/linear_sweep.d.ts +6 -10
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +7 -6
- 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/constraint/solve_constraints.js +3 -3
- package/src/engine/physics/ecs/BodyKind.d.ts +1 -1
- package/src/engine/physics/ecs/BodyKind.js +1 -1
- package/src/engine/physics/ecs/Collider.d.ts +1 -1
- package/src/engine/physics/ecs/Collider.js +1 -1
- package/src/engine/physics/ecs/Joint.d.ts +15 -10
- package/src/engine/physics/ecs/Joint.d.ts.map +1 -1
- package/src/engine/physics/ecs/Joint.js +27 -18
- package/src/engine/physics/ecs/JointSerializationAdapter.d.ts.map +1 -1
- package/src/engine/physics/ecs/JointSerializationAdapter.js +8 -6
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +46 -85
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +117 -76
- package/src/engine/physics/ecs/RigidBody.d.ts +17 -12
- package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -1
- package/src/engine/physics/ecs/RigidBody.js +58 -24
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -1
- package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +13 -12
- 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/ecs/find_non_finite_physics_state.d.ts +1 -1
- package/src/engine/physics/ecs/find_non_finite_physics_state.js +1 -1
- package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
- package/src/engine/physics/fluid/REVIEW_02_PLAN.md +4 -4
- package/src/engine/physics/fluid/SliceVisualiser.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +10 -10
- package/src/engine/physics/fluid/ecs/FluidComponent.js +10 -10
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.d.ts +2 -2
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponent.js +2 -2
- package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts +3 -3
- package/src/engine/physics/fluid/ecs/FluidObstacle.js +3 -3
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +5 -5
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +4 -4
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +2 -2
- package/src/engine/physics/fluid/ecs/FluidSystem.js +3 -3
- package/src/engine/physics/fluid/ecs/WorkerFluidSystem.d.ts +1 -1
- package/src/engine/physics/fluid/ecs/WorkerFluidSystem.js +2 -2
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.d.ts +3 -3
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.js +3 -3
- package/src/engine/physics/fluid/ecs/fluid_sync_effectors_from_transform.d.ts +3 -3
- package/src/engine/physics/fluid/ecs/fluid_sync_effectors_from_transform.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/fluid_sync_effectors_from_transform.js +2 -2
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +3 -3
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +2 -2
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +2 -2
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +4 -4
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +8 -8
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts +8 -17
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -1
- package/src/engine/physics/inertia/world_inverse_inertia.js +11 -11
- package/src/engine/physics/integration/integrate_position.d.ts +6 -7
- package/src/engine/physics/integration/integrate_position.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_position.js +5 -6
- package/src/engine/physics/integration/integrate_velocity.d.ts +4 -4
- package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_velocity.js +7 -7
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.d.ts +4 -4
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.d.ts.map +1 -1
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.js +3 -3
- 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/convex_decomposition.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts +1 -2
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.js +1 -2
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts +23 -29
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +23 -12
- 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/PhysicsSurfacePoint.d.ts +10 -5
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -1
- package/src/engine/physics/queries/PhysicsSurfacePoint.js +10 -6
- package/src/engine/physics/queries/overlap_shape.d.ts +5 -14
- package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
- package/src/engine/physics/queries/overlap_shape.js +4 -4
- package/src/engine/physics/queries/raycast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.d.ts +17 -7
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.js +10 -3
- package/src/engine/physics/solver/solve_contacts.d.ts +2 -2
- package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
- package/src/engine/physics/solver/solve_contacts.js +2 -2
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts +4 -8
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
- package/src/engine/physics/vehicle/RaycastVehicle.js +16 -12
- 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/Storage.d.ts.map +1 -1
- 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 +5 -1
- package/src/engine/sound/SoundEngine.d.ts.map +1 -1
- package/src/engine/sound/SoundEngine.js +4 -0
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +27 -2
- 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/AcousticSimulator.d.ts +2 -2
- package/src/engine/sound/simulation/AcousticSimulator.d.ts.map +1 -1
- package/src/engine/sound/simulation/core/VolumeField.d.ts +1 -1
- package/src/engine/sound/simulation/core/VolumeField.d.ts.map +1 -1
- 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/simulation/probe/AcousticProbeField.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/probe_delaunay_edges.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/probe_densify_portals.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/probe_detect_portals.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/probe_place_sdf_cover.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/probe_refine_connectivity.d.ts.map +1 -1
- package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts +1 -1
- package/src/engine/sound/simulation/render/ProbeReverbRenderer.d.ts.map +1 -1
- package/src/engine/sound/simulation/render/foaReverbImpulseResponse.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/legacy/SoundEmitter.d.ts +3 -3
- package/src/engine/sound/sopra/legacy/SoundEmitter.d.ts.map +1 -1
- package/src/engine/sound/sopra/legacy/SoundTrack.d.ts +3 -3
- package/src/engine/sound/sopra/legacy/SoundTrack.d.ts.map +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/sound/sopra/util/buildAttenuationCurve.d.ts.map +1 -1
- 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/engine/ui/tiles2d/TileGrid.d.ts.map +1 -1
- package/src/extractName.d.ts.map +1 -1
- package/src/format/image/avif/api/convert_to_rgba.d.ts.map +1 -1
- package/src/format/image/avif/av1/encode/encode_av1_still.d.ts.map +1 -1
- package/src/format/image/avif/heif/write_avif_file.d.ts +2 -2
- package/src/format/image/avif/heif/write_avif_file.d.ts.map +1 -1
- package/src/format/image/jpeg/JpegImage.d.ts.map +1 -1
- package/src/format/image/png/PNG.d.ts.map +1 -1
- package/src/format/image/png/chunk/png_chunk_decode_iTXt.d.ts.map +1 -1
- package/src/format/image/png/chunk/png_chunk_decode_zTXt.d.ts.map +1 -1
- package/src/format/scene/gltf/ext/GltfBufferViewExtensionSet.d.ts.map +1 -1
- package/src/format/scene/gltf/gltf_node_world_matrices.d.ts.map +1 -1
- package/src/format/scene/usd/unpack_usdz.d.ts.map +1 -1
- package/src/format/scene/usd/usd_triangulate.d.ts.map +1 -1
- package/src/format/texture/basis/astc_integer_sequence.d.ts.map +1 -1
- 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 +24 -4
- 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/markers/transform/MarkerNodeTransformerRecordPropertyClosure.d.ts.map +1 -1
- 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/generation/theme/ThemeEngine.d.ts +2 -2
- package/src/generation/theme/ThemeEngine.d.ts.map +1 -1
- package/src/shade/descriptor/ObjectDescriptorBase.d.ts +9 -4
- 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 +3 -3
- 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 +47 -13
- 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 +7 -1
- 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 +7 -1
- 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/GPUTimerArray.d.ts.map +1 -1
- package/src/shade/device/timing/GPUTimerStats.d.ts +1 -1
- package/src/shade/device/timing/GPUTimerStats.d.ts.map +1 -1
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +894 -894
- 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/basis_textures/texture_inventory.d.ts.map +1 -1
- package/src/shade/playground/bvh_repro/bvh_repro_device.d.ts.map +1 -1
- 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/ground_seam/measure_flicker.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/index.html +0 -1
- package/src/shade/playground/particle_system/main.js +8 -22
- package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_prototype.js +8 -8
- package/src/shade/playground/particle_system/particle_scene.d.ts +0 -62
- package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_scene.js +0 -58
- package/src/shade/playground/skinned_blas_refit/sweep_views.js +2 -2
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +1 -1
- 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 +132 -0
- package/src/shade/playground/vgeo_viewer/cut_geometry.d.ts +61 -0
- package/src/shade/playground/vgeo_viewer/cut_geometry.d.ts.map +1 -0
- package/src/shade/playground/vgeo_viewer/cut_geometry.js +460 -0
- package/src/shade/playground/vgeo_viewer/index.html +77 -0
- package/src/shade/playground/vgeo_viewer/main.d.ts +2 -0
- package/src/shade/playground/vgeo_viewer/main.d.ts.map +1 -0
- package/src/shade/playground/vgeo_viewer/main.js +1302 -0
- package/src/shade/playground/vgeo_viewer/sample_asset.d.ts +18 -0
- package/src/shade/playground/vgeo_viewer/sample_asset.d.ts.map +1 -0
- package/src/shade/playground/vgeo_viewer/sample_asset.js +117 -0
- package/src/shade/playground/vgeo_viewer/select_cut.d.ts +173 -0
- package/src/shade/playground/vgeo_viewer/select_cut.d.ts.map +1 -0
- package/src/shade/playground/vgeo_viewer/select_cut.js +481 -0
- package/src/shade/renderer/DynamicResolutionScaling.d.ts +1 -1
- package/src/shade/renderer/DynamicResolutionScaling.d.ts.map +1 -1
- 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 +19 -9
- 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/skin_normalize_mesh_frame.d.ts.map +1 -1
- 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/Camera.d.ts +3 -3
- package/src/shade/renderer/camera/Camera.d.ts.map +1 -1
- 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/camera/OrthographicCamera.d.ts +4 -4
- package/src/shade/renderer/camera/OrthographicCamera.d.ts.map +1 -1
- package/src/shade/renderer/camera/PerspectiveCamera.d.ts +2 -2
- package/src/shade/renderer/camera/PerspectiveCamera.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +11 -3
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +25 -5
- package/src/shade/renderer/extension/FrameContext.d.ts +16 -6
- 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/GBufferTextures.d.ts +4 -4
- package/src/shade/renderer/extension/GBufferTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/PresentTarget.d.ts +1 -1
- package/src/shade/renderer/extension/PresentTarget.d.ts.map +1 -1
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
- 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/extension/SceneColor.d.ts +1 -1
- package/src/shade/renderer/extension/SceneColor.d.ts.map +1 -1
- package/src/shade/renderer/extension/ViewTextures.d.ts +4 -4
- package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
- package/src/shade/renderer/geometry/Attribute.d.ts +3 -3
- 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/Geometry.d.ts +1 -1
- package/src/shade/renderer/geometry/Geometry.d.ts.map +1 -1
- 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/bvh2_check_bounds.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts.map +1 -1
- 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 +4 -3
- 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/build/gltf/gltf_collect_geometries.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/attribute/VGEO_ATTRIBUTES.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_read_frame_extent.d.ts +29 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_read_frame_extent.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_read_frame_extent.js +59 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_scan_frames.d.ts +0 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_scan_frames.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_scan_frames.js +2 -23
- package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts +94 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.js +170 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts +122 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.js +143 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts +216 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +917 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.d.ts +64 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.js +80 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +198 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +232 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageWant.d.ts +51 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageWant.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageWant.js +55 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts +68 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.js +72 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts +28 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.js +108 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.d.ts +23 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.js +83 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.d.ts +53 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.js +211 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts +26 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +271 -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/clipmap/GPUClipMap3D.d.ts +2 -2
- package/src/shade/renderer/global_illumination/clipmap/GPUClipMap3D.d.ts.map +1 -1
- 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 +5 -1
- 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 +8 -2
- 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 +16 -8
- 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/check_bvh_structure.d.ts.map +1 -1
- 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 +10 -4
- 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/light/model/PointLight.d.ts +1 -1
- package/src/shade/renderer/light/model/PointLight.d.ts.map +1 -1
- package/src/shade/renderer/light/model/SpotLight.d.ts +1 -1
- package/src/shade/renderer/light/model/SpotLight.d.ts.map +1 -1
- 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/fix_up_material_sides.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/gltf_create_material.d.ts +1 -1
- package/src/shade/renderer/loader/gltf/gltf_create_material.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +3 -3
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/usd_decode_image.d.ts +1 -1
- package/src/shade/renderer/loader/usd/usd_decode_image.d.ts.map +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/material/util/material_convert_metallic_roughness_to_specular_glossiness.d.ts.map +1 -1
- package/src/shade/renderer/material/util/material_convert_specular_glossiness_to_metallic_roughness.d.ts.map +1 -1
- package/src/shade/renderer/particles/DESIGN.md +96 -72
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +109 -50
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +180 -234
- 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 +21 -20
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -1
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +40 -27
- 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/ParticleGroupBuilder.d.ts +6 -6
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeGroup.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts +1 -1
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_group_json.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.d.ts +28 -30
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +71 -60
- package/src/shade/renderer/particles/graph_particles_avboit.js +16 -16
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +1 -1
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
- 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/runtime/create_particle_effect.d.ts.map +1 -1
- 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/particles/vm/ParticleVMReference.d.ts.map +1 -1
- 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 +32 -16
- 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/graph_pass_composit_red_as_rgba.d.ts.map +1 -1
- 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 +11 -5
- 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/SSR.d.ts +3 -3
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
- 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 +17 -9
- 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/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- 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/AVBOITSideChannel.d.ts.map +1 -1
- 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 +12 -4
- 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/Node3D.d.ts +3 -3
- package/src/shade/renderer/scene/Node3D.d.ts.map +1 -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/bvh/StaticSceneBVH.d.ts.map +1 -1
- 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/compiler/CodeChunk.d.ts.map +1 -1
- 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/graph/graph_prepare_pass_input_data.d.ts.map +1 -1
- package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.js +11 -0
- 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 +3 -5
- 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 +2 -1
- 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/format/sampler_descriptor_unpack.d.ts.map +1 -1
- 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 +10 -8
- 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/VTPageTable.d.ts.map +1 -1
- 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 +6 -3
- 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/GPUViewSkyContext.d.ts +1 -1
- package/src/shade/renderer/view/GPUViewSkyContext.d.ts.map +1 -1
- 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 +17 -8
- 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 +6 -6
- 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/shade/wgsl/emulator/CPUBitmapData.d.ts.map +1 -1
- package/src/view/View.d.ts +9 -4
- 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 +16 -8
- 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 +16 -9
- 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/RadialMenuElement.d.ts +3 -3
- package/src/view/elements/radial/RadialMenuElement.d.ts.map +1 -1
- 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/elements/windrose/WindRoseDiagram.d.ts.map +1 -1
- 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/DockLayoutView.d.ts.map +1 -1
- 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 +9 -5
- 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 +20 -14
- 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/MinimapMarkerCollection.d.ts +3 -2
- package/src/view/minimap/MinimapMarkerCollection.d.ts.map +1 -1
- package/src/view/minimap/MinimapMarkerCollection.js +28 -5
- 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/MinimapMarkerView.js +65 -34
- 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/minimap/gl/MarkerGL.d.ts +15 -3
- package/src/view/minimap/gl/MarkerGL.d.ts.map +1 -1
- package/src/view/minimap/gl/MarkerGL.js +31 -4
- 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/engine/physics/BULLET_REVIEW.md +0 -945
- package/src/engine/physics/CANNON_REVIEW.md +0 -1300
- package/src/engine/physics/CONSTRAINT_SOLVER_BENCH_LOG.md +0 -208
- package/src/engine/physics/CONSTRAINT_SOLVER_IMPROVEMENTS_PLAN.md +0 -364
- package/src/engine/physics/INTEPOLATION_SYSTEM_PLAN.md +0 -287
- package/src/engine/physics/JOLT_REVIEW.md +0 -913
- package/src/engine/physics/PLAN.md +0 -1120
- package/src/engine/physics/RAPIER_REVIEW.md +0 -934
- package/src/engine/physics/REVIEW_001_ACTION_PLAN.md +0 -642
- package/src/engine/physics/REVIEW_002.md +0 -151
- package/src/engine/physics/REVIEW_003.md +0 -166
- package/src/shade/descriptor/util/optional_clone.d.ts +0 -7
- package/src/shade/descriptor/util/optional_clone.d.ts.map +0 -1
- package/src/shade/descriptor/util/optional_equality.d.ts +0 -10
- package/src/shade/descriptor/util/optional_equality.d.ts.map +0 -1
- package/src/shade/descriptor/util/optional_hash.d.ts +0 -9
- package/src/shade/descriptor/util/optional_hash.d.ts.map +0 -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/geometry/virtual/format/prototypeVGEOFormatViewer.js +0 -2063
- 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 -51
- 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 -120
- 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
|
@@ -1,2063 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A debug viewer for the `.vgeo` container.
|
|
3
|
-
*
|
|
4
|
-
* Drop a file onto the page and it is validated, decoded, and drawn — not as an asset, but as the
|
|
5
|
-
* *cut* the container's own metric selects: the clusters a runtime would draw, coloured so the
|
|
6
|
-
* seams between them are visible, with the cluster count on screen.
|
|
7
|
-
*
|
|
8
|
-
* npm run dev
|
|
9
|
-
* http://localhost:9000/index.html?entry=/src/mir-engine/meep/src/shade/renderer/geometry/virtual/format/prototypeVGEOFormatViewer.js
|
|
10
|
-
*
|
|
11
|
-
* `?file=/data/models/stanford/vgeo/bunny/<asset-id>.vgeo` loads one straight away, which is what
|
|
12
|
-
* makes a particular view of a particular asset a bookmark.
|
|
13
|
-
*
|
|
14
|
-
* **The cut is frozen until you ask for a new one.** "Adapt to view" re-runs the traversal at
|
|
15
|
-
* wherever the camera is standing now; everything after that is you flying around a decision taken
|
|
16
|
-
* from somewhere else, which is the only way to see what a cut actually selected. Turn `auto` on to
|
|
17
|
-
* watch it chase the camera instead.
|
|
18
|
-
*
|
|
19
|
-
* Drawing goes through Shade's **direct geometry path** — a {@link DynamicMesh} drawn straight from
|
|
20
|
-
* its attributes, no meshlet encode — because a cut is rebuilt from scratch every time it is
|
|
21
|
-
* adapted, and a meshlet build per adapt would price the tool out of being interactive. It is drawn
|
|
22
|
-
* *opaque* on that path ({@link GPUDynamicMeshRenderer.opaque}), so the depth buffer orders the
|
|
23
|
-
* cut's own triangles: a cut is a solid surface and nothing on the CPU can order one correctly.
|
|
24
|
-
*
|
|
25
|
-
* THROWAWAY, and deliberately self-contained. The container reader below is a *debug* reader: whole
|
|
26
|
-
* file, eager, everything resident. The runtime's is streaming and partial and belongs to M1;
|
|
27
|
-
* nothing here should be mistaken for its shape.
|
|
28
|
-
*
|
|
29
|
-
* @author Alex Goldring
|
|
30
|
-
* @copyright Company Named Limited (c) 2026
|
|
31
|
-
*/
|
|
32
|
-
import { assert } from "../../../../../core/assert.js";
|
|
33
|
-
import { BinaryBuffer } from "../../../../../core/binary/BinaryBuffer.js";
|
|
34
|
-
import { UINT16_MAX } from "../../../../../core/binary/UINT16_MAX.js";
|
|
35
|
-
import {
|
|
36
|
-
decode_octahedron_to_unit
|
|
37
|
-
} from "../../../../../core/geom/3d/normal/octahedron/decode_octahedron_to_unit.js";
|
|
38
|
-
import Vector3 from "../../../../../core/geom/Vector3.js";
|
|
39
|
-
import { DEG_TO_RAD } from "../../../../../core/math/DEG_TO_RAD.js";
|
|
40
|
-
import { OrbitalCameraController } from "../../../camera/orbital/index.js";
|
|
41
|
-
import { PerspectiveCamera } from "../../../camera/PerspectiveCamera.js";
|
|
42
|
-
import { create_frame_loop } from "../../../create_frame_loop.js";
|
|
43
|
-
import { DEFAULT_DEPTH_TEXTURE_VIEW } from "../../../depth/DEFAULT_DEPTH_TEXTURE_VIEW.js";
|
|
44
|
-
import { DEPTH_BACKGROUND_VALUE } from "../../../depth/DEPTH_BACKGROUND_VALUE.js";
|
|
45
|
-
import { GPUDynamicMeshRenderer } from "../../../dynamic/GPUDynamicMeshRenderer.js";
|
|
46
|
-
import { make_sunlight } from "../../../light/make_sunlight.js";
|
|
47
|
-
import { FramePhase } from "../../../extension/FramePhase.js";
|
|
48
|
-
import { RenderExtension } from "../../../extension/RenderExtension.js";
|
|
49
|
-
import { SceneColor } from "../../../extension/SceneColor.js";
|
|
50
|
-
import { ViewTextures } from "../../../extension/ViewTextures.js";
|
|
51
|
-
import { Renderer } from "../../../Renderer.js";
|
|
52
|
-
import { DynamicMesh } from "../../../scene/DynamicMesh.js";
|
|
53
|
-
import { DynamicMeshBatch } from "../../../scene/DynamicMeshBatch.js";
|
|
54
|
-
import { Scene } from "../../../scene/Scene.js";
|
|
55
|
-
import { Attribute } from "../../Attribute.js";
|
|
56
|
-
import { Geometry } from "../../Geometry.js";
|
|
57
|
-
import { StandardAttributes } from "../../StandardAttributes.js";
|
|
58
|
-
import { VGEO_ATTRIBUTE } from "./attribute/VGEO_ATTRIBUTE.js";
|
|
59
|
-
import { VGEO_ATTRIBUTES } from "./attribute/VGEO_ATTRIBUTES.js";
|
|
60
|
-
import { VGEO_CHILD_OFFSET } from "./frame/VGEO_CHILD_OFFSET.js";
|
|
61
|
-
import { VGEO_CHILD_TABLE_ENTRY_SIZE } from "./frame/VGEO_CHILD_TABLE_ENTRY_SIZE.js";
|
|
62
|
-
import { VGEO_CLUSTER_OFFSET } from "./cluster/VGEO_CLUSTER_OFFSET.js";
|
|
63
|
-
import { VGEO_CLUSTER_RECORD_SIZE } from "./cluster/VGEO_CLUSTER_RECORD_SIZE.js";
|
|
64
|
-
import { vgeo_codec_name } from "./frame/vgeo_codec_name.js";
|
|
65
|
-
import { VGEO_CODEC_LZ4 } from "./frame/VGEO_CODEC_LZ4.js";
|
|
66
|
-
import { VGEO_CODEC_RAW } from "./frame/VGEO_CODEC_RAW.js";
|
|
67
|
-
import { vgeo_decode_frame_blob } from "./frame/vgeo_decode_frame_blob.js";
|
|
68
|
-
import { VGEO_FRAME_HEADER_SIZE } from "./frame/VGEO_FRAME_HEADER_SIZE.js";
|
|
69
|
-
import { vgeo_frame_decode_bound } from "./frame/vgeo_frame_decode_bound.js";
|
|
70
|
-
import { VGEO_GROUP_RECORD_SIZE } from "./page/VGEO_GROUP_RECORD_SIZE.js";
|
|
71
|
-
import { VGEO_HEADER_OFFSET } from "./header/VGEO_HEADER_OFFSET.js";
|
|
72
|
-
import { VGEO_HEADER_SIZE } from "./header/VGEO_HEADER_SIZE.js";
|
|
73
|
-
import { VGEO_LEVEL_OFFSET } from "./header/VGEO_LEVEL_OFFSET.js";
|
|
74
|
-
import { VGEO_LEVEL_RECORD_SIZE } from "./header/VGEO_LEVEL_RECORD_SIZE.js";
|
|
75
|
-
import { VGEO_MAGIC } from "./header/VGEO_MAGIC.js";
|
|
76
|
-
import { VGEO_MAX_CLUSTER_VERTEX_COUNT } from "./cluster/VGEO_MAX_CLUSTER_VERTEX_COUNT.js";
|
|
77
|
-
import { VGEO_NO_CHILD } from "./cluster/VGEO_NO_CHILD.js";
|
|
78
|
-
import { VGEO_PAGE_HEADER_SIZE } from "./page/VGEO_PAGE_HEADER_SIZE.js";
|
|
79
|
-
import { VGEO_PAGE_OFFSET } from "./page/VGEO_PAGE_OFFSET.js";
|
|
80
|
-
import { VGEO_SAME_PAGE } from "./cluster/VGEO_SAME_PAGE.js";
|
|
81
|
-
import { vgeo_scan_frames } from "./frame/vgeo_scan_frames.js";
|
|
82
|
-
import { vgeo_payload_attribute_offset } from "./payload/vgeo_payload_attribute_offset.js";
|
|
83
|
-
import { vgeo_validate_container } from "./vgeo_validate_container.js";
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Everything in the container is little-endian (`VGEO_FORMAT.md` §2).
|
|
87
|
-
* @type {boolean}
|
|
88
|
-
*/
|
|
89
|
-
const LE = true;
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* The `encoding_flags` bit that says a cluster's normal section holds one constant-compressed word
|
|
93
|
-
* for the whole cluster instead of one per vertex.
|
|
94
|
-
* @type {number}
|
|
95
|
-
*/
|
|
96
|
-
const NORMAL_COMPRESSION_FLAG = VGEO_ATTRIBUTES[VGEO_ATTRIBUTE.NORMAL].compression_flag;
|
|
97
|
-
|
|
98
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
99
|
-
// Reading
|
|
100
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* One page, decoded far enough to traverse.
|
|
104
|
-
*/
|
|
105
|
-
export class VGeoPageView {
|
|
106
|
-
/**
|
|
107
|
-
* Page index, which is also the frame ordinal.
|
|
108
|
-
* @type {number}
|
|
109
|
-
*/
|
|
110
|
-
index = 0;
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Byte offset of the decoded page's first byte in {@link VGeoContainer.page_bytes}.
|
|
114
|
-
* @type {number}
|
|
115
|
-
*/
|
|
116
|
-
base = 0;
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* The codec its frame stored it under. Informational here — the page is decoded before anything
|
|
120
|
-
* reads it — and worth showing, because it is per page and a file can carry both.
|
|
121
|
-
* @type {number}
|
|
122
|
-
*/
|
|
123
|
-
codec = 0;
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Bytes the frame stores, before decoding.
|
|
127
|
-
* @type {number}
|
|
128
|
-
*/
|
|
129
|
-
stored_size = 0;
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Bytes the page occupies decoded.
|
|
133
|
-
* @type {number}
|
|
134
|
-
*/
|
|
135
|
-
decoded_size = 0;
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* @type {number}
|
|
139
|
-
*/
|
|
140
|
-
min_level = 0;
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* @type {number}
|
|
144
|
-
*/
|
|
145
|
-
max_level = 0;
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Absolute byte offset of this page's payload section.
|
|
149
|
-
* @type {number}
|
|
150
|
-
*/
|
|
151
|
-
payload_base = 0;
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Id of this page's first cluster in the reader's own flat numbering, which is page order and
|
|
155
|
-
* then cluster-table order. The format has no global cluster id; this exists so the arrays on
|
|
156
|
-
* {@link VGeoContainer} can be indexed by one.
|
|
157
|
-
* @type {number}
|
|
158
|
-
*/
|
|
159
|
-
cluster_base = 0;
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* @type {number}
|
|
163
|
-
*/
|
|
164
|
-
cluster_count = 0;
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* `child_ref -> page index`, read out of the frame's child table.
|
|
168
|
-
* @type {Uint32Array}
|
|
169
|
-
*/
|
|
170
|
-
child_pages = new Uint32Array(0);
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Per group: index of its first cluster within this page.
|
|
174
|
-
* @type {Uint16Array}
|
|
175
|
-
*/
|
|
176
|
-
group_cluster_first = new Uint16Array(0);
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* @type {Uint16Array}
|
|
180
|
-
*/
|
|
181
|
-
group_cluster_count = new Uint16Array(0);
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* How many clusters name this group as their child. Zero is what makes a group selectable with
|
|
185
|
-
* nothing above it — the root page's topmost groups, and only those.
|
|
186
|
-
* @type {Uint16Array}
|
|
187
|
-
*/
|
|
188
|
-
group_parent_count = new Uint16Array(0);
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* @type {number}
|
|
192
|
-
*/
|
|
193
|
-
node_count = 0;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* A whole `.vgeo` file, read into the flat form the traversal wants.
|
|
198
|
-
*
|
|
199
|
-
* Clusters are a structure of arrays rather than objects: an asset of any size has hundreds of
|
|
200
|
-
* thousands of them, a cut reads a handful of fields from the ones it visits and nothing at all
|
|
201
|
-
* from the ones it skips, and an object per cluster would cost more than the file does.
|
|
202
|
-
*/
|
|
203
|
-
export class VGeoContainer {
|
|
204
|
-
/**
|
|
205
|
-
* Every page decoded, back to back in page order. Each page's {@link VGeoPageView.base} is an
|
|
206
|
-
* offset into this, and so — through it — is every payload offset a cluster record carries.
|
|
207
|
-
*
|
|
208
|
-
* It is not the file. Under a compressing codec the file does not hold a page's bytes at all,
|
|
209
|
-
* and even under the raw codec the two differ by the frame headers and child tables the decoded
|
|
210
|
-
* image leaves out.
|
|
211
|
-
*
|
|
212
|
-
* @type {Uint8Array}
|
|
213
|
-
*/
|
|
214
|
-
page_bytes = new Uint8Array(0);
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* What the frames store between them, before decoding — the part of the file that is pages.
|
|
218
|
-
* @type {number}
|
|
219
|
-
*/
|
|
220
|
-
stored_page_bytes = 0;
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* `page_bytes.length`, named so a caller does not have to know that.
|
|
224
|
-
* @type {number}
|
|
225
|
-
*/
|
|
226
|
-
decoded_page_bytes = 0;
|
|
227
|
-
|
|
228
|
-
/**
|
|
229
|
-
* @type {number}
|
|
230
|
-
*/
|
|
231
|
-
format_version = 0;
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* @type {number}
|
|
235
|
-
*/
|
|
236
|
-
payload_encoding = 0;
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
* Hex, as the 16 asset-id bytes stand in the file.
|
|
240
|
-
* @type {string}
|
|
241
|
-
*/
|
|
242
|
-
asset_id = '';
|
|
243
|
-
|
|
244
|
-
/**
|
|
245
|
-
* @type {number}
|
|
246
|
-
*/
|
|
247
|
-
source_vertex_count = 0;
|
|
248
|
-
|
|
249
|
-
/**
|
|
250
|
-
* @type {number}
|
|
251
|
-
*/
|
|
252
|
-
source_face_count = 0;
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* Object-space bounding sphere of the whole geometry: centre xyz then radius.
|
|
256
|
-
* @type {Float32Array}
|
|
257
|
-
*/
|
|
258
|
-
object_sphere = new Float32Array(4);
|
|
259
|
-
|
|
260
|
-
/**
|
|
261
|
-
* @type {Float32Array}
|
|
262
|
-
*/
|
|
263
|
-
object_bounds = new Float32Array(6);
|
|
264
|
-
|
|
265
|
-
/**
|
|
266
|
-
* @type {VGeoPageView[]}
|
|
267
|
-
*/
|
|
268
|
-
pages = [];
|
|
269
|
-
|
|
270
|
-
/**
|
|
271
|
-
* @type {{min_error:number, max_error:number, clusters:number, groups:number, triangles:number}[]}
|
|
272
|
-
*/
|
|
273
|
-
levels = [];
|
|
274
|
-
|
|
275
|
-
/**
|
|
276
|
-
* @type {number}
|
|
277
|
-
*/
|
|
278
|
-
cluster_count = 0;
|
|
279
|
-
|
|
280
|
-
/**
|
|
281
|
-
* `4 * cluster_count` — the LOD-metric sphere of the step that created each cluster.
|
|
282
|
-
* @type {Float32Array}
|
|
283
|
-
*/
|
|
284
|
-
self_sphere = new Float32Array(0);
|
|
285
|
-
|
|
286
|
-
/**
|
|
287
|
-
* @type {Float32Array}
|
|
288
|
-
*/
|
|
289
|
-
self_error = new Float32Array(0);
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* @type {Float32Array}
|
|
293
|
-
*/
|
|
294
|
-
parent_error = new Float32Array(0);
|
|
295
|
-
|
|
296
|
-
/**
|
|
297
|
-
* `4 * cluster_count` — each cluster's own tight sphere, for culling and never for the cut test.
|
|
298
|
-
* @type {Float32Array}
|
|
299
|
-
*/
|
|
300
|
-
bounds_sphere = new Float32Array(0);
|
|
301
|
-
|
|
302
|
-
/**
|
|
303
|
-
* @type {Uint16Array}
|
|
304
|
-
*/
|
|
305
|
-
child_ref = new Uint16Array(0);
|
|
306
|
-
|
|
307
|
-
/**
|
|
308
|
-
* @type {Uint16Array}
|
|
309
|
-
*/
|
|
310
|
-
child_group = new Uint16Array(0);
|
|
311
|
-
|
|
312
|
-
/**
|
|
313
|
-
* @type {Uint32Array}
|
|
314
|
-
*/
|
|
315
|
-
encoding_flags = new Uint32Array(0);
|
|
316
|
-
|
|
317
|
-
/**
|
|
318
|
-
* Offset into the owning page's payload section.
|
|
319
|
-
* @type {Uint32Array}
|
|
320
|
-
*/
|
|
321
|
-
payload_offset = new Uint32Array(0);
|
|
322
|
-
|
|
323
|
-
/**
|
|
324
|
-
* @type {Uint8Array}
|
|
325
|
-
*/
|
|
326
|
-
vertex_count = new Uint8Array(0);
|
|
327
|
-
|
|
328
|
-
/**
|
|
329
|
-
* @type {Uint8Array}
|
|
330
|
-
*/
|
|
331
|
-
triangle_count = new Uint8Array(0);
|
|
332
|
-
|
|
333
|
-
/**
|
|
334
|
-
* @type {Uint32Array}
|
|
335
|
-
*/
|
|
336
|
-
page_of_cluster = new Uint32Array(0);
|
|
337
|
-
|
|
338
|
-
/**
|
|
339
|
-
* Group index within that page, so a colour can be keyed on the residency unit.
|
|
340
|
-
* @type {Uint16Array}
|
|
341
|
-
*/
|
|
342
|
-
group_of_cluster = new Uint16Array(0);
|
|
343
|
-
|
|
344
|
-
/**
|
|
345
|
-
* How many clusters store a normal per vertex rather than one constant-compressed word for the
|
|
346
|
-
* whole cluster.
|
|
347
|
-
*
|
|
348
|
-
* A source carrying no normals encodes the engine default everywhere, and then `colour by
|
|
349
|
-
* stored normal` comes out one flat colour across the whole model. That is the file's truth and
|
|
350
|
-
* it reads exactly like a broken viewer, so the panel says the number outright.
|
|
351
|
-
*
|
|
352
|
-
* It is not a count of clusters that *have* normals: a cluster whose vertices genuinely all
|
|
353
|
-
* face the same way compresses to one word as well, and a flat surface is not a missing one.
|
|
354
|
-
*
|
|
355
|
-
* @type {number}
|
|
356
|
-
*/
|
|
357
|
-
per_vertex_normal_cluster_count = 0;
|
|
358
|
-
|
|
359
|
-
/**
|
|
360
|
-
* What {@link vgeo_validate_container} made of the file. Empty is the only good answer, and a
|
|
361
|
-
* non-empty one is the most interesting thing this tool can tell you.
|
|
362
|
-
* @type {VGeoDefect[]}
|
|
363
|
-
*/
|
|
364
|
-
defects = [];
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
/**
|
|
368
|
-
* @param {DataView} view
|
|
369
|
-
* @param {number} offset
|
|
370
|
-
* @returns {string} 16 bytes as hex
|
|
371
|
-
*/
|
|
372
|
-
function read_asset_id(view, offset) {
|
|
373
|
-
let out = '';
|
|
374
|
-
|
|
375
|
-
for (let i = 0; i < 16; i++) {
|
|
376
|
-
out += view.getUint8(offset + i).toString(16).padStart(2, '0');
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
return out;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
/**
|
|
383
|
-
* Read a whole `.vgeo` file.
|
|
384
|
-
*
|
|
385
|
-
* Eager and complete, which is the opposite of what the runtime will do and exactly right for a
|
|
386
|
-
* tool whose job is to look at every part of it.
|
|
387
|
-
*
|
|
388
|
-
* @param {ArrayBuffer} array_buffer the complete file
|
|
389
|
-
* @returns {VGeoContainer}
|
|
390
|
-
* @throws {Error} when the bytes are not a `.vgeo` at all, or a page uses a codec this reader has no
|
|
391
|
-
* decoder for — everything softer than that lands in {@link VGeoContainer.defects}
|
|
392
|
-
*/
|
|
393
|
-
export function vgeo_read_container(array_buffer) {
|
|
394
|
-
assert.defined(array_buffer, 'array_buffer');
|
|
395
|
-
|
|
396
|
-
if (array_buffer.byteLength < VGEO_HEADER_SIZE) {
|
|
397
|
-
throw new Error(`file is ${array_buffer.byteLength} bytes, shorter than the header`);
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
const view = new DataView(array_buffer);
|
|
401
|
-
|
|
402
|
-
const magic = view.getUint32(VGEO_HEADER_OFFSET.MAGIC, LE);
|
|
403
|
-
|
|
404
|
-
if (magic !== VGEO_MAGIC) {
|
|
405
|
-
throw new Error(
|
|
406
|
-
`not a .vgeo file: magic is 0x${magic.toString(16)}, expected 0x${VGEO_MAGIC.toString(16)}`
|
|
407
|
-
);
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
const result = new VGeoContainer();
|
|
411
|
-
|
|
412
|
-
const file_bytes = new Uint8Array(array_buffer);
|
|
413
|
-
|
|
414
|
-
result.format_version = view.getUint16(VGEO_HEADER_OFFSET.FORMAT_VERSION, LE);
|
|
415
|
-
result.payload_encoding = view.getUint32(VGEO_HEADER_OFFSET.PAYLOAD_ENCODING, LE);
|
|
416
|
-
result.asset_id = read_asset_id(view, VGEO_HEADER_OFFSET.ASSET_ID);
|
|
417
|
-
result.source_vertex_count = Number(view.getBigUint64(VGEO_HEADER_OFFSET.SOURCE_VERTEX_COUNT, LE));
|
|
418
|
-
result.source_face_count = Number(view.getBigUint64(VGEO_HEADER_OFFSET.SOURCE_FACE_COUNT, LE));
|
|
419
|
-
|
|
420
|
-
for (let i = 0; i < 4; i++) {
|
|
421
|
-
result.object_sphere[i] = view.getFloat32(VGEO_HEADER_OFFSET.OBJECT_SPHERE + i * 4, LE);
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
for (let i = 0; i < 6; i++) {
|
|
425
|
-
result.object_bounds[i] = view.getFloat32(VGEO_HEADER_OFFSET.OBJECT_BOUNDS + i * 4, LE);
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
const level_count = view.getUint8(VGEO_HEADER_OFFSET.LEVEL_COUNT);
|
|
429
|
-
|
|
430
|
-
for (let i = 0; i < level_count; i++) {
|
|
431
|
-
const at = VGEO_HEADER_SIZE + i * VGEO_LEVEL_RECORD_SIZE;
|
|
432
|
-
|
|
433
|
-
result.levels.push({
|
|
434
|
-
min_error: view.getFloat32(at + VGEO_LEVEL_OFFSET.MIN_ERROR, LE),
|
|
435
|
-
max_error: view.getFloat32(at + VGEO_LEVEL_OFFSET.MAX_ERROR, LE),
|
|
436
|
-
clusters: view.getUint32(at + VGEO_LEVEL_OFFSET.CLUSTER_COUNT, LE),
|
|
437
|
-
groups: view.getUint32(at + VGEO_LEVEL_OFFSET.GROUP_COUNT, LE),
|
|
438
|
-
triangles: view.getUint32(at + VGEO_LEVEL_OFFSET.TRIANGLE_COUNT, LE),
|
|
439
|
-
});
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
// The frame walk is the format's own, shared with the writer and the validator — a file either
|
|
443
|
-
// of those can scan is a file this can scan.
|
|
444
|
-
const frames = vgeo_scan_frames(BinaryBuffer.fromArrayBuffer(array_buffer));
|
|
445
|
-
|
|
446
|
-
/*
|
|
447
|
-
Every page is decoded up front into one image laid out in page order, and everything below
|
|
448
|
-
addresses that image rather than the file. The runtime does the opposite — one page at a time,
|
|
449
|
-
wherever it has room — but this tool wants all of them at once and wants one address space to
|
|
450
|
-
read them through, and under a compressing codec the file simply does not hold a page's bytes.
|
|
451
|
-
|
|
452
|
-
Both refusals below happen before a byte is allocated. The second matters more than it looks:
|
|
453
|
-
`decoded_size` is four bytes of untrusted file, and honouring one that no block of that length
|
|
454
|
-
could produce turns corruption into an out-of-memory throw.
|
|
455
|
-
*/
|
|
456
|
-
let decoded_total = 0;
|
|
457
|
-
|
|
458
|
-
for (const frame of frames) {
|
|
459
|
-
if (frame.codec !== VGEO_CODEC_RAW && frame.codec !== VGEO_CODEC_LZ4) {
|
|
460
|
-
throw new Error(
|
|
461
|
-
`page ${frame.page_index} uses codec ${frame.codec};`
|
|
462
|
-
+ ` this reader decodes ${VGEO_CODEC_RAW} (raw) and ${VGEO_CODEC_LZ4} (lz4)`
|
|
463
|
-
);
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
if (frame.decoded_size > vgeo_frame_decode_bound(frame.codec, frame.stored_size)) {
|
|
467
|
-
throw new Error(
|
|
468
|
-
`page ${frame.page_index} claims ${frame.decoded_size} decoded bytes,`
|
|
469
|
-
+ ` more than codec ${frame.codec} could produce from ${frame.stored_size} stored`
|
|
470
|
-
);
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
result.stored_page_bytes += frame.stored_size;
|
|
474
|
-
|
|
475
|
-
decoded_total += frame.decoded_size;
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
const page_bytes = new Uint8Array(decoded_total);
|
|
479
|
-
|
|
480
|
-
result.page_bytes = page_bytes;
|
|
481
|
-
result.decoded_page_bytes = decoded_total;
|
|
482
|
-
|
|
483
|
-
/**
|
|
484
|
-
* The decoded pages, addressed a word at a time. A `DataView` has no alignment requirement,
|
|
485
|
-
* which is what a page's fields need: their offsets are the format's, not the browser's.
|
|
486
|
-
* @type {DataView}
|
|
487
|
-
*/
|
|
488
|
-
const page_data = new DataView(page_bytes.buffer, page_bytes.byteOffset, page_bytes.byteLength);
|
|
489
|
-
|
|
490
|
-
let page_cursor = 0;
|
|
491
|
-
let cluster_total = 0;
|
|
492
|
-
|
|
493
|
-
for (const frame of frames) {
|
|
494
|
-
const page = new VGeoPageView();
|
|
495
|
-
|
|
496
|
-
page.index = frame.page_index;
|
|
497
|
-
page.base = page_cursor;
|
|
498
|
-
page.codec = frame.codec;
|
|
499
|
-
page.stored_size = frame.stored_size;
|
|
500
|
-
page.decoded_size = frame.decoded_size;
|
|
501
|
-
|
|
502
|
-
page_cursor = vgeo_decode_frame_blob(page_bytes, page_cursor, file_bytes, frame);
|
|
503
|
-
|
|
504
|
-
// The child table is plaintext inside the frame, never compressed — which is what lets a
|
|
505
|
-
// runtime read fetch ranges without decoding anything. So it is read from the file.
|
|
506
|
-
page.child_pages = new Uint32Array(frame.child_page_count);
|
|
507
|
-
|
|
508
|
-
for (let i = 0; i < frame.child_page_count; i++) {
|
|
509
|
-
const entry = frame.frame_offset
|
|
510
|
-
+ VGEO_FRAME_HEADER_SIZE
|
|
511
|
-
+ i * VGEO_CHILD_TABLE_ENTRY_SIZE;
|
|
512
|
-
|
|
513
|
-
page.child_pages[i] = view.getUint32(entry + VGEO_CHILD_OFFSET.PAGE_INDEX, LE);
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
const group_count = page_data.getUint16(page.base + VGEO_PAGE_OFFSET.GROUP_COUNT, LE);
|
|
517
|
-
|
|
518
|
-
page.cluster_count = page_data.getUint16(page.base + VGEO_PAGE_OFFSET.CLUSTER_COUNT, LE);
|
|
519
|
-
page.min_level = page_data.getUint8(page.base + VGEO_PAGE_OFFSET.MIN_LEVEL);
|
|
520
|
-
page.max_level = page_data.getUint8(page.base + VGEO_PAGE_OFFSET.MAX_LEVEL);
|
|
521
|
-
page.node_count = page_data.getUint16(page.base + VGEO_PAGE_OFFSET.NODE_COUNT, LE);
|
|
522
|
-
page.payload_base = page.base
|
|
523
|
-
+ page_data.getUint32(page.base + VGEO_PAGE_OFFSET.PAYLOAD_OFFSET, LE);
|
|
524
|
-
page.cluster_base = cluster_total;
|
|
525
|
-
|
|
526
|
-
page.group_cluster_first = new Uint16Array(group_count);
|
|
527
|
-
page.group_cluster_count = new Uint16Array(group_count);
|
|
528
|
-
page.group_parent_count = new Uint16Array(group_count);
|
|
529
|
-
|
|
530
|
-
for (let i = 0; i < group_count; i++) {
|
|
531
|
-
const record = page.base + VGEO_PAGE_HEADER_SIZE + i * VGEO_GROUP_RECORD_SIZE;
|
|
532
|
-
|
|
533
|
-
page.group_cluster_first[i] = page_data.getUint16(record, LE);
|
|
534
|
-
page.group_cluster_count[i] = page_data.getUint16(record + 2, LE);
|
|
535
|
-
page.group_parent_count[i] = page_data.getUint16(record + 4, LE);
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
result.pages.push(page);
|
|
539
|
-
|
|
540
|
-
cluster_total += page.cluster_count;
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
result.cluster_count = cluster_total;
|
|
544
|
-
result.self_sphere = new Float32Array(cluster_total * 4);
|
|
545
|
-
result.self_error = new Float32Array(cluster_total);
|
|
546
|
-
result.parent_error = new Float32Array(cluster_total);
|
|
547
|
-
result.bounds_sphere = new Float32Array(cluster_total * 4);
|
|
548
|
-
result.child_ref = new Uint16Array(cluster_total);
|
|
549
|
-
result.child_group = new Uint16Array(cluster_total);
|
|
550
|
-
result.encoding_flags = new Uint32Array(cluster_total);
|
|
551
|
-
result.payload_offset = new Uint32Array(cluster_total);
|
|
552
|
-
result.vertex_count = new Uint8Array(cluster_total);
|
|
553
|
-
result.triangle_count = new Uint8Array(cluster_total);
|
|
554
|
-
result.page_of_cluster = new Uint32Array(cluster_total);
|
|
555
|
-
result.group_of_cluster = new Uint16Array(cluster_total);
|
|
556
|
-
|
|
557
|
-
for (const page of result.pages) {
|
|
558
|
-
const table = page.base
|
|
559
|
-
+ page_data.getUint32(page.base + VGEO_PAGE_OFFSET.CLUSTER_TABLE_OFFSET, LE);
|
|
560
|
-
|
|
561
|
-
for (let i = 0; i < page.cluster_count; i++) {
|
|
562
|
-
const record = table + i * VGEO_CLUSTER_RECORD_SIZE;
|
|
563
|
-
const id = page.cluster_base + i;
|
|
564
|
-
|
|
565
|
-
for (let c = 0; c < 4; c++) {
|
|
566
|
-
result.self_sphere[id * 4 + c] =
|
|
567
|
-
page_data.getFloat32(record + VGEO_CLUSTER_OFFSET.SELF_SPHERE + c * 4, LE);
|
|
568
|
-
result.bounds_sphere[id * 4 + c] =
|
|
569
|
-
page_data.getFloat32(record + VGEO_CLUSTER_OFFSET.BOUNDS_SPHERE + c * 4, LE);
|
|
570
|
-
}
|
|
571
|
-
|
|
572
|
-
result.self_error[id] = page_data.getFloat32(record + VGEO_CLUSTER_OFFSET.SELF_ERROR, LE);
|
|
573
|
-
result.parent_error[id] = page_data.getFloat32(record + VGEO_CLUSTER_OFFSET.PARENT_ERROR, LE);
|
|
574
|
-
result.child_ref[id] = page_data.getUint16(record + VGEO_CLUSTER_OFFSET.CHILD_REF, LE);
|
|
575
|
-
result.child_group[id] = page_data.getUint16(record + VGEO_CLUSTER_OFFSET.CHILD_GROUP, LE);
|
|
576
|
-
result.encoding_flags[id] =
|
|
577
|
-
page_data.getUint32(record + VGEO_CLUSTER_OFFSET.ENCODING_FLAGS, LE);
|
|
578
|
-
result.payload_offset[id] =
|
|
579
|
-
page_data.getUint32(record + VGEO_CLUSTER_OFFSET.PAYLOAD_OFFSET, LE);
|
|
580
|
-
result.vertex_count[id] = page_data.getUint8(record + VGEO_CLUSTER_OFFSET.VERTEX_COUNT);
|
|
581
|
-
result.triangle_count[id] = page_data.getUint8(record + VGEO_CLUSTER_OFFSET.TRIANGLE_COUNT);
|
|
582
|
-
result.page_of_cluster[id] = page.index;
|
|
583
|
-
|
|
584
|
-
if ((result.encoding_flags[id] & NORMAL_COMPRESSION_FLAG) === 0) {
|
|
585
|
-
result.per_vertex_normal_cluster_count++;
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
|
|
589
|
-
for (let group = 0; group < page.group_cluster_first.length; group++) {
|
|
590
|
-
const first = page.group_cluster_first[group];
|
|
591
|
-
const count = page.group_cluster_count[group];
|
|
592
|
-
|
|
593
|
-
for (let i = 0; i < count; i++) {
|
|
594
|
-
result.group_of_cluster[page.cluster_base + first + i] = group;
|
|
595
|
-
}
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
|
|
599
|
-
result.defects = vgeo_validate_container(BinaryBuffer.fromArrayBuffer(array_buffer));
|
|
600
|
-
|
|
601
|
-
return result;
|
|
602
|
-
}
|
|
603
|
-
|
|
604
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
605
|
-
// The cut
|
|
606
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
607
|
-
|
|
608
|
-
/**
|
|
609
|
-
* The view a cut is selected for. `VIRTUAL_GEOMETRY_DESIGN.md` §4: a cut is selected at one
|
|
610
|
-
* camera's distances and pixel budget, and is the wrong cut for any other.
|
|
611
|
-
*/
|
|
612
|
-
export class VGeoCutView {
|
|
613
|
-
/**
|
|
614
|
-
* Camera position, object space — the viewer draws at identity, so world and object agree.
|
|
615
|
-
* @type {Float32Array}
|
|
616
|
-
*/
|
|
617
|
-
eye = new Float32Array(3);
|
|
618
|
-
|
|
619
|
-
/**
|
|
620
|
-
* Pixels of permitted error. The one quality dial.
|
|
621
|
-
* @type {number}
|
|
622
|
-
*/
|
|
623
|
-
tau = 1;
|
|
624
|
-
|
|
625
|
-
/**
|
|
626
|
-
* Height of the render target, in pixels — the projection's numerator.
|
|
627
|
-
* @type {number}
|
|
628
|
-
*/
|
|
629
|
-
screen_height = 1080;
|
|
630
|
-
|
|
631
|
-
/**
|
|
632
|
-
* @type {number}
|
|
633
|
-
*/
|
|
634
|
-
fov_y = 60 * DEG_TO_RAD;
|
|
635
|
-
|
|
636
|
-
/**
|
|
637
|
-
* @type {boolean}
|
|
638
|
-
*/
|
|
639
|
-
cull_enabled = false;
|
|
640
|
-
|
|
641
|
-
/**
|
|
642
|
-
* Six normalized world-space planes, as {@link Camera.frustum} holds them.
|
|
643
|
-
* @type {Float32Array}
|
|
644
|
-
*/
|
|
645
|
-
frustum = new Float32Array(24);
|
|
646
|
-
}
|
|
647
|
-
|
|
648
|
-
/**
|
|
649
|
-
* What one traversal came to, including what it had to look at to get there.
|
|
650
|
-
*/
|
|
651
|
-
export class VGeoCut {
|
|
652
|
-
/**
|
|
653
|
-
* Selected clusters, by reader id.
|
|
654
|
-
* @type {number[]}
|
|
655
|
-
*/
|
|
656
|
-
clusters = [];
|
|
657
|
-
|
|
658
|
-
/**
|
|
659
|
-
* @type {number}
|
|
660
|
-
*/
|
|
661
|
-
triangle_count = 0;
|
|
662
|
-
|
|
663
|
-
/**
|
|
664
|
-
* @type {number}
|
|
665
|
-
*/
|
|
666
|
-
vertex_count = 0;
|
|
667
|
-
|
|
668
|
-
/**
|
|
669
|
-
* @type {number}
|
|
670
|
-
*/
|
|
671
|
-
groups_visited = 0;
|
|
672
|
-
|
|
673
|
-
/**
|
|
674
|
-
* @type {number}
|
|
675
|
-
*/
|
|
676
|
-
clusters_tested = 0;
|
|
677
|
-
|
|
678
|
-
/**
|
|
679
|
-
* Clusters whose subtree the frustum threw away, which is a whole region rather than one
|
|
680
|
-
* cluster — the reason culling belongs in the traversal and not after it.
|
|
681
|
-
* @type {number}
|
|
682
|
-
*/
|
|
683
|
-
culled = 0;
|
|
684
|
-
|
|
685
|
-
/**
|
|
686
|
-
* Distinct pages the traversal had to have resident.
|
|
687
|
-
* @type {number}
|
|
688
|
-
*/
|
|
689
|
-
pages_touched = 0;
|
|
690
|
-
|
|
691
|
-
/**
|
|
692
|
-
* @type {number}
|
|
693
|
-
*/
|
|
694
|
-
duration_ms = 0;
|
|
695
|
-
}
|
|
696
|
-
|
|
697
|
-
/**
|
|
698
|
-
* `VIRTUAL_GEOMETRY_DESIGN.md` §4: `err_px = r_e · screen_height / (2 · tan(fov_y / 2) · d)`, with
|
|
699
|
-
* `d` the distance to the *closest point* of the sphere.
|
|
700
|
-
*
|
|
701
|
-
* A zero error projects to zero unconditionally — otherwise a leaf, whose error is exactly zero,
|
|
702
|
-
* would become undrawable the moment the camera entered its sphere.
|
|
703
|
-
*
|
|
704
|
-
* @param {number} error object-space `r_e`; `+Infinity` for a root's parent
|
|
705
|
-
* @param {Float32Array} spheres
|
|
706
|
-
* @param {number} base index of the sphere's first component
|
|
707
|
-
* @param {Float32Array} eye
|
|
708
|
-
* @param {number} k `screen_height / (2 · tan(fov_y / 2))`, hoisted out of the loop
|
|
709
|
-
* @returns {number} pixels
|
|
710
|
-
*/
|
|
711
|
-
function project_error(error, spheres, base, eye, k) {
|
|
712
|
-
if (error === 0) {
|
|
713
|
-
return 0;
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
const dx = eye[0] - spheres[base];
|
|
717
|
-
const dy = eye[1] - spheres[base + 1];
|
|
718
|
-
const dz = eye[2] - spheres[base + 2];
|
|
719
|
-
|
|
720
|
-
const distance = Math.sqrt(dx * dx + dy * dy + dz * dz) - spheres[base + 3];
|
|
721
|
-
|
|
722
|
-
if (distance <= 0) {
|
|
723
|
-
// camera inside the sphere; the projection is unbounded and the cluster must refine
|
|
724
|
-
return Number.POSITIVE_INFINITY;
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
return (error * k) / distance;
|
|
728
|
-
}
|
|
729
|
-
|
|
730
|
-
/**
|
|
731
|
-
* Whether a sphere is entirely outside the frustum.
|
|
732
|
-
*
|
|
733
|
-
* Only the five finite planes are tested. The projection is infinite reverse-Z, so the far plane's
|
|
734
|
-
* row is degenerate and normalizing it produces nothing a test can use.
|
|
735
|
-
*
|
|
736
|
-
* @param {Float32Array} frustum
|
|
737
|
-
* @param {Float32Array} spheres
|
|
738
|
-
* @param {number} base
|
|
739
|
-
* @returns {boolean}
|
|
740
|
-
*/
|
|
741
|
-
function sphere_outside_frustum(frustum, spheres, base) {
|
|
742
|
-
const x = spheres[base];
|
|
743
|
-
const y = spheres[base + 1];
|
|
744
|
-
const z = spheres[base + 2];
|
|
745
|
-
const radius = spheres[base + 3];
|
|
746
|
-
|
|
747
|
-
for (let plane = 0; plane < 5; plane++) {
|
|
748
|
-
const o = plane * 4;
|
|
749
|
-
|
|
750
|
-
const distance = frustum[o] * x + frustum[o + 1] * y + frustum[o + 2] * z + frustum[o + 3];
|
|
751
|
-
|
|
752
|
-
if (distance < -radius) {
|
|
753
|
-
return true;
|
|
754
|
-
}
|
|
755
|
-
}
|
|
756
|
-
|
|
757
|
-
return false;
|
|
758
|
-
}
|
|
759
|
-
|
|
760
|
-
/**
|
|
761
|
-
* Select the cut for a view, by descending the page graph.
|
|
762
|
-
*
|
|
763
|
-
* A traversal rather than a flat pass over every cluster, per design §4 — and it gets the cut rule's
|
|
764
|
-
* first half for free. The rule is `project(parent) > τ AND project(self) ≤ τ`; a group is only ever
|
|
765
|
-
* reached by descending *through* the cluster whose step consumed it, and that descent happened
|
|
766
|
-
* precisely because the step projected above τ. Every cluster of a group shares that step's sphere
|
|
767
|
-
* and error, so the parent test is satisfied by the act of arriving.
|
|
768
|
-
*
|
|
769
|
-
* The residency clamp degenerates here: the whole file is in memory, so nothing is ever
|
|
770
|
-
* non-selectable and a leaf is the only reason to stop early.
|
|
771
|
-
*
|
|
772
|
-
* @param {VGeoContainer} container
|
|
773
|
-
* @param {VGeoCutView} view
|
|
774
|
-
* @returns {VGeoCut}
|
|
775
|
-
*/
|
|
776
|
-
export function vgeo_select_cut(container, view) {
|
|
777
|
-
assert.greaterThan(container.pages.length, 0, 'container.pages.length');
|
|
778
|
-
|
|
779
|
-
const started = performance.now();
|
|
780
|
-
|
|
781
|
-
const cut = new VGeoCut();
|
|
782
|
-
|
|
783
|
-
const k = view.screen_height / (2 * Math.tan(view.fov_y * 0.5));
|
|
784
|
-
|
|
785
|
-
/**
|
|
786
|
-
* Groups already queued, keyed `page · 65536 + group`. A group is referenced by every sibling
|
|
787
|
-
* cluster of the step that consumed it, so without this the traversal would expand it once per
|
|
788
|
-
* parent and the cut would carry duplicates.
|
|
789
|
-
*
|
|
790
|
-
* @type {Set<number>}
|
|
791
|
-
*/
|
|
792
|
-
const queued = new Set();
|
|
793
|
-
|
|
794
|
-
/**
|
|
795
|
-
* @type {Set<number>}
|
|
796
|
-
*/
|
|
797
|
-
const pages = new Set();
|
|
798
|
-
|
|
799
|
-
/**
|
|
800
|
-
* Page index and group index, interleaved.
|
|
801
|
-
* @type {number[]}
|
|
802
|
-
*/
|
|
803
|
-
const stack = [];
|
|
804
|
-
|
|
805
|
-
const root = container.pages[0];
|
|
806
|
-
|
|
807
|
-
for (let group = 0; group < root.group_parent_count.length; group++) {
|
|
808
|
-
// no cluster anywhere refines into this group, so it is the top of the DAG and selectable
|
|
809
|
-
// with nothing above it
|
|
810
|
-
if (root.group_parent_count[group] === 0) {
|
|
811
|
-
queued.add(group);
|
|
812
|
-
stack.push(0, group);
|
|
813
|
-
}
|
|
814
|
-
}
|
|
815
|
-
|
|
816
|
-
while (stack.length > 0) {
|
|
817
|
-
const group = stack.pop();
|
|
818
|
-
const page_index = stack.pop();
|
|
819
|
-
|
|
820
|
-
const page = container.pages[page_index];
|
|
821
|
-
|
|
822
|
-
cut.groups_visited++;
|
|
823
|
-
pages.add(page_index);
|
|
824
|
-
|
|
825
|
-
const first = page.group_cluster_first[group];
|
|
826
|
-
const count = page.group_cluster_count[group];
|
|
827
|
-
|
|
828
|
-
for (let i = 0; i < count; i++) {
|
|
829
|
-
const id = page.cluster_base + first + i;
|
|
830
|
-
|
|
831
|
-
cut.clusters_tested++;
|
|
832
|
-
|
|
833
|
-
/*
|
|
834
|
-
Culling on `self_sphere` rather than on the tight `bounds_sphere`, because this decides
|
|
835
|
-
the subtree as well as the cluster: monotonicity makes a cluster's self sphere contain
|
|
836
|
-
every descendant's geometry, so a self sphere outside the frustum means nothing under
|
|
837
|
-
it can be on screen either.
|
|
838
|
-
*/
|
|
839
|
-
if (view.cull_enabled
|
|
840
|
-
&& sphere_outside_frustum(view.frustum, container.self_sphere, id * 4)) {
|
|
841
|
-
cut.culled++;
|
|
842
|
-
continue;
|
|
843
|
-
}
|
|
844
|
-
|
|
845
|
-
const child_ref = container.child_ref[id];
|
|
846
|
-
|
|
847
|
-
const self_px = project_error(
|
|
848
|
-
container.self_error[id], container.self_sphere, id * 4, view.eye, k
|
|
849
|
-
);
|
|
850
|
-
|
|
851
|
-
if (self_px <= view.tau || child_ref === VGEO_NO_CHILD) {
|
|
852
|
-
cut.clusters.push(id);
|
|
853
|
-
cut.triangle_count += container.triangle_count[id];
|
|
854
|
-
cut.vertex_count += container.vertex_count[id];
|
|
855
|
-
continue;
|
|
856
|
-
}
|
|
857
|
-
|
|
858
|
-
const child_page = child_ref === VGEO_SAME_PAGE ? page_index : page.child_pages[child_ref];
|
|
859
|
-
const child_group = container.child_group[id];
|
|
860
|
-
|
|
861
|
-
const key = child_page * 65536 + child_group;
|
|
862
|
-
|
|
863
|
-
if (!queued.has(key)) {
|
|
864
|
-
queued.add(key);
|
|
865
|
-
stack.push(child_page, child_group);
|
|
866
|
-
}
|
|
867
|
-
}
|
|
868
|
-
}
|
|
869
|
-
|
|
870
|
-
cut.pages_touched = pages.size;
|
|
871
|
-
cut.duration_ms = performance.now() - started;
|
|
872
|
-
|
|
873
|
-
return cut;
|
|
874
|
-
}
|
|
875
|
-
|
|
876
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
877
|
-
// Turning a cut into drawable geometry
|
|
878
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
879
|
-
|
|
880
|
-
/**
|
|
881
|
-
* What a cluster's colour is keyed on.
|
|
882
|
-
*
|
|
883
|
-
* The two normal modes are not keyed on the cluster at all: they paint every vertex with its own
|
|
884
|
-
* direction, and the cluster boundaries go with it. `stored normal` is the container's own
|
|
885
|
-
* {@link VGEO_ATTRIBUTE.NORMAL}, decoded out of the payload — the only mode that shows an attribute
|
|
886
|
-
* the file carries rather than something derived from it. `geometric normal` is the area-weighted
|
|
887
|
-
* normal of the decoded triangles, which is what every other mode shades with. The pair is the
|
|
888
|
-
* point: they agree where the builder's normals still describe the geometry it shipped, and a
|
|
889
|
-
* source with no normals at all makes the first one flat.
|
|
890
|
-
*
|
|
891
|
-
* @enum {string}
|
|
892
|
-
*/
|
|
893
|
-
export const VGEO_COLOR_MODE = {
|
|
894
|
-
Cluster: 'cluster',
|
|
895
|
-
Group: 'group',
|
|
896
|
-
Page: 'page',
|
|
897
|
-
Error: 'error',
|
|
898
|
-
StoredNormal: 'stored normal',
|
|
899
|
-
GeometricNormal: 'geometric normal',
|
|
900
|
-
};
|
|
901
|
-
|
|
902
|
-
/**
|
|
903
|
-
* Key colours are spread by the golden ratio so that adjacent ids never land on adjacent hues —
|
|
904
|
-
* neighbouring clusters are exactly what has to be told apart.
|
|
905
|
-
* @type {number}
|
|
906
|
-
*/
|
|
907
|
-
const HUE_STEP = 0.6180339887498949;
|
|
908
|
-
|
|
909
|
-
/**
|
|
910
|
-
* @param {number} hue in `[0, 1)`
|
|
911
|
-
* @param {number} saturation
|
|
912
|
-
* @param {number} value
|
|
913
|
-
* @param {Float32Array} out
|
|
914
|
-
* @param {number} offset
|
|
915
|
-
*/
|
|
916
|
-
function hsv_to_rgb(hue, saturation, value, out, offset) {
|
|
917
|
-
const sector = hue * 6;
|
|
918
|
-
const i = Math.floor(sector);
|
|
919
|
-
const f = sector - i;
|
|
920
|
-
|
|
921
|
-
const p = value * (1 - saturation);
|
|
922
|
-
const q = value * (1 - saturation * f);
|
|
923
|
-
const t = value * (1 - saturation * (1 - f));
|
|
924
|
-
|
|
925
|
-
switch (i % 6) {
|
|
926
|
-
case 0:
|
|
927
|
-
out[offset] = value; out[offset + 1] = t; out[offset + 2] = p;
|
|
928
|
-
break;
|
|
929
|
-
case 1:
|
|
930
|
-
out[offset] = q; out[offset + 1] = value; out[offset + 2] = p;
|
|
931
|
-
break;
|
|
932
|
-
case 2:
|
|
933
|
-
out[offset] = p; out[offset + 1] = value; out[offset + 2] = t;
|
|
934
|
-
break;
|
|
935
|
-
case 3:
|
|
936
|
-
out[offset] = p; out[offset + 1] = q; out[offset + 2] = value;
|
|
937
|
-
break;
|
|
938
|
-
case 4:
|
|
939
|
-
out[offset] = t; out[offset + 1] = p; out[offset + 2] = value;
|
|
940
|
-
break;
|
|
941
|
-
default:
|
|
942
|
-
out[offset] = value; out[offset + 1] = p; out[offset + 2] = q;
|
|
943
|
-
break;
|
|
944
|
-
}
|
|
945
|
-
}
|
|
946
|
-
|
|
947
|
-
/**
|
|
948
|
-
* Key lights, baked into vertex colour.
|
|
949
|
-
*
|
|
950
|
-
* The direct path carries position and colour per vertex and nothing else — no normal reaches the
|
|
951
|
-
* shader — so shading happens here, once per cut, against normals derived from the decoded
|
|
952
|
-
* triangles. Two opposed lights and a generous ambient, so that no part of the surface is black and
|
|
953
|
-
* every cluster's colour stays readable wherever it faces.
|
|
954
|
-
*
|
|
955
|
-
* @type {number[]}
|
|
956
|
-
*/
|
|
957
|
-
const KEY_LIGHT = [0.35, 0.78, 0.52];
|
|
958
|
-
|
|
959
|
-
/**
|
|
960
|
-
* @type {number[]}
|
|
961
|
-
*/
|
|
962
|
-
const FILL_LIGHT = [-0.55, -0.25, -0.79];
|
|
963
|
-
|
|
964
|
-
/**
|
|
965
|
-
* Ceiling on a baked colour's brightest channel.
|
|
966
|
-
*
|
|
967
|
-
* The pass draws at `AfterTransparency`, so everything it writes still goes through the tonemapper,
|
|
968
|
-
* and the tonemapper desaturates as it approaches white. Pushed to 1.0 the clusters come out pastel
|
|
969
|
-
* and stop being tellable apart, which defeats the only thing the colour is for — so the shading
|
|
970
|
-
* range is deliberately kept below it.
|
|
971
|
-
*
|
|
972
|
-
* @type {number}
|
|
973
|
-
*/
|
|
974
|
-
const COLOR_CEILING = 0.9;
|
|
975
|
-
|
|
976
|
-
/**
|
|
977
|
-
* One cluster's worth of decoded stored normals, reused across clusters.
|
|
978
|
-
*
|
|
979
|
-
* {@link VGEO_MAX_CLUSTER_VERTEX_COUNT} is the format's ceiling on a cluster and
|
|
980
|
-
* {@link vgeo_validate_container} holds every file to it, so this is never short.
|
|
981
|
-
*
|
|
982
|
-
* @type {Float32Array}
|
|
983
|
-
*/
|
|
984
|
-
const stored_normals = new Float32Array(VGEO_MAX_CLUSTER_VERTEX_COUNT * 3);
|
|
985
|
-
|
|
986
|
-
/**
|
|
987
|
-
* One decoded direction, on its way from the octahedral codec into a caller's array.
|
|
988
|
-
* @type {Float32Array}
|
|
989
|
-
*/
|
|
990
|
-
const scratch_direction = new Float32Array(3);
|
|
991
|
-
|
|
992
|
-
/**
|
|
993
|
-
* Decode one cluster's stored normal section into unit vectors.
|
|
994
|
-
*
|
|
995
|
-
* The section is one octahedral `u32` per vertex, or a single word for the whole cluster when the
|
|
996
|
-
* encoder found every vertex agreeing — which is also what a source lacking normals encodes to, so
|
|
997
|
-
* the constant case is the ordinary one and not an exception. A stride of zero is what reads it:
|
|
998
|
-
* every vertex fetches the same word, and the loop does not have to know which case it is in.
|
|
999
|
-
*
|
|
1000
|
-
* @param {VGeoContainer} container
|
|
1001
|
-
* @param {DataView} data over the whole file
|
|
1002
|
-
* @param {number} id reader cluster id
|
|
1003
|
-
* @param {Float32Array} out at least `3 * container.vertex_count[id]` long
|
|
1004
|
-
*/
|
|
1005
|
-
function vgeo_read_cluster_normals(container, data, id, out) {
|
|
1006
|
-
const vertex_count = container.vertex_count[id];
|
|
1007
|
-
|
|
1008
|
-
// out is sized for the format's ceiling, so this fires only on a file that already broke it —
|
|
1009
|
-
// and a short write would come out as a handful of quietly wrong colours instead
|
|
1010
|
-
assert.greaterThanOrEqual(out.length, vertex_count * 3, 'out must hold three components per cluster vertex');
|
|
1011
|
-
|
|
1012
|
-
const encoding_flags = container.encoding_flags[id];
|
|
1013
|
-
|
|
1014
|
-
const page = container.pages[container.page_of_cluster[id]];
|
|
1015
|
-
|
|
1016
|
-
const at = page.payload_base
|
|
1017
|
-
+ container.payload_offset[id]
|
|
1018
|
-
+ vgeo_payload_attribute_offset(
|
|
1019
|
-
VGEO_ATTRIBUTE.NORMAL, vertex_count, container.triangle_count[id], encoding_flags
|
|
1020
|
-
);
|
|
1021
|
-
|
|
1022
|
-
const stride = (encoding_flags & NORMAL_COMPRESSION_FLAG) === 0 ? 4 : 0;
|
|
1023
|
-
|
|
1024
|
-
for (let i = 0; i < vertex_count; i++) {
|
|
1025
|
-
const word = data.getUint32(at + i * stride, LE);
|
|
1026
|
-
|
|
1027
|
-
const u = ((word & 0xFFFF) / UINT16_MAX) * 2 - 1;
|
|
1028
|
-
const v = (((word >>> 16) & 0xFFFF) / UINT16_MAX) * 2 - 1;
|
|
1029
|
-
|
|
1030
|
-
decode_octahedron_to_unit(scratch_direction, 0, u, v);
|
|
1031
|
-
|
|
1032
|
-
/*
|
|
1033
|
-
The encoder hands the octahedral codec `(nx, nz, ny)` — Shade's own convention, matched so
|
|
1034
|
-
that a `.vgeo` payload is byte for byte a `MeshletBatch` one — so the decode comes back in
|
|
1035
|
-
that order and has to be put back.
|
|
1036
|
-
*/
|
|
1037
|
-
out[i * 3] = scratch_direction[0];
|
|
1038
|
-
out[i * 3 + 1] = scratch_direction[2];
|
|
1039
|
-
out[i * 3 + 2] = scratch_direction[1];
|
|
1040
|
-
}
|
|
1041
|
-
}
|
|
1042
|
-
|
|
1043
|
-
/**
|
|
1044
|
-
* Paint a run of vertices with their own directions and no shading: `rgb = n · 0.5 + 0.5`, scaled
|
|
1045
|
-
* by {@link COLOR_CEILING} for the same reason every other mode is.
|
|
1046
|
-
*
|
|
1047
|
-
* Unlit on purpose. A direction multiplied by how much light it happens to catch is unreadable
|
|
1048
|
-
* exactly where reading it matters — a normal facing away from both lights would come out black,
|
|
1049
|
-
* and black is not a direction.
|
|
1050
|
-
*
|
|
1051
|
-
* The tonemapper still has the last word on what reaches the screen, so this is a direction to be
|
|
1052
|
-
* read and not a value to be measured.
|
|
1053
|
-
*
|
|
1054
|
-
* @param {Float32Array} colors four per vertex
|
|
1055
|
-
* @param {number} first index of the run's first vertex
|
|
1056
|
-
* @param {number} count vertices in the run
|
|
1057
|
-
* @param {Float32Array} directions unit vectors, three components apiece
|
|
1058
|
-
* @param {number} directions_offset index of the run's first component within `directions`
|
|
1059
|
-
*/
|
|
1060
|
-
function paint_directions(colors, first, count, directions, directions_offset) {
|
|
1061
|
-
for (let i = 0; i < count; i++) {
|
|
1062
|
-
const d = directions_offset + i * 3;
|
|
1063
|
-
const o = (first + i) * 4;
|
|
1064
|
-
|
|
1065
|
-
colors[o] = COLOR_CEILING * (directions[d] * 0.5 + 0.5);
|
|
1066
|
-
colors[o + 1] = COLOR_CEILING * (directions[d + 1] * 0.5 + 0.5);
|
|
1067
|
-
colors[o + 2] = COLOR_CEILING * (directions[d + 2] * 0.5 + 0.5);
|
|
1068
|
-
colors[o + 3] = 1;
|
|
1069
|
-
}
|
|
1070
|
-
}
|
|
1071
|
-
|
|
1072
|
-
/**
|
|
1073
|
-
* A cut, decoded into one geometry.
|
|
1074
|
-
*
|
|
1075
|
-
* Nothing about it depends on where the camera is: the mesh is drawn solid and the depth buffer
|
|
1076
|
-
* orders it, so the triangle list is uploaded once when the cut is taken and never touched again.
|
|
1077
|
-
*/
|
|
1078
|
-
export class VGeoCutGeometry {
|
|
1079
|
-
/**
|
|
1080
|
-
* Position and colour, indexed by {@link triangles}.
|
|
1081
|
-
* @type {Geometry}
|
|
1082
|
-
*/
|
|
1083
|
-
geometry = new Geometry();
|
|
1084
|
-
|
|
1085
|
-
/**
|
|
1086
|
-
* `3 * triangle_count` — the full triangle list, in cluster order, and the geometry's index.
|
|
1087
|
-
* @type {Uint32Array}
|
|
1088
|
-
*/
|
|
1089
|
-
triangles = new Uint32Array(0);
|
|
1090
|
-
|
|
1091
|
-
/**
|
|
1092
|
-
* @type {number}
|
|
1093
|
-
*/
|
|
1094
|
-
triangle_count = 0;
|
|
1095
|
-
|
|
1096
|
-
/**
|
|
1097
|
-
* @type {number}
|
|
1098
|
-
*/
|
|
1099
|
-
vertex_count = 0;
|
|
1100
|
-
}
|
|
1101
|
-
|
|
1102
|
-
/**
|
|
1103
|
-
* Decode the selected clusters into one geometry.
|
|
1104
|
-
*
|
|
1105
|
-
* Payloads are `SHADE_MESHLET_V1`'s (format §8): the index section first, three 8-bit local indices
|
|
1106
|
-
* per triangle, then the attribute sections. Position is always read — it is raw float32, never
|
|
1107
|
-
* constant-compressed — and the stored normal section only when a normal display asks for it,
|
|
1108
|
-
* because the direct path carries position and colour per vertex and nowhere to put the rest.
|
|
1109
|
-
*
|
|
1110
|
-
* @param {VGeoContainer} container
|
|
1111
|
-
* @param {VGeoCut} cut
|
|
1112
|
-
* @param {VGEO_COLOR_MODE} color_mode
|
|
1113
|
-
* @returns {VGeoCutGeometry}
|
|
1114
|
-
*/
|
|
1115
|
-
export function vgeo_build_cut_geometry(container, cut, color_mode) {
|
|
1116
|
-
const vertex_count = cut.vertex_count;
|
|
1117
|
-
const triangle_count = cut.triangle_count;
|
|
1118
|
-
|
|
1119
|
-
const positions = new Float32Array(vertex_count * 3);
|
|
1120
|
-
const colors = new Float32Array(vertex_count * 4);
|
|
1121
|
-
const normals = new Float32Array(vertex_count * 3);
|
|
1122
|
-
|
|
1123
|
-
const result = new VGeoCutGeometry();
|
|
1124
|
-
|
|
1125
|
-
result.triangles = new Uint32Array(triangle_count * 3);
|
|
1126
|
-
result.triangle_count = triangle_count;
|
|
1127
|
-
result.vertex_count = vertex_count;
|
|
1128
|
-
|
|
1129
|
-
const bytes = container.page_bytes;
|
|
1130
|
-
const triangles = result.triangles;
|
|
1131
|
-
|
|
1132
|
-
/**
|
|
1133
|
-
* The decoded pages, addressed a word at a time. A `DataView` has no alignment requirement,
|
|
1134
|
-
* which is what an encoded attribute word needs: its offset is the format's, not the browser's.
|
|
1135
|
-
* @type {DataView}
|
|
1136
|
-
*/
|
|
1137
|
-
const data = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
1138
|
-
|
|
1139
|
-
/*
|
|
1140
|
-
The error ramp spans the *cut's* own errors, not the file's. Normalizing against the coarsest
|
|
1141
|
-
error in the container would be defensible and useless: a fine cut's clusters all sit orders of
|
|
1142
|
-
magnitude below it and the whole model comes out one flat colour. What the question actually is
|
|
1143
|
-
— which parts of this cut settled for more error than the rest — is a question about this cut.
|
|
1144
|
-
*/
|
|
1145
|
-
let error_low = Number.POSITIVE_INFINITY;
|
|
1146
|
-
let error_high = 0;
|
|
1147
|
-
|
|
1148
|
-
for (const id of cut.clusters) {
|
|
1149
|
-
error_low = Math.min(error_low, container.self_error[id]);
|
|
1150
|
-
error_high = Math.max(error_high, container.self_error[id]);
|
|
1151
|
-
}
|
|
1152
|
-
|
|
1153
|
-
const error_span = error_high - error_low;
|
|
1154
|
-
|
|
1155
|
-
/**
|
|
1156
|
-
* `[first vertex, first triangle]` of each selected cluster, so colour can be applied per
|
|
1157
|
-
* cluster after the normals are known.
|
|
1158
|
-
* @type {Uint32Array}
|
|
1159
|
-
*/
|
|
1160
|
-
const cluster_vertex_first = new Uint32Array(cut.clusters.length);
|
|
1161
|
-
|
|
1162
|
-
let vertex_cursor = 0;
|
|
1163
|
-
let triangle_cursor = 0;
|
|
1164
|
-
|
|
1165
|
-
for (let c = 0; c < cut.clusters.length; c++) {
|
|
1166
|
-
const id = cut.clusters[c];
|
|
1167
|
-
|
|
1168
|
-
const cluster_vertices = container.vertex_count[id];
|
|
1169
|
-
const cluster_triangles = container.triangle_count[id];
|
|
1170
|
-
|
|
1171
|
-
const page = container.pages[container.page_of_cluster[id]];
|
|
1172
|
-
const payload = page.payload_base + container.payload_offset[id];
|
|
1173
|
-
|
|
1174
|
-
cluster_vertex_first[c] = vertex_cursor;
|
|
1175
|
-
|
|
1176
|
-
const position_at = payload + vgeo_payload_attribute_offset(
|
|
1177
|
-
VGEO_ATTRIBUTE.POSITION,
|
|
1178
|
-
cluster_vertices,
|
|
1179
|
-
cluster_triangles,
|
|
1180
|
-
container.encoding_flags[id]
|
|
1181
|
-
);
|
|
1182
|
-
|
|
1183
|
-
/*
|
|
1184
|
-
Copied out rather than viewed in place: a Float32Array view demands 4-byte alignment
|
|
1185
|
-
against the *file's* buffer, which is a property of where the browser happened to put it
|
|
1186
|
-
and not something the format promises.
|
|
1187
|
-
*/
|
|
1188
|
-
const coordinates = new Float32Array(
|
|
1189
|
-
bytes.slice(position_at, position_at + cluster_vertices * 12).buffer
|
|
1190
|
-
);
|
|
1191
|
-
|
|
1192
|
-
positions.set(coordinates, vertex_cursor * 3);
|
|
1193
|
-
|
|
1194
|
-
for (let i = 0; i < cluster_triangles * 3; i++) {
|
|
1195
|
-
triangles[triangle_cursor * 3 + i] = vertex_cursor + bytes[payload + i];
|
|
1196
|
-
}
|
|
1197
|
-
|
|
1198
|
-
vertex_cursor += cluster_vertices;
|
|
1199
|
-
triangle_cursor += cluster_triangles;
|
|
1200
|
-
}
|
|
1201
|
-
|
|
1202
|
-
assert.equal(vertex_cursor, vertex_count, 'decoded vertices must match the cut');
|
|
1203
|
-
assert.equal(triangle_cursor, triangle_count, 'decoded triangles must match the cut');
|
|
1204
|
-
|
|
1205
|
-
// Area-weighted vertex normals, which is all shading reads. Clusters share no vertices, so
|
|
1206
|
-
// accumulating over the whole list still gives each cluster its own smoothing — the crease that
|
|
1207
|
-
// leaves at a cluster seam is a feature here, not an artefact.
|
|
1208
|
-
for (let t = 0; t < triangle_count; t++) {
|
|
1209
|
-
const a = triangles[t * 3] * 3;
|
|
1210
|
-
const b = triangles[t * 3 + 1] * 3;
|
|
1211
|
-
const c = triangles[t * 3 + 2] * 3;
|
|
1212
|
-
|
|
1213
|
-
const abx = positions[b] - positions[a];
|
|
1214
|
-
const aby = positions[b + 1] - positions[a + 1];
|
|
1215
|
-
const abz = positions[b + 2] - positions[a + 2];
|
|
1216
|
-
|
|
1217
|
-
const acx = positions[c] - positions[a];
|
|
1218
|
-
const acy = positions[c + 1] - positions[a + 1];
|
|
1219
|
-
const acz = positions[c + 2] - positions[a + 2];
|
|
1220
|
-
|
|
1221
|
-
const nx = aby * acz - abz * acy;
|
|
1222
|
-
const ny = abz * acx - abx * acz;
|
|
1223
|
-
const nz = abx * acy - aby * acx;
|
|
1224
|
-
|
|
1225
|
-
normals[a] += nx; normals[a + 1] += ny; normals[a + 2] += nz;
|
|
1226
|
-
normals[b] += nx; normals[b + 1] += ny; normals[b + 2] += nz;
|
|
1227
|
-
normals[c] += nx; normals[c + 1] += ny; normals[c + 2] += nz;
|
|
1228
|
-
}
|
|
1229
|
-
|
|
1230
|
-
// Normalized here rather than where they are read, because two things read them now — the
|
|
1231
|
-
// shading, and `geometric normal` — and a direction is the same direction for both.
|
|
1232
|
-
for (let v = 0; v < vertex_count; v++) {
|
|
1233
|
-
const n = v * 3;
|
|
1234
|
-
|
|
1235
|
-
const length = Math.hypot(normals[n], normals[n + 1], normals[n + 2]);
|
|
1236
|
-
|
|
1237
|
-
// A vertex left with no area around it has no direction to give. Zero shades as ambient and
|
|
1238
|
-
// displays as mid grey, and both say "nothing here" rather than inventing an answer.
|
|
1239
|
-
const scale = length > 0 ? 1 / length : 0;
|
|
1240
|
-
|
|
1241
|
-
normals[n] *= scale;
|
|
1242
|
-
normals[n + 1] *= scale;
|
|
1243
|
-
normals[n + 2] *= scale;
|
|
1244
|
-
}
|
|
1245
|
-
|
|
1246
|
-
const tint = new Float32Array(3);
|
|
1247
|
-
|
|
1248
|
-
for (let c = 0; c < cut.clusters.length; c++) {
|
|
1249
|
-
const id = cut.clusters[c];
|
|
1250
|
-
|
|
1251
|
-
const first = cluster_vertex_first[c];
|
|
1252
|
-
const count = container.vertex_count[id];
|
|
1253
|
-
|
|
1254
|
-
if (color_mode === VGEO_COLOR_MODE.StoredNormal) {
|
|
1255
|
-
vgeo_read_cluster_normals(container, data, id, stored_normals);
|
|
1256
|
-
|
|
1257
|
-
paint_directions(colors, first, count, stored_normals, 0);
|
|
1258
|
-
|
|
1259
|
-
continue;
|
|
1260
|
-
}
|
|
1261
|
-
|
|
1262
|
-
if (color_mode === VGEO_COLOR_MODE.GeometricNormal) {
|
|
1263
|
-
paint_directions(colors, first, count, normals, first * 3);
|
|
1264
|
-
|
|
1265
|
-
continue;
|
|
1266
|
-
}
|
|
1267
|
-
|
|
1268
|
-
let key;
|
|
1269
|
-
|
|
1270
|
-
switch (color_mode) {
|
|
1271
|
-
case VGEO_COLOR_MODE.Group:
|
|
1272
|
-
key = container.page_of_cluster[id] * 65536 + container.group_of_cluster[id];
|
|
1273
|
-
break;
|
|
1274
|
-
case VGEO_COLOR_MODE.Page:
|
|
1275
|
-
key = container.page_of_cluster[id];
|
|
1276
|
-
break;
|
|
1277
|
-
default:
|
|
1278
|
-
key = id;
|
|
1279
|
-
break;
|
|
1280
|
-
}
|
|
1281
|
-
|
|
1282
|
-
if (color_mode === VGEO_COLOR_MODE.Error) {
|
|
1283
|
-
// cool where the cut is refined, hot where it settled for the most error
|
|
1284
|
-
const t = error_span > 0 ? (container.self_error[id] - error_low) / error_span : 0;
|
|
1285
|
-
|
|
1286
|
-
hsv_to_rgb(0.68 * (1 - t), 0.9, 1, tint, 0);
|
|
1287
|
-
} else {
|
|
1288
|
-
hsv_to_rgb((key * HUE_STEP) % 1, 0.85, 1, tint, 0);
|
|
1289
|
-
}
|
|
1290
|
-
|
|
1291
|
-
const end = first + count;
|
|
1292
|
-
|
|
1293
|
-
for (let v = first; v < end; v++) {
|
|
1294
|
-
const n = v * 3;
|
|
1295
|
-
|
|
1296
|
-
const nx = normals[n];
|
|
1297
|
-
const ny = normals[n + 1];
|
|
1298
|
-
const nz = normals[n + 2];
|
|
1299
|
-
|
|
1300
|
-
const key_term = Math.max(
|
|
1301
|
-
0, nx * KEY_LIGHT[0] + ny * KEY_LIGHT[1] + nz * KEY_LIGHT[2]
|
|
1302
|
-
);
|
|
1303
|
-
|
|
1304
|
-
const fill_term = Math.max(
|
|
1305
|
-
0, nx * FILL_LIGHT[0] + ny * FILL_LIGHT[1] + nz * FILL_LIGHT[2]
|
|
1306
|
-
);
|
|
1307
|
-
|
|
1308
|
-
const shade = COLOR_CEILING * (0.22 + 0.60 * key_term + 0.18 * fill_term);
|
|
1309
|
-
|
|
1310
|
-
colors[v * 4] = tint[0] * shade;
|
|
1311
|
-
colors[v * 4 + 1] = tint[1] * shade;
|
|
1312
|
-
colors[v * 4 + 2] = tint[2] * shade;
|
|
1313
|
-
colors[v * 4 + 3] = 1;
|
|
1314
|
-
}
|
|
1315
|
-
}
|
|
1316
|
-
|
|
1317
|
-
result.geometry.addAttribute(Attribute.from(positions, 3, StandardAttributes.Position));
|
|
1318
|
-
result.geometry.addAttribute(Attribute.from(colors, 4, StandardAttributes.Color));
|
|
1319
|
-
result.geometry.index = Attribute.from(result.triangles, 1, StandardAttributes.Index);
|
|
1320
|
-
|
|
1321
|
-
return result;
|
|
1322
|
-
}
|
|
1323
|
-
|
|
1324
|
-
/**
|
|
1325
|
-
* Clear the frame's depth, so that the cut is the only thing in it.
|
|
1326
|
-
*
|
|
1327
|
-
* **The renderer does not do this when there is nothing to rasterize.** Depth is cleared as a side
|
|
1328
|
-
* effect of drawing the first opaque bucket, and this viewer's `Scene` holds a light and no meshes,
|
|
1329
|
-
* so that draw never happens. The renderer also ping-pongs two depth textures frame to frame — so
|
|
1330
|
-
* left alone, the cut is depth-tested against *its own depth from two frames ago*, and dissolves
|
|
1331
|
-
* into holes wherever the camera has moved since. It reads as missing geometry and it is not.
|
|
1332
|
-
*
|
|
1333
|
-
* A real scene needs none of this and must not have it: the cut has to be occluded by whatever the
|
|
1334
|
-
* scene put in the depth buffer, which is why the draw itself loads rather than clears.
|
|
1335
|
-
*
|
|
1336
|
-
* It runs immediately before the draw rather than at the top of the frame, so everything earlier
|
|
1337
|
-
* that reads depth still sees the previous frame's. With nothing in the scene there is nothing for
|
|
1338
|
-
* those passes to occlude, and the alternative is a second registration on another phase to save a
|
|
1339
|
-
* result that is empty either way.
|
|
1340
|
-
*
|
|
1341
|
-
* @param {FrameGraph} graph
|
|
1342
|
-
* @param {number} depth
|
|
1343
|
-
* @returns {number} the depth handle to draw against
|
|
1344
|
-
*/
|
|
1345
|
-
function vgeo_graph_clear_depth(graph, depth) {
|
|
1346
|
-
const data = {};
|
|
1347
|
-
|
|
1348
|
-
const pass = graph.add('vgeo/clear depth', data, (data, resources, context) => {
|
|
1349
|
-
const texture = resources.get(data.depth);
|
|
1350
|
-
|
|
1351
|
-
// no draws — the clear is the load op, and ending the pass immediately is what performs it
|
|
1352
|
-
context.encoder.beginRenderPass({
|
|
1353
|
-
label: "vgeo/clear depth",
|
|
1354
|
-
colorAttachments: [],
|
|
1355
|
-
depthStencilAttachment: {
|
|
1356
|
-
view: texture.obtainView(DEFAULT_DEPTH_TEXTURE_VIEW),
|
|
1357
|
-
depthLoadOp: "clear",
|
|
1358
|
-
depthStoreOp: "store",
|
|
1359
|
-
depthClearValue: DEPTH_BACKGROUND_VALUE,
|
|
1360
|
-
},
|
|
1361
|
-
}).end();
|
|
1362
|
-
});
|
|
1363
|
-
|
|
1364
|
-
data.depth = pass.write(depth);
|
|
1365
|
-
|
|
1366
|
-
return data.depth;
|
|
1367
|
-
}
|
|
1368
|
-
|
|
1369
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
1370
|
-
// Harness
|
|
1371
|
-
// ─────────────────────────────────────────────────────────────────────────────
|
|
1372
|
-
|
|
1373
|
-
/**
|
|
1374
|
-
* @param {number} value
|
|
1375
|
-
* @returns {string}
|
|
1376
|
-
*/
|
|
1377
|
-
function thousands(value) {
|
|
1378
|
-
return value.toLocaleString('en-US');
|
|
1379
|
-
}
|
|
1380
|
-
|
|
1381
|
-
/**
|
|
1382
|
-
* @param {[string, string][]} entries
|
|
1383
|
-
* @returns {string} one label/value row apiece
|
|
1384
|
-
*/
|
|
1385
|
-
function panel_table(entries) {
|
|
1386
|
-
return entries
|
|
1387
|
-
.map(([key, value]) => `<div class="row"><span class="muted">${key}</span><span>${value}</span></div>`)
|
|
1388
|
-
.join('');
|
|
1389
|
-
}
|
|
1390
|
-
|
|
1391
|
-
/**
|
|
1392
|
-
* @param {number} bytes
|
|
1393
|
-
* @returns {string}
|
|
1394
|
-
*/
|
|
1395
|
-
function human_bytes(bytes) {
|
|
1396
|
-
if (bytes < 1024) {
|
|
1397
|
-
return `${bytes} B`;
|
|
1398
|
-
}
|
|
1399
|
-
|
|
1400
|
-
if (bytes < 1024 * 1024) {
|
|
1401
|
-
return `${(bytes / 1024).toFixed(1)} KB`;
|
|
1402
|
-
}
|
|
1403
|
-
|
|
1404
|
-
if (bytes < 1024 * 1024 * 1024) {
|
|
1405
|
-
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
1406
|
-
}
|
|
1407
|
-
|
|
1408
|
-
return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;
|
|
1409
|
-
}
|
|
1410
|
-
|
|
1411
|
-
/**
|
|
1412
|
-
* What the pages cost stored against what they cost decoded, and under which codec.
|
|
1413
|
-
*
|
|
1414
|
-
* Stored is the number that gets fetched and the number that sits on disk; decoded is the number a
|
|
1415
|
-
* resident page costs in RAM. The codec is per frame, so a file can genuinely be a mixture — the
|
|
1416
|
-
* encoder stores a page raw whenever compressing it would not have shrunk it — and naming all of
|
|
1417
|
-
* them is more honest than naming whichever one happened to come first.
|
|
1418
|
-
*
|
|
1419
|
-
* @param {VGeoContainer} container
|
|
1420
|
-
* @returns {string}
|
|
1421
|
-
*/
|
|
1422
|
-
function page_storage(container) {
|
|
1423
|
-
const codec = Array.from(new Set(container.pages.map((page) => page.codec)))
|
|
1424
|
-
.map(vgeo_codec_name)
|
|
1425
|
-
.join(' + ');
|
|
1426
|
-
|
|
1427
|
-
const ratio = container.decoded_page_bytes / Math.max(container.stored_page_bytes, 1);
|
|
1428
|
-
|
|
1429
|
-
return `${human_bytes(container.stored_page_bytes)} stored`
|
|
1430
|
-
+ ` · ${human_bytes(container.decoded_page_bytes)} decoded`
|
|
1431
|
-
+ ` · ${codec} ${ratio.toFixed(2)}x`;
|
|
1432
|
-
}
|
|
1433
|
-
|
|
1434
|
-
const PANEL_CSS = `
|
|
1435
|
-
#vgeo-panel {
|
|
1436
|
-
position: absolute; top: 0; right: 0; width: 340px; max-height: 100vh; overflow-y: auto;
|
|
1437
|
-
padding: 12px 14px; box-sizing: border-box;
|
|
1438
|
-
font: 12px/1.45 ui-monospace, "Cascadia Mono", Consolas, monospace;
|
|
1439
|
-
color: #dfe6ee; background: rgba(12, 16, 22, 0.88);
|
|
1440
|
-
border-left: 1px solid #2b3947;
|
|
1441
|
-
}
|
|
1442
|
-
#vgeo-panel h1 { margin: 0 0 8px; font-size: 13px; letter-spacing: 0.06em; color: #7fd2ff; }
|
|
1443
|
-
#vgeo-panel h2 {
|
|
1444
|
-
margin: 14px 0 6px; font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase;
|
|
1445
|
-
color: #6b7c8d; border-bottom: 1px solid #24313d; padding-bottom: 3px;
|
|
1446
|
-
}
|
|
1447
|
-
#vgeo-panel .row { display: flex; justify-content: space-between; gap: 8px; }
|
|
1448
|
-
#vgeo-panel .row span:last-child { color: #f2f6fa; }
|
|
1449
|
-
#vgeo-panel .count { font-size: 30px; line-height: 1.1; color: #8fe388; }
|
|
1450
|
-
#vgeo-panel .muted { color: #6b7c8d; }
|
|
1451
|
-
#vgeo-panel .bad { color: #ff8a7a; }
|
|
1452
|
-
#vgeo-panel .good { color: #8fe388; }
|
|
1453
|
-
#vgeo-panel button {
|
|
1454
|
-
width: 100%; margin: 8px 0 2px; padding: 7px; cursor: pointer;
|
|
1455
|
-
font: inherit; color: #061018; background: #7fd2ff; border: 0; border-radius: 3px;
|
|
1456
|
-
}
|
|
1457
|
-
#vgeo-panel button:hover { background: #a5e0ff; }
|
|
1458
|
-
#vgeo-panel label { display: flex; align-items: center; gap: 6px; margin: 3px 0; cursor: pointer; }
|
|
1459
|
-
#vgeo-panel input[type=range] { width: 100%; }
|
|
1460
|
-
#vgeo-panel select { width: 100%; font: inherit; background: #16202b; color: #dfe6ee; border: 1px solid #2b3947; padding: 3px; }
|
|
1461
|
-
#vgeo-panel ol { margin: 4px 0; padding-left: 18px; }
|
|
1462
|
-
#vgeo-drop {
|
|
1463
|
-
position: absolute; inset: 0; display: none; align-items: center; justify-content: center;
|
|
1464
|
-
font: 20px ui-monospace, monospace; color: #7fd2ff;
|
|
1465
|
-
background: rgba(6, 12, 20, 0.82); border: 3px dashed #7fd2ff; box-sizing: border-box;
|
|
1466
|
-
}
|
|
1467
|
-
#vgeo-drop.active { display: flex; }
|
|
1468
|
-
`;
|
|
1469
|
-
|
|
1470
|
-
/**
|
|
1471
|
-
* The viewer draws its clusters into the scene, at the phase a full-screen effect that should be
|
|
1472
|
-
* tonemapped with the rest of the frame belongs at.
|
|
1473
|
-
*/
|
|
1474
|
-
class VGEOViewerExtension extends RenderExtension {
|
|
1475
|
-
name = "vgeo viewer";
|
|
1476
|
-
|
|
1477
|
-
phase = FramePhase.AfterTransparency;
|
|
1478
|
-
|
|
1479
|
-
/**
|
|
1480
|
-
* @type {VGeoViewer}
|
|
1481
|
-
*/
|
|
1482
|
-
#viewer;
|
|
1483
|
-
|
|
1484
|
-
/**
|
|
1485
|
-
* @param {VGeoViewer} viewer
|
|
1486
|
-
*/
|
|
1487
|
-
constructor(viewer) {
|
|
1488
|
-
super();
|
|
1489
|
-
|
|
1490
|
-
this.#viewer = viewer;
|
|
1491
|
-
}
|
|
1492
|
-
|
|
1493
|
-
record(frame) {
|
|
1494
|
-
this.#viewer.record(frame);
|
|
1495
|
-
}
|
|
1496
|
-
}
|
|
1497
|
-
|
|
1498
|
-
/**
|
|
1499
|
-
* The viewer. One container at a time, one cut at a time, and the cut only changes when asked.
|
|
1500
|
-
*/
|
|
1501
|
-
class VGeoViewer {
|
|
1502
|
-
/**
|
|
1503
|
-
* @type {VGeoContainer|undefined}
|
|
1504
|
-
*/
|
|
1505
|
-
#container = undefined;
|
|
1506
|
-
|
|
1507
|
-
/**
|
|
1508
|
-
* @type {VGeoCutGeometry|undefined}
|
|
1509
|
-
*/
|
|
1510
|
-
#cut_geometry = undefined;
|
|
1511
|
-
|
|
1512
|
-
/**
|
|
1513
|
-
* @type {VGeoCut}
|
|
1514
|
-
*/
|
|
1515
|
-
#cut = new VGeoCut();
|
|
1516
|
-
|
|
1517
|
-
/**
|
|
1518
|
-
* @type {VGeoCutView}
|
|
1519
|
-
*/
|
|
1520
|
-
#view = new VGeoCutView();
|
|
1521
|
-
|
|
1522
|
-
/**
|
|
1523
|
-
* @type {DynamicMeshBatch}
|
|
1524
|
-
*/
|
|
1525
|
-
#batch = new DynamicMeshBatch();
|
|
1526
|
-
|
|
1527
|
-
/**
|
|
1528
|
-
* @type {DynamicMesh|undefined}
|
|
1529
|
-
*/
|
|
1530
|
-
#mesh = undefined;
|
|
1531
|
-
|
|
1532
|
-
/**
|
|
1533
|
-
* A cut is a solid surface, so it is drawn as one: opaque, writing depth, and ordered by the
|
|
1534
|
-
* depth buffer rather than by anything this file does.
|
|
1535
|
-
*
|
|
1536
|
-
* @type {GPUDynamicMeshRenderer}
|
|
1537
|
-
*/
|
|
1538
|
-
#dynamic = new GPUDynamicMeshRenderer();
|
|
1539
|
-
|
|
1540
|
-
/**
|
|
1541
|
-
* Where the camera stood when the current cut was taken, so the panel can say how far you have
|
|
1542
|
-
* wandered from the decision you are looking at.
|
|
1543
|
-
* @type {Float32Array}
|
|
1544
|
-
*/
|
|
1545
|
-
#cut_eye = new Float32Array(3);
|
|
1546
|
-
|
|
1547
|
-
/**
|
|
1548
|
-
* @type {Float32Array}
|
|
1549
|
-
*/
|
|
1550
|
-
#eye = new Float32Array(3);
|
|
1551
|
-
|
|
1552
|
-
/**
|
|
1553
|
-
* @type {boolean}
|
|
1554
|
-
*/
|
|
1555
|
-
#auto_adapt = false;
|
|
1556
|
-
|
|
1557
|
-
/**
|
|
1558
|
-
* @type {VGEO_COLOR_MODE}
|
|
1559
|
-
*/
|
|
1560
|
-
#color_mode = VGEO_COLOR_MODE.Cluster;
|
|
1561
|
-
|
|
1562
|
-
/**
|
|
1563
|
-
* @type {string}
|
|
1564
|
-
*/
|
|
1565
|
-
#status = 'drop a .vgeo file anywhere on the page';
|
|
1566
|
-
|
|
1567
|
-
/**
|
|
1568
|
-
* @type {string}
|
|
1569
|
-
*/
|
|
1570
|
-
#file_label = '';
|
|
1571
|
-
|
|
1572
|
-
/**
|
|
1573
|
-
* @type {number}
|
|
1574
|
-
*/
|
|
1575
|
-
#file_bytes = 0;
|
|
1576
|
-
|
|
1577
|
-
/**
|
|
1578
|
-
* @type {number}
|
|
1579
|
-
*/
|
|
1580
|
-
#read_ms = 0;
|
|
1581
|
-
|
|
1582
|
-
/**
|
|
1583
|
-
* @type {number}
|
|
1584
|
-
*/
|
|
1585
|
-
#build_ms = 0;
|
|
1586
|
-
|
|
1587
|
-
constructor() {
|
|
1588
|
-
this.canvas = document.createElement('canvas');
|
|
1589
|
-
this.renderer = new Renderer();
|
|
1590
|
-
this.camera = new PerspectiveCamera();
|
|
1591
|
-
this.scene = new Scene();
|
|
1592
|
-
|
|
1593
|
-
this.#dynamic.opaque = true;
|
|
1594
|
-
}
|
|
1595
|
-
|
|
1596
|
-
/**
|
|
1597
|
-
* @returns {Promise<void>}
|
|
1598
|
-
*/
|
|
1599
|
-
async start() {
|
|
1600
|
-
document.body.style.margin = '0';
|
|
1601
|
-
document.body.style.overflow = 'hidden';
|
|
1602
|
-
document.body.style.background = '#070b10';
|
|
1603
|
-
|
|
1604
|
-
this.canvas.style.position = 'absolute';
|
|
1605
|
-
this.canvas.style.inset = '0';
|
|
1606
|
-
this.canvas.style.outline = 'none';
|
|
1607
|
-
|
|
1608
|
-
// the orbital controller attaches a KeyboardDevice, and a canvas cannot receive key events
|
|
1609
|
-
// without being focusable
|
|
1610
|
-
this.canvas.tabIndex = 0;
|
|
1611
|
-
|
|
1612
|
-
document.body.appendChild(this.canvas);
|
|
1613
|
-
|
|
1614
|
-
this.canvas.focus();
|
|
1615
|
-
|
|
1616
|
-
await this.renderer.initialize({ context: this.canvas.getContext('webgpu') });
|
|
1617
|
-
|
|
1618
|
-
/*
|
|
1619
|
-
Everything that would move the image for reasons unrelated to the cut is off. Automatic
|
|
1620
|
-
exposure in particular: it adapts to whatever is on screen, so the same cluster would read
|
|
1621
|
-
a different colour depending on how much of the model is in frame, which is exactly the
|
|
1622
|
-
signal this tool is trying to show.
|
|
1623
|
-
*/
|
|
1624
|
-
this.renderer.feature_automatic_exposure_enabled = false;
|
|
1625
|
-
this.renderer.feature_taa_enabled = true;
|
|
1626
|
-
this.renderer.feature_bloom_enabled = false;
|
|
1627
|
-
this.renderer.feature_ssr_enabled = false;
|
|
1628
|
-
this.renderer.feature_ssao_enabled = true;
|
|
1629
|
-
this.renderer.feature_shadows_enabled = false;
|
|
1630
|
-
this.renderer.feature_lpv_enabled = false;
|
|
1631
|
-
this.renderer.pixel_ratio = 1;
|
|
1632
|
-
|
|
1633
|
-
this.scene.lights.add(make_sunlight({ intensity: 3 }));
|
|
1634
|
-
|
|
1635
|
-
this.camera.near = 0.05;
|
|
1636
|
-
this.camera.far = 500;
|
|
1637
|
-
this.camera.fov = 55 * DEG_TO_RAD;
|
|
1638
|
-
this.camera.transform.setTranslation(0, 0.5, 2);
|
|
1639
|
-
this.camera.transform.lookAt(Vector3.zero);
|
|
1640
|
-
|
|
1641
|
-
this.controller = new OrbitalCameraController(this.camera, this.canvas);
|
|
1642
|
-
this.controller.distanceLimits.min = 1e-4;
|
|
1643
|
-
this.controller.distanceLimits.max = 1e5;
|
|
1644
|
-
|
|
1645
|
-
this.#build_interface();
|
|
1646
|
-
this.#fit_to_window();
|
|
1647
|
-
|
|
1648
|
-
window.addEventListener('resize', () => this.#fit_to_window());
|
|
1649
|
-
|
|
1650
|
-
this.renderer.add_extension(new VGEOViewerExtension(this));
|
|
1651
|
-
|
|
1652
|
-
create_frame_loop((dt) => this.#frame(dt));
|
|
1653
|
-
|
|
1654
|
-
const requested = new URL(window.location.href).searchParams.get('file');
|
|
1655
|
-
|
|
1656
|
-
if (requested !== null) {
|
|
1657
|
-
await this.load_url(requested);
|
|
1658
|
-
}
|
|
1659
|
-
}
|
|
1660
|
-
|
|
1661
|
-
/**
|
|
1662
|
-
* @param {FrameContext} frame
|
|
1663
|
-
*/
|
|
1664
|
-
record(frame) {
|
|
1665
|
-
const graph = frame.graph;
|
|
1666
|
-
const scene = frame.get(SceneColor);
|
|
1667
|
-
|
|
1668
|
-
scene.color = this.#dynamic.graph_draw({
|
|
1669
|
-
graph,
|
|
1670
|
-
batch: this.#batch,
|
|
1671
|
-
color: scene.color,
|
|
1672
|
-
depth: vgeo_graph_clear_depth(graph, frame.get(ViewTextures).depth),
|
|
1673
|
-
camera: frame.view.camera.buffer,
|
|
1674
|
-
});
|
|
1675
|
-
}
|
|
1676
|
-
|
|
1677
|
-
#fit_to_window() {
|
|
1678
|
-
const width = window.innerWidth;
|
|
1679
|
-
const height = window.innerHeight;
|
|
1680
|
-
|
|
1681
|
-
this.canvas.width = width;
|
|
1682
|
-
this.canvas.height = height;
|
|
1683
|
-
|
|
1684
|
-
this.renderer.resize(width, height);
|
|
1685
|
-
|
|
1686
|
-
this.camera.aspect = this.renderer.aspect_ratio;
|
|
1687
|
-
|
|
1688
|
-
this.#view.screen_height = height;
|
|
1689
|
-
this.#view.fov_y = this.camera.fov;
|
|
1690
|
-
}
|
|
1691
|
-
|
|
1692
|
-
/**
|
|
1693
|
-
* @param {number} dt seconds
|
|
1694
|
-
*/
|
|
1695
|
-
#frame(dt) {
|
|
1696
|
-
this.controller.update(dt);
|
|
1697
|
-
|
|
1698
|
-
const position = this.camera.transform;
|
|
1699
|
-
|
|
1700
|
-
const moved = position.translation_x !== this.#eye[0]
|
|
1701
|
-
|| position.translation_y !== this.#eye[1]
|
|
1702
|
-
|| position.translation_z !== this.#eye[2];
|
|
1703
|
-
|
|
1704
|
-
this.#eye[0] = position.translation_x;
|
|
1705
|
-
this.#eye[1] = position.translation_y;
|
|
1706
|
-
this.#eye[2] = position.translation_z;
|
|
1707
|
-
|
|
1708
|
-
if (moved && this.#auto_adapt) {
|
|
1709
|
-
this.adapt();
|
|
1710
|
-
}
|
|
1711
|
-
|
|
1712
|
-
this.renderer.render(this.camera, this.scene, dt);
|
|
1713
|
-
|
|
1714
|
-
if (moved) {
|
|
1715
|
-
this.#refresh_cut();
|
|
1716
|
-
}
|
|
1717
|
-
}
|
|
1718
|
-
|
|
1719
|
-
/**
|
|
1720
|
-
* Re-render the cut readout alone.
|
|
1721
|
-
*
|
|
1722
|
-
* Every number under it moves as the camera does — the drift on every frame, and the whole lot
|
|
1723
|
-
* on every adapt when `follow the camera` is on. Rebuilding the *whole* panel at that rate would
|
|
1724
|
-
* also rebuild the controls, which is how a slider stops being draggable mid-drag; this section
|
|
1725
|
-
* holds no controls, so replacing it is free of that.
|
|
1726
|
-
*/
|
|
1727
|
-
#refresh_cut() {
|
|
1728
|
-
const host = this.panel.querySelector('#vgeo-cut');
|
|
1729
|
-
|
|
1730
|
-
if (host === null) {
|
|
1731
|
-
return;
|
|
1732
|
-
}
|
|
1733
|
-
|
|
1734
|
-
host.innerHTML = this.#cut_html();
|
|
1735
|
-
}
|
|
1736
|
-
|
|
1737
|
-
/**
|
|
1738
|
-
* The cut readout — the cluster count first, because it is the number the tool exists to show.
|
|
1739
|
-
*
|
|
1740
|
-
* @returns {string}
|
|
1741
|
-
*/
|
|
1742
|
-
#cut_html() {
|
|
1743
|
-
const cut = this.#cut;
|
|
1744
|
-
|
|
1745
|
-
return `<div class="count">${thousands(cut.clusters.length)}</div>`
|
|
1746
|
-
+ `<div class="muted" style="margin-bottom:6px">clusters in the current cut</div>`
|
|
1747
|
-
+ panel_table([
|
|
1748
|
-
['triangles', thousands(cut.triangle_count)],
|
|
1749
|
-
['groups', thousands(cut.groups_visited)],
|
|
1750
|
-
['pages resident', thousands(cut.pages_touched)],
|
|
1751
|
-
['clusters tested', thousands(cut.clusters_tested)],
|
|
1752
|
-
['culled subtrees', thousands(cut.culled)],
|
|
1753
|
-
['select / build', `${cut.duration_ms.toFixed(1)} / ${this.#build_ms.toFixed(1)} ms`],
|
|
1754
|
-
['camera drift', `${this.#drift().toExponential(2)} u`],
|
|
1755
|
-
]);
|
|
1756
|
-
}
|
|
1757
|
-
|
|
1758
|
-
/**
|
|
1759
|
-
* How far the camera has moved since the cut on screen was selected.
|
|
1760
|
-
* @returns {number}
|
|
1761
|
-
*/
|
|
1762
|
-
#drift() {
|
|
1763
|
-
return Math.hypot(
|
|
1764
|
-
this.#eye[0] - this.#cut_eye[0],
|
|
1765
|
-
this.#eye[1] - this.#cut_eye[1],
|
|
1766
|
-
this.#eye[2] - this.#cut_eye[2]
|
|
1767
|
-
);
|
|
1768
|
-
}
|
|
1769
|
-
|
|
1770
|
-
/**
|
|
1771
|
-
* Take a fresh cut at wherever the camera is standing, and build the geometry for it.
|
|
1772
|
-
*/
|
|
1773
|
-
adapt() {
|
|
1774
|
-
if (this.#container === undefined) {
|
|
1775
|
-
return;
|
|
1776
|
-
}
|
|
1777
|
-
|
|
1778
|
-
// the frustum is derived from matrices the renderer refreshes during its own frame, and an
|
|
1779
|
-
// adapt can land before one has run — a cut culled against last frame's planes would be a
|
|
1780
|
-
// silent, hard-to-see wrong answer
|
|
1781
|
-
this.camera.update();
|
|
1782
|
-
|
|
1783
|
-
this.#view.eye.set(this.#eye);
|
|
1784
|
-
this.#view.screen_height = this.canvas.height;
|
|
1785
|
-
this.#view.fov_y = this.camera.fov;
|
|
1786
|
-
this.#view.frustum.set(this.camera.frustum);
|
|
1787
|
-
|
|
1788
|
-
this.#cut = vgeo_select_cut(this.#container, this.#view);
|
|
1789
|
-
|
|
1790
|
-
const started = performance.now();
|
|
1791
|
-
|
|
1792
|
-
const previous = this.#cut_geometry;
|
|
1793
|
-
|
|
1794
|
-
this.#cut_geometry = vgeo_build_cut_geometry(this.#container, this.#cut, this.#color_mode);
|
|
1795
|
-
|
|
1796
|
-
this.#build_ms = performance.now() - started;
|
|
1797
|
-
|
|
1798
|
-
this.#batch.clear();
|
|
1799
|
-
|
|
1800
|
-
// Residency is keyed on the geometry and deliberately survives leaving the batch, so the
|
|
1801
|
-
// cut that was just replaced would hold its buffers forever otherwise — and this tool
|
|
1802
|
-
// replaces one on every drag of the tau slider.
|
|
1803
|
-
if (previous !== undefined) {
|
|
1804
|
-
this.#dynamic.release(previous.geometry);
|
|
1805
|
-
}
|
|
1806
|
-
|
|
1807
|
-
this.#mesh = DynamicMesh.from(this.#cut_geometry.geometry);
|
|
1808
|
-
this.#mesh.updateMatrices();
|
|
1809
|
-
|
|
1810
|
-
this.#batch.add(this.#mesh);
|
|
1811
|
-
|
|
1812
|
-
this.#cut_eye.set(this.#eye);
|
|
1813
|
-
}
|
|
1814
|
-
|
|
1815
|
-
/**
|
|
1816
|
-
* @param {ArrayBuffer} array_buffer
|
|
1817
|
-
* @param {string} label
|
|
1818
|
-
*/
|
|
1819
|
-
load(array_buffer, label) {
|
|
1820
|
-
this.#file_label = label;
|
|
1821
|
-
this.#file_bytes = array_buffer.byteLength;
|
|
1822
|
-
|
|
1823
|
-
const started = performance.now();
|
|
1824
|
-
|
|
1825
|
-
try {
|
|
1826
|
-
this.#container = vgeo_read_container(array_buffer);
|
|
1827
|
-
} catch (e) {
|
|
1828
|
-
this.#container = undefined;
|
|
1829
|
-
this.#cut_geometry = undefined;
|
|
1830
|
-
this.#batch.clear();
|
|
1831
|
-
this.#status = String(e.message ?? e);
|
|
1832
|
-
this.#refresh_panel();
|
|
1833
|
-
|
|
1834
|
-
throw e;
|
|
1835
|
-
}
|
|
1836
|
-
|
|
1837
|
-
this.#read_ms = performance.now() - started;
|
|
1838
|
-
this.#status = '';
|
|
1839
|
-
|
|
1840
|
-
this.#frame_camera();
|
|
1841
|
-
this.adapt();
|
|
1842
|
-
this.#refresh_panel();
|
|
1843
|
-
}
|
|
1844
|
-
|
|
1845
|
-
/**
|
|
1846
|
-
* @param {string} url
|
|
1847
|
-
* @returns {Promise<void>}
|
|
1848
|
-
*/
|
|
1849
|
-
async load_url(url) {
|
|
1850
|
-
this.#status = `fetching ${url}`;
|
|
1851
|
-
this.#refresh_panel();
|
|
1852
|
-
|
|
1853
|
-
const response = await fetch(url);
|
|
1854
|
-
|
|
1855
|
-
if (!response.ok) {
|
|
1856
|
-
this.#status = `${url} — HTTP ${response.status}`;
|
|
1857
|
-
this.#refresh_panel();
|
|
1858
|
-
|
|
1859
|
-
return;
|
|
1860
|
-
}
|
|
1861
|
-
|
|
1862
|
-
this.load(await response.arrayBuffer(), url.split('/').pop());
|
|
1863
|
-
}
|
|
1864
|
-
|
|
1865
|
-
/**
|
|
1866
|
-
* Put the camera where the whole asset is on screen, and scale the clip range to it — vgeo
|
|
1867
|
-
* assets are authored at whatever scale the source used, and the Stanford models are a tenth of
|
|
1868
|
-
* a unit across.
|
|
1869
|
-
*/
|
|
1870
|
-
#frame_camera() {
|
|
1871
|
-
const sphere = this.#container.object_sphere;
|
|
1872
|
-
|
|
1873
|
-
const radius = Math.max(sphere[3], 1e-6);
|
|
1874
|
-
const center = new Vector3(sphere[0], sphere[1], sphere[2]);
|
|
1875
|
-
|
|
1876
|
-
const distance = radius / Math.tan(this.camera.fov * 0.5) * 1.15;
|
|
1877
|
-
|
|
1878
|
-
const eye = new Vector3(0.55, 0.42, 0.72);
|
|
1879
|
-
|
|
1880
|
-
eye.normalize();
|
|
1881
|
-
eye.multiplyScalar(distance);
|
|
1882
|
-
eye.add(center);
|
|
1883
|
-
|
|
1884
|
-
this.camera.near = radius * 0.005;
|
|
1885
|
-
this.camera.far = radius * 200;
|
|
1886
|
-
|
|
1887
|
-
this.controller.distanceLimits.min = radius * 0.02;
|
|
1888
|
-
this.controller.distanceLimits.max = radius * 200;
|
|
1889
|
-
this.controller.movement_speed_scale = radius;
|
|
1890
|
-
|
|
1891
|
-
this.controller.look(eye, center);
|
|
1892
|
-
|
|
1893
|
-
this.#eye[0] = eye.x;
|
|
1894
|
-
this.#eye[1] = eye.y;
|
|
1895
|
-
this.#eye[2] = eye.z;
|
|
1896
|
-
}
|
|
1897
|
-
|
|
1898
|
-
#build_interface() {
|
|
1899
|
-
const style = document.createElement('style');
|
|
1900
|
-
|
|
1901
|
-
style.textContent = PANEL_CSS;
|
|
1902
|
-
document.head.appendChild(style);
|
|
1903
|
-
|
|
1904
|
-
const drop = document.createElement('div');
|
|
1905
|
-
|
|
1906
|
-
drop.id = 'vgeo-drop';
|
|
1907
|
-
drop.textContent = 'drop a .vgeo file';
|
|
1908
|
-
document.body.appendChild(drop);
|
|
1909
|
-
|
|
1910
|
-
let drag_depth = 0;
|
|
1911
|
-
|
|
1912
|
-
window.addEventListener('dragenter', (event) => {
|
|
1913
|
-
event.preventDefault();
|
|
1914
|
-
drag_depth++;
|
|
1915
|
-
drop.classList.add('active');
|
|
1916
|
-
});
|
|
1917
|
-
|
|
1918
|
-
window.addEventListener('dragover', (event) => event.preventDefault());
|
|
1919
|
-
|
|
1920
|
-
window.addEventListener('dragleave', () => {
|
|
1921
|
-
drag_depth = Math.max(0, drag_depth - 1);
|
|
1922
|
-
|
|
1923
|
-
if (drag_depth === 0) {
|
|
1924
|
-
drop.classList.remove('active');
|
|
1925
|
-
}
|
|
1926
|
-
});
|
|
1927
|
-
|
|
1928
|
-
window.addEventListener('drop', async (event) => {
|
|
1929
|
-
event.preventDefault();
|
|
1930
|
-
|
|
1931
|
-
drag_depth = 0;
|
|
1932
|
-
drop.classList.remove('active');
|
|
1933
|
-
|
|
1934
|
-
const file = event.dataTransfer.files[0];
|
|
1935
|
-
|
|
1936
|
-
if (file === undefined) {
|
|
1937
|
-
return;
|
|
1938
|
-
}
|
|
1939
|
-
|
|
1940
|
-
this.#status = `reading ${file.name}`;
|
|
1941
|
-
this.#refresh_panel();
|
|
1942
|
-
|
|
1943
|
-
this.load(await file.arrayBuffer(), file.name);
|
|
1944
|
-
});
|
|
1945
|
-
|
|
1946
|
-
this.panel = document.createElement('div');
|
|
1947
|
-
this.panel.id = 'vgeo-panel';
|
|
1948
|
-
document.body.appendChild(this.panel);
|
|
1949
|
-
|
|
1950
|
-
this.#refresh_panel();
|
|
1951
|
-
}
|
|
1952
|
-
|
|
1953
|
-
/**
|
|
1954
|
-
* @param {string} id
|
|
1955
|
-
* @param {function(HTMLElement): void} bind
|
|
1956
|
-
*/
|
|
1957
|
-
#wire(id, bind) {
|
|
1958
|
-
const element = this.panel.querySelector(`#${id}`);
|
|
1959
|
-
|
|
1960
|
-
if (element !== null) {
|
|
1961
|
-
bind(element);
|
|
1962
|
-
}
|
|
1963
|
-
}
|
|
1964
|
-
|
|
1965
|
-
#refresh_panel() {
|
|
1966
|
-
const container = this.#container;
|
|
1967
|
-
|
|
1968
|
-
const header = [`<h1>.vgeo format viewer</h1>`];
|
|
1969
|
-
|
|
1970
|
-
if (this.#status !== '') {
|
|
1971
|
-
header.push(`<div class="muted">${this.#status}</div>`);
|
|
1972
|
-
}
|
|
1973
|
-
|
|
1974
|
-
if (container === undefined) {
|
|
1975
|
-
this.panel.innerHTML = header.join('');
|
|
1976
|
-
|
|
1977
|
-
return;
|
|
1978
|
-
}
|
|
1979
|
-
|
|
1980
|
-
const defects = container.defects;
|
|
1981
|
-
|
|
1982
|
-
const validation = defects.length === 0
|
|
1983
|
-
? `<div class="good">container valid — every invariant holds</div>`
|
|
1984
|
-
: `<div class="bad">${defects.length} defect(s)</div><ol class="bad">${
|
|
1985
|
-
defects.slice(0, 12).map((d) => `<li>${d.toString()}</li>`).join('')
|
|
1986
|
-
}</ol>`;
|
|
1987
|
-
|
|
1988
|
-
const rows = [
|
|
1989
|
-
['file', `${this.#file_label} · ${human_bytes(this.#file_bytes)}`],
|
|
1990
|
-
['pages', page_storage(container)],
|
|
1991
|
-
['format', `v${container.format_version} · encoding ${container.payload_encoding}`],
|
|
1992
|
-
['asset id', container.asset_id.slice(0, 16)],
|
|
1993
|
-
['source', `${thousands(container.source_face_count)} tris / ${thousands(container.source_vertex_count)} verts`],
|
|
1994
|
-
['contents', `${thousands(container.cluster_count)} clusters · ${thousands(container.pages.length)} pages · ${container.levels.length} levels`],
|
|
1995
|
-
['per-vertex normals', `${thousands(container.per_vertex_normal_cluster_count)} / ${thousands(container.cluster_count)} clusters`],
|
|
1996
|
-
['read', `${this.#read_ms.toFixed(1)} ms`],
|
|
1997
|
-
];
|
|
1998
|
-
|
|
1999
|
-
this.panel.innerHTML = header.join('')
|
|
2000
|
-
+ `<h2>container</h2>${panel_table(rows)}`
|
|
2001
|
-
+ `<h2>validation</h2>${validation}`
|
|
2002
|
-
+ `<h2>cut</h2>`
|
|
2003
|
-
+ `<div id="vgeo-cut">${this.#cut_html()}</div>`
|
|
2004
|
-
+ `<h2>selection</h2>`
|
|
2005
|
-
+ `<div class="row"><span class="muted">tau</span><span id="vgeo-tau-value">${this.#view.tau.toFixed(2)} px</span></div>`
|
|
2006
|
-
+ `<input id="vgeo-tau" type="range" min="-1.3" max="1.7" step="0.01" value="${Math.log10(this.#view.tau)}">`
|
|
2007
|
-
+ `<button id="vgeo-adapt">adapt to view</button>`
|
|
2008
|
-
+ `<label><input id="vgeo-auto" type="checkbox" ${this.#auto_adapt ? 'checked' : ''}> follow the camera</label>`
|
|
2009
|
-
+ `<label><input id="vgeo-cull" type="checkbox" ${this.#view.cull_enabled ? 'checked' : ''}> frustum cull while selecting</label>`
|
|
2010
|
-
+ `<h2>display</h2>`
|
|
2011
|
-
+ `<select id="vgeo-color">`
|
|
2012
|
-
+ Object.values(VGEO_COLOR_MODE).map((mode) =>
|
|
2013
|
-
`<option value="${mode}" ${mode === this.#color_mode ? 'selected' : ''}>colour by ${mode}</option>`
|
|
2014
|
-
).join('')
|
|
2015
|
-
+ `</select>`;
|
|
2016
|
-
|
|
2017
|
-
this.#wire('vgeo-adapt', (element) => {
|
|
2018
|
-
element.onclick = () => {
|
|
2019
|
-
this.adapt();
|
|
2020
|
-
this.#refresh_panel();
|
|
2021
|
-
};
|
|
2022
|
-
});
|
|
2023
|
-
|
|
2024
|
-
this.#wire('vgeo-tau', (element) => {
|
|
2025
|
-
element.oninput = () => {
|
|
2026
|
-
this.#view.tau = Math.pow(10, Number(element.value));
|
|
2027
|
-
|
|
2028
|
-
this.adapt();
|
|
2029
|
-
this.#refresh_panel();
|
|
2030
|
-
};
|
|
2031
|
-
});
|
|
2032
|
-
|
|
2033
|
-
this.#wire('vgeo-auto', (element) => {
|
|
2034
|
-
element.onchange = () => {
|
|
2035
|
-
this.#auto_adapt = element.checked;
|
|
2036
|
-
};
|
|
2037
|
-
});
|
|
2038
|
-
|
|
2039
|
-
this.#wire('vgeo-cull', (element) => {
|
|
2040
|
-
element.onchange = () => {
|
|
2041
|
-
this.#view.cull_enabled = element.checked;
|
|
2042
|
-
|
|
2043
|
-
this.adapt();
|
|
2044
|
-
this.#refresh_panel();
|
|
2045
|
-
};
|
|
2046
|
-
});
|
|
2047
|
-
|
|
2048
|
-
this.#wire('vgeo-color', (element) => {
|
|
2049
|
-
element.onchange = () => {
|
|
2050
|
-
this.#color_mode = element.value;
|
|
2051
|
-
|
|
2052
|
-
this.adapt();
|
|
2053
|
-
this.#refresh_panel();
|
|
2054
|
-
};
|
|
2055
|
-
});
|
|
2056
|
-
}
|
|
2057
|
-
}
|
|
2058
|
-
|
|
2059
|
-
const viewer = new VGeoViewer();
|
|
2060
|
-
|
|
2061
|
-
window.__vgeo = viewer;
|
|
2062
|
-
|
|
2063
|
-
viewer.start();
|