@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
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import { assert } from "../../../../../core/assert.js";
|
|
2
|
+
import { GPUTextureUsage } from "../../../../descriptor/GPUTextureUsage.js";
|
|
3
|
+
import { TextureViewDescriptor } from "../../../../descriptor/texture/TextureViewDescriptor.js";
|
|
4
|
+
import { TextureResourceDescriptor } from "../../../../device/graph/TextureResourceDescriptor.js";
|
|
5
|
+
import { DEFAULT_DEPTH_TEXTURE_VIEW } from "../../../depth/DEFAULT_DEPTH_TEXTURE_VIEW.js";
|
|
6
|
+
import { STATIC_GRAPHICS_ENGINE_ASSETS } from "../../../STATIC_GRAPHICS_ENGINE_ASSETS.js";
|
|
7
|
+
import { SAMPLER_LINEAR_UPSCALE } from "../../../texture/SAMPLER_LINEAR_UPSCALE.js";
|
|
8
|
+
import { AVBOIT_UNLIT_DRAW_PASS_GROUP } from "./avboit_unlit_draw.js";
|
|
9
|
+
import { AVBOIT_UNLIT_SPLAT_PASS_GROUP, AVBOIT_UNLIT_SPLAT_SAMPLES } from "./avboit_unlit_splat.js";
|
|
10
|
+
import { AVBOIT_SPLAT_DUMMY_FORMAT, AVBOIT_SPLAT_VOLUME_GROUP } from "./shader_avboit_splat.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The passes an `AVBOITSideChannel` of unlit straight-alpha geometry records for its splat and its draw,
|
|
14
|
+
* with everything but the draws themselves in one place: the attachments, the multisampled target of
|
|
15
|
+
* the splat, the pass-level bind groups and the frame-graph reads and writes. A channel supplies a
|
|
16
|
+
* pipeline built by `avboit_unlit_splat_pipeline` / `avboit_unlit_draw_pipeline`, the graph handles its
|
|
17
|
+
* own draws read, and a `record` callback that issues them; the dynamic meshes and the trails draw
|
|
18
|
+
* through the same passes this way, with different vertex stages.
|
|
19
|
+
*
|
|
20
|
+
* Order does not matter to either pass — the volume and the accumulators are sums — which is why
|
|
21
|
+
* nothing here sorts.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/** The accumulators' and the splat target's view: one mip, the one the frame draws into. */
|
|
25
|
+
const COLOR_VIEW = TextureViewDescriptor.from({ mipLevelCount: 1, baseMipLevel: 0 });
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @param {import("../../../shader/resource/ShaderResourceSetDescriptor.js").ShaderResourceSetDescriptor} resources
|
|
29
|
+
* @param {import("../../../shader/resource/ShaderResourceGroupDescriptor.js").ShaderResourceGroupDescriptor} group
|
|
30
|
+
* @returns {number} where the shader declares `group`
|
|
31
|
+
*/
|
|
32
|
+
function group_index(resources, group) {
|
|
33
|
+
const index = resources.groups.indexOf(group);
|
|
34
|
+
|
|
35
|
+
assert.notEqual(index, -1, "the shader does not bind this pass group");
|
|
36
|
+
|
|
37
|
+
return index;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Read every handle of `inputs` in `pass`, keeping the names.
|
|
42
|
+
*
|
|
43
|
+
* @param {object} pass the pass builder
|
|
44
|
+
* @param {Object<string, number>} inputs
|
|
45
|
+
* @returns {Object<string, number>} the handles as the pass reads them
|
|
46
|
+
*/
|
|
47
|
+
function read_inputs(pass, inputs) {
|
|
48
|
+
const read = {};
|
|
49
|
+
|
|
50
|
+
for (const name of Object.keys(inputs)) {
|
|
51
|
+
read[name] = pass.read(inputs[name]);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return read;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @param {Object<string, number>} handles
|
|
59
|
+
* @param {object} resources the pass's resolved resources
|
|
60
|
+
* @returns {Object<string, *>} the same names, resolved
|
|
61
|
+
*/
|
|
62
|
+
function resolve_inputs(handles, resources) {
|
|
63
|
+
const resolved = {};
|
|
64
|
+
|
|
65
|
+
for (const name of Object.keys(handles)) {
|
|
66
|
+
resolved[name] = resources.get(handles[name]);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return resolved;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Splat a channel's unlit geometry into the voxel volume.
|
|
74
|
+
*
|
|
75
|
+
* The raster is multisampled ({@link AVBOIT_UNLIT_SPLAT_SAMPLES}), so it cannot use the volume's
|
|
76
|
+
* single-sampled splat target: the pass makes its own at the volume's resolution, never written,
|
|
77
|
+
* cleared and discarded, and hands the volume's back untouched.
|
|
78
|
+
*
|
|
79
|
+
* @param {object} params
|
|
80
|
+
* @param {import("../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} params.graph
|
|
81
|
+
* @param {string} params.label the pass's label; its target is labelled after it
|
|
82
|
+
* @param {import("../../../../descriptor/pipeline/render/RenderPipelineDescriptor.js").RenderPipelineDescriptor} params.pipeline
|
|
83
|
+
* from `avboit_unlit_splat_pipeline`
|
|
84
|
+
* @param {import("../../../shader/resource/ShaderResourceSetDescriptor.js").ShaderResourceSetDescriptor} params.resources
|
|
85
|
+
* the pipeline's shader resources
|
|
86
|
+
* @param {Object<string, number>} params.inputs graph handles the channel's draws read, by name
|
|
87
|
+
* @param {number} params.warp graph handle
|
|
88
|
+
* @param {number[]} params.voxel_resolution the volume's width and height, which the raster is
|
|
89
|
+
* @param {{extinction: number, overflow: number, dummy: number}} params.volume the volume, to add to
|
|
90
|
+
* @param {function(): boolean} params.is_empty asked when the pass executes; `true` records no render pass
|
|
91
|
+
* @param {function(GPURenderPassEncoder, GraphicsContext, Object<string, *>): void} params.record issues
|
|
92
|
+
* the draws into the open pass, whose pass-level groups are set, with `inputs` resolved
|
|
93
|
+
* @returns {{extinction: number, overflow: number, dummy: number}} the volume after the write
|
|
94
|
+
*/
|
|
95
|
+
export function graph_avboit_unlit_splat({
|
|
96
|
+
graph,
|
|
97
|
+
label,
|
|
98
|
+
pipeline,
|
|
99
|
+
resources,
|
|
100
|
+
inputs,
|
|
101
|
+
warp,
|
|
102
|
+
voxel_resolution,
|
|
103
|
+
volume,
|
|
104
|
+
is_empty,
|
|
105
|
+
record,
|
|
106
|
+
}) {
|
|
107
|
+
assert.isString(label, "label");
|
|
108
|
+
assert.isNonNegativeInteger(warp, "warp");
|
|
109
|
+
assert.isArrayLike(voxel_resolution, "voxel_resolution");
|
|
110
|
+
assert.defined(volume, "volume");
|
|
111
|
+
assert.isFunction(is_empty, "is_empty");
|
|
112
|
+
assert.isFunction(record, "record");
|
|
113
|
+
|
|
114
|
+
const pass_group_index = group_index(resources, AVBOIT_UNLIT_SPLAT_PASS_GROUP);
|
|
115
|
+
const volume_group_index = group_index(resources, AVBOIT_SPLAT_VOLUME_GROUP);
|
|
116
|
+
|
|
117
|
+
function execute(data, frame_resources, context) {
|
|
118
|
+
const encoder = context.encoder;
|
|
119
|
+
const graphics = context.graphics;
|
|
120
|
+
|
|
121
|
+
if (is_empty()) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// By name, never by position (AVBOIT ledger entry 21): the order a shader declares its
|
|
126
|
+
// bindings in is the shader's business.
|
|
127
|
+
const pass_group = AVBOIT_UNLIT_SPLAT_PASS_GROUP.generateBindings({
|
|
128
|
+
warp: frame_resources.get(data.warp),
|
|
129
|
+
}, encoder);
|
|
130
|
+
|
|
131
|
+
const volume_group = AVBOIT_SPLAT_VOLUME_GROUP.generateBindings({
|
|
132
|
+
extinction_volume: frame_resources.get(data.extinction),
|
|
133
|
+
overflow_slice: frame_resources.get(data.overflow),
|
|
134
|
+
}, encoder);
|
|
135
|
+
|
|
136
|
+
// the target is never written; it only sizes the raster and gives it its samples
|
|
137
|
+
const pass_encoder = encoder.constructRenderPass({
|
|
138
|
+
label,
|
|
139
|
+
pipeline,
|
|
140
|
+
// the pass's groups are set once, just below; the draws set their own
|
|
141
|
+
bindings: [],
|
|
142
|
+
colorAttachments: [{
|
|
143
|
+
view: frame_resources.get(data.target).obtainView(COLOR_VIEW),
|
|
144
|
+
loadOp: "clear",
|
|
145
|
+
storeOp: "discard",
|
|
146
|
+
}],
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
graphics.setPipelineBindGroup(pass_encoder, pipeline, pass_group_index, pass_group);
|
|
150
|
+
graphics.setPipelineBindGroup(pass_encoder, pipeline, volume_group_index, volume_group);
|
|
151
|
+
|
|
152
|
+
record(pass_encoder, graphics, resolve_inputs(data.inputs, frame_resources));
|
|
153
|
+
|
|
154
|
+
pass_encoder.end();
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const pass_data = {};
|
|
158
|
+
const pass = graph.add(label, pass_data, execute);
|
|
159
|
+
|
|
160
|
+
pass_data.inputs = read_inputs(pass, inputs);
|
|
161
|
+
pass_data.warp = pass.read(warp);
|
|
162
|
+
|
|
163
|
+
pass.read(volume.extinction);
|
|
164
|
+
pass_data.extinction = pass.write(volume.extinction);
|
|
165
|
+
pass.read(volume.overflow);
|
|
166
|
+
pass_data.overflow = pass.write(volume.overflow);
|
|
167
|
+
|
|
168
|
+
const target = TextureResourceDescriptor.from({
|
|
169
|
+
resolution: voxel_resolution,
|
|
170
|
+
format: AVBOIT_SPLAT_DUMMY_FORMAT,
|
|
171
|
+
usage: GPUTextureUsage.RENDER_ATTACHMENT,
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
// `from` takes no sample count
|
|
175
|
+
target.sampleCount = AVBOIT_UNLIT_SPLAT_SAMPLES;
|
|
176
|
+
|
|
177
|
+
pass_data.target = pass.create(`${label} target`, target);
|
|
178
|
+
|
|
179
|
+
return {
|
|
180
|
+
extinction: pass_data.extinction,
|
|
181
|
+
overflow: pass_data.overflow,
|
|
182
|
+
// not this pass's to touch
|
|
183
|
+
dummy: volume.dummy,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Draw a channel's unlit geometry into the four accumulators, depth-tested against the opaque scene.
|
|
189
|
+
*
|
|
190
|
+
* @param {object} params
|
|
191
|
+
* @param {import("../../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} params.graph
|
|
192
|
+
* @param {string} params.label
|
|
193
|
+
* @param {import("../../../../descriptor/pipeline/render/RenderPipelineDescriptor.js").RenderPipelineDescriptor} params.pipeline
|
|
194
|
+
* from `avboit_unlit_draw_pipeline`
|
|
195
|
+
* @param {import("../../../shader/resource/ShaderResourceSetDescriptor.js").ShaderResourceSetDescriptor} params.resources
|
|
196
|
+
* the pipeline's shader resources
|
|
197
|
+
* @param {Object<string, number>} params.inputs graph handles the channel's draws read, by name
|
|
198
|
+
* @param {import("../../../view/GPUViewContext.js").GPUViewContext} params.view_ctx
|
|
199
|
+
* @param {number} params.depth_texture graph handle of the opaque scene's depth — tested, never written
|
|
200
|
+
* @param {number} params.warp graph handle
|
|
201
|
+
* @param {number} params.integral graph handle of the integral texture
|
|
202
|
+
* @param {number} params.volumetrics_lut graph handle
|
|
203
|
+
* @param {number} params.volumetrics_metadata graph handle
|
|
204
|
+
* @param {{color: number, norm: number, extinction: number, emission: number}} params.accumulators to add to
|
|
205
|
+
* @param {function(): boolean} params.is_empty asked when the pass executes; `true` records no render pass
|
|
206
|
+
* @param {function(GPURenderPassEncoder, GraphicsContext, Object<string, *>): void} params.record issues
|
|
207
|
+
* the draws into the open pass, whose pass-level group is set, with `inputs` resolved
|
|
208
|
+
* @returns {{color: number, norm: number, extinction: number, emission: number}} the accumulators after the draw
|
|
209
|
+
*/
|
|
210
|
+
export function graph_avboit_unlit_draw({
|
|
211
|
+
graph,
|
|
212
|
+
label,
|
|
213
|
+
pipeline,
|
|
214
|
+
resources,
|
|
215
|
+
inputs,
|
|
216
|
+
view_ctx,
|
|
217
|
+
depth_texture,
|
|
218
|
+
warp,
|
|
219
|
+
integral,
|
|
220
|
+
volumetrics_lut,
|
|
221
|
+
volumetrics_metadata,
|
|
222
|
+
accumulators,
|
|
223
|
+
is_empty,
|
|
224
|
+
record,
|
|
225
|
+
}) {
|
|
226
|
+
assert.isString(label, "label");
|
|
227
|
+
assert.isNonNegativeInteger(depth_texture, "depth_texture");
|
|
228
|
+
assert.isNonNegativeInteger(warp, "warp");
|
|
229
|
+
assert.isNonNegativeInteger(integral, "integral");
|
|
230
|
+
assert.defined(accumulators, "accumulators");
|
|
231
|
+
assert.isFunction(is_empty, "is_empty");
|
|
232
|
+
assert.isFunction(record, "record");
|
|
233
|
+
|
|
234
|
+
const pass_group_index = group_index(resources, AVBOIT_UNLIT_DRAW_PASS_GROUP);
|
|
235
|
+
|
|
236
|
+
function execute(data, frame_resources, context) {
|
|
237
|
+
const encoder = context.encoder;
|
|
238
|
+
const graphics = context.graphics;
|
|
239
|
+
|
|
240
|
+
if (is_empty()) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// by name rather than by position, for the reason the splat gives
|
|
245
|
+
const pass_group = AVBOIT_UNLIT_DRAW_PASS_GROUP.generateBindings({
|
|
246
|
+
view: view_ctx.uniform_buffer.buffer,
|
|
247
|
+
warp: frame_resources.get(data.warp),
|
|
248
|
+
tIntegral: frame_resources.get(data.integral).obtainView(),
|
|
249
|
+
sLinear: graphics.samplers.obtain(SAMPLER_LINEAR_UPSCALE),
|
|
250
|
+
volumetrics_metadata: frame_resources.get(data.volumetrics_metadata),
|
|
251
|
+
tVolumetrics: frame_resources.get(data.volumetrics_lut).obtainView(),
|
|
252
|
+
tSTBN_vec3: graphics.textures.obtain(STATIC_GRAPHICS_ENGINE_ASSETS.stbn_vec3).obtainView(),
|
|
253
|
+
}, encoder);
|
|
254
|
+
|
|
255
|
+
const attachment = (handle) => ({
|
|
256
|
+
view: frame_resources.get(handle).obtainView(COLOR_VIEW),
|
|
257
|
+
loadOp: "load",
|
|
258
|
+
storeOp: "store",
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
const pass_encoder = encoder.constructRenderPass({
|
|
262
|
+
label,
|
|
263
|
+
pipeline,
|
|
264
|
+
// the pass's group is set once, just below; the draws set their own
|
|
265
|
+
bindings: [],
|
|
266
|
+
colorAttachments: [
|
|
267
|
+
attachment(data.color),
|
|
268
|
+
attachment(data.norm),
|
|
269
|
+
attachment(data.extinction),
|
|
270
|
+
attachment(data.emission),
|
|
271
|
+
],
|
|
272
|
+
depthStencilAttachment: {
|
|
273
|
+
view: frame_resources.get(data.depth).obtainView(DEFAULT_DEPTH_TEXTURE_VIEW),
|
|
274
|
+
depthReadOnly: true,
|
|
275
|
+
},
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
graphics.setPipelineBindGroup(pass_encoder, pipeline, pass_group_index, pass_group);
|
|
279
|
+
|
|
280
|
+
record(pass_encoder, graphics, resolve_inputs(data.inputs, frame_resources));
|
|
281
|
+
|
|
282
|
+
pass_encoder.end();
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
const pass_data = {};
|
|
286
|
+
const pass = graph.add(label, pass_data, execute);
|
|
287
|
+
|
|
288
|
+
pass_data.inputs = read_inputs(pass, inputs);
|
|
289
|
+
pass_data.depth = pass.read(depth_texture);
|
|
290
|
+
pass_data.warp = pass.read(warp);
|
|
291
|
+
pass_data.integral = pass.read(integral);
|
|
292
|
+
pass_data.volumetrics_lut = pass.read(volumetrics_lut);
|
|
293
|
+
pass_data.volumetrics_metadata = pass.read(volumetrics_metadata);
|
|
294
|
+
|
|
295
|
+
for (const name of ["color", "norm", "extinction", "emission"]) {
|
|
296
|
+
pass.read(accumulators[name]);
|
|
297
|
+
pass_data[name] = pass.write(accumulators[name]);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
return {
|
|
301
|
+
color: pass_data.color,
|
|
302
|
+
norm: pass_data.norm,
|
|
303
|
+
extinction: pass_data.extinction,
|
|
304
|
+
emission: pass_data.emission,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
@@ -10,11 +10,20 @@ export const AVBOIT_SPLAT_BIND_GROUP_VOLUME: number;
|
|
|
10
10
|
* @type {GPUTextureFormat}
|
|
11
11
|
*/
|
|
12
12
|
export const AVBOIT_SPLAT_DUMMY_FORMAT: GPUTextureFormat;
|
|
13
|
+
/**
|
|
14
|
+
* The voxel volume a splat adds its extinction into: the packed counts and the per-channel first
|
|
15
|
+
* overflow, both atomics, so fragment-only. Every splat that writes through `avboit_splat_slice` binds
|
|
16
|
+
* this group.
|
|
17
|
+
*
|
|
18
|
+
* @type {ShaderResourceGroupDescriptor}
|
|
19
|
+
*/
|
|
20
|
+
export const AVBOIT_SPLAT_VOLUME_GROUP: ShaderResourceGroupDescriptor;
|
|
13
21
|
/**
|
|
14
22
|
* One pipeline per template that can be drawn forward.
|
|
15
23
|
*
|
|
16
24
|
* @type {TemplatePassDescriptor}
|
|
17
25
|
*/
|
|
18
26
|
export const shader_avboit_splat: TemplatePassDescriptor;
|
|
27
|
+
import { ShaderResourceGroupDescriptor } from "../../../shader/resource/ShaderResourceGroupDescriptor.js";
|
|
19
28
|
import { TemplatePassDescriptor } from "../../TemplatePassDescriptor.js";
|
|
20
29
|
//# sourceMappingURL=shader_avboit_splat.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_avboit_splat.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js"],"names":[],"mappings":"AA8BA;;;;GAIG;AACH,6CAFU,MAAM,CAEgC;AAEhD;;;;GAIG;AACH,yDAAmD;
|
|
1
|
+
{"version":3,"file":"shader_avboit_splat.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js"],"names":[],"mappings":"AA8BA;;;;GAIG;AACH,6CAFU,MAAM,CAEgC;AAEhD;;;;GAIG;AACH,yDAAmD;AASnD;;;;;;GAMG;AACH,wCAFU,6BAA6B,CAEsC;AAqH7E;;;;GAIG;AACH,kCAFU,sBAAsB,CA+B7B;8CArM2C,2DAA2D;uCAUlE,iCAAiC"}
|
|
@@ -49,14 +49,21 @@ view_group
|
|
|
49
49
|
.addStorageBuffer("warp", AVBOIT_WARP_STRUCT)
|
|
50
50
|
;
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
/**
|
|
53
|
+
* The voxel volume a splat adds its extinction into: the packed counts and the per-channel first
|
|
54
|
+
* overflow, both atomics, so fragment-only. Every splat that writes through `avboit_splat_slice` binds
|
|
55
|
+
* this group.
|
|
56
|
+
*
|
|
57
|
+
* @type {ShaderResourceGroupDescriptor}
|
|
58
|
+
*/
|
|
59
|
+
export const AVBOIT_SPLAT_VOLUME_GROUP = new ShaderResourceGroupDescriptor();
|
|
53
60
|
|
|
54
|
-
|
|
61
|
+
AVBOIT_SPLAT_VOLUME_GROUP
|
|
55
62
|
.addStorageBuffer("extinction_volume", WebGPUArray.from(atomic_u32), true)
|
|
56
63
|
.addStorageBuffer("overflow_slice", WebGPUArray.from(atomic_u32), true)
|
|
57
64
|
;
|
|
58
65
|
|
|
59
|
-
const pass_groups = [view_group,
|
|
66
|
+
const pass_groups = [view_group, AVBOIT_SPLAT_VOLUME_GROUP];
|
|
60
67
|
|
|
61
68
|
/*
|
|
62
69
|
The layout is built group by group rather than with one visibility for every group: WebGPU refuses
|
|
@@ -67,7 +74,7 @@ const pass_groups = [view_group, volume_group];
|
|
|
67
74
|
*/
|
|
68
75
|
const pass_layouts = [
|
|
69
76
|
view_group.generateBindGroupLayoutDescriptor(GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT),
|
|
70
|
-
|
|
77
|
+
AVBOIT_SPLAT_VOLUME_GROUP.generateBindGroupLayoutDescriptor(GPUShaderStage.FRAGMENT),
|
|
71
78
|
];
|
|
72
79
|
|
|
73
80
|
const shader_vertex = ShaderDescriptor.from({
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Top-Level Acceleration Structure (TLAS)
|
|
2
|
+
* Top-Level Acceleration Structure (TLAS): a BVH8 over the scene's instances, in the layout of
|
|
3
|
+
* {@link BVH8_TREE_BUFFER_LAYOUT}. A leaf's payload is a row of the scene database's `meshes` table.
|
|
4
|
+
*
|
|
5
|
+
* A build makes a binary tree over the rows' world boxes (`graph_bvh_build_lbvh`), which lives for
|
|
6
|
+
* the length of the build, and encodes it three levels to a node (`graph_bvh8_encode_from_bvh2`).
|
|
3
7
|
*/
|
|
4
8
|
export class GPUInstancesAccelerationStructure {
|
|
5
9
|
/**
|
|
@@ -49,9 +53,9 @@ export class GPUInstancesAccelerationStructure {
|
|
|
49
53
|
*/
|
|
50
54
|
invalidate(): void;
|
|
51
55
|
/**
|
|
52
|
-
* The bounds of everything in the tree, read back from its
|
|
53
|
-
*
|
|
54
|
-
*
|
|
56
|
+
* The bounds of everything in the tree, read back from its header: the box the GPU built the
|
|
57
|
+
* tree under, the union of every live row's bounds as the bounds pass derived them — the whole
|
|
58
|
+
* scene, whoever placed what. For a consumer that sizes work by the scene once, a probe
|
|
55
59
|
* placement or a bake; a frame-loop reader wants the scene database's readback service.
|
|
56
60
|
*
|
|
57
61
|
* Resolves once the copy has landed and been mapped, which is after the device has finished
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUInstancesAccelerationStructure.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUInstancesAccelerationStructure.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUInstancesAccelerationStructure.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUInstancesAccelerationStructure.js"],"names":[],"mappings":"AAqDA;;;;;;GAMG;AACH;IAEI;;;;OAIG;IACH,iCAFW,eAAe,QAMzB;IA+DD;;;OAGG;IACH,sBAFW,eAAe,EAoBzB;IAxED,cAIC;IAOD;;;OAGG;IACH,wBAEC;IAkED;;;;OAIG;IACH,oBAFW,MAAM,QAUhB;IAED;;;;;OAKG;IACH,uBAFW,MAAM,QAUhB;IAED;;;;OAIG;IACH,uBAFW,MAAM,QAOhB;IA8CD;;;;OAIG;IACH;;;OAGG;IACH,mBAEC;IA4GD;;;;;;;;;;;;OAYG;IACH,0BAHW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,GAChC,QAAQ,OAAO,CAAC,CAqC5B;IAED;;;OAGG;IACH,wDAFW,sBAAsB,QAMhC;IAED;;;;;;OAMG;IACH,mDAHW,sBAAsB,QAShC;IAED;;;OAGG;IACH,gBAKC;;CACJ;8BAlbY,OAAO,0CAA0C,EAAE,eAAe;8BAClE,OAAO,uBAAuB,EAAE,eAAe;uCAtBrB,wCAAwC"}
|
|
@@ -3,9 +3,22 @@ import { FrameGraph } from "../../../engine/graphics/render/frame_graph/FrameGra
|
|
|
3
3
|
import { BufferResourceDescriptor } from "../../device/graph/BufferResourceDescriptor.js";
|
|
4
4
|
import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
|
|
5
5
|
import { ensure_buffer_capacity } from "../geometry/make_temp_gpu_buffer.js";
|
|
6
|
-
import {
|
|
7
|
-
import { BVH_NULL_NODE, bvh_tree_views, read_bvh_node } from "../gpu_primitive/bvh/check_bvh_structure.js";
|
|
6
|
+
import { bvh_buffer_size } from "../gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js";
|
|
8
7
|
import { enquire_bvh_build_lbvh_pipelines, graph_bvh_build_lbvh } from "../gpu_primitive/bvh/graph_bvh_build_lbvh.js";
|
|
8
|
+
import {
|
|
9
|
+
BVH8_TREE_BOUNDS_HIGH_WORD,
|
|
10
|
+
BVH8_TREE_BOUNDS_LOW_WORD,
|
|
11
|
+
BVH8_TREE_HEADER_WORDS,
|
|
12
|
+
BVH8_TREE_LEAF_COUNT_WORD,
|
|
13
|
+
BVH8_TREE_NODE_STRIDE_WORDS,
|
|
14
|
+
BVH8_TREE_ORDER_OFFSET_WORD,
|
|
15
|
+
bvh8_tree_buffer_size
|
|
16
|
+
} from "../gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.js";
|
|
17
|
+
import {
|
|
18
|
+
enquire_bvh8_encode_pipelines,
|
|
19
|
+
graph_bvh8_encode_from_bvh2
|
|
20
|
+
} from "../gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.js";
|
|
21
|
+
import { graph_create_buffer } from "../shader/graph/graph_create_buffer.js";
|
|
9
22
|
import { shader_bvh_extract_instance_leaves } from "./shader_bvh_extract_instance_leaves.js";
|
|
10
23
|
|
|
11
24
|
/**
|
|
@@ -14,10 +27,14 @@ import { shader_bvh_extract_instance_leaves } from "./shader_bvh_extract_instanc
|
|
|
14
27
|
*/
|
|
15
28
|
|
|
16
29
|
/**
|
|
17
|
-
*
|
|
30
|
+
* A tree of no instances, as every walk reads it: a header that counts none, and one node with every
|
|
31
|
+
* slot empty. The payloads would start behind that node.
|
|
32
|
+
*
|
|
18
33
|
* @type {Uint32Array}
|
|
19
34
|
*/
|
|
20
|
-
const EMPTY_TREE = Uint32Array
|
|
35
|
+
const EMPTY_TREE = new Uint32Array(BVH8_TREE_HEADER_WORDS + BVH8_TREE_NODE_STRIDE_WORDS);
|
|
36
|
+
|
|
37
|
+
EMPTY_TREE[BVH8_TREE_ORDER_OFFSET_WORD] = BVH8_TREE_HEADER_WORDS + BVH8_TREE_NODE_STRIDE_WORDS;
|
|
21
38
|
|
|
22
39
|
/**
|
|
23
40
|
* The scene-bounds cell before anything has been merged into it: +inf for the three minima, -inf
|
|
@@ -35,7 +52,11 @@ const SCENE_BOUNDS_SEED = Uint32Array.from([
|
|
|
35
52
|
]);
|
|
36
53
|
|
|
37
54
|
/**
|
|
38
|
-
* Top-Level Acceleration Structure (TLAS)
|
|
55
|
+
* Top-Level Acceleration Structure (TLAS): a BVH8 over the scene's instances, in the layout of
|
|
56
|
+
* {@link BVH8_TREE_BUFFER_LAYOUT}. A leaf's payload is a row of the scene database's `meshes` table.
|
|
57
|
+
*
|
|
58
|
+
* A build makes a binary tree over the rows' world boxes (`graph_bvh_build_lbvh`), which lives for
|
|
59
|
+
* the length of the build, and encodes it three levels to a node (`graph_bvh8_encode_from_bvh2`).
|
|
39
60
|
*/
|
|
40
61
|
export class GPUInstancesAccelerationStructure {
|
|
41
62
|
|
|
@@ -47,6 +68,7 @@ export class GPUInstancesAccelerationStructure {
|
|
|
47
68
|
static enquirePipelines(enquiry) {
|
|
48
69
|
enquiry.compute.push(shader_bvh_extract_instance_leaves.pipeline);
|
|
49
70
|
enquire_bvh_build_lbvh_pipelines(enquiry);
|
|
71
|
+
enquire_bvh8_encode_pipelines(enquiry);
|
|
50
72
|
}
|
|
51
73
|
|
|
52
74
|
|
|
@@ -129,9 +151,8 @@ export class GPUInstancesAccelerationStructure {
|
|
|
129
151
|
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC
|
|
130
152
|
});
|
|
131
153
|
|
|
132
|
-
// A fresh buffer holds zeroes,
|
|
133
|
-
//
|
|
134
|
-
// otherwise.
|
|
154
|
+
// A fresh buffer holds zeroes, which is a tree of no instances but for where its payloads start.
|
|
155
|
+
// Empty, until the first build says otherwise.
|
|
135
156
|
device.queue.writeBuffer(this.#buffer, 0, EMPTY_TREE);
|
|
136
157
|
}
|
|
137
158
|
|
|
@@ -262,7 +283,7 @@ export class GPUInstancesAccelerationStructure {
|
|
|
262
283
|
this.#buffer = ensure_buffer_capacity(
|
|
263
284
|
device,
|
|
264
285
|
this.#buffer,
|
|
265
|
-
|
|
286
|
+
bvh8_tree_buffer_size(element_count),
|
|
266
287
|
1024,
|
|
267
288
|
1024,
|
|
268
289
|
1.2
|
|
@@ -290,8 +311,8 @@ export class GPUInstancesAccelerationStructure {
|
|
|
290
311
|
scene_database_buffer
|
|
291
312
|
);
|
|
292
313
|
|
|
293
|
-
const
|
|
294
|
-
"tlas/
|
|
314
|
+
const tree = graph.import_resource(
|
|
315
|
+
"tlas/tree",
|
|
295
316
|
BufferResourceDescriptor.fromBuffer(this.#buffer),
|
|
296
317
|
this.#buffer
|
|
297
318
|
);
|
|
@@ -318,13 +339,24 @@ export class GPUInstancesAccelerationStructure {
|
|
|
318
339
|
GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST
|
|
319
340
|
));
|
|
320
341
|
|
|
321
|
-
|
|
342
|
+
// the binary tree is this build's alone
|
|
343
|
+
const binary = graph_bvh_build_lbvh({
|
|
322
344
|
graph,
|
|
323
345
|
leaf_bounds: extract_data.leaf_bounds,
|
|
324
346
|
leaf_payload: extract_data.leaf_payload,
|
|
325
347
|
scene_bounds: extract_data.scene_bounds,
|
|
326
348
|
element_count,
|
|
327
|
-
nodes,
|
|
349
|
+
nodes: graph_create_buffer(graph, "tlas/binary tree", BufferResourceDescriptor.from(
|
|
350
|
+
bvh_buffer_size(element_count),
|
|
351
|
+
GPUBufferUsage.STORAGE
|
|
352
|
+
)),
|
|
353
|
+
});
|
|
354
|
+
|
|
355
|
+
graph_bvh8_encode_from_bvh2({
|
|
356
|
+
graph,
|
|
357
|
+
tree: binary.nodes,
|
|
358
|
+
leaf_count: element_count,
|
|
359
|
+
out: tree,
|
|
328
360
|
});
|
|
329
361
|
|
|
330
362
|
if (cmd_ctx !== undefined) {
|
|
@@ -340,9 +372,9 @@ export class GPUInstancesAccelerationStructure {
|
|
|
340
372
|
}
|
|
341
373
|
|
|
342
374
|
/**
|
|
343
|
-
* The bounds of everything in the tree, read back from its
|
|
344
|
-
*
|
|
345
|
-
*
|
|
375
|
+
* The bounds of everything in the tree, read back from its header: the box the GPU built the
|
|
376
|
+
* tree under, the union of every live row's bounds as the bounds pass derived them — the whole
|
|
377
|
+
* scene, whoever placed what. For a consumer that sizes work by the scene once, a probe
|
|
346
378
|
* placement or a bake; a frame-loop reader wants the scene database's readback service.
|
|
347
379
|
*
|
|
348
380
|
* Resolves once the copy has landed and been mapped, which is after the device has finished
|
|
@@ -356,8 +388,7 @@ export class GPUInstancesAccelerationStructure {
|
|
|
356
388
|
assert.isArrayLike(target, 'target');
|
|
357
389
|
assert.greaterThanOrEqual(target.length, 6, 'target.length < 6');
|
|
358
390
|
|
|
359
|
-
|
|
360
|
-
const byte_size = (BVH_HEADER_WORDS + BVH_NODE_STRIDE_WORDS) * Uint32Array.BYTES_PER_ELEMENT;
|
|
391
|
+
const byte_size = BVH8_TREE_HEADER_WORDS * Uint32Array.BYTES_PER_ELEMENT;
|
|
361
392
|
|
|
362
393
|
const allocator = this.#graphics.buffer_allocator_readback;
|
|
363
394
|
const staging = allocator.get(byte_size);
|
|
@@ -369,24 +400,20 @@ export class GPUInstancesAccelerationStructure {
|
|
|
369
400
|
|
|
370
401
|
await staging.mapAsync(GPUMapMode.READ, 0, byte_size);
|
|
371
402
|
|
|
372
|
-
const
|
|
373
|
-
const root = words[0];
|
|
374
|
-
|
|
375
|
-
let found = false;
|
|
376
|
-
|
|
377
|
-
if (root !== BVH_NULL_NODE) {
|
|
378
|
-
assert.equal(root, 0, 'the tree\'s root is not node 0');
|
|
403
|
+
const mapped = staging.getMappedRange(0, byte_size);
|
|
379
404
|
|
|
380
|
-
|
|
405
|
+
const words = new Uint32Array(mapped);
|
|
406
|
+
const floats = new Float32Array(mapped);
|
|
381
407
|
|
|
382
|
-
|
|
383
|
-
target[1] = node.low[1];
|
|
384
|
-
target[2] = node.low[2];
|
|
385
|
-
target[3] = node.high[0];
|
|
386
|
-
target[4] = node.high[1];
|
|
387
|
-
target[5] = node.high[2];
|
|
408
|
+
const found = words[BVH8_TREE_LEAF_COUNT_WORD] !== 0;
|
|
388
409
|
|
|
389
|
-
|
|
410
|
+
if (found) {
|
|
411
|
+
target[0] = floats[BVH8_TREE_BOUNDS_LOW_WORD];
|
|
412
|
+
target[1] = floats[BVH8_TREE_BOUNDS_LOW_WORD + 1];
|
|
413
|
+
target[2] = floats[BVH8_TREE_BOUNDS_LOW_WORD + 2];
|
|
414
|
+
target[3] = floats[BVH8_TREE_BOUNDS_HIGH_WORD];
|
|
415
|
+
target[4] = floats[BVH8_TREE_BOUNDS_HIGH_WORD + 1];
|
|
416
|
+
target[5] = floats[BVH8_TREE_BOUNDS_HIGH_WORD + 2];
|
|
390
417
|
}
|
|
391
418
|
|
|
392
419
|
allocator.release(staging);
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
* End-to-end verification of the GPU TLAS build against a real scene database.
|
|
3
3
|
*
|
|
4
4
|
* Builds a synthetic `meshes` table, drives the TLAS through the same calls `GPUSceneContext`
|
|
5
|
-
* makes, reads the tree back and checks it:
|
|
6
|
-
* present exactly once as a leaf payload, every
|
|
7
|
-
*
|
|
8
|
-
* table correctly and the scene-bounds cell was seeded,
|
|
5
|
+
* makes, reads the tree back and checks it ({@link check_bvh8_tree}): the header, every node
|
|
6
|
+
* reachable once, every mesh row present exactly once as a leaf's payload, every slot holding the
|
|
7
|
+
* world AABBs of the instances under it, and the header's box the box of them all — which is the
|
|
8
|
+
* statement that the extraction pass read the table correctly and the scene-bounds cell was seeded,
|
|
9
|
+
* not zeroed.
|
|
9
10
|
*
|
|
10
11
|
* Then it exercises the three things only the integration has: a pure movement (rebuild, no rows
|
|
11
|
-
* upload), a removal (a leaf really goes away), and an emptied TLAS (the host-written empty
|
|
12
|
-
* word).
|
|
12
|
+
* upload), a removal (a leaf really goes away), and an emptied TLAS (the host-written empty tree).
|
|
13
13
|
*
|
|
14
14
|
* @param {GraphicsContext} graphics
|
|
15
15
|
* @returns {Promise<void>}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify_gpu_tlas_build.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/verify_gpu_tlas_build.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify_gpu_tlas_build.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/verify_gpu_tlas_build.js"],"names":[],"mappings":"AA8LA;;;;;;;;;;;;;;;GAeG;AACH,kEAFa,QAAQ,IAAI,CAAC,CAmHzB"}
|