@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
|
@@ -1,22 +1,15 @@
|
|
|
1
|
-
import { GEOMETRY_METADATA_STRUCT } from "../../renderer/geometry/GEOMETRY_METADATA_STRUCT.js";
|
|
2
1
|
import { align_4 } from "../../../core/binary/align_4.js";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
BVH_NODE_STRIDE_WORDS
|
|
8
|
-
} from "../../renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js";
|
|
9
|
-
import { bvh2_check_containment } from "../../renderer/geometry/bvh/bvh2_check_bounds.js";
|
|
10
|
-
import { GPUBLASRefitBatch } from "../../renderer/geometry/bvh/GPUBLASRefitBatch.js";
|
|
11
|
-
import { BVH2_NODE_STRUCT } from "../../renderer/shader/chunk/bvh/BVH2_NODE_STRUCT.js";
|
|
2
|
+
import { reinterpret_uint32_as_float32 } from "../../../core/binary/reinterpret_uint32_as_float32.js";
|
|
3
|
+
import { BVH8 } from "../../../core/bvh8/BVH8.js";
|
|
4
|
+
import { bvh8_get_node_bounds } from "../../../core/bvh8/bvh8_get_node_bounds.js";
|
|
5
|
+
import { bvh8_validate_structure } from "../../../core/bvh8/bvh8_validate_structure.js";
|
|
12
6
|
import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
|
|
7
|
+
import { GPUBLASRefitBatch } from "../../renderer/geometry/bvh/GPUBLASRefitBatch.js";
|
|
8
|
+
import { GEOMETRY_METADATA_STRUCT } from "../../renderer/geometry/GEOMETRY_METADATA_STRUCT.js";
|
|
9
|
+
import { BVH8_INODE_STRUCT } from "../../renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js";
|
|
13
10
|
import { render_submitted_frames } from "../render_submitted_frames.js";
|
|
14
11
|
import { geometry_of } from "./place_character.js";
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* @type {number}
|
|
18
|
-
*/
|
|
19
|
-
const BVH_NULL_NODE = 0xffffffff;
|
|
12
|
+
import { verify_leaf_triangles } from "./verify_leaf_triangles.js";
|
|
20
13
|
|
|
21
14
|
/**
|
|
22
15
|
* Device-level check for the per-frame BLAS refit, for when looking at the picture is not enough or
|
|
@@ -29,11 +22,13 @@ const BVH_NULL_NODE = 0xffffffff;
|
|
|
29
22
|
* - `shader_meshlet_bounds_reduce` atomically merges every deformed vertex into the clone's
|
|
30
23
|
* geometry-metadata bounding box. It exists for the rasterizer's culling and knows nothing
|
|
31
24
|
* about trees.
|
|
32
|
-
* - {@link GPUBLASRefitBatch}
|
|
33
|
-
*
|
|
25
|
+
* - {@link GPUBLASRefitBatch} fits every node of the tree to the triangles under it. The boxes of
|
|
26
|
+
* the root's slots, together, end up bounding every triangle.
|
|
34
27
|
*
|
|
35
28
|
* Same vertices, same frame, two paths that share no code. They have to agree, and a stale BLAS
|
|
36
|
-
* cannot make them: the metadata box tracks the pose while the root
|
|
29
|
+
* cannot make them: the metadata box tracks the pose while the root holds the bind pose. Agreement
|
|
30
|
+
* here is the root's box holding the metadata box and reaching no more than a step of the root's own
|
|
31
|
+
* grid past it: a node keeps its slots' boxes on a grid of 255 steps across itself, rounded outward.
|
|
37
32
|
*
|
|
38
33
|
* Both are read straight out of the buffers the shaders wrote, so this needs a real device — call
|
|
39
34
|
* it from the playground page's console, not from a spec.
|
|
@@ -78,17 +73,79 @@ async function read_back(device, buffer, offset, size) {
|
|
|
78
73
|
}
|
|
79
74
|
|
|
80
75
|
/**
|
|
81
|
-
*
|
|
76
|
+
* A tree's nodes as the refit left them.
|
|
82
77
|
*
|
|
83
78
|
* @param {GPUDevice} device
|
|
84
79
|
* @param {GPUGeometryBVHManager} blas
|
|
85
80
|
* @param {number} address arena node index of the tree's root
|
|
86
|
-
* @
|
|
81
|
+
* @param {number} node_count
|
|
82
|
+
* @returns {Promise<BVH8>}
|
|
87
83
|
*/
|
|
88
|
-
async function
|
|
89
|
-
const
|
|
84
|
+
async function read_tree(device, blas, address, node_count) {
|
|
85
|
+
const tree = new BVH8();
|
|
90
86
|
|
|
91
|
-
|
|
87
|
+
tree.nodes.fromArrayBuffer(
|
|
88
|
+
await read_back(device, blas.buffer_data, address * BVH8_INODE_STRUCT.size, node_count * BVH8_INODE_STRUCT.size),
|
|
89
|
+
node_count
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
return tree;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* `[min.xyz, max.xyz]` of everything a node's slots hold.
|
|
97
|
+
*
|
|
98
|
+
* @param {BVH8} tree
|
|
99
|
+
* @param {number} node
|
|
100
|
+
* @returns {number[]}
|
|
101
|
+
*/
|
|
102
|
+
function node_bounds(tree, node) {
|
|
103
|
+
const box = new Float32Array(6);
|
|
104
|
+
|
|
105
|
+
bvh8_get_node_bounds(box, 0, tree, node);
|
|
106
|
+
|
|
107
|
+
return [...box];
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* The steps of the grid a node keeps its slots' boxes on, an axis each: a power of two, the node's
|
|
112
|
+
* own to choose.
|
|
113
|
+
*
|
|
114
|
+
* @param {BVH8} tree
|
|
115
|
+
* @param {number} node
|
|
116
|
+
* @returns {number[]}
|
|
117
|
+
*/
|
|
118
|
+
function node_steps(tree, node) {
|
|
119
|
+
const exponents = new Uint8Array(3);
|
|
120
|
+
|
|
121
|
+
tree.node_get_e(node, exponents);
|
|
122
|
+
|
|
123
|
+
return Array.from(exponents, e => reinterpret_uint32_as_float32(e << 23));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* How far `outer` fails to hold `inner`, and how far it reaches past it, both in `steps` an axis.
|
|
128
|
+
* A fitted root holds what is under it (zero short) and reaches less than a step past it: its slots'
|
|
129
|
+
* boxes are rounded outward to its grid.
|
|
130
|
+
*
|
|
131
|
+
* @param {number[]} outer
|
|
132
|
+
* @param {number[]} inner
|
|
133
|
+
* @param {number[]} steps
|
|
134
|
+
* @returns {{short: number, past: number}}
|
|
135
|
+
*/
|
|
136
|
+
function box_fit(outer, inner, steps) {
|
|
137
|
+
let short = 0;
|
|
138
|
+
let past = 0;
|
|
139
|
+
|
|
140
|
+
for (let axis = 0; axis < 3; axis++) {
|
|
141
|
+
const low = (inner[axis] - outer[axis]) / steps[axis];
|
|
142
|
+
const high = (outer[axis + 3] - inner[axis + 3]) / steps[axis];
|
|
143
|
+
|
|
144
|
+
short = Math.max(short, -low, -high);
|
|
145
|
+
past = Math.max(past, low, high);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return { short, past };
|
|
92
149
|
}
|
|
93
150
|
|
|
94
151
|
/**
|
|
@@ -165,7 +222,8 @@ async function advance(renderer, camera, scene, frames, dt = 1 / 60) {
|
|
|
165
222
|
* @param {PerspectiveCamera} options.camera
|
|
166
223
|
* @param {Scene} options.scene
|
|
167
224
|
* @param {number} options.entity a skinned mesh entity, whose clone is being deformed
|
|
168
|
-
* @param {number} [options.tolerance]
|
|
225
|
+
* @param {number} [options.tolerance] slack on the fit, in steps of the root's grid, and the relative
|
|
226
|
+
* movement between the samples below which the pose is taken not to have moved
|
|
169
227
|
* @returns {Promise<object>} the samples and the verdict
|
|
170
228
|
*/
|
|
171
229
|
export async function verify_skinned_blas_refit({
|
|
@@ -197,8 +255,12 @@ export async function verify_skinned_blas_refit({
|
|
|
197
255
|
await read_back(device, geometries.blas.buffer_metadata, geometry_index * 4, 4)
|
|
198
256
|
)[0];
|
|
199
257
|
|
|
258
|
+
const node_count = geometry_of(scene.dataset, entity).bvh.byteLength / BVH8_INODE_STRUCT.size;
|
|
259
|
+
|
|
200
260
|
const samples = [];
|
|
201
261
|
|
|
262
|
+
let tree;
|
|
263
|
+
|
|
202
264
|
for (let i = 0; i < 2; i++) {
|
|
203
265
|
// a third of a second between samples — far enough into the dance that a limb has moved,
|
|
204
266
|
// close enough that the whole check is quick
|
|
@@ -206,25 +268,40 @@ export async function verify_skinned_blas_refit({
|
|
|
206
268
|
await advance(renderer, camera, scene, 20);
|
|
207
269
|
}
|
|
208
270
|
|
|
209
|
-
|
|
271
|
+
tree = await read_tree(device, geometries.blas, address, node_count);
|
|
272
|
+
|
|
273
|
+
const root = node_bounds(tree, 0);
|
|
210
274
|
const metadata = await read_metadata_bounds(device, geometries, geometry_index);
|
|
211
275
|
|
|
212
|
-
samples.push({ root, metadata,
|
|
276
|
+
samples.push({ root, metadata, fit: box_fit(root, metadata, node_steps(tree, 0)) });
|
|
213
277
|
}
|
|
214
278
|
|
|
215
|
-
// and the interior, which the root box alone says nothing about
|
|
216
|
-
|
|
217
|
-
device,
|
|
218
|
-
geometries.blas.buffer_data,
|
|
219
|
-
address * BVH2_NODE_STRUCT.size,
|
|
220
|
-
(geometry_of(scene.dataset, entity).bvh.byteLength / BVH2_NODE_STRUCT.size | 0) * BVH2_NODE_STRUCT.size
|
|
221
|
-
);
|
|
279
|
+
// and the interior, which the root's box alone says nothing about
|
|
280
|
+
let structure = null;
|
|
222
281
|
|
|
223
|
-
|
|
224
|
-
|
|
282
|
+
try {
|
|
283
|
+
// the same checker the builder's specs assert with
|
|
284
|
+
bvh8_validate_structure(tree);
|
|
285
|
+
} catch (error) {
|
|
286
|
+
structure = error.message;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// Every slot against the triangles under it, as the vertices stand now: no frame has run since
|
|
290
|
+
// the tree was read, so there is no slack to allow for.
|
|
291
|
+
const interior = await verify_leaf_triangles({
|
|
292
|
+
renderer,
|
|
293
|
+
target: { node_offset: address, node_count },
|
|
294
|
+
geometry_index,
|
|
295
|
+
meshlet_count: geometry_of(scene.dataset, entity).meshlets.count,
|
|
296
|
+
});
|
|
225
297
|
|
|
226
|
-
const
|
|
227
|
-
|
|
298
|
+
const interior_problem = structure !== null ? structure
|
|
299
|
+
: interior.verdict.startsWith('pass') ? null
|
|
300
|
+
: interior.verdict;
|
|
301
|
+
|
|
302
|
+
// a step, and the rounding of reading a box back out of the grid
|
|
303
|
+
const agrees = samples.every(sample => sample.fit.short <= tolerance && sample.fit.past <= 1 + tolerance)
|
|
304
|
+
&& interior_problem === null;
|
|
228
305
|
|
|
229
306
|
// the pose has to have moved for the agreement above to mean anything
|
|
230
307
|
const moved = box_disagreement(samples[0].root, samples[1].root);
|
|
@@ -233,18 +310,18 @@ export async function verify_skinned_blas_refit({
|
|
|
233
310
|
geometry_index,
|
|
234
311
|
address,
|
|
235
312
|
samples,
|
|
236
|
-
|
|
313
|
+
interior,
|
|
237
314
|
agrees,
|
|
238
315
|
moved,
|
|
239
316
|
// a box that never moves is a box that is not being recomputed, however well it agrees
|
|
240
317
|
verdict: agrees && moved > tolerance
|
|
241
318
|
? `pass — the tree bounds the deformed mesh and follows it; `
|
|
242
|
-
+ `${
|
|
319
|
+
+ `${interior.triangle_count} triangles and ${interior.child_slots} child nodes sit inside the slots that name them`
|
|
243
320
|
: agrees
|
|
244
321
|
? `inconclusive — the boxes agree but neither moved (${moved.toExponential(2)}); is the animation playing?`
|
|
245
|
-
:
|
|
246
|
-
? `FAIL — the interior does not hold together: ${
|
|
247
|
-
: `FAIL — the tree does not bound the deformed mesh (${samples.map(s => s.
|
|
322
|
+
: interior_problem !== null
|
|
323
|
+
? `FAIL — the interior does not hold together: ${interior_problem}`
|
|
324
|
+
: `FAIL — the tree does not bound the deformed mesh (short ${samples.map(s => s.fit.short.toFixed(3)).join(', ')} steps, past ${samples.map(s => s.fit.past.toFixed(3)).join(', ')})`,
|
|
248
325
|
};
|
|
249
326
|
|
|
250
327
|
console.log(result.verdict, result);
|
|
@@ -253,21 +330,19 @@ export async function verify_skinned_blas_refit({
|
|
|
253
330
|
}
|
|
254
331
|
|
|
255
332
|
/**
|
|
256
|
-
* Does each leaf's box belong to the
|
|
333
|
+
* Does each leaf slot's box belong to the triangles that slot names?
|
|
257
334
|
*
|
|
258
335
|
* The check above cannot see this, and it is worth being explicit about why. Its two properties —
|
|
259
|
-
* root
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
*
|
|
263
|
-
*
|
|
264
|
-
*
|
|
336
|
+
* the root holds the metadata box, every slot holds the child node it names — are both invariant
|
|
337
|
+
* under *any* permutation of triangles among leaf slots. Deal the same triangles out to the wrong
|
|
338
|
+
* slots and the union of all of them is unchanged, so the root still matches, and each node is still
|
|
339
|
+
* fitted to whatever its children hold. A tree that fits every triangle to the wrong slot passes both
|
|
340
|
+
* and traces garbage: a ray descends into a box, tests the triangles the slot names, and those
|
|
341
|
+
* triangles are somewhere else entirely.
|
|
265
342
|
*
|
|
266
|
-
* The way to see it is to refit a geometry that is **not** deforming, and hold
|
|
267
|
-
* the
|
|
268
|
-
*
|
|
269
|
-
* moved in between, so the two have to be the same bytes — and a permutation is exactly what stops
|
|
270
|
-
* them being.
|
|
343
|
+
* The way to see it is to refit a geometry that is **not** deforming, and hold every slot against the
|
|
344
|
+
* triangles the intersector fetches for it. Nothing moved, so there is no frame of slack to hide
|
|
345
|
+
* behind: every triangle sits inside the slot that names it or the refit read another one.
|
|
271
346
|
*
|
|
272
347
|
* @param {object} options
|
|
273
348
|
* @param {Renderer} options.renderer
|
|
@@ -286,15 +361,10 @@ export async function verify_leaf_correspondence({ renderer, geometry }) {
|
|
|
286
361
|
throw new Error('that geometry is not registered');
|
|
287
362
|
}
|
|
288
363
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
if (target === undefined) {
|
|
364
|
+
if (geometries.blas.get_refit_target(metadata) === undefined) {
|
|
292
365
|
throw new Error('that geometry has no resident tree');
|
|
293
366
|
}
|
|
294
367
|
|
|
295
|
-
const expected = new Float32Array(geometry.bvh);
|
|
296
|
-
const expected_words = new Uint32Array(geometry.bvh);
|
|
297
|
-
|
|
298
368
|
const cmd = ShadeGPUCommandContext.create(graphics, 'verify/leaf correspondence');
|
|
299
369
|
|
|
300
370
|
// a batch of one: the source geometry, refitted from its own undeformed vertices
|
|
@@ -310,60 +380,10 @@ export async function verify_leaf_correspondence({ renderer, geometry }) {
|
|
|
310
380
|
|
|
311
381
|
batch.destroy();
|
|
312
382
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
geometry.
|
|
318
|
-
)
|
|
319
|
-
|
|
320
|
-
const node_count = Math.floor(expected.length / BVH_NODE_STRIDE_WORDS);
|
|
321
|
-
|
|
322
|
-
const problems = [];
|
|
323
|
-
|
|
324
|
-
let leaves = 0;
|
|
325
|
-
let worst = 0;
|
|
326
|
-
|
|
327
|
-
for (let node = 0; node < node_count && problems.length < 8; node++) {
|
|
328
|
-
const base = node * BVH_NODE_STRIDE_WORDS;
|
|
329
|
-
|
|
330
|
-
// only the leaves: an internal node's box comes from the climb, which the union check
|
|
331
|
-
// already covers, and slots the tree never reaches hold whatever the free list left
|
|
332
|
-
if (expected_words[base + BVH_NODE_CHILD_1_WORD] !== BVH_NULL_NODE) {
|
|
333
|
-
continue;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
leaves += 1;
|
|
337
|
-
|
|
338
|
-
for (let i = 0; i < 6; i++) {
|
|
339
|
-
const want = expected[base + BVH_NODE_BOUNDS_WORD + i];
|
|
340
|
-
const got = region[base + BVH_NODE_BOUNDS_WORD + i];
|
|
341
|
-
|
|
342
|
-
const error = Math.abs(want - got);
|
|
343
|
-
|
|
344
|
-
if (error > worst) {
|
|
345
|
-
worst = error;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
if (want !== got) {
|
|
349
|
-
problems.push(
|
|
350
|
-
`leaf node ${node} bound ${i}: builder says ${want}, refit says ${got}`
|
|
351
|
-
);
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
const result = {
|
|
357
|
-
leaves,
|
|
358
|
-
worst,
|
|
359
|
-
problems,
|
|
360
|
-
verdict: problems.length === 0
|
|
361
|
-
? `pass — all ${leaves} leaf boxes are the ones the builder put there, so each leaf's `
|
|
362
|
-
+ `box is its own triangle's`
|
|
363
|
-
: `FAIL — ${problems.length}+ leaf boxes differ from the builder's: ${problems[0]}`,
|
|
364
|
-
};
|
|
365
|
-
|
|
366
|
-
console.log(result.verdict, result);
|
|
367
|
-
|
|
368
|
-
return result;
|
|
383
|
+
return verify_leaf_triangles({
|
|
384
|
+
renderer,
|
|
385
|
+
owner: metadata,
|
|
386
|
+
geometry_index: metadata.index,
|
|
387
|
+
meshlet_count: geometry.meshlets.count,
|
|
388
|
+
});
|
|
369
389
|
}
|
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
* @param {Renderer} options.renderer
|
|
4
4
|
* @param {PerspectiveCamera} options.camera whose position the rays start from
|
|
5
5
|
* @param {Transform64} options.world the instance's world transform, which puts the camera into geometry space
|
|
6
|
-
* @param {
|
|
7
|
-
* @param {number} options.
|
|
6
|
+
* @param {number} options.geometry_index the row whose tree is walked and whose triangles are aimed at
|
|
7
|
+
* @param {number} options.meshlet_count meshlets of that geometry
|
|
8
8
|
* @returns {Promise<object>}
|
|
9
9
|
*/
|
|
10
|
-
export function verify_traversal_reachability({ renderer, camera, world,
|
|
10
|
+
export function verify_traversal_reachability({ renderer, camera, world, geometry_index, meshlet_count, }: {
|
|
11
11
|
renderer: Renderer;
|
|
12
12
|
camera: PerspectiveCamera;
|
|
13
13
|
world: Transform64;
|
|
14
|
-
target: object;
|
|
15
14
|
geometry_index: number;
|
|
15
|
+
meshlet_count: number;
|
|
16
16
|
}): Promise<object>;
|
|
17
17
|
//# sourceMappingURL=verify_traversal_reachability.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify_traversal_reachability.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify_traversal_reachability.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js"],"names":[],"mappings":"AAqHA;;;;;;;;GAQG;AACH;IAP6B,QAAQ;IACC,MAAM;IACZ,KAAK;IACV,cAAc,EAA9B,MAAM;IACU,aAAa,EAA7B,MAAM;IACJ,QAAQ,MAAM,CAAC,CAkI3B"}
|