@woosh/meep-engine 3.28.0 → 3.29.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/build/bundle-worker-terrain.js +1 -1
- package/package.json +1 -1
- package/src/core/binary/BitSet.d.ts +16 -0
- package/src/core/binary/BitSet.d.ts.map +1 -1
- package/src/core/binary/BitSet.js +159 -49
- package/src/core/binary/allocator/OffsetAllocator.d.ts +48 -0
- package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
- package/src/core/binary/allocator/OffsetAllocator.js +208 -9
- package/src/core/binary/compression/compress_bytes.d.ts +20 -0
- package/src/core/binary/compression/compress_bytes.d.ts.map +1 -0
- package/src/core/binary/compression/compress_bytes.js +35 -0
- package/src/core/binary/compression/decompress_bytes_into.d.ts +30 -0
- package/src/core/binary/compression/decompress_bytes_into.d.ts.map +1 -0
- package/src/core/binary/compression/decompress_bytes_into.js +87 -0
- package/src/core/binary/compression/deflate_decompress_bound.d.ts +27 -0
- package/src/core/binary/compression/deflate_decompress_bound.d.ts.map +1 -0
- package/src/core/binary/compression/deflate_decompress_bound.js +32 -0
- package/src/core/geom/3d/quadric/quadric_attribute_add.d.ts +24 -0
- package/src/core/geom/3d/quadric/quadric_attribute_add.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_add.js +31 -0
- package/src/core/geom/3d/quadric/quadric_attribute_reduce.d.ts +46 -0
- package/src/core/geom/3d/quadric/quadric_attribute_reduce.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_reduce.js +104 -0
- package/src/core/geom/3d/quadric/quadric_attribute_set_from_triangle.d.ts +62 -0
- package/src/core/geom/3d/quadric/quadric_attribute_set_from_triangle.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_set_from_triangle.js +158 -0
- package/src/core/geom/3d/quadric/quadric_attribute_size.d.ts +21 -0
- package/src/core/geom/3d/quadric/quadric_attribute_size.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_size.js +24 -0
- package/src/core/geom/3d/quadric/quadric_attribute_solve.d.ts +34 -0
- package/src/core/geom/3d/quadric/quadric_attribute_solve.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_solve.js +55 -0
- package/src/core/geom/3d/quadric/quadric_attribute_sub.d.ts +28 -0
- package/src/core/geom/3d/quadric/quadric_attribute_sub.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_sub.js +35 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.d.ts +15 -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 +35 -0
- package/src/core/geom/3d/topology/struct/binary/BtWedgeSet.d.ts +93 -0
- package/src/core/geom/3d/topology/struct/binary/BtWedgeSet.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/BtWedgeSet.js +128 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.d.ts +38 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.js +113 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts +47 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +677 -8
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_live_count.d.ts +22 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_live_count.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_live_count.js +46 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_per_vertex.d.ts +19 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_per_vertex.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_per_vertex.js +49 -0
- package/src/core/graph/layout/layered/BoxLayoutOptions.d.ts +63 -0
- package/src/core/graph/layout/layered/BoxLayoutOptions.d.ts.map +1 -0
- package/src/core/graph/layout/layered/BoxLayoutOptions.js +80 -0
- package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/LayoutBoxGraph.d.ts +35 -0
- package/src/core/graph/layout/layered/LayoutBoxGraph.d.ts.map +1 -0
- package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/LayoutBoxGraph.js +53 -1
- package/src/core/graph/layout/layered/layout_assign_coordinates.d.ts.map +1 -0
- package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_coordinates.js +72 -68
- package/src/core/graph/layout/layered/layout_assign_layers.d.ts.map +1 -0
- package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_layers.js +4 -2
- package/src/core/graph/layout/layered/layout_break_cycles.d.ts.map +1 -0
- package/src/core/graph/layout/layered/layout_insert_lanes.d.ts.map +1 -0
- package/src/core/graph/layout/layered/layout_order_layers.d.ts.map +1 -0
- package/src/core/graph/layout/layered/layout_orient_links.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +7 -51
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js +8 -69
- package/src/core/model/node-graph/visual/layout/layout_build_problem.js +1 -1
- package/src/core/model/node-graph/visual/layout/layout_node_graph.js +6 -6
- package/src/core/model/node-graph/visual/layout/route_grid_build.js +1 -1
- package/src/engine/graphics3/DebugDrawSystem.d.ts +7 -5
- package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DebugDrawSystem.js +206 -203
- package/src/engine/graphics3/DecalSystem.d.ts +4 -5
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem.js +5 -5
- package/src/engine/graphics3/FogOfWarSystem.d.ts +7 -12
- package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -1
- package/src/engine/graphics3/FogOfWarSystem.js +8 -12
- package/src/engine/graphics3/prefab/prefab_instantiate.js +230 -230
- package/src/shade/RENDERER_CONTRACT.md +12 -7
- package/src/shade/playground/caldera/README.md +529 -0
- package/src/shade/playground/caldera/caldera_format.d.ts +151 -0
- package/src/shade/playground/caldera/caldera_format.d.ts.map +1 -0
- package/src/shade/playground/caldera/caldera_format.js +241 -0
- package/src/shade/playground/caldera/index.html +126 -0
- package/src/shade/playground/caldera/main.d.ts.map +1 -0
- package/src/shade/playground/caldera/main.js +1565 -0
- package/src/shade/playground/mesh_row_ceiling/README.md +85 -0
- package/src/shade/playground/mesh_row_ceiling/index.html +31 -0
- package/src/shade/playground/mesh_row_ceiling/main.d.ts +2 -0
- package/src/shade/playground/mesh_row_ceiling/main.d.ts.map +1 -0
- package/src/shade/playground/mesh_row_ceiling/main.js +389 -0
- package/src/shade/playground/vgeo_runtime/README.md +5 -3
- package/src/shade/playground/vgeo_runtime/main.js +3 -2
- package/src/shade/playground/vgeo_runtime/sample_asset.d.ts +3 -3
- package/src/shade/playground/vgeo_runtime/sample_asset.d.ts.map +1 -1
- package/src/shade/playground/vgeo_runtime/sample_asset.js +3 -3
- package/src/shade/playground/vgeo_scene/README.md +103 -24
- package/src/shade/playground/vgeo_scene/main.js +525 -24
- package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
- package/src/shade/renderer/GraphicsContext.js +6 -0
- package/src/shade/renderer/Renderer.d.ts +2 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +23 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +100 -8
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +69 -33
- package/src/shade/renderer/extension/RenderExtension.d.ts +15 -18
- package/src/shade/renderer/extension/RenderExtension.d.ts.map +1 -1
- package/src/shade/renderer/extension/RenderExtension.js +15 -19
- package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts +5 -5
- package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts.map +1 -1
- package/src/shade/renderer/extension/RenderExtensionRegistry.js +29 -166
- package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/GPUGeometryManager.js +73 -16
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +18 -3
- package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +663 -0
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +100 -5
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +688 -81
- package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +540 -0
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +155 -64
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +30 -13
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +3 -3
- package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +358 -0
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +57 -7
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +63 -9
- package/src/shade/renderer/geometry/virtual/build/level/VGeoContribution.d.ts +40 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoContribution.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoContribution.js +24 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.d.ts +91 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.js +91 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupRepack.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupRepack.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupRepack.js +25 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.d.ts +77 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.js +84 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts +19 -6
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.js +20 -7
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster.d.ts +19 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster.js +58 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster_graph.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster_graph.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster_graph.js +116 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js +545 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js +110 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts +2 -27
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.js +120 -1564
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_compute_group_boundary.d.ts +26 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_compute_group_boundary.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_compute_group_boundary.js +123 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_error_bands.d.ts +26 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_error_bands.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_error_bands.js +78 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.js +337 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts +29 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.js +147 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_stitch_frontier.d.ts +37 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_stitch_frontier.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_stitch_frontier.js +243 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts +29 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.js +117 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.d.ts +46 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.js +45 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_DEFAULT_ATTRIBUTE_WEIGHT_RATIOS.d.ts +64 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_DEFAULT_ATTRIBUTE_WEIGHT_RATIOS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_DEFAULT_ATTRIBUTE_WEIGHT_RATIOS.js +68 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts +12 -7
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.js +33 -11
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_layout.d.ts +58 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_layout.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_layout.js +79 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_read.d.ts +39 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_read.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_read.js +68 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_write.d.ts +53 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_write.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_write.js +243 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts +24 -8
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.js +250 -25
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts +12 -8
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.js +58 -50
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts +8 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.js +18 -3
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.d.ts +38 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.js +81 -0
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts +23 -5
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.js +28 -21
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.js +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js +224 -60
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.js +17 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.js +19 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts +10 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.js +103 -9
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts +14 -2
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.js +38 -14
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts +6 -2
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.js +28 -5
- package/src/shade/renderer/geometry/virtual/build/vgeo_subtree_bounds.d.ts +32 -0
- package/src/shade/renderer/geometry/virtual/build/vgeo_subtree_bounds.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/vgeo_subtree_bounds.js +93 -0
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts +20 -6
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.js +22 -8
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_corner.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_corner.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/{vgeo_layers_copy_vertex.js → vgeo_layers_copy_corner.js} +8 -8
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_declare.d.ts +18 -7
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_declare.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_declare.js +19 -8
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_like.d.ts +3 -3
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_like.js +3 -3
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_mesh_wedges.d.ts +27 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_mesh_wedges.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_mesh_wedges.js +97 -0
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.d.ts +7 -3
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.js +21 -11
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET_V4.d.ts +21 -0
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET_V4.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET_V4.js +41 -0
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts +19 -1
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.js +20 -1
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_DEFLATE.d.ts +25 -0
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_DEFLATE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_DEFLATE.js +24 -0
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.d.ts +5 -0
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.js +5 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_codec_name.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_codec_name.js +5 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.d.ts +10 -3
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.js +37 -3
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts +21 -13
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.js +37 -13
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.d.ts +8 -2
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.js +14 -2
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.js +19 -1
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_HEADER_OFFSET.js +6 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MAX_LEVEL_COUNT.d.ts +21 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MAX_LEVEL_COUNT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MAX_LEVEL_COUNT.js +20 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.d.ts +9 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.js +10 -1
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.d.ts +1 -2
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.js +10 -3
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET_V5.d.ts +20 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET_V5.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET_V5.js +43 -0
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts +4 -2
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.js +8 -4
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +2 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.d.ts +6 -4
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.js +6 -4
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +13 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +13 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts +5 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.js +14 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.js +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.d.ts +4 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.js +53 -11
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.js +7 -3
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts +12 -2
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +111 -33
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts +6 -2
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +112 -42
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts +2 -2
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +51 -21
- package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +385 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +9 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +34 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +18 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +47 -19
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.d.ts +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.js +22 -4
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.d.ts +7 -2
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.js +8 -3
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.js +10 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.js +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.d.ts +13 -11
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.js +13 -11
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js +4 -0
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -4
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts +6 -2
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.js +90 -12
- package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.d.ts +22 -0
- package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.js +21 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +13 -8
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +3 -6
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +4 -12
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +0 -2
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +4 -5
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +5 -3
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way.js +11 -4
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +4 -3
- 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 +3 -0
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +94 -90
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +13 -5
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +96 -89
- 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 +3 -1
- 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 +4 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +100 -89
- package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.js +31 -7
- package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js +1 -7
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +161 -153
- 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 +2 -7
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +4 -8
- 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 -8
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.d.ts +25 -0
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.js +24 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +10 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +30 -21
- package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_assign_layers.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_break_cycles.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_orient_links.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/cut_geometry.d.ts +0 -61
- package/src/shade/playground/vgeo_viewer/cut_geometry.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/main.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/sample_asset.d.ts +0 -18
- package/src/shade/playground/vgeo_viewer/sample_asset.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/select_cut.d.ts +0 -173
- package/src/shade/playground/vgeo_viewer/select_cut.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoFaceGraph.d.ts +0 -52
- package/src/shade/renderer/geometry/virtual/build/VGeoFaceGraph.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoGatheredFaces.d.ts +0 -24
- package/src/shade/renderer/geometry/virtual/build/VGeoGatheredFaces.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoLevel.d.ts +0 -32
- package/src/shade/renderer/geometry/virtual/build/VGeoLevel.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelOptions.d.ts +0 -59
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelOptions.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelSummary.d.ts +0 -44
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelSummary.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoSubmesh.d.ts +0 -20
- package/src/shade/renderer/geometry/virtual/build/VGeoSubmesh.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VirtualGeometryMesh.d.ts +0 -73
- package/src/shade/renderer/geometry/virtual/build/VirtualGeometryMesh.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts +0 -13
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_bounding_sphere.d.ts +0 -12
- package/src/shade/renderer/geometry/virtual/build/vgeo_bounding_sphere.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_levels.d.ts +0 -36
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_levels.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_page_nodes.d.ts +0 -13
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_page_nodes.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_root_group.d.ts +0 -19
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_root_group.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_normals.d.ts +0 -29
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_normals.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_tangents.d.ts +0 -31
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_tangents.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_containing_sphere.d.ts +0 -18
- package/src/shade/renderer/geometry/virtual/build/vgeo_containing_sphere.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_extract_submesh.d.ts +0 -14
- package/src/shade/renderer/geometry/virtual/build/vgeo_extract_submesh.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_gather_faces.d.ts +0 -12
- package/src/shade/renderer/geometry/virtual/build/vgeo_gather_faces.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_graph_components.d.ts +0 -14
- package/src/shade/renderer/geometry/virtual/build/vgeo_graph_components.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_narrow_indices.d.ts +0 -11
- package/src/shade/renderer/geometry/virtual/build/vgeo_narrow_indices.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_normalize_source.d.ts +0 -46
- package/src/shade/renderer/geometry/virtual/build/vgeo_normalize_source.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.d.ts +0 -22
- package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_partition_graph.d.ts +0 -29
- package/src/shade/renderer/geometry/virtual/build/vgeo_partition_graph.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_sphere_inflate_to_contain.d.ts +0 -9
- package/src/shade/renderer/geometry/virtual/build/vgeo_sphere_inflate_to_contain.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set.d.ts +0 -10
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set_packed.d.ts +0 -15
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set_packed.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_vertex.d.ts +0 -16
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_vertex.d.ts.map +0 -1
- package/src/shade/renderer/loader/gltf/fix_up_material_sides.d.ts +0 -10
- package/src/shade/renderer/loader/gltf/fix_up_material_sides.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.d.ts +0 -17
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.d.ts +0 -3
- package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.d.ts +0 -8
- package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.d.ts.map +0 -1
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_coordinates.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_layers.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_break_cycles.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_break_cycles.js +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_insert_lanes.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_insert_lanes.js +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_order_layers.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_order_layers.js +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_orient_links.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_orient_links.js +0 -0
- /package/src/shade/playground/{vgeo_viewer → caldera}/main.d.ts +0 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which corners of a mesh shade as one.
|
|
3
|
+
*
|
|
4
|
+
* A **wedge** is a set of loops at one vertex that carry the same appearance. A vertex has one
|
|
5
|
+
* position and the topology says so; it does not have one *appearance*, and a hard edge or a texture
|
|
6
|
+
* seam is exactly a vertex whose corners disagree. This is the structure that lets them.
|
|
7
|
+
*
|
|
8
|
+
* Three things, and the split between them is the whole design:
|
|
9
|
+
*
|
|
10
|
+
* - **{@link of_loop} is never written after construction.** A collapse re-points a victim's loops
|
|
11
|
+
* onto the survivor and leaves the loops themselves alone, so a corner's wedge id travels with it
|
|
12
|
+
* for free. Nothing has to find a corner in order to move it.
|
|
13
|
+
* - **{@link parent} is a union-find**, and merging two wedges is a union. That is what makes the
|
|
14
|
+
* previous point affordable: the ids a loop holds go stale, {@link find} resolves them, and no
|
|
15
|
+
* pass over the loop pool is ever needed to keep them true.
|
|
16
|
+
* - **{@link first_of_vertex} and {@link next_of_wedge} are one intrusive list per vertex**, which
|
|
17
|
+
* is what a collapse iterates. Two typed arrays rather than an array of arrays per vertex: a
|
|
18
|
+
* frontier holds every vertex of a level, and on smooth geometry every one of those lists has
|
|
19
|
+
* exactly one entry.
|
|
20
|
+
*
|
|
21
|
+
* Wedge ids need not be dense and need not agree with vertex ids. {@link bt_wedges_per_vertex}
|
|
22
|
+
* builds the degenerate set where they are vertex ids — one wedge per vertex, which is a mesh with
|
|
23
|
+
* no seams and is what every caller that does not care about appearance wants.
|
|
24
|
+
*
|
|
25
|
+
* @author Alex Goldring
|
|
26
|
+
* @copyright Company Named Limited (c) 2026
|
|
27
|
+
*/
|
|
28
|
+
export class BtWedgeSet {
|
|
29
|
+
/**
|
|
30
|
+
* The wedge each loop belongs to, indexed by loop id. Read through {@link find}, never trusted
|
|
31
|
+
* raw: a merge leaves it naming a wedge that is no longer a root.
|
|
32
|
+
* @type {Uint32Array}
|
|
33
|
+
*/
|
|
34
|
+
of_loop: Uint32Array;
|
|
35
|
+
/**
|
|
36
|
+
* Union-find over wedge ids. A root is its own parent.
|
|
37
|
+
* @type {Uint32Array}
|
|
38
|
+
*/
|
|
39
|
+
parent: Uint32Array;
|
|
40
|
+
/**
|
|
41
|
+
* Head of each vertex's wedge list, or `NULL_POINTER` for a vertex with no corners.
|
|
42
|
+
* @type {Uint32Array}
|
|
43
|
+
*/
|
|
44
|
+
first_of_vertex: Uint32Array;
|
|
45
|
+
/**
|
|
46
|
+
* Next wedge at the same vertex, or `NULL_POINTER`.
|
|
47
|
+
* @type {Uint32Array}
|
|
48
|
+
*/
|
|
49
|
+
next_of_wedge: Uint32Array;
|
|
50
|
+
/**
|
|
51
|
+
* How many wedge ids exist, live and merged-away together.
|
|
52
|
+
* @type {number}
|
|
53
|
+
*/
|
|
54
|
+
count: number;
|
|
55
|
+
/**
|
|
56
|
+
* The root of the wedge `wedge` has been merged into, or itself.
|
|
57
|
+
*
|
|
58
|
+
* Path-halving rather than full compression: it is one write per step instead of a second walk,
|
|
59
|
+
* and it gives the same near-constant amortized bound. This runs once per corner of every
|
|
60
|
+
* candidate the heap scores, which is several times per edge per round.
|
|
61
|
+
*
|
|
62
|
+
* @param {number} wedge
|
|
63
|
+
* @returns {number}
|
|
64
|
+
*/
|
|
65
|
+
find(wedge: number): number;
|
|
66
|
+
/**
|
|
67
|
+
* Make `other` part of `wedge`.
|
|
68
|
+
*
|
|
69
|
+
* Directed on purpose, where a union-find would normally pick the taller tree: the caller is
|
|
70
|
+
* merging a victim's wedge into a survivor's, and which id survives decides which vertex's list
|
|
71
|
+
* the result is on. Correctness beats the tree height, and the depth this trades away is what
|
|
72
|
+
* {@link find}'s path halving pays back.
|
|
73
|
+
*
|
|
74
|
+
* @param {number} wedge the root that survives
|
|
75
|
+
* @param {number} other the root that does not
|
|
76
|
+
* @returns {boolean} `false` when they were already one wedge and nothing was done
|
|
77
|
+
*/
|
|
78
|
+
merge(wedge: number, other: number): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Put `wedge` at the head of `vertex`'s list. It must be a root and must not be on any list.
|
|
81
|
+
*
|
|
82
|
+
* @param {number} wedge
|
|
83
|
+
* @param {number} vertex
|
|
84
|
+
*/
|
|
85
|
+
attach(wedge: number, vertex: number): void;
|
|
86
|
+
/**
|
|
87
|
+
* Drop every wedge `vertex` holds, without touching the wedges themselves.
|
|
88
|
+
*
|
|
89
|
+
* @param {number} vertex
|
|
90
|
+
*/
|
|
91
|
+
detach_all(vertex: number): void;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=BtWedgeSet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BtWedgeSet.d.ts","sourceRoot":"","sources":["../../../../../../../../src/core/geom/3d/topology/struct/binary/BtWedgeSet.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH;IACI;;;;OAIG;IACH,SAFU,WAAW,CAEQ;IAE7B;;;OAGG;IACH,QAFU,WAAW,CAEO;IAE5B;;;OAGG;IACH,iBAFU,WAAW,CAEgB;IAErC;;;OAGG;IACH,eAFU,WAAW,CAEc;IAEnC;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;;;;;;;OASG;IACH,YAHW,MAAM,GACJ,MAAM,CAclB;IAED;;;;;;;;;;;OAWG;IACH,aAJW,MAAM,SACN,MAAM,GACJ,OAAO,CAUnB;IAED;;;;;OAKG;IACH,cAHW,MAAM,UACN,MAAM,QAMhB;IAED;;;;OAIG;IACH,mBAFW,MAAM,QAIhB;CACJ"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { NULL_POINTER } from "./BinaryTopology.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Which corners of a mesh shade as one.
|
|
5
|
+
*
|
|
6
|
+
* A **wedge** is a set of loops at one vertex that carry the same appearance. A vertex has one
|
|
7
|
+
* position and the topology says so; it does not have one *appearance*, and a hard edge or a texture
|
|
8
|
+
* seam is exactly a vertex whose corners disagree. This is the structure that lets them.
|
|
9
|
+
*
|
|
10
|
+
* Three things, and the split between them is the whole design:
|
|
11
|
+
*
|
|
12
|
+
* - **{@link of_loop} is never written after construction.** A collapse re-points a victim's loops
|
|
13
|
+
* onto the survivor and leaves the loops themselves alone, so a corner's wedge id travels with it
|
|
14
|
+
* for free. Nothing has to find a corner in order to move it.
|
|
15
|
+
* - **{@link parent} is a union-find**, and merging two wedges is a union. That is what makes the
|
|
16
|
+
* previous point affordable: the ids a loop holds go stale, {@link find} resolves them, and no
|
|
17
|
+
* pass over the loop pool is ever needed to keep them true.
|
|
18
|
+
* - **{@link first_of_vertex} and {@link next_of_wedge} are one intrusive list per vertex**, which
|
|
19
|
+
* is what a collapse iterates. Two typed arrays rather than an array of arrays per vertex: a
|
|
20
|
+
* frontier holds every vertex of a level, and on smooth geometry every one of those lists has
|
|
21
|
+
* exactly one entry.
|
|
22
|
+
*
|
|
23
|
+
* Wedge ids need not be dense and need not agree with vertex ids. {@link bt_wedges_per_vertex}
|
|
24
|
+
* builds the degenerate set where they are vertex ids — one wedge per vertex, which is a mesh with
|
|
25
|
+
* no seams and is what every caller that does not care about appearance wants.
|
|
26
|
+
*
|
|
27
|
+
* @author Alex Goldring
|
|
28
|
+
* @copyright Company Named Limited (c) 2026
|
|
29
|
+
*/
|
|
30
|
+
export class BtWedgeSet {
|
|
31
|
+
/**
|
|
32
|
+
* The wedge each loop belongs to, indexed by loop id. Read through {@link find}, never trusted
|
|
33
|
+
* raw: a merge leaves it naming a wedge that is no longer a root.
|
|
34
|
+
* @type {Uint32Array}
|
|
35
|
+
*/
|
|
36
|
+
of_loop = new Uint32Array(0);
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Union-find over wedge ids. A root is its own parent.
|
|
40
|
+
* @type {Uint32Array}
|
|
41
|
+
*/
|
|
42
|
+
parent = new Uint32Array(0);
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Head of each vertex's wedge list, or `NULL_POINTER` for a vertex with no corners.
|
|
46
|
+
* @type {Uint32Array}
|
|
47
|
+
*/
|
|
48
|
+
first_of_vertex = new Uint32Array(0);
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Next wedge at the same vertex, or `NULL_POINTER`.
|
|
52
|
+
* @type {Uint32Array}
|
|
53
|
+
*/
|
|
54
|
+
next_of_wedge = new Uint32Array(0);
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* How many wedge ids exist, live and merged-away together.
|
|
58
|
+
* @type {number}
|
|
59
|
+
*/
|
|
60
|
+
count = 0;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The root of the wedge `wedge` has been merged into, or itself.
|
|
64
|
+
*
|
|
65
|
+
* Path-halving rather than full compression: it is one write per step instead of a second walk,
|
|
66
|
+
* and it gives the same near-constant amortized bound. This runs once per corner of every
|
|
67
|
+
* candidate the heap scores, which is several times per edge per round.
|
|
68
|
+
*
|
|
69
|
+
* @param {number} wedge
|
|
70
|
+
* @returns {number}
|
|
71
|
+
*/
|
|
72
|
+
find(wedge) {
|
|
73
|
+
const parent = this.parent;
|
|
74
|
+
|
|
75
|
+
let root = wedge;
|
|
76
|
+
|
|
77
|
+
while (parent[root] !== root) {
|
|
78
|
+
parent[root] = parent[parent[root]];
|
|
79
|
+
|
|
80
|
+
root = parent[root];
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return root;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Make `other` part of `wedge`.
|
|
88
|
+
*
|
|
89
|
+
* Directed on purpose, where a union-find would normally pick the taller tree: the caller is
|
|
90
|
+
* merging a victim's wedge into a survivor's, and which id survives decides which vertex's list
|
|
91
|
+
* the result is on. Correctness beats the tree height, and the depth this trades away is what
|
|
92
|
+
* {@link find}'s path halving pays back.
|
|
93
|
+
*
|
|
94
|
+
* @param {number} wedge the root that survives
|
|
95
|
+
* @param {number} other the root that does not
|
|
96
|
+
* @returns {boolean} `false` when they were already one wedge and nothing was done
|
|
97
|
+
*/
|
|
98
|
+
merge(wedge, other) {
|
|
99
|
+
if (wedge === other) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
this.parent[other] = wedge;
|
|
104
|
+
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Put `wedge` at the head of `vertex`'s list. It must be a root and must not be on any list.
|
|
110
|
+
*
|
|
111
|
+
* @param {number} wedge
|
|
112
|
+
* @param {number} vertex
|
|
113
|
+
*/
|
|
114
|
+
attach(wedge, vertex) {
|
|
115
|
+
this.next_of_wedge[wedge] = this.first_of_vertex[vertex];
|
|
116
|
+
|
|
117
|
+
this.first_of_vertex[vertex] = wedge;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Drop every wedge `vertex` holds, without touching the wedges themselves.
|
|
122
|
+
*
|
|
123
|
+
* @param {number} vertex
|
|
124
|
+
*/
|
|
125
|
+
detach_all(vertex) {
|
|
126
|
+
this.first_of_vertex[vertex] = NULL_POINTER;
|
|
127
|
+
}
|
|
128
|
+
}
|
package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One attribute quadric per wedge, accumulated from every allocated triangle.
|
|
3
|
+
*
|
|
4
|
+
* The companion of {@link bt_mesh_compute_vertex_quadrics}, and deliberately its *companion* rather
|
|
5
|
+
* than an extension of it: that one stays the pure geometric quadric, which is what lets the error a
|
|
6
|
+
* caller reports stay an object-space length no matter what this one does to the placement
|
|
7
|
+
* (`VIRTUAL_GEOMETRY_DESIGN.md` §3). Solve in the higher-dimensional metric, evaluate in the 3-D one.
|
|
8
|
+
*
|
|
9
|
+
* The attribute values arrive as a flat array indexed by **wedge** id — `components` scalars each,
|
|
10
|
+
* whatever they happen to mean. This pass does not know and does not need to: a channel is a number
|
|
11
|
+
* per corner that varies affinely over a triangle, and a normal, a texture coordinate and a colour
|
|
12
|
+
* are all that.
|
|
13
|
+
*
|
|
14
|
+
* Per wedge rather than per vertex because a vertex has one position and not one appearance, and per
|
|
15
|
+
* wedge rather than per *corner* because a single corner's quadric would only ever hold its own
|
|
16
|
+
* triangle — a field fitted from one triangle is exact and says nothing. The history is what a
|
|
17
|
+
* quadric is for, and the history belongs to the set of corners that share a value.
|
|
18
|
+
* {@link bt_wedges_per_vertex} is the set for a mesh with no seams, where a wedge id *is* a vertex
|
|
19
|
+
* id and this is per vertex again.
|
|
20
|
+
*
|
|
21
|
+
* Non-triangular faces are skipped, as they are in the geometric pass. So are slivers, by
|
|
22
|
+
* {@link quadric_attribute_set_from_triangle}'s own test — a gradient that divides by twice the area
|
|
23
|
+
* would otherwise outweigh every honest triangle around it.
|
|
24
|
+
*
|
|
25
|
+
* @param {BinaryTopology} mesh
|
|
26
|
+
* @param {ArrayLike<number>} values `wedges.count * components` scalars, indexed by wedge id
|
|
27
|
+
* @param {number} components number of scalar channels
|
|
28
|
+
* @param {ArrayLike<number>} weights one per channel, mapping it into units of length
|
|
29
|
+
* @param {BtWedgeSet} wedges which corners of each vertex shade as one
|
|
30
|
+
* @returns {Float64Array} `wedges.count * quadric_attribute_size(components)` elements, indexed by
|
|
31
|
+
* wedge id; a slot no triangle used holds a quadric of zero weight, which
|
|
32
|
+
* {@link quadric_attribute_solve} refuses rather than answering from
|
|
33
|
+
*
|
|
34
|
+
* @author Alex Goldring
|
|
35
|
+
* @copyright Company Named Limited (c) 2026
|
|
36
|
+
*/
|
|
37
|
+
export function bt_mesh_compute_wedge_attribute_quadrics(mesh: BinaryTopology, values: ArrayLike<number>, components: number, weights: ArrayLike<number>, wedges: BtWedgeSet): Float64Array;
|
|
38
|
+
//# sourceMappingURL=bt_mesh_compute_wedge_attribute_quadrics.d.ts.map
|
package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bt_mesh_compute_wedge_attribute_quadrics.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.js"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,uFAXW,UAAU,MAAM,CAAC,cACjB,MAAM,WACN,UAAU,MAAM,CAAC,uBAEf,YAAY,CAmExB"}
|
package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { assert } from "../../../../../../assert.js";
|
|
2
|
+
import {
|
|
3
|
+
quadric_attribute_add
|
|
4
|
+
} from "../../../../quadric/quadric_attribute_add.js";
|
|
5
|
+
import {
|
|
6
|
+
quadric_attribute_set_from_triangle
|
|
7
|
+
} from "../../../../quadric/quadric_attribute_set_from_triangle.js";
|
|
8
|
+
import { quadric_attribute_size } from "../../../../quadric/quadric_attribute_size.js";
|
|
9
|
+
import { NULL_POINTER } from "../BinaryTopology.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* One triangle's contribution, before it is accumulated onto each of its corners.
|
|
13
|
+
* @type {Float64Array}
|
|
14
|
+
*/
|
|
15
|
+
let scratch_quadric = new Float64Array(0);
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* One attribute quadric per wedge, accumulated from every allocated triangle.
|
|
19
|
+
*
|
|
20
|
+
* The companion of {@link bt_mesh_compute_vertex_quadrics}, and deliberately its *companion* rather
|
|
21
|
+
* than an extension of it: that one stays the pure geometric quadric, which is what lets the error a
|
|
22
|
+
* caller reports stay an object-space length no matter what this one does to the placement
|
|
23
|
+
* (`VIRTUAL_GEOMETRY_DESIGN.md` §3). Solve in the higher-dimensional metric, evaluate in the 3-D one.
|
|
24
|
+
*
|
|
25
|
+
* The attribute values arrive as a flat array indexed by **wedge** id — `components` scalars each,
|
|
26
|
+
* whatever they happen to mean. This pass does not know and does not need to: a channel is a number
|
|
27
|
+
* per corner that varies affinely over a triangle, and a normal, a texture coordinate and a colour
|
|
28
|
+
* are all that.
|
|
29
|
+
*
|
|
30
|
+
* Per wedge rather than per vertex because a vertex has one position and not one appearance, and per
|
|
31
|
+
* wedge rather than per *corner* because a single corner's quadric would only ever hold its own
|
|
32
|
+
* triangle — a field fitted from one triangle is exact and says nothing. The history is what a
|
|
33
|
+
* quadric is for, and the history belongs to the set of corners that share a value.
|
|
34
|
+
* {@link bt_wedges_per_vertex} is the set for a mesh with no seams, where a wedge id *is* a vertex
|
|
35
|
+
* id and this is per vertex again.
|
|
36
|
+
*
|
|
37
|
+
* Non-triangular faces are skipped, as they are in the geometric pass. So are slivers, by
|
|
38
|
+
* {@link quadric_attribute_set_from_triangle}'s own test — a gradient that divides by twice the area
|
|
39
|
+
* would otherwise outweigh every honest triangle around it.
|
|
40
|
+
*
|
|
41
|
+
* @param {BinaryTopology} mesh
|
|
42
|
+
* @param {ArrayLike<number>} values `wedges.count * components` scalars, indexed by wedge id
|
|
43
|
+
* @param {number} components number of scalar channels
|
|
44
|
+
* @param {ArrayLike<number>} weights one per channel, mapping it into units of length
|
|
45
|
+
* @param {BtWedgeSet} wedges which corners of each vertex shade as one
|
|
46
|
+
* @returns {Float64Array} `wedges.count * quadric_attribute_size(components)` elements, indexed by
|
|
47
|
+
* wedge id; a slot no triangle used holds a quadric of zero weight, which
|
|
48
|
+
* {@link quadric_attribute_solve} refuses rather than answering from
|
|
49
|
+
*
|
|
50
|
+
* @author Alex Goldring
|
|
51
|
+
* @copyright Company Named Limited (c) 2026
|
|
52
|
+
*/
|
|
53
|
+
export function bt_mesh_compute_wedge_attribute_quadrics(mesh, values, components, weights, wedges) {
|
|
54
|
+
assert.equal(mesh.isBinaryTopology, true, 'mesh.isBinaryTopology !== true');
|
|
55
|
+
assert.isPositiveInteger(components, 'components');
|
|
56
|
+
|
|
57
|
+
const size = quadric_attribute_size(components);
|
|
58
|
+
|
|
59
|
+
if (scratch_quadric.length < size) {
|
|
60
|
+
scratch_quadric = new Float64Array(size);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const result = new Float64Array(wedges.count * size);
|
|
64
|
+
|
|
65
|
+
const face_pool = mesh.faces;
|
|
66
|
+
|
|
67
|
+
const coordinate = new Float32Array(9);
|
|
68
|
+
|
|
69
|
+
for (let face = 0; face < face_pool.size; face++) {
|
|
70
|
+
if (!face_pool.is_allocated(face)) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const la = mesh.face_read_loop(face);
|
|
75
|
+
|
|
76
|
+
if (la === NULL_POINTER) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const lb = mesh.loop_read_next(la);
|
|
81
|
+
const lc = mesh.loop_read_next(lb);
|
|
82
|
+
|
|
83
|
+
if (mesh.loop_read_next(lc) !== la) {
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
mesh.vertex_read_coordinate(coordinate, 0, mesh.loop_read_vertex(la));
|
|
88
|
+
mesh.vertex_read_coordinate(coordinate, 3, mesh.loop_read_vertex(lb));
|
|
89
|
+
mesh.vertex_read_coordinate(coordinate, 6, mesh.loop_read_vertex(lc));
|
|
90
|
+
|
|
91
|
+
const wa = wedges.find(wedges.of_loop[la]);
|
|
92
|
+
const wb = wedges.find(wedges.of_loop[lb]);
|
|
93
|
+
const wc = wedges.find(wedges.of_loop[lc]);
|
|
94
|
+
|
|
95
|
+
const built = quadric_attribute_set_from_triangle(
|
|
96
|
+
scratch_quadric, 0, components, weights,
|
|
97
|
+
coordinate[0], coordinate[1], coordinate[2],
|
|
98
|
+
coordinate[3], coordinate[4], coordinate[5],
|
|
99
|
+
coordinate[6], coordinate[7], coordinate[8],
|
|
100
|
+
values, wa * components, wb * components, wc * components
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
if (!built) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
quadric_attribute_add(result, wa * size, result, wa * size, scratch_quadric, 0, components);
|
|
108
|
+
quadric_attribute_add(result, wb * size, result, wb * size, scratch_quadric, 0, components);
|
|
109
|
+
quadric_attribute_add(result, wc * size, result, wc * size, scratch_quadric, 0, components);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
@@ -71,9 +71,55 @@ export function bt_mesh_simplify(mesh: BinaryTopology, target_face_count: number
|
|
|
71
71
|
* @param {number} target_face_count Desired face count after simplification.
|
|
72
72
|
* @param {Set<number>} restricted_vertices Vertices that must not move or be removed.
|
|
73
73
|
* @param {Set<number>} protected_faces Faces that must not be removed.
|
|
74
|
+
* `attributes` is per-vertex data that travels *through* the collapse rather than being re-derived
|
|
75
|
+
* from the result. Whatever a merged vertex is to carry has to be decided here, from the values
|
|
76
|
+
* being merged: the mesh a collapse leaves behind is a different surface, and a value read off it
|
|
77
|
+
* afterwards describes that one rather than the one the caller started with.
|
|
78
|
+
*
|
|
79
|
+
* It is carried per **wedge** — a set of corners at one vertex that shade as one — so a hard edge
|
|
80
|
+
* or a texture seam survives a collapse instead of being averaged away. Which of the pair's wedges
|
|
81
|
+
* become one is decided by the faces the collapse destroys, in {@link reduce_pair_attributes}; a
|
|
82
|
+
* mesh with no seams has one wedge per vertex, every collapse merges the pair, and all of this is
|
|
83
|
+
* the arithmetic it always was.
|
|
84
|
+
*
|
|
85
|
+
* It is **fitted**, not inherited and not averaged. Each channel varies affinely over a triangle, so
|
|
86
|
+
* every triangle a wedge has ever absorbed says what that channel should be at any position; the
|
|
87
|
+
* survivor takes the value that best explains all of them at once, at the position it is being moved
|
|
88
|
+
* to ({@link quadric_attribute_solve}). Those same accumulated fields also reach the *placement* and
|
|
89
|
+
* the cost, through {@link quadric_attribute_reduce} -- so a collapse that would smear a crease or a
|
|
90
|
+
* texture seam is both moved away from it and priced for it. A vertex with no field to fit from
|
|
91
|
+
* falls back to a weighted blend, and a **restricted** survivor is left exactly as it is, for the
|
|
92
|
+
* same reason its position is.
|
|
93
|
+
*
|
|
94
|
+
* The values themselves mean nothing here. A caller whose record holds a direction or a flag rather
|
|
95
|
+
* than a quantity has to say so afterwards, over the array this leaves behind.
|
|
96
|
+
*
|
|
97
|
+
* What the call **returns** is still the pure geometric quadric's answer, evaluated at wherever the
|
|
98
|
+
* higher-dimensional metric put each vertex. Solving in one metric and reporting in the other is
|
|
99
|
+
* what keeps the number an object-space length (`VIRTUAL_GEOMETRY_DESIGN.md` §3).
|
|
100
|
+
*
|
|
74
101
|
* @param {Quadric3[]} quadratics indexed by vertex id, one per allocated vertex; mutated in place
|
|
102
|
+
* @param {{values: Float64Array, components: number, quadrics: Float64Array, weights: Float64Array}|null} [attributes]
|
|
103
|
+
* per-wedge records to carry through the collapses, with the attribute quadrics that fit them
|
|
104
|
+
* ({@link bt_mesh_compute_wedge_attribute_quadrics}) and the per-channel weights those were
|
|
105
|
+
* built with. `values` and `quadrics` are indexed by **wedge id**;
|
|
106
|
+
* {@link bt_wedges_per_vertex} is the set where that is the vertex id. `null` to carry nothing,
|
|
107
|
+
* which is what every caller but the virtual-geometry builder does. {@link bt_mesh_simplify_by_error}
|
|
108
|
+
* is not among them at all — it is a separate implementation with its own cost function, and so
|
|
109
|
+
* is untouched by any of this, which matters because it simplifies to a *tolerance* that an
|
|
110
|
+
* attribute term would quietly move.
|
|
111
|
+
* @param {BtWedgeSet|null} [wedges] which corners of each vertex shade as one, **mutated in place**
|
|
112
|
+
* as the collapses merge them. Required when `attributes` is given, and useful without it: a
|
|
113
|
+
* caller that carries no values may still care which corners of the result belong together, and
|
|
114
|
+
* a set that is not maintained is a set whose ids go stale — corners of one vertex would resolve
|
|
115
|
+
* to different wedges and every consumer downstream would see a seam that is not there.
|
|
75
116
|
* @returns {number} object-space distance the surface moved, `0` when no collapse was performed
|
|
76
117
|
*/
|
|
77
|
-
export function bt_mesh_simplify_with_quadrics(mesh: BinaryTopology, target_face_count: number, restricted_vertices: Set<number>, protected_faces: Set<number>, quadratics: Quadric3[]
|
|
118
|
+
export function bt_mesh_simplify_with_quadrics(mesh: BinaryTopology, target_face_count: number, restricted_vertices: Set<number>, protected_faces: Set<number>, quadratics: Quadric3[], attributes?: {
|
|
119
|
+
values: Float64Array;
|
|
120
|
+
components: number;
|
|
121
|
+
quadrics: Float64Array;
|
|
122
|
+
weights: Float64Array;
|
|
123
|
+
} | null, wedges?: BtWedgeSet | null): number;
|
|
78
124
|
import { Quadric3 } from "../../../../quadric/Quadric3.js";
|
|
79
125
|
//# sourceMappingURL=bt_mesh_simplify.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bt_mesh_simplify.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bt_mesh_simplify.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js"],"names":[],"mappings":"AA4yBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,0EALW,MAAM,wBACN,IAAI,MAAM,CAAC,oBACX,IAAI,MAAM,CAAC,GACT,MAAM,CAwBlB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,wFA/CW,MAAM,uBACN,IAAI,MAAM,CAAC,mBACX,IAAI,MAAM,CAAC,cA4BX,QAAQ,EAAE,eACV;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAC,GAAC,IAAI,WAS9F,aAAW,IAAI,GAKb,MAAM,CA2LlB;yBA/mCwB,iCAAiC"}
|