@woosh/meep-engine 3.28.0 → 3.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bundle-worker-terrain.js +1 -1
- package/package.json +1 -1
- package/src/core/binary/BitSet.d.ts +16 -0
- package/src/core/binary/BitSet.d.ts.map +1 -1
- package/src/core/binary/BitSet.js +159 -49
- package/src/core/binary/allocator/OffsetAllocator.d.ts +48 -0
- package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
- package/src/core/binary/allocator/OffsetAllocator.js +208 -9
- package/src/core/binary/compression/compress_bytes.d.ts +20 -0
- package/src/core/binary/compression/compress_bytes.d.ts.map +1 -0
- package/src/core/binary/compression/compress_bytes.js +35 -0
- package/src/core/binary/compression/decompress_bytes_into.d.ts +30 -0
- package/src/core/binary/compression/decompress_bytes_into.d.ts.map +1 -0
- package/src/core/binary/compression/decompress_bytes_into.js +87 -0
- package/src/core/binary/compression/deflate_decompress_bound.d.ts +27 -0
- package/src/core/binary/compression/deflate_decompress_bound.d.ts.map +1 -0
- package/src/core/binary/compression/deflate_decompress_bound.js +32 -0
- package/src/core/geom/3d/quadric/quadric_attribute_add.d.ts +24 -0
- package/src/core/geom/3d/quadric/quadric_attribute_add.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_add.js +31 -0
- package/src/core/geom/3d/quadric/quadric_attribute_reduce.d.ts +46 -0
- package/src/core/geom/3d/quadric/quadric_attribute_reduce.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_reduce.js +104 -0
- package/src/core/geom/3d/quadric/quadric_attribute_set_from_triangle.d.ts +62 -0
- package/src/core/geom/3d/quadric/quadric_attribute_set_from_triangle.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_set_from_triangle.js +158 -0
- package/src/core/geom/3d/quadric/quadric_attribute_size.d.ts +21 -0
- package/src/core/geom/3d/quadric/quadric_attribute_size.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_size.js +24 -0
- package/src/core/geom/3d/quadric/quadric_attribute_solve.d.ts +34 -0
- package/src/core/geom/3d/quadric/quadric_attribute_solve.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_solve.js +55 -0
- package/src/core/geom/3d/quadric/quadric_attribute_sub.d.ts +28 -0
- package/src/core/geom/3d/quadric/quadric_attribute_sub.d.ts.map +1 -0
- package/src/core/geom/3d/quadric/quadric_attribute_sub.js +35 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.d.ts +15 -0
- package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.js +35 -0
- package/src/core/geom/3d/topology/struct/binary/BtWedgeSet.d.ts +93 -0
- package/src/core/geom/3d/topology/struct/binary/BtWedgeSet.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/BtWedgeSet.js +128 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.d.ts +38 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.js +113 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts +47 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +677 -8
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_live_count.d.ts +22 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_live_count.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_live_count.js +46 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_per_vertex.d.ts +19 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_per_vertex.d.ts.map +1 -0
- package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_per_vertex.js +49 -0
- package/src/core/graph/layout/layered/BoxLayoutOptions.d.ts +63 -0
- package/src/core/graph/layout/layered/BoxLayoutOptions.d.ts.map +1 -0
- package/src/core/graph/layout/layered/BoxLayoutOptions.js +80 -0
- package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/LayoutBoxGraph.d.ts +35 -0
- package/src/core/graph/layout/layered/LayoutBoxGraph.d.ts.map +1 -0
- package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/LayoutBoxGraph.js +53 -1
- package/src/core/graph/layout/layered/layout_assign_coordinates.d.ts.map +1 -0
- package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_coordinates.js +72 -68
- package/src/core/graph/layout/layered/layout_assign_layers.d.ts.map +1 -0
- package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_layers.js +4 -2
- package/src/core/graph/layout/layered/layout_break_cycles.d.ts.map +1 -0
- package/src/core/graph/layout/layered/layout_insert_lanes.d.ts.map +1 -0
- package/src/core/graph/layout/layered/layout_order_layers.d.ts.map +1 -0
- package/src/core/graph/layout/layered/layout_orient_links.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +7 -51
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js +8 -69
- package/src/core/model/node-graph/visual/layout/layout_build_problem.js +1 -1
- package/src/core/model/node-graph/visual/layout/layout_node_graph.js +6 -6
- package/src/core/model/node-graph/visual/layout/route_grid_build.js +1 -1
- package/src/engine/graphics3/DebugDrawSystem.d.ts +7 -5
- package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DebugDrawSystem.js +206 -203
- package/src/engine/graphics3/DecalSystem.d.ts +4 -5
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem.js +5 -5
- package/src/engine/graphics3/FogOfWarSystem.d.ts +7 -12
- package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -1
- package/src/engine/graphics3/FogOfWarSystem.js +8 -12
- package/src/engine/graphics3/prefab/prefab_instantiate.js +230 -230
- package/src/shade/RENDERER_CONTRACT.md +12 -7
- package/src/shade/playground/caldera/README.md +529 -0
- package/src/shade/playground/caldera/caldera_format.d.ts +151 -0
- package/src/shade/playground/caldera/caldera_format.d.ts.map +1 -0
- package/src/shade/playground/caldera/caldera_format.js +241 -0
- package/src/shade/playground/caldera/index.html +126 -0
- package/src/shade/playground/caldera/main.d.ts.map +1 -0
- package/src/shade/playground/caldera/main.js +1565 -0
- package/src/shade/playground/mesh_row_ceiling/README.md +85 -0
- package/src/shade/playground/mesh_row_ceiling/index.html +31 -0
- package/src/shade/playground/mesh_row_ceiling/main.d.ts +2 -0
- package/src/shade/playground/mesh_row_ceiling/main.d.ts.map +1 -0
- package/src/shade/playground/mesh_row_ceiling/main.js +389 -0
- package/src/shade/playground/vgeo_runtime/README.md +5 -3
- package/src/shade/playground/vgeo_runtime/main.js +3 -2
- package/src/shade/playground/vgeo_runtime/sample_asset.d.ts +3 -3
- package/src/shade/playground/vgeo_runtime/sample_asset.d.ts.map +1 -1
- package/src/shade/playground/vgeo_runtime/sample_asset.js +3 -3
- package/src/shade/playground/vgeo_scene/README.md +103 -24
- package/src/shade/playground/vgeo_scene/main.js +525 -24
- package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
- package/src/shade/renderer/GraphicsContext.js +6 -0
- package/src/shade/renderer/Renderer.d.ts +2 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +23 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +100 -8
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +69 -33
- package/src/shade/renderer/extension/RenderExtension.d.ts +15 -18
- package/src/shade/renderer/extension/RenderExtension.d.ts.map +1 -1
- package/src/shade/renderer/extension/RenderExtension.js +15 -19
- package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts +5 -5
- package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts.map +1 -1
- package/src/shade/renderer/extension/RenderExtensionRegistry.js +29 -166
- package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/GPUGeometryManager.js +73 -16
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +18 -3
- package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +663 -0
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +100 -5
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +688 -81
- package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +540 -0
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +155 -64
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +30 -13
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +3 -3
- package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +358 -0
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +57 -7
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +63 -9
- package/src/shade/renderer/geometry/virtual/build/level/VGeoContribution.d.ts +40 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoContribution.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoContribution.js +24 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.d.ts +91 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.js +91 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupRepack.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupRepack.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupRepack.js +25 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.d.ts +77 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.js +84 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts +19 -6
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.js +20 -7
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster.d.ts +19 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster.js +58 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster_graph.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster_graph.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster_graph.js +116 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js +545 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js +110 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts +2 -27
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.js +120 -1564
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_compute_group_boundary.d.ts +26 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_compute_group_boundary.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_compute_group_boundary.js +123 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_error_bands.d.ts +26 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_error_bands.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_error_bands.js +78 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.js +337 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts +29 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.js +147 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_stitch_frontier.d.ts +37 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_stitch_frontier.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_stitch_frontier.js +243 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts +29 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.js +117 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.d.ts +46 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.js +45 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_DEFAULT_ATTRIBUTE_WEIGHT_RATIOS.d.ts +64 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_DEFAULT_ATTRIBUTE_WEIGHT_RATIOS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_DEFAULT_ATTRIBUTE_WEIGHT_RATIOS.js +68 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts +12 -7
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.js +33 -11
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_layout.d.ts +58 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_layout.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_layout.js +79 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_read.d.ts +39 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_read.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_read.js +68 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_write.d.ts +53 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_write.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_write.js +243 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts +24 -8
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.js +250 -25
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts +12 -8
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.js +58 -50
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts +8 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.js +18 -3
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.d.ts +38 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.js +81 -0
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts +23 -5
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.js +28 -21
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.js +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js +224 -60
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.js +17 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.js +19 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts +10 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.js +103 -9
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts +14 -2
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.js +38 -14
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts +6 -2
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.js +28 -5
- package/src/shade/renderer/geometry/virtual/build/vgeo_subtree_bounds.d.ts +32 -0
- package/src/shade/renderer/geometry/virtual/build/vgeo_subtree_bounds.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/vgeo_subtree_bounds.js +93 -0
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts +20 -6
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.js +22 -8
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_corner.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_corner.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/{vgeo_layers_copy_vertex.js → vgeo_layers_copy_corner.js} +8 -8
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_declare.d.ts +18 -7
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_declare.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_declare.js +19 -8
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_like.d.ts +3 -3
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_like.js +3 -3
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_mesh_wedges.d.ts +27 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_mesh_wedges.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_mesh_wedges.js +97 -0
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.d.ts +7 -3
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.js +21 -11
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET_V4.d.ts +21 -0
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET_V4.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET_V4.js +41 -0
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts +19 -1
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.js +20 -1
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_DEFLATE.d.ts +25 -0
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_DEFLATE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_DEFLATE.js +24 -0
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.d.ts +5 -0
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.js +5 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_codec_name.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_codec_name.js +5 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.d.ts +10 -3
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.js +37 -3
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts +21 -13
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.js +37 -13
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.d.ts +8 -2
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.js +14 -2
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.js +19 -1
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_HEADER_OFFSET.js +6 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MAX_LEVEL_COUNT.d.ts +21 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MAX_LEVEL_COUNT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MAX_LEVEL_COUNT.js +20 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.d.ts +9 -0
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.js +10 -1
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.d.ts +1 -2
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.js +10 -3
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET_V5.d.ts +20 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET_V5.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET_V5.js +43 -0
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts +4 -2
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.js +8 -4
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +2 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.d.ts +6 -4
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.js +6 -4
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +13 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +13 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts +5 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.js +14 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.js +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.d.ts +4 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.js +53 -11
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.js +7 -3
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts +12 -2
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +111 -33
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts +6 -2
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +112 -42
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts +2 -2
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +51 -21
- package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +385 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +9 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +34 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +18 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +47 -19
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.d.ts +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.js +22 -4
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.d.ts +7 -2
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.js +8 -3
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.js +10 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.js +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.d.ts +13 -11
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.js +13 -11
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js +4 -0
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -4
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts +6 -2
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.js +90 -12
- package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.d.ts +22 -0
- package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.js +21 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +13 -8
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +3 -6
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +4 -12
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +0 -2
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +4 -5
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +5 -3
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way.js +11 -4
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +4 -3
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.js +3 -0
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +94 -90
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +13 -5
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +96 -89
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.js +3 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_two_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_two_way.js +4 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +100 -89
- package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.js +31 -7
- package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js +1 -7
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +161 -153
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +2 -7
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +4 -8
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +5 -8
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.d.ts +25 -0
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.js +24 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +10 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +30 -21
- package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_assign_layers.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_break_cycles.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/layout_orient_links.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/cut_geometry.d.ts +0 -61
- package/src/shade/playground/vgeo_viewer/cut_geometry.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/main.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/sample_asset.d.ts +0 -18
- package/src/shade/playground/vgeo_viewer/sample_asset.d.ts.map +0 -1
- package/src/shade/playground/vgeo_viewer/select_cut.d.ts +0 -173
- package/src/shade/playground/vgeo_viewer/select_cut.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoFaceGraph.d.ts +0 -52
- package/src/shade/renderer/geometry/virtual/build/VGeoFaceGraph.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoGatheredFaces.d.ts +0 -24
- package/src/shade/renderer/geometry/virtual/build/VGeoGatheredFaces.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoLevel.d.ts +0 -32
- package/src/shade/renderer/geometry/virtual/build/VGeoLevel.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelOptions.d.ts +0 -59
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelOptions.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelSummary.d.ts +0 -44
- package/src/shade/renderer/geometry/virtual/build/VGeoLevelSummary.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoSubmesh.d.ts +0 -20
- package/src/shade/renderer/geometry/virtual/build/VGeoSubmesh.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/VirtualGeometryMesh.d.ts +0 -73
- package/src/shade/renderer/geometry/virtual/build/VirtualGeometryMesh.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts +0 -13
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_bounding_sphere.d.ts +0 -12
- package/src/shade/renderer/geometry/virtual/build/vgeo_bounding_sphere.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_levels.d.ts +0 -36
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_levels.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_page_nodes.d.ts +0 -13
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_page_nodes.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_root_group.d.ts +0 -19
- package/src/shade/renderer/geometry/virtual/build/vgeo_build_root_group.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_normals.d.ts +0 -29
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_normals.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_tangents.d.ts +0 -31
- package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_tangents.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_containing_sphere.d.ts +0 -18
- package/src/shade/renderer/geometry/virtual/build/vgeo_containing_sphere.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_extract_submesh.d.ts +0 -14
- package/src/shade/renderer/geometry/virtual/build/vgeo_extract_submesh.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_gather_faces.d.ts +0 -12
- package/src/shade/renderer/geometry/virtual/build/vgeo_gather_faces.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_graph_components.d.ts +0 -14
- package/src/shade/renderer/geometry/virtual/build/vgeo_graph_components.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_narrow_indices.d.ts +0 -11
- package/src/shade/renderer/geometry/virtual/build/vgeo_narrow_indices.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_normalize_source.d.ts +0 -46
- package/src/shade/renderer/geometry/virtual/build/vgeo_normalize_source.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.d.ts +0 -22
- package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_partition_graph.d.ts +0 -29
- package/src/shade/renderer/geometry/virtual/build/vgeo_partition_graph.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_sphere_inflate_to_contain.d.ts +0 -9
- package/src/shade/renderer/geometry/virtual/build/vgeo_sphere_inflate_to_contain.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set.d.ts +0 -10
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set_packed.d.ts +0 -15
- package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set_packed.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_vertex.d.ts +0 -16
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_vertex.d.ts.map +0 -1
- package/src/shade/renderer/loader/gltf/fix_up_material_sides.d.ts +0 -10
- package/src/shade/renderer/loader/gltf/fix_up_material_sides.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.d.ts +0 -17
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.d.ts +0 -3
- package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.d.ts +0 -8
- package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.d.ts.map +0 -1
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_coordinates.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_layers.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_break_cycles.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_break_cycles.js +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_insert_lanes.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_insert_lanes.js +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_order_layers.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_order_layers.js +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_orient_links.d.ts +0 -0
- /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_orient_links.js +0 -0
- /package/src/shade/playground/{vgeo_viewer → caldera}/main.d.ts +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read a mesh's wedges off the values its corners already carry.
|
|
3
|
+
*
|
|
4
|
+
* **The values are the wedge.** A wedge is a set of corners at one vertex that shade the same, so
|
|
5
|
+
* the partition is not an extra fact to be stored and kept in step — it is a fact about the records,
|
|
6
|
+
* recoverable from them, and this is the one place in the builder that recovers it. Everywhere else
|
|
7
|
+
* wedges travel by provenance, because everywhere else the answer is already known and re-deriving
|
|
8
|
+
* it would be re-deciding it.
|
|
9
|
+
*
|
|
10
|
+
* Here is where the source gets to decide. A hard edge and a texture-chart boundary reach the
|
|
11
|
+
* builder as exactly this — corners of one vertex holding different records — and the weld in
|
|
12
|
+
* {@link vgeo_normalize_source} deliberately no longer flattens them.
|
|
13
|
+
*
|
|
14
|
+
* Grouped on **byte equality of the whole record**, which makes the partition an equivalence
|
|
15
|
+
* relation and so independent of the order corners are visited in. A tolerance would not be: it is
|
|
16
|
+
* not transitive, and two runs over one mesh could disagree about the same vertex. Tolerance belongs
|
|
17
|
+
* where a *decision* is made — the collapse — and not where a fact is read.
|
|
18
|
+
*
|
|
19
|
+
* @param {BinaryTopology} topology
|
|
20
|
+
* @returns {BtWedgeSet}
|
|
21
|
+
*
|
|
22
|
+
* @author Alex Goldring
|
|
23
|
+
* @copyright Company Named Limited (c) 2026
|
|
24
|
+
*/
|
|
25
|
+
export function vgeo_mesh_wedges(topology: BinaryTopology): BtWedgeSet;
|
|
26
|
+
import { BtWedgeSet } from "../../../../../../core/geom/3d/topology/struct/binary/BtWedgeSet.js";
|
|
27
|
+
//# sourceMappingURL=vgeo_mesh_wedges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vgeo_mesh_wedges.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/attribute/vgeo_mesh_wedges.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,4DALa,UAAU,CAuEtB;2BA/F0B,qEAAqE"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { NULL_POINTER } from "../../../../../../core/geom/3d/topology/struct/binary/BinaryTopology.js";
|
|
2
|
+
import { BtWedgeSet } from "../../../../../../core/geom/3d/topology/struct/binary/BtWedgeSet.js";
|
|
3
|
+
import {
|
|
4
|
+
bt_wedges_per_vertex
|
|
5
|
+
} from "../../../../../../core/geom/3d/topology/struct/binary/io/bt_wedges_per_vertex.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Read a mesh's wedges off the values its corners already carry.
|
|
9
|
+
*
|
|
10
|
+
* **The values are the wedge.** A wedge is a set of corners at one vertex that shade the same, so
|
|
11
|
+
* the partition is not an extra fact to be stored and kept in step — it is a fact about the records,
|
|
12
|
+
* recoverable from them, and this is the one place in the builder that recovers it. Everywhere else
|
|
13
|
+
* wedges travel by provenance, because everywhere else the answer is already known and re-deriving
|
|
14
|
+
* it would be re-deciding it.
|
|
15
|
+
*
|
|
16
|
+
* Here is where the source gets to decide. A hard edge and a texture-chart boundary reach the
|
|
17
|
+
* builder as exactly this — corners of one vertex holding different records — and the weld in
|
|
18
|
+
* {@link vgeo_normalize_source} deliberately no longer flattens them.
|
|
19
|
+
*
|
|
20
|
+
* Grouped on **byte equality of the whole record**, which makes the partition an equivalence
|
|
21
|
+
* relation and so independent of the order corners are visited in. A tolerance would not be: it is
|
|
22
|
+
* not transitive, and two runs over one mesh could disagree about the same vertex. Tolerance belongs
|
|
23
|
+
* where a *decision* is made — the collapse — and not where a fact is read.
|
|
24
|
+
*
|
|
25
|
+
* @param {BinaryTopology} topology
|
|
26
|
+
* @returns {BtWedgeSet}
|
|
27
|
+
*
|
|
28
|
+
* @author Alex Goldring
|
|
29
|
+
* @copyright Company Named Limited (c) 2026
|
|
30
|
+
*/
|
|
31
|
+
export function vgeo_mesh_wedges(topology) {
|
|
32
|
+
const loop_data = topology.loop_data;
|
|
33
|
+
|
|
34
|
+
if (loop_data === null) {
|
|
35
|
+
// Position and nothing else: there is no record to disagree about, so every vertex shades
|
|
36
|
+
// one way and the degenerate set is the whole answer.
|
|
37
|
+
return bt_wedges_per_vertex(topology);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const loop_pool = topology.loops;
|
|
41
|
+
const vertex_pool = topology.vertices;
|
|
42
|
+
|
|
43
|
+
const of_loop = new Uint32Array(loop_pool.size).fill(NULL_POINTER);
|
|
44
|
+
const first_of_vertex = new Uint32Array(vertex_pool.size).fill(NULL_POINTER);
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* One representative corner per wedge, which is what a candidate is compared against.
|
|
48
|
+
* @type {number[]}
|
|
49
|
+
*/
|
|
50
|
+
const corner_of_wedge = [];
|
|
51
|
+
|
|
52
|
+
const parent = [];
|
|
53
|
+
const next_of_wedge = [];
|
|
54
|
+
|
|
55
|
+
for (let loop = 0; loop < loop_pool.size; loop++) {
|
|
56
|
+
if (!loop_pool.is_allocated(loop)) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const vertex = topology.loop_read_vertex(loop);
|
|
61
|
+
|
|
62
|
+
let wedge = first_of_vertex[vertex];
|
|
63
|
+
|
|
64
|
+
while (wedge !== NULL_POINTER) {
|
|
65
|
+
if (loop_data.record_equal(corner_of_wedge[wedge], loop)) {
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
wedge = next_of_wedge[wedge];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (wedge === NULL_POINTER) {
|
|
73
|
+
// A scan of the vertex's wedges rather than a hash of the record: on smooth geometry
|
|
74
|
+
// that list has one entry, on a crease two or three, and a key built per corner would
|
|
75
|
+
// cost more than the comparison it saves.
|
|
76
|
+
wedge = parent.length;
|
|
77
|
+
|
|
78
|
+
parent.push(wedge);
|
|
79
|
+
corner_of_wedge.push(loop);
|
|
80
|
+
|
|
81
|
+
next_of_wedge.push(first_of_vertex[vertex]);
|
|
82
|
+
first_of_vertex[vertex] = wedge;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
of_loop[loop] = wedge;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const wedges = new BtWedgeSet();
|
|
89
|
+
|
|
90
|
+
wedges.count = parent.length;
|
|
91
|
+
wedges.parent = Uint32Array.from(parent);
|
|
92
|
+
wedges.next_of_wedge = Uint32Array.from(next_of_wedge);
|
|
93
|
+
wedges.first_of_vertex = first_of_vertex;
|
|
94
|
+
wedges.of_loop = of_loop;
|
|
95
|
+
|
|
96
|
+
return wedges;
|
|
97
|
+
}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Cluster record field offsets, relative to the record's own start.
|
|
2
|
+
* Cluster record field offsets, relative to the record's own start — `format_version` 5.
|
|
3
|
+
*
|
|
4
|
+
* {@link VGEO_CLUSTER_OFFSET_V4 } is what this was, and every field from offset 40 on has moved:
|
|
5
|
+
* `subtree_aabb` took the twenty-four bytes that `bounds_sphere` and `cone_reserved` were spending
|
|
6
|
+
* on a sphere nothing at runtime read and a column that was always zero. The record is still 112
|
|
7
|
+
* bytes.
|
|
3
8
|
*/
|
|
4
9
|
export type VGEO_CLUSTER_OFFSET = number;
|
|
5
10
|
export namespace VGEO_CLUSTER_OFFSET {
|
|
@@ -7,11 +12,10 @@ export namespace VGEO_CLUSTER_OFFSET {
|
|
|
7
12
|
let SELF_ERROR: number;
|
|
8
13
|
let PARENT_ERROR: number;
|
|
9
14
|
let PARENT_SPHERE: number;
|
|
10
|
-
let
|
|
15
|
+
let SUBTREE_AABB: number;
|
|
11
16
|
let AABB: number;
|
|
12
17
|
let CHILD_REF: number;
|
|
13
18
|
let CHILD_GROUP: number;
|
|
14
|
-
let CONE_RESERVED: number;
|
|
15
19
|
let ENCODING_FLAGS: number;
|
|
16
20
|
let PAYLOAD_OFFSET: number;
|
|
17
21
|
let PAYLOAD_SIZE: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VGEO_CLUSTER_OFFSET.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"VGEO_CLUSTER_OFFSET.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.js"],"names":[],"mappings":";;;;;;;;kCAQU,MAAM"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Cluster record field offsets, relative to the record's own start.
|
|
2
|
+
* Cluster record field offsets, relative to the record's own start — `format_version` 5.
|
|
3
|
+
*
|
|
4
|
+
* {@link VGEO_CLUSTER_OFFSET_V4} is what this was, and every field from offset 40 on has moved:
|
|
5
|
+
* `subtree_aabb` took the twenty-four bytes that `bounds_sphere` and `cone_reserved` were spending
|
|
6
|
+
* on a sphere nothing at runtime read and a column that was always zero. The record is still 112
|
|
7
|
+
* bytes.
|
|
8
|
+
*
|
|
3
9
|
* @enum {number}
|
|
4
10
|
*/
|
|
5
11
|
export const VGEO_CLUSTER_OFFSET = {
|
|
@@ -7,14 +13,18 @@ export const VGEO_CLUSTER_OFFSET = {
|
|
|
7
13
|
SELF_ERROR: 16,
|
|
8
14
|
PARENT_ERROR: 20,
|
|
9
15
|
PARENT_SPHERE: 24,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Object-space AABB of this cluster's own vertices **and of every cluster reachable below it**
|
|
18
|
+
* through child groups — what the cut's per-cluster frustum test needs, because culling a
|
|
19
|
+
* cluster removes its whole subtree from the descent (CULL_PLAN_2026_09_16 §3.1).
|
|
20
|
+
*/
|
|
21
|
+
SUBTREE_AABB: 40,
|
|
22
|
+
AABB: 64,
|
|
23
|
+
CHILD_REF: 88,
|
|
24
|
+
CHILD_GROUP: 90,
|
|
25
|
+
ENCODING_FLAGS: 92,
|
|
26
|
+
PAYLOAD_OFFSET: 96,
|
|
27
|
+
PAYLOAD_SIZE: 100,
|
|
28
|
+
VERTEX_COUNT: 104,
|
|
29
|
+
TRIANGLE_COUNT: 105,
|
|
20
30
|
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* *
|
|
3
|
+
*/
|
|
4
|
+
export type VGEO_CLUSTER_OFFSET_V4 = number;
|
|
5
|
+
export namespace VGEO_CLUSTER_OFFSET_V4 {
|
|
6
|
+
let SELF_SPHERE: number;
|
|
7
|
+
let SELF_ERROR: number;
|
|
8
|
+
let PARENT_ERROR: number;
|
|
9
|
+
let PARENT_SPHERE: number;
|
|
10
|
+
let BOUNDS_SPHERE: number;
|
|
11
|
+
let AABB: number;
|
|
12
|
+
let CHILD_REF: number;
|
|
13
|
+
let CHILD_GROUP: number;
|
|
14
|
+
let CONE_RESERVED: number;
|
|
15
|
+
let ENCODING_FLAGS: number;
|
|
16
|
+
let PAYLOAD_OFFSET: number;
|
|
17
|
+
let PAYLOAD_SIZE: number;
|
|
18
|
+
let VERTEX_COUNT: number;
|
|
19
|
+
let TRIANGLE_COUNT: number;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=VGEO_CLUSTER_OFFSET_V4.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGEO_CLUSTER_OFFSET_V4.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET_V4.js"],"names":[],"mappings":";;;qCAaU,MAAM"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cluster record field offsets as `format_version` 4 and earlier laid them out, kept so that the
|
|
3
|
+
* reader can still take the containers that exist.
|
|
4
|
+
*
|
|
5
|
+
* Version 5 dropped `bounds_sphere` and `cone_reserved` and put {@link
|
|
6
|
+
* VGEO_CLUSTER_OFFSET.SUBTREE_AABB} in their place, which moved every field from offset 40 on. A
|
|
7
|
+
* version-4 record read by the version-5 sequence hands back a `child_ref` taken out of the middle
|
|
8
|
+
* of a bounding box, so the decoder branches on the container's version rather than trusting one
|
|
9
|
+
* layout — and this is the other branch. Nothing but {@link vgeo_read_page} should need it.
|
|
10
|
+
*
|
|
11
|
+
* The writer and the validator have no such branch: one writes the current version and the other
|
|
12
|
+
* refuses anything else.
|
|
13
|
+
*
|
|
14
|
+
* @enum {number}
|
|
15
|
+
*
|
|
16
|
+
* @author Alex Goldring
|
|
17
|
+
* @copyright Company Named Limited (c) 2026
|
|
18
|
+
*/
|
|
19
|
+
export const VGEO_CLUSTER_OFFSET_V4 = {
|
|
20
|
+
SELF_SPHERE: 0,
|
|
21
|
+
SELF_ERROR: 16,
|
|
22
|
+
PARENT_ERROR: 20,
|
|
23
|
+
PARENT_SPHERE: 24,
|
|
24
|
+
/**
|
|
25
|
+
* The cluster's own miniball. Version 5 has no such field: nothing at runtime read it, and the
|
|
26
|
+
* builder keeps its own copy.
|
|
27
|
+
*/
|
|
28
|
+
BOUNDS_SPHERE: 40,
|
|
29
|
+
AABB: 56,
|
|
30
|
+
CHILD_REF: 80,
|
|
31
|
+
CHILD_GROUP: 82,
|
|
32
|
+
/**
|
|
33
|
+
* Always zero, for a cone cull that was declined outright. Version 5 reclaimed it.
|
|
34
|
+
*/
|
|
35
|
+
CONE_RESERVED: 84,
|
|
36
|
+
ENCODING_FLAGS: 88,
|
|
37
|
+
PAYLOAD_OFFSET: 92,
|
|
38
|
+
PAYLOAD_SIZE: 96,
|
|
39
|
+
VERTEX_COUNT: 100,
|
|
40
|
+
TRIANGLE_COUNT: 101,
|
|
41
|
+
};
|
|
@@ -34,7 +34,13 @@ export class VirtualGeometryCluster {
|
|
|
34
34
|
*/
|
|
35
35
|
parent_error: number;
|
|
36
36
|
/**
|
|
37
|
-
* This cluster's own tight bounding sphere
|
|
37
|
+
* This cluster's own tight bounding sphere.
|
|
38
|
+
*
|
|
39
|
+
* **Build-time only — the container does not carry it.** Nothing at runtime ever read it, and
|
|
40
|
+
* `format_version` 5 spent its bytes on {@link subtree_aabb}. It stays here because the build
|
|
41
|
+
* does use it: the header's `object_sphere`, the page assembler's group centroids, the cluster
|
|
42
|
+
* adjacency graph and a leaf's own `self_sphere` are all built from it.
|
|
43
|
+
*
|
|
38
44
|
* @type {Float32Array}
|
|
39
45
|
*/
|
|
40
46
|
bounds_sphere: Float32Array;
|
|
@@ -43,6 +49,18 @@ export class VirtualGeometryCluster {
|
|
|
43
49
|
* @type {Float32Array}
|
|
44
50
|
*/
|
|
45
51
|
aabb: Float32Array;
|
|
52
|
+
/**
|
|
53
|
+
* {@link aabb} unioned with the `subtree_aabb` of every cluster of this one's child group, so it
|
|
54
|
+
* contains every vertex anywhere below this cluster in the DAG.
|
|
55
|
+
*
|
|
56
|
+
* It is what the cut's per-cluster frustum test reads, and the reason it has to bound the whole
|
|
57
|
+
* subtree rather than this cluster is that culling a cluster removes everything under it from the
|
|
58
|
+
* descent — the child group is only ever reached *through* it (CULL_PLAN_2026_09_16 §1, §3.1).
|
|
59
|
+
* A leaf's equals its {@link aabb}.
|
|
60
|
+
*
|
|
61
|
+
* @type {Float32Array}
|
|
62
|
+
*/
|
|
63
|
+
subtree_aabb: Float32Array;
|
|
46
64
|
/**
|
|
47
65
|
* The group this cluster refines into, or `undefined` when it is a leaf and refines into
|
|
48
66
|
* nothing.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualGeometryCluster.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH;IACI;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,aAFU,YAAY,CAEY;IAElC;;;OAGG;IACH,YAFU,MAAM,CAED;IAEf;;;;OAIG;IACH,eAFU,YAAY,CAEc;IAEpC;;;OAGG;IACH,cAFU,MAAM,CAEwB;IAExC
|
|
1
|
+
{"version":3,"file":"VirtualGeometryCluster.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH;IACI;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,aAFU,YAAY,CAEY;IAElC;;;OAGG;IACH,YAFU,MAAM,CAED;IAEf;;;;OAIG;IACH,eAFU,YAAY,CAEc;IAEpC;;;OAGG;IACH,cAFU,MAAM,CAEwB;IAExC;;;;;;;;;OASG;IACH,eAFU,YAAY,CAEc;IAEpC;;;OAGG;IACH,MAFU,YAAY,CAEK;IAE3B;;;;;;;;;;OAUG;IACH,cAFU,YAAY,CAEa;IAEnC;;;;OAIG;IACH,aAFU,uBAAqB,SAAS,CAEhB;IAExB;;;;;;;;;;OAUG;IACH,eAFU,MAAM,CAEE;IAElB;;OAEG;IACH,cAFU,MAAM,CAEC;IAEjB;;OAEG;IACH,gBAFU,MAAM,CAEG;IAEnB;;;OAGG;IACH,gBAFU,MAAM,CAEG;IAEnB;;;OAGG;IACH,SAFU,UAAU,CAEQ;CAC/B"}
|
|
@@ -39,7 +39,13 @@ export class VirtualGeometryCluster {
|
|
|
39
39
|
parent_error = Number.POSITIVE_INFINITY;
|
|
40
40
|
|
|
41
41
|
/**
|
|
42
|
-
* This cluster's own tight bounding sphere
|
|
42
|
+
* This cluster's own tight bounding sphere.
|
|
43
|
+
*
|
|
44
|
+
* **Build-time only — the container does not carry it.** Nothing at runtime ever read it, and
|
|
45
|
+
* `format_version` 5 spent its bytes on {@link subtree_aabb}. It stays here because the build
|
|
46
|
+
* does use it: the header's `object_sphere`, the page assembler's group centroids, the cluster
|
|
47
|
+
* adjacency graph and a leaf's own `self_sphere` are all built from it.
|
|
48
|
+
*
|
|
43
49
|
* @type {Float32Array}
|
|
44
50
|
*/
|
|
45
51
|
bounds_sphere = new Float32Array(4);
|
|
@@ -50,6 +56,19 @@ export class VirtualGeometryCluster {
|
|
|
50
56
|
*/
|
|
51
57
|
aabb = new Float32Array(6);
|
|
52
58
|
|
|
59
|
+
/**
|
|
60
|
+
* {@link aabb} unioned with the `subtree_aabb` of every cluster of this one's child group, so it
|
|
61
|
+
* contains every vertex anywhere below this cluster in the DAG.
|
|
62
|
+
*
|
|
63
|
+
* It is what the cut's per-cluster frustum test reads, and the reason it has to bound the whole
|
|
64
|
+
* subtree rather than this cluster is that culling a cluster removes everything under it from the
|
|
65
|
+
* descent — the child group is only ever reached *through* it (CULL_PLAN_2026_09_16 §1, §3.1).
|
|
66
|
+
* A leaf's equals its {@link aabb}.
|
|
67
|
+
*
|
|
68
|
+
* @type {Float32Array}
|
|
69
|
+
*/
|
|
70
|
+
subtree_aabb = new Float32Array(6);
|
|
71
|
+
|
|
53
72
|
/**
|
|
54
73
|
* The group this cluster refines into, or `undefined` when it is a leaf and refines into
|
|
55
74
|
* nothing.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `codec` value for a blob stored as one raw DEFLATE stream (RFC 1951), no zlib or gzip wrapper.
|
|
3
|
+
*
|
|
4
|
+
* Bare for the same reason {@link VGEO_CODEC_LZ4} is a bare block: both wrappers carry a magic, a
|
|
5
|
+
* length and a checksum that the frame header already carries better — `decoded_size` is what the
|
|
6
|
+
* stream is decoded against and the identity-seeded `checksum` is what proves the stored bytes
|
|
7
|
+
* arrived. A zlib header would be two bytes of restating and a gzip one eighteen.
|
|
8
|
+
*
|
|
9
|
+
* This is the hosted codec: `CompressionStream`/`DecompressionStream` are the platform's own zlib,
|
|
10
|
+
* so it costs no bytes of library and runs off the JS thread — and it is *asynchronous*, which is
|
|
11
|
+
* why everything from {@link vgeo_decode_frame_blob} up to {@link vgeo_build} is.
|
|
12
|
+
*
|
|
13
|
+
* What it is worth, measured over the 44 pages of a 240x120 torus: **1.369x** against LZ4's 1.295x
|
|
14
|
+
* on the same pages, for a decode of every page that cost 16.9 ms against LZ4's 3.8 ms — 126 MB/s
|
|
15
|
+
* of decoded output against 562.
|
|
16
|
+
*
|
|
17
|
+
* **This is what the builder and the converter write by default.** An asset is built once and
|
|
18
|
+
* fetched forever, so the denser side of that trade is the one worth taking without being asked;
|
|
19
|
+
* {@link VGEO_CODEC_LZ4} is a deliberate choice for a container whose pages arrive while someone is
|
|
20
|
+
* looking at it, where the decode is a page's arrival cost rather than a build's.
|
|
21
|
+
*
|
|
22
|
+
* @type {number}
|
|
23
|
+
*/
|
|
24
|
+
export const VGEO_CODEC_DEFLATE: number;
|
|
25
|
+
//# sourceMappingURL=VGEO_CODEC_DEFLATE.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VGEO_CODEC_DEFLATE.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_DEFLATE.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,iCAFU,MAAM,CAEoB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `codec` value for a blob stored as one raw DEFLATE stream (RFC 1951), no zlib or gzip wrapper.
|
|
3
|
+
*
|
|
4
|
+
* Bare for the same reason {@link VGEO_CODEC_LZ4} is a bare block: both wrappers carry a magic, a
|
|
5
|
+
* length and a checksum that the frame header already carries better — `decoded_size` is what the
|
|
6
|
+
* stream is decoded against and the identity-seeded `checksum` is what proves the stored bytes
|
|
7
|
+
* arrived. A zlib header would be two bytes of restating and a gzip one eighteen.
|
|
8
|
+
*
|
|
9
|
+
* This is the hosted codec: `CompressionStream`/`DecompressionStream` are the platform's own zlib,
|
|
10
|
+
* so it costs no bytes of library and runs off the JS thread — and it is *asynchronous*, which is
|
|
11
|
+
* why everything from {@link vgeo_decode_frame_blob} up to {@link vgeo_build} is.
|
|
12
|
+
*
|
|
13
|
+
* What it is worth, measured over the 44 pages of a 240x120 torus: **1.369x** against LZ4's 1.295x
|
|
14
|
+
* on the same pages, for a decode of every page that cost 16.9 ms against LZ4's 3.8 ms — 126 MB/s
|
|
15
|
+
* of decoded output against 562.
|
|
16
|
+
*
|
|
17
|
+
* **This is what the builder and the converter write by default.** An asset is built once and
|
|
18
|
+
* fetched forever, so the denser side of that trade is the one worth taking without being asked;
|
|
19
|
+
* {@link VGEO_CODEC_LZ4} is a deliberate choice for a container whose pages arrive while someone is
|
|
20
|
+
* looking at it, where the decode is a page's arrival cost rather than a build's.
|
|
21
|
+
*
|
|
22
|
+
* @type {number}
|
|
23
|
+
*/
|
|
24
|
+
export const VGEO_CODEC_DEFLATE = 2;
|
|
@@ -6,6 +6,11 @@
|
|
|
6
6
|
* its identity-seeded `checksum` covers the stored bytes. So the blob is the bare block, and the
|
|
7
7
|
* frame header is what tells a decoder how much to expect out of it.
|
|
8
8
|
*
|
|
9
|
+
* Not the builder's default — {@link VGEO_CODEC_DEFLATE} is, because it stores a container in fewer
|
|
10
|
+
* bytes and a build happens once where a fetch happens forever. This is what to set for a container
|
|
11
|
+
* whose pages arrive during play: it decodes at 562 MB/s against deflate's 126, and that decode is
|
|
12
|
+
* a page's arrival cost on the residency path.
|
|
13
|
+
*
|
|
9
14
|
* @type {number}
|
|
10
15
|
*/
|
|
11
16
|
export const VGEO_CODEC_LZ4: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VGEO_CODEC_LZ4.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.js"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"VGEO_CODEC_LZ4.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,6BAFU,MAAM,CAEgB"}
|
|
@@ -6,6 +6,11 @@
|
|
|
6
6
|
* its identity-seeded `checksum` covers the stored bytes. So the blob is the bare block, and the
|
|
7
7
|
* frame header is what tells a decoder how much to expect out of it.
|
|
8
8
|
*
|
|
9
|
+
* Not the builder's default — {@link VGEO_CODEC_DEFLATE} is, because it stores a container in fewer
|
|
10
|
+
* bytes and a build happens once where a fetch happens forever. This is what to set for a container
|
|
11
|
+
* whose pages arrive during play: it decodes at 562 MB/s against deflate's 126, and that decode is
|
|
12
|
+
* a page's arrival cost on the residency path.
|
|
13
|
+
*
|
|
9
14
|
* @type {number}
|
|
10
15
|
*/
|
|
11
16
|
export const VGEO_CODEC_LZ4 = 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_codec_name.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/vgeo_codec_name.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vgeo_codec_name.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/vgeo_codec_name.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,uCANW,MAAM,GACJ,MAAM,CAmBlB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { VGEO_CODEC_DEFLATE } from "./VGEO_CODEC_DEFLATE.js";
|
|
1
2
|
import { VGEO_CODEC_LZ4 } from "./VGEO_CODEC_LZ4.js";
|
|
2
3
|
import { VGEO_CODEC_RAW } from "./VGEO_CODEC_RAW.js";
|
|
3
4
|
|
|
@@ -23,5 +24,9 @@ export function vgeo_codec_name(codec) {
|
|
|
23
24
|
return 'lz4';
|
|
24
25
|
}
|
|
25
26
|
|
|
27
|
+
if (codec === VGEO_CODEC_DEFLATE) {
|
|
28
|
+
return 'deflate';
|
|
29
|
+
}
|
|
30
|
+
|
|
26
31
|
return `codec ${codec}`;
|
|
27
32
|
}
|
|
@@ -9,18 +9,25 @@
|
|
|
9
9
|
*
|
|
10
10
|
* A blob that does not decode to exactly `decoded_size` bytes is refused rather than accepted short
|
|
11
11
|
* — a page truncated to a plausible prefix is the one corruption that reads as a valid page with
|
|
12
|
-
* missing geometry, and there is no later check that would notice.
|
|
12
|
+
* missing geometry, and there is no later check that would notice. Neither decoder is allowed to
|
|
13
|
+
* *overrun* it either: the LZ4 one is handed the end of the page as its limit, and the deflate one
|
|
14
|
+
* is stopped at the first chunk that would pass it, so a blob that expands further than its header
|
|
15
|
+
* admits costs one chunk rather than the whole expansion.
|
|
16
|
+
*
|
|
17
|
+
* This is asynchronous because {@link VGEO_CODEC_DEFLATE} is: `DecompressionStream` is the
|
|
18
|
+
* platform's zlib and the platform only offers it as a stream. The raw and LZ4 paths still finish
|
|
19
|
+
* in the caller's turn, so awaiting them costs a microtask and nothing else.
|
|
13
20
|
*
|
|
14
21
|
* @param {Uint8Array} destination at least `decoded_size` bytes free at `destination_offset`
|
|
15
22
|
* @param {number} destination_offset where the decoded page starts
|
|
16
23
|
* @param {Uint8Array} source the file, indexed from its first byte — the offsets on `frame` are
|
|
17
24
|
* absolute
|
|
18
25
|
* @param {VGeoFrameExtent} frame
|
|
19
|
-
* @returns {number} the offset just past the last byte written
|
|
26
|
+
* @returns {Promise<number>} the offset just past the last byte written
|
|
20
27
|
* @throws {Error} on a codec with no decoder here, or a blob that does not decode as its header says
|
|
21
28
|
*
|
|
22
29
|
* @author Alex Goldring
|
|
23
30
|
* @copyright Company Named Limited (c) 2026
|
|
24
31
|
*/
|
|
25
|
-
export function vgeo_decode_frame_blob(destination: Uint8Array, destination_offset: number, source: Uint8Array, frame: VGeoFrameExtent): number
|
|
32
|
+
export function vgeo_decode_frame_blob(destination: Uint8Array, destination_offset: number, source: Uint8Array, frame: VGeoFrameExtent): Promise<number>;
|
|
26
33
|
//# sourceMappingURL=vgeo_decode_frame_blob.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_decode_frame_blob.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vgeo_decode_frame_blob.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,oDAXW,UAAU,sBACV,MAAM,UACN,UAAU,2BAGR,QAAQ,MAAM,CAAC,CAmF3B"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { assert } from "../../../../../../core/assert.js";
|
|
2
|
+
import { decompress_bytes_into } from "../../../../../../core/binary/compression/decompress_bytes_into.js";
|
|
2
3
|
import { lz4_decompress_block } from "../../../../../../core/binary/lz4/lz4_decompress_block.js";
|
|
3
4
|
import { VGEO_CHILD_TABLE_ENTRY_SIZE } from "./VGEO_CHILD_TABLE_ENTRY_SIZE.js";
|
|
5
|
+
import { VGEO_CODEC_DEFLATE } from "./VGEO_CODEC_DEFLATE.js";
|
|
4
6
|
import { VGEO_CODEC_LZ4 } from "./VGEO_CODEC_LZ4.js";
|
|
5
7
|
import { VGEO_CODEC_RAW } from "./VGEO_CODEC_RAW.js";
|
|
6
8
|
import { VGEO_FRAME_HEADER_SIZE } from "./VGEO_FRAME_HEADER_SIZE.js";
|
|
@@ -16,20 +18,27 @@ import { VGEO_FRAME_HEADER_SIZE } from "./VGEO_FRAME_HEADER_SIZE.js";
|
|
|
16
18
|
*
|
|
17
19
|
* A blob that does not decode to exactly `decoded_size` bytes is refused rather than accepted short
|
|
18
20
|
* — a page truncated to a plausible prefix is the one corruption that reads as a valid page with
|
|
19
|
-
* missing geometry, and there is no later check that would notice.
|
|
21
|
+
* missing geometry, and there is no later check that would notice. Neither decoder is allowed to
|
|
22
|
+
* *overrun* it either: the LZ4 one is handed the end of the page as its limit, and the deflate one
|
|
23
|
+
* is stopped at the first chunk that would pass it, so a blob that expands further than its header
|
|
24
|
+
* admits costs one chunk rather than the whole expansion.
|
|
25
|
+
*
|
|
26
|
+
* This is asynchronous because {@link VGEO_CODEC_DEFLATE} is: `DecompressionStream` is the
|
|
27
|
+
* platform's zlib and the platform only offers it as a stream. The raw and LZ4 paths still finish
|
|
28
|
+
* in the caller's turn, so awaiting them costs a microtask and nothing else.
|
|
20
29
|
*
|
|
21
30
|
* @param {Uint8Array} destination at least `decoded_size` bytes free at `destination_offset`
|
|
22
31
|
* @param {number} destination_offset where the decoded page starts
|
|
23
32
|
* @param {Uint8Array} source the file, indexed from its first byte — the offsets on `frame` are
|
|
24
33
|
* absolute
|
|
25
34
|
* @param {VGeoFrameExtent} frame
|
|
26
|
-
* @returns {number} the offset just past the last byte written
|
|
35
|
+
* @returns {Promise<number>} the offset just past the last byte written
|
|
27
36
|
* @throws {Error} on a codec with no decoder here, or a blob that does not decode as its header says
|
|
28
37
|
*
|
|
29
38
|
* @author Alex Goldring
|
|
30
39
|
* @copyright Company Named Limited (c) 2026
|
|
31
40
|
*/
|
|
32
|
-
export function vgeo_decode_frame_blob(destination, destination_offset, source, frame) {
|
|
41
|
+
export async function vgeo_decode_frame_blob(destination, destination_offset, source, frame) {
|
|
33
42
|
assert.isNonNegativeInteger(destination_offset, 'destination_offset');
|
|
34
43
|
assert.lessThanOrEqual(
|
|
35
44
|
destination_offset + frame.decoded_size, destination.length,
|
|
@@ -80,5 +89,30 @@ export function vgeo_decode_frame_blob(destination, destination_offset, source,
|
|
|
80
89
|
return end;
|
|
81
90
|
}
|
|
82
91
|
|
|
92
|
+
if (frame.codec === VGEO_CODEC_DEFLATE) {
|
|
93
|
+
let written;
|
|
94
|
+
|
|
95
|
+
try {
|
|
96
|
+
written = await decompress_bytes_into(
|
|
97
|
+
destination, destination_offset, frame.decoded_size,
|
|
98
|
+
[source.subarray(blob, blob + frame.stored_size)], 'deflate-raw'
|
|
99
|
+
);
|
|
100
|
+
} catch (error) {
|
|
101
|
+
// The platform's own words for a malformed stream vary by host and say nothing about
|
|
102
|
+
// which page it was, which is the one thing a reader reporting this needs. The original
|
|
103
|
+
// is kept as the cause, because which host said what is the next question after that.
|
|
104
|
+
throw new Error(`page ${frame.page_index}: ${error.message}`, { cause: error });
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (written !== frame.decoded_size) {
|
|
108
|
+
throw new Error(
|
|
109
|
+
`page ${frame.page_index}: the deflate stream decoded to ${written}`
|
|
110
|
+
+ ` bytes, its frame header says ${frame.decoded_size}`
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return end;
|
|
115
|
+
}
|
|
116
|
+
|
|
83
117
|
throw new Error(`page ${frame.page_index}: codec ${frame.codec} has no decoder here`);
|
|
84
118
|
}
|
|
@@ -3,29 +3,37 @@
|
|
|
3
3
|
*
|
|
4
4
|
* A compressing codec is a *request*, not a promise: what comes back is whichever of the two is
|
|
5
5
|
* smaller, with the codec that describes it. That is what makes turning compression on safe to do
|
|
6
|
-
* unconditionally — a page of incompressible bytes costs the
|
|
7
|
-
* plus a token
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* unconditionally — a page of incompressible bytes costs the compressor's worst case, about one
|
|
7
|
+
* byte in 255 plus a token for LZ4 and five bytes per 64 KB stored block for deflate, and paying
|
|
8
|
+
* that to store bytes verbatim is a straight loss. Declining is per page, because `codec` is a
|
|
9
|
+
* frame field: one asset can carry a mixture, and a reader that handles the codecs handles any
|
|
10
|
+
* mixture of them without knowing there was a decision.
|
|
10
11
|
*
|
|
11
|
-
* The blob is the bare LZ4 block.
|
|
12
|
-
* header's `decoded_size` is what {@link vgeo_decode_frame_blob}
|
|
13
|
-
* checksum is what proves the stored bytes arrived intact.
|
|
12
|
+
* The blob is the bare LZ4 block or the bare DEFLATE stream. Neither carries a length of its own
|
|
13
|
+
* and neither needs to — the frame header's `decoded_size` is what {@link vgeo_decode_frame_blob}
|
|
14
|
+
* decodes against, and the frame's checksum is what proves the stored bytes arrived intact.
|
|
14
15
|
*
|
|
15
|
-
*
|
|
16
|
+
* This is asynchronous because {@link VGEO_CODEC_DEFLATE} is: `CompressionStream` is the platform's
|
|
17
|
+
* zlib and the platform only offers it as a stream. The raw and LZ4 paths still finish in the
|
|
18
|
+
* caller's turn, so awaiting them costs a microtask and nothing else.
|
|
19
|
+
*
|
|
20
|
+
* The LZ4 level is how hard the encoder looks for matches, and nothing else: every level writes the
|
|
16
21
|
* same LZ4 block format, so it is a build-time decision with no reader consequence at all. What it
|
|
17
22
|
* buys on a page of encoded geometry is about 2.5% over the fast encoder, almost all of which is
|
|
18
23
|
* already there at level 3; what it costs is roughly an order of magnitude of encoder throughput,
|
|
19
|
-
* which over a whole conversion comes to a couple of percent of the build.
|
|
24
|
+
* which over a whole conversion comes to a couple of percent of the build. **Deflate ignores it** —
|
|
25
|
+
* `CompressionStream` exposes no level, so the host's zlib default is the only setting there is.
|
|
20
26
|
*
|
|
21
27
|
* @param {Uint8Array} bytes the decoded page
|
|
22
|
-
* @param {number} codec the codec to attempt, one of {@link VGEO_CODEC_RAW}
|
|
23
|
-
*
|
|
24
|
-
* @
|
|
28
|
+
* @param {number} codec the codec to attempt, one of {@link VGEO_CODEC_RAW},
|
|
29
|
+
* {@link VGEO_CODEC_LZ4} or {@link VGEO_CODEC_DEFLATE}
|
|
30
|
+
* @param {number} [level] how hard to look, one of {@link LZ4_LEVEL}'s; the raw and deflate codecs
|
|
31
|
+
* ignore it
|
|
32
|
+
* @returns {Promise<VGeoFrameBlob>}
|
|
25
33
|
*
|
|
26
34
|
* @author Alex Goldring
|
|
27
35
|
* @copyright Company Named Limited (c) 2026
|
|
28
36
|
*/
|
|
29
|
-
export function vgeo_encode_frame_blob(bytes: Uint8Array, codec: number, level?: number): VGeoFrameBlob
|
|
37
|
+
export function vgeo_encode_frame_blob(bytes: Uint8Array, codec: number, level?: number): Promise<VGeoFrameBlob>;
|
|
30
38
|
import { VGeoFrameBlob } from "./VGeoFrameBlob.js";
|
|
31
39
|
//# sourceMappingURL=vgeo_encode_frame_blob.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_encode_frame_blob.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vgeo_encode_frame_blob.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,8CAVW,UAAU,SACV,MAAM,UAEN,MAAM,GAEJ,QAAQ,aAAa,CAAC,CA8ClC;8BA/E6B,oBAAoB"}
|