@woosh/meep-engine 3.27.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/mat4/m4_linear_determinant.d.ts +15 -0
- package/src/core/geom/3d/mat4/m4_linear_determinant.d.ts.map +1 -0
- package/src/core/geom/3d/mat4/m4_linear_determinant.js +24 -0
- package/src/core/geom/3d/mat4/m4_normal_matrix3.d.ts +4 -2
- package/src/core/geom/3d/mat4/m4_normal_matrix3.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/m4_normal_matrix3.js +21 -11
- 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/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +38 -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/GraphicsEngine.d.ts +5 -1
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine.js +834 -830
- package/src/engine/graphics3/prefab/prefab_instantiate.js +230 -230
- package/src/shade/RENDERER_CONTRACT.md +31 -17
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +1 -1
- 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 +32 -16
- package/src/shade/playground/vgeo_runtime/main.js +21 -7
- package/src/shade/playground/{vgeo_viewer → vgeo_runtime}/sample_asset.d.ts +3 -3
- package/src/shade/playground/vgeo_runtime/sample_asset.d.ts.map +1 -0
- package/src/shade/playground/{vgeo_viewer → vgeo_runtime}/sample_asset.js +12 -11
- package/src/shade/playground/vgeo_scene/README.md +487 -0
- package/src/shade/playground/vgeo_scene/index.html +144 -0
- package/src/shade/playground/vgeo_scene/main.d.ts +2 -0
- package/src/shade/playground/vgeo_scene/main.d.ts.map +1 -0
- package/src/shade/playground/vgeo_scene/main.js +2217 -0
- 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 +6 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +28 -2
- 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 +70 -35
- 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/meshlet/MeshletBatch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +3 -29
- package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.d.ts +22 -0
- package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.d.ts.map +1 -0
- package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.js +49 -0
- package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +540 -0
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +159 -66
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +40 -21
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +15 -14
- package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +358 -0
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +58 -8
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +64 -10
- package/src/shade/renderer/geometry/virtual/build/gltf/gltf_open_document.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/gltf/gltf_open_document.js +5 -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/VGeoLevel.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{VGeoLevelOptions.d.ts → level/VGeoLevelOptions.d.ts} +19 -6
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{VGeoLevelOptions.js → level/VGeoLevelOptions.js} +20 -7
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelSummary.d.ts.map +1 -0
- 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 +11 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.js +308 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_build_root_group.d.ts → level/vgeo_build_root_group.d.ts} +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_root_group.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_build_root_group.js → level/vgeo_build_root_group.js} +1 -1
- 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/{VirtualGeometryMesh.d.ts → mesh/VirtualGeometryMesh.d.ts} +13 -8
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{VirtualGeometryMesh.js → mesh/VirtualGeometryMesh.js} +40 -18
- 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 +45 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.js +300 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_compute_vertex_tangents.d.ts → 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 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.js +151 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_normalize_source.d.ts → mesh/vgeo_normalize_source.d.ts} +8 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_normalize_source.js → mesh/vgeo_normalize_source.js} +27 -12
- 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/{vgeo_assemble_pages.d.ts → page/vgeo_assemble_pages.d.ts} +1 -1
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_assemble_pages.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_assemble_pages.js → page/vgeo_assemble_pages.js} +9 -9
- package/src/shade/renderer/geometry/virtual/build/{vgeo_build_page_nodes.d.ts → page/vgeo_build_page_nodes.d.ts} +1 -1
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_build_page_nodes.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_build_page_nodes.js → page/vgeo_build_page_nodes.js} +4 -4
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_page_node_count.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_page_node_count.js → page/vgeo_page_node_count.js} +2 -2
- package/src/shade/renderer/geometry/virtual/build/{VGeoFaceGraph.d.ts → partition/VGeoFaceGraph.d.ts} +23 -5
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{VGeoFaceGraph.js → partition/VGeoFaceGraph.js} +28 -21
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_graph.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_partition_graph.js → partition/vgeo_partition_graph.js} +2 -2
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.d.ts +41 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.js +92 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_split_face_set.js → partition/vgeo_split_face_set.js} +13 -56
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js +371 -0
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_bounding_sphere.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_bounding_sphere.js → sphere/vgeo_bounding_sphere.js} +3 -3
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_containing_sphere.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_containing_sphere.js → sphere/vgeo_containing_sphere.js} +3 -3
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_sphere_inflate_to_contain.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_sphere_inflate_to_contain.js → sphere/vgeo_sphere_inflate_to_contain.js} +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts +39 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.js +42 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts +37 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.js +39 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts +23 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.js +135 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.js +95 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_narrow_indices.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_narrow_indices.js → submesh/vgeo_narrow_indices.js} +3 -3
- 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 +37 -16
- 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_attributes_read.d.ts +8 -2
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.js +8 -2
- 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_GROUP_OFFSET.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.js +15 -0
- 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 +32 -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 +15 -7
- 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 +120 -37
- 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 +130 -47
- 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 +60 -22
- package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +385 -0
- package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +21 -2
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +52 -2
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +97 -1
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +4 -4
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +10 -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/VGeoResidency.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +59 -34
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts +8 -8
- 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 +45 -88
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts +19 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +116 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts +31 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +99 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.js +39 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.js +7 -63
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +13 -30
- 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 +53 -71
- 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/loader/gltf/load_gltf.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/load_gltf.js +0 -19
- package/src/shade/renderer/material/chunk_material_draw_side.d.ts +14 -0
- package/src/shade/renderer/material/chunk_material_draw_side.d.ts.map +1 -0
- package/src/shade/renderer/material/chunk_material_draw_side.js +34 -0
- package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
- package/src/shade/renderer/material/standard/fragment_gbuffer.js +8 -1
- 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/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +13 -1
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts +19 -5
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +23 -5
- package/src/shade/renderer/rasterize/bucket/filter_materials_by_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/filter_materials_by_bucket.js +12 -5
- 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/rasterization_opaque_buckets.d.ts +22 -0
- package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.js +36 -0
- 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/chunk_triangle_winding_is_reversed.d.ts +15 -0
- package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.js +35 -0
- 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/RASTERIZATION_BUCKET_LIMIT.d.ts +10 -1
- package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.js +38 -29
- package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.d.ts +5 -0
- package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.js +63 -55
- 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/graph_meshlets_rasterize.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js +1 -0
- 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/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +44 -53
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js +6 -2
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js +6 -2
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.js +19 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +7 -4
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +3 -2
- package/src/shade/renderer/rasterize/native/chunk_rasterize_triangle.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/chunk_rasterize_triangle.js +15 -4
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +16 -5
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +16 -5
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +2 -1
- package/src/shade/renderer/rasterize/native/rasterization_shader_resources.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/rasterization_shader_resources.js +4 -0
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +16 -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 +81 -95
- 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 +26 -39
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +2 -0
- package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts +19 -0
- package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/scene/NODE3D_STRUCT.js +34 -0
- package/src/shade/renderer/scene/chunk_node3d_flags.d.ts +9 -0
- package/src/shade/renderer/scene/chunk_node3d_flags.d.ts.map +1 -0
- package/src/shade/renderer/scene/chunk_node3d_flags.js +23 -0
- package/src/shade/renderer/scene/chunk_scene_database_access.d.ts.map +1 -1
- package/src/shade/renderer/scene/chunk_scene_database_access.js +15 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.js +9 -1
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.js +16 -4
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.js +18 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.js +33 -0
- 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/README.md +0 -150
- 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/cut_geometry.js +0 -460
- package/src/shade/playground/vgeo_viewer/index.html +0 -77
- package/src/shade/playground/vgeo_viewer/main.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/main.js +0 -1343
- 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/playground/vgeo_viewer/select_cut.js +0 -481
- 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/VGeoGatheredFaces.js +0 -25
- package/src/shade/renderer/geometry/virtual/build/VGeoLevel.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelOptions.d.ts.map +0 -1
- 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/VGeoSubmesh.js +0 -20
- 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.map +0 -1
- 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_levels.js +0 -1786
- 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.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_normals.js +0 -75
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_tangents.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_tangents.js +0 -143
- 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_extract_submesh.js +0 -41
- 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_gather_faces.js +0 -71
- 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.map +0 -1
- 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.map +0 -1
- 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.map +0 -1
- 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.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set_packed.js +0 -207
- 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/geometry/virtual/residency/VGeoResidencyManager.d.ts +0 -258
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.d.ts +0 -49
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.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/loader/gltf/fix_up_material_sides.js +0 -109
- 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/graph_triangles_filter_by_material_side.js +0 -78
- 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/expand/shader_filter_triangle_by_material_side.js +0 -100
- 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/shade/renderer/rasterize/forward/chunk_material_side_should_draw.js +0 -26
- package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.d.ts +0 -3
- package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.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
- /package/src/shade/renderer/geometry/virtual/build/{VGeoLevel.d.ts → level/VGeoLevel.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{VGeoLevel.js → level/VGeoLevel.js} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{VGeoLevelSummary.d.ts → level/VGeoLevelSummary.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{VGeoLevelSummary.js → level/VGeoLevelSummary.js} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_page_node_count.d.ts → page/vgeo_page_node_count.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_graph_components.d.ts → partition/vgeo_graph_components.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_graph_components.js → partition/vgeo_graph_components.js} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_partition_graph.d.ts → partition/vgeo_partition_graph.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_split_face_set.d.ts → partition/vgeo_split_face_set.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_split_face_set_packed.d.ts → partition/vgeo_split_face_set_packed.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_bounding_sphere.d.ts → sphere/vgeo_bounding_sphere.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_containing_sphere.d.ts → sphere/vgeo_containing_sphere.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_sphere_inflate_to_contain.d.ts → sphere/vgeo_sphere_inflate_to_contain.d.ts} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_narrow_indices.d.ts → submesh/vgeo_narrow_indices.d.ts} +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One cluster's geometry expressed against the frontier it came out of, which is what lets the next
|
|
3
|
+
* frontier be stitched from a mixture of freshly simplified clusters and untouched ones.
|
|
4
|
+
*
|
|
5
|
+
* Produced by `vgeo_try_repack`, `vgeo_build_group_step` and `vgeo_build_levels` — the last for
|
|
6
|
+
* the clusters a round left alone — and consumed by `vgeo_stitch_frontier`, which is the only
|
|
7
|
+
* thing that ever reads one.
|
|
8
|
+
*/
|
|
9
|
+
type VGeoContribution = {
|
|
10
|
+
positions: Float32Array;
|
|
11
|
+
/**
|
|
12
|
+
* local to {@link positions }
|
|
13
|
+
*/
|
|
14
|
+
indices: Uint32Array;
|
|
15
|
+
/**
|
|
16
|
+
* ids in the mesh {@link topology } belongs to; not
|
|
17
|
+
* unique, because there is one entry per *wedge* and a seam vertex is several
|
|
18
|
+
*/
|
|
19
|
+
local_vertex_ids: Uint32Array;
|
|
20
|
+
/**
|
|
21
|
+
* the same vertices, named in the frontier's mesh
|
|
22
|
+
*/
|
|
23
|
+
source_vertex_ids: Uint32Array;
|
|
24
|
+
/**
|
|
25
|
+
* one corner of {@link topology } per entry, which is where
|
|
26
|
+
* that entry's appearance is read from — a vertex alone does not address it
|
|
27
|
+
*/
|
|
28
|
+
attribute_ids: Uint32Array;
|
|
29
|
+
/**
|
|
30
|
+
* the wedge each entry is, named in the frontier's mesh,
|
|
31
|
+
* which is how its accumulated attribute quadric follows it across the seam
|
|
32
|
+
*/
|
|
33
|
+
source_wedge_ids: Uint32Array;
|
|
34
|
+
/**
|
|
35
|
+
* the mesh {@link local_vertex_ids } name vertices of, whose
|
|
36
|
+
* loop data block holds their attributes
|
|
37
|
+
*/
|
|
38
|
+
topology: BinaryTopology;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=VGeoContribution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGeoContribution.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/VGeoContribution.js"],"names":[],"mappings":";;;;;;;;;eASc,YAAY;;;;aACZ,WAAW;;;;;sBACX,WAAW;;;;uBAEX,WAAW;;;;;mBACX,WAAW;;;;;sBAEX,WAAW"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One cluster's geometry expressed against the frontier it came out of, which is what lets the next
|
|
3
|
+
* frontier be stitched from a mixture of freshly simplified clusters and untouched ones.
|
|
4
|
+
*
|
|
5
|
+
* Produced by `vgeo_try_repack`, `vgeo_build_group_step` and `vgeo_build_levels` — the last for
|
|
6
|
+
* the clusters a round left alone — and consumed by `vgeo_stitch_frontier`, which is the only
|
|
7
|
+
* thing that ever reads one.
|
|
8
|
+
*
|
|
9
|
+
* @typedef {object} VGeoContribution
|
|
10
|
+
* @property {Float32Array} positions
|
|
11
|
+
* @property {Uint32Array} indices local to {@link positions}
|
|
12
|
+
* @property {Uint32Array} local_vertex_ids ids in the mesh {@link topology} belongs to; not
|
|
13
|
+
* unique, because there is one entry per *wedge* and a seam vertex is several
|
|
14
|
+
* @property {Uint32Array} source_vertex_ids the same vertices, named in the frontier's mesh
|
|
15
|
+
* @property {Uint32Array} attribute_ids one corner of {@link topology} per entry, which is where
|
|
16
|
+
* that entry's appearance is read from — a vertex alone does not address it
|
|
17
|
+
* @property {Uint32Array} source_wedge_ids the wedge each entry is, named in the frontier's mesh,
|
|
18
|
+
* which is how its accumulated attribute quadric follows it across the seam
|
|
19
|
+
* @property {BinaryTopology} topology the mesh {@link local_vertex_ids} name vertices of, whose
|
|
20
|
+
* loop data block holds their attributes
|
|
21
|
+
*
|
|
22
|
+
* @author Alex Goldring
|
|
23
|
+
* @copyright Company Named Limited (c) 2026
|
|
24
|
+
*/
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every cluster nothing has merged yet, and the geometry they currently stand for.
|
|
3
|
+
*
|
|
4
|
+
* One mesh holds the whole frontier so that a group can be extracted with its surroundings intact —
|
|
5
|
+
* the lock set is "every vertex a face outside this group touches", and that question has no answer
|
|
6
|
+
* in a mesh that holds the group alone.
|
|
7
|
+
*
|
|
8
|
+
* @author Alex Goldring
|
|
9
|
+
* @copyright Company Named Limited (c) 2026
|
|
10
|
+
*/
|
|
11
|
+
export class VGeoFrontier {
|
|
12
|
+
/**
|
|
13
|
+
* @type {VirtualGeometryMesh}
|
|
14
|
+
*/
|
|
15
|
+
mesh: VirtualGeometryMesh;
|
|
16
|
+
/**
|
|
17
|
+
* @type {VirtualGeometryCluster[]}
|
|
18
|
+
*/
|
|
19
|
+
clusters: VirtualGeometryCluster[];
|
|
20
|
+
/**
|
|
21
|
+
* `cluster_faces[i]` are the faces of {@link mesh} that cluster `i` owns.
|
|
22
|
+
* @type {number[][]}
|
|
23
|
+
*/
|
|
24
|
+
cluster_faces: number[][];
|
|
25
|
+
/**
|
|
26
|
+
* One accumulated quadric per vertex of {@link mesh}, carried unbroken from the source mesh.
|
|
27
|
+
*
|
|
28
|
+
* This is what makes the error mean "how far this is from the geometry the artist authored"
|
|
29
|
+
* rather than "how far this is from the frontier it was simplified out of". A survivor absorbs
|
|
30
|
+
* its victim's quadric at every collapse, at every round, so a vertex twelve rounds up still
|
|
31
|
+
* carries the planes of every source triangle that was ever folded into it, and evaluating its
|
|
32
|
+
* quadric at its current position measures the deviation from the source directly. Composing
|
|
33
|
+
* per-round residuals instead only *bounds* that, by the triangle inequality, and the bound
|
|
34
|
+
* loosens with every round: measured on a unit sphere, the same ninety-triangle root read 0.36
|
|
35
|
+
* built from 3k source triangles and 13.3 built from 24k, where it is the same approximation and
|
|
36
|
+
* reads 0.0315 either way once the quadrics are carried.
|
|
37
|
+
*
|
|
38
|
+
* @type {Quadric3[]}
|
|
39
|
+
*/
|
|
40
|
+
quadrics: Quadric3[];
|
|
41
|
+
/**
|
|
42
|
+
* Which of the mesh's channels travel through a collapse, and where each one sits in
|
|
43
|
+
* {@link attribute_values}. Constant for a whole build — the channel set is the source's.
|
|
44
|
+
* @type {{components: number, channels: {attribute: number, offset: number, count: number}[]}}
|
|
45
|
+
*/
|
|
46
|
+
attribute_layout: {
|
|
47
|
+
components: number;
|
|
48
|
+
channels: {
|
|
49
|
+
attribute: number;
|
|
50
|
+
offset: number;
|
|
51
|
+
count: number;
|
|
52
|
+
}[];
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* What a full unit of each component of {@link attribute_values} is worth in object-space
|
|
56
|
+
* position error. Resolved once, off the source's bounds, by
|
|
57
|
+
* {@link vgeo_resolve_attribute_weights}.
|
|
58
|
+
* @type {Float64Array}
|
|
59
|
+
*/
|
|
60
|
+
attribute_weights: Float64Array;
|
|
61
|
+
/**
|
|
62
|
+
* The attribute quadric of every vertex of {@link mesh}, indexed by vertex id at a stride of
|
|
63
|
+
* `quadric_attribute_size(attribute_layout.components)`.
|
|
64
|
+
*
|
|
65
|
+
* Carried the way {@link quadrics} is and for the same reason: built once from the source
|
|
66
|
+
* triangles and accumulated onto survivors ever after, so a vertex twelve rounds up still holds
|
|
67
|
+
* the fields of every source triangle folded into it and the value fitted from them is a
|
|
68
|
+
* statement about what was authored rather than about the round before.
|
|
69
|
+
*
|
|
70
|
+
* One flat buffer rather than an object per vertex — which is what `quadric3_*`'s own
|
|
71
|
+
* documentation offers, and at `11 + 4m` doubles each over a million-vertex primitive it is the
|
|
72
|
+
* difference between a round allocating nothing and allocating a million short-lived objects.
|
|
73
|
+
*
|
|
74
|
+
* Empty where the mesh carries no travelling channel at all.
|
|
75
|
+
* @type {Float64Array}
|
|
76
|
+
*/
|
|
77
|
+
attribute_quadrics: Float64Array;
|
|
78
|
+
/**
|
|
79
|
+
* Which corners of {@link mesh} shade as one, and so which of them {@link attribute_quadrics}
|
|
80
|
+
* and the carried values are indexed by.
|
|
81
|
+
*
|
|
82
|
+
* A vertex has one position and the topology says so; it does not have one appearance, and a
|
|
83
|
+
* hard edge or a texture seam is exactly a vertex whose corners disagree. Rebuilt with the
|
|
84
|
+
* frontier every round rather than carried, because the frontier's mesh is rebuilt too — what
|
|
85
|
+
* carries across is the accumulated quadric of each wedge, the same way it is for each vertex.
|
|
86
|
+
*
|
|
87
|
+
* @type {BtWedgeSet}
|
|
88
|
+
*/
|
|
89
|
+
wedges: BtWedgeSet;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=VGeoFrontier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGeoFrontier.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.js"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH;IACI;;OAEG;IACH,0BAAY;IAEZ;;OAEG;IACH,UAFU,wBAAwB,CAEpB;IAEd;;;OAGG;IACH,eAFU,MAAM,EAAE,EAAE,CAED;IAEnB;;;;;;;;;;;;;;OAcG;IACH,UAFU,UAAU,CAEN;IAEd;;;;OAIG;IACH,kBAFU;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAC,EAAE,CAAA;KAAC,CAE3C;IAEnD;;;;;OAKG;IACH,mBAFU,YAAY,CAEkB;IAExC;;;;;;;;;;;;;;;OAeG;IACH,oBAFU,YAAY,CAEmB;IAEzC;;;;;;;;;;OAUG;IACH,mBAAc;CAEjB"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every cluster nothing has merged yet, and the geometry they currently stand for.
|
|
3
|
+
*
|
|
4
|
+
* One mesh holds the whole frontier so that a group can be extracted with its surroundings intact —
|
|
5
|
+
* the lock set is "every vertex a face outside this group touches", and that question has no answer
|
|
6
|
+
* in a mesh that holds the group alone.
|
|
7
|
+
*
|
|
8
|
+
* @author Alex Goldring
|
|
9
|
+
* @copyright Company Named Limited (c) 2026
|
|
10
|
+
*/
|
|
11
|
+
export class VGeoFrontier {
|
|
12
|
+
/**
|
|
13
|
+
* @type {VirtualGeometryMesh}
|
|
14
|
+
*/
|
|
15
|
+
mesh = null;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @type {VirtualGeometryCluster[]}
|
|
19
|
+
*/
|
|
20
|
+
clusters = [];
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* `cluster_faces[i]` are the faces of {@link mesh} that cluster `i` owns.
|
|
24
|
+
* @type {number[][]}
|
|
25
|
+
*/
|
|
26
|
+
cluster_faces = [];
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* One accumulated quadric per vertex of {@link mesh}, carried unbroken from the source mesh.
|
|
30
|
+
*
|
|
31
|
+
* This is what makes the error mean "how far this is from the geometry the artist authored"
|
|
32
|
+
* rather than "how far this is from the frontier it was simplified out of". A survivor absorbs
|
|
33
|
+
* its victim's quadric at every collapse, at every round, so a vertex twelve rounds up still
|
|
34
|
+
* carries the planes of every source triangle that was ever folded into it, and evaluating its
|
|
35
|
+
* quadric at its current position measures the deviation from the source directly. Composing
|
|
36
|
+
* per-round residuals instead only *bounds* that, by the triangle inequality, and the bound
|
|
37
|
+
* loosens with every round: measured on a unit sphere, the same ninety-triangle root read 0.36
|
|
38
|
+
* built from 3k source triangles and 13.3 built from 24k, where it is the same approximation and
|
|
39
|
+
* reads 0.0315 either way once the quadrics are carried.
|
|
40
|
+
*
|
|
41
|
+
* @type {Quadric3[]}
|
|
42
|
+
*/
|
|
43
|
+
quadrics = [];
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Which of the mesh's channels travel through a collapse, and where each one sits in
|
|
47
|
+
* {@link attribute_values}. Constant for a whole build — the channel set is the source's.
|
|
48
|
+
* @type {{components: number, channels: {attribute: number, offset: number, count: number}[]}}
|
|
49
|
+
*/
|
|
50
|
+
attribute_layout = { components: 0, channels: [] };
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* What a full unit of each component of {@link attribute_values} is worth in object-space
|
|
54
|
+
* position error. Resolved once, off the source's bounds, by
|
|
55
|
+
* {@link vgeo_resolve_attribute_weights}.
|
|
56
|
+
* @type {Float64Array}
|
|
57
|
+
*/
|
|
58
|
+
attribute_weights = new Float64Array(0);
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The attribute quadric of every vertex of {@link mesh}, indexed by vertex id at a stride of
|
|
62
|
+
* `quadric_attribute_size(attribute_layout.components)`.
|
|
63
|
+
*
|
|
64
|
+
* Carried the way {@link quadrics} is and for the same reason: built once from the source
|
|
65
|
+
* triangles and accumulated onto survivors ever after, so a vertex twelve rounds up still holds
|
|
66
|
+
* the fields of every source triangle folded into it and the value fitted from them is a
|
|
67
|
+
* statement about what was authored rather than about the round before.
|
|
68
|
+
*
|
|
69
|
+
* One flat buffer rather than an object per vertex — which is what `quadric3_*`'s own
|
|
70
|
+
* documentation offers, and at `11 + 4m` doubles each over a million-vertex primitive it is the
|
|
71
|
+
* difference between a round allocating nothing and allocating a million short-lived objects.
|
|
72
|
+
*
|
|
73
|
+
* Empty where the mesh carries no travelling channel at all.
|
|
74
|
+
* @type {Float64Array}
|
|
75
|
+
*/
|
|
76
|
+
attribute_quadrics = new Float64Array(0);
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Which corners of {@link mesh} shade as one, and so which of them {@link attribute_quadrics}
|
|
80
|
+
* and the carried values are indexed by.
|
|
81
|
+
*
|
|
82
|
+
* A vertex has one position and the topology says so; it does not have one appearance, and a
|
|
83
|
+
* hard edge or a texture seam is exactly a vertex whose corners disagree. Rebuilt with the
|
|
84
|
+
* frontier every round rather than carried, because the frontier's mesh is rebuilt too — what
|
|
85
|
+
* carries across is the accumulated quadric of each wedge, the same way it is for each vertex.
|
|
86
|
+
*
|
|
87
|
+
* @type {BtWedgeSet}
|
|
88
|
+
*/
|
|
89
|
+
wedges = null;
|
|
90
|
+
|
|
91
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Several leaves re-cut into one, with nothing simplified — see {@link vgeo_try_repack}.
|
|
3
|
+
*
|
|
4
|
+
* @author Alex Goldring
|
|
5
|
+
* @copyright Company Named Limited (c) 2026
|
|
6
|
+
*/
|
|
7
|
+
export class VGeoGroupRepack {
|
|
8
|
+
/**
|
|
9
|
+
* The leaves this removes from the DAG.
|
|
10
|
+
* @type {VirtualGeometryCluster[]}
|
|
11
|
+
*/
|
|
12
|
+
replaced: VirtualGeometryCluster[];
|
|
13
|
+
/**
|
|
14
|
+
* The leaves that take their place -- always fewer.
|
|
15
|
+
* @type {VirtualGeometryCluster[]}
|
|
16
|
+
*/
|
|
17
|
+
clusters: VirtualGeometryCluster[];
|
|
18
|
+
/**
|
|
19
|
+
* Parallel to {@link clusters}.
|
|
20
|
+
* @type {VGeoContribution[]}
|
|
21
|
+
*/
|
|
22
|
+
geometry: VGeoContribution[];
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=VGeoGroupRepack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGeoGroupRepack.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/VGeoGroupRepack.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH;IACI;;;OAGG;IACH,UAFU,wBAAwB,CAEpB;IAEd;;;OAGG;IACH,UAFU,wBAAwB,CAEpB;IAEd;;;OAGG;IACH,UAFU,gBAAgB,EAAE,CAEd;CACjB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Several leaves re-cut into one, with nothing simplified — see {@link vgeo_try_repack}.
|
|
3
|
+
*
|
|
4
|
+
* @author Alex Goldring
|
|
5
|
+
* @copyright Company Named Limited (c) 2026
|
|
6
|
+
*/
|
|
7
|
+
export class VGeoGroupRepack {
|
|
8
|
+
/**
|
|
9
|
+
* The leaves this removes from the DAG.
|
|
10
|
+
* @type {VirtualGeometryCluster[]}
|
|
11
|
+
*/
|
|
12
|
+
replaced = [];
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The leaves that take their place -- always fewer.
|
|
16
|
+
* @type {VirtualGeometryCluster[]}
|
|
17
|
+
*/
|
|
18
|
+
clusters = [];
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Parallel to {@link clusters}.
|
|
22
|
+
* @type {VGeoContribution[]}
|
|
23
|
+
*/
|
|
24
|
+
geometry = [];
|
|
25
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Everything one group step produced, before it is committed. Kept separate so that a round which
|
|
3
|
+
* fails to make progress can be discarded without having mutated the frontier.
|
|
4
|
+
*
|
|
5
|
+
* @author Alex Goldring
|
|
6
|
+
* @copyright Company Named Limited (c) 2026
|
|
7
|
+
*/
|
|
8
|
+
export class VGeoGroupStep {
|
|
9
|
+
/**
|
|
10
|
+
* The frontier clusters this group holds.
|
|
11
|
+
* @type {VirtualGeometryCluster[]}
|
|
12
|
+
*/
|
|
13
|
+
child_clusters: VirtualGeometryCluster[];
|
|
14
|
+
/**
|
|
15
|
+
* @type {VirtualGeometryCluster[]}
|
|
16
|
+
*/
|
|
17
|
+
parent_clusters: VirtualGeometryCluster[];
|
|
18
|
+
/**
|
|
19
|
+
* Parallel to {@link parent_clusters}: the geometry each parent was cut from, in terms of the
|
|
20
|
+
* frontier, so the next frontier can be stitched back together.
|
|
21
|
+
* @type {VGeoContribution[]}
|
|
22
|
+
*/
|
|
23
|
+
parent_geometry: VGeoContribution[];
|
|
24
|
+
/**
|
|
25
|
+
* The value both sides of this step store: the object-space distance from the *source* surface
|
|
26
|
+
* that this step's geometry now stands at, floored by what its children already carried.
|
|
27
|
+
* @type {number}
|
|
28
|
+
*/
|
|
29
|
+
error: number;
|
|
30
|
+
/**
|
|
31
|
+
* `frontier vertex id -> that vertex's quadric after this step`, for every vertex that survived
|
|
32
|
+
* it. Held rather than written straight back because a step is speculative until the round
|
|
33
|
+
* accepts it, and because two steps sharing a pinned boundary vertex must have their gains
|
|
34
|
+
* combined rather than one overwriting the other.
|
|
35
|
+
* @type {Map<number, Quadric3>}
|
|
36
|
+
*/
|
|
37
|
+
quadrics: Map<number, Quadric3>;
|
|
38
|
+
/**
|
|
39
|
+
* Every attribute quadric this step's collapses left behind, indexed by the **wedge's** id
|
|
40
|
+
* *within the step's own submesh* at a stride of `quadric_attribute_size(components)`.
|
|
41
|
+
*
|
|
42
|
+
* One buffer rather than an entry per wedge: it is the array the simplifier was handed and
|
|
43
|
+
* finished with, kept whole. {@link attribute_source_wedge_ids} is what turns a position in it
|
|
44
|
+
* back into a frontier wedge, and {@link live_wedges} is what says which of them are still
|
|
45
|
+
* alive.
|
|
46
|
+
*
|
|
47
|
+
* Liveness cannot be read off {@link quadrics} the way it once was. A collapse can leave a
|
|
48
|
+
* victim's wedge standing — adopted by the survivor, carrying corners of its own — so a wedge
|
|
49
|
+
* outlives the vertex it started on, and the vertex map would have called it dead.
|
|
50
|
+
*
|
|
51
|
+
* The *results*, not the gains. `vgeo_build_levels` recovers the gain by subtracting what the
|
|
52
|
+
* frontier already held, because two steps sharing a pinned boundary vertex each began from that
|
|
53
|
+
* vertex's quadric and adding both results whole would count the source under it twice.
|
|
54
|
+
*
|
|
55
|
+
* Empty where the mesh carries no travelling channel at all.
|
|
56
|
+
* @type {Float64Array}
|
|
57
|
+
*/
|
|
58
|
+
attribute_quadrics: Float64Array;
|
|
59
|
+
/**
|
|
60
|
+
* For every wedge of this step's submesh, the frontier wedge it came from — which is what
|
|
61
|
+
* {@link attribute_quadrics} is read through.
|
|
62
|
+
* @type {Uint32Array}
|
|
63
|
+
*/
|
|
64
|
+
attribute_source_wedge_ids: Uint32Array;
|
|
65
|
+
/**
|
|
66
|
+
* Which of those wedges are still their own root, and so still stand for something. A wedge that
|
|
67
|
+
* merged into another gave that one its quadric and has nothing left to fold back.
|
|
68
|
+
* @type {Set<number>}
|
|
69
|
+
*/
|
|
70
|
+
live_wedges: Set<number>;
|
|
71
|
+
/**
|
|
72
|
+
* The LOD-metric sphere both sides of this step store.
|
|
73
|
+
* @type {Float32Array}
|
|
74
|
+
*/
|
|
75
|
+
sphere: Float32Array;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=VGeoGroupStep.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGeoGroupStep.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH;IACI;;;OAGG;IACH,gBAFU,wBAAwB,CAEd;IAEpB;;OAEG;IACH,iBAFU,wBAAwB,CAEb;IAErB;;;;OAIG;IACH,iBAFU,gBAAgB,EAAE,CAEP;IAErB;;;;OAIG;IACH,OAFU,MAAM,CAEN;IAEV;;;;;;OAMG;IACH,UAFU,IAAI,MAAM,WAAW,CAEV;IAErB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,oBAFU,YAAY,CAEmB;IAEzC;;;;OAIG;IACH,4BAFU,WAAW,CAE2B;IAEhD;;;;OAIG;IACH,aAFU,IAAI,MAAM,CAAC,CAEG;IAExB;;;OAGG;IACH,QAFU,YAAY,CAEO;CAChC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Everything one group step produced, before it is committed. Kept separate so that a round which
|
|
3
|
+
* fails to make progress can be discarded without having mutated the frontier.
|
|
4
|
+
*
|
|
5
|
+
* @author Alex Goldring
|
|
6
|
+
* @copyright Company Named Limited (c) 2026
|
|
7
|
+
*/
|
|
8
|
+
export class VGeoGroupStep {
|
|
9
|
+
/**
|
|
10
|
+
* The frontier clusters this group holds.
|
|
11
|
+
* @type {VirtualGeometryCluster[]}
|
|
12
|
+
*/
|
|
13
|
+
child_clusters = [];
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @type {VirtualGeometryCluster[]}
|
|
17
|
+
*/
|
|
18
|
+
parent_clusters = [];
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Parallel to {@link parent_clusters}: the geometry each parent was cut from, in terms of the
|
|
22
|
+
* frontier, so the next frontier can be stitched back together.
|
|
23
|
+
* @type {VGeoContribution[]}
|
|
24
|
+
*/
|
|
25
|
+
parent_geometry = [];
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The value both sides of this step store: the object-space distance from the *source* surface
|
|
29
|
+
* that this step's geometry now stands at, floored by what its children already carried.
|
|
30
|
+
* @type {number}
|
|
31
|
+
*/
|
|
32
|
+
error = 0;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* `frontier vertex id -> that vertex's quadric after this step`, for every vertex that survived
|
|
36
|
+
* it. Held rather than written straight back because a step is speculative until the round
|
|
37
|
+
* accepts it, and because two steps sharing a pinned boundary vertex must have their gains
|
|
38
|
+
* combined rather than one overwriting the other.
|
|
39
|
+
* @type {Map<number, Quadric3>}
|
|
40
|
+
*/
|
|
41
|
+
quadrics = new Map();
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Every attribute quadric this step's collapses left behind, indexed by the **wedge's** id
|
|
45
|
+
* *within the step's own submesh* at a stride of `quadric_attribute_size(components)`.
|
|
46
|
+
*
|
|
47
|
+
* One buffer rather than an entry per wedge: it is the array the simplifier was handed and
|
|
48
|
+
* finished with, kept whole. {@link attribute_source_wedge_ids} is what turns a position in it
|
|
49
|
+
* back into a frontier wedge, and {@link live_wedges} is what says which of them are still
|
|
50
|
+
* alive.
|
|
51
|
+
*
|
|
52
|
+
* Liveness cannot be read off {@link quadrics} the way it once was. A collapse can leave a
|
|
53
|
+
* victim's wedge standing — adopted by the survivor, carrying corners of its own — so a wedge
|
|
54
|
+
* outlives the vertex it started on, and the vertex map would have called it dead.
|
|
55
|
+
*
|
|
56
|
+
* The *results*, not the gains. `vgeo_build_levels` recovers the gain by subtracting what the
|
|
57
|
+
* frontier already held, because two steps sharing a pinned boundary vertex each began from that
|
|
58
|
+
* vertex's quadric and adding both results whole would count the source under it twice.
|
|
59
|
+
*
|
|
60
|
+
* Empty where the mesh carries no travelling channel at all.
|
|
61
|
+
* @type {Float64Array}
|
|
62
|
+
*/
|
|
63
|
+
attribute_quadrics = new Float64Array(0);
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* For every wedge of this step's submesh, the frontier wedge it came from — which is what
|
|
67
|
+
* {@link attribute_quadrics} is read through.
|
|
68
|
+
* @type {Uint32Array}
|
|
69
|
+
*/
|
|
70
|
+
attribute_source_wedge_ids = new Uint32Array(0);
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Which of those wedges are still their own root, and so still stand for something. A wedge that
|
|
74
|
+
* merged into another gave that one its quadric and has nothing left to fold back.
|
|
75
|
+
* @type {Set<number>}
|
|
76
|
+
*/
|
|
77
|
+
live_wedges = new Set();
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The LOD-metric sphere both sides of this step store.
|
|
81
|
+
* @type {Float32Array}
|
|
82
|
+
*/
|
|
83
|
+
sphere = new Float32Array(4);
|
|
84
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGeoLevel.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/VGeoLevel.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH;IACI;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;OAGG;IACH,UAFU,wBAAwB,CAEpB;IAEd;;;;OAIG;IACH,QAFU,sBAAsB,CAEpB;CACf"}
|
|
@@ -42,16 +42,29 @@ export class VGeoLevelOptions {
|
|
|
42
42
|
* The octave alone offers no guarantee of progress: geometry whose error is spread thinly and
|
|
43
43
|
* continuously — a UV sphere, whose poles carry triangles a fraction of the size of its
|
|
44
44
|
* equator's — puts only a handful of clusters in any one octave, and the build inches forward a
|
|
45
|
-
* few merges per round. That is not merely slow, it is unbounded:
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
45
|
+
* few merges per round. That is not merely slow, it is unbounded: a round loop whose count
|
|
46
|
+
* scales with the cluster count rather than its logarithm will run out of levels on a real
|
|
47
|
+
* asset, and has. Widening the band until it holds a fixed share of the frontier bounds the
|
|
48
|
+
* depth logarithmically, and costs error uniformity only where the octave had nothing.
|
|
49
49
|
* @type {number}
|
|
50
50
|
*/
|
|
51
51
|
error_band_min_fraction: number;
|
|
52
52
|
/**
|
|
53
|
-
* Refuse to build past this many levels.
|
|
54
|
-
*
|
|
53
|
+
* Refuse to build past this many levels.
|
|
54
|
+
*
|
|
55
|
+
* A sanity bound on the round loop and nothing more. It used to be 255 because `level_count`
|
|
56
|
+
* was a byte, which conflated two different questions and let the format answer the one it had
|
|
57
|
+
* no business answering: the 2026-09-14 Zorah conversion refused a three-million-triangle bush
|
|
58
|
+
* at exactly 255 with 39 clusters still unmerged, while the other 2,974 geometries of that scene
|
|
59
|
+
* — one of them 27 million triangles — converged by 149. The container now names up to {@link
|
|
60
|
+
* VGEO_MAX_LEVEL_COUNT} levels and this is free to be what it claims to be.
|
|
61
|
+
*
|
|
62
|
+
* 4,096: an order of magnitude past the deepest build ever measured here and an order of
|
|
63
|
+
* magnitude short of the format's ceiling. A round only continues while it is strictly shrinking
|
|
64
|
+
* the frontier, so this is not what stops a stalled build — {@link vgeo_run_round} returning
|
|
65
|
+
* nothing is. What it stops is a build that converges so slowly that finishing it would be
|
|
66
|
+
* worse than refusing it, and the DAG it would hand the runtime is one the cut pays for by
|
|
67
|
+
* depth on every frame.
|
|
55
68
|
* @type {number}
|
|
56
69
|
*/
|
|
57
70
|
max_levels: number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGeoLevelOptions.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH;IACI;;;;;OAKG;IACH,YAFU,MAAM,CAED;IAEf;;;;;;;;;;OAUG;IACH,sBAFU,MAAM,CAEW;IAE3B;;;;;;;;;;OAUG;IACH,mBAFU,MAAM,CAEM;IAEtB;;;;;;;;;;;OAWG;IACH,yBAFU,MAAM,CAEe;IAE/B;;;;;;;;;;;;;;;;;OAiBG;IACH,YAFU,MAAM,CAEE;CACrB"}
|
package/src/shade/renderer/geometry/virtual/build/{VGeoLevelOptions.js → level/VGeoLevelOptions.js}
RENAMED
|
@@ -45,18 +45,31 @@ export class VGeoLevelOptions {
|
|
|
45
45
|
* The octave alone offers no guarantee of progress: geometry whose error is spread thinly and
|
|
46
46
|
* continuously — a UV sphere, whose poles carry triangles a fraction of the size of its
|
|
47
47
|
* equator's — puts only a handful of clusters in any one octave, and the build inches forward a
|
|
48
|
-
* few merges per round. That is not merely slow, it is unbounded:
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
48
|
+
* few merges per round. That is not merely slow, it is unbounded: a round loop whose count
|
|
49
|
+
* scales with the cluster count rather than its logarithm will run out of levels on a real
|
|
50
|
+
* asset, and has. Widening the band until it holds a fixed share of the frontier bounds the
|
|
51
|
+
* depth logarithmically, and costs error uniformity only where the octave had nothing.
|
|
52
52
|
* @type {number}
|
|
53
53
|
*/
|
|
54
54
|
error_band_min_fraction = 0.25;
|
|
55
55
|
|
|
56
56
|
/**
|
|
57
|
-
* Refuse to build past this many levels.
|
|
58
|
-
*
|
|
57
|
+
* Refuse to build past this many levels.
|
|
58
|
+
*
|
|
59
|
+
* A sanity bound on the round loop and nothing more. It used to be 255 because `level_count`
|
|
60
|
+
* was a byte, which conflated two different questions and let the format answer the one it had
|
|
61
|
+
* no business answering: the 2026-09-14 Zorah conversion refused a three-million-triangle bush
|
|
62
|
+
* at exactly 255 with 39 clusters still unmerged, while the other 2,974 geometries of that scene
|
|
63
|
+
* — one of them 27 million triangles — converged by 149. The container now names up to {@link
|
|
64
|
+
* VGEO_MAX_LEVEL_COUNT} levels and this is free to be what it claims to be.
|
|
65
|
+
*
|
|
66
|
+
* 4,096: an order of magnitude past the deepest build ever measured here and an order of
|
|
67
|
+
* magnitude short of the format's ceiling. A round only continues while it is strictly shrinking
|
|
68
|
+
* the frontier, so this is not what stops a stalled build — {@link vgeo_run_round} returning
|
|
69
|
+
* nothing is. What it stops is a build that converges so slowly that finishing it would be
|
|
70
|
+
* worse than refusing it, and the DAG it would hand the runtime is one the cut pays for by
|
|
71
|
+
* depth on every frame.
|
|
59
72
|
* @type {number}
|
|
60
73
|
*/
|
|
61
|
-
max_levels =
|
|
74
|
+
max_levels = 4096;
|
|
62
75
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGeoLevelSummary.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/VGeoLevelSummary.js"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH;IACI,cAAU;IAEV;;;OAGG;IACH,eAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,aAFU,MAAM,CAEA;IAEhB,uBAAmB;IACnB,qBAAiB;IAEjB;;;OAGG;IACH,WAFU,MAAM,CAEF;IAEd;;;;;OAKG;IACH,WAFU,MAAM,CAEF;IAEd;;;OAGG;IACH,mBAFU,MAAM,CAEM;CACzB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build a cluster out of a face set: gather it, bound it, encode its payload.
|
|
3
|
+
*
|
|
4
|
+
* @param {VirtualGeometryMesh} mesh
|
|
5
|
+
* @param {number[]} face_ids
|
|
6
|
+
* @param {number} level
|
|
7
|
+
* @param {BtWedgeSet} wedges which corners of each vertex shade as one — one output vertex each,
|
|
8
|
+
* which is where a seam is paid for
|
|
9
|
+
* @returns {{cluster: VirtualGeometryCluster, gathered: VGeoGatheredFaces}}
|
|
10
|
+
*
|
|
11
|
+
* @author Alex Goldring
|
|
12
|
+
* @copyright Company Named Limited (c) 2026
|
|
13
|
+
*/
|
|
14
|
+
export function vgeo_build_cluster(mesh: VirtualGeometryMesh, face_ids: number[], level: number, wedges: BtWedgeSet): {
|
|
15
|
+
cluster: VirtualGeometryCluster;
|
|
16
|
+
gathered: VGeoGatheredFaces;
|
|
17
|
+
};
|
|
18
|
+
import { VirtualGeometryCluster } from "../../format/dag/VirtualGeometryCluster.js";
|
|
19
|
+
//# sourceMappingURL=vgeo_build_cluster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vgeo_build_cluster.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster.js"],"names":[],"mappings":"AAwCA;;;;;;;;;;;;GAYG;AACH,wEATW,MAAM,EAAE,SACR,MAAM,uBAGJ;IAAC,OAAO,EAAE,sBAAsB,CAAC;IAAC,QAAQ,oBAAmB;CAAC,CAS1E;uCAxDsC,4CAA4C"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { aabb3_from_v3_array } from "../../../../../../core/geom/3d/aabb/aabb3_from_v3_array.js";
|
|
2
|
+
import { VirtualGeometryCluster } from "../../format/dag/VirtualGeometryCluster.js";
|
|
3
|
+
import { vgeo_encode_cluster_payload } from "../../format/payload/vgeo_encode_cluster_payload.js";
|
|
4
|
+
import { vgeo_bounding_sphere } from "../sphere/vgeo_bounding_sphere.js";
|
|
5
|
+
import { vgeo_gather_faces } from "../submesh/vgeo_gather_faces.js";
|
|
6
|
+
import { vgeo_narrow_indices } from "../submesh/vgeo_narrow_indices.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Encode a gathered face set into a cluster record.
|
|
10
|
+
*
|
|
11
|
+
* @param {VGeoGatheredFaces} gathered already within both meshlet caps
|
|
12
|
+
* @param {number} level
|
|
13
|
+
* @param {(BinaryDataLayer|null)[]} layers of the mesh it was gathered from
|
|
14
|
+
* @returns {VirtualGeometryCluster}
|
|
15
|
+
*/
|
|
16
|
+
function cluster_from_gathered(gathered, level, layers) {
|
|
17
|
+
const payload = vgeo_encode_cluster_payload(
|
|
18
|
+
gathered.positions,
|
|
19
|
+
vgeo_narrow_indices(gathered),
|
|
20
|
+
gathered.attribute_ids,
|
|
21
|
+
layers
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
const cluster = new VirtualGeometryCluster();
|
|
25
|
+
|
|
26
|
+
cluster.level = level;
|
|
27
|
+
cluster.vertex_count = gathered.vertex_ids.length;
|
|
28
|
+
cluster.triangle_count = gathered.indices.length / 3;
|
|
29
|
+
cluster.encoding_flags = payload.encoding_flags;
|
|
30
|
+
cluster.payload = payload.bytes;
|
|
31
|
+
cluster.bounds_sphere = vgeo_bounding_sphere(gathered.positions);
|
|
32
|
+
|
|
33
|
+
// the box needs no inflation, unlike the sphere above: the extremes are float32 values already,
|
|
34
|
+
// so min and max of them are exactly representable and the stored box contains the stored
|
|
35
|
+
// points by construction
|
|
36
|
+
aabb3_from_v3_array(cluster.aabb, gathered.positions, gathered.positions.length);
|
|
37
|
+
|
|
38
|
+
return cluster;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Build a cluster out of a face set: gather it, bound it, encode its payload.
|
|
43
|
+
*
|
|
44
|
+
* @param {VirtualGeometryMesh} mesh
|
|
45
|
+
* @param {number[]} face_ids
|
|
46
|
+
* @param {number} level
|
|
47
|
+
* @param {BtWedgeSet} wedges which corners of each vertex shade as one — one output vertex each,
|
|
48
|
+
* which is where a seam is paid for
|
|
49
|
+
* @returns {{cluster: VirtualGeometryCluster, gathered: VGeoGatheredFaces}}
|
|
50
|
+
*
|
|
51
|
+
* @author Alex Goldring
|
|
52
|
+
* @copyright Company Named Limited (c) 2026
|
|
53
|
+
*/
|
|
54
|
+
export function vgeo_build_cluster(mesh, face_ids, level, wedges) {
|
|
55
|
+
const gathered = vgeo_gather_faces(mesh, face_ids, wedges);
|
|
56
|
+
|
|
57
|
+
return { cluster: cluster_from_gathered(gathered, level, mesh.layers), gathered };
|
|
58
|
+
}
|