@woosh/meep-engine 3.68.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 +74 -0
- package/build/bundle-worker-terrain.js +1 -1
- package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +2 -17
- package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +1 -1
- package/editor/ecs/component/editors/ecs/Trail3DEditor.js +3 -18
- 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/graphics/ecs/trail3d/Trail3D.d.ts +33 -65
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3D.js +37 -245
- package/src/engine/graphics/ecs/trail3d/Trail3DFlags.d.ts +0 -4
- package/src/engine/graphics/ecs/trail3d/Trail3DFlags.js +4 -10
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts +13 -10
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +28 -37
- package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts +10 -0
- package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts.map +1 -0
- package/src/engine/graphics/ecs/trail3d/trail_knot_count.js +27 -0
- package/src/engine/graphics/trail/TrailKnots.d.ts +62 -0
- package/src/engine/graphics/trail/TrailKnots.d.ts.map +1 -0
- package/src/engine/graphics/trail/TrailKnots.js +137 -0
- package/src/engine/graphics/trail/tube/TubeXMaterialSpec.d.ts +1 -1
- package/src/engine/graphics/trail/tube/TubeXMaterialSpec.js +1 -1
- package/src/engine/graphics3/EntityRowHold.d.ts +48 -0
- package/src/engine/graphics3/EntityRowHold.d.ts.map +1 -0
- package/src/engine/graphics3/EntityRowHold.js +128 -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/graphics3/GPUParticleEmitterSystem.d.ts +6 -2
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +11 -44
- package/src/engine/graphics3/Trail3DSystem.d.ts +69 -35
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem.js +380 -81
- 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/ecs/FluidObstacle.d.ts +17 -0
- package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacle.js +22 -2
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +6 -5
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +14 -3
- 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/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts +9 -1
- package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts.map +1 -1
- package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.js +11 -1
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts +5 -0
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts.map +1 -1
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.js +2 -0
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts +4 -3
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts.map +1 -1
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.js +11 -3
- 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/trails/index.html +50 -0
- package/src/shade/playground/trails/main.d.ts +2 -0
- package/src/shade/playground/trails/main.d.ts.map +1 -0
- package/src/shade/playground/trails/main.js +258 -0
- package/src/shade/playground/water_surface/main.js +6 -3
- package/src/shade/renderer/animation/GPUAnimationManager.js +2 -2
- package/src/shade/renderer/animation/animation_curve_write_keys.d.ts +18 -0
- package/src/shade/renderer/animation/animation_curve_write_keys.d.ts.map +1 -0
- package/src/shade/renderer/animation/animation_curve_write_keys.js +34 -0
- 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/deferred/tonemap/ColorGrade.d.ts.map +1 -1
- package/src/shade/renderer/deferred/tonemap/ColorGrade.js +13 -36
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +2 -2
- package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts +2 -13
- package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.js +6 -21
- package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts +17 -6
- package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.js +38 -178
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts +7 -9
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +17 -106
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts +7 -17
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.js +18 -118
- 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/forcing/FLUID_FORCING.d.ts +14 -0
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING.js +18 -0
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts +3 -1
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.js +4 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +9 -0
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.js +20 -4
- package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts +11 -2
- package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.js +59 -2
- package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts +4 -1
- package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.js +367 -341
- 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 +6 -2
- 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 +340 -282
- 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/press/shader_grass_press_mark.d.ts +3 -2
- package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts.map +1 -1
- package/src/shade/renderer/grass/press/shader_grass_press_mark.js +5 -3
- 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/rasterize/native/avboit/avboit_unlit_draw.d.ts +49 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.js +144 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts +71 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.js +152 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts +21 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.js +30 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts +101 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.js +306 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +11 -4
- 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/trails/GPUTrailAVBOITChannel.d.ts +69 -0
- package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts.map +1 -0
- package/src/shade/renderer/trails/GPUTrailAVBOITChannel.js +129 -0
- package/src/shade/renderer/trails/GPUTrailSystem.d.ts +164 -0
- package/src/shade/renderer/trails/GPUTrailSystem.d.ts.map +1 -0
- package/src/shade/renderer/trails/GPUTrailSystem.js +725 -0
- package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts +14 -0
- package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts.map +1 -0
- package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.js +38 -0
- package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts +66 -0
- package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts.map +1 -0
- package/src/shade/renderer/trails/data/TRAIL_KNOT.js +154 -0
- package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts +19 -0
- package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts.map +1 -0
- package/src/shade/renderer/trails/data/TRAIL_RECORD.js +68 -0
- package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts +18 -0
- package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts.map +1 -0
- package/src/shade/renderer/trails/data/TRAIL_STATE.js +43 -0
- package/src/shade/renderer/trails/graph_trails.d.ts +58 -0
- package/src/shade/renderer/trails/graph_trails.d.ts.map +1 -0
- package/src/shade/renderer/trails/graph_trails.js +155 -0
- package/src/shade/renderer/trails/graph_trails_avboit.d.ts +126 -0
- package/src/shade/renderer/trails/graph_trails_avboit.d.ts.map +1 -0
- package/src/shade/renderer/trails/graph_trails_avboit.js +300 -0
- package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts +56 -0
- package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts.map +1 -0
- package/src/shade/renderer/trails/runtime/TrailFadeCurves.js +220 -0
- package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts +49 -0
- package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts.map +1 -0
- package/src/shade/renderer/trails/runtime/TrailKnotPool.js +162 -0
- package/src/shade/renderer/trails/runtime/TrailParameters.d.ts +52 -0
- package/src/shade/renderer/trails/runtime/TrailParameters.d.ts.map +1 -0
- package/src/shade/renderer/trails/runtime/TrailParameters.js +126 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts +23 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.js +57 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts +14 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.js +40 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts +18 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_seed.js +64 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts +14 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_segment.js +51 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts +48 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_update.js +197 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts +34 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_vertex.js +111 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts +24 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit.js +78 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts +23 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.js +130 -0
- package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts +29 -0
- package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/shader_trail_draw_args.js +78 -0
- package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts +18 -0
- package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/shader_trail_seed.js +79 -0
- package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts +20 -0
- package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/shader_trail_update.js +101 -0
- 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/engine/graphics/ecs/trail3d/advance_trail.d.ts +0 -18
- package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts.map +0 -1
- package/src/engine/graphics/ecs/trail3d/advance_trail.js +0 -42
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts +0 -14
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts.map +0 -1
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +0 -75
- package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts +0 -17
- package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts.map +0 -1
- package/src/engine/graphics/ecs/trail3d/trail_head_position.js +0 -19
- package/src/engine/graphics/trail/tube/TubeX.d.ts +0 -186
- package/src/engine/graphics/trail/tube/TubeX.d.ts.map +0 -1
- package/src/engine/graphics/trail/tube/TubeX.js +0 -575
- package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts +0 -16
- package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts.map +0 -1
- package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.js +0 -34
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +0 -27
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +0 -1
- package/src/engine/graphics/trail/tube/tube_attributes_spec.js +0 -70
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +0 -38
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts.map +0 -1
- package/src/engine/graphics3/trail/trail_tube_write_geometry.js +0 -119
- 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
|
@@ -6,14 +6,8 @@ import { Deque } from "../../../../core/collection/queue/Deque.js";
|
|
|
6
6
|
import { round_up } from "../../../../core/math/round_up.js";
|
|
7
7
|
import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
8
8
|
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
BVH_NODE_BOUNDS_WORD,
|
|
12
|
-
BVH_NODE_CHILD_1_WORD,
|
|
13
|
-
BVH_NODE_CHILD_2_WORD
|
|
14
|
-
} from "../../gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js";
|
|
9
|
+
import { BVH8_INODE_STRUCT } from "../../shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js";
|
|
15
10
|
import { ensure_buffer_capacity } from "../make_temp_gpu_buffer.js";
|
|
16
|
-
import { bvh2_derive_topology } from "./bvh2_derive_topology.js";
|
|
17
11
|
import { GPUGeometryMeshletsBVH } from "./GPUGeometryMeshletsBVH.js";
|
|
18
12
|
|
|
19
13
|
/**
|
|
@@ -35,12 +29,11 @@ export const BLAS_METADATA_STRUCT = WebGPUStruct.from({
|
|
|
35
29
|
/**
|
|
36
30
|
* Arena node index of the empty tree: what the lookup names for a geometry that has no tree yet.
|
|
37
31
|
*
|
|
38
|
-
* One
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* the arena's end, which is what a record resident over zero bytes used to point at.
|
|
32
|
+
* One node with every slot empty, which is a node of zeroes: no slot holds a triangle or a child, so
|
|
33
|
+
* a query finds nothing in it and has nowhere to go from it. Every traversal reads
|
|
34
|
+
* `blas_lookup[geometry_index]` and starts walking without a null check, so "no tree" has to be a
|
|
35
|
+
* tree — and it must not be whatever tree happens to sit at the arena's end, which is what a record
|
|
36
|
+
* resident over zero bytes used to point at.
|
|
44
37
|
*
|
|
45
38
|
* @type {number}
|
|
46
39
|
*/
|
|
@@ -52,13 +45,6 @@ const DATA_INITIAL_CAPACITY = round_up(1024, DATA_SIZE_ALIGNMENT);
|
|
|
52
45
|
const DATA_GROWTH_STEP = 1024;
|
|
53
46
|
const DATA_GROWTH_MULTIPLIER = 1.2;
|
|
54
47
|
|
|
55
|
-
/**
|
|
56
|
-
* Words of dead shape-arena space below which a re-pack is not worth running, however large the
|
|
57
|
-
* fraction. A scene of a few small topologies churning would otherwise re-pack on every release.
|
|
58
|
-
* @type {number}
|
|
59
|
-
*/
|
|
60
|
-
const SHAPE_ARENA_COMPACT_FLOOR = 4096;
|
|
61
|
-
|
|
62
48
|
/**
|
|
63
49
|
* Regions the node arena's allocator can describe at once — live trees plus the free gaps
|
|
64
50
|
* between them. A scene's live trees are one per geometry plus one per skinned instance.
|
|
@@ -154,68 +140,6 @@ export class GPUGeometryBVHManager {
|
|
|
154
140
|
*/
|
|
155
141
|
#allocator;
|
|
156
142
|
|
|
157
|
-
/**
|
|
158
|
-
* Parent of every node, and the node index of every leaf, for each *distinct topology* — one
|
|
159
|
-
* arena each, addressed like {@link #buffer_data}.
|
|
160
|
-
*
|
|
161
|
-
* Separate from the nodes because they are separate things. Node bounds are per instance: a
|
|
162
|
-
* skinned clone's are its own, recomputed every frame from its own deformed vertices. Parents
|
|
163
|
-
* and leaf positions are the shape of the tree, and every copy of a geometry has the same
|
|
164
|
-
* shape, so one derivation serves all of them.
|
|
165
|
-
*
|
|
166
|
-
* @type {GPUBuffer}
|
|
167
|
-
*/
|
|
168
|
-
#buffer_parents;
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* @returns {GPUBuffer}
|
|
172
|
-
*/
|
|
173
|
-
get buffer_parents() {
|
|
174
|
-
return this.#buffer_parents;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
* @type {GPUBuffer}
|
|
179
|
-
*/
|
|
180
|
-
#buffer_leaf_nodes;
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* @returns {GPUBuffer}
|
|
184
|
-
*/
|
|
185
|
-
get buffer_leaf_nodes() {
|
|
186
|
-
return this.#buffer_leaf_nodes;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
#buffer_parents_end = 0;
|
|
190
|
-
#buffer_leaf_nodes_end = 0;
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* How many words of each shape arena live topologies actually occupy.
|
|
194
|
-
*
|
|
195
|
-
* The arenas are bump pointers, and a released topology used to leave its words where they
|
|
196
|
-
* were — the same story the node arena was moved off a bump pointer to fix (MEEP-009), left
|
|
197
|
-
* behind in the two arenas beside it. Streaming distinct geometries therefore grew both
|
|
198
|
-
* buffers forever: a district-by-district tour of a converted map, where the whole set is
|
|
199
|
-
* hundreds of thousands of distinct geometries, grows them monotonically until `createBuffer`
|
|
200
|
-
* refuses.
|
|
201
|
-
*
|
|
202
|
-
* The difference between this and the end pointer is the waste, and
|
|
203
|
-
* {@link #compact_shape_arenas} closes it when it is worth closing.
|
|
204
|
-
*
|
|
205
|
-
* @type {number}
|
|
206
|
-
*/
|
|
207
|
-
#buffer_parents_used = 0;
|
|
208
|
-
|
|
209
|
-
/** @type {number} */
|
|
210
|
-
#buffer_leaf_nodes_used = 0;
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Topology by the geometry whose nodes it was derived from, shared by every copy of it.
|
|
214
|
-
*
|
|
215
|
-
* @type {Map<MeshletGeometry, {parents_offset: number, leaf_nodes_offset: number, leaf_count: number, node_count: number, resident: boolean, derived: {parents: Uint32Array, leaf_nodes: Uint32Array}}>}
|
|
216
|
-
*/
|
|
217
|
-
#topology = new Map();
|
|
218
|
-
|
|
219
143
|
/**
|
|
220
144
|
*
|
|
221
145
|
* @type {number}
|
|
@@ -224,7 +148,7 @@ export class GPUGeometryBVHManager {
|
|
|
224
148
|
|
|
225
149
|
/**
|
|
226
150
|
* Moves whenever the answer of {@link get_refit_target} may have changed for any owner: a tree's
|
|
227
|
-
* nodes uploaded,
|
|
151
|
+
* nodes uploaded, an owner removed. Registration alone does not move it —
|
|
228
152
|
* nothing a refit can read has changed until {@link update} runs.
|
|
229
153
|
*
|
|
230
154
|
* A consumer that builds tables from those answers keeps them until this moves. Coarse on
|
|
@@ -278,37 +202,17 @@ export class GPUGeometryBVHManager {
|
|
|
278
202
|
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE,
|
|
279
203
|
});
|
|
280
204
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
size: DATA_INITIAL_CAPACITY,
|
|
284
|
-
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE,
|
|
285
|
-
});
|
|
286
|
-
|
|
287
|
-
this.#buffer_leaf_nodes = device.createBuffer({
|
|
288
|
-
label: "GPUGeometryBVHManager/leaf_nodes",
|
|
289
|
-
size: DATA_INITIAL_CAPACITY,
|
|
290
|
-
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC | GPUBufferUsage.STORAGE,
|
|
291
|
-
});
|
|
292
|
-
|
|
293
|
-
// Node 0 is the empty tree, reserved before anything is appended — see BLAS_EMPTY_TREE_ADDRESS.
|
|
294
|
-
const empty_tree = new Uint32Array(BVH2_NODE_STRUCT.size / Uint32Array.BYTES_PER_ELEMENT);
|
|
295
|
-
|
|
296
|
-
new Float32Array(empty_tree.buffer, BVH_NODE_BOUNDS_WORD * Uint32Array.BYTES_PER_ELEMENT, 6)
|
|
297
|
-
.set([Infinity, Infinity, Infinity, -Infinity, -Infinity, -Infinity]);
|
|
298
|
-
|
|
299
|
-
empty_tree[BVH_NODE_CHILD_1_WORD] = BLAS_EMPTY_TREE_ADDRESS;
|
|
300
|
-
empty_tree[BVH_NODE_CHILD_2_WORD] = BLAS_EMPTY_TREE_ADDRESS;
|
|
301
|
-
|
|
302
|
-
device.queue.writeBuffer(this.#buffer_data, BLAS_EMPTY_TREE_ADDRESS * BVH2_NODE_STRUCT.size, empty_tree);
|
|
205
|
+
// Node 0 is the empty tree — see BLAS_EMPTY_TREE_ADDRESS. A buffer is created zeroed, and the
|
|
206
|
+
// region is taken out of circulation below before anything else can be put there.
|
|
303
207
|
|
|
304
208
|
// Capacity is what the buffer actually holds, not what was asked for — `createBuffer`
|
|
305
209
|
// rounds up, and an allocator sized below its arena just refuses allocations that fit.
|
|
306
|
-
this.#node_capacity = Math.floor(this.#buffer_data.size /
|
|
210
|
+
this.#node_capacity = Math.floor(this.#buffer_data.size / BVH8_INODE_STRUCT.size);
|
|
307
211
|
|
|
308
212
|
this.#allocator = new OffsetAllocator(this.#node_capacity, NODE_ALLOCATION_LIMIT);
|
|
309
213
|
|
|
310
|
-
// Take node 0 out of circulation permanently: it
|
|
311
|
-
//
|
|
214
|
+
// Take node 0 out of circulation permanently: it is the empty tree, and a real tree handed
|
|
215
|
+
// that region would overwrite what every unresident geometry traces.
|
|
312
216
|
const empty_tree_region = this.#allocator.allocate(1);
|
|
313
217
|
|
|
314
218
|
assert.equal(
|
|
@@ -337,14 +241,6 @@ export class GPUGeometryBVHManager {
|
|
|
337
241
|
r += this.#buffer_data.size;
|
|
338
242
|
}
|
|
339
243
|
|
|
340
|
-
if (this.#buffer_parents) {
|
|
341
|
-
r += this.#buffer_parents.size;
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
if (this.#buffer_leaf_nodes) {
|
|
345
|
-
r += this.#buffer_leaf_nodes.size;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
244
|
return r;
|
|
349
245
|
}
|
|
350
246
|
|
|
@@ -352,8 +248,8 @@ export class GPUGeometryBVHManager {
|
|
|
352
248
|
* Bytes of the node arena that trees actually occupy: its capacity, less every region
|
|
353
249
|
* {@link #allocator} still holds free.
|
|
354
250
|
*
|
|
355
|
-
* Beside {@link gpu_memory_usage}, which is what the
|
|
356
|
-
* in them. The gap between the two is what a released tree gives back and what the next tree
|
|
251
|
+
* Beside {@link gpu_memory_usage}, which is what the arena and the lookup cost whether or not
|
|
252
|
+
* anything is in them. The gap between the two is what a released tree gives back and what the next tree
|
|
357
253
|
* of that size takes, so it is the one worth watching.
|
|
358
254
|
*
|
|
359
255
|
* @returns {number} in bytes
|
|
@@ -361,22 +257,20 @@ export class GPUGeometryBVHManager {
|
|
|
361
257
|
get gpu_memory_usage_occupied() {
|
|
362
258
|
const free_nodes = this.#allocator.storageReport().totalFreeSpace;
|
|
363
259
|
|
|
364
|
-
return (this.#node_capacity - free_nodes) *
|
|
260
|
+
return (this.#node_capacity - free_nodes) * BVH8_INODE_STRUCT.size;
|
|
365
261
|
}
|
|
366
262
|
|
|
367
263
|
/**
|
|
368
|
-
* The tree belonging to `owner`, registered
|
|
264
|
+
* The tree belonging to `owner`, registered as a copy of `source`'s if it does not exist yet.
|
|
369
265
|
*
|
|
370
266
|
* Two arguments rather than one because those are two different questions. `owner` is the
|
|
371
267
|
* identity the tree is looked up by; `source` is the geometry whose nodes it starts as. They
|
|
372
268
|
* coincide for anything that owns its geometry outright, and they do not for a per-instance
|
|
373
|
-
* copy — a skinned clone deforms its own vertices, so its
|
|
374
|
-
* written into the tree everyone else is tracing
|
|
375
|
-
* source's. Keeping the two separate is what lets one derivation serve every copy.
|
|
269
|
+
* copy — a skinned clone deforms its own vertices, so its boxes are its own and cannot be
|
|
270
|
+
* written into the tree everyone else is tracing.
|
|
376
271
|
*
|
|
377
272
|
* @param {object} owner identity to look this tree up by — a geometry, a clone's metadata row
|
|
378
|
-
* @param {MeshletGeometry} source geometry whose nodes this tree
|
|
379
|
-
* bounds from
|
|
273
|
+
* @param {MeshletGeometry} source geometry whose nodes this tree starts as
|
|
380
274
|
* @returns {GPUGeometryMeshletsBVH}
|
|
381
275
|
*/
|
|
382
276
|
obtain(owner, source) {
|
|
@@ -397,8 +291,7 @@ export class GPUGeometryBVHManager {
|
|
|
397
291
|
*
|
|
398
292
|
* `owner` is the identity the tree is looked up by and `source` is the geometry whose nodes it
|
|
399
293
|
* holds. For an ordinary geometry those are the same object. For a per-instance copy they are
|
|
400
|
-
* not: the copy needs a node region of its own, because its
|
|
401
|
-
* the *shape* it is a copy of belongs to the source.
|
|
294
|
+
* not: the copy needs a node region of its own, because its boxes move independently.
|
|
402
295
|
*
|
|
403
296
|
* @param {object} owner
|
|
404
297
|
* @param {MeshletGeometry} source
|
|
@@ -411,7 +304,7 @@ export class GPUGeometryBVHManager {
|
|
|
411
304
|
// No bytes are taken now. The upload reads the geometry's tree as it is *then*, so a tree
|
|
412
305
|
// that arrives after registration is uploaded once it exists rather than never — and a
|
|
413
306
|
// geometry with none is not resident over nothing.
|
|
414
|
-
bvh.
|
|
307
|
+
bvh.source = source;
|
|
415
308
|
|
|
416
309
|
this.#map.set(owner, bvh);
|
|
417
310
|
|
|
@@ -420,69 +313,26 @@ export class GPUGeometryBVHManager {
|
|
|
420
313
|
return bvh;
|
|
421
314
|
}
|
|
422
315
|
|
|
423
|
-
/**
|
|
424
|
-
* The parents/leaf-nodes derivation for a geometry, made once and shared by every tree that is
|
|
425
|
-
* a copy of it.
|
|
426
|
-
*
|
|
427
|
-
* @param {MeshletGeometry} source
|
|
428
|
-
* @returns {object} the topology record
|
|
429
|
-
*/
|
|
430
|
-
#obtain_topology(source) {
|
|
431
|
-
let topology = this.#topology.get(source);
|
|
432
|
-
|
|
433
|
-
if (topology !== undefined) {
|
|
434
|
-
return topology;
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
// Derivation waits for {@link #upload_pending_topology}, beside the residency decision it
|
|
438
|
-
// feeds. A geometry can be registered before its BLAS bytes exist — nothing has to have
|
|
439
|
-
// built one yet — and a record that says "not resident" is the honest answer for that,
|
|
440
|
-
// rather than an empty derivation cached forever.
|
|
441
|
-
topology = {
|
|
442
|
-
source,
|
|
443
|
-
leaf_count: 0,
|
|
444
|
-
node_count: 0,
|
|
445
|
-
parents_offset: 0,
|
|
446
|
-
leaf_nodes_offset: 0,
|
|
447
|
-
resident: false,
|
|
448
|
-
};
|
|
449
|
-
|
|
450
|
-
this.#topology.set(source, topology);
|
|
451
|
-
|
|
452
|
-
return topology;
|
|
453
|
-
}
|
|
454
|
-
|
|
455
316
|
/**
|
|
456
317
|
* Everything a refit needs to find a resident tree, or `undefined` while it is not resident.
|
|
457
318
|
*
|
|
458
|
-
*
|
|
459
|
-
*
|
|
460
|
-
* registered before its tree exists is uploaded as nothing — resident over zero bytes, at the
|
|
461
|
-
* arena's end. Its shape is derived later, from the bytes as they are then. Answering with that
|
|
462
|
-
* shape's counts at that record's address would hand a refit whichever tree was appended next,
|
|
463
|
-
* so the answer is withheld until the nodes actually uploaded are the tree the shape describes.
|
|
319
|
+
* The count is of the nodes that were uploaded, not of the geometry's tree as it is now: a
|
|
320
|
+
* refit writes exactly the region the record holds.
|
|
464
321
|
*
|
|
465
322
|
* @param {object} owner the identity passed to {@link obtain}
|
|
466
|
-
* @returns {{
|
|
323
|
+
* @returns {{node_offset: number, node_count: number}|undefined} the arena node the tree's root
|
|
324
|
+
* sits at, and the nodes in the tree
|
|
467
325
|
*/
|
|
468
326
|
get_refit_target(owner) {
|
|
469
327
|
const bvh = this.#map.get(owner);
|
|
470
328
|
|
|
471
|
-
if (bvh === undefined || bvh.released || !bvh.resident
|
|
472
|
-
return undefined;
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
if (bvh.uploaded_byte_length !== bvh.topology.node_count * BVH2_NODE_STRUCT.size) {
|
|
476
|
-
// the nodes in the arena are not the tree the shape was derived from
|
|
329
|
+
if (bvh === undefined || bvh.released || !bvh.resident) {
|
|
477
330
|
return undefined;
|
|
478
331
|
}
|
|
479
332
|
|
|
480
333
|
return {
|
|
481
|
-
|
|
482
|
-
node_count: bvh.
|
|
483
|
-
leaf_count: bvh.topology.leaf_count,
|
|
484
|
-
parents_offset: bvh.topology.parents_offset,
|
|
485
|
-
leaf_nodes_offset: bvh.topology.leaf_nodes_offset,
|
|
334
|
+
node_offset: bvh.address,
|
|
335
|
+
node_count: bvh.uploaded_byte_length / BVH8_INODE_STRUCT.size,
|
|
486
336
|
};
|
|
487
337
|
}
|
|
488
338
|
|
|
@@ -555,134 +405,12 @@ export class GPUGeometryBVHManager {
|
|
|
555
405
|
|
|
556
406
|
this.#map.delete(owner);
|
|
557
407
|
|
|
558
|
-
this.#release_topology_if_orphaned(bvh.topology);
|
|
559
|
-
|
|
560
408
|
// a refit target that answered a moment ago answers `undefined` now
|
|
561
409
|
this.#residency_version += 1;
|
|
562
410
|
|
|
563
411
|
return true;
|
|
564
412
|
}
|
|
565
413
|
|
|
566
|
-
/**
|
|
567
|
-
* Re-pack the shape arenas when enough of them is dead to be worth the pass.
|
|
568
|
-
*
|
|
569
|
-
* Half, over a floor that keeps a handful of small topologies from re-packing on every
|
|
570
|
-
* release. The re-pack is O(resident topologies) and the threshold makes it amortised: each
|
|
571
|
-
* one is paid for by at least as many words released as it moves.
|
|
572
|
-
*/
|
|
573
|
-
#compact_shape_arenas_if_wasteful() {
|
|
574
|
-
const parents_waste = this.#buffer_parents_end - this.#buffer_parents_used;
|
|
575
|
-
const leaf_nodes_waste = this.#buffer_leaf_nodes_end - this.#buffer_leaf_nodes_used;
|
|
576
|
-
|
|
577
|
-
const wasteful = parents_waste > this.#buffer_parents_used
|
|
578
|
-
|| leaf_nodes_waste > this.#buffer_leaf_nodes_used;
|
|
579
|
-
|
|
580
|
-
const worth_it = parents_waste + leaf_nodes_waste >= SHAPE_ARENA_COMPACT_FLOOR;
|
|
581
|
-
|
|
582
|
-
if (wasteful && worth_it) {
|
|
583
|
-
this.#compact_shape_arenas();
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
/**
|
|
588
|
-
* Re-pack both shape arenas so the live topologies sit at the front of them.
|
|
589
|
-
*
|
|
590
|
-
* A derivation is position-independent — it is copied into the arena verbatim and its address
|
|
591
|
-
* is recorded separately, and every consumer reaches it through {@link get_refit_target} —
|
|
592
|
-
* so a topology can be moved by writing it somewhere else and saying where. Nothing is read
|
|
593
|
-
* between the move and the republish that {@link #residency_version} asks for.
|
|
594
|
-
*
|
|
595
|
-
* Rebuilt from the source rather than read back: `bvh2_derive_topology` is a pure function of
|
|
596
|
-
* bytes the record already holds, and a readback would be a frame late.
|
|
597
|
-
*
|
|
598
|
-
* The buffers are not resized. Growing one destroys it, which an open encoder cannot survive,
|
|
599
|
-
* and this is reachable from {@link remove}; shrinking is not worth a copy of the whole arena
|
|
600
|
-
* when the space is about to be reused.
|
|
601
|
-
*/
|
|
602
|
-
#compact_shape_arenas() {
|
|
603
|
-
const queue = this.#device.queue;
|
|
604
|
-
|
|
605
|
-
let parents_end = 0;
|
|
606
|
-
let leaf_nodes_end = 0;
|
|
607
|
-
|
|
608
|
-
for (const topology of this.#topology.values()) {
|
|
609
|
-
if (!topology.resident) {
|
|
610
|
-
continue;
|
|
611
|
-
}
|
|
612
|
-
|
|
613
|
-
const bytes = topology.source.bvh;
|
|
614
|
-
|
|
615
|
-
if (bytes === undefined || bytes.byteLength === 0) {
|
|
616
|
-
// the source lost its tree since; it is no longer resident in any useful sense
|
|
617
|
-
topology.resident = false;
|
|
618
|
-
|
|
619
|
-
continue;
|
|
620
|
-
}
|
|
621
|
-
|
|
622
|
-
const { parents, leaf_nodes } = bvh2_derive_topology(bytes);
|
|
623
|
-
|
|
624
|
-
topology.parents_offset = parents_end;
|
|
625
|
-
topology.leaf_nodes_offset = leaf_nodes_end;
|
|
626
|
-
|
|
627
|
-
queue.writeBuffer(
|
|
628
|
-
this.#buffer_parents,
|
|
629
|
-
parents_end * Uint32Array.BYTES_PER_ELEMENT,
|
|
630
|
-
parents, 0, parents.length
|
|
631
|
-
);
|
|
632
|
-
|
|
633
|
-
queue.writeBuffer(
|
|
634
|
-
this.#buffer_leaf_nodes,
|
|
635
|
-
leaf_nodes_end * Uint32Array.BYTES_PER_ELEMENT,
|
|
636
|
-
leaf_nodes, 0, leaf_nodes.length
|
|
637
|
-
);
|
|
638
|
-
|
|
639
|
-
parents_end += parents.length;
|
|
640
|
-
leaf_nodes_end += leaf_nodes.length;
|
|
641
|
-
}
|
|
642
|
-
|
|
643
|
-
this.#buffer_parents_end = parents_end;
|
|
644
|
-
this.#buffer_leaf_nodes_end = leaf_nodes_end;
|
|
645
|
-
|
|
646
|
-
this.#buffer_parents_used = parents_end;
|
|
647
|
-
this.#buffer_leaf_nodes_used = leaf_nodes_end;
|
|
648
|
-
|
|
649
|
-
// every offset just moved
|
|
650
|
-
this.#residency_version += 1;
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
/**
|
|
654
|
-
* Drop a shape once the last tree that had it is gone.
|
|
655
|
-
*
|
|
656
|
-
* The map entry holds a strong reference to the geometry it is keyed by, so leaving it would
|
|
657
|
-
* keep every geometry a scene ever loaded alive for as long as the manager is — and its words
|
|
658
|
-
* in the two shape arenas, which are bump pointers, are given back by re-packing rather than by
|
|
659
|
-
* a free list. See {@link #buffer_parents_used}.
|
|
660
|
-
*
|
|
661
|
-
* @param {object} topology
|
|
662
|
-
*/
|
|
663
|
-
#release_topology_if_orphaned(topology) {
|
|
664
|
-
for (const bvh of this.#map.values()) {
|
|
665
|
-
if (bvh.topology === topology) {
|
|
666
|
-
return;
|
|
667
|
-
}
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
for (const [source, candidate] of this.#topology) {
|
|
671
|
-
if (candidate === topology) {
|
|
672
|
-
this.#topology.delete(source);
|
|
673
|
-
|
|
674
|
-
if (candidate.resident) {
|
|
675
|
-
this.#buffer_parents_used -= candidate.node_count;
|
|
676
|
-
this.#buffer_leaf_nodes_used -= candidate.leaf_count;
|
|
677
|
-
|
|
678
|
-
this.#compact_shape_arenas_if_wasteful();
|
|
679
|
-
}
|
|
680
|
-
|
|
681
|
-
return;
|
|
682
|
-
}
|
|
683
|
-
}
|
|
684
|
-
}
|
|
685
|
-
|
|
686
414
|
/**
|
|
687
415
|
* Make the node arena hold at least `size` nodes, keeping {@link #allocator} the same size as
|
|
688
416
|
* the buffer it describes.
|
|
@@ -703,7 +431,7 @@ export class GPUGeometryBVHManager {
|
|
|
703
431
|
this.#buffer_data = ensure_buffer_capacity(
|
|
704
432
|
this.#device,
|
|
705
433
|
this.#buffer_data,
|
|
706
|
-
size *
|
|
434
|
+
size * BVH8_INODE_STRUCT.size,
|
|
707
435
|
DATA_SIZE_ALIGNMENT,
|
|
708
436
|
DATA_GROWTH_STEP,
|
|
709
437
|
DATA_GROWTH_MULTIPLIER
|
|
@@ -712,7 +440,7 @@ export class GPUGeometryBVHManager {
|
|
|
712
440
|
// What the buffer actually came back as, not what was asked for: the helper grows by at
|
|
713
441
|
// least a step and rounds up, and arena space the allocator does not know about is space
|
|
714
442
|
// nothing can ever be put in.
|
|
715
|
-
this.#node_capacity = Math.floor(this.#buffer_data.size /
|
|
443
|
+
this.#node_capacity = Math.floor(this.#buffer_data.size / BVH8_INODE_STRUCT.size);
|
|
716
444
|
|
|
717
445
|
this.#allocator.grow(this.#node_capacity);
|
|
718
446
|
}
|
|
@@ -770,96 +498,11 @@ export class GPUGeometryBVHManager {
|
|
|
770
498
|
}
|
|
771
499
|
|
|
772
500
|
/**
|
|
773
|
-
*
|
|
774
|
-
*
|
|
775
|
-
* Queue-free: the map is small (one entry per distinct geometry) and a `resident` flag says what
|
|
776
|
-
* is left to do, which is one fewer thing to keep in step than a second queue would be.
|
|
777
|
-
*
|
|
778
|
-
* @returns {boolean} whether any shape became resident
|
|
779
|
-
*/
|
|
780
|
-
#upload_pending_topology() {
|
|
781
|
-
const queue = this.#device.queue;
|
|
782
|
-
|
|
783
|
-
let uploaded = false;
|
|
784
|
-
|
|
785
|
-
for (const topology of this.#topology.values()) {
|
|
786
|
-
if (topology.resident) {
|
|
787
|
-
continue;
|
|
788
|
-
}
|
|
789
|
-
|
|
790
|
-
const bytes = topology.source.bvh;
|
|
791
|
-
|
|
792
|
-
if (bytes === undefined || bytes.byteLength === 0) {
|
|
793
|
-
// no tree to take the shape of yet; try again next time
|
|
794
|
-
continue;
|
|
795
|
-
}
|
|
796
|
-
|
|
797
|
-
const { parents, leaf_nodes } = bvh2_derive_topology(bytes);
|
|
798
|
-
|
|
799
|
-
this.#buffer_parents = ensure_buffer_capacity(
|
|
800
|
-
this.#device,
|
|
801
|
-
this.#buffer_parents,
|
|
802
|
-
(this.#buffer_parents_end + parents.length) * Uint32Array.BYTES_PER_ELEMENT,
|
|
803
|
-
DATA_SIZE_ALIGNMENT,
|
|
804
|
-
DATA_GROWTH_STEP,
|
|
805
|
-
DATA_GROWTH_MULTIPLIER
|
|
806
|
-
);
|
|
807
|
-
|
|
808
|
-
this.#buffer_leaf_nodes = ensure_buffer_capacity(
|
|
809
|
-
this.#device,
|
|
810
|
-
this.#buffer_leaf_nodes,
|
|
811
|
-
(this.#buffer_leaf_nodes_end + leaf_nodes.length) * Uint32Array.BYTES_PER_ELEMENT,
|
|
812
|
-
DATA_SIZE_ALIGNMENT,
|
|
813
|
-
DATA_GROWTH_STEP,
|
|
814
|
-
DATA_GROWTH_MULTIPLIER
|
|
815
|
-
);
|
|
816
|
-
|
|
817
|
-
topology.parents_offset = this.#buffer_parents_end;
|
|
818
|
-
topology.leaf_nodes_offset = this.#buffer_leaf_nodes_end;
|
|
819
|
-
|
|
820
|
-
queue.writeBuffer(
|
|
821
|
-
this.#buffer_parents,
|
|
822
|
-
topology.parents_offset * Uint32Array.BYTES_PER_ELEMENT,
|
|
823
|
-
parents, 0, parents.length
|
|
824
|
-
);
|
|
825
|
-
|
|
826
|
-
queue.writeBuffer(
|
|
827
|
-
this.#buffer_leaf_nodes,
|
|
828
|
-
topology.leaf_nodes_offset * Uint32Array.BYTES_PER_ELEMENT,
|
|
829
|
-
leaf_nodes, 0, leaf_nodes.length
|
|
830
|
-
);
|
|
831
|
-
|
|
832
|
-
this.#buffer_parents_end += parents.length;
|
|
833
|
-
this.#buffer_leaf_nodes_end += leaf_nodes.length;
|
|
834
|
-
|
|
835
|
-
this.#buffer_parents_used += parents.length;
|
|
836
|
-
this.#buffer_leaf_nodes_used += leaf_nodes.length;
|
|
837
|
-
|
|
838
|
-
topology.leaf_count = leaf_nodes.length;
|
|
839
|
-
// slots, not tree nodes — the arena numbers a tree's nodes with the free list's holes
|
|
840
|
-
// in, and a refit's arrival counters are indexed by that numbering
|
|
841
|
-
topology.node_count = parents.length;
|
|
842
|
-
topology.resident = true;
|
|
843
|
-
|
|
844
|
-
uploaded = true;
|
|
845
|
-
}
|
|
846
|
-
|
|
847
|
-
return uploaded;
|
|
848
|
-
}
|
|
849
|
-
|
|
850
|
-
/**
|
|
851
|
-
* Bring the arenas up to date with everything registered since the last call, and move the
|
|
501
|
+
* Bring the arena up to date with everything registered since the last call, and move the
|
|
852
502
|
* residency version if anything a refit reads has changed.
|
|
853
|
-
*
|
|
854
|
-
* Shapes first, and as their own question: they are not behind the node queue, so a frame in
|
|
855
|
-
* which a shape arrives for an already-uploaded record still uploads it — and still moves the
|
|
856
|
-
* version, because that record's refit answer has changed all the same.
|
|
857
503
|
*/
|
|
858
504
|
update() {
|
|
859
|
-
|
|
860
|
-
const nodes_uploaded = this.#upload_pending_nodes();
|
|
861
|
-
|
|
862
|
-
if (topology_uploaded || nodes_uploaded) {
|
|
505
|
+
if (this.#upload_pending_nodes()) {
|
|
863
506
|
this.#residency_version += 1;
|
|
864
507
|
}
|
|
865
508
|
}
|
|
@@ -891,7 +534,7 @@ export class GPUGeometryBVHManager {
|
|
|
891
534
|
has_work = true;
|
|
892
535
|
break;
|
|
893
536
|
}
|
|
894
|
-
const bytes = record.
|
|
537
|
+
const bytes = record.source.bvh;
|
|
895
538
|
if (bytes !== undefined && bytes.byteLength > 0) {
|
|
896
539
|
has_work = true;
|
|
897
540
|
break;
|
|
@@ -918,7 +561,7 @@ export class GPUGeometryBVHManager {
|
|
|
918
561
|
|
|
919
562
|
if (record.released) { continue; }
|
|
920
563
|
|
|
921
|
-
const bytes = record.
|
|
564
|
+
const bytes = record.source.bvh;
|
|
922
565
|
|
|
923
566
|
if (bytes === undefined || bytes.byteLength === 0) {
|
|
924
567
|
// no tree yet; try again next time
|
|
@@ -927,7 +570,7 @@ export class GPUGeometryBVHManager {
|
|
|
927
570
|
continue;
|
|
928
571
|
}
|
|
929
572
|
|
|
930
|
-
const node_count = bytes.byteLength /
|
|
573
|
+
const node_count = bytes.byteLength / BVH8_INODE_STRUCT.size;
|
|
931
574
|
|
|
932
575
|
assert.isNonNegativeInteger(node_count, "node_count");
|
|
933
576
|
|
|
@@ -957,7 +600,7 @@ export class GPUGeometryBVHManager {
|
|
|
957
600
|
// Every region first, while growing is still allowed to replace the buffer — see
|
|
958
601
|
// #allocate_nodes. `used_node_count` is only the total; the regions need not be adjacent.
|
|
959
602
|
for (const upload of uploads) {
|
|
960
|
-
upload.allocation = this.#allocate_nodes(upload.bytes.byteLength /
|
|
603
|
+
upload.allocation = this.#allocate_nodes(upload.bytes.byteLength / BVH8_INODE_STRUCT.size);
|
|
961
604
|
}
|
|
962
605
|
|
|
963
606
|
const device = this.#device;
|
|
@@ -991,12 +634,12 @@ export class GPUGeometryBVHManager {
|
|
|
991
634
|
record.address = allocation.offset;
|
|
992
635
|
record.resident = true;
|
|
993
636
|
record.bvh = bytes;
|
|
994
|
-
// what actually went into the arena,
|
|
637
|
+
// what actually went into the arena, which is what a refit of this record covers
|
|
995
638
|
record.uploaded_byte_length = bytes.byteLength;
|
|
996
639
|
|
|
997
640
|
encoder.copyBufferToBuffer(
|
|
998
641
|
temp_data_buffer, offset,
|
|
999
|
-
this.#buffer_data, allocation.offset *
|
|
642
|
+
this.#buffer_data, allocation.offset * BVH8_INODE_STRUCT.size,
|
|
1000
643
|
bytes.byteLength
|
|
1001
644
|
);
|
|
1002
645
|
}
|
|
@@ -1010,13 +653,11 @@ export class GPUGeometryBVHManager {
|
|
|
1010
653
|
}
|
|
1011
654
|
|
|
1012
655
|
/**
|
|
1013
|
-
* Release the arena and
|
|
656
|
+
* Release the arena and the lookup. For the geometry manager's own teardown: nothing is
|
|
1014
657
|
* obtained, uploaded or traced afterwards. Safe to call twice.
|
|
1015
658
|
*/
|
|
1016
659
|
destroy() {
|
|
1017
660
|
this.#buffer_metadata.destroy();
|
|
1018
661
|
this.#buffer_data.destroy();
|
|
1019
|
-
this.#buffer_parents.destroy();
|
|
1020
|
-
this.#buffer_leaf_nodes.destroy();
|
|
1021
662
|
}
|
|
1022
663
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @typedef {import("../../../../core/binary/allocator/OffsetAllocator.js").Allocation} Allocation
|
|
3
|
+
* @typedef {import("../MeshletGeometry.js").MeshletGeometry} MeshletGeometry
|
|
3
4
|
*/
|
|
4
5
|
export class GPUGeometryMeshletsBVH {
|
|
5
6
|
/**
|
|
@@ -26,12 +27,11 @@ export class GPUGeometryMeshletsBVH {
|
|
|
26
27
|
*/
|
|
27
28
|
allocation: Allocation | null;
|
|
28
29
|
/**
|
|
29
|
-
* The
|
|
30
|
-
* geometry, because a copy differs only in where its bounds are.
|
|
30
|
+
* The geometry whose tree this one starts as a copy of.
|
|
31
31
|
*
|
|
32
|
-
* @type {
|
|
32
|
+
* @type {MeshletGeometry}
|
|
33
33
|
*/
|
|
34
|
-
|
|
34
|
+
source: MeshletGeometry;
|
|
35
35
|
/**
|
|
36
36
|
* Whether {@link address} means anything yet. A record is registered before its nodes are
|
|
37
37
|
* resident, and an address of 0 is a perfectly good arena position, so "not yet uploaded"
|
|
@@ -42,9 +42,7 @@ export class GPUGeometryMeshletsBVH {
|
|
|
42
42
|
resident: boolean;
|
|
43
43
|
/**
|
|
44
44
|
* Bytes of {@link bvh} that {@link GPUGeometryBVHManager#update} actually copied into the arena
|
|
45
|
-
* at {@link address}
|
|
46
|
-
* registered before its geometry had a tree is uploaded as nothing, and a shape derived later,
|
|
47
|
-
* from the bytes that exist by then, must not be answered for at that empty region.
|
|
45
|
+
* at {@link address}: the region a refit of this tree covers.
|
|
48
46
|
*
|
|
49
47
|
* @type {number}
|
|
50
48
|
*/
|
|
@@ -58,4 +56,5 @@ export class GPUGeometryMeshletsBVH {
|
|
|
58
56
|
released: boolean;
|
|
59
57
|
}
|
|
60
58
|
export type Allocation = import("../../../../core/binary/allocator/OffsetAllocator.js").Allocation;
|
|
59
|
+
export type MeshletGeometry = import("../MeshletGeometry.js").MeshletGeometry;
|
|
61
60
|
//# sourceMappingURL=GPUGeometryMeshletsBVH.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUGeometryMeshletsBVH.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.js"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"GPUGeometryMeshletsBVH.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.js"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;IAEI;;;;;;OAMG;IACH,KAFU,WAAW,GAAC,SAAS,CAE3B;IAEJ;;;;;OAKG;IACH,SAFU,MAAM,CAEJ;IAEZ;;;;;;OAMG;IACH,YAFU,UAAU,GAAC,IAAI,CAEP;IAElB;;;;OAIG;IACH,QAFU,eAAe,CAElB;IAEP;;;;;;OAMG;IACH,UAFU,OAAO,CAEA;IAEjB;;;;;OAKG;IACH,sBAFU,MAAM,CAES;IAEzB;;;;;OAKG;IACH,UAFU,OAAO,CAEA;CACpB;yBA/DY,OAAO,sDAAsD,EAAE,UAAU;8BACzE,OAAO,uBAAuB,EAAE,eAAe"}
|