@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.
Files changed (482) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/core/binary/BitSet.d.ts +16 -0
  4. package/src/core/binary/BitSet.d.ts.map +1 -1
  5. package/src/core/binary/BitSet.js +159 -49
  6. package/src/core/binary/allocator/OffsetAllocator.d.ts +48 -0
  7. package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
  8. package/src/core/binary/allocator/OffsetAllocator.js +208 -9
  9. package/src/core/binary/compression/compress_bytes.d.ts +20 -0
  10. package/src/core/binary/compression/compress_bytes.d.ts.map +1 -0
  11. package/src/core/binary/compression/compress_bytes.js +35 -0
  12. package/src/core/binary/compression/decompress_bytes_into.d.ts +30 -0
  13. package/src/core/binary/compression/decompress_bytes_into.d.ts.map +1 -0
  14. package/src/core/binary/compression/decompress_bytes_into.js +87 -0
  15. package/src/core/binary/compression/deflate_decompress_bound.d.ts +27 -0
  16. package/src/core/binary/compression/deflate_decompress_bound.d.ts.map +1 -0
  17. package/src/core/binary/compression/deflate_decompress_bound.js +32 -0
  18. package/src/core/geom/3d/quadric/quadric_attribute_add.d.ts +24 -0
  19. package/src/core/geom/3d/quadric/quadric_attribute_add.d.ts.map +1 -0
  20. package/src/core/geom/3d/quadric/quadric_attribute_add.js +31 -0
  21. package/src/core/geom/3d/quadric/quadric_attribute_reduce.d.ts +46 -0
  22. package/src/core/geom/3d/quadric/quadric_attribute_reduce.d.ts.map +1 -0
  23. package/src/core/geom/3d/quadric/quadric_attribute_reduce.js +104 -0
  24. package/src/core/geom/3d/quadric/quadric_attribute_set_from_triangle.d.ts +62 -0
  25. package/src/core/geom/3d/quadric/quadric_attribute_set_from_triangle.d.ts.map +1 -0
  26. package/src/core/geom/3d/quadric/quadric_attribute_set_from_triangle.js +158 -0
  27. package/src/core/geom/3d/quadric/quadric_attribute_size.d.ts +21 -0
  28. package/src/core/geom/3d/quadric/quadric_attribute_size.d.ts.map +1 -0
  29. package/src/core/geom/3d/quadric/quadric_attribute_size.js +24 -0
  30. package/src/core/geom/3d/quadric/quadric_attribute_solve.d.ts +34 -0
  31. package/src/core/geom/3d/quadric/quadric_attribute_solve.d.ts.map +1 -0
  32. package/src/core/geom/3d/quadric/quadric_attribute_solve.js +55 -0
  33. package/src/core/geom/3d/quadric/quadric_attribute_sub.d.ts +28 -0
  34. package/src/core/geom/3d/quadric/quadric_attribute_sub.d.ts.map +1 -0
  35. package/src/core/geom/3d/quadric/quadric_attribute_sub.js +35 -0
  36. package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.d.ts +15 -0
  37. package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.d.ts.map +1 -1
  38. package/src/core/geom/3d/topology/struct/binary/BinaryDataBlock.js +35 -0
  39. package/src/core/geom/3d/topology/struct/binary/BtWedgeSet.d.ts +93 -0
  40. package/src/core/geom/3d/topology/struct/binary/BtWedgeSet.d.ts.map +1 -0
  41. package/src/core/geom/3d/topology/struct/binary/BtWedgeSet.js +128 -0
  42. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.d.ts +38 -0
  43. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.d.ts.map +1 -0
  44. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.js +113 -0
  45. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts +47 -1
  46. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
  47. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +677 -8
  48. package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_live_count.d.ts +22 -0
  49. package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_live_count.d.ts.map +1 -0
  50. package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_live_count.js +46 -0
  51. package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_per_vertex.d.ts +19 -0
  52. package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_per_vertex.d.ts.map +1 -0
  53. package/src/core/geom/3d/topology/struct/binary/io/bt_wedges_per_vertex.js +49 -0
  54. package/src/core/graph/layout/layered/BoxLayoutOptions.d.ts +63 -0
  55. package/src/core/graph/layout/layered/BoxLayoutOptions.d.ts.map +1 -0
  56. package/src/core/graph/layout/layered/BoxLayoutOptions.js +80 -0
  57. package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/LayoutBoxGraph.d.ts +35 -0
  58. package/src/core/graph/layout/layered/LayoutBoxGraph.d.ts.map +1 -0
  59. package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/LayoutBoxGraph.js +53 -1
  60. package/src/core/graph/layout/layered/layout_assign_coordinates.d.ts.map +1 -0
  61. package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_coordinates.js +72 -68
  62. package/src/core/graph/layout/layered/layout_assign_layers.d.ts.map +1 -0
  63. package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_layers.js +4 -2
  64. package/src/core/graph/layout/layered/layout_break_cycles.d.ts.map +1 -0
  65. package/src/core/graph/layout/layered/layout_insert_lanes.d.ts.map +1 -0
  66. package/src/core/graph/layout/layered/layout_order_layers.d.ts.map +1 -0
  67. package/src/core/graph/layout/layered/layout_orient_links.d.ts.map +1 -0
  68. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +7 -51
  69. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts.map +1 -1
  70. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js +8 -69
  71. package/src/core/model/node-graph/visual/layout/layout_build_problem.js +1 -1
  72. package/src/core/model/node-graph/visual/layout/layout_node_graph.js +6 -6
  73. package/src/core/model/node-graph/visual/layout/route_grid_build.js +1 -1
  74. package/src/engine/graphics3/DebugDrawSystem.d.ts +7 -5
  75. package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -1
  76. package/src/engine/graphics3/DebugDrawSystem.js +206 -203
  77. package/src/engine/graphics3/DecalSystem.d.ts +4 -5
  78. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
  79. package/src/engine/graphics3/DecalSystem.js +5 -5
  80. package/src/engine/graphics3/FogOfWarSystem.d.ts +7 -12
  81. package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -1
  82. package/src/engine/graphics3/FogOfWarSystem.js +8 -12
  83. package/src/engine/graphics3/prefab/prefab_instantiate.js +230 -230
  84. package/src/shade/RENDERER_CONTRACT.md +12 -7
  85. package/src/shade/playground/caldera/README.md +529 -0
  86. package/src/shade/playground/caldera/caldera_format.d.ts +151 -0
  87. package/src/shade/playground/caldera/caldera_format.d.ts.map +1 -0
  88. package/src/shade/playground/caldera/caldera_format.js +241 -0
  89. package/src/shade/playground/caldera/index.html +126 -0
  90. package/src/shade/playground/caldera/main.d.ts.map +1 -0
  91. package/src/shade/playground/caldera/main.js +1565 -0
  92. package/src/shade/playground/mesh_row_ceiling/README.md +85 -0
  93. package/src/shade/playground/mesh_row_ceiling/index.html +31 -0
  94. package/src/shade/playground/mesh_row_ceiling/main.d.ts +2 -0
  95. package/src/shade/playground/mesh_row_ceiling/main.d.ts.map +1 -0
  96. package/src/shade/playground/mesh_row_ceiling/main.js +389 -0
  97. package/src/shade/playground/vgeo_runtime/README.md +5 -3
  98. package/src/shade/playground/vgeo_runtime/main.js +3 -2
  99. package/src/shade/playground/vgeo_runtime/sample_asset.d.ts +3 -3
  100. package/src/shade/playground/vgeo_runtime/sample_asset.d.ts.map +1 -1
  101. package/src/shade/playground/vgeo_runtime/sample_asset.js +3 -3
  102. package/src/shade/playground/vgeo_scene/README.md +103 -24
  103. package/src/shade/playground/vgeo_scene/main.js +525 -24
  104. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  105. package/src/shade/renderer/GraphicsContext.js +6 -0
  106. package/src/shade/renderer/Renderer.d.ts +2 -0
  107. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  108. package/src/shade/renderer/Renderer.js +23 -0
  109. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  110. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +100 -8
  111. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +69 -33
  112. package/src/shade/renderer/extension/RenderExtension.d.ts +15 -18
  113. package/src/shade/renderer/extension/RenderExtension.d.ts.map +1 -1
  114. package/src/shade/renderer/extension/RenderExtension.js +15 -19
  115. package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts +5 -5
  116. package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts.map +1 -1
  117. package/src/shade/renderer/extension/RenderExtensionRegistry.js +29 -166
  118. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  119. package/src/shade/renderer/geometry/GPUGeometryManager.js +73 -16
  120. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  121. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +18 -3
  122. package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +663 -0
  123. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +100 -5
  124. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  125. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +688 -81
  126. package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +540 -0
  127. package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +155 -64
  128. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +30 -13
  129. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +3 -3
  130. package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +358 -0
  131. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +57 -7
  132. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
  133. package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +63 -9
  134. package/src/shade/renderer/geometry/virtual/build/level/VGeoContribution.d.ts +40 -0
  135. package/src/shade/renderer/geometry/virtual/build/level/VGeoContribution.d.ts.map +1 -0
  136. package/src/shade/renderer/geometry/virtual/build/level/VGeoContribution.js +24 -0
  137. package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.d.ts +91 -0
  138. package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.d.ts.map +1 -0
  139. package/src/shade/renderer/geometry/virtual/build/level/VGeoFrontier.js +91 -0
  140. package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupRepack.d.ts +24 -0
  141. package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupRepack.d.ts.map +1 -0
  142. package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupRepack.js +25 -0
  143. package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.d.ts +77 -0
  144. package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.d.ts.map +1 -0
  145. package/src/shade/renderer/geometry/virtual/build/level/VGeoGroupStep.js +84 -0
  146. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts +19 -6
  147. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts.map +1 -1
  148. package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.js +20 -7
  149. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster.d.ts +19 -0
  150. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster.d.ts.map +1 -0
  151. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster.js +58 -0
  152. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster_graph.d.ts +18 -0
  153. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster_graph.d.ts.map +1 -0
  154. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster_graph.js +116 -0
  155. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts +18 -0
  156. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.d.ts.map +1 -0
  157. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_group_step.js +545 -0
  158. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts +16 -0
  159. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.d.ts.map +1 -0
  160. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_leaf_frontier.js +110 -0
  161. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts +2 -27
  162. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts.map +1 -1
  163. package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.js +120 -1564
  164. package/src/shade/renderer/geometry/virtual/build/level/vgeo_compute_group_boundary.d.ts +26 -0
  165. package/src/shade/renderer/geometry/virtual/build/level/vgeo_compute_group_boundary.d.ts.map +1 -0
  166. package/src/shade/renderer/geometry/virtual/build/level/vgeo_compute_group_boundary.js +123 -0
  167. package/src/shade/renderer/geometry/virtual/build/level/vgeo_error_bands.d.ts +26 -0
  168. package/src/shade/renderer/geometry/virtual/build/level/vgeo_error_bands.d.ts.map +1 -0
  169. package/src/shade/renderer/geometry/virtual/build/level/vgeo_error_bands.js +78 -0
  170. package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts +24 -0
  171. package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.d.ts.map +1 -0
  172. package/src/shade/renderer/geometry/virtual/build/level/vgeo_partition_into_groups.js +337 -0
  173. package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts +29 -0
  174. package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.d.ts.map +1 -0
  175. package/src/shade/renderer/geometry/virtual/build/level/vgeo_run_round.js +147 -0
  176. package/src/shade/renderer/geometry/virtual/build/level/vgeo_stitch_frontier.d.ts +37 -0
  177. package/src/shade/renderer/geometry/virtual/build/level/vgeo_stitch_frontier.d.ts.map +1 -0
  178. package/src/shade/renderer/geometry/virtual/build/level/vgeo_stitch_frontier.js +243 -0
  179. package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts +29 -0
  180. package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.d.ts.map +1 -0
  181. package/src/shade/renderer/geometry/virtual/build/level/vgeo_try_repack.js +117 -0
  182. package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.d.ts +46 -0
  183. package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.d.ts.map +1 -0
  184. package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_CREASE_ANGLE.js +45 -0
  185. package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_DEFAULT_ATTRIBUTE_WEIGHT_RATIOS.d.ts +64 -0
  186. package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_DEFAULT_ATTRIBUTE_WEIGHT_RATIOS.d.ts.map +1 -0
  187. package/src/shade/renderer/geometry/virtual/build/mesh/VGEO_DEFAULT_ATTRIBUTE_WEIGHT_RATIOS.js +68 -0
  188. package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts +12 -7
  189. package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts.map +1 -1
  190. package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.js +33 -11
  191. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_layout.d.ts +58 -0
  192. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_layout.d.ts.map +1 -0
  193. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_layout.js +79 -0
  194. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_read.d.ts +39 -0
  195. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_read.d.ts.map +1 -0
  196. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_read.js +68 -0
  197. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_write.d.ts +53 -0
  198. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_write.d.ts.map +1 -0
  199. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_attribute_vector_write.js +243 -0
  200. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts +24 -8
  201. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts.map +1 -1
  202. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.js +250 -25
  203. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts +12 -8
  204. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts.map +1 -1
  205. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.js +58 -50
  206. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts +8 -1
  207. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts.map +1 -1
  208. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.js +18 -3
  209. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.d.ts +38 -0
  210. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.d.ts.map +1 -0
  211. package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_resolve_attribute_weights.js +81 -0
  212. package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts +23 -5
  213. package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts.map +1 -1
  214. package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.js +28 -21
  215. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.js +1 -1
  216. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -1
  217. package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.js +224 -60
  218. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts +15 -0
  219. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts.map +1 -1
  220. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.js +17 -0
  221. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts +17 -0
  222. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts.map +1 -1
  223. package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.js +19 -0
  224. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts +10 -1
  225. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts.map +1 -1
  226. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.js +103 -9
  227. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts +14 -2
  228. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts.map +1 -1
  229. package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.js +38 -14
  230. package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts +6 -2
  231. package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts.map +1 -1
  232. package/src/shade/renderer/geometry/virtual/build/vgeo_build.js +28 -5
  233. package/src/shade/renderer/geometry/virtual/build/vgeo_subtree_bounds.d.ts +32 -0
  234. package/src/shade/renderer/geometry/virtual/build/vgeo_subtree_bounds.d.ts.map +1 -0
  235. package/src/shade/renderer/geometry/virtual/build/vgeo_subtree_bounds.js +93 -0
  236. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts +20 -6
  237. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts.map +1 -1
  238. package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.js +22 -8
  239. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_corner.d.ts +16 -0
  240. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_corner.d.ts.map +1 -0
  241. package/src/shade/renderer/geometry/virtual/format/attribute/{vgeo_layers_copy_vertex.js → vgeo_layers_copy_corner.js} +8 -8
  242. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_declare.d.ts +18 -7
  243. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_declare.d.ts.map +1 -1
  244. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_declare.js +19 -8
  245. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_like.d.ts +3 -3
  246. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_like.js +3 -3
  247. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_mesh_wedges.d.ts +27 -0
  248. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_mesh_wedges.d.ts.map +1 -0
  249. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_mesh_wedges.js +97 -0
  250. package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.d.ts +7 -3
  251. package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.d.ts.map +1 -1
  252. package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET.js +21 -11
  253. package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET_V4.d.ts +21 -0
  254. package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET_V4.d.ts.map +1 -0
  255. package/src/shade/renderer/geometry/virtual/format/cluster/VGEO_CLUSTER_OFFSET_V4.js +41 -0
  256. package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts +19 -1
  257. package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts.map +1 -1
  258. package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.js +20 -1
  259. package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_DEFLATE.d.ts +25 -0
  260. package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_DEFLATE.d.ts.map +1 -0
  261. package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_DEFLATE.js +24 -0
  262. package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.d.ts +5 -0
  263. package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.d.ts.map +1 -1
  264. package/src/shade/renderer/geometry/virtual/format/frame/VGEO_CODEC_LZ4.js +5 -0
  265. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_codec_name.d.ts.map +1 -1
  266. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_codec_name.js +5 -0
  267. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.d.ts +10 -3
  268. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.d.ts.map +1 -1
  269. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_decode_frame_blob.js +37 -3
  270. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts +21 -13
  271. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts.map +1 -1
  272. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.js +37 -13
  273. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.d.ts +8 -2
  274. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.d.ts.map +1 -1
  275. package/src/shade/renderer/geometry/virtual/format/frame/vgeo_frame_decode_bound.js +14 -2
  276. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts +18 -0
  277. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts.map +1 -1
  278. package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.js +19 -1
  279. package/src/shade/renderer/geometry/virtual/format/header/VGEO_HEADER_OFFSET.js +6 -0
  280. package/src/shade/renderer/geometry/virtual/format/header/VGEO_MAX_LEVEL_COUNT.d.ts +21 -0
  281. package/src/shade/renderer/geometry/virtual/format/header/VGEO_MAX_LEVEL_COUNT.d.ts.map +1 -0
  282. package/src/shade/renderer/geometry/virtual/format/header/VGEO_MAX_LEVEL_COUNT.js +20 -0
  283. package/src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.d.ts +9 -0
  284. package/src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.d.ts.map +1 -1
  285. package/src/shade/renderer/geometry/virtual/format/header/VGEO_MIN_READER_VERSION.js +10 -1
  286. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.d.ts +1 -2
  287. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.js +10 -3
  288. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET_V5.d.ts +20 -0
  289. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET_V5.d.ts.map +1 -0
  290. package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET_V5.js +43 -0
  291. package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts +4 -2
  292. package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts.map +1 -1
  293. package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.js +8 -4
  294. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -1
  295. package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +2 -2
  296. package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.d.ts +6 -4
  297. package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.d.ts.map +1 -1
  298. package/src/shade/renderer/geometry/virtual/format/read/VGeoDirectory.js +6 -4
  299. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +13 -2
  300. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -1
  301. package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +13 -2
  302. package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts +5 -1
  303. package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts.map +1 -1
  304. package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.js +14 -1
  305. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts.map +1 -1
  306. package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.js +1 -0
  307. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.d.ts +4 -1
  308. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.d.ts.map +1 -1
  309. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_directory.js +53 -11
  310. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.d.ts.map +1 -1
  311. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_header.js +7 -3
  312. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts +12 -2
  313. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.d.ts.map +1 -1
  314. package/src/shade/renderer/geometry/virtual/format/read/vgeo_read_page.js +111 -33
  315. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts +6 -2
  316. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
  317. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +112 -42
  318. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts +2 -2
  319. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.d.ts.map +1 -1
  320. package/src/shade/renderer/geometry/virtual/format/vgeo_write_container.js +51 -21
  321. package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +385 -0
  322. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
  323. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +9 -0
  324. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
  325. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +34 -0
  326. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -1
  327. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +18 -0
  328. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
  329. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +47 -19
  330. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.d.ts +1 -0
  331. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_OFFSET.js +22 -4
  332. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.d.ts +7 -2
  333. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.d.ts.map +1 -1
  334. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CLUSTER_ROW_WORDS.js +8 -3
  335. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.d.ts +1 -0
  336. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT.js +10 -0
  337. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.js +1 -1
  338. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.d.ts +13 -11
  339. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.d.ts.map +1 -1
  340. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_slot_words.js +13 -11
  341. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts.map +1 -1
  342. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js +4 -0
  343. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
  344. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -4
  345. package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts +6 -2
  346. package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts.map +1 -1
  347. package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.js +90 -12
  348. package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.d.ts +22 -0
  349. package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.d.ts.map +1 -0
  350. package/src/shade/renderer/gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.js +21 -0
  351. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  352. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +13 -8
  353. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  354. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +3 -6
  355. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  356. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +4 -12
  357. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +0 -2
  358. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
  359. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +4 -5
  360. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  361. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +5 -3
  362. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way.d.ts.map +1 -1
  363. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way.js +11 -4
  364. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  365. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +4 -3
  366. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.d.ts.map +1 -1
  367. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.js +3 -0
  368. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
  369. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +94 -90
  370. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  371. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +13 -5
  372. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
  373. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +96 -89
  374. package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.d.ts.map +1 -1
  375. package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.js +3 -1
  376. package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_two_way.d.ts.map +1 -1
  377. package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_two_way.js +4 -1
  378. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
  379. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +100 -89
  380. package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.d.ts.map +1 -1
  381. package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.js +31 -7
  382. package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.d.ts.map +1 -1
  383. package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js +1 -7
  384. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
  385. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +161 -153
  386. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
  387. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +2 -7
  388. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  389. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +4 -8
  390. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  391. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +5 -8
  392. package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.d.ts +25 -0
  393. package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.d.ts.map +1 -0
  394. package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.js +24 -0
  395. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +10 -0
  396. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  397. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +30 -21
  398. package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.d.ts.map +0 -1
  399. package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.d.ts.map +0 -1
  400. package/src/core/model/node-graph/visual/layout/layout_assign_layers.d.ts.map +0 -1
  401. package/src/core/model/node-graph/visual/layout/layout_break_cycles.d.ts.map +0 -1
  402. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts.map +0 -1
  403. package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +0 -1
  404. package/src/core/model/node-graph/visual/layout/layout_orient_links.d.ts.map +0 -1
  405. package/src/shade/playground/vgeo_viewer/cut_geometry.d.ts +0 -61
  406. package/src/shade/playground/vgeo_viewer/cut_geometry.d.ts.map +0 -1
  407. package/src/shade/playground/vgeo_viewer/main.d.ts.map +0 -1
  408. package/src/shade/playground/vgeo_viewer/sample_asset.d.ts +0 -18
  409. package/src/shade/playground/vgeo_viewer/sample_asset.d.ts.map +0 -1
  410. package/src/shade/playground/vgeo_viewer/select_cut.d.ts +0 -173
  411. package/src/shade/playground/vgeo_viewer/select_cut.d.ts.map +0 -1
  412. package/src/shade/renderer/geometry/virtual/build/VGeoFaceGraph.d.ts +0 -52
  413. package/src/shade/renderer/geometry/virtual/build/VGeoFaceGraph.d.ts.map +0 -1
  414. package/src/shade/renderer/geometry/virtual/build/VGeoGatheredFaces.d.ts +0 -24
  415. package/src/shade/renderer/geometry/virtual/build/VGeoGatheredFaces.d.ts.map +0 -1
  416. package/src/shade/renderer/geometry/virtual/build/VGeoLevel.d.ts +0 -32
  417. package/src/shade/renderer/geometry/virtual/build/VGeoLevel.d.ts.map +0 -1
  418. package/src/shade/renderer/geometry/virtual/build/VGeoLevelOptions.d.ts +0 -59
  419. package/src/shade/renderer/geometry/virtual/build/VGeoLevelOptions.d.ts.map +0 -1
  420. package/src/shade/renderer/geometry/virtual/build/VGeoLevelSummary.d.ts +0 -44
  421. package/src/shade/renderer/geometry/virtual/build/VGeoLevelSummary.d.ts.map +0 -1
  422. package/src/shade/renderer/geometry/virtual/build/VGeoSubmesh.d.ts +0 -20
  423. package/src/shade/renderer/geometry/virtual/build/VGeoSubmesh.d.ts.map +0 -1
  424. package/src/shade/renderer/geometry/virtual/build/VirtualGeometryMesh.d.ts +0 -73
  425. package/src/shade/renderer/geometry/virtual/build/VirtualGeometryMesh.d.ts.map +0 -1
  426. package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts +0 -13
  427. package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts.map +0 -1
  428. package/src/shade/renderer/geometry/virtual/build/vgeo_bounding_sphere.d.ts +0 -12
  429. package/src/shade/renderer/geometry/virtual/build/vgeo_bounding_sphere.d.ts.map +0 -1
  430. package/src/shade/renderer/geometry/virtual/build/vgeo_build_levels.d.ts +0 -36
  431. package/src/shade/renderer/geometry/virtual/build/vgeo_build_levels.d.ts.map +0 -1
  432. package/src/shade/renderer/geometry/virtual/build/vgeo_build_page_nodes.d.ts +0 -13
  433. package/src/shade/renderer/geometry/virtual/build/vgeo_build_page_nodes.d.ts.map +0 -1
  434. package/src/shade/renderer/geometry/virtual/build/vgeo_build_root_group.d.ts +0 -19
  435. package/src/shade/renderer/geometry/virtual/build/vgeo_build_root_group.d.ts.map +0 -1
  436. package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_normals.d.ts +0 -29
  437. package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_normals.d.ts.map +0 -1
  438. package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_tangents.d.ts +0 -31
  439. package/src/shade/renderer/geometry/virtual/build/vgeo_compute_vertex_tangents.d.ts.map +0 -1
  440. package/src/shade/renderer/geometry/virtual/build/vgeo_containing_sphere.d.ts +0 -18
  441. package/src/shade/renderer/geometry/virtual/build/vgeo_containing_sphere.d.ts.map +0 -1
  442. package/src/shade/renderer/geometry/virtual/build/vgeo_extract_submesh.d.ts +0 -14
  443. package/src/shade/renderer/geometry/virtual/build/vgeo_extract_submesh.d.ts.map +0 -1
  444. package/src/shade/renderer/geometry/virtual/build/vgeo_gather_faces.d.ts +0 -12
  445. package/src/shade/renderer/geometry/virtual/build/vgeo_gather_faces.d.ts.map +0 -1
  446. package/src/shade/renderer/geometry/virtual/build/vgeo_graph_components.d.ts +0 -14
  447. package/src/shade/renderer/geometry/virtual/build/vgeo_graph_components.d.ts.map +0 -1
  448. package/src/shade/renderer/geometry/virtual/build/vgeo_narrow_indices.d.ts +0 -11
  449. package/src/shade/renderer/geometry/virtual/build/vgeo_narrow_indices.d.ts.map +0 -1
  450. package/src/shade/renderer/geometry/virtual/build/vgeo_normalize_source.d.ts +0 -46
  451. package/src/shade/renderer/geometry/virtual/build/vgeo_normalize_source.d.ts.map +0 -1
  452. package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.d.ts +0 -22
  453. package/src/shade/renderer/geometry/virtual/build/vgeo_page_node_count.d.ts.map +0 -1
  454. package/src/shade/renderer/geometry/virtual/build/vgeo_partition_graph.d.ts +0 -29
  455. package/src/shade/renderer/geometry/virtual/build/vgeo_partition_graph.d.ts.map +0 -1
  456. package/src/shade/renderer/geometry/virtual/build/vgeo_sphere_inflate_to_contain.d.ts +0 -9
  457. package/src/shade/renderer/geometry/virtual/build/vgeo_sphere_inflate_to_contain.d.ts.map +0 -1
  458. package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set.d.ts +0 -10
  459. package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set.d.ts.map +0 -1
  460. package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set_packed.d.ts +0 -15
  461. package/src/shade/renderer/geometry/virtual/build/vgeo_split_face_set_packed.d.ts.map +0 -1
  462. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_vertex.d.ts +0 -16
  463. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_copy_vertex.d.ts.map +0 -1
  464. package/src/shade/renderer/loader/gltf/fix_up_material_sides.d.ts +0 -10
  465. package/src/shade/renderer/loader/gltf/fix_up_material_sides.d.ts.map +0 -1
  466. package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.d.ts +0 -17
  467. package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.d.ts.map +0 -1
  468. package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.d.ts +0 -3
  469. package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.d.ts.map +0 -1
  470. package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.d.ts +0 -8
  471. package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.d.ts.map +0 -1
  472. /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_coordinates.d.ts +0 -0
  473. /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_assign_layers.d.ts +0 -0
  474. /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_break_cycles.d.ts +0 -0
  475. /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_break_cycles.js +0 -0
  476. /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_insert_lanes.d.ts +0 -0
  477. /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_insert_lanes.js +0 -0
  478. /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_order_layers.d.ts +0 -0
  479. /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_order_layers.js +0 -0
  480. /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_orient_links.d.ts +0 -0
  481. /package/src/core/{model/node-graph/visual/layout → graph/layout/layered}/layout_orient_links.js +0 -0
  482. /package/src/shade/playground/{vgeo_viewer → caldera}/main.d.ts +0 -0
