@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
|
@@ -16,6 +16,7 @@ import { FluidMacPasses } from "./mac/FluidMacPasses.js";
|
|
|
16
16
|
import { FluidMacVelocitySet } from "./mac/FluidMacVelocitySet.js";
|
|
17
17
|
import { GPUFluidPressureSolve } from "./pressure/GPUFluidPressureSolve.js";
|
|
18
18
|
import { FLUID_FORCING_BRICK_CELLS } from "./forcing/FLUID_FORCING.js";
|
|
19
|
+
import { fluid_far_field_place, fluid_far_field_value, fluid_far_record, fluid_far_record_copy, fluid_far_record_read } from "./FLUID_FAR_FIELD_STRUCT.js";
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
22
|
* @typedef {import("../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} FrameGraph
|
|
@@ -83,27 +84,22 @@ export function gpu_fluid_cascade_frame_keep(from, to) {
|
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
/**
|
|
86
|
-
* The far field
|
|
87
|
-
*
|
|
88
|
-
*
|
|
87
|
+
* The far field and `Λ` from a {@link FluidAtmosphere} record, checking that it carries no body
|
|
88
|
+
* force: `force` is a CPU-field term and not part of the far field (§6), so the GPU fluid drops it,
|
|
89
|
+
* and says so in development.
|
|
89
90
|
*
|
|
90
91
|
* @param {Float64Array|number[]} atmosphere
|
|
91
92
|
* @param {number} offset
|
|
92
|
-
* @param {Float32Array
|
|
93
|
+
* @param {{mean: Float32Array, sigma: number, offset: Float64Array, length: number}} out_far receives
|
|
94
|
+
* the far field (`fluid_far_record`), its mean rounded to f32
|
|
93
95
|
* @returns {number} `Λ`
|
|
94
96
|
*/
|
|
95
|
-
function read_far_field(atmosphere, offset,
|
|
97
|
+
function read_far_field(atmosphere, offset, out_far) {
|
|
96
98
|
assert.equal(atmosphere[offset + FluidAtmosphere.FORCE_X], 0, 'a body force reaches the GPU fluid, which drops it');
|
|
97
99
|
assert.equal(atmosphere[offset + FluidAtmosphere.FORCE_Y], 0, 'a body force reaches the GPU fluid, which drops it');
|
|
98
100
|
assert.equal(atmosphere[offset + FluidAtmosphere.FORCE_Z], 0, 'a body force reaches the GPU fluid, which drops it');
|
|
99
101
|
|
|
100
|
-
|
|
101
|
-
out_far_velocity[1] = atmosphere[offset + FluidAtmosphere.VELOCITY_Y];
|
|
102
|
-
out_far_velocity[2] = atmosphere[offset + FluidAtmosphere.VELOCITY_Z];
|
|
103
|
-
|
|
104
|
-
for (let axis = 0; axis < 3; axis++) {
|
|
105
|
-
assert.isFinite(out_far_velocity[axis], 'v_far');
|
|
106
|
-
}
|
|
102
|
+
fluid_far_record_read(out_far, atmosphere, offset);
|
|
107
103
|
|
|
108
104
|
const lambda = atmosphere[offset + FluidAtmosphere.LAMBDA];
|
|
109
105
|
|
|
@@ -146,8 +142,8 @@ function restrict_value() {
|
|
|
146
142
|
keep: 1,
|
|
147
143
|
box_size: new Uint32Array(3),
|
|
148
144
|
child_offset: new Int32Array(3),
|
|
149
|
-
|
|
150
|
-
|
|
145
|
+
child_far: fluid_far_field_value(),
|
|
146
|
+
far: fluid_far_field_value(),
|
|
151
147
|
};
|
|
152
148
|
}
|
|
153
149
|
|
|
@@ -168,11 +164,13 @@ function restrict_value() {
|
|
|
168
164
|
* `FLUID_FORCED_FLAG` where the tick's forcing was written for the cell's faces. A step reads these
|
|
169
165
|
* unless it is handed another buffer. `GPUFluidForcing` writes them before each step of the
|
|
170
166
|
* cascade, with {@link solid_bricks} saying which bricks it last wrote;
|
|
171
|
-
* - **its read record**: the instant its velocity was last brought to, `t_s`, with `v_far(t_s)`
|
|
172
|
-
* ({@link read_far_velocity}, rounded to f32 as the device holds it) and
|
|
173
|
-
* ({@link read_lambda}), on the CPU. The velocity is a
|
|
174
|
-
* it at an instant `t`
|
|
175
|
-
*
|
|
167
|
+
* - **its read record**: the instant its velocity was last brought to, `t_s`, with `v_far(t_s)` —
|
|
168
|
+
* its mean ({@link read_far_velocity}, rounded to f32 as the device holds it) and its turbulence's
|
|
169
|
+
* `σ`, offset and length scale — and `Λ(t_s)` ({@link read_lambda}), on the CPU. The velocity is a
|
|
170
|
+
* deviation from `v_far(t_s)`, so every read of it at an instant `t` at a point `x` is
|
|
171
|
+
* `v_far(t, x) + (v − v_far(t_s, x))·e^(−(Λ(t) − Λ(t_s)))` (§6); {@link update_read} computes that
|
|
172
|
+
* factor, {@link read_keep}, on the CPU, and the device never sees `Λ`. Each pass lays the far field
|
|
173
|
+
* over its own lattice (`FLUID_FAR_FIELD_STRUCT`), so the device never sees the offset either.
|
|
176
174
|
*
|
|
177
175
|
* It is created at the far field of a {@link FluidAtmosphere} record: velocity `v_far`, pressure 0,
|
|
178
176
|
* the read record that instant.
|
|
@@ -285,13 +283,23 @@ export class GPUFluidCascade {
|
|
|
285
283
|
/** The read record: `t_s` and `Λ(t_s)`, f64. */
|
|
286
284
|
#read_time = 0;
|
|
287
285
|
#read_lambda = 0;
|
|
288
|
-
/** `v_far(t_s)
|
|
289
|
-
#
|
|
286
|
+
/** `v_far(t_s)`: its mean as the device holds it, its turbulence. */
|
|
287
|
+
#read_far = fluid_far_record();
|
|
290
288
|
/** `e^(−(Λ(t) − Λ(t_s)))` at the last {@link update_read}. */
|
|
291
289
|
#read_keep = 1;
|
|
292
290
|
|
|
293
291
|
/** Scratch for an atmosphere's `v_far`. */
|
|
294
|
-
#far_scratch =
|
|
292
|
+
#far_scratch = fluid_far_record();
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* The turbulence tile a pass binds when it is handed none: one texel, never read, since a far field
|
|
296
|
+
* with turbulence asserts a tile.
|
|
297
|
+
* @type {GPUTexture}
|
|
298
|
+
*/
|
|
299
|
+
#no_turbulence;
|
|
300
|
+
|
|
301
|
+
/** @type {GPUTextureView} */
|
|
302
|
+
#no_turbulence_view;
|
|
295
303
|
|
|
296
304
|
/** The window as the published field reads it, rewritten on every query. */
|
|
297
305
|
#cells_window = fluid_cascade_window_value();
|
|
@@ -311,7 +319,7 @@ export class GPUFluidCascade {
|
|
|
311
319
|
#advected = { u: null, v: null, w: null };
|
|
312
320
|
|
|
313
321
|
/** What the step's passes bind of the parent, rebound for every step. */
|
|
314
|
-
#parent_bindings = { uniform: null, u: null, v: null, w: null, pressure: null };
|
|
322
|
+
#parent_bindings = { uniform: null, u: null, v: null, w: null, pressure: null, turbulence: null };
|
|
315
323
|
|
|
316
324
|
/** The step's ghosts' views and buffer, rebound for every step. */
|
|
317
325
|
#ghosts = { u: null, v: null, w: null, pressure: null };
|
|
@@ -374,7 +382,7 @@ export class GPUFluidCascade {
|
|
|
374
382
|
this.#corner.set(corner);
|
|
375
383
|
this.#cell_size = cell_size;
|
|
376
384
|
|
|
377
|
-
this.#read_lambda = read_far_field(atmosphere, atmosphere_offset, this.#
|
|
385
|
+
this.#read_lambda = read_far_field(atmosphere, atmosphere_offset, this.#read_far);
|
|
378
386
|
this.#read_time = atmosphere[atmosphere_offset + FluidAtmosphere.TIME];
|
|
379
387
|
|
|
380
388
|
const [nx, ny, nz] = this.#resolution;
|
|
@@ -428,11 +436,22 @@ export class GPUFluidCascade {
|
|
|
428
436
|
usage: GPUBufferUsage.STORAGE,
|
|
429
437
|
});
|
|
430
438
|
|
|
431
|
-
|
|
439
|
+
this.#no_turbulence = device.createTexture({
|
|
440
|
+
label: 'Fluid / cascade / no turbulence',
|
|
441
|
+
size: [1, 1, 1],
|
|
442
|
+
dimension: '3d',
|
|
443
|
+
format: 'rgba16float',
|
|
444
|
+
usage: GPUTextureUsage.TEXTURE_BINDING,
|
|
445
|
+
});
|
|
446
|
+
|
|
447
|
+
this.#no_turbulence_view = this.#no_turbulence.createView();
|
|
448
|
+
|
|
449
|
+
// a new texture is 0, so only a component the far field moves is written; with turbulence the
|
|
450
|
+
// eddies come in through the fills and the atmosphere, as everything else of the fluid warms up
|
|
432
451
|
const textures = this.#velocity.textures;
|
|
433
452
|
|
|
434
453
|
for (let component = 0; component < 3; component++) {
|
|
435
|
-
const value = this.#
|
|
454
|
+
const value = this.#read_far.mean[component];
|
|
436
455
|
|
|
437
456
|
if (value === 0) {
|
|
438
457
|
continue;
|
|
@@ -567,7 +586,41 @@ export class GPUFluidCascade {
|
|
|
567
586
|
* @returns {Readonly<Float32Array>}
|
|
568
587
|
*/
|
|
569
588
|
get read_far_velocity() {
|
|
570
|
-
return this.#
|
|
589
|
+
return this.#read_far.mean;
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
/**
|
|
593
|
+
* `v_far(t_s)` laid over this cascade's window as a {@link FLUID_FAR_FIELD_STRUCT} value: cell
|
|
594
|
+
* coordinate 0 at window-local cell 0. What its publish subtracts.
|
|
595
|
+
*
|
|
596
|
+
* @param {{mean: Float32Array, sigma: number, origin: Float32Array, scale: Float32Array}} out
|
|
597
|
+
* @returns {{mean: Float32Array, sigma: number, origin: Float32Array, scale: Float32Array}} `out`
|
|
598
|
+
*/
|
|
599
|
+
describe_far(out) {
|
|
600
|
+
const far = this.#read_far;
|
|
601
|
+
const corner = this.#corner;
|
|
602
|
+
|
|
603
|
+
fluid_far_field_place(out, far, far.offset, far.length, corner[0], corner[1], corner[2], this.#cell_size, this.#cell_size);
|
|
604
|
+
|
|
605
|
+
return out;
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
/**
|
|
609
|
+
* The turbulence tile a pass binds: `turbulence`, or this cascade's stand-in when it is `null`, which
|
|
610
|
+
* only a far field with no turbulence may take.
|
|
611
|
+
*
|
|
612
|
+
* @param {GPUTextureView|null} turbulence
|
|
613
|
+
* @param {number} sigma the larger `σ` the pass reads
|
|
614
|
+
* @returns {GPUTextureView}
|
|
615
|
+
*/
|
|
616
|
+
#turbulence_view(turbulence, sigma) {
|
|
617
|
+
if (turbulence !== null) {
|
|
618
|
+
return turbulence;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
assert.equal(sigma, 0, 'a far field with turbulence is handed the turbulence tile');
|
|
622
|
+
|
|
623
|
+
return this.#no_turbulence_view;
|
|
571
624
|
}
|
|
572
625
|
|
|
573
626
|
/**
|
|
@@ -651,16 +704,23 @@ export class GPUFluidCascade {
|
|
|
651
704
|
* @param {GPUFluidCascade|null} parent a cascade of twice the cell and the same resolution, or `null`
|
|
652
705
|
*/
|
|
653
706
|
describe_parent(out, out_bindings, parent) {
|
|
654
|
-
|
|
707
|
+
const read = this.#read_far;
|
|
708
|
+
const h = this.#cell_size;
|
|
655
709
|
|
|
656
710
|
if (parent === null) {
|
|
657
|
-
|
|
711
|
+
// no window to address: the origin only places the far field, at this window's corner,
|
|
712
|
+
// which keeps the positions a read takes small
|
|
713
|
+
out.origin.set(this.#corner);
|
|
658
714
|
out.keep = 1;
|
|
659
715
|
fluid_cascade_window_empty(out.cells);
|
|
660
716
|
fluid_cascade_window_empty(out.faces_u);
|
|
661
717
|
fluid_cascade_window_empty(out.faces_v);
|
|
662
718
|
fluid_cascade_window_empty(out.faces_w);
|
|
663
|
-
|
|
719
|
+
|
|
720
|
+
const o = out.origin;
|
|
721
|
+
|
|
722
|
+
fluid_far_field_place(out.read, read, read.offset, read.length, o[0], o[1], o[2], h, h);
|
|
723
|
+
fluid_far_field_place(out.far, read, read.offset, read.length, o[0], o[1], o[2], h, h);
|
|
664
724
|
|
|
665
725
|
out_bindings.u = this.#far_field_views[0];
|
|
666
726
|
out_bindings.v = this.#far_field_views[1];
|
|
@@ -687,7 +747,13 @@ export class GPUFluidCascade {
|
|
|
687
747
|
fluid_cascade_window_place(out.faces_u, parent.#corner, parent.#resolution, 0);
|
|
688
748
|
fluid_cascade_window_place(out.faces_v, parent.#corner, parent.#resolution, 1);
|
|
689
749
|
fluid_cascade_window_place(out.faces_w, parent.#corner, parent.#resolution, 2);
|
|
690
|
-
|
|
750
|
+
|
|
751
|
+
const o = out.origin;
|
|
752
|
+
const far = parent.#read_far;
|
|
753
|
+
|
|
754
|
+
// the read is this cascade's far field; the parent's state deviates from the parent's, at its level
|
|
755
|
+
fluid_far_field_place(out.read, read, read.offset, read.length, o[0], o[1], o[2], h, h);
|
|
756
|
+
fluid_far_field_place(out.far, far, far.offset, far.length, o[0], o[1], o[2], h, parent.#cell_size);
|
|
691
757
|
|
|
692
758
|
const velocity = parent.#velocity;
|
|
693
759
|
out_bindings.u = velocity.u;
|
|
@@ -719,6 +785,8 @@ export class GPUFluidCascade {
|
|
|
719
785
|
* @param {GPUFluidCascadePressureArm} [options.arm]
|
|
720
786
|
* @param {number} [options.count] V-cycles under {@link GPUFluidCascadePressureArm.VCycles}, red-black
|
|
721
787
|
* sweeps under {@link GPUFluidCascadePressureArm.SOR}
|
|
788
|
+
* @param {GPUTextureView|null} [options.turbulence] the far field's turbulence tile
|
|
789
|
+
* (`GPUSceneWind#turbulence`); `null`, the default, only for a far field with none
|
|
722
790
|
*/
|
|
723
791
|
record_step({
|
|
724
792
|
graph,
|
|
@@ -732,6 +800,7 @@ export class GPUFluidCascade {
|
|
|
732
800
|
vorticity_confinement = 0,
|
|
733
801
|
arm = GPUFluidCascadePressureArm.VCycles,
|
|
734
802
|
count = GPU_FLUID_CASCADE_V_CYCLES,
|
|
803
|
+
turbulence = null,
|
|
735
804
|
}) {
|
|
736
805
|
assert.notOk(this.#destroyed, 'the cascade is destroyed');
|
|
737
806
|
assert.defined(graph, 'graph');
|
|
@@ -748,8 +817,8 @@ export class GPUFluidCascade {
|
|
|
748
817
|
assert.ok(arm ===GPUFluidCascadePressureArm.VCycles || arm === GPUFluidCascadePressureArm.SOR, 'arm');
|
|
749
818
|
assert.isNonNegativeInteger(count, 'count');
|
|
750
819
|
|
|
751
|
-
const
|
|
752
|
-
const lambda_end = read_far_field(atmosphere, atmosphere_offset,
|
|
820
|
+
const end = this.#far_scratch;
|
|
821
|
+
const lambda_end = read_far_field(atmosphere, atmosphere_offset, end);
|
|
753
822
|
const time_end = atmosphere[atmosphere_offset + FluidAtmosphere.TIME];
|
|
754
823
|
|
|
755
824
|
assert.greaterThanOrEqual(time_end, this.#read_time, 'the step ends at or after the read record');
|
|
@@ -763,8 +832,9 @@ export class GPUFluidCascade {
|
|
|
763
832
|
cascade: this,
|
|
764
833
|
dt: 0,
|
|
765
834
|
corner: new Int32Array(3),
|
|
766
|
-
far_start:
|
|
767
|
-
far_end:
|
|
835
|
+
far_start: fluid_far_field_value(),
|
|
836
|
+
far_end: fluid_far_field_value(),
|
|
837
|
+
turbulence: null,
|
|
768
838
|
keep: 1,
|
|
769
839
|
band: false,
|
|
770
840
|
parent: fluid_cascade_parent_value(),
|
|
@@ -784,8 +854,17 @@ export class GPUFluidCascade {
|
|
|
784
854
|
|
|
785
855
|
record.dt = dt;
|
|
786
856
|
record.corner.set(this.#corner);
|
|
787
|
-
|
|
788
|
-
|
|
857
|
+
|
|
858
|
+
// the start's mean and σ where the end's offset puts the eddies: what the far field alone
|
|
859
|
+
// brings to each face by the step's end
|
|
860
|
+
const start = this.#read_far;
|
|
861
|
+
const corner = this.#corner;
|
|
862
|
+
const length = end.sigma !== 0 ? end.length : start.length;
|
|
863
|
+
|
|
864
|
+
fluid_far_field_place(record.far_start, start, end.offset, length, corner[0], corner[1], corner[2], this.#cell_size, this.#cell_size);
|
|
865
|
+
fluid_far_field_place(record.far_end, end, end.offset, length, corner[0], corner[1], corner[2], this.#cell_size, this.#cell_size);
|
|
866
|
+
|
|
867
|
+
record.turbulence = this.#turbulence_view(turbulence, Math.max(start.sigma, end.sigma));
|
|
789
868
|
record.keep = Math.exp(Math.min(0, this.#read_lambda - lambda_end));
|
|
790
869
|
record.band = relaxation_band;
|
|
791
870
|
record.solid = solid;
|
|
@@ -798,7 +877,7 @@ export class GPUFluidCascade {
|
|
|
798
877
|
// the step brings the velocity to t₁
|
|
799
878
|
this.#read_time = time_end;
|
|
800
879
|
this.#read_lambda = lambda_end;
|
|
801
|
-
this.#
|
|
880
|
+
fluid_far_record_copy(this.#read_far, end);
|
|
802
881
|
|
|
803
882
|
const pass = graph.add('Fluid / cascade step', record, GPUFluidCascade.#execute);
|
|
804
883
|
|
|
@@ -840,8 +919,10 @@ export class GPUFluidCascade {
|
|
|
840
919
|
* one inside the window and on the 4-cell lattice
|
|
841
920
|
* @param {number} options.box_count 0 to 3
|
|
842
921
|
* @param {GPUFluidCascade|null} options.parent the parent to fill from, or `null` for the far field
|
|
922
|
+
* @param {GPUTextureView|null} [options.turbulence] the far field's turbulence tile; `null`, the
|
|
923
|
+
* default, only for a far field with none
|
|
843
924
|
*/
|
|
844
|
-
record_fill({ graph, boxes, box_count, parent }) {
|
|
925
|
+
record_fill({ graph, boxes, box_count, parent, turbulence = null }) {
|
|
845
926
|
assert.notOk(this.#destroyed, 'the cascade is destroyed');
|
|
846
927
|
assert.defined(graph, 'graph');
|
|
847
928
|
assert.isNonNegativeInteger(box_count, 'box_count');
|
|
@@ -857,6 +938,7 @@ export class GPUFluidCascade {
|
|
|
857
938
|
fill: fill_value(),
|
|
858
939
|
parent: fluid_cascade_parent_value(),
|
|
859
940
|
parent_bindings: { u: null, v: null, w: null, pressure: null },
|
|
941
|
+
turbulence: null,
|
|
860
942
|
group_count_x: 1,
|
|
861
943
|
group_count_y: 1,
|
|
862
944
|
};
|
|
@@ -915,6 +997,8 @@ export class GPUFluidCascade {
|
|
|
915
997
|
|
|
916
998
|
this.describe_parent(record.parent, record.parent_bindings, parent);
|
|
917
999
|
|
|
1000
|
+
record.turbulence = this.#turbulence_view(turbulence, Math.max(record.parent.read.sigma, record.parent.far.sigma));
|
|
1001
|
+
|
|
918
1002
|
graph.add('Fluid / cascade fill', record, GPUFluidCascade.#execute_fill).make_side_effect();
|
|
919
1003
|
}
|
|
920
1004
|
|
|
@@ -930,8 +1014,10 @@ export class GPUFluidCascade {
|
|
|
930
1014
|
* @param {object} options
|
|
931
1015
|
* @param {FrameGraph} options.graph
|
|
932
1016
|
* @param {GPUFluidCascade} options.child a cascade of half the cell and the same resolution
|
|
1017
|
+
* @param {GPUTextureView|null} [options.turbulence] the far field's turbulence tile; `null`, the
|
|
1018
|
+
* default, only for a far field with none
|
|
933
1019
|
*/
|
|
934
|
-
record_restrict({ graph, child }) {
|
|
1020
|
+
record_restrict({ graph, child, turbulence = null }) {
|
|
935
1021
|
assert.notOk(this.#destroyed, 'the cascade is destroyed');
|
|
936
1022
|
assert.defined(graph, 'graph');
|
|
937
1023
|
assert.ok(child instanceof GPUFluidCascade, 'child is a cascade');
|
|
@@ -942,6 +1028,7 @@ export class GPUFluidCascade {
|
|
|
942
1028
|
cascade: this,
|
|
943
1029
|
child: null,
|
|
944
1030
|
value: restrict_value(),
|
|
1031
|
+
turbulence: null,
|
|
945
1032
|
group_count_x: 1,
|
|
946
1033
|
group_count_y: 1,
|
|
947
1034
|
group_count_z: 1,
|
|
@@ -978,10 +1065,18 @@ export class GPUFluidCascade {
|
|
|
978
1065
|
fluid_cascade_window_place(value.faces_v, this.#corner, resolution, 1);
|
|
979
1066
|
fluid_cascade_window_place(value.faces_w, this.#corner, resolution, 2);
|
|
980
1067
|
|
|
981
|
-
|
|
982
|
-
|
|
1068
|
+
// both far fields over this cascade's cells: the parent faces the restriction writes
|
|
1069
|
+
const corner = this.#corner;
|
|
1070
|
+
const h = this.#cell_size;
|
|
1071
|
+
const child_far = child.#read_far;
|
|
1072
|
+
const far = this.#read_far;
|
|
1073
|
+
|
|
1074
|
+
fluid_far_field_place(value.child_far, child_far, child_far.offset, child_far.length, corner[0], corner[1], corner[2], h, child.#cell_size);
|
|
1075
|
+
fluid_far_field_place(value.far, far, far.offset, far.length, corner[0], corner[1], corner[2], h, h);
|
|
983
1076
|
value.keep = gpu_fluid_cascade_frame_keep(child.#read_lambda, this.#read_lambda);
|
|
984
1077
|
|
|
1078
|
+
record.turbulence = this.#turbulence_view(turbulence, Math.max(child_far.sigma, far.sigma));
|
|
1079
|
+
|
|
985
1080
|
record.child = child;
|
|
986
1081
|
record.group_count_x = Math.ceil(value.box_size[0] / GRID_TILE_SIZE[0]);
|
|
987
1082
|
record.group_count_y = Math.ceil(value.box_size[1] / GRID_TILE_SIZE[1]);
|
|
@@ -991,7 +1086,7 @@ export class GPUFluidCascade {
|
|
|
991
1086
|
}
|
|
992
1087
|
|
|
993
1088
|
/** The restriction's bindings, rebound for every restriction. */
|
|
994
|
-
#restrict_bindings = { restriction: null, child_u: null, child_v: null, child_w: null, out_u: null, out_v: null, out_w: null };
|
|
1089
|
+
#restrict_bindings = { restriction: null, child_u: null, child_v: null, child_w: null, out_u: null, out_v: null, out_w: null, fluid_turbulence: null };
|
|
995
1090
|
|
|
996
1091
|
#restrict_dispatch = { encoder: null, bindings: null, group_count_x: 1, group_count_y: 1, group_count_z: 1 };
|
|
997
1092
|
|
|
@@ -1009,6 +1104,7 @@ export class GPUFluidCascade {
|
|
|
1009
1104
|
}
|
|
1010
1105
|
} finally {
|
|
1011
1106
|
record.child = null;
|
|
1107
|
+
record.turbulence = null;
|
|
1012
1108
|
cascade.#free_restrictions.push(record);
|
|
1013
1109
|
}
|
|
1014
1110
|
}
|
|
@@ -1028,6 +1124,7 @@ export class GPUFluidCascade {
|
|
|
1028
1124
|
b.out_u = this.#velocity.u;
|
|
1029
1125
|
b.out_v = this.#velocity.v;
|
|
1030
1126
|
b.out_w = this.#velocity.w;
|
|
1127
|
+
b.fluid_turbulence = record.turbulence;
|
|
1031
1128
|
|
|
1032
1129
|
const dispatch = this.#restrict_dispatch;
|
|
1033
1130
|
dispatch.encoder = encoder;
|
|
@@ -1040,13 +1137,13 @@ export class GPUFluidCascade {
|
|
|
1040
1137
|
|
|
1041
1138
|
dispatch.encoder = null;
|
|
1042
1139
|
dispatch.bindings = null;
|
|
1043
|
-
b.restriction = b.child_u = b.child_v = b.child_w = null;
|
|
1140
|
+
b.restriction = b.child_u = b.child_v = b.child_w = b.fluid_turbulence = null;
|
|
1044
1141
|
}
|
|
1045
1142
|
|
|
1046
1143
|
/** The fill's bindings, rebound for every fill. */
|
|
1047
1144
|
#fill_bindings = {
|
|
1048
1145
|
fill: null, parent: null, parent_u: null, parent_v: null, parent_w: null, parent_pressure: null,
|
|
1049
|
-
velocity_u: null, velocity_v: null, velocity_w: null, pressure: null,
|
|
1146
|
+
velocity_u: null, velocity_v: null, velocity_w: null, pressure: null, fluid_turbulence: null,
|
|
1050
1147
|
};
|
|
1051
1148
|
|
|
1052
1149
|
#fill_dispatch = { encoder: null, bindings: null, group_count_x: 1, group_count_y: 1, group_count_z: 1 };
|
|
@@ -1066,6 +1163,7 @@ export class GPUFluidCascade {
|
|
|
1066
1163
|
} finally {
|
|
1067
1164
|
record.parent_bindings.u = record.parent_bindings.v = record.parent_bindings.w = null;
|
|
1068
1165
|
record.parent_bindings.pressure = null;
|
|
1166
|
+
record.turbulence = null;
|
|
1069
1167
|
cascade.#free_fills.push(record);
|
|
1070
1168
|
}
|
|
1071
1169
|
}
|
|
@@ -1087,6 +1185,7 @@ export class GPUFluidCascade {
|
|
|
1087
1185
|
b.velocity_v = this.#velocity.v;
|
|
1088
1186
|
b.velocity_w = this.#velocity.w;
|
|
1089
1187
|
b.pressure = this.#pressure;
|
|
1188
|
+
b.fluid_turbulence = record.turbulence;
|
|
1090
1189
|
|
|
1091
1190
|
const dispatch = this.#fill_dispatch;
|
|
1092
1191
|
dispatch.encoder = encoder;
|
|
@@ -1098,7 +1197,7 @@ export class GPUFluidCascade {
|
|
|
1098
1197
|
|
|
1099
1198
|
dispatch.encoder = null;
|
|
1100
1199
|
dispatch.bindings = null;
|
|
1101
|
-
b.fill = b.parent = b.parent_u = b.parent_v = b.parent_w = b.parent_pressure = null;
|
|
1200
|
+
b.fill = b.parent = b.parent_u = b.parent_v = b.parent_w = b.parent_pressure = b.fluid_turbulence = null;
|
|
1102
1201
|
}
|
|
1103
1202
|
|
|
1104
1203
|
/**
|
|
@@ -1116,6 +1215,7 @@ export class GPUFluidCascade {
|
|
|
1116
1215
|
record.forcing = null;
|
|
1117
1216
|
record.parent_bindings.u = record.parent_bindings.v = record.parent_bindings.w = null;
|
|
1118
1217
|
record.parent_bindings.pressure = null;
|
|
1218
|
+
record.turbulence = null;
|
|
1119
1219
|
cascade.#free_records.push(record);
|
|
1120
1220
|
}
|
|
1121
1221
|
}
|
|
@@ -1165,6 +1265,7 @@ export class GPUFluidCascade {
|
|
|
1165
1265
|
parent.v = record.parent_bindings.v;
|
|
1166
1266
|
parent.w = record.parent_bindings.w;
|
|
1167
1267
|
parent.pressure = record.parent_bindings.pressure;
|
|
1268
|
+
parent.turbulence = record.turbulence;
|
|
1168
1269
|
|
|
1169
1270
|
mac.record_ghosts(encoder, parent, ghosts);
|
|
1170
1271
|
|
|
@@ -1200,7 +1301,7 @@ export class GPUFluidCascade {
|
|
|
1200
1301
|
|
|
1201
1302
|
mac.record_gradient(encoder, advected, this.#pressure, solid, velocity, ghosts);
|
|
1202
1303
|
|
|
1203
|
-
parent.uniform = parent.u = parent.v = parent.w = parent.pressure = null;
|
|
1304
|
+
parent.uniform = parent.u = parent.v = parent.w = parent.pressure = parent.turbulence = null;
|
|
1204
1305
|
ghosts.u = ghosts.v = ghosts.w = ghosts.pressure = null;
|
|
1205
1306
|
forward.u = forward.v = forward.w = null;
|
|
1206
1307
|
advected.u = advected.v = advected.w = null;
|
|
@@ -1225,6 +1326,7 @@ export class GPUFluidCascade {
|
|
|
1225
1326
|
this.#no_forcing.destroy();
|
|
1226
1327
|
this.#no_confinement.destroy();
|
|
1227
1328
|
this.#far_field_pressure.destroy();
|
|
1329
|
+
this.#no_turbulence.destroy();
|
|
1228
1330
|
|
|
1229
1331
|
for (const texture of this.#far_field_faces) {
|
|
1230
1332
|
texture.destroy();
|
|
@@ -48,7 +48,9 @@ export const GPU_FLUID_CASCADE_STACK_LIMIT: number;
|
|
|
48
48
|
* `read_keep` (`k`). All retained: nothing is allocated to read them.
|
|
49
49
|
*
|
|
50
50
|
* Created placed around `anchor` and filled from the far field of `atmosphere` (velocity `v_far`,
|
|
51
|
-
* pressure 0)
|
|
51
|
+
* pressure 0): its mean at creation, and with turbulence, at the first tick that has any, every
|
|
52
|
+
* cascade's whole window filled from its parent, coarsest first, so the coarsest takes the far field's
|
|
53
|
+
* eddies exactly and every finer one its parent's. After that nothing is allocated per tick.
|
|
52
54
|
*/
|
|
53
55
|
export class GPUFluidCascadeStack {
|
|
54
56
|
/**
|
|
@@ -148,8 +150,11 @@ export class GPUFluidCascadeStack {
|
|
|
148
150
|
* @param {number} [options.vorticity_confinement] its strength ε, per second, ≥ 0, for both of the
|
|
149
151
|
* tick's steps, each with its own cell and step (`GPUFluidCascade#record_step`); 0, the default,
|
|
150
152
|
* records no curl pass
|
|
153
|
+
* @param {GPUTextureView|null} [options.turbulence] the far field's turbulence tile
|
|
154
|
+
* (`GPUSceneWind#turbulence`), which every pass that reads the far field binds; `null`, the default,
|
|
155
|
+
* only for a far field with none
|
|
151
156
|
*/
|
|
152
|
-
record_tick({ graph, tick, dt, anchor, atmosphere, atmosphere_offset, forcing, vorticity_confinement }: {
|
|
157
|
+
record_tick({ graph, tick, dt, anchor, atmosphere, atmosphere_offset, forcing, vorticity_confinement, turbulence }: {
|
|
153
158
|
graph: FrameGraph;
|
|
154
159
|
tick: number;
|
|
155
160
|
dt: number;
|
|
@@ -158,6 +163,7 @@ export class GPUFluidCascadeStack {
|
|
|
158
163
|
atmosphere_offset: number;
|
|
159
164
|
forcing?: GPUFluidForcing | null;
|
|
160
165
|
vorticity_confinement?: number;
|
|
166
|
+
turbulence?: GPUTextureView | null;
|
|
161
167
|
}): void;
|
|
162
168
|
/**
|
|
163
169
|
* Record the frame's publish into `graph`, after its last tick (GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md
|
|
@@ -167,7 +173,8 @@ export class GPUFluidCascadeStack {
|
|
|
167
173
|
* wind.set_cascades(count, resolution)
|
|
168
174
|
* wind.set_cascade_window(c, corner, cell_size) every cascade
|
|
169
175
|
* wind.set_cascade_decay(c, k) k = e^(−(Λ(t) − Λ(t_s,c))), read_keep
|
|
170
|
-
* wind.set_far_velocity(
|
|
176
|
+
* wind.set_far_velocity(u(t)) the far field's mean
|
|
177
|
+
* wind.set_turbulence(σ, offset, L) its turbulence
|
|
171
178
|
*
|
|
172
179
|
* A tile holds `v − v_far(t_s,c)` and `k` is taken for `t`, so a cascade that did not step reads
|
|
173
180
|
* from its old tile through its new decay. A cascade that is published takes the field's
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUFluidCascadeStack.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/fluid/GPUFluidCascadeStack.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUFluidCascadeStack.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/fluid/GPUFluidCascadeStack.js"],"names":[],"mappings":"AAUA;;;;GAIG;AAEH;;;GAGG;AACH,4CAFU,MAAM,CAE+B;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH;IACI;;;;;OAKG;IACH,iCAFW,OAAO,0CAA0C,EAAE,eAAe,QAK5E;IAuZD;;;;OAIG;IACH,uCAJW,MAAM,4BAEN;QAAC,OAAO,EAAE,OAAO,wCAAwC,EAAE,sBAAsB,CAAA;KAAC,QAmC5F;IAvYD;;;;;;;;;;OAUG;IACH;QAT8B,MAAM;QACE,UAAU,EAArC,UAAU,MAAM,CAAC;QAED,SAAS,EAAzB,MAAM;QACU,aAAa,EAA7B,MAAM;QACqB,MAAM,EAAjC,UAAU,MAAM,CAAC;QACc,UAAU,EAAzC,YAAY,GAAC,MAAM,EAAE;QACL,iBAAiB,EAAjC,MAAM;OAwChB;IA/DD;;;;OAIG;IACH,iBAFU,OAAO,CAEM;IAEvB;;;;OAIG;IACH,UAFU,OAAO,CAED;IAqDhB,wBAAwB;IACxB,4BAEC;IAED;;;OAGG;IACH,uCAEC;IAED;;;OAGG;IACH,wBAEC;IAED;;;;OAIG;IACH,WAHW,MAAM,GACJ,eAAe,CAI3B;IAED;;;;;OAKG;IACH,qBAFW,YAAY,GAAC,MAAM,EAAE,QAY/B;IAED;;;;;;OAMG;IACH,wBAHW,YAAY,GAAC,MAAM,EAAE,UACrB,MAAM,QAMhB;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH;QAjB+B,KAAK,EAAzB,UAAU;QACM,IAAI,EAApB,MAAM;QAEU,EAAE,EAAlB,MAAM;QACqB,MAAM,EAAjC,UAAU,MAAM,CAAC;QACc,UAAU,EAAzC,YAAY,GAAC,MAAM,EAAE;QAEL,iBAAiB,EAAjC,MAAM;QACyB,OAAO,GAAtC,eAAe,GAAC,IAAI;QAEH,qBAAqB,GAAtC,MAAM;QAGwB,UAAU,GAAxC,iBAAe,IAAI;aAoH7B;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH;QAN+B,KAAK,EAAzB,UAAU;QACY,IAAI,EAA1B,YAAY;QACmB,UAAU,EAAzC,YAAY,GAAC,MAAM,EAAE;QAEL,iBAAiB,EAAjC,MAAM;aA8DhB;IA+DD;;OAEG;IACH,gBAUC;;CACJ;yBA9gBY,OAAO,2DAA2D,EAAE,UAAU;2BAC9E,OAAO,yBAAyB,EAAE,YAAY;8BAC9C,OAAO,8BAA8B,EAAE,eAAe;gCATnC,sBAAsB"}
|