@woosh/meep-engine 3.26.0 → 3.28.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/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +542 -0
- package/src/core/binary/lz4/LZ4_LEVEL.d.ts +33 -0
- package/src/core/binary/lz4/LZ4_LEVEL.d.ts.map +1 -0
- package/src/core/binary/lz4/LZ4_LEVEL.js +32 -0
- package/src/core/binary/lz4/lz4_compress_block_at_level.d.ts +33 -0
- package/src/core/binary/lz4/lz4_compress_block_at_level.d.ts.map +1 -0
- package/src/core/binary/lz4/lz4_compress_block_at_level.js +47 -0
- package/src/core/binary/lz4/lz4_compress_block_hc.d.ts +40 -0
- package/src/core/binary/lz4/lz4_compress_block_hc.d.ts.map +1 -0
- package/src/core/binary/lz4/lz4_compress_block_hc.js +1382 -0
- package/src/core/binary/lz4/lz4_decompress_block.d.ts +2 -1
- package/src/core/binary/lz4/lz4_decompress_block.d.ts.map +1 -1
- package/src/core/binary/lz4/lz4_decompress_block.js +31 -6
- package/src/core/geom/3d/mat4/m4_linear_determinant.d.ts +15 -0
- package/src/core/geom/3d/mat4/m4_linear_determinant.d.ts.map +1 -0
- package/src/core/geom/3d/mat4/m4_linear_determinant.js +24 -0
- package/src/core/geom/3d/mat4/m4_normal_matrix3.d.ts +4 -2
- package/src/core/geom/3d/mat4/m4_normal_matrix3.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/m4_normal_matrix3.js +21 -11
- package/src/core/geom/3d/shape/HeightMapShape3D.d.ts +14 -7
- package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/HeightMapShape3D.js +87 -78
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +38 -1
- package/src/engine/graphics3/GraphicsEngine.d.ts +5 -1
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine.js +834 -830
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/RENDERER_CONTRACT.md +19 -10
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +1 -1
- package/src/shade/playground/vgeo_runtime/README.md +186 -27
- package/src/shade/playground/vgeo_runtime/index.html +112 -62
- package/src/shade/playground/vgeo_runtime/main.js +678 -88
- package/src/shade/playground/vgeo_runtime/sample_asset.d.ts +18 -0
- package/src/shade/playground/vgeo_runtime/sample_asset.d.ts.map +1 -0
- package/src/shade/playground/{vgeo_viewer → vgeo_runtime}/sample_asset.js +23 -5
- package/src/shade/playground/vgeo_scene/README.md +408 -0
- package/src/shade/playground/vgeo_scene/index.html +144 -0
- package/src/shade/playground/vgeo_scene/main.d.ts +2 -0
- package/src/shade/playground/vgeo_scene/main.d.ts.map +1 -0
- package/src/shade/playground/vgeo_scene/main.js +1716 -0
- package/src/shade/playground/vgeo_viewer/sample_asset.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.d.ts +4 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +5 -2
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +1 -2
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +11 -0
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +16 -8
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +16 -11
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +3 -29
- package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.d.ts +22 -0
- package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.d.ts.map +1 -0
- package/src/shade/renderer/geometry/meshlet/encoding/ENCODED_ATTRIBUTE_DEFAULT_VALUES.js +49 -0
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +77 -7
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +36 -23
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +17 -14
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts +19 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/VGeoBuildOptions.js +21 -1
- package/src/shade/renderer/geometry/virtual/build/gltf/gltf_open_document.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/gltf/gltf_open_document.js +5 -9
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevel.d.ts +32 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevel.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts +59 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelOptions.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelSummary.d.ts +44 -0
- package/src/shade/renderer/geometry/virtual/build/level/VGeoLevelSummary.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts +36 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_levels.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_build_levels.js → level/vgeo_build_levels.js} +61 -95
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_root_group.d.ts +19 -0
- package/src/shade/renderer/geometry/virtual/build/level/vgeo_build_root_group.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_build_root_group.js → level/vgeo_build_root_group.js} +1 -1
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts +73 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/VirtualGeometryMesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{VirtualGeometryMesh.js → mesh/VirtualGeometryMesh.js} +7 -7
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts +29 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_normals.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_compute_vertex_normals.js → mesh/vgeo_compute_vertex_normals.js} +3 -3
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts +31 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_compute_vertex_tangents.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_compute_vertex_tangents.js → mesh/vgeo_compute_vertex_tangents.js} +5 -5
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts +46 -0
- package/src/shade/renderer/geometry/virtual/build/mesh/vgeo_normalize_source.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_normalize_source.js → mesh/vgeo_normalize_source.js} +9 -9
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_assemble_pages.d.ts +13 -0
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_assemble_pages.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_assemble_pages.js → page/vgeo_assemble_pages.js} +63 -16
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_build_page_nodes.d.ts +13 -0
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_build_page_nodes.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_build_page_nodes.js → page/vgeo_build_page_nodes.js} +4 -4
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_page_node_count.d.ts +22 -0
- package/src/shade/renderer/geometry/virtual/build/page/vgeo_page_node_count.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_page_node_count.js → page/vgeo_page_node_count.js} +2 -2
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts +52 -0
- package/src/shade/renderer/geometry/virtual/build/partition/VGeoFaceGraph.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{VGeoFaceGraph.js → partition/VGeoFaceGraph.js} +1 -1
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_graph_components.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_graph.d.ts +29 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_graph.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_partition_graph.js → partition/vgeo_partition_graph.js} +2 -2
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.d.ts +41 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_partition_subgraph.js +92 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.d.ts +10 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_split_face_set.js → partition/vgeo_split_face_set.js} +12 -55
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/build/partition/vgeo_split_face_set_packed.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_split_face_set_packed.js → partition/vgeo_split_face_set_packed.js} +3 -3
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_bounding_sphere.d.ts +12 -0
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_bounding_sphere.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_bounding_sphere.js → sphere/vgeo_bounding_sphere.js} +3 -3
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_containing_sphere.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_containing_sphere.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_containing_sphere.js → sphere/vgeo_containing_sphere.js} +3 -3
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_sphere_inflate_to_contain.d.ts +9 -0
- package/src/shade/renderer/geometry/virtual/build/sphere/vgeo_sphere_inflate_to_contain.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_sphere_inflate_to_contain.js → sphere/vgeo_sphere_inflate_to_contain.js} +1 -1
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoGatheredFaces.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts +20 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/VGeoSubmesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_extract_submesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_extract_submesh.js → submesh/vgeo_extract_submesh.js} +5 -5
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts +12 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_gather_faces.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_gather_faces.js → submesh/vgeo_gather_faces.js} +2 -2
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_narrow_indices.d.ts +11 -0
- package/src/shade/renderer/geometry/virtual/build/submesh/vgeo_narrow_indices.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/build/{vgeo_narrow_indices.js → submesh/vgeo_narrow_indices.js} +3 -3
- package/src/shade/renderer/geometry/virtual/build/vgeo_assemble_pages.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/build/vgeo_build.js +10 -11
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts +22 -0
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/VGeoWriteOptions.js +24 -0
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.d.ts +8 -2
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_attributes_read.js +8 -2
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts +12 -0
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/dag/VirtualGeometryCluster.js +13 -0
- package/src/shade/renderer/geometry/virtual/format/frame/vgeo_encode_frame_blob.d.ts +8 -1
- 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 +11 -3
- package/src/shade/renderer/geometry/virtual/format/header/VGEO_FORMAT_VERSION.d.ts +9 -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 +10 -1
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_GROUP_OFFSET.js +15 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.d.ts +18 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_ENTRY_COUNT.js +17 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.d.ts +8 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_MAX_PARENT_REF.js +7 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.d.ts +3 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PAGE_OFFSET.js +16 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_ENTRY_SIZE.js +13 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.d.ts +11 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/page/VGEO_PARENT_PAGE_ENTRY_SIZE.js +10 -0
- package/src/shade/renderer/geometry/virtual/format/payload/vgeo_encode_cluster_payload.d.ts +28 -0
- 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 +7 -3
- package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts +20 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoByteSource.js +20 -2
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts +4 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerHeader.js +4 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts +29 -3
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoContainerReader.js +81 -122
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts +40 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPage.js +44 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts +69 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoPageFetcherCore.js +236 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/VGeoReadOptions.js +15 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.d.ts +31 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_byte_source_from_descriptor.js +32 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts +10 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_fetch_byte_source.js +21 -1
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_transfer.js +84 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts +22 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/format/read/vgeo_page_worker_serve.js +96 -0
- 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 +63 -3
- 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 +219 -17
- 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 +156 -11
- package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +656 -0
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts +33 -36
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.js +109 -193
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +109 -29
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +173 -105
- package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +37 -0
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +109 -26
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +548 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +29 -50
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +55 -487
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts +84 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +393 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts +234 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +1388 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.d.ts +81 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoResidencyOptions.js +89 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts +53 -34
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +407 -124
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +100 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +219 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_EXPAND.js +47 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.d.ts +20 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_FLAG_COARSEN.js +19 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js +30 -12
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts +8 -8
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +11 -73
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts +19 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +98 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts +31 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +99 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_queue.js +39 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +18 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_prepare.js +5 -15
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts +3 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.js +77 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.d.ts +3 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_reseed.js +130 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +32 -37
- 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 +576 -230
- package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts +15 -18
- package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js +19 -28
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +45 -25
- 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 +11 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_CUT_STAT_COUNT.js +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.d.ts +0 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js +12 -10
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.d.ts +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_OFFSET.js +8 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts +7 -2
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_GROUP_ROW_WORDS.js +8 -3
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.d.ts +2 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_OFFSET.js +19 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PAGE_ROW_WORDS.js +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.d.ts +5 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_OFFSET.js +22 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_PARENT_ROW_WORDS.js +13 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_QUEUE_TARGET_PARENT_BIT.js +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts +15 -0
- package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.js +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.d.ts +23 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.js +28 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.d.ts +2 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.js +13 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts +10 -5
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.js +15 -6
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.d.ts +6 -1
- 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 +38 -1
- 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 +4 -3
- package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/load_gltf.js +0 -19
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/chunk_material_draw_side.d.ts +14 -0
- package/src/shade/renderer/material/chunk_material_draw_side.d.ts.map +1 -0
- package/src/shade/renderer/material/chunk_material_draw_side.js +34 -0
- package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
- package/src/shade/renderer/material/standard/fragment_gbuffer.js +8 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +6 -3
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +6 -3
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +13 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts +19 -5
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +23 -5
- package/src/shade/renderer/rasterize/bucket/filter_materials_by_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/filter_materials_by_bucket.js +12 -5
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +12 -4
- package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts +22 -0
- package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.js +36 -0
- package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +2 -0
- 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 +58 -57
- package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts +15 -0
- package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/chunk_triangle_winding_is_reversed.js +35 -0
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +3 -5
- 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 +3 -4
- package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.d.ts +10 -1
- package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.js +38 -29
- package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.d.ts +5 -0
- package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/chunk_rasterization_material_bucket.js +63 -55
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +3 -4
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js +1 -0
- package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js +7 -7
- 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 +83 -78
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +44 -53
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js +6 -2
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js +6 -2
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.js +19 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +7 -4
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +3 -2
- package/src/shade/renderer/rasterize/native/chunk_rasterize_triangle.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/chunk_rasterize_triangle.js +15 -4
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +16 -5
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +16 -5
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +2 -1
- package/src/shade/renderer/rasterize/native/rasterization_shader_resources.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/rasterization_shader_resources.js +4 -0
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +16 -7
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +85 -89
- 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 +28 -32
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +22 -2
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +61 -4
- package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts +19 -0
- package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/scene/NODE3D_STRUCT.js +34 -0
- package/src/shade/renderer/scene/chunk_node3d_flags.d.ts +9 -0
- package/src/shade/renderer/scene/chunk_node3d_flags.d.ts.map +1 -0
- package/src/shade/renderer/scene/chunk_node3d_flags.js +23 -0
- package/src/shade/renderer/scene/chunk_scene_database_access.d.ts.map +1 -1
- package/src/shade/renderer/scene/chunk_scene_database_access.js +15 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.js +9 -1
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.js +16 -4
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.js +18 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.js +33 -0
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +92 -16
- package/src/shade/renderer/view/GPUViewContext.d.ts +5 -0
- package/src/shade/renderer/view/GPUViewContext.d.ts.map +1 -1
- package/src/shade/renderer/view/GPUViewContext.js +21 -0
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +74 -3
- package/src/shade/playground/vgeo_viewer/README.md +0 -150
- package/src/shade/playground/vgeo_viewer/cut_geometry.js +0 -460
- package/src/shade/playground/vgeo_viewer/index.html +0 -77
- package/src/shade/playground/vgeo_viewer/main.js +0 -1343
- package/src/shade/playground/vgeo_viewer/select_cut.js +0 -481
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.d.ts +0 -258
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyManager.js +0 -723
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.d.ts +0 -49
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.d.ts.map +0 -1
- package/src/shade/renderer/geometry/virtual/residency/VGeoResidencyOptions.js +0 -50
- package/src/shade/renderer/loader/gltf/fix_up_material_sides.js +0 -109
- package/src/shade/renderer/rasterize/expand/graph_triangles_filter_by_material_side.js +0 -78
- package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.js +0 -100
- package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.js +0 -26
- package/src/shade/renderer/shader/chunk/jobs/NOTES.md +0 -47
- package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.d.ts +0 -3
- package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/jobs/chunk_job_system.js +0 -102
- /package/src/shade/renderer/geometry/virtual/build/{VGeoLevel.js → level/VGeoLevel.js} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{VGeoLevelOptions.js → level/VGeoLevelOptions.js} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{VGeoLevelSummary.js → level/VGeoLevelSummary.js} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{vgeo_graph_components.js → partition/vgeo_graph_components.js} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{VGeoGatheredFaces.js → submesh/VGeoGatheredFaces.js} +0 -0
- /package/src/shade/renderer/geometry/virtual/build/{VGeoSubmesh.js → submesh/VGeoSubmesh.js} +0 -0
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* its low nibble the match length less four; either saturates at fifteen and continues in whole
|
|
7
7
|
* bytes, a 255 meaning "and more". The match's distance is a 16-bit little-endian offset back from
|
|
8
8
|
* the write head, and it is allowed to reach into bytes this same sequence is producing — that
|
|
9
|
-
* overlap is how the format codes runs, so
|
|
9
|
+
* overlap is how the format codes runs, so a match that reaches back less far than it is long is
|
|
10
|
+
* copied a byte at a time.
|
|
10
11
|
*
|
|
11
12
|
* Blocks here are independent: a match reaches back no further than `destination_offset`, never
|
|
12
13
|
* into whatever a previous block left in the buffer. That is what `LZ4_compress_default` produces
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lz4_decompress_block.d.ts","sourceRoot":"","sources":["../../../../../src/core/binary/lz4/lz4_decompress_block.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lz4_decompress_block.d.ts","sourceRoot":"","sources":["../../../../../src/core/binary/lz4/lz4_decompress_block.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,kDATW,UAAU,sBACV,MAAM,mBACN,MAAM,UACN,UAAU,iBACV,MAAM,cACN,MAAM,GACJ,MAAM,CAyHlB"}
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
import { assert } from "../../assert.js";
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Runs shorter than this are cheaper to copy a byte at a time than to hand to `set` or
|
|
5
|
+
* `copyWithin`, whose call overhead dominates until there is a memmove's worth of work behind it.
|
|
6
|
+
* Both halves earn their keep, and on real geometry it is the literals that carry the win: four
|
|
7
|
+
* fifths of a decoded `.vgeo` page arrives as literal runs of about thirty-five bytes, while its
|
|
8
|
+
* matches average nine and stay in the loop whatever this is set to.
|
|
9
|
+
*
|
|
10
|
+
* Swept on 2,267 real pages at both block shapes. The top of the curve is broad — anything from
|
|
11
|
+
* sixteen up is most of the win — and this is where it sits, which is also where
|
|
12
|
+
* {@link lz4_compress_block} put its own, arrived at separately and on literals alone.
|
|
13
|
+
*/
|
|
14
|
+
const BULK_COPY_LENGTH = 32;
|
|
15
|
+
|
|
3
16
|
/**
|
|
4
17
|
* Decode one LZ4 block.
|
|
5
18
|
*
|
|
@@ -8,7 +21,8 @@ import { assert } from "../../assert.js";
|
|
|
8
21
|
* its low nibble the match length less four; either saturates at fifteen and continues in whole
|
|
9
22
|
* bytes, a 255 meaning "and more". The match's distance is a 16-bit little-endian offset back from
|
|
10
23
|
* the write head, and it is allowed to reach into bytes this same sequence is producing — that
|
|
11
|
-
* overlap is how the format codes runs, so
|
|
24
|
+
* overlap is how the format codes runs, so a match that reaches back less far than it is long is
|
|
25
|
+
* copied a byte at a time.
|
|
12
26
|
*
|
|
13
27
|
* Blocks here are independent: a match reaches back no further than `destination_offset`, never
|
|
14
28
|
* into whatever a previous block left in the buffer. That is what `LZ4_compress_default` produces
|
|
@@ -72,8 +86,12 @@ export function lz4_decompress_block(destination, destination_offset, destinatio
|
|
|
72
86
|
);
|
|
73
87
|
}
|
|
74
88
|
|
|
75
|
-
|
|
76
|
-
destination
|
|
89
|
+
if (literal_length >= BULK_COPY_LENGTH) {
|
|
90
|
+
destination.set(source.subarray(s, s + literal_length), d);
|
|
91
|
+
} else {
|
|
92
|
+
for (let i = 0; i < literal_length; i++) {
|
|
93
|
+
destination[d + i] = source[s + i];
|
|
94
|
+
}
|
|
77
95
|
}
|
|
78
96
|
|
|
79
97
|
d += literal_length;
|
|
@@ -127,9 +145,16 @@ export function lz4_decompress_block(destination, destination_offset, destinatio
|
|
|
127
145
|
);
|
|
128
146
|
}
|
|
129
147
|
|
|
130
|
-
//
|
|
131
|
-
|
|
132
|
-
|
|
148
|
+
// A match that does not reach back as far as it is long overlaps the bytes it is writing, and
|
|
149
|
+
// that is how the format codes runs: `copyWithin` moves as if through a temporary, so it
|
|
150
|
+
// would lay down one copy of the pattern where the format means it to repeat. Only a match
|
|
151
|
+
// clear of its own output can take it, and the byte loop below is the run.
|
|
152
|
+
if (match_length >= BULK_COPY_LENGTH && match_offset >= match_length) {
|
|
153
|
+
destination.copyWithin(d, match_position, match_position + match_length);
|
|
154
|
+
} else {
|
|
155
|
+
for (let i = 0; i < match_length; i++) {
|
|
156
|
+
destination[d + i] = destination[match_position + i];
|
|
157
|
+
}
|
|
133
158
|
}
|
|
134
159
|
|
|
135
160
|
d += match_length;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determinant of the linear (upper-left 3x3) part of a 4x4 transform.
|
|
3
|
+
*
|
|
4
|
+
* The sign is the interesting part: it is negative exactly when the transform reflects — an odd
|
|
5
|
+
* number of negative scale axes anywhere in the chain that produced it. A reflection reverses the
|
|
6
|
+
* winding order of every triangle drawn under it and flips the handedness of its tangent frame,
|
|
7
|
+
* so renderers have to know. The magnitude is the volume scale factor.
|
|
8
|
+
*
|
|
9
|
+
* The translation column cannot affect it, which is why only the 3x3 is read.
|
|
10
|
+
*
|
|
11
|
+
* @param {number[]|Float32Array} m 16-element, column-major 4x4 matrix
|
|
12
|
+
* @returns {number}
|
|
13
|
+
*/
|
|
14
|
+
export function m4_linear_determinant(m: number[] | Float32Array): number;
|
|
15
|
+
//# sourceMappingURL=m4_linear_determinant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"m4_linear_determinant.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/m4_linear_determinant.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,yCAHW,MAAM,EAAE,GAAC,YAAY,GACnB,MAAM,CAYlB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determinant of the linear (upper-left 3x3) part of a 4x4 transform.
|
|
3
|
+
*
|
|
4
|
+
* The sign is the interesting part: it is negative exactly when the transform reflects — an odd
|
|
5
|
+
* number of negative scale axes anywhere in the chain that produced it. A reflection reverses the
|
|
6
|
+
* winding order of every triangle drawn under it and flips the handedness of its tangent frame,
|
|
7
|
+
* so renderers have to know. The magnitude is the volume scale factor.
|
|
8
|
+
*
|
|
9
|
+
* The translation column cannot affect it, which is why only the 3x3 is read.
|
|
10
|
+
*
|
|
11
|
+
* @param {number[]|Float32Array} m 16-element, column-major 4x4 matrix
|
|
12
|
+
* @returns {number}
|
|
13
|
+
*/
|
|
14
|
+
export function m4_linear_determinant(m) {
|
|
15
|
+
// columns of the upper-left 3x3 (column-major)
|
|
16
|
+
const c0_x = m[0], c0_y = m[1], c0_z = m[2];
|
|
17
|
+
const c1_x = m[4], c1_y = m[5], c1_z = m[6];
|
|
18
|
+
const c2_x = m[8], c2_y = m[9], c2_z = m[10];
|
|
19
|
+
|
|
20
|
+
// dot(c0, cross(c1, c2))
|
|
21
|
+
return c0_x * (c1_y * c2_z - c1_z * c2_y)
|
|
22
|
+
+ c0_y * (c1_z * c2_x - c1_x * c2_z)
|
|
23
|
+
+ c0_z * (c1_x * c2_y - c1_y * c2_x);
|
|
24
|
+
}
|
|
@@ -4,8 +4,10 @@
|
|
|
4
4
|
*
|
|
5
5
|
* The normal matrix is the transpose of the inverse of the linear part of the transform. The
|
|
6
6
|
* cofactor matrix equals `det(M) * (M^-1)^T`, so it points the same direction as the true normal
|
|
7
|
-
* matrix and avoids an explicit matrix inversion. The `det(M)`
|
|
8
|
-
*
|
|
7
|
+
* matrix and avoids an explicit matrix inversion. The `det(M)` magnitude is irrelevant because the
|
|
8
|
+
* transformed normals must be re-normalized afterwards anyway — its *sign* is not. Under a
|
|
9
|
+
* reflection the cofactor matrix points every normal into the surface instead of out of it, so the
|
|
10
|
+
* result is re-oriented by the determinant's sign.
|
|
9
11
|
*
|
|
10
12
|
* NOTE: the resulting matrix produces scaled (non-unit) vectors — normalize the output of any
|
|
11
13
|
* transform performed with it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"m4_normal_matrix3.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/m4_normal_matrix3.js"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"m4_normal_matrix3.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/m4_normal_matrix3.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,uCAHW,MAAM,EAAE,GAAC,YAAY,KACrB,MAAM,EAAE,GAAC,YAAY,QA8B/B"}
|
|
@@ -4,8 +4,10 @@
|
|
|
4
4
|
*
|
|
5
5
|
* The normal matrix is the transpose of the inverse of the linear part of the transform. The
|
|
6
6
|
* cofactor matrix equals `det(M) * (M^-1)^T`, so it points the same direction as the true normal
|
|
7
|
-
* matrix and avoids an explicit matrix inversion. The `det(M)`
|
|
8
|
-
*
|
|
7
|
+
* matrix and avoids an explicit matrix inversion. The `det(M)` magnitude is irrelevant because the
|
|
8
|
+
* transformed normals must be re-normalized afterwards anyway — its *sign* is not. Under a
|
|
9
|
+
* reflection the cofactor matrix points every normal into the surface instead of out of it, so the
|
|
10
|
+
* result is re-oriented by the determinant's sign.
|
|
9
11
|
*
|
|
10
12
|
* NOTE: the resulting matrix produces scaled (non-unit) vectors — normalize the output of any
|
|
11
13
|
* transform performed with it.
|
|
@@ -23,17 +25,25 @@ export function m4_normal_matrix3(out, m) {
|
|
|
23
25
|
const c2_x = m[8], c2_y = m[9], c2_z = m[10];
|
|
24
26
|
|
|
25
27
|
// column 0 = cross(c1, c2)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
const cofactor_0_x = c1_y * c2_z - c1_z * c2_y;
|
|
29
|
+
const cofactor_0_y = c1_z * c2_x - c1_x * c2_z;
|
|
30
|
+
const cofactor_0_z = c1_x * c2_y - c1_y * c2_x;
|
|
31
|
+
|
|
32
|
+
// dot(c0, cross(c1, c2)) is the determinant, and the cross is already in hand
|
|
33
|
+
const determinant = c0_x * cofactor_0_x + c0_y * cofactor_0_y + c0_z * cofactor_0_z;
|
|
34
|
+
const orientation = determinant < 0 ? -1 : 1;
|
|
35
|
+
|
|
36
|
+
out[0] = cofactor_0_x * orientation;
|
|
37
|
+
out[1] = cofactor_0_y * orientation;
|
|
38
|
+
out[2] = cofactor_0_z * orientation;
|
|
29
39
|
|
|
30
40
|
// column 1 = cross(c2, c0)
|
|
31
|
-
out[3] = c2_y * c0_z - c2_z * c0_y;
|
|
32
|
-
out[4] = c2_z * c0_x - c2_x * c0_z;
|
|
33
|
-
out[5] = c2_x * c0_y - c2_y * c0_x;
|
|
41
|
+
out[3] = (c2_y * c0_z - c2_z * c0_y) * orientation;
|
|
42
|
+
out[4] = (c2_z * c0_x - c2_x * c0_z) * orientation;
|
|
43
|
+
out[5] = (c2_x * c0_y - c2_y * c0_x) * orientation;
|
|
34
44
|
|
|
35
45
|
// column 2 = cross(c0, c1)
|
|
36
|
-
out[6] = c0_y * c1_z - c0_z * c1_y;
|
|
37
|
-
out[7] = c0_z * c1_x - c0_x * c1_z;
|
|
38
|
-
out[8] = c0_x * c1_y - c0_y * c1_x;
|
|
46
|
+
out[6] = (c0_y * c1_z - c0_z * c1_y) * orientation;
|
|
47
|
+
out[7] = (c0_z * c1_x - c0_x * c1_z) * orientation;
|
|
48
|
+
out[8] = (c0_x * c1_y - c0_y * c1_x) * orientation;
|
|
39
49
|
}
|
|
@@ -184,13 +184,20 @@ export class HeightMapShape3D extends AbstractShape3D {
|
|
|
184
184
|
* (the shared {@link tri3_raycast} convention). A cast from below the terrain
|
|
185
185
|
* therefore reports a downward normal, not the surface's true upward one.
|
|
186
186
|
*
|
|
187
|
-
* A hit landing exactly ON a
|
|
188
|
-
* facets meeting there
|
|
189
|
-
* the
|
|
190
|
-
*
|
|
191
|
-
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
187
|
+
* A hit landing exactly ON a seam between facets gets the normal of one of the
|
|
188
|
+
* facets meeting there. INSIDE a sub-cell the two paths agree — they split on
|
|
189
|
+
* the same D–B diagonal and break the resulting tie in favour of the same
|
|
190
|
+
* facet — which matters because that diagonal runs through the sub-cell's
|
|
191
|
+
* centre, so a cast down the middle of a cell lands on it routinely rather
|
|
192
|
+
* than exceptionally.
|
|
193
|
+
*
|
|
194
|
+
* BETWEEN sub-cells they can differ, and which facet each names follows from
|
|
195
|
+
* traversal order: this walks the grid along the ray, the narrowphase
|
|
196
|
+
* enumerates it row-major, so on a grid line — and especially a grid corner,
|
|
197
|
+
* where four facets meet — the two can name different facets. The hit POINT
|
|
198
|
+
* still agrees; a faceted surface simply has no single normal at a seam.
|
|
199
|
+
* Measure-zero, and called out because it is the only place the two answers
|
|
200
|
+
* part company.
|
|
194
201
|
*
|
|
195
202
|
* `size.y` does NOT bound the query. Sampler values are not clamped to it (see
|
|
196
203
|
* the class docstring), so clipping the ray to the height range that
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeightMapShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/HeightMapShape3D.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"HeightMapShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/HeightMapShape3D.js"],"names":[],"mappings":"AAuBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH;IA4DI;;;;;;;;;;;OAWG;IACH,wCATW,MAAM,UACN,MAAM,UACN,MAAM,gBACN,OAAO,iBACP,MAAM,GAGJ,gBAAgB,CAqB5B;IA1FD;;;;;OAKG;IACH,sBAFU,OAAO,CAEkB;IAEnC;;;;;;;OAOG;IACH,eAFU,OAAO,CAEW;IAE5B;;;;;OAKG;IACH,SAFU,YAAY,IAAI,CAEX;IAEf;;;;;;;;;;;;;;;;OAgBG;IACH,cAFU,MAAM,CAEC;IAEjB;;;;;OAKG;IACH,eAA6B;IAG7B,6BAA2B;IAE3B,6BAA2B;IAC3B,6BAA2B;IAmC3B;;;;;;;;;OASG;IACH,sBA8CC;IAED;;;;;;OAMG;IACH,yBAJW,MAAM,OACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;;;;OAQG;IACH,8BALW,MAAM,MACN,MAAM,MACN,MAAM,GACJ,MAAM,CAelB;IAED,wCA6BC;IAED,oCA2BC;IAED;;;;;;;;OAQG;IACH,6CAmBC;IAED;;;;OAIG;IACH,4DA2BC;IAED;;;;;;;;;OASG;IACH,qGAEC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgEG;IACH,aAJW,YAAY,GAAC,MAAM,EAAE,cAEnB,OAAO,CA0NnB;IAED,kFAiBC;IA6CD;;;OAGG;IACH,cAHW,gBAAgB,GACd,OAAO,CAUnB;IAWL;;;;;;OAMG;IACH,6BAFU,OAAO,CAE4B;CAT5C;gCAluB+B,sBAAsB;wBAD9B,kBAAkB"}
|
|
@@ -2,9 +2,12 @@ import { hash_mix3 } from "../../../math/hash/hash_mix3.js";
|
|
|
2
2
|
import { hash_mix2 } from "../../../math/hash/hash_mix2.js";
|
|
3
3
|
import { assert } from "../../../assert.js";
|
|
4
4
|
import { clamp } from "../../../math/clamp.js";
|
|
5
|
+
import { clamp_index } from "../../../math/clamp_index.js";
|
|
5
6
|
import { optional_equality } from "../../../model/object/optional_equality.js";
|
|
6
7
|
import { optional_hash } from "../../../model/object/optional_hash.js";
|
|
7
8
|
import { tri3_raycast } from "../triangle/tri3_raycast.js";
|
|
9
|
+
import { v3_cross } from "../../vec3/v3_cross.js";
|
|
10
|
+
import { v3_dot } from "../../vec3/v3_dot.js";
|
|
8
11
|
import { v3_length } from "../../vec3/v3_length.js";
|
|
9
12
|
import { Vector3 } from "../../Vector3.js";
|
|
10
13
|
import { AbstractShape3D } from "./AbstractShape3D.js";
|
|
@@ -192,14 +195,13 @@ export class HeightMapShape3D extends AbstractShape3D {
|
|
|
192
195
|
u_y *= u_inv;
|
|
193
196
|
u_z *= u_inv;
|
|
194
197
|
|
|
195
|
-
// v = u × n (for n=+Y, u=+X this gives v=+Z, the intuitive choice)
|
|
196
|
-
const v_x = u_y * nz - u_z * ny;
|
|
197
|
-
const v_y = u_z * nx - u_x * nz;
|
|
198
|
-
const v_z = u_x * ny - u_y * nx;
|
|
199
|
-
|
|
200
198
|
const b = this._basis;
|
|
199
|
+
|
|
201
200
|
b[0] = u_x; b[1] = u_y; b[2] = u_z;
|
|
202
|
-
|
|
201
|
+
|
|
202
|
+
// v = u × n (for n=+Y, u=+X this gives v=+Z, the intuitive choice)
|
|
203
|
+
v3_cross(b, 3, u_x, u_y, u_z, nx, ny, nz);
|
|
204
|
+
|
|
203
205
|
b[6] = nx; b[7] = ny; b[8] = nz;
|
|
204
206
|
|
|
205
207
|
this._basis_orientation_x = nx;
|
|
@@ -233,8 +235,8 @@ export class HeightMapShape3D extends AbstractShape3D {
|
|
|
233
235
|
const b = this._basis;
|
|
234
236
|
|
|
235
237
|
// project onto basis u and basis v
|
|
236
|
-
const u_coord = b[0]
|
|
237
|
-
const v_coord = b[3]
|
|
238
|
+
const u_coord = v3_dot(b[0], b[1], b[2], px, py, pz);
|
|
239
|
+
const v_coord = v3_dot(b[3], b[4], b[5], px, py, pz);
|
|
238
240
|
|
|
239
241
|
const u01 = u_coord / this.size[0] + 0.5;
|
|
240
242
|
const v01 = v_coord / this.size[2] + 0.5;
|
|
@@ -266,11 +268,10 @@ export class HeightMapShape3D extends AbstractShape3D {
|
|
|
266
268
|
|
|
267
269
|
const uv_extent = Math.abs(cu) * half_u + Math.abs(cv) * half_v;
|
|
268
270
|
|
|
269
|
-
const
|
|
270
|
-
const h_hi = ch > 0 ? ch * sy : 0;
|
|
271
|
+
const h_extent = ch * sy;
|
|
271
272
|
|
|
272
|
-
result[k] = -uv_extent +
|
|
273
|
-
result[k + 3] = uv_extent +
|
|
273
|
+
result[k] = -uv_extent + Math.min(h_extent, 0);
|
|
274
|
+
result[k + 3] = uv_extent + Math.max(h_extent, 0);
|
|
274
275
|
}
|
|
275
276
|
}
|
|
276
277
|
|
|
@@ -284,9 +285,9 @@ export class HeightMapShape3D extends AbstractShape3D {
|
|
|
284
285
|
const b = this._basis;
|
|
285
286
|
|
|
286
287
|
// project into heightmap-local frame (u, v, h)
|
|
287
|
-
const u_coord = b[0]
|
|
288
|
-
const v_coord = b[3]
|
|
289
|
-
const h_coord = b[6]
|
|
288
|
+
const u_coord = v3_dot(b[0], b[1], b[2], px, py, pz);
|
|
289
|
+
const v_coord = v3_dot(b[3], b[4], b[5], px, py, pz);
|
|
290
|
+
const h_coord = v3_dot(b[6], b[7], b[8], px, py, pz);
|
|
290
291
|
|
|
291
292
|
const half_u = this.size[0] * 0.5;
|
|
292
293
|
const half_v = this.size[2] * 0.5;
|
|
@@ -321,9 +322,9 @@ export class HeightMapShape3D extends AbstractShape3D {
|
|
|
321
322
|
|
|
322
323
|
const b = this._basis;
|
|
323
324
|
|
|
324
|
-
const u_coord = b[0]
|
|
325
|
-
const v_coord = b[3]
|
|
326
|
-
const h_coord = b[6]
|
|
325
|
+
const u_coord = v3_dot(b[0], b[1], b[2], px, py, pz);
|
|
326
|
+
const v_coord = v3_dot(b[3], b[4], b[5], px, py, pz);
|
|
327
|
+
const h_coord = v3_dot(b[6], b[7], b[8], px, py, pz);
|
|
327
328
|
|
|
328
329
|
const u01 = u_coord / this.size[0] + 0.5;
|
|
329
330
|
const v01 = v_coord / this.size[2] + 0.5;
|
|
@@ -347,8 +348,8 @@ export class HeightMapShape3D extends AbstractShape3D {
|
|
|
347
348
|
|
|
348
349
|
const b = this._basis;
|
|
349
350
|
|
|
350
|
-
const u_coord = b[0]
|
|
351
|
-
const v_coord = b[3]
|
|
351
|
+
const u_coord = v3_dot(b[0], b[1], b[2], rx, ry, rz);
|
|
352
|
+
const v_coord = v3_dot(b[3], b[4], b[5], rx, ry, rz);
|
|
352
353
|
|
|
353
354
|
const half_u = this.size[0] * 0.5;
|
|
354
355
|
const half_v = this.size[2] * 0.5;
|
|
@@ -407,13 +408,20 @@ export class HeightMapShape3D extends AbstractShape3D {
|
|
|
407
408
|
* (the shared {@link tri3_raycast} convention). A cast from below the terrain
|
|
408
409
|
* therefore reports a downward normal, not the surface's true upward one.
|
|
409
410
|
*
|
|
410
|
-
* A hit landing exactly ON a
|
|
411
|
-
* facets meeting there
|
|
412
|
-
* the
|
|
413
|
-
*
|
|
414
|
-
*
|
|
415
|
-
*
|
|
416
|
-
*
|
|
411
|
+
* A hit landing exactly ON a seam between facets gets the normal of one of the
|
|
412
|
+
* facets meeting there. INSIDE a sub-cell the two paths agree — they split on
|
|
413
|
+
* the same D–B diagonal and break the resulting tie in favour of the same
|
|
414
|
+
* facet — which matters because that diagonal runs through the sub-cell's
|
|
415
|
+
* centre, so a cast down the middle of a cell lands on it routinely rather
|
|
416
|
+
* than exceptionally.
|
|
417
|
+
*
|
|
418
|
+
* BETWEEN sub-cells they can differ, and which facet each names follows from
|
|
419
|
+
* traversal order: this walks the grid along the ray, the narrowphase
|
|
420
|
+
* enumerates it row-major, so on a grid line — and especially a grid corner,
|
|
421
|
+
* where four facets meet — the two can name different facets. The hit POINT
|
|
422
|
+
* still agrees; a faceted surface simply has no single normal at a seam.
|
|
423
|
+
* Measure-zero, and called out because it is the only place the two answers
|
|
424
|
+
* part company.
|
|
417
425
|
*
|
|
418
426
|
* `size.y` does NOT bound the query. Sampler values are not clamped to it (see
|
|
419
427
|
* the class docstring), so clipping the ray to the height range that
|
|
@@ -473,10 +481,10 @@ export class HeightMapShape3D extends AbstractShape3D {
|
|
|
473
481
|
// Body → heightmap-local footprint coordinates. The basis is orthonormal,
|
|
474
482
|
// so the direction stays unit and `t` is the same distance in both frames;
|
|
475
483
|
// the height component is never needed, the triangles carry it.
|
|
476
|
-
const o_u = b[0]
|
|
477
|
-
const o_v = b[3]
|
|
478
|
-
const d_u = b[0]
|
|
479
|
-
const d_v = b[3]
|
|
484
|
+
const o_u = v3_dot(b[0], b[1], b[2], o_x, o_y, o_z);
|
|
485
|
+
const o_v = v3_dot(b[3], b[4], b[5], o_x, o_y, o_z);
|
|
486
|
+
const d_u = v3_dot(b[0], b[1], b[2], d_x, d_y, d_z);
|
|
487
|
+
const d_v = v3_dot(b[3], b[4], b[5], d_x, d_y, d_z);
|
|
480
488
|
|
|
481
489
|
const half_u = size_x * 0.5;
|
|
482
490
|
const half_v = size_z * 0.5;
|
|
@@ -489,22 +497,22 @@ export class HeightMapShape3D extends AbstractShape3D {
|
|
|
489
497
|
|
|
490
498
|
if (d_u > RAY_SLAB_EPSILON || d_u < -RAY_SLAB_EPSILON) {
|
|
491
499
|
const inv = 1 / d_u;
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
500
|
+
const t0 = (-half_u - o_u) * inv;
|
|
501
|
+
const t1 = (half_u - o_u) * inv;
|
|
502
|
+
|
|
503
|
+
t_enter = Math.max(t_enter, Math.min(t0, t1));
|
|
504
|
+
t_exit = Math.min(t_exit, Math.max(t0, t1));
|
|
497
505
|
} else if (o_u < -half_u || o_u > half_u) {
|
|
498
506
|
return false;
|
|
499
507
|
}
|
|
500
508
|
|
|
501
509
|
if (d_v > RAY_SLAB_EPSILON || d_v < -RAY_SLAB_EPSILON) {
|
|
502
510
|
const inv = 1 / d_v;
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
511
|
+
const t0 = (-half_v - o_v) * inv;
|
|
512
|
+
const t1 = (half_v - o_v) * inv;
|
|
513
|
+
|
|
514
|
+
t_enter = Math.max(t_enter, Math.min(t0, t1));
|
|
515
|
+
t_exit = Math.min(t_exit, Math.max(t0, t1));
|
|
508
516
|
} else if (o_v < -half_v || o_v > half_v) {
|
|
509
517
|
return false;
|
|
510
518
|
}
|
|
@@ -528,34 +536,33 @@ export class HeightMapShape3D extends AbstractShape3D {
|
|
|
528
536
|
const g_u = (o_u + d_u * t_enter + half_u) * per_cell_u;
|
|
529
537
|
const g_v = (o_v + d_v * t_enter + half_v) * per_cell_v;
|
|
530
538
|
|
|
531
|
-
// Clamped because the slab clip lands the entry point ON the
|
|
532
|
-
// where rounding can put it a ULP outside
|
|
533
|
-
let i = Math.floor(g_u);
|
|
534
|
-
let j = Math.floor(g_v);
|
|
535
|
-
|
|
536
|
-
if (i < 0) i = 0; else if (i > seg_u - 1) i = seg_u - 1;
|
|
537
|
-
if (j < 0) j = 0; else if (j > seg_v - 1) j = seg_v - 1;
|
|
539
|
+
// Clamped to the grid because the slab clip lands the entry point ON the
|
|
540
|
+
// boundary, where rounding can put it a ULP outside.
|
|
541
|
+
let i = clamp_index(Math.floor(g_u), seg_u);
|
|
542
|
+
let j = clamp_index(Math.floor(g_v), seg_v);
|
|
538
543
|
|
|
544
|
+
// `t_next` is the distance at which the ray leaves the starting cell
|
|
545
|
+
// through that axis' far grid line, `t_delta` the distance a whole cell
|
|
546
|
+
// costs thereafter. A zero rate leaves both at Infinity: that axis is
|
|
547
|
+
// never the one the walk steps along.
|
|
539
548
|
let step_i = 0, t_delta_u = Infinity, t_next_u = Infinity;
|
|
540
|
-
if (rate_u
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
step_i = -1;
|
|
546
|
-
t_delta_u =
|
|
547
|
-
t_next_u = t_enter + (
|
|
549
|
+
if (rate_u !== 0) {
|
|
550
|
+
// the grid line the starting cell is left through: its far side
|
|
551
|
+
// in the direction of travel
|
|
552
|
+
const exit_line = rate_u > 0 ? i + 1 : i;
|
|
553
|
+
|
|
554
|
+
step_i = rate_u > 0 ? 1 : -1;
|
|
555
|
+
t_delta_u = Math.abs(1 / rate_u);
|
|
556
|
+
t_next_u = t_enter + (exit_line - g_u) / rate_u;
|
|
548
557
|
}
|
|
549
558
|
|
|
550
559
|
let step_j = 0, t_delta_v = Infinity, t_next_v = Infinity;
|
|
551
|
-
if (rate_v
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
t_delta_v = -1 / rate_v;
|
|
558
|
-
t_next_v = t_enter + (j - g_v) / rate_v;
|
|
560
|
+
if (rate_v !== 0) {
|
|
561
|
+
const exit_line = rate_v > 0 ? j + 1 : j;
|
|
562
|
+
|
|
563
|
+
step_j = rate_v > 0 ? 1 : -1;
|
|
564
|
+
t_delta_v = Math.abs(1 / rate_v);
|
|
565
|
+
t_next_v = t_enter + (exit_line - g_v) / rate_v;
|
|
559
566
|
}
|
|
560
567
|
|
|
561
568
|
const inv_seg_u = 1 / seg_u;
|
|
@@ -607,25 +614,27 @@ export class HeightMapShape3D extends AbstractShape3D {
|
|
|
607
614
|
const Dy = uy * u_lo + vy * v_hi + ny * hD;
|
|
608
615
|
const Dz = uz * u_lo + vz * v_hi + nz * hD;
|
|
609
616
|
|
|
610
|
-
//
|
|
611
|
-
//
|
|
612
|
-
//
|
|
613
|
-
//
|
|
614
|
-
//
|
|
615
|
-
// the
|
|
616
|
-
|
|
617
|
+
// Tested in reverse enumeration order, and that is what decides the
|
|
618
|
+
// tie. The two facets share the D–B diagonal — which runs through the
|
|
619
|
+
// sub-cell's centre, so a ray landing on it is the ordinary case, not a
|
|
620
|
+
// corner one — and a ray that lands on it hits both at one distance.
|
|
621
|
+
// `refine_ray_concave` enumerates (A,D,B) first and lets a later
|
|
622
|
+
// triangle win only by a strictly smaller distance, so the facet it
|
|
623
|
+
// names is (A,D,B). tri3_raycast admits `t <= tMax` and writes hit[3..5]
|
|
624
|
+
// only on a hit, so testing (D,C,B) first and handing (A,D,B) its
|
|
625
|
+
// distance as the budget lets the equal hit overwrite the normal — and
|
|
626
|
+
// the two paths name the same facet.
|
|
627
|
+
const t_dcb = tri3_raycast(
|
|
617
628
|
hit, 3, o_x, o_y, o_z, d_x, d_y, d_z, t_max,
|
|
618
|
-
|
|
629
|
+
Dx, Dy, Dz, Cx, Cy, Cz, Bx, By, Bz
|
|
619
630
|
);
|
|
620
631
|
|
|
621
|
-
const
|
|
622
|
-
hit, 3, o_x, o_y, o_z, d_x, d_y, d_z,
|
|
623
|
-
|
|
632
|
+
const t_adb = tri3_raycast(
|
|
633
|
+
hit, 3, o_x, o_y, o_z, d_x, d_y, d_z, Math.min(t_dcb, t_max),
|
|
634
|
+
Ax, Ay, Az, Dx, Dy, Dz, Bx, By, Bz
|
|
624
635
|
);
|
|
625
636
|
|
|
626
|
-
|
|
627
|
-
best = t_second;
|
|
628
|
-
}
|
|
637
|
+
const best = Math.min(t_adb, t_dcb);
|
|
629
638
|
|
|
630
639
|
if (best !== Infinity) {
|
|
631
640
|
hit[0] = o_x + d_x * best;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../../../src/engine/Engine.js"],"names":[],"mappings":";6BAoCa,OAAO,8BAA8B,EAAE,cAAc;AA6BlE;
|
|
1
|
+
{"version":3,"file":"Engine.d.ts","sourceRoot":"","sources":["../../../src/engine/Engine.js"],"names":[],"mappings":";6BAoCa,OAAO,8BAA8B,EAAE,cAAc;AA6BlE;IA4EI;;;;;;;;;OASG;IACH,sBARW,cAAc;QAEU,aAAa,GAArC,aAAa;QACK,cAAc,GAAhC,OAAO;QACW,WAAW,GAA7B,OAAO;QACW,KAAK,GAAvB,OAAO;OA2OjB;IAhSD;;;OAGG;IACH,UAFU,cAAc,GAAC,IAAI,CAEb;IAEhB;;;OAGG;IACH,OAFU,WAAW,GAAC,IAAI,CAEb;IAEb,qBAA4B;IAE5B;;;;;;;;;OASG;IACH,0BAFU,uBAAuB,CAEe;IAEhD;;;OAGG;IACH,kBAFU,mBAAmB,CAEO;IAEpC;;;;OAIG;IACH,iBAFU,MAAM,CAEM;IAEtB;;;;OAIG;IACH,mBAFU,kBAAkB,CAEa;IAoBrC;;;OAGG;IACH,UAFU,cAAc,CAEA;IAKxB;;;OAGG;IACH,aAFU,gBAAgB,CAEe;IAGzC,yCAAkE;IAK9D,6BAAkC;IAMtC;;;OAGG;IACH,cAFU,aAAa,MAAM,CAAC,CAK5B;IAEF,8CAiCE;IA4BF;;;OAGG;IACH,SAFU,WAAW,CAEoB;IAEzC;;;OAGG;IACH,oCAA0C;IAE1C;;;OAGG;IACH,sCAFU,2BAA2B,CAE+B;IAEpE,yBAAoC;IAGpC;;OAEG;IACH,aAAkB;IAElB;;;OAGG;IACH,SAFU,OAAO,CAEwB;IAGzC,2BAAsC;IAuCtC;;;OAGG;IACH,KAFU,SAAS,CAEO;IAE1B;;;OAGG;IACH,uBAFU,YAAY,CAEqD;IAI3E;;;;MAIC;IA6BD;;;OAGG;IACH,kBAFU,OAAO,CAEW;IAwIhC,wBAgCC;IApBG,oBAAwB;IAsB5B,2BAgCC;IAED,oBAiBC;IAED;;;OAGG;IACH,+CAUC;IAED,eAkDC;IAED;;;OAGG;IACH,sBA0EC;IAqBD;;OAEG;IACH,sBAyCC;IAED,aAEC;IAED;;OAEG;IACH,4BAOC;IAIL;;;OAGG;IACH,mBAFU,OAAO,CAEQ;;CAPxB;+BAzyB8B,+BAA+B;wBAUtC,wBAAwB;0BApBtB,0CAA0C;wCAcN,iDAAiD;oCAG3E,iCAAiC;mBAElD,wBAAwB;+BArBZ,gDAAgD;iCAO9C,+CAA+C;8BAGlD,wBAAwB;6BALzB,yBAAyB;uCAIf,6DAA6D;4BASxE,0BAA0B;+BApBvB,iCAAiC;4CAapB,qDAAqD;AAejG;;GAEG;AAGH;IACI,gDAA2D;IAC3D,0BAAkC;IAClC,iCAAyC;CAC5C;6BAtC4B,sCAAsC;sBA2B7C,mBAAmB;yBAJhB,yBAAyB;8BALpB,kCAAkC;2BADrC,mCAAmC;8BADhC,kCAAkC;sBAZ1C,+BAA+B;+BAKtB,qCAAqC;4BAPxC,kCAAkC;oBAH1C,yBAAyB"}
|
package/src/engine/Engine.js
CHANGED
|
@@ -66,6 +66,14 @@ const FOCUSABLE_SELECTOR = 'input, textarea, select, button, a[href], [contented
|
|
|
66
66
|
class Engine {
|
|
67
67
|
#last_frame_timestamp = 0;
|
|
68
68
|
|
|
69
|
+
/**
|
|
70
|
+
* Simulation time, in seconds, as of the last drawn frame — the anchor {@link Engine#render}
|
|
71
|
+
* measures its delta against. Simulation time, not wall clock, so it does not move while the
|
|
72
|
+
* simulation is paused.
|
|
73
|
+
* @type {number}
|
|
74
|
+
*/
|
|
75
|
+
#last_render_simulation_time = 0;
|
|
76
|
+
|
|
69
77
|
/**
|
|
70
78
|
* Handle of the pending render-loop frame, `-1` when the loop is not running
|
|
71
79
|
* @type {number}
|
|
@@ -629,7 +637,28 @@ class Engine {
|
|
|
629
637
|
|
|
630
638
|
const t0 = performance.now();
|
|
631
639
|
|
|
632
|
-
|
|
640
|
+
/*
|
|
641
|
+
Simulation seconds since the last DRAWN frame — what everything the renderer advances
|
|
642
|
+
steps by: GPU particles, the animation tick, exposure adaptation.
|
|
643
|
+
|
|
644
|
+
Taken from the simulation clock rather than measured here, because that is the clock
|
|
645
|
+
those things belong to: it freezes while the simulation is paused, and it carries the
|
|
646
|
+
scene's speed modifiers (see SceneManager), so a paused game holds its particles still
|
|
647
|
+
and a slowed one slows them. A wall-clock measurement would do neither.
|
|
648
|
+
|
|
649
|
+
`updateElapsedTime` advances the clock and reads it without touching the anchor
|
|
650
|
+
`getDelta` keeps, so this does not consume the delta the entity manager's tick is
|
|
651
|
+
about to be handed.
|
|
652
|
+
|
|
653
|
+
Moved only when a frame is actually drawn, so simulation time that passes while
|
|
654
|
+
rendering is off is caught up by the next frame rather than lost.
|
|
655
|
+
*/
|
|
656
|
+
const simulation_time = this.ticker.clock.updateElapsedTime();
|
|
657
|
+
const time_delta_seconds = simulation_time - this.#last_render_simulation_time;
|
|
658
|
+
|
|
659
|
+
this.#last_render_simulation_time = simulation_time;
|
|
660
|
+
|
|
661
|
+
graphics.render(time_delta_seconds);
|
|
633
662
|
|
|
634
663
|
const t1 = performance.now();
|
|
635
664
|
const frame_time = (t1 - t0) / 1000;
|
|
@@ -694,6 +723,14 @@ class Engine {
|
|
|
694
723
|
|
|
695
724
|
//start simulation
|
|
696
725
|
this.ticker.start({ maxTimeout: 200 });
|
|
726
|
+
|
|
727
|
+
/*
|
|
728
|
+
The render delta's anchor, purged for the same reason `Ticker#start` purges the tick's:
|
|
729
|
+
`Ticker#stop` leaves the clock running, so a stopped engine keeps accruing simulation
|
|
730
|
+
time and a restart would otherwise hand the first drawn frame the whole gap. After
|
|
731
|
+
start(), not before — start() itself advances the clock past that gap.
|
|
732
|
+
*/
|
|
733
|
+
this.#last_render_simulation_time = this.ticker.clock.updateElapsedTime();
|
|
697
734
|
//self.uiController.init(self);
|
|
698
735
|
|
|
699
736
|
//load options
|
|
@@ -351,7 +351,11 @@ export class GraphicsEngine {
|
|
|
351
351
|
/**
|
|
352
352
|
* Draw a frame, if there is anything to draw it with.
|
|
353
353
|
*
|
|
354
|
-
* @param {number} [time_delta_seconds]
|
|
354
|
+
* @param {number} [time_delta_seconds] simulation seconds to advance the frame by — GPU
|
|
355
|
+
* particles, the animation tick and exposure adaptation all step by this. Defaults to zero, so
|
|
356
|
+
* a caller that just wants the current state on screen (a scene transition, a preview) draws it
|
|
357
|
+
* without moving anything. It deliberately does NOT default to a frame's worth of time: doing
|
|
358
|
+
* that silently ran the simulation at a fixed 60 Hz regardless of the real clock.
|
|
355
359
|
* @returns {boolean} whether a frame was submitted
|
|
356
360
|
*/
|
|
357
361
|
render(time_delta_seconds?: number): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphicsEngine.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/GraphicsEngine.js"],"names":[],"mappings":"AA0DA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH;IACI;;;;;OAKG;IACH,gCAEC;IAUD;;;;OAIG;IACH,yBAEC;IA0DG;;;;;;OAMG;IACH,QAFU,kBAAkB,CAEsB;IAElD;QACI;;;;;;;;WAQG;mBADO,MAAM;QAIhB;;;;;WAKG;oBADO,MAAM;QAIhB;;;;WAIG;qBADO,MAAM;QAIhB;;;;;;;WAOG;;QAGH;;;;;WAKG;;MAEN;IAID;;;;;OAKG;IACH,4BAFU,OAAO,CAEyB;IAE1C;;;;;;OAMG;IACH,UAFU,SAAS,CAEY;IAG/B;;OAEG;IACH,YAFU,iBAAiB,GAAC,IAAI,CAEV;IAEtB;;;;;OAKG;IACH,UAFU,OAAO,CAEG;IAEpB;;;;;OAKG;IACH,UAFU,OAAO,CAEG;IAEpB;;OAEG;IACH,YAFU,MAAM,CAEG;IAoBvB;;;;;;;;;;;;OAYG;IACH,mDAEC;IAED;;;;;;;;OAQG;IACH,iBAFW,KAAK,QAoBf;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,6BAFW,YAAY,QAStB;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,yBAHW,eAAe,GACb,eAAe,CAa3B;IAED;;;;;;;;;;OAUG;IACH,uBAHW,UAAU,GACR,MAAM,CAclB;IAED;;;;;;OAMG;IACH,4BAHW,eAAe,GACb,OAAO,CAgBnB;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,qBALW,KAAK,GACH,eAAe,GAAC,IAAI,CAehC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,yBARW,KAAK,UACL,MAAM,SACN,MAAM,UACN,MAAM,GACJ,QAAQ,SAAS,CAAC,CAwD9B;IAED;;;;OAIG;IACH,0BAEC;IAED;;;;;;;;;;OAUG;IACH,SAFa,QAAQ,IAAI,CAAC,CAkDzB;IAED;;;;;;;;;;;;;;;OAeG;IACH,qBAFW,iBAAiB,QAc3B;IAED;;;;;OAKG;IACH,aAiBC;IASD;;;;;;;;OAQG;IACH,8BAHW,OAAO,GAAC,OAAO,UACf,OAAO,GAAC,OAAO,QAQzB;IAED;;;;;;;;;;;;;;;OAeG;IACH,yBALW,MAAM,KACN,MAAM,UACN,OAAO,aACP,OAAO,QAIjB;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,mBAyBC;IAED
|
|
1
|
+
{"version":3,"file":"GraphicsEngine.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/GraphicsEngine.js"],"names":[],"mappings":"AA0DA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH;IACI;;;;;OAKG;IACH,gCAEC;IAUD;;;;OAIG;IACH,yBAEC;IA0DG;;;;;;OAMG;IACH,QAFU,kBAAkB,CAEsB;IAElD;QACI;;;;;;;;WAQG;mBADO,MAAM;QAIhB;;;;;WAKG;oBADO,MAAM;QAIhB;;;;WAIG;qBADO,MAAM;QAIhB;;;;;;;WAOG;;QAGH;;;;;WAKG;;MAEN;IAID;;;;;OAKG;IACH,4BAFU,OAAO,CAEyB;IAE1C;;;;;;OAMG;IACH,UAFU,SAAS,CAEY;IAG/B;;OAEG;IACH,YAFU,iBAAiB,GAAC,IAAI,CAEV;IAEtB;;;;;OAKG;IACH,UAFU,OAAO,CAEG;IAEpB;;;;;OAKG;IACH,UAFU,OAAO,CAEG;IAEpB;;OAEG;IACH,YAFU,MAAM,CAEG;IAoBvB;;;;;;;;;;;;OAYG;IACH,mDAEC;IAED;;;;;;;;OAQG;IACH,iBAFW,KAAK,QAoBf;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,6BAFW,YAAY,QAStB;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,yBAHW,eAAe,GACb,eAAe,CAa3B;IAED;;;;;;;;;;OAUG;IACH,uBAHW,UAAU,GACR,MAAM,CAclB;IAED;;;;;;OAMG;IACH,4BAHW,eAAe,GACb,OAAO,CAgBnB;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,qBALW,KAAK,GACH,eAAe,GAAC,IAAI,CAehC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,yBARW,KAAK,UACL,MAAM,SACN,MAAM,UACN,MAAM,GACJ,QAAQ,SAAS,CAAC,CAwD9B;IAED;;;;OAIG;IACH,0BAEC;IAED;;;;;;;;;;OAUG;IACH,SAFa,QAAQ,IAAI,CAAC,CAkDzB;IAED;;;;;;;;;;;;;;;OAeG;IACH,qBAFW,iBAAiB,QAc3B;IAED;;;;;OAKG;IACH,aAiBC;IASD;;;;;;;;OAQG;IACH,8BAHW,OAAO,GAAC,OAAO,UACf,OAAO,GAAC,OAAO,QAQzB;IAED;;;;;;;;;;;;;;;OAeG;IACH,yBALW,MAAM,KACN,MAAM,UACN,OAAO,aACP,OAAO,QAIjB;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,mBAyBC;IAED;;;;;;;;;OASG;IACH,4BAPW,MAAM,GAKJ,OAAO,CAoDnB;;CACJ;sBAjzBY,OAAO,4BAA4B,EAAE,OAAO;yBAC5C,OAAO,8CAA8C,EAAE,UAAU;8BACjE,OAAO,mDAAmD,EAAE,eAAe;8BAC3E,OAAO,+CAA+C,EAAE,eAAe;2BACvE,OAAO,8CAA8C,EAAE,YAAY;qBACnE,OAAO,kCAAkC,EAAE,MAAM;yBAdrC,kCAAkC;mCAMxB,yBAAyB;mBAZzC,oCAAoC;wBAC/B,4BAA4B;sBAQ9B,kCAAkC;yCAJf,kDAAkD;sBAErE,qCAAqC;0BACjC,0CAA0C"}
|