@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
|
@@ -1,28 +1,25 @@
|
|
|
1
1
|
import { assert } from "../../../../../../core/assert.js";
|
|
2
|
-
import {
|
|
3
|
-
bt_face_read_triangle_vertices
|
|
4
|
-
} from "../../../../../../core/geom/3d/topology/struct/binary/query/bt_face_read_triangle.js";
|
|
5
2
|
import { build_tangent_from_normal } from "../../../normals/build_tangent_from_normal.js";
|
|
6
3
|
import { geometry_build_tangents } from "../../../normals/geometry_build_tangents.js";
|
|
7
4
|
import { VGEO_ATTRIBUTE } from "../../format/attribute/VGEO_ATTRIBUTE.js";
|
|
8
5
|
|
|
9
6
|
/**
|
|
10
|
-
* One
|
|
7
|
+
* One corner's tangent, on its way into the format's channel.
|
|
11
8
|
* @type {Float32Array}
|
|
12
9
|
*/
|
|
13
10
|
const scratch_tangent = new Float32Array(4);
|
|
14
11
|
|
|
15
12
|
/**
|
|
16
|
-
* One
|
|
17
|
-
* @type {
|
|
13
|
+
* One corner's normal, read back out of the channel it ships in.
|
|
14
|
+
* @type {Float32Array}
|
|
18
15
|
*/
|
|
19
|
-
const
|
|
16
|
+
const scratch_normal = new Float32Array(3);
|
|
20
17
|
|
|
21
18
|
/**
|
|
22
|
-
*
|
|
19
|
+
* Tangents of a mesh, written into its tangent channel.
|
|
23
20
|
*
|
|
24
21
|
* A tangent is a direction *in the texture parameterization*, so where the mesh carries a `UV0` this
|
|
25
|
-
* is Lengyel's per-triangle solve accumulated per
|
|
22
|
+
* is Lengyel's per-triangle solve accumulated per **wedge** and orthogonalized against the normal —
|
|
26
23
|
* {@link geometry_build_tangents}, the same pass {@link Geometry#computeTangents} runs, so an asset
|
|
27
24
|
* that goes through the virtual-geometry builder gets the frame it would have got anywhere else.
|
|
28
25
|
* Where the mesh carries no UVs there is no parameterization to be tangent to, and the frame becomes
|
|
@@ -32,22 +29,26 @@ const scratch_triangle = new Uint32Array(3);
|
|
|
32
29
|
* the format's flat default, which is parallel to the normal over a whole band of any closed
|
|
33
30
|
* surface and degenerates the frame there.
|
|
34
31
|
*
|
|
32
|
+
* **Per wedge, and that is not a re-indexing of a per-vertex solve.** Lengyel's accumulation is over
|
|
33
|
+
* the triangles that share a value, and at a chart boundary the two sides do not: their UVs run in
|
|
34
|
+
* different directions and averaging them gives a tangent that is tangent to neither. So the solve
|
|
35
|
+
* is fed a mesh whose *vertices are the wedges* — the same substitution the cluster gather makes,
|
|
36
|
+
* and for the same reason — and the answer comes back one per wedge, which is then written to every
|
|
37
|
+
* corner of it.
|
|
38
|
+
*
|
|
35
39
|
* `pinned` carries the same meaning and the same reason as it does for
|
|
36
40
|
* {@link vgeo_compute_vertex_normals}: a vertex two groups share must carry byte-identical values in
|
|
37
41
|
* both, or the seam a cut is allowed to put between them shades as a crease.
|
|
38
42
|
*
|
|
39
|
-
*
|
|
40
|
-
* slots needs no compaction and no remap — a released slot is simply a triangle corner nothing
|
|
41
|
-
* names.
|
|
42
|
-
*
|
|
43
|
-
* @param {VirtualGeometryMesh} mesh whose tangent and normal layers are sized by the vertex pool
|
|
43
|
+
* @param {VirtualGeometryMesh} mesh whose tangent and normal layers are sized by the loop pool
|
|
44
44
|
* @param {Set<number>} pinned vertex ids to leave exactly as they are; empty for a mesh nothing has
|
|
45
45
|
* locked yet
|
|
46
|
+
* @param {BtWedgeSet} wedges which corners of each vertex shade as one
|
|
46
47
|
*
|
|
47
48
|
* @author Alex Goldring
|
|
48
49
|
* @copyright Company Named Limited (c) 2026
|
|
49
50
|
*/
|
|
50
|
-
export function vgeo_compute_vertex_tangents(mesh, pinned) {
|
|
51
|
+
export function vgeo_compute_vertex_tangents(mesh, pinned, wedges) {
|
|
51
52
|
const tangents = mesh.layers[VGEO_ATTRIBUTE.TANGENT];
|
|
52
53
|
const normals = mesh.layers[VGEO_ATTRIBUTE.NORMAL];
|
|
53
54
|
|
|
@@ -56,49 +57,37 @@ export function vgeo_compute_vertex_tangents(mesh, pinned) {
|
|
|
56
57
|
|
|
57
58
|
const topology = mesh.topology;
|
|
58
59
|
|
|
59
|
-
const
|
|
60
|
-
const vertex_pool_size = vertex_pool.size;
|
|
61
|
-
|
|
62
|
-
const normal_data = new Float32Array(vertex_pool_size * 3);
|
|
63
|
-
|
|
64
|
-
for (let vertex = 0; vertex < vertex_pool_size; vertex++) {
|
|
65
|
-
if (vertex_pool.is_allocated(vertex)) {
|
|
66
|
-
normals.read(normal_data, vertex * 3, vertex);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
60
|
+
const loop_pool = topology.loops;
|
|
69
61
|
|
|
70
62
|
const uv = mesh.layers[VGEO_ATTRIBUTE.UV0];
|
|
71
63
|
|
|
72
64
|
if (uv === null) {
|
|
73
|
-
for (let
|
|
74
|
-
if (!
|
|
65
|
+
for (let loop = 0; loop < loop_pool.size; loop++) {
|
|
66
|
+
if (!loop_pool.is_allocated(loop)) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (pinned.has(topology.loop_read_vertex(loop))) {
|
|
75
71
|
continue;
|
|
76
72
|
}
|
|
77
73
|
|
|
78
|
-
|
|
74
|
+
normals.read(scratch_normal, 0, loop);
|
|
79
75
|
|
|
80
76
|
build_tangent_from_normal(
|
|
81
|
-
|
|
82
|
-
0, scratch_tangent
|
|
77
|
+
scratch_normal[0], scratch_normal[1], scratch_normal[2], 0, scratch_tangent
|
|
83
78
|
);
|
|
84
79
|
|
|
85
|
-
tangents.write(
|
|
80
|
+
tangents.write(loop, scratch_tangent, 0);
|
|
86
81
|
}
|
|
87
82
|
|
|
88
83
|
return;
|
|
89
84
|
}
|
|
90
85
|
|
|
91
|
-
const
|
|
92
|
-
const uv_data = new Float32Array(vertex_pool_size * 2);
|
|
93
|
-
|
|
94
|
-
for (let vertex = 0; vertex < vertex_pool_size; vertex++) {
|
|
95
|
-
if (!vertex_pool.is_allocated(vertex)) {
|
|
96
|
-
continue;
|
|
97
|
-
}
|
|
86
|
+
const wedge_count = wedges.count;
|
|
98
87
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
88
|
+
const position_data = new Float32Array(wedge_count * 3);
|
|
89
|
+
const normal_data = new Float32Array(wedge_count * 3);
|
|
90
|
+
const uv_data = new Float32Array(wedge_count * 2);
|
|
102
91
|
|
|
103
92
|
const face_pool = topology.faces;
|
|
104
93
|
|
|
@@ -109,26 +98,45 @@ export function vgeo_compute_vertex_tangents(mesh, pinned) {
|
|
|
109
98
|
continue;
|
|
110
99
|
}
|
|
111
100
|
|
|
112
|
-
const
|
|
101
|
+
const first_loop = topology.face_read_loop(face);
|
|
102
|
+
|
|
103
|
+
let loop = first_loop;
|
|
104
|
+
|
|
105
|
+
for (let corner = 0; corner < 3; corner++) {
|
|
106
|
+
const wedge = wedges.find(wedges.of_loop[loop]);
|
|
107
|
+
|
|
108
|
+
indices.push(wedge);
|
|
109
|
+
|
|
110
|
+
topology.vertex_read_coordinate(
|
|
111
|
+
position_data, wedge * 3, topology.loop_read_vertex(loop)
|
|
112
|
+
);
|
|
113
|
+
|
|
114
|
+
normals.read(normal_data, wedge * 3, loop);
|
|
115
|
+
uv.read(uv_data, wedge * 2, loop);
|
|
113
116
|
|
|
114
|
-
|
|
117
|
+
loop = topology.loop_read_next(loop);
|
|
118
|
+
}
|
|
115
119
|
|
|
116
|
-
|
|
120
|
+
assert.equal(loop, first_loop, `face ${face} is not an allocated triangle`);
|
|
117
121
|
}
|
|
118
122
|
|
|
119
|
-
const tangent_data = new Float32Array(
|
|
123
|
+
const tangent_data = new Float32Array(wedge_count * 4);
|
|
120
124
|
|
|
121
125
|
geometry_build_tangents(
|
|
122
|
-
indices.length, indices,
|
|
126
|
+
indices.length, indices, wedge_count,
|
|
123
127
|
uv_data, position_data, normal_data, tangent_data
|
|
124
128
|
);
|
|
125
129
|
|
|
126
|
-
for (let
|
|
127
|
-
if (!
|
|
130
|
+
for (let loop = 0; loop < loop_pool.size; loop++) {
|
|
131
|
+
if (!loop_pool.is_allocated(loop)) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (pinned.has(topology.loop_read_vertex(loop))) {
|
|
128
136
|
continue;
|
|
129
137
|
}
|
|
130
138
|
|
|
131
|
-
const address =
|
|
139
|
+
const address = wedges.find(wedges.of_loop[loop]) * 4;
|
|
132
140
|
|
|
133
141
|
// A tangent that came out non-finite is a frame the shading model cannot use and the
|
|
134
142
|
// octahedral encoder cannot represent, and it would reach the asset as a silently wrong
|
|
@@ -138,6 +146,6 @@ export function vgeo_compute_vertex_tangents(mesh, pinned) {
|
|
|
138
146
|
assert.isFinite(tangent_data[address + 2], 'tangent z');
|
|
139
147
|
assert.isFinite(tangent_data[address + 3], 'tangent handedness');
|
|
140
148
|
|
|
141
|
-
tangents.write(
|
|
149
|
+
tangents.write(loop, tangent_data, address);
|
|
142
150
|
}
|
|
143
151
|
}
|
|
@@ -34,13 +34,20 @@
|
|
|
34
34
|
* and the fuse would then pick one of those halves to keep. Derived after it, the vertex has its
|
|
35
35
|
* whole ring. Channels the source did carry are left exactly as they came.
|
|
36
36
|
*
|
|
37
|
+
* **And the weld no longer flattens what it fused.** It merges *positions*, because connectivity is
|
|
38
|
+
* what it is for; the corners it re-points keep the values they arrived with, so a vertex the source
|
|
39
|
+
* split to say its two sides shade differently comes out of here still saying it. That is
|
|
40
|
+
* `WEDGE_PLAN_2026_09_18.md` §6.2, and the line it deleted was a whole module.
|
|
41
|
+
*
|
|
37
42
|
* @param {VirtualGeometryMesh} mesh mutated in place
|
|
38
43
|
* @param {number} weld_ratio fraction of the bounding-box diagonal; see
|
|
39
44
|
* {@link VGeoBuildOptions#weld_ratio}
|
|
45
|
+
* @param {number} [crease_angle] degrees; see {@link VGeoBuildOptions#crease_angle}. Only reaches a
|
|
46
|
+
* channel the source did not author.
|
|
40
47
|
* @returns {number} the object-space distance the ratio came to for this mesh
|
|
41
48
|
*
|
|
42
49
|
* @author Alex Goldring
|
|
43
50
|
* @copyright Company Named Limited (c) 2026
|
|
44
51
|
*/
|
|
45
|
-
export function vgeo_normalize_source(mesh: VirtualGeometryMesh, weld_ratio: number): number;
|
|
52
|
+
export function vgeo_normalize_source(mesh: VirtualGeometryMesh, weld_ratio: number, crease_angle?: number): number;
|
|
46
53
|
//# sourceMappingURL=vgeo_normalize_source.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_normalize_source.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vgeo_normalize_source.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.js"],"names":[],"mappings":"AAiCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,6EATW,MAAM,iBAEN,MAAM,GAEJ,MAAM,CA+ClB"}
|
|
@@ -19,6 +19,8 @@ import {
|
|
|
19
19
|
} from "../../../../../../core/geom/3d/topology/struct/binary/io/vertex/bt_mesh_relative_merge_distance.js";
|
|
20
20
|
import { bt_mesh_validate } from "../../../../../../core/geom/3d/topology/struct/binary/query/bt_mesh_validate.js";
|
|
21
21
|
import { VGEO_ATTRIBUTE } from "../../format/attribute/VGEO_ATTRIBUTE.js";
|
|
22
|
+
import { vgeo_mesh_wedges } from "../../format/attribute/vgeo_mesh_wedges.js";
|
|
23
|
+
import { VGEO_CREASE_ANGLE } from "./VGEO_CREASE_ANGLE.js";
|
|
22
24
|
import { vgeo_compute_vertex_normals } from "./vgeo_compute_vertex_normals.js";
|
|
23
25
|
import { vgeo_compute_vertex_tangents } from "./vgeo_compute_vertex_tangents.js";
|
|
24
26
|
|
|
@@ -65,15 +67,22 @@ const NOTHING_PINNED = new Set();
|
|
|
65
67
|
* and the fuse would then pick one of those halves to keep. Derived after it, the vertex has its
|
|
66
68
|
* whole ring. Channels the source did carry are left exactly as they came.
|
|
67
69
|
*
|
|
70
|
+
* **And the weld no longer flattens what it fused.** It merges *positions*, because connectivity is
|
|
71
|
+
* what it is for; the corners it re-points keep the values they arrived with, so a vertex the source
|
|
72
|
+
* split to say its two sides shade differently comes out of here still saying it. That is
|
|
73
|
+
* `WEDGE_PLAN_2026_09_18.md` §6.2, and the line it deleted was a whole module.
|
|
74
|
+
*
|
|
68
75
|
* @param {VirtualGeometryMesh} mesh mutated in place
|
|
69
76
|
* @param {number} weld_ratio fraction of the bounding-box diagonal; see
|
|
70
77
|
* {@link VGeoBuildOptions#weld_ratio}
|
|
78
|
+
* @param {number} [crease_angle] degrees; see {@link VGeoBuildOptions#crease_angle}. Only reaches a
|
|
79
|
+
* channel the source did not author.
|
|
71
80
|
* @returns {number} the object-space distance the ratio came to for this mesh
|
|
72
81
|
*
|
|
73
82
|
* @author Alex Goldring
|
|
74
83
|
* @copyright Company Named Limited (c) 2026
|
|
75
84
|
*/
|
|
76
|
-
export function vgeo_normalize_source(mesh, weld_ratio) {
|
|
85
|
+
export function vgeo_normalize_source(mesh, weld_ratio, crease_angle = VGEO_CREASE_ANGLE) {
|
|
77
86
|
const topology = mesh.topology;
|
|
78
87
|
|
|
79
88
|
const weld_distance = bt_mesh_relative_merge_distance(topology, weld_ratio);
|
|
@@ -101,11 +110,17 @@ export function vgeo_normalize_source(mesh, weld_ratio) {
|
|
|
101
110
|
// Normals first: the tangent solve reads them, and a synthesized normal beside an authored
|
|
102
111
|
// tangent is still the pair the frame is built from.
|
|
103
112
|
if (mesh.synthesized[VGEO_ATTRIBUTE.NORMAL]) {
|
|
104
|
-
vgeo_compute_vertex_normals(mesh, NOTHING_PINNED);
|
|
113
|
+
vgeo_compute_vertex_normals(mesh, NOTHING_PINNED, crease_angle);
|
|
105
114
|
}
|
|
106
115
|
|
|
116
|
+
/*
|
|
117
|
+
And the wedges only once the normals are settled, because a crease the pass above just made is
|
|
118
|
+
one of the things a wedge is. A tangent it has not computed yet is uniform and splits nothing,
|
|
119
|
+
and the one it is about to compute is a function of the wedge -- so this partition is the same
|
|
120
|
+
one `vgeo_build_leaf_frontier` reads back afterwards, with or without the tangent in it.
|
|
121
|
+
*/
|
|
107
122
|
if (mesh.synthesized[VGEO_ATTRIBUTE.TANGENT]) {
|
|
108
|
-
vgeo_compute_vertex_tangents(mesh, NOTHING_PINNED);
|
|
123
|
+
vgeo_compute_vertex_tangents(mesh, NOTHING_PINNED, vgeo_mesh_wedges(topology));
|
|
109
124
|
}
|
|
110
125
|
|
|
111
126
|
return weld_distance;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turn the per-channel weight *ratios* an asset is built with into the per-component weights the
|
|
3
|
+
* simplifier's metric needs, against this mesh's own size.
|
|
4
|
+
*
|
|
5
|
+
* ## Why there is a weight at all
|
|
6
|
+
*
|
|
7
|
+
* An attribute quadric's gradient carries units of *attribute per length*, so what it evaluates to
|
|
8
|
+
* is dimensionless, while the geometric quadric beside it evaluates to a squared length. Summing
|
|
9
|
+
* those without saying how a unit of one compares with a unit of the other is meaningless — the
|
|
10
|
+
* answer would depend on nothing but the arbitrary range the channel happens to use. The weight is
|
|
11
|
+
* that statement: how many object-space units of position error a full unit of this channel is
|
|
12
|
+
* worth.
|
|
13
|
+
*
|
|
14
|
+
* ## Why it is a ratio
|
|
15
|
+
*
|
|
16
|
+
* For the same reason {@link VGeoBuildOptions#weld_ratio} is. A conversion is many geometries at
|
|
17
|
+
* many sizes, and a fixed distance that is right for a doorknob is wrong for a cathedral; a fraction
|
|
18
|
+
* of the geometry's own diagonal is right for both.
|
|
19
|
+
*
|
|
20
|
+
* **Resolve it once, off the source, before any pass has removed anything**, and hand the result
|
|
21
|
+
* down — every level of the DAG has to be built against the same statement, and the mesh shrinks as
|
|
22
|
+
* the build goes on.
|
|
23
|
+
*
|
|
24
|
+
* The result is indexed by *component of the attribute vector*, not by channel: a normal's three
|
|
25
|
+
* components share one ratio because they are one direction, and the simplifier wants the number
|
|
26
|
+
* beside the value it multiplies.
|
|
27
|
+
*
|
|
28
|
+
* @param {VirtualGeometryMesh} mesh
|
|
29
|
+
* @param {ArrayLike<number>} ratios one per {@link VGEO_ATTRIBUTES} entry; see
|
|
30
|
+
* {@link VGeoBuildOptions#attribute_weight_ratios}
|
|
31
|
+
* @returns {Float64Array} one weight per component of {@link vgeo_attribute_vector_layout}'s vector;
|
|
32
|
+
* empty where the mesh carries no travelling channel at all
|
|
33
|
+
*
|
|
34
|
+
* @author Alex Goldring
|
|
35
|
+
* @copyright Company Named Limited (c) 2026
|
|
36
|
+
*/
|
|
37
|
+
export function vgeo_resolve_attribute_weights(mesh: VirtualGeometryMesh, ratios: ArrayLike<number>): Float64Array;
|
|
38
|
+
//# sourceMappingURL=vgeo_resolve_attribute_weights.d.ts.map
|
package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vgeo_resolve_attribute_weights.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,kFARW,UAAU,MAAM,CAAC,GAEf,YAAY,CAsCxB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { assert } from "../../../../../../core/assert.js";
|
|
2
|
+
import { AABB3 } from "../../../../../../core/geom/3d/aabb/AABB3.js";
|
|
3
|
+
import {
|
|
4
|
+
bt_mesh_compute_bounding_box
|
|
5
|
+
} from "../../../../../../core/geom/3d/topology/struct/binary/query/bt_mesh_compute_bounding_box.js";
|
|
6
|
+
import { vgeo_attribute_vector_layout } from "./vgeo_attribute_vector_layout.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @type {AABB3}
|
|
10
|
+
*/
|
|
11
|
+
const scratch_bounds = new AABB3();
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Turn the per-channel weight *ratios* an asset is built with into the per-component weights the
|
|
15
|
+
* simplifier's metric needs, against this mesh's own size.
|
|
16
|
+
*
|
|
17
|
+
* ## Why there is a weight at all
|
|
18
|
+
*
|
|
19
|
+
* An attribute quadric's gradient carries units of *attribute per length*, so what it evaluates to
|
|
20
|
+
* is dimensionless, while the geometric quadric beside it evaluates to a squared length. Summing
|
|
21
|
+
* those without saying how a unit of one compares with a unit of the other is meaningless — the
|
|
22
|
+
* answer would depend on nothing but the arbitrary range the channel happens to use. The weight is
|
|
23
|
+
* that statement: how many object-space units of position error a full unit of this channel is
|
|
24
|
+
* worth.
|
|
25
|
+
*
|
|
26
|
+
* ## Why it is a ratio
|
|
27
|
+
*
|
|
28
|
+
* For the same reason {@link VGeoBuildOptions#weld_ratio} is. A conversion is many geometries at
|
|
29
|
+
* many sizes, and a fixed distance that is right for a doorknob is wrong for a cathedral; a fraction
|
|
30
|
+
* of the geometry's own diagonal is right for both.
|
|
31
|
+
*
|
|
32
|
+
* **Resolve it once, off the source, before any pass has removed anything**, and hand the result
|
|
33
|
+
* down — every level of the DAG has to be built against the same statement, and the mesh shrinks as
|
|
34
|
+
* the build goes on.
|
|
35
|
+
*
|
|
36
|
+
* The result is indexed by *component of the attribute vector*, not by channel: a normal's three
|
|
37
|
+
* components share one ratio because they are one direction, and the simplifier wants the number
|
|
38
|
+
* beside the value it multiplies.
|
|
39
|
+
*
|
|
40
|
+
* @param {VirtualGeometryMesh} mesh
|
|
41
|
+
* @param {ArrayLike<number>} ratios one per {@link VGEO_ATTRIBUTES} entry; see
|
|
42
|
+
* {@link VGeoBuildOptions#attribute_weight_ratios}
|
|
43
|
+
* @returns {Float64Array} one weight per component of {@link vgeo_attribute_vector_layout}'s vector;
|
|
44
|
+
* empty where the mesh carries no travelling channel at all
|
|
45
|
+
*
|
|
46
|
+
* @author Alex Goldring
|
|
47
|
+
* @copyright Company Named Limited (c) 2026
|
|
48
|
+
*/
|
|
49
|
+
export function vgeo_resolve_attribute_weights(mesh, ratios) {
|
|
50
|
+
const layout = vgeo_attribute_vector_layout(mesh.layers);
|
|
51
|
+
|
|
52
|
+
const result = new Float64Array(layout.components);
|
|
53
|
+
|
|
54
|
+
if (layout.components === 0) {
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
bt_mesh_compute_bounding_box(scratch_bounds, mesh.topology);
|
|
59
|
+
|
|
60
|
+
const diagonal = Math.hypot(
|
|
61
|
+
scratch_bounds.width, scratch_bounds.height, scratch_bounds.depth
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
assert.greaterThan(
|
|
65
|
+
diagonal, 0,
|
|
66
|
+
'the mesh has no extent for an attribute weight to be a fraction of: every vertex is one point'
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
for (const channel of layout.channels) {
|
|
70
|
+
const weight = ratios[channel.attribute] * diagonal;
|
|
71
|
+
|
|
72
|
+
// A weight of zero makes the channel's whole contribution vanish from the metric and then
|
|
73
|
+
// divides the fit by it, which reaches the asset as a silently infinite value rather than as
|
|
74
|
+
// a channel that does not matter.
|
|
75
|
+
assert.greaterThan(weight, 0, `weight of attribute ${channel.attribute}`);
|
|
76
|
+
|
|
77
|
+
result.fill(weight, channel.offset, channel.offset + channel.count);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A face-adjacency graph together with the mesh it came from, kept so that repeated splits over the
|
|
3
|
+
* same level do not rebuild it.
|
|
4
|
+
*
|
|
5
|
+
* @author Alex Goldring
|
|
6
|
+
* @copyright Company Named Limited (c) 2026
|
|
7
|
+
*/
|
|
1
8
|
export class VGeoFaceGraph {
|
|
2
9
|
/**
|
|
3
10
|
* @param {BinaryTopology} mesh
|
|
4
11
|
* @param {BinaryTopologyFaceGraph} face_graph
|
|
12
|
+
* @param {BtWedgeSet} wedges
|
|
5
13
|
*/
|
|
6
|
-
constructor(mesh: BinaryTopology, face_graph: BinaryTopologyFaceGraph);
|
|
14
|
+
constructor(mesh: BinaryTopology, face_graph: BinaryTopologyFaceGraph, wedges: BtWedgeSet);
|
|
7
15
|
/**
|
|
8
16
|
* @type {BinaryTopology}
|
|
9
17
|
*/
|
|
@@ -19,10 +27,15 @@ export class VGeoFaceGraph {
|
|
|
19
27
|
*/
|
|
20
28
|
vertex_face_ids: Uint32Array;
|
|
21
29
|
/**
|
|
22
|
-
*
|
|
30
|
+
* Which corners of each vertex shade as one, because that is what a cluster's vertices are.
|
|
31
|
+
* @type {BtWedgeSet}
|
|
32
|
+
*/
|
|
33
|
+
wedges: BtWedgeSet;
|
|
34
|
+
/**
|
|
35
|
+
* Scratch stamp for unique-wedge counting, one entry per wedge id.
|
|
23
36
|
* @type {Int32Array}
|
|
24
37
|
*/
|
|
25
|
-
|
|
38
|
+
wedge_stamp: Int32Array;
|
|
26
39
|
/**
|
|
27
40
|
* Monotonic stamp value, so the scratch never needs clearing.
|
|
28
41
|
* @type {number}
|
|
@@ -42,11 +55,16 @@ export class VGeoFaceGraph {
|
|
|
42
55
|
*/
|
|
43
56
|
member_index: Uint32Array;
|
|
44
57
|
/**
|
|
45
|
-
* How many distinct
|
|
58
|
+
* How many distinct **wedges** a set of dense face-graph vertices touches.
|
|
59
|
+
*
|
|
60
|
+
* Wedges and not vertices, because the ceiling this feeds is the meshlet's vertex limit and a
|
|
61
|
+
* meshlet carries one record per wedge: two corners of a vertex that shade differently are two
|
|
62
|
+
* of its vertices. Counting the mesh's instead reads low at every crease and every chart
|
|
63
|
+
* boundary — measured, on a scene of separate hard-edged parts, at 240 against a cap of 128.
|
|
46
64
|
*
|
|
47
65
|
* @param {number[]|Int32Array} members dense face-graph vertices
|
|
48
66
|
* @returns {number}
|
|
49
67
|
*/
|
|
50
|
-
|
|
68
|
+
count_unique_wedges(members: number[] | Int32Array): number;
|
|
51
69
|
}
|
|
52
70
|
//# sourceMappingURL=VGeoFaceGraph.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VGeoFaceGraph.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"VGeoFaceGraph.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH;IAkDI;;;;OAIG;IACH,2FAOC;IA7DD;;OAEG;IACH,qBAAY;IAEZ;;;OAGG;IACH,kBAAa;IAEb;;;OAGG;IACH,iBAFU,WAAW,CAEE;IAEvB;;;OAGG;IACH,mBAAc;IAEd;;;OAGG;IACH,aAFU,UAAU,CAED;IAEnB;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;;;;;;;;;OAWG;IACH,cAFU,WAAW,CAED;IAgBpB;;;;;;;;;;OAUG;IACH,6BAHW,MAAM,EAAE,GAAC,UAAU,GACjB,MAAM,CA4BlB;CACJ"}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
bt_face_read_triangle_vertices
|
|
3
|
-
} from "../../../../../../core/geom/3d/topology/struct/binary/query/bt_face_read_triangle.js";
|
|
4
|
-
|
|
5
1
|
/**
|
|
6
2
|
* A face-adjacency graph together with the mesh it came from, kept so that repeated splits over the
|
|
7
3
|
* same level do not rebuild it.
|
|
@@ -9,9 +5,6 @@ import {
|
|
|
9
5
|
* @author Alex Goldring
|
|
10
6
|
* @copyright Company Named Limited (c) 2026
|
|
11
7
|
*/
|
|
12
|
-
|
|
13
|
-
const scratch_triangle = new Uint32Array(3);
|
|
14
|
-
|
|
15
8
|
export class VGeoFaceGraph {
|
|
16
9
|
/**
|
|
17
10
|
* @type {BinaryTopology}
|
|
@@ -31,10 +24,16 @@ export class VGeoFaceGraph {
|
|
|
31
24
|
vertex_face_ids = null;
|
|
32
25
|
|
|
33
26
|
/**
|
|
34
|
-
*
|
|
27
|
+
* Which corners of each vertex shade as one, because that is what a cluster's vertices are.
|
|
28
|
+
* @type {BtWedgeSet}
|
|
29
|
+
*/
|
|
30
|
+
wedges = null;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Scratch stamp for unique-wedge counting, one entry per wedge id.
|
|
35
34
|
* @type {Int32Array}
|
|
36
35
|
*/
|
|
37
|
-
|
|
36
|
+
wedge_stamp = null;
|
|
38
37
|
|
|
39
38
|
/**
|
|
40
39
|
* Monotonic stamp value, so the scratch never needs clearing.
|
|
@@ -59,42 +58,50 @@ export class VGeoFaceGraph {
|
|
|
59
58
|
/**
|
|
60
59
|
* @param {BinaryTopology} mesh
|
|
61
60
|
* @param {BinaryTopologyFaceGraph} face_graph
|
|
61
|
+
* @param {BtWedgeSet} wedges
|
|
62
62
|
*/
|
|
63
|
-
constructor(mesh, face_graph) {
|
|
63
|
+
constructor(mesh, face_graph, wedges) {
|
|
64
64
|
this.mesh = mesh;
|
|
65
65
|
this.graph = face_graph.graph;
|
|
66
66
|
this.vertex_face_ids = face_graph.vertex_face_ids;
|
|
67
|
-
this.
|
|
67
|
+
this.wedges = wedges;
|
|
68
|
+
this.wedge_stamp = new Int32Array(wedges.parent.length).fill(-1);
|
|
68
69
|
this.member_index = new Uint32Array(face_graph.graph.vertex_count);
|
|
69
70
|
}
|
|
70
71
|
|
|
71
72
|
/**
|
|
72
|
-
* How many distinct
|
|
73
|
+
* How many distinct **wedges** a set of dense face-graph vertices touches.
|
|
74
|
+
*
|
|
75
|
+
* Wedges and not vertices, because the ceiling this feeds is the meshlet's vertex limit and a
|
|
76
|
+
* meshlet carries one record per wedge: two corners of a vertex that shade differently are two
|
|
77
|
+
* of its vertices. Counting the mesh's instead reads low at every crease and every chart
|
|
78
|
+
* boundary — measured, on a scene of separate hard-edged parts, at 240 against a cap of 128.
|
|
73
79
|
*
|
|
74
80
|
* @param {number[]|Int32Array} members dense face-graph vertices
|
|
75
81
|
* @returns {number}
|
|
76
82
|
*/
|
|
77
|
-
|
|
83
|
+
count_unique_wedges(members) {
|
|
78
84
|
const stamp = this.stamp++;
|
|
79
85
|
|
|
80
86
|
let count = 0;
|
|
81
87
|
|
|
82
88
|
const vertex_face_ids = this.vertex_face_ids;
|
|
83
89
|
const mesh = this.mesh;
|
|
84
|
-
const
|
|
90
|
+
const wedges = this.wedges;
|
|
91
|
+
const wedge_stamp = this.wedge_stamp;
|
|
85
92
|
|
|
86
93
|
for (const member of members) {
|
|
94
|
+
let loop = mesh.face_read_loop(vertex_face_ids[member]);
|
|
87
95
|
|
|
88
|
-
|
|
89
|
-
|
|
96
|
+
for (let corner = 0; corner < 3; corner++) {
|
|
97
|
+
const wedge = wedges.find(wedges.of_loop[loop]);
|
|
90
98
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (vertex_stamp[vertex] !== stamp) {
|
|
95
|
-
vertex_stamp[vertex] = stamp;
|
|
99
|
+
if (wedge_stamp[wedge] !== stamp) {
|
|
100
|
+
wedge_stamp[wedge] = stamp;
|
|
96
101
|
count++;
|
|
97
102
|
}
|
|
103
|
+
|
|
104
|
+
loop = mesh.loop_read_next(loop);
|
|
98
105
|
}
|
|
99
106
|
}
|
|
100
107
|
|
|
@@ -115,7 +115,7 @@ export function vgeo_split_face_set(face_graph, members, max_faces, max_vertices
|
|
|
115
115
|
for (const component of components) {
|
|
116
116
|
if (
|
|
117
117
|
component.length <= max_faces
|
|
118
|
-
&& face_graph.
|
|
118
|
+
&& face_graph.count_unique_wedges(component) <= max_vertices
|
|
119
119
|
) {
|
|
120
120
|
result.push(component);
|
|
121
121
|
|
package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_split_face_set_packed.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vgeo_split_face_set_packed.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js"],"names":[],"mappings":"AAmVA;;;;;;;;;;;;GAYG;AACH,+EALW,MAAM,EAAE,aACR,MAAM,gBACN,MAAM,GACJ,MAAM,EAAE,EAAE,CAoBtB"}
|