@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
|
@@ -10,25 +10,10 @@ export class Trail3DEditor extends ObjectEditor {
|
|
|
10
10
|
spawnDistance: {
|
|
11
11
|
description: string;
|
|
12
12
|
};
|
|
13
|
-
|
|
13
|
+
knots: {
|
|
14
14
|
transient: boolean;
|
|
15
15
|
};
|
|
16
|
-
|
|
17
|
-
transient: boolean;
|
|
18
|
-
};
|
|
19
|
-
timeSinceLastUpdate: {
|
|
20
|
-
transient: boolean;
|
|
21
|
-
};
|
|
22
|
-
distanceSinceLastUpdate: {
|
|
23
|
-
transient: boolean;
|
|
24
|
-
};
|
|
25
|
-
tube: {
|
|
26
|
-
transient: boolean;
|
|
27
|
-
};
|
|
28
|
-
mesh: {
|
|
29
|
-
transient: boolean;
|
|
30
|
-
};
|
|
31
|
-
bvh: {
|
|
16
|
+
clearCount: {
|
|
32
17
|
transient: boolean;
|
|
33
18
|
};
|
|
34
19
|
flags: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Trail3DEditor.d.ts","sourceRoot":"","sources":["../../../../../../editor/ecs/component/editors/ecs/Trail3DEditor.js"],"names":[],"mappings":"AAKA;IACI
|
|
1
|
+
{"version":3,"file":"Trail3DEditor.d.ts","sourceRoot":"","sources":["../../../../../../editor/ecs/component/editors/ecs/Trail3DEditor.js"],"names":[],"mappings":"AAKA;IACI;;;;;;;;;;;;;;;;;;;;;;;;MA4BC;CACJ;6BAhC4B,8BAA8B;+BAF5B,6BAA6B"}
|
|
@@ -11,30 +11,15 @@ export class Trail3DEditor extends ObjectEditor {
|
|
|
11
11
|
description: "How long does the trail persist in time"
|
|
12
12
|
},
|
|
13
13
|
radialSegments: {
|
|
14
|
-
description: "Radial resolution of the tube (
|
|
14
|
+
description: "Radial resolution of the tube (fixed when the trail is registered)"
|
|
15
15
|
},
|
|
16
16
|
spawnDistance: {
|
|
17
17
|
description: "Distance between segments when spawning by distance"
|
|
18
18
|
},
|
|
19
|
-
|
|
19
|
+
knots: {
|
|
20
20
|
transient: true
|
|
21
21
|
},
|
|
22
|
-
|
|
23
|
-
transient: true
|
|
24
|
-
},
|
|
25
|
-
timeSinceLastUpdate: {
|
|
26
|
-
transient: true
|
|
27
|
-
},
|
|
28
|
-
distanceSinceLastUpdate: {
|
|
29
|
-
transient: true
|
|
30
|
-
},
|
|
31
|
-
tube: {
|
|
32
|
-
transient: true
|
|
33
|
-
},
|
|
34
|
-
mesh: {
|
|
35
|
-
transient: true
|
|
36
|
-
},
|
|
37
|
-
bvh: {
|
|
22
|
+
clearCount: {
|
|
38
23
|
transient: true
|
|
39
24
|
},
|
|
40
25
|
flags: {
|
package/package.json
CHANGED
|
@@ -17,6 +17,22 @@ export class BVH8Converter {
|
|
|
17
17
|
* @type {BVH8}
|
|
18
18
|
*/
|
|
19
19
|
bvh8: BVH8;
|
|
20
|
+
/**
|
|
21
|
+
* Marks the BVH2 nodes that are roots of a primitive cluster, one byte per BVH2 node, non-zero for a
|
|
22
|
+
* root; `null` for a tree with no clusters.
|
|
23
|
+
*
|
|
24
|
+
* A cluster root always becomes a BVH8 node of its own, and no leaf slot is formed out of a BVH2
|
|
25
|
+
* node that holds a cluster root beneath it. Together those two give the guarantee this exists for:
|
|
26
|
+
* every BVH8 node's leaf slots draw their primitives from one cluster, and the run of
|
|
27
|
+
* {@link BVH8#primitives} a cluster's nodes address is contiguous and holds that cluster's primitives
|
|
28
|
+
* and nothing else. A consumer whose primitives are stored per cluster can then re-order each
|
|
29
|
+
* cluster's own storage to match and drop the pool.
|
|
30
|
+
*
|
|
31
|
+
* Cluster subtrees must be disjoint.
|
|
32
|
+
*
|
|
33
|
+
* @type {Uint8Array|null}
|
|
34
|
+
*/
|
|
35
|
+
cluster_roots: Uint8Array | null;
|
|
20
36
|
/**
|
|
21
37
|
* Fill the decision table for the subtree of the given node, bottom-up.
|
|
22
38
|
* @param {number} node_index
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BVH8Converter.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh8/build/BVH8Converter.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BVH8Converter.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh8/build/BVH8Converter.js"],"names":[],"mappings":"AAoCA;;GAEG;AACH;IA6BI;;;;OAIG;IACH,mCAGC;IApCD;;;OAGG;IACH,UAAI;IAEJ;;OAEG;IACH,WAAI;IAEJ;;;;;;;;;;;;;;OAcG;IACH,eAFU,UAAU,GAAC,IAAI,CAEL;IAkBpB;;;;OAIG;IACH,2BAHW,MAAM,GACJ,MAAM,CAmLlB;IAED;;;;;;;;OAQG;IACH,yBANW,MAAM,YACN,MAAM,EAAE,GAAC,WAAW,gBACpB,MAAM,KACN,MAAM,GACJ,MAAM,CAoDlB;IAED;;;;;OAKG;IACH,2BAJW,MAAM,YACN,MAAM,EAAE,GAAC,WAAW,eACpB,MAAM,QAoDhB;IAED;;;;;OAKG;IACH,6BAHW,MAAM,GACJ,MAAM,CAiClB;IAED;;;;OAIG;IACH,0BAHW,MAAM,mBACN,MAAM,QAYhB;IAwJD,gBAoBC;;CACJ"}
|
|
@@ -3,6 +3,7 @@ import { reinterpret_float32_as_uint32 } from "../../binary/reinterpret_float32_
|
|
|
3
3
|
import { NULL_NODE } from "../../bvh2/bvh3/BVH.js";
|
|
4
4
|
import { BinaryElementPool } from "../../geom/3d/topology/struct/binary/BinaryElementPool.js";
|
|
5
5
|
import { v3_dot } from "../../geom/vec3/v3_dot.js";
|
|
6
|
+
import { bvh8_assign_slots_greedy } from "./bvh8_assign_slots_greedy.js";
|
|
6
7
|
import { byte } from "./byte.js";
|
|
7
8
|
import { encode_bounds_e } from "./encode_bounds_e.js";
|
|
8
9
|
|
|
@@ -48,6 +49,23 @@ export class BVH8Converter {
|
|
|
48
49
|
*/
|
|
49
50
|
bvh8
|
|
50
51
|
|
|
52
|
+
/**
|
|
53
|
+
* Marks the BVH2 nodes that are roots of a primitive cluster, one byte per BVH2 node, non-zero for a
|
|
54
|
+
* root; `null` for a tree with no clusters.
|
|
55
|
+
*
|
|
56
|
+
* A cluster root always becomes a BVH8 node of its own, and no leaf slot is formed out of a BVH2
|
|
57
|
+
* node that holds a cluster root beneath it. Together those two give the guarantee this exists for:
|
|
58
|
+
* every BVH8 node's leaf slots draw their primitives from one cluster, and the run of
|
|
59
|
+
* {@link BVH8#primitives} a cluster's nodes address is contiguous and holds that cluster's primitives
|
|
60
|
+
* and nothing else. A consumer whose primitives are stored per cluster can then re-order each
|
|
61
|
+
* cluster's own storage to match and drop the pool.
|
|
62
|
+
*
|
|
63
|
+
* Cluster subtrees must be disjoint.
|
|
64
|
+
*
|
|
65
|
+
* @type {Uint8Array|null}
|
|
66
|
+
*/
|
|
67
|
+
cluster_roots = null
|
|
68
|
+
|
|
51
69
|
/**
|
|
52
70
|
*
|
|
53
71
|
* @param {BVH8} bvh8
|
|
@@ -90,22 +108,33 @@ export class BVH8Converter {
|
|
|
90
108
|
|
|
91
109
|
const primitive_counts = new Uint32Array(bvh2.size);
|
|
92
110
|
|
|
111
|
+
const cluster_roots = this.cluster_roots;
|
|
112
|
+
|
|
113
|
+
// non-zero where a node holds a cluster root strictly beneath it
|
|
114
|
+
const spans_clusters = new Uint8Array(cluster_roots !== null ? bvh2.size : 0);
|
|
115
|
+
|
|
93
116
|
for (let k = order.length - 1; k >= 0; k--) {
|
|
94
117
|
const node = order[k];
|
|
95
118
|
|
|
96
119
|
const node_surface_area = bvh2.node_get_surface_area(node);
|
|
97
120
|
|
|
121
|
+
const is_cluster_root = cluster_roots !== null && cluster_roots[node] !== 0;
|
|
122
|
+
|
|
98
123
|
if (bvh2.node_is_leaf(node)) {
|
|
99
124
|
const num_primitives = 1;
|
|
100
125
|
|
|
101
|
-
// SAH cost
|
|
102
|
-
const
|
|
126
|
+
// SAH cost; a cluster of one primitive is a node holding one leaf slot
|
|
127
|
+
const cost = is_cluster_root
|
|
128
|
+
? node_surface_area * (num_primitives + 1)
|
|
129
|
+
: node_surface_area * num_primitives;
|
|
130
|
+
|
|
131
|
+
const type = is_cluster_root ? DECISION_TYPE.INTERNAL : DECISION_TYPE.LEAF;
|
|
103
132
|
|
|
104
133
|
for (let i = 0; i < 7; i++) {
|
|
105
134
|
const decision_ptr = decisions.element_address(node * 7 + i);
|
|
106
135
|
|
|
107
|
-
decisions.data_view.setUint8(decision_ptr,
|
|
108
|
-
decisions.data_view.setFloat32(decision_ptr + DECISION_OFFSET_COST,
|
|
136
|
+
decisions.data_view.setUint8(decision_ptr, type);
|
|
137
|
+
decisions.data_view.setFloat32(decision_ptr + DECISION_OFFSET_COST, cost);
|
|
109
138
|
}
|
|
110
139
|
|
|
111
140
|
primitive_counts[node] = num_primitives;
|
|
@@ -116,10 +145,21 @@ export class BVH8Converter {
|
|
|
116
145
|
|
|
117
146
|
const num_primitives = primitive_counts[left] + primitive_counts[right];
|
|
118
147
|
|
|
148
|
+
let can_be_leaf = num_primitives <= 3;
|
|
149
|
+
|
|
150
|
+
if (cluster_roots !== null) {
|
|
151
|
+
const spans = (cluster_roots[left] | cluster_roots[right] | spans_clusters[left] | spans_clusters[right]) !== 0;
|
|
152
|
+
|
|
153
|
+
spans_clusters[node] = spans ? 1 : 0;
|
|
154
|
+
|
|
155
|
+
// a leaf slot holds one cluster's primitives, and a cluster root is a node
|
|
156
|
+
can_be_leaf = can_be_leaf && !spans && !is_cluster_root;
|
|
157
|
+
}
|
|
158
|
+
|
|
119
159
|
// Separate case: i=0 (i=1 in the paper)
|
|
120
160
|
// create a new subtree root
|
|
121
161
|
{
|
|
122
|
-
const cost_leaf =
|
|
162
|
+
const cost_leaf = can_be_leaf ? num_primitives * node_surface_area : Infinity;
|
|
123
163
|
|
|
124
164
|
let cost_distribute = Infinity;
|
|
125
165
|
|
|
@@ -164,6 +204,19 @@ export class BVH8Converter {
|
|
|
164
204
|
for (let i = 1; i < 7; i++) {
|
|
165
205
|
const decision_ptr_i = decisions.element_address(node * 7 + i - 1);
|
|
166
206
|
|
|
207
|
+
if (is_cluster_root) {
|
|
208
|
+
// a cluster root is one root, however many its parent could afford
|
|
209
|
+
const decision_ptr = decisions.element_address(node * 7 + i);
|
|
210
|
+
|
|
211
|
+
for (let j = 0; j < 7; j++) {
|
|
212
|
+
decisions.data_view.setUint8(decision_ptr + j,
|
|
213
|
+
decisions.data_view.getUint8(decision_ptr_i + j)
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
|
|
167
220
|
let cost_distribute = decisions.data_view.getFloat32(decision_ptr_i + DECISION_OFFSET_COST);
|
|
168
221
|
|
|
169
222
|
let distribute_left = INVALID;
|
|
@@ -315,38 +368,8 @@ export class BVH8Converter {
|
|
|
315
368
|
}
|
|
316
369
|
|
|
317
370
|
const assignment = new Uint32Array(8);
|
|
318
|
-
assignment.fill(INVALID);
|
|
319
|
-
|
|
320
|
-
let slot_filled = 0; // bitfield
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
// Greedy child ordering, the paper mentions this as an alternative
|
|
324
|
-
// that works about as well as the auction algorithm in practice
|
|
325
|
-
while (true) {
|
|
326
|
-
let min_cost = Infinity;
|
|
327
371
|
|
|
328
|
-
|
|
329
|
-
let min_index = INVALID;
|
|
330
|
-
|
|
331
|
-
// Find the cheapest unfilled slot of any unassigned child
|
|
332
|
-
for (let c = 0; c < child_count; c++) {
|
|
333
|
-
if (assignment[c] === INVALID) {
|
|
334
|
-
for (let s = 0; s < 8; s++) {
|
|
335
|
-
if ((slot_filled & (1 << s)) === 0 && cost[c * 8 + s] < min_cost) {
|
|
336
|
-
min_cost = cost[c * 8 + s];
|
|
337
|
-
|
|
338
|
-
min_slot = s;
|
|
339
|
-
min_index = c;
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
if (min_slot === INVALID) break;
|
|
346
|
-
|
|
347
|
-
slot_filled |= 1 << min_slot;
|
|
348
|
-
assignment [min_index] = min_slot;
|
|
349
|
-
}
|
|
372
|
+
bvh8_assign_slots_greedy(assignment, cost, child_count);
|
|
350
373
|
|
|
351
374
|
// Permute children array according to assignment
|
|
352
375
|
const children_copy = new Uint32Array(8);
|
|
@@ -507,7 +530,11 @@ export class BVH8Converter {
|
|
|
507
530
|
|
|
508
531
|
const child_decision_ptr = this.#decisions.element_address(child_index * 7);
|
|
509
532
|
|
|
510
|
-
|
|
533
|
+
// a BVH2 leaf asked for its children answers with itself: a cluster of one primitive, or a
|
|
534
|
+
// tree of one, and either way this node's one slot is that primitive
|
|
535
|
+
const child_decision_type = child_index === node_index_bvh2
|
|
536
|
+
? DECISION_TYPE.LEAF
|
|
537
|
+
: this.#decisions.data_view.getUint8(child_decision_ptr);
|
|
511
538
|
|
|
512
539
|
let child_meta = 0;
|
|
513
540
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Give each child of a wide node one of its eight slots, cheapest pair first.
|
|
3
|
+
*
|
|
4
|
+
* A ray visits a node's slots in an order fixed by the signs of its direction, so which slot a child
|
|
5
|
+
* sits in decides how early a ray going its way reaches it. `cost[child * 8 + slot]` says how badly a
|
|
6
|
+
* child suits a slot; the cheapest (child, slot) pair still open is taken until every child has a
|
|
7
|
+
* slot. Ylitie et al. name this greedy as doing about as well in practice as the auction algorithm
|
|
8
|
+
* they use.
|
|
9
|
+
*
|
|
10
|
+
* Of equal costs the first met wins: children in order, and for a child its slots in order. Two
|
|
11
|
+
* builders that fill the table with the same numbers get the same slots.
|
|
12
|
+
*
|
|
13
|
+
* @param {Uint32Array|number[]} assignment output, a slot per child; {@link BVH8_SLOT_UNASSIGNED}
|
|
14
|
+
* past `child_count`
|
|
15
|
+
* @param {Float32Array|number[]} cost 64 entries, `[child * 8 + slot]`; read for `child < child_count`
|
|
16
|
+
* @param {number} child_count at most 8
|
|
17
|
+
* @returns {number} the slots taken, a bit each
|
|
18
|
+
*/
|
|
19
|
+
export function bvh8_assign_slots_greedy(assignment: Uint32Array | number[], cost: Float32Array | number[], child_count: number): number;
|
|
20
|
+
/**
|
|
21
|
+
* What {@link bvh8_assign_slots_greedy} leaves in `assignment` for a child it was not asked about.
|
|
22
|
+
* @type {number}
|
|
23
|
+
*/
|
|
24
|
+
export const BVH8_SLOT_UNASSIGNED: number;
|
|
25
|
+
//# sourceMappingURL=bvh8_assign_slots_greedy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bvh8_assign_slots_greedy.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh8/build/bvh8_assign_slots_greedy.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;GAiBG;AACH,qDANW,WAAW,GAAC,MAAM,EAAE,QAEpB,YAAY,GAAC,MAAM,EAAE,eACrB,MAAM,GACJ,MAAM,CA2ClB;AAjED;;;GAGG;AACH,mCAFU,MAAM,CAE+B"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { assert } from "../../assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* What {@link bvh8_assign_slots_greedy} leaves in `assignment` for a child it was not asked about.
|
|
5
|
+
* @type {number}
|
|
6
|
+
*/
|
|
7
|
+
export const BVH8_SLOT_UNASSIGNED = 0xFFFFFFFF;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Give each child of a wide node one of its eight slots, cheapest pair first.
|
|
11
|
+
*
|
|
12
|
+
* A ray visits a node's slots in an order fixed by the signs of its direction, so which slot a child
|
|
13
|
+
* sits in decides how early a ray going its way reaches it. `cost[child * 8 + slot]` says how badly a
|
|
14
|
+
* child suits a slot; the cheapest (child, slot) pair still open is taken until every child has a
|
|
15
|
+
* slot. Ylitie et al. name this greedy as doing about as well in practice as the auction algorithm
|
|
16
|
+
* they use.
|
|
17
|
+
*
|
|
18
|
+
* Of equal costs the first met wins: children in order, and for a child its slots in order. Two
|
|
19
|
+
* builders that fill the table with the same numbers get the same slots.
|
|
20
|
+
*
|
|
21
|
+
* @param {Uint32Array|number[]} assignment output, a slot per child; {@link BVH8_SLOT_UNASSIGNED}
|
|
22
|
+
* past `child_count`
|
|
23
|
+
* @param {Float32Array|number[]} cost 64 entries, `[child * 8 + slot]`; read for `child < child_count`
|
|
24
|
+
* @param {number} child_count at most 8
|
|
25
|
+
* @returns {number} the slots taken, a bit each
|
|
26
|
+
*/
|
|
27
|
+
export function bvh8_assign_slots_greedy(assignment, cost, child_count) {
|
|
28
|
+
assert.isNonNegativeInteger(child_count, 'child_count');
|
|
29
|
+
assert.lessThanOrEqual(child_count, 8, 'a node has eight slots');
|
|
30
|
+
|
|
31
|
+
for (let i = 0; i < 8; i++) {
|
|
32
|
+
assignment[i] = BVH8_SLOT_UNASSIGNED;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
let slot_filled = 0;
|
|
36
|
+
|
|
37
|
+
for (; ;) {
|
|
38
|
+
let min_cost = Infinity;
|
|
39
|
+
|
|
40
|
+
let min_slot = BVH8_SLOT_UNASSIGNED;
|
|
41
|
+
let min_index = BVH8_SLOT_UNASSIGNED;
|
|
42
|
+
|
|
43
|
+
// the cheapest open slot of any child still without one
|
|
44
|
+
for (let c = 0; c < child_count; c++) {
|
|
45
|
+
if (assignment[c] !== BVH8_SLOT_UNASSIGNED) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
for (let s = 0; s < 8; s++) {
|
|
50
|
+
if ((slot_filled & (1 << s)) === 0 && cost[c * 8 + s] < min_cost) {
|
|
51
|
+
min_cost = cost[c * 8 + s];
|
|
52
|
+
|
|
53
|
+
min_slot = s;
|
|
54
|
+
min_index = c;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (min_slot === BVH8_SLOT_UNASSIGNED) {
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
slot_filled |= 1 << min_slot;
|
|
64
|
+
assignment[min_index] = min_slot;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return slot_filled;
|
|
68
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bvh8_from_proxy.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh8/build/bvh8_from_proxy.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bvh8_from_proxy.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh8/build/bvh8_from_proxy.js"],"names":[],"mappings":"AA2MA;;;;;;GAMG;AACH,0EAHW,MAAM,EAAE,kBACR,MAAM,EAAE,QAgBlB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { assert } from "../../assert.js";
|
|
2
2
|
import { reinterpret_float32_as_uint32 } from "../../binary/reinterpret_float32_as_uint32.js";
|
|
3
3
|
import { v3_dot } from "../../geom/vec3/v3_dot.js";
|
|
4
|
+
import { bvh8_assign_slots_greedy } from "./bvh8_assign_slots_greedy.js";
|
|
4
5
|
import { byte } from "./byte.js";
|
|
5
6
|
import { encode_bounds_e } from "./encode_bounds_e.js";
|
|
6
7
|
|
|
@@ -41,41 +42,9 @@ function bvh8_sort_children(node, children, child_count) {
|
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
|
|
44
|
-
const INVALID = 0xFFFFFFFF;
|
|
45
|
-
|
|
46
45
|
const assignment = new Uint32Array(8);
|
|
47
|
-
assignment.fill(INVALID);
|
|
48
|
-
|
|
49
|
-
let slot_filled = 0; // bitfield
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
// Greedy child ordering, the paper mentions this as an alternative
|
|
53
|
-
// that works about as well as the auction algorithm in practice
|
|
54
|
-
while (true) {
|
|
55
|
-
let min_cost = Infinity;
|
|
56
|
-
|
|
57
|
-
let min_slot = INVALID;
|
|
58
|
-
let min_index = INVALID;
|
|
59
|
-
|
|
60
|
-
// Find the cheapest unfilled slot of any unassigned child
|
|
61
|
-
for (let c = 0; c < child_count; c++) {
|
|
62
|
-
if (assignment[c] === INVALID) {
|
|
63
|
-
for (let s = 0; s < 8; s++) {
|
|
64
|
-
if ((slot_filled & (1 << s)) === 0 && cost[c * 8 + s] < min_cost) {
|
|
65
|
-
min_cost = cost[c * 8 + s];
|
|
66
46
|
|
|
67
|
-
|
|
68
|
-
min_index = c;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (min_slot === INVALID) break;
|
|
75
|
-
|
|
76
|
-
slot_filled |= 1 << min_slot;
|
|
77
|
-
assignment [min_index] = min_slot;
|
|
78
|
-
}
|
|
47
|
+
bvh8_assign_slots_greedy(assignment, cost, child_count);
|
|
79
48
|
|
|
80
49
|
// Permute children array according to assignment
|
|
81
50
|
const children_copy = new Array(8);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Put a node on the grid of its own box, and write each of its occupied slots' boxes in bytes on it:
|
|
3
|
+
* the origin at the box's low corner, a power-of-two step an axis that spans the box in 255, a
|
|
4
|
+
* slot's low corner rounded down to the grid and its high corner up.
|
|
5
|
+
*
|
|
6
|
+
* Writes the node's origin, its three exponents and the quantized boxes of the slots named, and
|
|
7
|
+
* zeroes the boxes of the others. The node's child mask, its bases and its metas are left as they
|
|
8
|
+
* are.
|
|
9
|
+
*
|
|
10
|
+
* Every step is a single-precision one, in a fixed order, and it is the arithmetic the GPU's passes
|
|
11
|
+
* that fit nodes do (`shader_blas8_refit_batch`, the TLAS encode): the same boxes in give the same
|
|
12
|
+
* words out, there and here. A slot's box comes out holding the box it was given whenever that box
|
|
13
|
+
* lies inside the node's.
|
|
14
|
+
*
|
|
15
|
+
* @param {BVH8} bvh
|
|
16
|
+
* @param {number} node
|
|
17
|
+
* @param {ArrayLike<number>} box the node's own box, `[min.xyz, max.xyz]`, float32 values
|
|
18
|
+
* @param {ArrayLike<number>} slot_boxes six floats a slot, 48 in all; read for the slots in `occupied`
|
|
19
|
+
* @param {number} occupied the slots to write, a bit each
|
|
20
|
+
*/
|
|
21
|
+
export function bvh8_node_fit_slots(bvh: BVH8, node: number, box: ArrayLike<number>, slot_boxes: ArrayLike<number>, occupied: number): void;
|
|
22
|
+
//# sourceMappingURL=bvh8_node_fit_slots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bvh8_node_fit_slots.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh8/build/bvh8_node_fit_slots.js"],"names":[],"mappings":"AAmDA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qDALW,MAAM,OACN,UAAU,MAAM,CAAC,cACjB,UAAU,MAAM,CAAC,YACjB,MAAM,QA6ChB"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { assert } from "../../assert.js";
|
|
2
|
+
import { reinterpret_float32_as_uint32 } from "../../binary/reinterpret_float32_as_uint32.js";
|
|
3
|
+
import { reinterpret_uint32_as_float32 } from "../../binary/reinterpret_uint32_as_float32.js";
|
|
4
|
+
|
|
5
|
+
const fround = Math.fround;
|
|
6
|
+
|
|
7
|
+
const ONE_OVER_255 = fround(1 / 255);
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The next float up from a difference that cannot be negative. A difference of two floats is
|
|
11
|
+
* rounded, and a box must not shrink by the rounding. Nothing is added to an exact zero.
|
|
12
|
+
*
|
|
13
|
+
* @param {number} x a float32 value, zero or above
|
|
14
|
+
* @returns {number}
|
|
15
|
+
*/
|
|
16
|
+
function round_up(x) {
|
|
17
|
+
return x > 0 ? reinterpret_uint32_as_float32(reinterpret_float32_as_uint32(x) + 1) : x;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The next float down, as {@link round_up} is the next up.
|
|
22
|
+
*
|
|
23
|
+
* @param {number} x a float32 value, zero or above
|
|
24
|
+
* @returns {number}
|
|
25
|
+
*/
|
|
26
|
+
function round_down(x) {
|
|
27
|
+
return x > 0 ? reinterpret_uint32_as_float32(reinterpret_float32_as_uint32(x) - 1) : x;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The exponent byte of the smallest power of two that spans an extent in 255 steps; zero, a step of
|
|
32
|
+
* nothing, for no extent at all.
|
|
33
|
+
*
|
|
34
|
+
* @param {number} extent a float32 value
|
|
35
|
+
* @returns {number}
|
|
36
|
+
*/
|
|
37
|
+
function step_exponent(extent) {
|
|
38
|
+
if (!(extent > 0)) {
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// the power of two at or below a 255th of the extent, and the next one up unless that one spans it
|
|
43
|
+
let exponent = (reinterpret_float32_as_uint32(fround(extent * ONE_OVER_255)) >>> 23) & 0xFF;
|
|
44
|
+
|
|
45
|
+
if (extent > fround(255 * reinterpret_uint32_as_float32(exponent << 23))) {
|
|
46
|
+
exponent += 1;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return exponent;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Put a node on the grid of its own box, and write each of its occupied slots' boxes in bytes on it:
|
|
54
|
+
* the origin at the box's low corner, a power-of-two step an axis that spans the box in 255, a
|
|
55
|
+
* slot's low corner rounded down to the grid and its high corner up.
|
|
56
|
+
*
|
|
57
|
+
* Writes the node's origin, its three exponents and the quantized boxes of the slots named, and
|
|
58
|
+
* zeroes the boxes of the others. The node's child mask, its bases and its metas are left as they
|
|
59
|
+
* are.
|
|
60
|
+
*
|
|
61
|
+
* Every step is a single-precision one, in a fixed order, and it is the arithmetic the GPU's passes
|
|
62
|
+
* that fit nodes do (`shader_blas8_refit_batch`, the TLAS encode): the same boxes in give the same
|
|
63
|
+
* words out, there and here. A slot's box comes out holding the box it was given whenever that box
|
|
64
|
+
* lies inside the node's.
|
|
65
|
+
*
|
|
66
|
+
* @param {BVH8} bvh
|
|
67
|
+
* @param {number} node
|
|
68
|
+
* @param {ArrayLike<number>} box the node's own box, `[min.xyz, max.xyz]`, float32 values
|
|
69
|
+
* @param {ArrayLike<number>} slot_boxes six floats a slot, 48 in all; read for the slots in `occupied`
|
|
70
|
+
* @param {number} occupied the slots to write, a bit each
|
|
71
|
+
*/
|
|
72
|
+
export function bvh8_node_fit_slots(bvh, node, box, slot_boxes, occupied) {
|
|
73
|
+
assert.isNonNegativeInteger(node, 'node');
|
|
74
|
+
assert.isNonNegativeInteger(occupied, 'occupied');
|
|
75
|
+
assert.lessThan(occupied, 256, 'a node has eight slots');
|
|
76
|
+
|
|
77
|
+
const min_x = box[0], min_y = box[1], min_z = box[2];
|
|
78
|
+
|
|
79
|
+
const exponent_x = step_exponent(round_up(fround(box[3] - min_x)));
|
|
80
|
+
const exponent_y = step_exponent(round_up(fround(box[4] - min_y)));
|
|
81
|
+
const exponent_z = step_exponent(round_up(fround(box[5] - min_z)));
|
|
82
|
+
|
|
83
|
+
bvh.node_set_p(node, min_x, min_y, min_z);
|
|
84
|
+
bvh.node_set_e(node, exponent_x, exponent_y, exponent_z);
|
|
85
|
+
|
|
86
|
+
// a step of nothing takes every byte to zero
|
|
87
|
+
const per_cell_x = exponent_x > 0 ? fround(1 / reinterpret_uint32_as_float32(exponent_x << 23)) : 0;
|
|
88
|
+
const per_cell_y = exponent_y > 0 ? fround(1 / reinterpret_uint32_as_float32(exponent_y << 23)) : 0;
|
|
89
|
+
const per_cell_z = exponent_z > 0 ? fround(1 / reinterpret_uint32_as_float32(exponent_z << 23)) : 0;
|
|
90
|
+
|
|
91
|
+
for (let slot = 0; slot < 8; slot++) {
|
|
92
|
+
if ((occupied & (1 << slot)) === 0) {
|
|
93
|
+
bvh.node_set_quantized_min(node, slot, 0, 0, 0);
|
|
94
|
+
bvh.node_set_quantized_max(node, slot, 0, 0, 0);
|
|
95
|
+
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const o = slot * 6;
|
|
100
|
+
|
|
101
|
+
bvh.node_set_quantized_min(
|
|
102
|
+
node, slot,
|
|
103
|
+
Math.floor(fround(round_down(fround(slot_boxes[o] - min_x)) * per_cell_x)),
|
|
104
|
+
Math.floor(fround(round_down(fround(slot_boxes[o + 1] - min_y)) * per_cell_y)),
|
|
105
|
+
Math.floor(fround(round_down(fround(slot_boxes[o + 2] - min_z)) * per_cell_z)),
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
bvh.node_set_quantized_max(
|
|
109
|
+
node, slot,
|
|
110
|
+
Math.min(255, Math.ceil(fround(round_up(fround(slot_boxes[o + 3] - min_x)) * per_cell_x))),
|
|
111
|
+
Math.min(255, Math.ceil(fround(round_up(fround(slot_boxes[o + 4] - min_y)) * per_cell_y))),
|
|
112
|
+
Math.min(255, Math.ceil(fround(round_up(fround(slot_boxes[o + 5] - min_z)) * per_cell_z))),
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bvh8_depth.d.ts","sourceRoot":"","sources":["../../../../src/core/bvh8/bvh8_depth.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,uCAFa,MAAM,CAkClB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Levels of nodes in a BVH8, the root's included: 1 for a tree of one node, 0 for an empty one.
|
|
3
|
+
*
|
|
4
|
+
* @param {BVH8} bvh
|
|
5
|
+
* @returns {number}
|
|
6
|
+
*/
|
|
7
|
+
export function bvh8_depth(bvh) {
|
|
8
|
+
if (bvh.nodes.size === 0) {
|
|
9
|
+
return 0;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
let deepest = 0;
|
|
13
|
+
|
|
14
|
+
// (node, level) pairs
|
|
15
|
+
const stack = [0, 1];
|
|
16
|
+
|
|
17
|
+
while (stack.length > 0) {
|
|
18
|
+
const level = stack.pop();
|
|
19
|
+
const node = stack.pop();
|
|
20
|
+
|
|
21
|
+
if (level > deepest) {
|
|
22
|
+
deepest = level;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const imask = bvh.node_get_imask(node);
|
|
26
|
+
const base_index_child = bvh.node_get_base_index_child(node);
|
|
27
|
+
|
|
28
|
+
let child = 0;
|
|
29
|
+
|
|
30
|
+
for (let slot = 0; slot < 8; slot++) {
|
|
31
|
+
if ((imask & (1 << slot)) !== 0) {
|
|
32
|
+
stack.push(base_index_child + child, level + 1);
|
|
33
|
+
child++;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return deepest;
|
|
39
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The discrete Fourier transform of `n` complex values, in place, radix 2:
|
|
3
|
+
*
|
|
4
|
+
* X_k = Σ_j x_j · e^(∓2πi·jk/n)
|
|
5
|
+
*
|
|
6
|
+
* the minus sign forward, the plus sign inverse. The inverse is not scaled: a forward transform
|
|
7
|
+
* then an inverse one multiplies every value by `n`.
|
|
8
|
+
*
|
|
9
|
+
* Iterative Cooley–Tukey, decimation in time: a bit-reversal permutation, then `log2(n)` stages of
|
|
10
|
+
* butterflies. Each stage's twiddles are taken from `Math.cos` and `Math.sin` directly, `n − 1` pairs
|
|
11
|
+
* over the transform, so the error does not grow along a recurrence. Allocates nothing.
|
|
12
|
+
*
|
|
13
|
+
* @param {Float64Array|Float32Array|number[]} re real parts, read and written at `0..n−1`
|
|
14
|
+
* @param {Float64Array|Float32Array|number[]} im imaginary parts, likewise
|
|
15
|
+
* @param {number} n a power of two
|
|
16
|
+
* @param {boolean} inverse
|
|
17
|
+
*/
|
|
18
|
+
export function complex_fft_radix2(re: Float64Array | Float32Array | number[], im: Float64Array | Float32Array | number[], n: number, inverse: boolean): void;
|
|
19
|
+
//# sourceMappingURL=complex_fft_radix2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"complex_fft_radix2.d.ts","sourceRoot":"","sources":["../../../../../src/core/math/complex/complex_fft_radix2.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AACH,uCALW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,MAClC,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,KAClC,MAAM,WACN,OAAO,QAoDjB"}
|