@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
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Words of frontier one view keeps: one bit per page row of the tier it cuts against.
|
|
3
|
+
*
|
|
4
|
+
* The frontier is the set of pages a view's cut is standing on, and it is a **bitmask over page
|
|
5
|
+
* rows** rather than a list of groups because that is the granularity everything else in the cut
|
|
6
|
+
* already speaks: a page is what `vg_claim_page` claims, what a page visit evaluates whole, and what
|
|
7
|
+
* both directions of the traversal cross. A reseed hands the descent those pages instead of node 0
|
|
8
|
+
* of the root, and CUT_PLAN_2026_09_14 §7.5's coarsen path carries it the rest of the way.
|
|
9
|
+
*
|
|
10
|
+
* It is small. A 4,096-row tier is 128 words — half a kilobyte a view — against the 120–160 KB §5
|
|
11
|
+
* sizes a group-level frontier at, and it needs no allocator, no compaction and no entry format.
|
|
12
|
+
* What it gives up is per-instance keying (§1.1): two instances of one geometry at different
|
|
13
|
+
* distances share one page set, which is a superset of each one's own and therefore correct, but
|
|
14
|
+
* costs the closer instance a few page visits it did not need.
|
|
15
|
+
*
|
|
16
|
+
* @param {number} page_row_capacity
|
|
17
|
+
* @returns {number} words
|
|
18
|
+
*
|
|
19
|
+
* @author Alex Goldring
|
|
20
|
+
* @copyright Company Named Limited (c) 2026
|
|
21
|
+
*/
|
|
22
|
+
export function vgeo_frontier_words(page_row_capacity: number): number;
|
|
23
|
+
//# sourceMappingURL=vgeo_frontier_words.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vgeo_frontier_words.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_frontier_words.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,uDANW,MAAM,GACJ,MAAM,CASlB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { assert } from "../../../../../core/assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Words of frontier one view keeps: one bit per page row of the tier it cuts against.
|
|
5
|
+
*
|
|
6
|
+
* The frontier is the set of pages a view's cut is standing on, and it is a **bitmask over page
|
|
7
|
+
* rows** rather than a list of groups because that is the granularity everything else in the cut
|
|
8
|
+
* already speaks: a page is what `vg_claim_page` claims, what a page visit evaluates whole, and what
|
|
9
|
+
* both directions of the traversal cross. A reseed hands the descent those pages instead of node 0
|
|
10
|
+
* of the root, and CUT_PLAN_2026_09_14 §7.5's coarsen path carries it the rest of the way.
|
|
11
|
+
*
|
|
12
|
+
* It is small. A 4,096-row tier is 128 words — half a kilobyte a view — against the 120–160 KB §5
|
|
13
|
+
* sizes a group-level frontier at, and it needs no allocator, no compaction and no entry format.
|
|
14
|
+
* What it gives up is per-instance keying (§1.1): two instances of one geometry at different
|
|
15
|
+
* distances share one page set, which is a superset of each one's own and therefore correct, but
|
|
16
|
+
* costs the closer instance a few page visits it did not need.
|
|
17
|
+
*
|
|
18
|
+
* @param {number} page_row_capacity
|
|
19
|
+
* @returns {number} words
|
|
20
|
+
*
|
|
21
|
+
* @author Alex Goldring
|
|
22
|
+
* @copyright Company Named Limited (c) 2026
|
|
23
|
+
*/
|
|
24
|
+
export function vgeo_frontier_words(page_row_capacity) {
|
|
25
|
+
assert.isNonNegativeInteger(page_row_capacity, 'page_row_capacity');
|
|
26
|
+
|
|
27
|
+
return Math.ceil(page_row_capacity / 32);
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vgeo_page.worker.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_page.worker.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { vgeo_page_worker_serve } from "../format/read/vgeo_page_worker_serve.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The page-fetch worker: reads, verifies and decodes pages off the main thread.
|
|
5
|
+
*
|
|
6
|
+
* Nothing here but the serve call; the protocol lives with the core in `format/read/` so a spec can
|
|
7
|
+
* run it over a loopback, and this file exists so that {@link make_vgeo_page_worker} has a module
|
|
8
|
+
* to point a `Worker` at.
|
|
9
|
+
*
|
|
10
|
+
* @author Alex Goldring
|
|
11
|
+
* @copyright Company Named Limited (c) 2026
|
|
12
|
+
*/
|
|
13
|
+
vgeo_page_worker_serve(self);
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* How many arena words one page's block runs to.
|
|
3
3
|
*
|
|
4
|
-
* A page is **one allocation** — `[node rows][group rows][cluster rows]`, back to
|
|
5
|
-
* the whole of what installing it costs the arena and the whole of what evicting
|
|
6
|
-
* base inside the block is a count away from the block's own start, which is why
|
|
7
|
-
*
|
|
4
|
+
* A page is **one allocation** — `[node rows][group rows][cluster rows][parent rows]`, back to
|
|
5
|
+
* back — so this is the whole of what installing it costs the arena and the whole of what evicting
|
|
6
|
+
* it returns. Every base inside the block is a count away from the block's own start, which is why
|
|
7
|
+
* a page row carries the counts and nothing can move inside a resident page.
|
|
8
|
+
*
|
|
9
|
+
* The parent rows are last because they are the section a page may not have: a container written
|
|
10
|
+
* before `format_version` 4 carries no upward edge, `parent_entry_count` is zero, and the block is
|
|
11
|
+
* exactly what it was.
|
|
8
12
|
*
|
|
9
13
|
* @param {number} node_count
|
|
10
14
|
* @param {number} group_count
|
|
11
15
|
* @param {number} cluster_count
|
|
16
|
+
* @param {number} [parent_entry_count]
|
|
12
17
|
* @returns {number} words
|
|
13
18
|
*
|
|
14
19
|
* @author Alex Goldring
|
|
15
20
|
* @copyright Company Named Limited (c) 2026
|
|
16
21
|
*/
|
|
17
|
-
export function vgeo_runtime_page_block_words(node_count: number, group_count: number, cluster_count: number): number;
|
|
22
|
+
export function vgeo_runtime_page_block_words(node_count: number, group_count: number, cluster_count: number, parent_entry_count?: number): number;
|
|
18
23
|
//# sourceMappingURL=vgeo_runtime_page_block_words.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_runtime_page_block_words.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vgeo_runtime_page_block_words.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_page_block_words.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,0DATW,MAAM,eACN,MAAM,iBACN,MAAM,uBACN,MAAM,GACJ,MAAM,CAYlB"}
|
|
@@ -1,25 +1,34 @@
|
|
|
1
1
|
import { VGEO_CLUSTER_ROW_WORDS } from "./layout/VGEO_CLUSTER_ROW_WORDS.js";
|
|
2
2
|
import { VGEO_GROUP_ROW_WORDS } from "./layout/VGEO_GROUP_ROW_WORDS.js";
|
|
3
3
|
import { VGEO_NODE_ROW_WORDS } from "./layout/VGEO_NODE_ROW_WORDS.js";
|
|
4
|
+
import { VGEO_PARENT_ROW_WORDS } from "./layout/VGEO_PARENT_ROW_WORDS.js";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* How many arena words one page's block runs to.
|
|
7
8
|
*
|
|
8
|
-
* A page is **one allocation** — `[node rows][group rows][cluster rows]`, back to
|
|
9
|
-
* the whole of what installing it costs the arena and the whole of what evicting
|
|
10
|
-
* base inside the block is a count away from the block's own start, which is why
|
|
11
|
-
*
|
|
9
|
+
* A page is **one allocation** — `[node rows][group rows][cluster rows][parent rows]`, back to
|
|
10
|
+
* back — so this is the whole of what installing it costs the arena and the whole of what evicting
|
|
11
|
+
* it returns. Every base inside the block is a count away from the block's own start, which is why
|
|
12
|
+
* a page row carries the counts and nothing can move inside a resident page.
|
|
13
|
+
*
|
|
14
|
+
* The parent rows are last because they are the section a page may not have: a container written
|
|
15
|
+
* before `format_version` 4 carries no upward edge, `parent_entry_count` is zero, and the block is
|
|
16
|
+
* exactly what it was.
|
|
12
17
|
*
|
|
13
18
|
* @param {number} node_count
|
|
14
19
|
* @param {number} group_count
|
|
15
20
|
* @param {number} cluster_count
|
|
21
|
+
* @param {number} [parent_entry_count]
|
|
16
22
|
* @returns {number} words
|
|
17
23
|
*
|
|
18
24
|
* @author Alex Goldring
|
|
19
25
|
* @copyright Company Named Limited (c) 2026
|
|
20
26
|
*/
|
|
21
|
-
export function vgeo_runtime_page_block_words(
|
|
27
|
+
export function vgeo_runtime_page_block_words(
|
|
28
|
+
node_count, group_count, cluster_count, parent_entry_count = 0
|
|
29
|
+
) {
|
|
22
30
|
return node_count * VGEO_NODE_ROW_WORDS
|
|
23
31
|
+ group_count * VGEO_GROUP_ROW_WORDS
|
|
24
|
-
+ cluster_count * VGEO_CLUSTER_ROW_WORDS
|
|
32
|
+
+ cluster_count * VGEO_CLUSTER_ROW_WORDS
|
|
33
|
+
+ parent_entry_count * VGEO_PARENT_ROW_WORDS;
|
|
25
34
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Lay one decoded page's node, group and
|
|
2
|
+
* Lay one decoded page's node, group, cluster and parent rows into the arena.
|
|
3
3
|
*
|
|
4
4
|
* This is the whole of what a page install writes besides its payload, and it is deliberately a
|
|
5
5
|
* free function over two views rather than a method: the pool calls it against a mapped GPU upload
|
|
@@ -14,6 +14,11 @@
|
|
|
14
14
|
* resolves to a page that is trivially resident — itself — and falls straight through to the
|
|
15
15
|
* selectability question, which is the only one it was ever really asking.
|
|
16
16
|
*
|
|
17
|
+
* The parent rows (format §6.3) get the same treatment for the same reason, off the page's own
|
|
18
|
+
* parent-page table rather than its child table. A page from a container written before
|
|
19
|
+
* `format_version` 4 has no such table, so the section is empty and the page row's
|
|
20
|
+
* `PARENT_ENTRY_COUNT` says zero — which is what a kernel checks, rather than asking a version.
|
|
21
|
+
*
|
|
17
22
|
* Group selectability is **not** written here. It changes after install, as the reader's activation
|
|
18
23
|
* cascades run, and it is the one field of a resident page that moves.
|
|
19
24
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vgeo_runtime_write_page_block.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vgeo_runtime_write_page_block.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_write_page_block.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qDAXW,WAAW,UACX,YAAY,QAEZ,MAAM,mBAEJ,MAAM,CAkIlB"}
|
|
@@ -10,9 +10,11 @@ import { VGEO_NODE_ROW_LEAF_BIT } from "./layout/VGEO_NODE_ROW_LEAF_BIT.js";
|
|
|
10
10
|
import { VGEO_NODE_ROW_OFFSET } from "./layout/VGEO_NODE_ROW_OFFSET.js";
|
|
11
11
|
import { VGEO_NODE_ROW_WORDS } from "./layout/VGEO_NODE_ROW_WORDS.js";
|
|
12
12
|
import { VGEO_NO_CHILD_PAGE } from "./layout/VGEO_NO_CHILD_PAGE.js";
|
|
13
|
+
import { VGEO_PARENT_ROW_OFFSET } from "./layout/VGEO_PARENT_ROW_OFFSET.js";
|
|
14
|
+
import { VGEO_PARENT_ROW_WORDS } from "./layout/VGEO_PARENT_ROW_WORDS.js";
|
|
13
15
|
|
|
14
16
|
/**
|
|
15
|
-
* Lay one decoded page's node, group and
|
|
17
|
+
* Lay one decoded page's node, group, cluster and parent rows into the arena.
|
|
16
18
|
*
|
|
17
19
|
* This is the whole of what a page install writes besides its payload, and it is deliberately a
|
|
18
20
|
* free function over two views rather than a method: the pool calls it against a mapped GPU upload
|
|
@@ -27,6 +29,11 @@ import { VGEO_NO_CHILD_PAGE } from "./layout/VGEO_NO_CHILD_PAGE.js";
|
|
|
27
29
|
* resolves to a page that is trivially resident — itself — and falls straight through to the
|
|
28
30
|
* selectability question, which is the only one it was ever really asking.
|
|
29
31
|
*
|
|
32
|
+
* The parent rows (format §6.3) get the same treatment for the same reason, off the page's own
|
|
33
|
+
* parent-page table rather than its child table. A page from a container written before
|
|
34
|
+
* `format_version` 4 has no such table, so the section is empty and the page row's
|
|
35
|
+
* `PARENT_ENTRY_COUNT` says zero — which is what a kernel checks, rather than asking a version.
|
|
36
|
+
*
|
|
30
37
|
* Group selectability is **not** written here. It changes after install, as the reader's activation
|
|
31
38
|
* cascades run, and it is the one field of a resident page that moves.
|
|
32
39
|
*
|
|
@@ -51,6 +58,7 @@ export function vgeo_runtime_write_page_block(words, floats, base, page) {
|
|
|
51
58
|
|
|
52
59
|
const group_base = base + node_count * VGEO_NODE_ROW_WORDS;
|
|
53
60
|
const cluster_base = group_base + group_count * VGEO_GROUP_ROW_WORDS;
|
|
61
|
+
const parent_base = cluster_base + cluster_count * VGEO_CLUSTER_ROW_WORDS;
|
|
54
62
|
|
|
55
63
|
let broken_child_refs = 0;
|
|
56
64
|
|
|
@@ -84,6 +92,7 @@ export function vgeo_runtime_write_page_block(words, floats, base, page) {
|
|
|
84
92
|
tier's answer costs.
|
|
85
93
|
*/
|
|
86
94
|
words[row + VGEO_GROUP_ROW_OFFSET.PARENT_COUNT] = page.group_parent_count[group];
|
|
95
|
+
words[row + VGEO_GROUP_ROW_OFFSET.PARENT_FIRST] = page.group_parent_first[group] ?? 0;
|
|
87
96
|
|
|
88
97
|
// not selectable until activation says so; a page installs drawing nothing. Any other
|
|
89
98
|
// default draws a group before the ancestors it hangs off have arrived.
|
|
@@ -134,5 +143,33 @@ export function vgeo_runtime_write_page_block(words, floats, base, page) {
|
|
|
134
143
|
words[row + VGEO_CLUSTER_ROW_OFFSET.CHILD_REF] = child_ref;
|
|
135
144
|
}
|
|
136
145
|
|
|
146
|
+
for (let entry = 0; entry < page.parent_ref.length; entry++) {
|
|
147
|
+
const row = parent_base + entry * VGEO_PARENT_ROW_WORDS;
|
|
148
|
+
|
|
149
|
+
const parent_ref = page.parent_ref[entry];
|
|
150
|
+
|
|
151
|
+
/*
|
|
152
|
+
A parent_ref outside the page's parent-page table is the upward twin of a broken child_ref
|
|
153
|
+
and is counted with it: format §11.16 forbids it, validation is off by default, and the
|
|
154
|
+
cluster it would have named does not exist. Pointing it at this page would be worse than
|
|
155
|
+
admitting there is nothing there — VGEO_NO_CHILD_PAGE never resolves, so a walk up stops
|
|
156
|
+
and the fallback re-descends, which is correct rather than merely safe.
|
|
157
|
+
*/
|
|
158
|
+
let parent_page_index;
|
|
159
|
+
|
|
160
|
+
if (parent_ref === VGEO_SAME_PAGE) {
|
|
161
|
+
parent_page_index = page.index;
|
|
162
|
+
} else if (parent_ref < page.parent_page_index.length) {
|
|
163
|
+
parent_page_index = page.parent_page_index[parent_ref];
|
|
164
|
+
} else {
|
|
165
|
+
parent_page_index = VGEO_NO_CHILD_PAGE;
|
|
166
|
+
|
|
167
|
+
broken_child_refs++;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
words[row + VGEO_PARENT_ROW_OFFSET.PAGE_INDEX] = parent_page_index;
|
|
171
|
+
words[row + VGEO_PARENT_ROW_OFFSET.CLUSTER] = page.parent_cluster[entry];
|
|
172
|
+
}
|
|
173
|
+
|
|
137
174
|
return broken_child_refs;
|
|
138
175
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_sharc_evict.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_sharc_evict.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js"],"names":[],"mappings":"AAmGA,+CAIG;8BAnG2B,kCAAkC"}
|
|
@@ -26,10 +26,11 @@ const PUSH_CONSTANTS = WebGPUStruct.from({
|
|
|
26
26
|
capacity: u32,
|
|
27
27
|
});
|
|
28
28
|
|
|
29
|
-
//
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
// TODO(chrome-153): uniform, not immediate — Dawn 153 overwrites immediate data on
|
|
30
|
+
// dispatchWorkgroupsIndirect, so this reads garbage. The graph pass turns the plain
|
|
31
|
+
// value into a transient uniform, so no call site changes.
|
|
32
32
|
resources.createGroup()
|
|
33
|
+
.addUniform("settings", PUSH_CONSTANTS)
|
|
33
34
|
.addStorageBuffer('hashMapData', HASH_MAP_DATA_STRUCT, true)
|
|
34
35
|
.addStorageBuffer("voxelData", WebGPUArray.from(vec4u))
|
|
35
36
|
.addStorageBuffer('evictionRequests', EVICTION_STRUCT);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load_gltf.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/loader/gltf/load_gltf.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"load_gltf.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/loader/gltf/load_gltf.js"],"names":[],"mappings":"AAmIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,sDATW,YAAY,aAGZ,MAAM,iBACN,MAAM,kBACN;IAAC,CAAC,EAAC,MAAM,CAAC;IAAC,CAAC,EAAC,MAAM,CAAC;IAAC,CAAC,EAAC,MAAM,CAAC;IAAC,CAAC,EAAC,MAAM,CAAA;CAAC,QAgDlD;AAuBD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,+BAdW,MAAM;IAEgB,YAAY;IAGN,KAAK;IACY,OAAO,GAApD,IAAI,MAAM,EAAE,IAAI,GAAC,IAAI,GAAC,WAAW,CAAC;IAGF,eAAe,GAA/C,qBAAqB;IAGpB,QAAQ,WAAW,CAAC,CA8zB/B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wCARW,MAAM;IAEgB,YAAY;IACN,KAAK;IACY,OAAO,GAApD,IAAI,MAAM,EAAE,IAAI,GAAC,IAAI,GAAC,WAAW,CAAC;IACF,eAAe,GAA/C,qBAAqB;IACnB,QAAQ,QAAQ,CAAC,CAU7B;4BApkC2B,mBAAmB;yBAStB,gBAAgB"}
|
|
@@ -9,7 +9,6 @@ import { clamp01 } from "../../../../core/math/clamp01.js";
|
|
|
9
9
|
import { computeObjectHash } from "../../../../core/math/hash/computeObjectHash.js";
|
|
10
10
|
import { inverseLerp } from "../../../../core/math/inverseLerp.js";
|
|
11
11
|
import { objectDeepEquals } from "../../../../core/model/object/objectDeepEquals.js";
|
|
12
|
-
import { number_format_by_thousands } from "../../../../core/primitives/numbers/number_format_by_thousands.js";
|
|
13
12
|
import { AnimationInterpolationKind } from "../../../../engine/animation/clip/AnimationInterpolationKind.js";
|
|
14
13
|
import { curve_from_track_data } from "../../../../engine/animation/clip/curve_from_track_data.js";
|
|
15
14
|
import { AnimationCurve } from "../../../../engine/animation/curve/AnimationCurve.js";
|
|
@@ -35,7 +34,6 @@ import { ShadeImage } from "../../texture/source/ShadeImage.js";
|
|
|
35
34
|
import { SceneBundle } from "../SceneBundle.js";
|
|
36
35
|
import { SceneNode } from "../SceneNode.js";
|
|
37
36
|
import { coalesce_array_duplicates } from "../../../../format/scene/gltf/coalesce_array_duplicates.js";
|
|
38
|
-
import { fix_up_material_sides } from "./fix_up_material_sides.js";
|
|
39
37
|
import { GLTF_COMPONENT_TYPE } from "../../../../format/scene/gltf/gltf_component_type.js";
|
|
40
38
|
import { gltf_create_material } from "./gltf_create_material.js";
|
|
41
39
|
import { gltf_create_texture } from "./gltf_create_texture.js";
|
|
@@ -1092,25 +1090,8 @@ export function load_gltf(url, { assetManager, scope, fileMap, texture_support }
|
|
|
1092
1090
|
return bundle;
|
|
1093
1091
|
}
|
|
1094
1092
|
|
|
1095
|
-
/**
|
|
1096
|
-
* @param {SceneBundle} bundle
|
|
1097
|
-
*/
|
|
1098
|
-
function fix_scene_material_sidedness(bundle) {
|
|
1099
|
-
const meshes = bundle.nodes.filter(node => node.geometry !== null);
|
|
1100
|
-
|
|
1101
|
-
const { geometries_modified: fixed_count, primitives_delta } = fix_up_material_sides(meshes);
|
|
1102
|
-
|
|
1103
|
-
if (fixed_count > 0) {
|
|
1104
|
-
console.warn(`Fixed ${fixed_count} geometries in accordance with material sidedness. Primitives added: ${number_format_by_thousands(primitives_delta)}`);
|
|
1105
|
-
}
|
|
1106
|
-
|
|
1107
|
-
return bundle;
|
|
1108
|
-
}
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
1093
|
return load_gltf_document(url, { assetManager, scope, fileMap, texture_support })
|
|
1112
1094
|
.then(process)
|
|
1113
|
-
// .then(fix_scene_material_sidedness)
|
|
1114
1095
|
// .then(prepare_lightmap)
|
|
1115
1096
|
;
|
|
1116
1097
|
}
|
|
@@ -13,7 +13,7 @@ export class TinyGltf {
|
|
|
13
13
|
* @readonly
|
|
14
14
|
* @type {TextureFormat}
|
|
15
15
|
*/
|
|
16
|
-
static readonly "__#
|
|
16
|
+
static readonly "__#247@#UNCOMPRESSED_TARGET": TextureFormat;
|
|
17
17
|
/**
|
|
18
18
|
* @param {AssetManager} assetManager
|
|
19
19
|
* @param {AssetRequestScope} [scope]
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a {@link ShadeDrawSide} means once `Back` stopped being a pipeline state of its own.
|
|
3
|
+
*
|
|
4
|
+
* A back-sided material is a front-sided one drawn with its winding reversed: the vertex shader
|
|
5
|
+
* emits each triangle's corners in the opposite order and the fixed-function rasterizer, still
|
|
6
|
+
* culling back faces, keeps the surface's back. That is what lets both share a bucket — see
|
|
7
|
+
* `chunk_rasterization_material_bucket` — and it is the same mechanism a reflected instance uses,
|
|
8
|
+
* so the two compose by exclusive-or.
|
|
9
|
+
*
|
|
10
|
+
* @type {CodeChunk}
|
|
11
|
+
*/
|
|
12
|
+
export const chunk_material_draw_side: CodeChunk;
|
|
13
|
+
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
14
|
+
//# sourceMappingURL=chunk_material_draw_side.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_material_draw_side.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/material/chunk_material_draw_side.js"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AACH,uCAFU,SAAS,CAqBb;0BAjCoB,iCAAiC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
2
|
+
import { ShadeDrawSide } from "./ShadeDrawSide.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* What a {@link ShadeDrawSide} means once `Back` stopped being a pipeline state of its own.
|
|
6
|
+
*
|
|
7
|
+
* A back-sided material is a front-sided one drawn with its winding reversed: the vertex shader
|
|
8
|
+
* emits each triangle's corners in the opposite order and the fixed-function rasterizer, still
|
|
9
|
+
* culling back faces, keeps the surface's back. That is what lets both share a bucket — see
|
|
10
|
+
* `chunk_rasterization_material_bucket` — and it is the same mechanism a reflected instance uses,
|
|
11
|
+
* so the two compose by exclusive-or.
|
|
12
|
+
*
|
|
13
|
+
* @type {CodeChunk}
|
|
14
|
+
*/
|
|
15
|
+
export const chunk_material_draw_side = CodeChunk.from(
|
|
16
|
+
//language=WGSL
|
|
17
|
+
`
|
|
18
|
+
/**
|
|
19
|
+
* Whether the material asks for the back face, and therefore for reversed winding.
|
|
20
|
+
*/
|
|
21
|
+
fn material_draws_back_side( draw_side: u32 ) -> bool{
|
|
22
|
+
return draw_side == ${ShadeDrawSide.Back}u;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Whether the fragment is looking at the front of the surface.
|
|
27
|
+
*
|
|
28
|
+
* Not \`front_facing\`: that is the rasterizer's answer about the winding the vertex shader
|
|
29
|
+
* emitted, and a back-sided material emitted it reversed on purpose.
|
|
30
|
+
*/
|
|
31
|
+
fn material_fragment_faces_front( front_facing: bool, draw_side: u32 ) -> bool{
|
|
32
|
+
return front_facing != material_draws_back_side(draw_side);
|
|
33
|
+
}
|
|
34
|
+
`, [])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fragment_gbuffer.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/standard/fragment_gbuffer.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fragment_gbuffer.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/standard/fragment_gbuffer.js"],"names":[],"mappings":"AA8EA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IAR6B,OAAO,GAAzB,MAAM;IACW,GAAG,EAApB,MAAM;IACW,MAAM,EAAvB,MAAM;IACW,OAAO,EAAxB,MAAM;IACW,QAAQ,EAAzB,MAAM;kBACN,SAAS,EAAE,GACT,SAAS,CAwOrB;AAvRD,oEAA2E;AAI3E,oIAEG;AASH,sIAEG;AA+QH,8CAIE;0BAhTwB,oCAAoC;4CAClB,sDAAsD;iCACjE,kCAAkC"}
|
|
@@ -6,6 +6,7 @@ import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
|
|
|
6
6
|
import { GEOMETRY_ATTRIBUTE_DATA_TYPE } from "../../geometry/GEOMETRY_ATTRIBUTE_DATA_TYPE.js";
|
|
7
7
|
import { GEOMETRY_METADATA_STRUCT } from "../../geometry/GEOMETRY_METADATA_STRUCT.js";
|
|
8
8
|
import { MESHLET_METADATA_STRUCT } from "../../geometry/meshlet/encoding/MESHLET_METADATA_STRUCT.js";
|
|
9
|
+
import { chunk_node3d_flags } from "../../scene/chunk_node3d_flags.js";
|
|
9
10
|
import { chunk_scene_database_access } from "../../scene/chunk_scene_database_access.js";
|
|
10
11
|
import { RENDER_GLOBAL_MIP_BIAS } from "../../postprocess/taa/RENDER_GLOBAL_MIP_BIAS.js";
|
|
11
12
|
import { chunk_barycentric_full } from "../../shader/chunk/geometry/triangle/chunk_barycentric_full.js";
|
|
@@ -225,7 +226,12 @@ fn main(
|
|
|
225
226
|
);
|
|
226
227
|
|
|
227
228
|
// Get tangent handedness from the provoking vertex (0).
|
|
228
|
-
|
|
229
|
+
// a reflection changes the tangent frame's handedness — see NODE3D_GLOBAL_FLAG_MIRRORED
|
|
230
|
+
let geometry_tangent_handedness = select(
|
|
231
|
+
vertex_0.tangent.w,
|
|
232
|
+
-vertex_0.tangent.w,
|
|
233
|
+
node3d_global_is_mirrored(node)
|
|
234
|
+
);
|
|
229
235
|
|
|
230
236
|
let geometry_color = interpolate_attribute_3f32(
|
|
231
237
|
vertex_0.color,
|
|
@@ -316,6 +322,7 @@ fn main(
|
|
|
316
322
|
chunk_rgbe9995_encode,
|
|
317
323
|
chunk_dither_color_8bit_triangle_noise,
|
|
318
324
|
chunk_scene_database_access,
|
|
325
|
+
chunk_node3d_flags,
|
|
319
326
|
|
|
320
327
|
...extra_chunks,
|
|
321
328
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_particle_emit.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/shaders/shader_particle_emit.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;GAGG;AACH,kDAA8E;AAE9E;;;;;;;;GAQG;AACH,4BAFU,YAAY,CAOK;
|
|
1
|
+
{"version":3,"file":"shader_particle_emit.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/shaders/shader_particle_emit.js"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;GAGG;AACH,kDAA8E;AAE9E;;;;;;;;GAQG;AACH,4BAFU,YAAY,CAOK;AAuD3B,iDAIG;6BA3G0B,mCAAmC;8BAGlC,+BAA+B"}
|
|
@@ -52,8 +52,9 @@ export const EMIT_SETTINGS = WebGPUStruct.from({
|
|
|
52
52
|
|
|
53
53
|
const resources = new ShaderResourceSetDescriptor();
|
|
54
54
|
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
// TODO(chrome-153): uniform, not immediate — Dawn 153 overwrites immediate data on
|
|
56
|
+
// dispatchWorkgroupsIndirect, so this reads garbage. The graph pass turns the plain
|
|
57
|
+
// value into a transient uniform, so no call site changes.
|
|
57
58
|
resources.createGroup()
|
|
58
59
|
.addStorageBuffer("scene_database", WebGPUArray.u32, false)
|
|
59
60
|
.addStorageBuffer("emitter_database", WebGPUArray.u32, false)
|
|
@@ -62,7 +63,9 @@ resources.createGroup()
|
|
|
62
63
|
.addStorageBuffer("pool", WebGPUArray.u32, true)
|
|
63
64
|
.addStorageBuffer("alive_out", WebGPUArray.u32, true)
|
|
64
65
|
.addStorageBuffer("dead", WebGPUArray.u32, true)
|
|
65
|
-
.addStorageBuffer("counters", WebGPUArray.from(atomic_u32), true)
|
|
66
|
+
.addStorageBuffer("counters", WebGPUArray.from(atomic_u32), true)
|
|
67
|
+
// last in the group, so the storage bindings keep the indices the specs read by
|
|
68
|
+
.addUniform('settings', EMIT_SETTINGS);
|
|
66
69
|
|
|
67
70
|
const body = CodeChunk.from(
|
|
68
71
|
/* language=wgsl */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_particle_simulate.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/shaders/shader_particle_simulate.js"],"names":[],"mappings":";AAuDA;;;;;GAKG;AACH,gCAFU,YAAY,CAMS;
|
|
1
|
+
{"version":3,"file":"shader_particle_simulate.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/shaders/shader_particle_simulate.js"],"names":[],"mappings":";AAuDA;;;;;GAKG;AACH,gCAFU,YAAY,CAMS;AAyD/B,qDAIG;iDAvH8C,yBAAyB;6BAJ7C,mCAAmC;8BAClC,+BAA+B"}
|
|
@@ -67,8 +67,9 @@ export const SIMULATE_SETTINGS = WebGPUStruct.from({
|
|
|
67
67
|
|
|
68
68
|
const resources = new ShaderResourceSetDescriptor();
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
// TODO(chrome-153): uniform, not immediate — Dawn 153 overwrites immediate data on
|
|
71
|
+
// dispatchWorkgroupsIndirect, so this reads garbage. The graph pass turns the plain
|
|
72
|
+
// value into a transient uniform, so no call site changes.
|
|
72
73
|
resources.createGroup()
|
|
73
74
|
.addStorageBuffer("scene_database", WebGPUArray.u32, false)
|
|
74
75
|
.addStorageBuffer("emitter_database", WebGPUArray.u32, false)
|
|
@@ -77,7 +78,9 @@ resources.createGroup()
|
|
|
77
78
|
.addStorageBuffer("sim_list", WebGPUArray.u32, false)
|
|
78
79
|
.addStorageBuffer("alive_out", WebGPUArray.u32, true)
|
|
79
80
|
.addStorageBuffer("dead", WebGPUArray.u32, true)
|
|
80
|
-
.addStorageBuffer("counters", WebGPUArray.from(atomic_u32), true)
|
|
81
|
+
.addStorageBuffer("counters", WebGPUArray.from(atomic_u32), true)
|
|
82
|
+
// last in the group, so the storage bindings keep the indices the specs read by
|
|
83
|
+
.addUniform('settings', SIMULATE_SETTINGS);
|
|
81
84
|
|
|
82
85
|
|
|
83
86
|
const body = CodeChunk.from(/* language=wgsl */ `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_sample_material_data.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_sample_material_data.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js"],"names":[],"mappings":"AAiCA;;;GAGG;AACH,0CAFU,SAAS,CA8FlB;AAED,mDA+HC;0BAxOyB,oCAAoC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { chunk_compute_normal_matrix_from_m4 } from "../../shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.js";
|
|
2
|
+
import {
|
|
3
|
+
chunk_mat4_linear_determinant
|
|
4
|
+
} from "../../shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.js";
|
|
2
5
|
import { chunk_decode_tangent_normal } from "../../shader/chunk/geometry/normal/chunk_decode_tangent_normal.js";
|
|
3
6
|
import { chunk_F_Hauber } from "../../shader/chunk/brdf/fresnel/chunk_F_Hauber.js";
|
|
4
7
|
import {
|
|
@@ -201,7 +204,15 @@ fn sample_material_data(
|
|
|
201
204
|
world_face_normal = -world_face_normal;
|
|
202
205
|
}
|
|
203
206
|
|
|
204
|
-
|
|
207
|
+
// a reflection changes the tangent frame's handedness — see NODE3D_GLOBAL_FLAG_MIRRORED.
|
|
208
|
+
// No node here: the tracer is handed a matrix, so the sign comes off the matrix.
|
|
209
|
+
let tangent_handedness = select(
|
|
210
|
+
geometry_tangent.w,
|
|
211
|
+
-geometry_tangent.w,
|
|
212
|
+
mat4_linear_determinant(instance_transform) < 0.0
|
|
213
|
+
);
|
|
214
|
+
|
|
215
|
+
let world_tangent_frame = build_orthonormal_matrix_nt(world_vertex_normal, vec4(world_tangent, tangent_handedness));
|
|
205
216
|
|
|
206
217
|
var normal_sample = decode_tangent_normal(indirect_sample_texture(material.texture_normal, material.sampler_normal, uv));
|
|
207
218
|
|
|
@@ -238,6 +249,7 @@ fn sample_material_data(
|
|
|
238
249
|
chunk_interpolate_attribute_3f32,
|
|
239
250
|
chunk_interpolate_attribute_4f32,
|
|
240
251
|
chunk_compute_normal_matrix_from_m4,
|
|
252
|
+
chunk_mat4_linear_determinant,
|
|
241
253
|
chunk_build_orthonormal_matrix_nt,
|
|
242
254
|
chunk_decode_tangent_normal,
|
|
243
255
|
chunk_compute_triangle_face_normal,
|
|
@@ -53,7 +53,7 @@ export class NSS {
|
|
|
53
53
|
* @returns {number}
|
|
54
54
|
*/
|
|
55
55
|
static recommended_jitter_sequence_size(upscale_ratio: number): number;
|
|
56
|
-
static "__#
|
|
56
|
+
static "__#180@#preprocess_tensor_descriptor"(render_w: any, render_h: any): TextureResourceDescriptor;
|
|
57
57
|
/**
|
|
58
58
|
* @param {GraphicsContext} graphics
|
|
59
59
|
*/
|
|
@@ -9,9 +9,14 @@ export function construct_primitive_state(draw_mode: ShadeDrawMode, side: ShadeD
|
|
|
9
9
|
/**
|
|
10
10
|
* Named cull-mode lookup tables, keyed by {@link ShadeDrawSide }.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* `Front` and `Back` map to the same cull mode, because the winding they differ by is the
|
|
13
|
+
* vertex shader's to reverse — see `chunk_triangle_list_reverse_winding`. That is what lets
|
|
14
|
+
* them share a bucket, and it is why nothing here needs a fourth entry for the *instance's*
|
|
15
|
+
* handedness either.
|
|
16
|
+
*
|
|
17
|
+
* - `Standard` is the main-pass mapping: a one-sided material renders the face its winding
|
|
18
|
+
* presents (cull back), `Double` renders both.
|
|
19
|
+
* - `Reversed` culls the other way, so the *back* face is what gets drawn. This is the
|
|
15
20
|
* standard "back-face shadow casting" / "front-face culling for shadow casters"
|
|
16
21
|
* technique — shadow callers select this policy so the surface written into the shadow
|
|
17
22
|
* map sits behind the lit surface, eliminating self-shadow acne on the lit side and
|
|
@@ -21,12 +26,21 @@ export function construct_primitive_state(draw_mode: ShadeDrawMode, side: ShadeD
|
|
|
21
26
|
export type CullPolicy = Readonly<Record<number, GPUCullMode>>;
|
|
22
27
|
export namespace CullPolicy {
|
|
23
28
|
let Standard: Readonly<{
|
|
24
|
-
[x: number]: "none" | "back"
|
|
29
|
+
[x: number]: "none" | "back";
|
|
25
30
|
}>;
|
|
26
31
|
let Reversed: Readonly<{
|
|
27
|
-
[x: number]: "none" | "
|
|
32
|
+
[x: number]: "none" | "front";
|
|
28
33
|
}>;
|
|
29
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* One {@link ShadeDrawSide} per rasterization bucket — the sides that still differ once `Back`
|
|
37
|
+
* is drawn as a reversed `Front`. Callers that enumerate buckets iterate this rather than the
|
|
38
|
+
* enum, so a `Back`-sided material is picked up by the `Front` pass rather than by a pass of
|
|
39
|
+
* its own that would repeat the whole expansion chain for it.
|
|
40
|
+
*
|
|
41
|
+
* @type {ReadonlyArray<ShadeDrawSide>}
|
|
42
|
+
*/
|
|
43
|
+
export const RASTERIZATION_BUCKET_SIDES: ReadonlyArray<ShadeDrawSide>;
|
|
30
44
|
import { ShadeDrawMode } from "../../material/ShadeDrawMode.js";
|
|
31
45
|
import { ShadeDrawSide } from "../../material/ShadeDrawSide.js";
|
|
32
46
|
import { PrimitiveState } from "../../../descriptor/pipeline/render/PrimitiveState.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"construct_primitive_state.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/construct_primitive_state.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"construct_primitive_state.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/construct_primitive_state.js"],"names":[],"mappings":"AAsDA;;;;;;GAMG;AACH,qDALW,aAAa,QACb,aAAa,gBACb,SAAS,OAAO,MAAM,cAAc,CAAC,GACnC,cAAc,CAgB1B;;;;;;;;;;;;;;;;;;yBAjDS,SAAS,OAAO,MAAM,cAAc,CAAC;;;;;;;;;AAe/C;;;;;;;GAOG;AACH,yCAFU,cAAc,aAAa,CAAC,CAKnC;8BAnD2B,iCAAiC;8BACjC,iCAAiC;+BAFhC,uDAAuD"}
|