@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
|
@@ -1,55 +1,63 @@
|
|
|
1
|
-
import { assert } from "../../../../../core/assert.js";
|
|
2
|
-
import { ShadeDrawMode } from "../../../material/ShadeDrawMode.js";
|
|
3
|
-
import { ShadeDrawSide } from "../../../material/ShadeDrawSide.js";
|
|
4
|
-
import { TransparencyMode } from "../../../material/TransparencyMode.js";
|
|
5
|
-
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
6
|
-
import {
|
|
7
|
-
RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE,
|
|
8
|
-
RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
//
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
1
|
+
import { assert } from "../../../../../core/assert.js";
|
|
2
|
+
import { ShadeDrawMode } from "../../../material/ShadeDrawMode.js";
|
|
3
|
+
import { ShadeDrawSide } from "../../../material/ShadeDrawSide.js";
|
|
4
|
+
import { TransparencyMode } from "../../../material/TransparencyMode.js";
|
|
5
|
+
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
6
|
+
import {
|
|
7
|
+
RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE,
|
|
8
|
+
RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE
|
|
9
|
+
} from "./RASTERIZATION_BUCKET_LIMIT.js";
|
|
10
|
+
|
|
11
|
+
// A field of N bits is masked with (1 << N) - 1, not N + 1 (the two coincide only at N == 2,
|
|
12
|
+
// which is the value both of these enums happen to have today).
|
|
13
|
+
const mask_alpha = (1 << RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE) - 1;
|
|
14
|
+
const shift_alpha = 0;
|
|
15
|
+
|
|
16
|
+
const mask_primitive = (1 << RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE) - 1;
|
|
17
|
+
const shift_primitive = shift_alpha + RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE;
|
|
18
|
+
|
|
19
|
+
// the last field carries no mask: it is a boolean by construction, not an enum being narrowed
|
|
20
|
+
const shift_double_sided = shift_primitive + RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* A bucket is a pipeline state, and the third field is the only thing a {@link ShadeDrawSide}
|
|
24
|
+
* still says about one: whether it culls at all. `Front` and `Back` land in the same bucket —
|
|
25
|
+
* a back-sided material is a front-sided one whose winding the vertex shader reverses — so a
|
|
26
|
+
* scene that mixes them draws in one pass, through one expansion chain.
|
|
27
|
+
*
|
|
28
|
+
* @see TransparencyMode
|
|
29
|
+
* @see ShadeDrawMode
|
|
30
|
+
* @see rasterization_material_bucket
|
|
31
|
+
* @type {CodeChunk}
|
|
32
|
+
*/
|
|
33
|
+
export const chunk_rasterization_material_bucket = CodeChunk.from(
|
|
34
|
+
//language=WGSL
|
|
35
|
+
`
|
|
36
|
+
fn rasterization_material_bucket( alpha_mode: u32, draw_mode: u32, side: u32 ) -> u32{
|
|
37
|
+
let double_sided = u32( side == ${ShadeDrawSide.Double}u );
|
|
38
|
+
|
|
39
|
+
return ( ( alpha_mode & ${mask_alpha} ) << ${shift_alpha} )
|
|
40
|
+
| ( ( draw_mode & ${mask_primitive} ) << ${shift_primitive} )
|
|
41
|
+
| ( double_sided << ${shift_double_sided} );
|
|
42
|
+
}
|
|
43
|
+
`
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @see chunk_rasterization_material_bucket
|
|
48
|
+
* @param {number|TransparencyMode} alpha_mode
|
|
49
|
+
* @param {number|ShadeDrawMode} draw_mode
|
|
50
|
+
* @param {number|ShadeDrawSide} side
|
|
51
|
+
* @return {number}
|
|
52
|
+
*/
|
|
53
|
+
export function rasterization_material_bucket(alpha_mode, draw_mode, side) {
|
|
54
|
+
assert.enum(alpha_mode, TransparencyMode);
|
|
55
|
+
assert.enum(draw_mode, ShadeDrawMode);
|
|
56
|
+
assert.enum(side, ShadeDrawSide);
|
|
57
|
+
|
|
58
|
+
const double_sided = side === ShadeDrawSide.Double ? 1 : 0;
|
|
59
|
+
|
|
60
|
+
return ((alpha_mode & mask_alpha) << shift_alpha)
|
|
61
|
+
| ((draw_mode & mask_primitive) << shift_primitive)
|
|
62
|
+
| (double_sided << shift_double_sided);
|
|
63
|
+
}
|
package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_meshlets_extract_bucket.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_meshlets_extract_bucket.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js"],"names":[],"mappings":"AAgEA,2DAIG;8BA9D2B,qCAAqC"}
|
package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js
CHANGED
|
@@ -13,11 +13,10 @@ import {
|
|
|
13
13
|
|
|
14
14
|
const resources = new ShaderResourceSetDescriptor();
|
|
15
15
|
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
resources.setImmediate("bucket_index", U32_CONTAINER_STRUCT);
|
|
19
|
-
|
|
16
|
+
// TODO(chrome-153): uniform, not immediate — Dawn 153 overwrites immediate data on
|
|
17
|
+
// dispatchWorkgroupsIndirect, so this reads 65535 and culls everything. Revert 22893f0a7.
|
|
20
18
|
resources.createGroup()
|
|
19
|
+
.addUniform("bucket_index", U32_CONTAINER_STRUCT)
|
|
21
20
|
.addStorageBuffer("bucket_data", WebGPUStruct.from({
|
|
22
21
|
headers: RASTERIZATION_BUCKET_SORT_OUTPUT_HEADER_STRUCT_READ,
|
|
23
22
|
elements: WebGPUArray.from(MESHLET_DEFINITION_STRUCT)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_meshlets_rasterize.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;GAaG;AACH;IAX+B,KAAK;IACD,IAAI;IACZ,cAAc,EAA9B,MAAM;IACU,KAAK,EAArB,MAAM;IACwB,eAAe;IAC1B,aAAa,GAAhC,MAAM,EAAE;IACW,QAAQ,GAA3B,MAAM,EAAE;IACiB,eAAe;IACtB,aAAa,GAA/B,OAAO;IACN,CAAC,KAAK,EAAC,MAAM,EAAE,KAAK,EAAC,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"graph_meshlets_rasterize.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;GAaG;AACH;IAX+B,KAAK;IACD,IAAI;IACZ,cAAc,EAA9B,MAAM;IACU,KAAK,EAArB,MAAM;IACwB,eAAe;IAC1B,aAAa,GAAhC,MAAM,EAAE;IACW,QAAQ,GAA3B,MAAM,EAAE;IACiB,eAAe;IACtB,aAAa,GAA/B,OAAO;IACN,CAAC,KAAK,EAAC,MAAM,EAAE,KAAK,EAAC,MAAM,EAAE,CAAC,CA2IzC"}
|
|
@@ -117,6 +117,7 @@ export function graph_meshlets_rasterize({
|
|
|
117
117
|
meshlet_data: scene.geometries.meshlets.buffer_data,
|
|
118
118
|
meshlet_metadata: scene.geometries.meshlets.buffer_metadata,
|
|
119
119
|
geometries: geometry_context.buffer_metadata,
|
|
120
|
+
materials: scene.materials.metadata_table.buffer,
|
|
120
121
|
meshlets: input_meshlets,
|
|
121
122
|
}
|
|
122
123
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pass_mesh_cull.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pass_mesh_cull.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/expand/pass0/pass_mesh_cull.js"],"names":[],"mappings":"AAyBA;;;;;GAKG;AACH,qCAJW,qBAAqB,0EAmD/B;AAtED;IACI,yBAAqB;IACrB,4BAAwB;IAExB,YAAQ;IAER;;OAEG;IACH,yBAAQ;IAER,qBAAiB;IACjB,gBAAY;IAEZ,gBAAY;CACf"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { assert } from "../../../../../core/assert.js";
|
|
1
2
|
import { u32 } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
3
|
import { shader_hzb_mesh_filter_2way } from "../../cull/hzb/shader_hzb_mesh_filter_2way.js"
|
|
3
4
|
import { U32_CONTAINER_STRUCT } from "../../../shader/type/U32_CONTAINER_STRUCT.js";
|
|
@@ -44,6 +45,7 @@ export function pass_mesh_cull(data, resources, context) {
|
|
|
44
45
|
|
|
45
46
|
const bucket_id = data.bucket_index;
|
|
46
47
|
|
|
48
|
+
assert.isNonNegativeInteger(bucket_id, 'bucket_id');
|
|
47
49
|
|
|
48
50
|
build_indirect_compute_dispatch_command(
|
|
49
51
|
COMPUTE_SHADER_DEFAULT_GROUP_SIZE,
|
|
@@ -55,17 +57,15 @@ export function pass_mesh_cull(data, resources, context) {
|
|
|
55
57
|
0
|
|
56
58
|
);
|
|
57
59
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
);
|
|
60
|
+
// TODO(chrome-153): transient uniform, not an immediate value — see the shader.
|
|
61
|
+
const u_bucket_index = encoder.allocateTransientValueBuffer(U32_CONTAINER_STRUCT, {
|
|
62
|
+
value: bucket_id,
|
|
63
|
+
});
|
|
64
64
|
|
|
65
65
|
shader_hzb_mesh_filter_2way.dispatchIndirect({
|
|
66
66
|
encoder,
|
|
67
67
|
bindings: {
|
|
68
|
-
bucket_index,
|
|
68
|
+
bucket_index: u_bucket_index,
|
|
69
69
|
camera_previous: view_ctx.gpu_previous_camera_state.buffer,
|
|
70
70
|
bucket_data,
|
|
71
71
|
scene_database: gpu_scene.scene_database_buffer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_extract_meshes_from_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js"],"names":[],"mappings":"AAUA;;;;;;;;;;GAUG;AACH;IAN+B,KAAK;IACT,OAAO,EAAvB,MAAM;IACU,SAAS,EAAzB,MAAM;IACuB,MAAM;IACjC,MAAM,
|
|
1
|
+
{"version":3,"file":"graph_extract_meshes_from_bucket.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js"],"names":[],"mappings":"AAUA;;;;;;;;;;GAUG;AACH;IAN+B,KAAK;IACT,OAAO,EAAvB,MAAM;IACU,SAAS,EAAzB,MAAM;IACuB,MAAM;IACjC,MAAM,CAgElB"}
|
|
@@ -1,79 +1,84 @@
|
|
|
1
|
-
import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
|
|
2
|
-
import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
3
|
-
import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
|
|
4
|
-
import {
|
|
5
|
-
build_indirect_compute_dispatch_command,
|
|
6
|
-
INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
|
|
7
|
-
} from "../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
|
|
8
|
-
import { RasterizationCollectionType } from "../expand/RasterizationCollectionType.js";
|
|
9
|
-
import { shader_read_out_bucket } from "../bucket/shader_read_out_bucket.js";
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Extract a single bucket's mesh indices out of a bucket-sorted mesh buffer.
|
|
13
|
-
* Produces a flat {@link COLLECTION_U32_STRUCT_READ} buffer.
|
|
14
|
-
*
|
|
15
|
-
* @param {Object} options
|
|
16
|
-
* @param {FrameGraph} options.graph
|
|
17
|
-
* @param {number} options.buckets bucket-sorted meshes resource ID
|
|
18
|
-
* @param {number} options.bucket_id
|
|
19
|
-
* @param {GPUCollectionLimits} options.limits
|
|
20
|
-
* @returns {number} resource ID of extracted mesh list
|
|
21
|
-
*/
|
|
22
|
-
export function graph_extract_meshes_from_bucket({
|
|
23
|
-
graph,
|
|
24
|
-
buckets,
|
|
25
|
-
bucket_id,
|
|
26
|
-
limits,
|
|
27
|
-
}) {
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
*
|
|
31
|
-
* @param data
|
|
32
|
-
* @param {FramePassResources} resources
|
|
33
|
-
* @param {GraphicsExecutionContext} context
|
|
34
|
-
*/
|
|
35
|
-
function execute(data, resources, context) {
|
|
36
|
-
const encoder = context.encoder;
|
|
37
|
-
|
|
38
|
-
const buckets = resources.get(data.buckets);
|
|
39
|
-
const output = resources.get(data.output);
|
|
40
|
-
const command = resources.get(data.command);
|
|
41
|
-
|
|
42
|
-
const bucket_id = data.bucket_id;
|
|
43
|
-
|
|
44
|
-
build_indirect_compute_dispatch_command(
|
|
45
|
-
COMPUTE_SHADER_DEFAULT_GROUP_SIZE,
|
|
46
|
-
encoder,
|
|
47
|
-
buckets,
|
|
48
|
-
// the bucketed buffer header consists of pairs of u32 values (count,offset)
|
|
49
|
-
bucket_id * (u32.size * 2),
|
|
50
|
-
command,
|
|
51
|
-
0
|
|
52
|
-
);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
data
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
)
|
|
77
|
-
|
|
78
|
-
|
|
1
|
+
import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
|
|
2
|
+
import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
3
|
+
import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
|
|
4
|
+
import {
|
|
5
|
+
build_indirect_compute_dispatch_command,
|
|
6
|
+
INDIRECT_COMPUTE_COMMAND_DESCRIPTOR
|
|
7
|
+
} from "../../gpu_primitive/indirect/IndirectComputeCommandBuildPass.js";
|
|
8
|
+
import { RasterizationCollectionType } from "../expand/RasterizationCollectionType.js";
|
|
9
|
+
import { PUSH_CONSTANTS, shader_read_out_bucket } from "../bucket/shader_read_out_bucket.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Extract a single bucket's mesh indices out of a bucket-sorted mesh buffer.
|
|
13
|
+
* Produces a flat {@link COLLECTION_U32_STRUCT_READ} buffer.
|
|
14
|
+
*
|
|
15
|
+
* @param {Object} options
|
|
16
|
+
* @param {FrameGraph} options.graph
|
|
17
|
+
* @param {number} options.buckets bucket-sorted meshes resource ID
|
|
18
|
+
* @param {number} options.bucket_id
|
|
19
|
+
* @param {GPUCollectionLimits} options.limits
|
|
20
|
+
* @returns {number} resource ID of extracted mesh list
|
|
21
|
+
*/
|
|
22
|
+
export function graph_extract_meshes_from_bucket({
|
|
23
|
+
graph,
|
|
24
|
+
buckets,
|
|
25
|
+
bucket_id,
|
|
26
|
+
limits,
|
|
27
|
+
}) {
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
*
|
|
31
|
+
* @param data
|
|
32
|
+
* @param {FramePassResources} resources
|
|
33
|
+
* @param {GraphicsExecutionContext} context
|
|
34
|
+
*/
|
|
35
|
+
function execute(data, resources, context) {
|
|
36
|
+
const encoder = context.encoder;
|
|
37
|
+
|
|
38
|
+
const buckets = resources.get(data.buckets);
|
|
39
|
+
const output = resources.get(data.output);
|
|
40
|
+
const command = resources.get(data.command);
|
|
41
|
+
|
|
42
|
+
const bucket_id = data.bucket_id;
|
|
43
|
+
|
|
44
|
+
build_indirect_compute_dispatch_command(
|
|
45
|
+
COMPUTE_SHADER_DEFAULT_GROUP_SIZE,
|
|
46
|
+
encoder,
|
|
47
|
+
buckets,
|
|
48
|
+
// the bucketed buffer header consists of pairs of u32 values (count,offset)
|
|
49
|
+
bucket_id * (u32.size * 2),
|
|
50
|
+
command,
|
|
51
|
+
0
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
// TODO(chrome-153): transient uniform, not an immediate value — see the shader.
|
|
55
|
+
const u_settings = encoder.allocateTransientValueBuffer(PUSH_CONSTANTS, {
|
|
56
|
+
bucket_id,
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
shader_read_out_bucket.dispatchIndirect({
|
|
60
|
+
encoder,
|
|
61
|
+
command,
|
|
62
|
+
bindings: {
|
|
63
|
+
settings: u_settings,
|
|
64
|
+
input: buckets,
|
|
65
|
+
output,
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const data = {};
|
|
71
|
+
|
|
72
|
+
const pass = graph.add("extract meshes from bucket", data, execute);
|
|
73
|
+
|
|
74
|
+
data.buckets = pass.read(buckets);
|
|
75
|
+
data.bucket_id = bucket_id;
|
|
76
|
+
data.command = pass.create("command", INDIRECT_COMPUTE_COMMAND_DESCRIPTOR);
|
|
77
|
+
data.output = pass.create("output", BufferResourceDescriptor.from(
|
|
78
|
+
limits.compute_buffer_size(RasterizationCollectionType.Meshes),
|
|
79
|
+
GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
|
|
80
|
+
0, 16 // clear count
|
|
81
|
+
));
|
|
82
|
+
|
|
83
|
+
return data.output;
|
|
79
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_rasterize_scene_fast.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph_rasterize_scene_fast.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js"],"names":[],"mappings":"AAmBA;;;;;;;;;;GAUG;AACH;;;;;;;IAFa;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAA;CAAC,CA0I3D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAJ+B,KAAK;IACC,GAAG;IACA,MAAM;SA8C7C"}
|
|
@@ -12,6 +12,7 @@ import { graph_expand_meshes_to_meshlets } from "../expand/mesh/graph_expand_mes
|
|
|
12
12
|
import { graph_vgeo_expand_if_enabled } from "../../geometry/virtual/runtime/graph_vgeo_expand_if_enabled.js";
|
|
13
13
|
import { RasterizationCollectionType } from "../expand/RasterizationCollectionType.js";
|
|
14
14
|
import { construct_primitive_state } from "../bucket/construct_primitive_state.js";
|
|
15
|
+
import { rasterization_opaque_buckets } from "../bucket/rasterization_opaque_buckets.js";
|
|
15
16
|
import { graph_mesh_frustum_cull } from "../compute/graph_mesh_frustum_cull.js";
|
|
16
17
|
import { graph_rasterize_meshes_alpha_tested } from "../native/graph_rasterize_meshes_alpha_tested.js";
|
|
17
18
|
import { graph_extract_meshes_from_bucket } from "./graph_extract_meshes_from_bucket.js";
|
|
@@ -75,59 +76,49 @@ export function graph_rasterize_scene_fast_raw({
|
|
|
75
76
|
// rasterize each active opaque bucket in a single pass, with no occlusion filtering
|
|
76
77
|
let is_first_draw = true;
|
|
77
78
|
|
|
78
|
-
for (const draw_mode of
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
depth: target_depth,
|
|
122
|
-
color_targets: targets_color,
|
|
123
|
-
pass_descriptor: job.opaque_pass,
|
|
124
|
-
clear_targets: is_first_draw,
|
|
125
|
-
primitive_state,
|
|
126
|
-
viewport,
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
is_first_draw = false;
|
|
130
|
-
}
|
|
79
|
+
for (const { draw_mode, side, bucket_id } of rasterization_opaque_buckets(active_buckets)) {
|
|
80
|
+
const gr_bucket_meshes = graph_extract_meshes_from_bucket({
|
|
81
|
+
graph,
|
|
82
|
+
buckets: gr_render_buckets,
|
|
83
|
+
bucket_id,
|
|
84
|
+
limits,
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
let gr_bucket_meshlets = graph_expand_meshes_to_meshlets({
|
|
88
|
+
graph,
|
|
89
|
+
input_meshes: gr_bucket_meshes,
|
|
90
|
+
scene: scene_ctx,
|
|
91
|
+
expected_output_size: limits.compute_buffer_size(RasterizationCollectionType.Meshlets),
|
|
92
|
+
limits,
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// the seam: this bucket's virtual-geometry instances select their cut and append it to
|
|
96
|
+
// the same collection, which is the whole of what the rest of this function is told
|
|
97
|
+
gr_bucket_meshlets = graph_vgeo_expand_if_enabled({
|
|
98
|
+
graph,
|
|
99
|
+
input_meshes: gr_bucket_meshes,
|
|
100
|
+
output_meshlets: gr_bucket_meshlets,
|
|
101
|
+
view: view_ctx,
|
|
102
|
+
limits,
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
graph_record_stat(graph, limits.stats, RasterizationCollectionType.Meshlets, gr_bucket_meshlets);
|
|
106
|
+
|
|
107
|
+
const primitive_state = construct_primitive_state(draw_mode, side, job.cull_policy);
|
|
108
|
+
|
|
109
|
+
[target_depth, targets_color] = graph_meshlets_rasterize({
|
|
110
|
+
graph,
|
|
111
|
+
view: view_ctx,
|
|
112
|
+
input_meshlets: gr_bucket_meshlets,
|
|
113
|
+
depth: target_depth,
|
|
114
|
+
color_targets: targets_color,
|
|
115
|
+
pass_descriptor: job.opaque_pass,
|
|
116
|
+
clear_targets: is_first_draw,
|
|
117
|
+
primitive_state,
|
|
118
|
+
viewport,
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
is_first_draw = false;
|
|
131
122
|
}
|
|
132
123
|
|
|
133
124
|
// alpha-tested: reuse the existing native pass but skip HZB filtering by passing hzb=-1
|
package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_forward_shade_standard_fragment_brick4.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_forward_shade_standard_fragment_brick4.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js"],"names":[],"mappings":"AA6BA,qEA2JC;0BA9JyB,oCAAoC"}
|
package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { chunk_shade_standard_material_direct } from "../../deferred/chunk_shade_standard_material_direct.js";
|
|
2
|
+
import { chunk_material_draw_side } from "../../material/chunk_material_draw_side.js";
|
|
2
3
|
import { chunk_decode_tangent_normal } from "../../shader/chunk/geometry/normal/chunk_decode_tangent_normal.js";
|
|
3
4
|
import { INDIRECT_LIGHT_INTENSITY } from "../../deferred/INDIRECT_LIGHT_INTENSITY.js";
|
|
4
5
|
import {
|
|
@@ -38,8 +39,10 @@ fn forward_shade_standard_fragment(
|
|
|
38
39
|
let t_normal = decode_tangent_normal(textureSample(texture_normal, texture_normal_sampler, vert.uv));
|
|
39
40
|
var world_shading_normal:vec3<f32> = normalize( world_tangent_frame * t_normal );
|
|
40
41
|
|
|
41
|
-
// flip normal
|
|
42
|
-
|
|
42
|
+
// flip the normal when looking at the surface's back. The raw front_facing cannot say:
|
|
43
|
+
// a back-sided material emits its winding reversed on purpose, so its "front" faces
|
|
44
|
+
// are the surface's back.
|
|
45
|
+
if(!material_fragment_faces_front(front_facing, material_info.draw_side)) {
|
|
43
46
|
world_shading_normal = -world_shading_normal;
|
|
44
47
|
}
|
|
45
48
|
|
|
@@ -177,5 +180,6 @@ fn forward_shade_standard_fragment(
|
|
|
177
180
|
chunk_compute_indirect_specular,
|
|
178
181
|
chunk_brick4_sample_forward_indirect,
|
|
179
182
|
chunk_compute_specular_occlusion,
|
|
183
|
+
chunk_material_draw_side,
|
|
180
184
|
]
|
|
181
185
|
)
|
package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_forward_shade_standard_fragment_ibl.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_forward_shade_standard_fragment_ibl.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js"],"names":[],"mappings":"AA4BA;;;GAGG;AACH,kEAgJC;0BAvJyB,oCAAoC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { chunk_shade_standard_material_direct } from "../../deferred/chunk_shade_standard_material_direct.js";
|
|
2
|
+
import { chunk_material_draw_side } from "../../material/chunk_material_draw_side.js";
|
|
2
3
|
import { chunk_decode_tangent_normal } from "../../shader/chunk/geometry/normal/chunk_decode_tangent_normal.js";
|
|
3
4
|
import { chunk_get_ibl_irradiance } from "../../deferred/indirect/chunk_get_ibl_irradiance.js";
|
|
4
5
|
import { chunk_get_ibl_radiance } from "../../deferred/indirect/chunk_get_ibl_radiance.js";
|
|
@@ -41,8 +42,10 @@ fn forward_shade_standard_fragment(
|
|
|
41
42
|
let t_normal = decode_tangent_normal(textureSample(texture_normal, texture_normal_sampler, vert.uv));
|
|
42
43
|
var world_shading_normal:vec3<f32> = normalize( world_tangent_frame * t_normal );
|
|
43
44
|
|
|
44
|
-
// flip normal
|
|
45
|
-
|
|
45
|
+
// flip the normal when looking at the surface's back. The raw front_facing cannot say:
|
|
46
|
+
// a back-sided material emits its winding reversed on purpose, so its "front" faces
|
|
47
|
+
// are the surface's back.
|
|
48
|
+
if(!material_fragment_faces_front(front_facing, material_info.draw_side)) {
|
|
46
49
|
world_shading_normal = -world_shading_normal;
|
|
47
50
|
}
|
|
48
51
|
|
|
@@ -169,5 +172,6 @@ fn forward_shade_standard_fragment(
|
|
|
169
172
|
chunk_get_ibl_radiance,
|
|
170
173
|
chunk_get_ibl_irradiance,
|
|
171
174
|
chunk_compute_specular_occlusion,
|
|
175
|
+
chunk_material_draw_side,
|
|
172
176
|
]
|
|
173
177
|
)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vertex_shader_chunk.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/vertex_shader_chunk.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vertex_shader_chunk.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/forward/vertex_shader_chunk.js"],"names":[],"mappings":"AAeA,4CAgEE;0BAnEwB,oCAAoC"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
import { chunk_triangle_winding_is_reversed } from "../chunk_triangle_winding_is_reversed.js";
|
|
2
|
+
import { chunk_node3d_flags } from "../../scene/chunk_node3d_flags.js";
|
|
1
3
|
import { chunk_scene_database_access } from "../../scene/chunk_scene_database_access.js";
|
|
2
4
|
import {
|
|
3
5
|
chunk_compute_normal_matrix_from_m4
|
|
4
6
|
} from "../../shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.js";
|
|
7
|
+
import {
|
|
8
|
+
chunk_triangle_list_reverse_winding
|
|
9
|
+
} from "../../shader/chunk/geometry/triangle/chunk_triangle_list_reverse_winding.js";
|
|
5
10
|
import {
|
|
6
11
|
chunk_read_meshlet_vertex_by_draw_index
|
|
7
12
|
} from "../../shader/chunk/geometry/meshlet/chunk_read_meshlet_vertex_by_draw_index.js";
|
|
@@ -26,9 +31,16 @@ fn main(
|
|
|
26
31
|
let mesh = scene_read_mesh(&scene_database, meshlet_def.mesh);
|
|
27
32
|
let node = scene_read_node(&scene_database, mesh.node);
|
|
28
33
|
|
|
34
|
+
// the tangent frame's handedness turns on the reflection alone: looking at a surface's back
|
|
35
|
+
// does not change which way its +V runs, and a back-sided material is only a way of looking
|
|
36
|
+
let is_mirrored = node3d_global_is_mirrored(node);
|
|
37
|
+
|
|
29
38
|
let geo_vertex = read_meshlet_vertex_by_draw_index(
|
|
30
39
|
meshlet_header,
|
|
31
|
-
|
|
40
|
+
triangle_list_reverse_winding(
|
|
41
|
+
meshlet_vertex_id,
|
|
42
|
+
triangle_winding_is_reversed(node, material_info.draw_side)
|
|
43
|
+
),
|
|
32
44
|
);
|
|
33
45
|
|
|
34
46
|
let instance_matrix = node.global;
|
|
@@ -47,7 +59,9 @@ fn main(
|
|
|
47
59
|
output.normal = normalize(normal_model_matrix * geo_vertex.normal);
|
|
48
60
|
|
|
49
61
|
let geometry_tangent = geo_vertex.tangent;
|
|
50
|
-
|
|
62
|
+
// a reflection changes the tangent frame's handedness — see NODE3D_GLOBAL_FLAG_MIRRORED
|
|
63
|
+
let tangent_handedness = select(geometry_tangent.w, -geometry_tangent.w, is_mirrored);
|
|
64
|
+
let world_tangent = vec4( normalize( normal_model_matrix * geometry_tangent.xyz ), tangent_handedness );
|
|
51
65
|
output.tangent = world_tangent;
|
|
52
66
|
|
|
53
67
|
output.color = geo_vertex.color * material_info.albedo_color.rgb;
|
|
@@ -59,5 +73,8 @@ fn main(
|
|
|
59
73
|
chunk_compute_normal_matrix_from_m4,
|
|
60
74
|
chunk_read_meshlet_vertex_by_draw_index,
|
|
61
75
|
chunk_scene_database_access,
|
|
76
|
+
chunk_node3d_flags,
|
|
77
|
+
chunk_triangle_winding_is_reversed,
|
|
78
|
+
chunk_triangle_list_reverse_winding,
|
|
62
79
|
]
|
|
63
80
|
);
|
|
@@ -61,8 +61,9 @@ stacked-card case the way the reference did and MBOIT did not. MBOIT stays selec
|
|
|
61
61
|
Its orchestrator [`graph_rasterize_meshes_transparent_oit.js`](../oit/graph_rasterize_meshes_transparent_oit.js)
|
|
62
62
|
records, per frame:
|
|
63
63
|
|
|
64
|
-
1. `filter_materials_by_bucket` twice — `(Transparent, Triangles, Front)` and `(…, Double)
|
|
65
|
-
`ShadeDrawSide.Back` transparent materials
|
|
64
|
+
1. `filter_materials_by_bucket` twice — `(Transparent, Triangles, Front)` and `(…, Double)`.
|
|
65
|
+
*2026-09-16: `ShadeDrawSide.Back` transparent materials used to be dropped here. They are not any
|
|
66
|
+
more — `Back` and `Front` are one bucket now, so asking for either returns both.*
|
|
66
67
|
2. `graph_prepare_meshlet_draw_commands_by_material` twice — copy bucket, HZB mesh filter, expand to meshlets,
|
|
67
68
|
HZB meshlet filter, count/scan/sort by material, build one indirect draw command per material.
|
|
68
69
|
3. `MBOIT/generate moments` twice (front clears, double loads) — additive MRT into `r32float` + `rgba32float`,
|
|
@@ -486,8 +487,10 @@ unambiguous, must not break anything else, and must not be situational:
|
|
|
486
487
|
known to be that.
|
|
487
488
|
- **Sparse voxel texture** (slide 122) — *no*. The deck's own future work.
|
|
488
489
|
- **Chroma skew** (§4).
|
|
489
|
-
- **`ShadeDrawSide.Back` transparent materials** — dropped today by MBOIT; the same filter is used here so
|
|
490
|
-
two modes draw the same set. Fixing it is a bucket-filter change that belongs to both
|
|
490
|
+
- **`ShadeDrawSide.Back` transparent materials** — ~~dropped today by MBOIT; the same filter is used here so
|
|
491
|
+
the two modes draw the same set. Fixing it is a bucket-filter change that belongs to both.~~ **Done,
|
|
492
|
+
2026-09-16 (`ca95ad3ac`)**, and it was the bucket-filter change this predicted: `Back` is `Front` with
|
|
493
|
+
the winding reversed in the vertex shader, so both modes draw it and neither needed a third pass.
|
|
491
494
|
- **Exposing the tunables on `Renderer`** — the constants in `AVBOIT_CONSTANTS.js` are the knobs; whether any
|
|
492
495
|
deserves a public field is a question for after the page in §6 has been looked at. *Revision 2:* one did —
|
|
493
496
|
the transmission tint, because it changes a material's meaning rather than a quality/cost trade; it lives
|