@woosh/meep-engine 3.69.0 → 3.70.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/CHANGELOG.md +30 -1
- package/build/bundle-worker-terrain.js +1 -1
- package/package.json +1 -1
- package/src/core/bvh8/build/BVH8Converter.d.ts +16 -0
- package/src/core/bvh8/build/BVH8Converter.d.ts.map +1 -1
- package/src/core/bvh8/build/BVH8Converter.js +64 -37
- package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts +25 -0
- package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts.map +1 -0
- package/src/core/bvh8/build/bvh8_assign_slots_greedy.js +68 -0
- package/src/core/bvh8/build/bvh8_from_proxy.d.ts.map +1 -1
- package/src/core/bvh8/build/bvh8_from_proxy.js +2 -33
- package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts +22 -0
- package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts.map +1 -0
- package/src/core/bvh8/build/bvh8_node_fit_slots.js +115 -0
- package/src/core/bvh8/bvh8_depth.d.ts +8 -0
- package/src/core/bvh8/bvh8_depth.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_depth.js +39 -0
- package/src/core/math/complex/complex_fft_radix2.d.ts +19 -0
- package/src/core/math/complex/complex_fft_radix2.d.ts.map +1 -0
- package/src/core/math/complex/complex_fft_radix2.js +71 -0
- package/src/engine/graphics3/GPUFluidSystem.d.ts +17 -4
- package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUFluidSystem.js +113 -16
- package/src/engine/physics/cloth/playground/wind_main.js +7 -6
- package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts +2 -2
- package/src/engine/physics/cloth/wind/AbstractClothWind.js +2 -2
- package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +3 -3
- package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
- package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -9
- package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts +10 -10
- package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts.map +1 -1
- package/src/engine/physics/cloth/wind/ClothGPUFluidWind.js +14 -22
- package/src/engine/physics/fluid/FluidAtmosphere.d.ts +16 -2
- package/src/engine/physics/fluid/FluidAtmosphere.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidAtmosphere.js +17 -3
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts +1 -2
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.js +1 -2
- package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts +8 -5
- package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.js +60 -17
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +1 -1
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +1 -1
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +33 -47
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +38 -176
- package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts +8 -11
- package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.js +13 -24
- package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts +16 -0
- package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.js +35 -0
- package/src/engine/physics/fluid/fluid_apply_atmosphere.d.ts +1 -1
- package/src/engine/physics/fluid/fluid_apply_atmosphere.js +1 -1
- package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts +28 -0
- package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts.map +1 -0
- package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.js +29 -0
- package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts +16 -0
- package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts.map +1 -0
- package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.js +49 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts +11 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts.map +1 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.js +18 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts +25 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts.map +1 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.js +65 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts +56 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts.map +1 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.js +313 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts +16 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts.map +1 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.js +69 -0
- package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +1 -1
- package/src/generation/foliage/mesh/branch_ring_triangulate.js +1 -1
- package/src/shade/playground/bvh_repro/README.md +8 -6
- package/src/shade/playground/bvh_repro/index.html +125 -124
- package/src/shade/playground/bvh_repro/main.js +259 -254
- package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
- package/src/shade/playground/foliage_wind/foliage_world.js +7 -4
- package/src/shade/playground/grass_surfaces/main.js +3 -2
- package/src/shade/playground/particle_ecs/bonfire_wind.d.ts +23 -13
- package/src/shade/playground/particle_ecs/bonfire_wind.d.ts.map +1 -1
- package/src/shade/playground/particle_ecs/bonfire_wind.js +30 -33
- package/src/shade/playground/skinned_blas_refit/README.md +26 -14
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts +14 -9
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +126 -127
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +95 -95
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts +9 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +146 -135
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +6 -6
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +148 -134
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts +11 -8
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +342 -202
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +12 -13
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +136 -116
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +4 -4
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +255 -249
- package/src/shade/playground/water_surface/main.js +6 -3
- package/src/shade/renderer/animation/GPUAnimationManager.js +2 -2
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +7 -8
- package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts +111 -0
- package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.js +162 -0
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +37 -8
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
- package/src/shade/renderer/fluid/GPUFluidCascade.js +149 -47
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +10 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +69 -10
- package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts +19 -0
- package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts.map +1 -0
- package/src/shade/renderer/fluid/chunk_fluid_far_field.js +43 -0
- package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts +10 -9
- package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.js +14 -12
- package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts +3 -2
- package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.js +7 -5
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts +17 -9
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.js +58 -18
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts +23 -11
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +371 -335
- package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.js +2 -1
- package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.js +109 -108
- package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts +5 -3
- package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.js +24 -12
- package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts +6 -2
- package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.js +10 -5
- package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +20 -21
- package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/FluidMacPasses.js +453 -427
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +2 -1
- package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +13 -5
- package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
- package/src/shade/renderer/fluid/publish/FluidWindPublish.js +20 -10
- package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.d.ts +2 -2
- package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.js +2 -2
- package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts +5 -3
- package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts.map +1 -1
- package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.js +147 -142
- package/src/shade/renderer/fluid/query/GPUFluidQueries.js +2 -2
- package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/GPUGeometryManager.js +5 -7
- package/src/shade/renderer/geometry/MeshletGeometry.d.ts +4 -1
- package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/MeshletGeometry.js +4 -1
- package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts +20 -0
- package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts.map +1 -1
- package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.js +35 -3
- package/src/shade/renderer/geometry/blas_from_meshlets.d.ts +9 -3
- package/src/shade/renderer/geometry/blas_from_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/blas_from_meshlets.js +16 -30
- package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts +14 -0
- package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.js +33 -0
- package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts +18 -21
- package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +78 -158
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +18 -39
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +39 -398
- package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts +6 -7
- package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.js +5 -7
- package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts +36 -0
- package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts.map +1 -0
- package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.js +179 -0
- package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts +30 -0
- package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.js +207 -0
- package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts +52 -0
- package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts.map +1 -0
- package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.js +464 -0
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts +12 -0
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +37 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js +4 -4
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js +2 -2
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js +2 -2
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +4 -4
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.js +2 -2
- package/src/shade/renderer/geometry/sr_create_group_RTX.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sr_create_group_RTX.js +4 -4
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -0
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -0
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +372 -376
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +9 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +10 -11
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +12 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +109 -60
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_sdf.js +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.js +2 -2
- package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.d.ts +2 -2
- package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js +70 -70
- package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts +6 -7
- package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.js +6 -7
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +3 -3
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +3 -3
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.js +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +2 -2
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +3 -3
- package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts +69 -0
- package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.js +89 -0
- package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts +41 -0
- package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.js +348 -0
- package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts +34 -0
- package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.js +291 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts +31 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.js +175 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts +27 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.js +48 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts +26 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.js +118 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts +22 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.js +143 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts +36 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.js +97 -0
- package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts +49 -0
- package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.js +265 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts +37 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.js +109 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts +15 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.js +85 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts +26 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.js +200 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts +19 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.js +81 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts +14 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.js +101 -0
- package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts +19 -0
- package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.js +361 -0
- package/src/shade/renderer/grass/surface/shader_grass_surface_bake.d.ts.map +1 -1
- package/src/shade/renderer/grass/surface/shader_grass_surface_bake.js +5 -6
- package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/GPULightMap.js +1 -0
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -0
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -0
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +8 -4
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +60 -33
- package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts +6 -6
- package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts.map +1 -1
- package/src/shade/renderer/scene/verify_gpu_tlas_build.js +23 -53
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts +3 -1
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js +5 -3
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts +28 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js +29 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.js +97 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts +8 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.js +23 -14
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts +36 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.js +222 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts +20 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.js +30 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts +30 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.js +91 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.js +40 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.js +121 -70
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts +13 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.js +117 -61
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.js +111 -72
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts +1 -2
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.js +83 -54
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.js +92 -60
- package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.js +153 -106
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.js +115 -74
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts +5 -2
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.js +89 -63
- package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.js +108 -63
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts +14 -0
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.js +94 -60
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +4 -4
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -2
- package/src/shade/renderer/water/query/shader_water_surface_query.d.ts.map +1 -1
- package/src/shade/renderer/water/query/shader_water_surface_query.js +227 -227
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +7 -4
- package/src/shade/renderer/water/surface/particles/shader_water_particles.js +2 -2
- package/src/shade/renderer/wind/GPUSceneWind.d.ts +36 -4
- package/src/shade/renderer/wind/GPUSceneWind.d.ts.map +1 -1
- package/src/shade/renderer/wind/GPUSceneWind.js +150 -4
- package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts +9 -3
- package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/wind/WIND_FIELD_STRUCT.js +13 -3
- package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.d.ts +6 -6
- package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.js +6 -6
- package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts +39 -0
- package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts.map +1 -0
- package/src/shade/renderer/wind/chunk_fluid_turbulence.js +63 -0
- package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts +10 -7
- package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts.map +1 -1
- package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.js +34 -11
- package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.d.ts +2 -2
- package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.js +2 -2
- package/src/shade/renderer/wind/wind_field_add_resources.d.ts +6 -4
- package/src/shade/renderer/wind/wind_field_add_resources.d.ts.map +1 -1
- package/src/shade/renderer/wind/wind_field_add_resources.js +9 -6
- package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts +0 -18
- package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.js +0 -50
- package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts +0 -23
- package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts.map +0 -1
- package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.js +0 -87
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts +0 -42
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts.map +0 -1
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.js +0 -141
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts +0 -21
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts.map +0 -1
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.js +0 -75
- package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts +0 -17
- package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts.map +0 -1
- package/src/shade/renderer/geometry/meshlet_batch_to_bvh.js +0 -247
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts +0 -7
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.js +0 -226
- package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts +0 -8
- package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.js +0 -45
- package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts +0 -3
- package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.js +0 -105
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts +0 -6
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts.map +0 -1
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.js +0 -86
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts +0 -2
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts.map +0 -1
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.js +0 -136
|
@@ -4,15 +4,14 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export const MESH_BRICK_BATCH: number;
|
|
6
6
|
/**
|
|
7
|
-
* Nodes a walk keeps on a level of its frontier; the rest are handed on to the next round.
|
|
8
|
-
*
|
|
7
|
+
* Nodes a walk keeps on a level of its frontier; the rest are handed on to the next round. A node
|
|
8
|
+
* gives a level eight at most.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* rebuild of Zorah's windows went from 71.1 to 43.0 ms there, and stayed even on the 4090.
|
|
10
|
+
* An integrated GPU's walk is bound by how many workgroups its memory lets in, and the frontier's two
|
|
11
|
+
* lists are the larger part of that memory. Measured on Zorah's TLAS (12,597 leaves) over the frames
|
|
12
|
+
* in which the windows fill: at 512 nodes every walk ends in its second
|
|
13
|
+
* round and the walks take 842 ms there in all; at 256, in its third, 448; at 128, in its fourth,
|
|
14
|
+
* 474.
|
|
16
15
|
* @type {number}
|
|
17
16
|
*/
|
|
18
17
|
export const MESH_BRICK_FRONTIER: number;
|
|
@@ -33,8 +32,8 @@ export const MESH_BRICK_RECORD_WORDS: number;
|
|
|
33
32
|
export const MESH_BRICK_ROUNDS: number;
|
|
34
33
|
/**
|
|
35
34
|
* Rounds a walk of a TLAS over at most 2^20 leaves can need. A task starts from at most
|
|
36
|
-
* {@link MESH_BRICK_BATCH} nodes and hands on only past {@link MESH_BRICK_FRONTIER},
|
|
37
|
-
* many, so a chain of k rounds needs a level 64·
|
|
35
|
+
* {@link MESH_BRICK_BATCH} nodes and hands on only past {@link MESH_BRICK_FRONTIER}, four times as
|
|
36
|
+
* many, so a chain of k rounds needs a level 64·4^(k-1) nodes wide; 2^20 leaves allow k = 8.
|
|
38
37
|
* @type {number}
|
|
39
38
|
*/
|
|
40
39
|
export const MESH_BRICK_ROUND_LIMIT: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MESH_BRICK.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js"],"names":[],"mappings":"AAkBA;;;GAGG;AACH,+BAFU,MAAM,CAE0C;AAE1D
|
|
1
|
+
{"version":3,"file":"MESH_BRICK.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js"],"names":[],"mappings":"AAkBA;;;GAGG;AACH,+BAFU,MAAM,CAE0C;AAE1D;;;;;;;;;;GAUG;AACH,kCAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,6CAFU,MAAM,CAEgC;AAEhD;;;GAGG;AACH,sCAFU,MAAM,CAEyE;AAEzF;;;GAGG;AACH,gCAFU,MAAM,CAEmB;AAEnC;;;;;GAKG;AACH,qCAFU,MAAM,CAEiI;AASjJ;;;;;GAKG;AACH,2CAFU,MAAM,CAEuD;AAEvE;;;GAGG;AACH,2CAFU,MAAM,CAE6D;AAE7E;;;GAGG;AACH,sCAFU,MAAM,CAEyB;AAEzC;;;;;GAKG;AACH,yCAFU,MAAM,CAE4B;AAO5C;;;GAGG;AACH,2CAFU,MAAM,CAE8B;AAE9C;;;GAGG;AACH,mDAFU,MAAM,CAEsC;AAEtD;;;GAGG;AACH,yCAFU,MAAM,CAE4B;AAE5C;;;GAGG;AACH,iDAFU,MAAM,CAEoC;AAEpD;;;GAGG;AACH,gDAFU,MAAM,CAEmC;AAEnD;;;GAGG;AACH,gDAFU,MAAM,CAEmC;AAEnD;;;GAGG;AACH,iDAFU,MAAM,CAEoC;AAEpD;;;GAGG;AACH,gDAFU,MAAM,CAEmC;AAEnD;;;GAGG;AACH,8CAFU,MAAM,CAEiC;AAEjD;;;GAGG;AACH,iDAFU,MAAM,CAEoC;AAEpD;;;GAGG;AACH,yCAFU,MAAM,CAE6B;AAE7C;;;GAGG;AACH,yCAFU,MAAM,CAEqD;AAErE;;;;GAIG;AACH,uCAFU,MAAM,CAEuD;AAEvE;;;GAGG;AACH,8CAFU,MAAM,CAE4D;AAE5E;;;GAGG;AACH,8CAFU,MAAM,CAEmE;AAEnF;;;GAGG;AACH,0CAFU,MAAM,CAE+D;AAE/E;;;GAGG;AACH,gDAFU,MAAM,CAEiE;AAEjF;;;GAGG;AACH,uCAFU,MAAM,CAE8D"}
|
|
@@ -23,18 +23,17 @@ import { BRICK_CELL_WORKGROUP_SIZE } from "../BRICK_CLIPMAP.js";
|
|
|
23
23
|
export const MESH_BRICK_BATCH = BRICK_CELL_WORKGROUP_SIZE;
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
|
-
* Nodes a walk keeps on a level of its frontier; the rest are handed on to the next round.
|
|
27
|
-
*
|
|
26
|
+
* Nodes a walk keeps on a level of its frontier; the rest are handed on to the next round. A node
|
|
27
|
+
* gives a level eight at most.
|
|
28
28
|
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* rebuild of Zorah's windows went from 71.1 to 43.0 ms there, and stayed even on the 4090.
|
|
29
|
+
* An integrated GPU's walk is bound by how many workgroups its memory lets in, and the frontier's two
|
|
30
|
+
* lists are the larger part of that memory. Measured on Zorah's TLAS (12,597 leaves) over the frames
|
|
31
|
+
* in which the windows fill: at 512 nodes every walk ends in its second
|
|
32
|
+
* round and the walks take 842 ms there in all; at 256, in its third, 448; at 128, in its fourth,
|
|
33
|
+
* 474.
|
|
35
34
|
* @type {number}
|
|
36
35
|
*/
|
|
37
|
-
export const MESH_BRICK_FRONTIER =
|
|
36
|
+
export const MESH_BRICK_FRONTIER = 256;
|
|
38
37
|
|
|
39
38
|
/**
|
|
40
39
|
* Words of a record's header: its build slot, then how many entries it holds.
|
|
@@ -56,8 +55,8 @@ export const MESH_BRICK_ROUNDS = 2;
|
|
|
56
55
|
|
|
57
56
|
/**
|
|
58
57
|
* Rounds a walk of a TLAS over at most 2^20 leaves can need. A task starts from at most
|
|
59
|
-
* {@link MESH_BRICK_BATCH} nodes and hands on only past {@link MESH_BRICK_FRONTIER},
|
|
60
|
-
* many, so a chain of k rounds needs a level 64·
|
|
58
|
+
* {@link MESH_BRICK_BATCH} nodes and hands on only past {@link MESH_BRICK_FRONTIER}, four times as
|
|
59
|
+
* many, so a chain of k rounds needs a level 64·4^(k-1) nodes wide; 2^20 leaves allow k = 8.
|
|
61
60
|
* @type {number}
|
|
62
61
|
*/
|
|
63
62
|
export const MESH_BRICK_ROUND_LIMIT = 1 + Math.ceil(Math.log2((1 << 20) / MESH_BRICK_BATCH) / Math.log2(MESH_BRICK_FRONTIER / MESH_BRICK_BATCH));
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts
CHANGED
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
* An iteration of a level appends the children it finds to the next level's list at places `start`
|
|
14
14
|
* to `end`, as their reservations came; the frontier keeps the places below
|
|
15
15
|
* {@link MESH_BRICK_FRONTIER}, and every child at or past it is handed on, at its place counted from
|
|
16
|
-
* whichever is later of `start` and the frontier. An iteration appends
|
|
17
|
-
* so it hands on at most
|
|
16
|
+
* whichever is later of `start` and the frontier. An iteration appends eight children a lane at most,
|
|
17
|
+
* so it hands on at most eight times {@link MESH_BRICK_BATCH}.
|
|
18
18
|
*
|
|
19
19
|
* @type {CodeChunk}
|
|
20
20
|
*/
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js
CHANGED
|
@@ -26,8 +26,8 @@ import {
|
|
|
26
26
|
* An iteration of a level appends the children it finds to the next level's list at places `start`
|
|
27
27
|
* to `end`, as their reservations came; the frontier keeps the places below
|
|
28
28
|
* {@link MESH_BRICK_FRONTIER}, and every child at or past it is handed on, at its place counted from
|
|
29
|
-
* whichever is later of `start` and the frontier. An iteration appends
|
|
30
|
-
* so it hands on at most
|
|
29
|
+
* whichever is later of `start` and the frontier. An iteration appends eight children a lane at most,
|
|
30
|
+
* so it hands on at most eight times {@link MESH_BRICK_BATCH}.
|
|
31
31
|
*
|
|
32
32
|
* @type {CodeChunk}
|
|
33
33
|
*/
|
|
@@ -7,9 +7,10 @@ export const MESH_BRICK_GATHER_SETTINGS: WebGPUStruct;
|
|
|
7
7
|
* whose box comes within the band of a taken cell, gathered whole, a workgroup a walk.
|
|
8
8
|
*
|
|
9
9
|
* A walk expands the TLAS a level at a time, as the cooperative query does (`chunk_bvh_query_aabb_cooperative`):
|
|
10
|
-
* each node of the level is
|
|
11
|
-
* of
|
|
12
|
-
*
|
|
10
|
+
* each node of the level is read by a lane, and its eight slots tested against the cell grown by the
|
|
11
|
+
* cascade's band. The child nodes of the slots the box meets go on the next level. An instance in a
|
|
12
|
+
* slot the box meets is a row when its own box meets it too — a slot's is the instance's rounded outward
|
|
13
|
+
* to the node's grid — and `mesh_brick_accept` takes it. Nothing is dropped:
|
|
13
14
|
* - a level keeps {@link MESH_BRICK_FRONTIER} nodes, and the children that fall past them are handed on in
|
|
14
15
|
* task records of up to {@link MESH_BRICK_BATCH} nodes, each a walk of the next round, which this same
|
|
15
16
|
* kernel runs from them;
|
|
@@ -26,12 +27,15 @@ export const MESH_BRICK_GATHER_SETTINGS: WebGPUStruct;
|
|
|
26
27
|
* a command dispatches was written this frame.
|
|
27
28
|
*
|
|
28
29
|
* An iteration of a level costs the workgroup a barrier and a `workgroupUniformLoad`, and a barrier
|
|
29
|
-
* more after one whose hand-off copied
|
|
30
|
-
* children start and, on the level's last, how many nodes the next level holds.
|
|
30
|
+
* more after one whose hand-off copied rows out: lane 0 hands every lane where the next iteration's
|
|
31
|
+
* children start and, on the level's last, how many nodes the next level holds. A lane writes its own
|
|
32
|
+
* children past the frontier straight into the task records the hand-off kept for them.
|
|
31
33
|
*
|
|
32
|
-
* Per lane and level, at most {@link MESH_BRICK_FRONTIER} / {@link MESH_BRICK_BATCH} node reads,
|
|
33
|
-
*
|
|
34
|
-
*
|
|
34
|
+
* Per lane and level, at most {@link MESH_BRICK_FRONTIER} / {@link MESH_BRICK_BATCH} node reads, each
|
|
35
|
+
* with at most eight accepts and eight appends of either kind, over at most
|
|
36
|
+
* {@link BVH_QUERY_AABB_LEVEL_BUDGET} levels — a budget for a binary tree, a third of which a tree of
|
|
37
|
+
* three binary levels a node needs; per iteration, eight task entries written and nine batch entries
|
|
38
|
+
* copied at most.
|
|
35
39
|
*
|
|
36
40
|
* @type {ComputeShader}
|
|
37
41
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_mesh_brick_gather.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_mesh_brick_gather.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js"],"names":[],"mappings":"AA4CA;;GAEG;AACH,yCAFU,YAAY,CAeQ;AAoY9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,uCAFU,aAAa,CAMpB;6BAld0B,yCAAyC;8BAJxC,qCAAqC"}
|
package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { assert } from "../../../../../../core/assert.js";
|
|
2
2
|
import { WebGPUExtensionType } from "../../../../../descriptor/WebGPUExtensionType.js";
|
|
3
3
|
import { MESH_SDF_HEADERS_RESOURCE } from "../../../../geometry/sdf/MESH_SDF_RESOURCES.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { BVH_STRUCT } from "../../../../shader/chunk/bvh/BVH_STRUCT.js";
|
|
4
|
+
import { chunk_scene_database_access } from "../../../../scene/chunk_scene_database_access.js";
|
|
5
|
+
import { BVH8_INODE_STRUCT } from "../../../../shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js";
|
|
7
6
|
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
} from "../../../../shader/chunk/bvh/
|
|
7
|
+
chunk_bvh8_node_slot_distances
|
|
8
|
+
} from "../../../../shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.js";
|
|
9
|
+
import { BVH8_TREE_TYPE, chunk_bvh8_tree_read } from "../../../../shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.js";
|
|
10
|
+
import { BVH_QUERY_AABB_LEVEL_BUDGET } from "../../../../shader/chunk/bvh/chunk_bvh_query_aabb_frontier.js";
|
|
11
|
+
import {
|
|
12
|
+
chunk_aabb3_intersects_aabb3
|
|
13
|
+
} from "../../../../shader/chunk/geometry/aabb3/chunk_aabb3_intersects_aabb3.js";
|
|
11
14
|
import { CLIPMAP_LEVEL_ARRAY } from "../../../../shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js";
|
|
12
15
|
import { chunk_folded_workgroup_index } from "../../../../shader/chunk/grid/chunk_folded_workgroup_index.js";
|
|
13
16
|
import {
|
|
@@ -76,17 +79,15 @@ resources.createGroup()
|
|
|
76
79
|
.addStorageBuffer("mesh_brick_resolves", WebGPUArray.u32, true);
|
|
77
80
|
|
|
78
81
|
resources.createGroup()
|
|
79
|
-
.addStorageBuffer("tlas",
|
|
82
|
+
.addStorageBuffer("tlas", BVH8_TREE_TYPE)
|
|
80
83
|
.addStorageBuffer("scene_database", WebGPUArray.from(u32))
|
|
81
84
|
.add(MESH_SDF_HEADERS_RESOURCE);
|
|
82
85
|
|
|
83
86
|
const body = CodeChunk.from(
|
|
84
87
|
//language=WGSL
|
|
85
88
|
`
|
|
86
|
-
/**
|
|
87
|
-
const
|
|
88
|
-
/** rows waiting for their batch: fewer than a batch, and an iteration's at most */
|
|
89
|
-
const MESH_BRICK_WALK_ROWS = ${2 * MESH_BRICK_BATCH}u;
|
|
89
|
+
/** rows waiting for their batch: fewer than a batch, and an iteration's at most, eight a lane */
|
|
90
|
+
const MESH_BRICK_WALK_ROWS = ${9 * MESH_BRICK_BATCH}u;
|
|
90
91
|
|
|
91
92
|
/** what lane 0 hands the workgroup after an iteration */
|
|
92
93
|
struct MeshBrickWalkHandoff {
|
|
@@ -107,8 +108,6 @@ struct MeshBrickWalkHandoff {
|
|
|
107
108
|
var<workgroup> walk_frontier: array<array<u32, MESH_BRICK_FRONTIER>, 2>;
|
|
108
109
|
// appends asked of each list; past the frontier they were handed on
|
|
109
110
|
var<workgroup> walk_reserved: array<atomic<u32>, 2>;
|
|
110
|
-
// the iteration's children past the frontier, on their way to task records
|
|
111
|
-
var<workgroup> walk_spill: array<u32, MESH_BRICK_WALK_SPILL>;
|
|
112
111
|
// accepted rows, a ring from the first not yet in a batch
|
|
113
112
|
var<workgroup> walk_rows: array<u32, MESH_BRICK_WALK_ROWS>;
|
|
114
113
|
var<workgroup> walk_rows_reserved: atomic<u32>;
|
|
@@ -117,10 +116,6 @@ var<workgroup> walk_rows_reserved: atomic<u32>;
|
|
|
117
116
|
var<workgroup> walk_task: vec3<u32>;
|
|
118
117
|
var<workgroup> walk_handoff: MeshBrickWalkHandoff;
|
|
119
118
|
|
|
120
|
-
fn bvh_node(index: u32) -> ${BVH2_NODE_STRUCT.wgsl_ref} {
|
|
121
|
-
return tlas.nodes[index];
|
|
122
|
-
}
|
|
123
|
-
|
|
124
119
|
/** lane 0: a flag of the cell's for the frame; the first lists the cell for the resolve */
|
|
125
120
|
fn mesh_brick_walk_flag(build: u32, flag: u32) {
|
|
126
121
|
let flags = atomicOr(&mesh_brick_accumulators[mesh_brick_accumulator(build) + MESH_BRICK_ACCUMULATOR_FLAGS], flag);
|
|
@@ -202,14 +197,6 @@ fn mesh_brick_walk_tasks(build: u32, spilled: u32) -> vec2<u32> {
|
|
|
202
197
|
return tasks;
|
|
203
198
|
}
|
|
204
199
|
|
|
205
|
-
fn mesh_brick_walk_place(next: u32, slot: u32, start: u32, child: u32) {
|
|
206
|
-
if (slot < MESH_BRICK_FRONTIER) {
|
|
207
|
-
walk_frontier[next][slot] = child;
|
|
208
|
-
} else {
|
|
209
|
-
walk_spill[mesh_brick_walk_spill_index(slot, start)] = child;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
200
|
@compute @workgroup_size(${BRICK_CELL_WORKGROUP_SIZE})
|
|
214
201
|
fn main(
|
|
215
202
|
@builtin(workgroup_id) workgroup_id: vec3<u32>,
|
|
@@ -221,7 +208,8 @@ fn main(
|
|
|
221
208
|
if (lane == 0u) {
|
|
222
209
|
var walks: u32;
|
|
223
210
|
var build = index;
|
|
224
|
-
|
|
211
|
+
// a scene of no instances has nothing to walk
|
|
212
|
+
var roots = select(1u, 0u, bvh8_tree_leaf_count(&tlas) == 0u);
|
|
225
213
|
|
|
226
214
|
if (settings.round == 0u) {
|
|
227
215
|
walks = brick_take[BRICK_TAKE_COUNT];
|
|
@@ -257,12 +245,15 @@ fn main(
|
|
|
257
245
|
let at = brick_provider_cell(brick_provider_key(build, settings.ring_capacity), settings.resolution);
|
|
258
246
|
|
|
259
247
|
// every instance whose box comes within the band of the cell
|
|
260
|
-
let
|
|
248
|
+
let query_low = at.corner - vec3<f32>(at.band);
|
|
249
|
+
let query_high = at.far + vec3<f32>(at.band);
|
|
250
|
+
let query = array<f32, 6>(query_low.x, query_low.y, query_low.z, query_high.x, query_high.y, query_high.z);
|
|
261
251
|
|
|
262
252
|
// the first level's nodes, each read back by the lane that wrote it
|
|
263
253
|
if (settings.round == 0u) {
|
|
264
254
|
if (lane == 0u) {
|
|
265
|
-
|
|
255
|
+
// the root
|
|
256
|
+
walk_frontier[0][0] = 0u;
|
|
266
257
|
}
|
|
267
258
|
} else if (lane < task.z) {
|
|
268
259
|
walk_frontier[0][lane] = mesh_brick_tasks[mesh_brick_task_in(index) + MESH_BRICK_RECORD_HEADER_WORDS + lane];
|
|
@@ -271,7 +262,7 @@ fn main(
|
|
|
271
262
|
var expand_count = task.z;
|
|
272
263
|
// lane 0's: the rows handed to batches so far
|
|
273
264
|
var rows_taken = 0u;
|
|
274
|
-
// the last hand-off copied out of the
|
|
265
|
+
// the last hand-off copied rows out of the ring, which the next iteration fills again
|
|
275
266
|
var copied = false;
|
|
276
267
|
|
|
277
268
|
for (var level = 0u; level < ${BVH_QUERY_AABB_LEVEL_BUDGET}u && expand_count != 0u; level++) {
|
|
@@ -285,15 +276,33 @@ fn main(
|
|
|
285
276
|
for (var iteration = 0u; iteration < iterations; iteration++) {
|
|
286
277
|
let slot = iteration * MESH_BRICK_BATCH + lane;
|
|
287
278
|
|
|
288
|
-
var node: ${
|
|
289
|
-
|
|
279
|
+
var node: ${BVH8_INODE_STRUCT.wgsl_ref};
|
|
280
|
+
// of the node's slots: the child nodes the cell's box meets, a bit a slot
|
|
281
|
+
var children = 0u;
|
|
282
|
+
// and the instances taken, a bit each of the node's run
|
|
283
|
+
var taken = 0u;
|
|
290
284
|
|
|
291
285
|
if (slot < expand_count) {
|
|
292
|
-
node =
|
|
293
|
-
|
|
286
|
+
node = bvh8_tree_read_node(&tlas, walk_frontier[list][slot]);
|
|
287
|
+
|
|
288
|
+
let meeting = bvh8_node_slots_meeting(node, query_low, query_high);
|
|
289
|
+
|
|
290
|
+
children = meeting & (node.data[0].w >> 24u);
|
|
294
291
|
|
|
295
|
-
|
|
296
|
-
|
|
292
|
+
var run = bvh8_slot_runs_of(bvh8_node_slot_runs(node), meeting);
|
|
293
|
+
|
|
294
|
+
while (run != 0u) {
|
|
295
|
+
let offset = countTrailingZeros(run);
|
|
296
|
+
|
|
297
|
+
run &= run - 1u;
|
|
298
|
+
|
|
299
|
+
// a slot's box is its instance's rounded outward to the node's grid: the row's own box decides
|
|
300
|
+
let row = bvh8_tree_read_payload(&tlas, node, offset);
|
|
301
|
+
let box = scene_read_mesh(&scene_database, row).bounding_box;
|
|
302
|
+
|
|
303
|
+
if (aabb3_intersects_aabb3(box, query) && mesh_brick_accept(row, box, at.voxel)) {
|
|
304
|
+
taken |= 1u << offset;
|
|
305
|
+
}
|
|
297
306
|
}
|
|
298
307
|
}
|
|
299
308
|
|
|
@@ -302,16 +311,38 @@ fn main(
|
|
|
302
311
|
}
|
|
303
312
|
|
|
304
313
|
// every lane reserves, asking or not, so the subgroup operations stay uniform
|
|
305
|
-
let child = subgroup_reserve_workgroup(&walk_reserved[next],
|
|
306
|
-
let row = subgroup_reserve_workgroup(&walk_rows_reserved,
|
|
314
|
+
let child = subgroup_reserve_workgroup(&walk_reserved[next], countOneBits(children));
|
|
315
|
+
let row = subgroup_reserve_workgroup(&walk_rows_reserved, countOneBits(taken));
|
|
316
|
+
|
|
317
|
+
let imask = node.data[0].w >> 24u;
|
|
318
|
+
|
|
319
|
+
// The children that fit the frontier go on it now. Those past it wait for the task records
|
|
320
|
+
// lane 0 is about to ask for: 'beyond' and 'place' are theirs.
|
|
321
|
+
var beyond = children;
|
|
322
|
+
var place = child;
|
|
307
323
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
324
|
+
while (beyond != 0u && place < MESH_BRICK_FRONTIER) {
|
|
325
|
+
let child_slot = countTrailingZeros(beyond);
|
|
326
|
+
|
|
327
|
+
beyond &= beyond - 1u;
|
|
328
|
+
|
|
329
|
+
// the node's children sit in one block, in slot order
|
|
330
|
+
walk_frontier[next][place] = node.data[1].x + countOneBits(imask & ((1u << child_slot) - 1u));
|
|
331
|
+
|
|
332
|
+
place++;
|
|
311
333
|
}
|
|
312
334
|
|
|
313
|
-
|
|
314
|
-
|
|
335
|
+
var rows_left = taken;
|
|
336
|
+
var row_place = row;
|
|
337
|
+
|
|
338
|
+
while (rows_left != 0u) {
|
|
339
|
+
let offset = countTrailingZeros(rows_left);
|
|
340
|
+
|
|
341
|
+
rows_left &= rows_left - 1u;
|
|
342
|
+
|
|
343
|
+
walk_rows[row_place % MESH_BRICK_WALK_ROWS] = bvh8_tree_read_payload(&tlas, node, offset);
|
|
344
|
+
|
|
345
|
+
row_place++;
|
|
315
346
|
}
|
|
316
347
|
|
|
317
348
|
// every append of the iteration has landed
|
|
@@ -350,15 +381,27 @@ fn main(
|
|
|
350
381
|
|
|
351
382
|
let handoff = workgroupUniformLoad(&walk_handoff);
|
|
352
383
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
let
|
|
384
|
+
// this lane's children past the frontier, each to its place in the task records kept
|
|
385
|
+
while (beyond != 0u) {
|
|
386
|
+
let child_slot = countTrailingZeros(beyond);
|
|
356
387
|
|
|
357
|
-
|
|
358
|
-
|
|
388
|
+
beyond &= beyond - 1u;
|
|
389
|
+
|
|
390
|
+
let i = mesh_brick_walk_spill_index(place, start);
|
|
391
|
+
let k = i / MESH_BRICK_BATCH;
|
|
392
|
+
|
|
393
|
+
if (k < handoff.tasks_kept) {
|
|
394
|
+
mesh_brick_tasks[mesh_brick_task_out(handoff.tasks + k) + MESH_BRICK_RECORD_HEADER_WORDS + i % MESH_BRICK_BATCH]
|
|
395
|
+
= node.data[1].x + countOneBits(imask & ((1u << child_slot) - 1u));
|
|
359
396
|
}
|
|
360
397
|
|
|
361
|
-
|
|
398
|
+
place++;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
if (lane == 0u) {
|
|
402
|
+
for (var k = 0u; k < handoff.tasks_kept; k++) {
|
|
403
|
+
let record = mesh_brick_task_out(handoff.tasks + k);
|
|
404
|
+
|
|
362
405
|
mesh_brick_tasks[record] = build;
|
|
363
406
|
mesh_brick_tasks[record + 1u] = min(MESH_BRICK_BATCH, handoff.spilled - k * MESH_BRICK_BATCH);
|
|
364
407
|
}
|
|
@@ -379,7 +422,7 @@ fn main(
|
|
|
379
422
|
}
|
|
380
423
|
|
|
381
424
|
start = handoff.end;
|
|
382
|
-
copied = handoff.
|
|
425
|
+
copied = handoff.batches_kept != 0u;
|
|
383
426
|
|
|
384
427
|
if (settles) {
|
|
385
428
|
expand_count = min(handoff.end, MESH_BRICK_FRONTIER);
|
|
@@ -391,9 +434,11 @@ fn main(
|
|
|
391
434
|
chunk_brick_clipmap,
|
|
392
435
|
chunk_brick_provider,
|
|
393
436
|
chunk_folded_workgroup_index,
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
437
|
+
BVH8_INODE_STRUCT.declaration_chunk,
|
|
438
|
+
chunk_bvh8_tree_read,
|
|
439
|
+
chunk_bvh8_node_slot_distances,
|
|
440
|
+
chunk_aabb3_intersects_aabb3,
|
|
441
|
+
chunk_scene_database_access,
|
|
397
442
|
chunk_subgroup_reserve_workgroup,
|
|
398
443
|
chunk_mesh_brick_instance,
|
|
399
444
|
chunk_mesh_brick_walk,
|
|
@@ -406,9 +451,10 @@ body.addExtension(WebGPUExtensionType.Subgroups);
|
|
|
406
451
|
* whose box comes within the band of a taken cell, gathered whole, a workgroup a walk.
|
|
407
452
|
*
|
|
408
453
|
* A walk expands the TLAS a level at a time, as the cooperative query does (`chunk_bvh_query_aabb_cooperative`):
|
|
409
|
-
* each node of the level is
|
|
410
|
-
* of
|
|
411
|
-
*
|
|
454
|
+
* each node of the level is read by a lane, and its eight slots tested against the cell grown by the
|
|
455
|
+
* cascade's band. The child nodes of the slots the box meets go on the next level. An instance in a
|
|
456
|
+
* slot the box meets is a row when its own box meets it too — a slot's is the instance's rounded outward
|
|
457
|
+
* to the node's grid — and `mesh_brick_accept` takes it. Nothing is dropped:
|
|
412
458
|
* - a level keeps {@link MESH_BRICK_FRONTIER} nodes, and the children that fall past them are handed on in
|
|
413
459
|
* task records of up to {@link MESH_BRICK_BATCH} nodes, each a walk of the next round, which this same
|
|
414
460
|
* kernel runs from them;
|
|
@@ -425,12 +471,15 @@ body.addExtension(WebGPUExtensionType.Subgroups);
|
|
|
425
471
|
* a command dispatches was written this frame.
|
|
426
472
|
*
|
|
427
473
|
* An iteration of a level costs the workgroup a barrier and a `workgroupUniformLoad`, and a barrier
|
|
428
|
-
* more after one whose hand-off copied
|
|
429
|
-
* children start and, on the level's last, how many nodes the next level holds.
|
|
474
|
+
* more after one whose hand-off copied rows out: lane 0 hands every lane where the next iteration's
|
|
475
|
+
* children start and, on the level's last, how many nodes the next level holds. A lane writes its own
|
|
476
|
+
* children past the frontier straight into the task records the hand-off kept for them.
|
|
430
477
|
*
|
|
431
|
-
* Per lane and level, at most {@link MESH_BRICK_FRONTIER} / {@link MESH_BRICK_BATCH} node reads,
|
|
432
|
-
*
|
|
433
|
-
*
|
|
478
|
+
* Per lane and level, at most {@link MESH_BRICK_FRONTIER} / {@link MESH_BRICK_BATCH} node reads, each
|
|
479
|
+
* with at most eight accepts and eight appends of either kind, over at most
|
|
480
|
+
* {@link BVH_QUERY_AABB_LEVEL_BUDGET} levels — a budget for a binary tree, a third of which a tree of
|
|
481
|
+
* three binary levels a node needs; per iteration, eight task entries written and nine batch entries
|
|
482
|
+
* copied at most.
|
|
434
483
|
*
|
|
435
484
|
* @type {ComputeShader}
|
|
436
485
|
*/
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
MESH_SDF_INDIRECTION_RESOURCE,
|
|
8
8
|
MESH_SDF_SAMPLER_RESOURCE
|
|
9
9
|
} from "../../../geometry/sdf/MESH_SDF_RESOURCES.js";
|
|
10
|
-
import {
|
|
10
|
+
import { BVH8_TREE_TYPE } from "../../../shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.js";
|
|
11
11
|
import { chunk_camera_ray_from_uv } from "../../../shader/chunk/geometry/ray/chunk_camera_ray_from_uv.js";
|
|
12
12
|
import { F32_MAX_DEFINITION } from "../../../shader/chunk/math/F32_MAX_DEFINITION.js";
|
|
13
13
|
import { chunk_scene_sdf_raymarch } from "../../../shader/chunk/sdf/chunk_scene_sdf_raymarch.js";
|
|
@@ -37,7 +37,7 @@ resources.createGroup()
|
|
|
37
37
|
.add(MESH_SDF_ATLAS_RESOURCE)
|
|
38
38
|
.add(MESH_SDF_SAMPLER_RESOURCE)
|
|
39
39
|
.addStorageBuffer("scene_database", WebGPUArray.from(u32))
|
|
40
|
-
.addStorageBuffer("tlas",
|
|
40
|
+
.addStorageBuffer("tlas", BVH8_TREE_TYPE);
|
|
41
41
|
|
|
42
42
|
resources.createGroup()
|
|
43
43
|
.addUniform("camera", CAMERA_UNIFORM_STRUCT);
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
MESH_SURFACE_ROWS_RESOURCE
|
|
17
17
|
} from "../../../geometry/sdf/surface/MESH_SURFACE_RESOURCES.js";
|
|
18
18
|
import { chunk_scene_database_access } from "../../../scene/chunk_scene_database_access.js";
|
|
19
|
-
import {
|
|
19
|
+
import { BVH8_TREE_TYPE } from "../../../shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.js";
|
|
20
20
|
import { chunk_mat4_inverse } from "../../../shader/chunk/geometry/mat4/chunk_mat4_inverse.js";
|
|
21
21
|
import { chunk_camera_ray_from_uv } from "../../../shader/chunk/geometry/ray/chunk_camera_ray_from_uv.js";
|
|
22
22
|
import { F32_MAX_DEFINITION } from "../../../shader/chunk/math/F32_MAX_DEFINITION.js";
|
|
@@ -43,7 +43,7 @@ resources.createGroup()
|
|
|
43
43
|
.add(MESH_SDF_ATLAS_RESOURCE)
|
|
44
44
|
.add(MESH_SDF_SAMPLER_RESOURCE)
|
|
45
45
|
.addStorageBuffer("scene_database", WebGPUArray.from(u32))
|
|
46
|
-
.addStorageBuffer("tlas",
|
|
46
|
+
.addStorageBuffer("tlas", BVH8_TREE_TYPE);
|
|
47
47
|
|
|
48
48
|
resources.createGroup()
|
|
49
49
|
.add(MESH_SURFACE_RECORDS_RESOURCE)
|
|
@@ -13,13 +13,13 @@ export function bvh_buffer_size(leaf_count: number): number;
|
|
|
13
13
|
* restated as literals — `.pack()` and WGSL layout rules decide these offsets, and a builder that
|
|
14
14
|
* hard-codes them is one struct edit away from writing trees nothing can traverse.
|
|
15
15
|
*
|
|
16
|
-
* The layout every
|
|
16
|
+
* The layout every reader of a binary tree depends on:
|
|
17
17
|
*
|
|
18
18
|
* [u32 root][node 0][node 1] ... where a node is
|
|
19
19
|
* [min.x, min.y, min.z, max.x, max.y, max.z : f32][child_1 : u32][child_2 : u32]
|
|
20
20
|
*
|
|
21
21
|
* A node is a leaf exactly when `child_1 == BVH_NULL_NODE`, and then `child_2` carries the payload
|
|
22
|
-
* (for the
|
|
22
|
+
* (for the tree over a scene's instances, a row in the scene database's `meshes` table). An internal node always has two
|
|
23
23
|
* real children with meaningful bounds — the distance-ordered point queries dereference both before
|
|
24
24
|
* descending, so a placeholder child is not an option.
|
|
25
25
|
*
|