@@ -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
+ }
@@ -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: `level_count` is a u8, and a
46
- * round loop whose count scales with the cluster count rather than its logarithm will run out of
47
- * levels on a real asset. Widening the band until it holds a fixed share of the frontier bounds
48
- * the depth logarithmically, and costs error uniformity only where the octave had nothing.
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. `level_count` is a u8 in the container, and a build
54
- * that has not converged by then has something else wrong with it.
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;
@@ -1 +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;;;;OAIG;IACH,YAFU,MAAM,CAEC;CACpB"}
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"}
@@ -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: `level_count` is a u8, and a
49
- * round loop whose count scales with the cluster count rather than its logarithm will run out of
50
- * levels on a real asset. Widening the band until it holds a fixed share of the frontier bounds
51
- * the depth logarithmically, and costs error uniformity only where the octave had nothing.
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. `level_count` is a u8 in the container, and a build
58
- * that has not converged by then has something else wrong with it.
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 = 255;
74
+ max_levels = 4096;
62
75
  }
@@ -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
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The cluster adjacency graph of a frontier: clusters are the vertices, shared mesh edges are the
3
+ * edges, and an edge weighs as much boundary as the two clusters share, discounted by how much empty
4
+ * space merging them would enclose.
5
+ *
6
+ * @param {VGeoFrontier} frontier
7
+ * @param {VGeoFaceGraph} face_graph of `frontier.mesh`
8
+ * @returns {{edge_addresses: Uint32Array, adjacency: Uint32Array, edge_weights: Float32Array}}
9
+ *
10
+ * @author Alex Goldring
11
+ * @copyright Company Named Limited (c) 2026
12
+ */
13
+ export function vgeo_build_cluster_graph(frontier: VGeoFrontier, face_graph: VGeoFaceGraph): {
14
+ edge_addresses: Uint32Array;
15
+ adjacency: Uint32Array;
16
+ edge_weights: Float32Array;
17
+ };
18
+ //# sourceMappingURL=vgeo_build_cluster_graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vgeo_build_cluster_graph.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/build/level/vgeo_build_cluster_graph.js"],"names":[],"mappings":"AAuCA;;;;;;;;;;;GAWG;AACH,6FALa;IAAC,cAAc,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,WAAW,CAAC;IAAC,YAAY,EAAE,YAAY,CAAA;CAAC,CAqE7F"}