@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
|
@@ -4,6 +4,7 @@ import { FluidComponent } from "../../fluid/ecs/FluidComponent.js";
|
|
|
4
4
|
import { fluid_sample_domain_bounds } from "../../fluid/ecs/fluid_sample_domain_bounds.js";
|
|
5
5
|
import { fluid_sample_velocity_world_mps } from "../../fluid/ecs/fluid_sample_velocity_world_mps.js";
|
|
6
6
|
import { AbstractClothWind } from "./AbstractClothWind.js";
|
|
7
|
+
import { fluid_atmosphere_velocity_at } from "../../fluid/turbulence/fluid_atmosphere_velocity_at.js";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* # The air, read out of the CPU fluid simulation that is already running
|
|
@@ -22,9 +23,9 @@ import { AbstractClothWind } from "./AbstractClothWind.js";
|
|
|
22
23
|
* (GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md §6). So this is the one source a
|
|
23
24
|
* CPU-fluid scene needs rather than a thing to switch between: a banner inside
|
|
24
25
|
* a wind tunnel volume reads the tunnel, the same banner carried outside reads
|
|
25
|
-
* the prevailing weather and its
|
|
26
|
-
* happened. The
|
|
27
|
-
* read.
|
|
26
|
+
* the prevailing weather and its turbulence where it hangs, and the cloth never
|
|
27
|
+
* learns which happened. The far field runs on the scene's clock (G2), so
|
|
28
|
+
* `sample`'s `time` is not read.
|
|
28
29
|
*
|
|
29
30
|
* ## Two units problems, and they are the reason this class exists at all
|
|
30
31
|
*
|
|
@@ -201,7 +202,7 @@ export class ClothFluidWind extends AbstractClothWind {
|
|
|
201
202
|
* @param {number} y
|
|
202
203
|
* @param {number} z
|
|
203
204
|
* @param {number} time not read: a field's velocities are a snapshot of this
|
|
204
|
-
* tick, and the far field
|
|
205
|
+
* tick, and the far field runs on the scene clock
|
|
205
206
|
* @returns {Float64Array|number[]}
|
|
206
207
|
*/
|
|
207
208
|
sample(out, x, y, z, time) {
|
|
@@ -224,11 +225,8 @@ export class ClothFluidWind extends AbstractClothWind {
|
|
|
224
225
|
return out;
|
|
225
226
|
}
|
|
226
227
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
out[0] = atmosphere[FluidAtmosphere.VELOCITY_X];
|
|
230
|
-
out[1] = atmosphere[FluidAtmosphere.VELOCITY_Y];
|
|
231
|
-
out[2] = atmosphere[FluidAtmosphere.VELOCITY_Z];
|
|
228
|
+
// the far field there, its turbulence included
|
|
229
|
+
fluid_atmosphere_velocity_at(out, this.__atmosphere, 0, x, y, z);
|
|
232
230
|
|
|
233
231
|
return out;
|
|
234
232
|
}
|
|
@@ -10,8 +10,8 @@ export const CLOTH_GPU_FLUID_WIND_AXIS_LIMIT: number;
|
|
|
10
10
|
*
|
|
11
11
|
* GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md §12: the default source for a scene with the GPU wind —
|
|
12
12
|
* an adapter over `GPUFluidSystem`'s CPU read API, so cloth reads the same wind particles, water and
|
|
13
|
-
* volumetrics do: the fluid's cascades around its domain, its far field (`GlobalFluidEffector`s
|
|
14
|
-
*
|
|
13
|
+
* volumetrics do: the fluid's cascades around its domain, its far field (`GlobalFluidEffector`s, their
|
|
14
|
+
* mean wind and its turbulence) everywhere else.
|
|
15
15
|
*
|
|
16
16
|
* `ClothWorld` makes one by itself while the scene has a domain and nothing was assigned to its
|
|
17
17
|
* `wind` (`ClothWorld#wind`); assigning one is the same source, made by hand:
|
|
@@ -23,23 +23,23 @@ export const CLOTH_GPU_FLUID_WIND_AXIS_LIMIT: number;
|
|
|
23
23
|
* The GPU's answer is a frame or more late, so cloth reads **lattices**: the wind on a grid over a
|
|
24
24
|
* box padded around each cloth, asked for ahead and interpolated when it lands.
|
|
25
25
|
*
|
|
26
|
-
* - **{@link begin}**, once a tick,
|
|
27
|
-
* last tick. A lattice no cloth read during the last tick is let go; one only {@link sample} read
|
|
26
|
+
* - **{@link begin}**, once a tick, swaps in the lattices delivered since the last tick. A lattice no cloth read during the last tick is let go; one only {@link sample} read
|
|
28
27
|
* (a sleeping cloth's wake test) is asked for again over its own box, so a banner asleep inside it
|
|
29
28
|
* still notices a gust.
|
|
30
29
|
* - **{@link varies}** answers whether a delivered lattice covers the cloth's box — then the cloth
|
|
31
30
|
* samples per particle — and asks for the box padded by {@link padding}, unless a request in flight
|
|
32
31
|
* already covers it: one request at a time per cloth, a new lattice as fast as they land.
|
|
33
32
|
* - **{@link sample}** interpolates the newest delivered lattice holding the point
|
|
34
|
-
* (`scs3d_sample_linear3_strided`, x fastest, four floats a point), or answers the far field
|
|
33
|
+
* (`scs3d_sample_linear3_strided`, x fastest, four floats a point), or answers the far field there
|
|
34
|
+
* (`GPUFluidSystem#far_field_at`).
|
|
35
35
|
*
|
|
36
|
-
* Before the first delivery, and wherever no lattice reaches, the air is the far field
|
|
37
|
-
*
|
|
36
|
+
* Before the first delivery, and wherever no lattice reaches, the air is the far field, which a cloth
|
|
37
|
+
* samples once: its mean, and its turbulence where the cloth asks.
|
|
38
38
|
*
|
|
39
39
|
* ## Clocks
|
|
40
40
|
*
|
|
41
|
-
* The far field
|
|
42
|
-
*
|
|
41
|
+
* The far field runs on the scene's clock (G2, `FluidEffectorsSystem`'s fold), not the cloth's
|
|
42
|
+
* age: `sample`'s `time` is not read. Lattices arrive when the GPU answers, so two runs of a
|
|
43
43
|
* scene need not read the same air (F4, accepted): the parity gate of the worker against the inline
|
|
44
44
|
* system holds for cloths registered on the same tick and for a time-invariant wind
|
|
45
45
|
* (`WorkerClothSystem.spec.js`).
|
|
@@ -58,7 +58,7 @@ export const CLOTH_GPU_FLUID_WIND_AXIS_LIMIT: number;
|
|
|
58
58
|
export class ClothGPUFluidWind extends AbstractClothWind {
|
|
59
59
|
/**
|
|
60
60
|
* @param {import("../../../graphics3/GPUFluidSystem.js").GPUFluidSystem} fluid the scene's GPU
|
|
61
|
-
* fluid: its `
|
|
61
|
+
* fluid: its `far_field_at`, `request` and `status`
|
|
62
62
|
*/
|
|
63
63
|
constructor(fluid: import("../../../graphics3/GPUFluidSystem.js").GPUFluidSystem);
|
|
64
64
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClothGPUFluidWind.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/wind/ClothGPUFluidWind.js"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,8CAFU,MAAM,CAEkC;AAuDlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH;
|
|
1
|
+
{"version":3,"file":"ClothGPUFluidWind.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/cloth/wind/ClothGPUFluidWind.js"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,8CAFU,MAAM,CAEkC;AAuDlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH;IAuCI;;;OAGG;IACH,mBAHW,OAAO,sCAAsC,EAAE,cAAc,EAUvE;IAhDD;;;;;OAKG;IACH,SAFU,MAAM,CAEF;IAEd;;;;;OAKG;IACH,SAFU,MAAM,CAEF;IAoCd;;;OAGG;IACH,2EAEC;IAED;;;OAGG;IACH,4BAEC;IAED;;;OAGG;IACH,4BAEC;;CAkPJ;kCA7aiC,wBAAwB"}
|
|
@@ -69,8 +69,8 @@ function lattice_covers(lattice, min_x, min_y, min_z, max_x, max_y, max_z) {
|
|
|
69
69
|
*
|
|
70
70
|
* GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md §12: the default source for a scene with the GPU wind —
|
|
71
71
|
* an adapter over `GPUFluidSystem`'s CPU read API, so cloth reads the same wind particles, water and
|
|
72
|
-
* volumetrics do: the fluid's cascades around its domain, its far field (`GlobalFluidEffector`s
|
|
73
|
-
*
|
|
72
|
+
* volumetrics do: the fluid's cascades around its domain, its far field (`GlobalFluidEffector`s, their
|
|
73
|
+
* mean wind and its turbulence) everywhere else.
|
|
74
74
|
*
|
|
75
75
|
* `ClothWorld` makes one by itself while the scene has a domain and nothing was assigned to its
|
|
76
76
|
* `wind` (`ClothWorld#wind`); assigning one is the same source, made by hand:
|
|
@@ -82,23 +82,23 @@ function lattice_covers(lattice, min_x, min_y, min_z, max_x, max_y, max_z) {
|
|
|
82
82
|
* The GPU's answer is a frame or more late, so cloth reads **lattices**: the wind on a grid over a
|
|
83
83
|
* box padded around each cloth, asked for ahead and interpolated when it lands.
|
|
84
84
|
*
|
|
85
|
-
* - **{@link begin}**, once a tick,
|
|
86
|
-
* last tick. A lattice no cloth read during the last tick is let go; one only {@link sample} read
|
|
85
|
+
* - **{@link begin}**, once a tick, swaps in the lattices delivered since the last tick. A lattice no cloth read during the last tick is let go; one only {@link sample} read
|
|
87
86
|
* (a sleeping cloth's wake test) is asked for again over its own box, so a banner asleep inside it
|
|
88
87
|
* still notices a gust.
|
|
89
88
|
* - **{@link varies}** answers whether a delivered lattice covers the cloth's box — then the cloth
|
|
90
89
|
* samples per particle — and asks for the box padded by {@link padding}, unless a request in flight
|
|
91
90
|
* already covers it: one request at a time per cloth, a new lattice as fast as they land.
|
|
92
91
|
* - **{@link sample}** interpolates the newest delivered lattice holding the point
|
|
93
|
-
* (`scs3d_sample_linear3_strided`, x fastest, four floats a point), or answers the far field
|
|
92
|
+
* (`scs3d_sample_linear3_strided`, x fastest, four floats a point), or answers the far field there
|
|
93
|
+
* (`GPUFluidSystem#far_field_at`).
|
|
94
94
|
*
|
|
95
|
-
* Before the first delivery, and wherever no lattice reaches, the air is the far field
|
|
96
|
-
*
|
|
95
|
+
* Before the first delivery, and wherever no lattice reaches, the air is the far field, which a cloth
|
|
96
|
+
* samples once: its mean, and its turbulence where the cloth asks.
|
|
97
97
|
*
|
|
98
98
|
* ## Clocks
|
|
99
99
|
*
|
|
100
|
-
* The far field
|
|
101
|
-
*
|
|
100
|
+
* The far field runs on the scene's clock (G2, `FluidEffectorsSystem`'s fold), not the cloth's
|
|
101
|
+
* age: `sample`'s `time` is not read. Lattices arrive when the GPU answers, so two runs of a
|
|
102
102
|
* scene need not read the same air (F4, accepted): the parity gate of the worker against the inline
|
|
103
103
|
* system holds for cloths registered on the same tick and for a time-invariant wind
|
|
104
104
|
* (`WorkerClothSystem.spec.js`).
|
|
@@ -135,8 +135,6 @@ export class ClothGPUFluidWind extends AbstractClothWind {
|
|
|
135
135
|
/** @type {import("../../../graphics3/GPUFluidSystem.js").GPUFluidSystem} */
|
|
136
136
|
#fluid;
|
|
137
137
|
|
|
138
|
-
/** The far field this tick. */
|
|
139
|
-
#far = new Float64Array(3);
|
|
140
138
|
|
|
141
139
|
/** Delivered lattices, oldest first. @type {ClothWindLattice[]} */
|
|
142
140
|
#current = [];
|
|
@@ -157,7 +155,7 @@ export class ClothGPUFluidWind extends AbstractClothWind {
|
|
|
157
155
|
|
|
158
156
|
/**
|
|
159
157
|
* @param {import("../../../graphics3/GPUFluidSystem.js").GPUFluidSystem} fluid the scene's GPU
|
|
160
|
-
* fluid: its `
|
|
158
|
+
* fluid: its `far_field_at`, `request` and `status`
|
|
161
159
|
*/
|
|
162
160
|
constructor(fluid) {
|
|
163
161
|
super();
|
|
@@ -193,14 +191,12 @@ export class ClothGPUFluidWind extends AbstractClothWind {
|
|
|
193
191
|
}
|
|
194
192
|
|
|
195
193
|
/**
|
|
196
|
-
* @param {number} time not read: the
|
|
194
|
+
* @param {number} time not read: the far field runs on the scene clock
|
|
197
195
|
* @param {EntityComponentDataset} ecd not read
|
|
198
196
|
*/
|
|
199
197
|
begin(time, ecd) {
|
|
200
198
|
const fluid = this.#fluid;
|
|
201
199
|
|
|
202
|
-
fluid.far_field(this.#far);
|
|
203
|
-
|
|
204
200
|
// the last tick's reads decide what stays
|
|
205
201
|
const current = this.#current;
|
|
206
202
|
let kept = 0;
|
|
@@ -403,24 +399,20 @@ export class ClothGPUFluidWind extends AbstractClothWind {
|
|
|
403
399
|
|
|
404
400
|
/**
|
|
405
401
|
* The air at a world point, m/s: the newest delivered lattice holding it, interpolated, or the far
|
|
406
|
-
* field.
|
|
402
|
+
* field there (`GPUFluidSystem#far_field_at`), its turbulence included.
|
|
407
403
|
*
|
|
408
404
|
* @param {Float64Array|number[]} out
|
|
409
405
|
* @param {number} x
|
|
410
406
|
* @param {number} y
|
|
411
407
|
* @param {number} z
|
|
412
|
-
* @param {number} time not read: the
|
|
408
|
+
* @param {number} time not read: the far field runs on the scene clock
|
|
413
409
|
* @returns {Float64Array|number[]}
|
|
414
410
|
*/
|
|
415
411
|
sample(out, x, y, z, time) {
|
|
416
412
|
const lattice = this.#containing(x, y, z);
|
|
417
413
|
|
|
418
414
|
if (lattice === null) {
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
out[0] = far[0];
|
|
422
|
-
out[1] = far[1];
|
|
423
|
-
out[2] = far[2];
|
|
415
|
+
this.#fluid.far_field_at(out, x, y, z);
|
|
424
416
|
|
|
425
417
|
return out;
|
|
426
418
|
}
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
* ({@link fluid_apply_atmosphere }).
|
|
10
10
|
*
|
|
11
11
|
* - `TIME`: seconds the effectors system has integrated, at the end of its last tick.
|
|
12
|
-
* - `VELOCITY_*`: the far field
|
|
13
|
-
*
|
|
12
|
+
* - `VELOCITY_*`: `u`, the far field's mean: it relaxes toward the globals' drag-weighted
|
|
13
|
+
* mean wind at `DRAG`. Where a reader takes the far field as one vector, this is it.
|
|
14
14
|
* - `LAMBDA`: `Λ = ∫ D dt`, so air left to the far field over an interval keeps
|
|
15
15
|
* `e^(−ΔΛ)` of its deviation from it, however `D` varied.
|
|
16
16
|
* - `FORCED_*`: `P`, the velocity the summed body force has given air the atmosphere
|
|
@@ -20,6 +20,15 @@
|
|
|
20
20
|
* `F` and `D` varied. Not part of the far field: a term inside CPU fields only.
|
|
21
21
|
* - `FORCE_*`: `F`, the sum of the globals' body forces, this tick.
|
|
22
22
|
* - `DRAG`: `D`, the sum of the globals' drags, this tick.
|
|
23
|
+
* - `TURBULENCE_OFFSET_*`: `o = ∫ u dt`, how far the mean has carried the turbulence since the
|
|
24
|
+
* first tick, WORLD units, integrated exactly tick by tick.
|
|
25
|
+
* - `TURBULENCE_SIGMA`: `σ`, the turbulence's rms on each axis, `intensity · |u|`, WORLD units per
|
|
26
|
+
* second; 0 is none.
|
|
27
|
+
* - `TURBULENCE_LENGTH`: `L`, its length scale, WORLD units.
|
|
28
|
+
*
|
|
29
|
+
* The far field at a point `x` is `u + σ·T((x − o) ⊙ S⁻¹)` ({@link fluid_atmosphere_velocity_at }),
|
|
30
|
+
* `T` the unit-rms turbulence tile and `S` its size in the world for `L`. Not part of CPU fields,
|
|
31
|
+
* which take `u` alone.
|
|
23
32
|
*/
|
|
24
33
|
export type FluidAtmosphere = number;
|
|
25
34
|
export namespace FluidAtmosphere {
|
|
@@ -35,6 +44,11 @@ export namespace FluidAtmosphere {
|
|
|
35
44
|
let FORCE_Y: number;
|
|
36
45
|
let FORCE_Z: number;
|
|
37
46
|
let DRAG: number;
|
|
47
|
+
let TURBULENCE_OFFSET_X: number;
|
|
48
|
+
let TURBULENCE_OFFSET_Y: number;
|
|
49
|
+
let TURBULENCE_OFFSET_Z: number;
|
|
50
|
+
let TURBULENCE_SIGMA: number;
|
|
51
|
+
let TURBULENCE_LENGTH: number;
|
|
38
52
|
}
|
|
39
53
|
/**
|
|
40
54
|
* Words in an atmosphere record.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FluidAtmosphere.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/fluid/FluidAtmosphere.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FluidAtmosphere.d.ts","sourceRoot":"","sources":["../../../../../src/engine/physics/fluid/FluidAtmosphere.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAiCU,MAAM;;;;;;;;;;;;;;;;;;;;AAsBhB;;;GAGG;AACH,qCAFU,MAAM,CAEyB;;;;;;;;;;;;mCAc/B,MAAM;;;;;;;;;;;;;;;;;;;;AAchB;;;GAGG;AACH,2CAFU,MAAM,CAE8B"}
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
* ({@link fluid_apply_atmosphere}).
|
|
10
10
|
*
|
|
11
11
|
* - `TIME`: seconds the effectors system has integrated, at the end of its last tick.
|
|
12
|
-
* - `VELOCITY_*`: the far field
|
|
13
|
-
*
|
|
12
|
+
* - `VELOCITY_*`: `u`, the far field's mean: it relaxes toward the globals' drag-weighted
|
|
13
|
+
* mean wind at `DRAG`. Where a reader takes the far field as one vector, this is it.
|
|
14
14
|
* - `LAMBDA`: `Λ = ∫ D dt`, so air left to the far field over an interval keeps
|
|
15
15
|
* `e^(−ΔΛ)` of its deviation from it, however `D` varied.
|
|
16
16
|
* - `FORCED_*`: `P`, the velocity the summed body force has given air the atmosphere
|
|
@@ -20,6 +20,15 @@
|
|
|
20
20
|
* `F` and `D` varied. Not part of the far field: a term inside CPU fields only.
|
|
21
21
|
* - `FORCE_*`: `F`, the sum of the globals' body forces, this tick.
|
|
22
22
|
* - `DRAG`: `D`, the sum of the globals' drags, this tick.
|
|
23
|
+
* - `TURBULENCE_OFFSET_*`: `o = ∫ u dt`, how far the mean has carried the turbulence since the
|
|
24
|
+
* first tick, WORLD units, integrated exactly tick by tick.
|
|
25
|
+
* - `TURBULENCE_SIGMA`: `σ`, the turbulence's rms on each axis, `intensity · |u|`, WORLD units per
|
|
26
|
+
* second; 0 is none.
|
|
27
|
+
* - `TURBULENCE_LENGTH`: `L`, its length scale, WORLD units.
|
|
28
|
+
*
|
|
29
|
+
* The far field at a point `x` is `u + σ·T((x − o) ⊙ S⁻¹)` ({@link fluid_atmosphere_velocity_at}),
|
|
30
|
+
* `T` the unit-rms turbulence tile and `S` its size in the world for `L`. Not part of CPU fields,
|
|
31
|
+
* which take `u` alone.
|
|
23
32
|
*
|
|
24
33
|
* @readonly
|
|
25
34
|
* @enum {number}
|
|
@@ -37,13 +46,18 @@ export const FluidAtmosphere = {
|
|
|
37
46
|
FORCE_Y: 9,
|
|
38
47
|
FORCE_Z: 10,
|
|
39
48
|
DRAG: 11,
|
|
49
|
+
TURBULENCE_OFFSET_X: 12,
|
|
50
|
+
TURBULENCE_OFFSET_Y: 13,
|
|
51
|
+
TURBULENCE_OFFSET_Z: 14,
|
|
52
|
+
TURBULENCE_SIGMA: 15,
|
|
53
|
+
TURBULENCE_LENGTH: 16,
|
|
40
54
|
};
|
|
41
55
|
|
|
42
56
|
/**
|
|
43
57
|
* Words in an atmosphere record.
|
|
44
58
|
* @type {number}
|
|
45
59
|
*/
|
|
46
|
-
export const FLUID_ATMOSPHERE_WORDS =
|
|
60
|
+
export const FLUID_ATMOSPHERE_WORDS = 17;
|
|
47
61
|
|
|
48
62
|
/**
|
|
49
63
|
* Layout of a field's own atmosphere record, {@link FluidField#atmosphere}: the instant
|
|
@@ -6,8 +6,7 @@
|
|
|
6
6
|
* Every effector class in a saved component needs its adapter in the same registry: the engine's
|
|
7
7
|
* are {@link GlobalFluidEffectorSerializationAdapter}, {@link ImpulseFluidEffectorSerializationAdapter},
|
|
8
8
|
* {@link WakeFluidEffectorSerializationAdapter} and {@link VortexFluidEffectorSerializationAdapter}, and
|
|
9
|
-
* an effector class of your own needs a `typeName` and an adapter of its own.
|
|
10
|
-
* go with it, so a save resumes the gust where it was.
|
|
9
|
+
* an effector class of your own needs a `typeName` and an adapter of its own.
|
|
11
10
|
*
|
|
12
11
|
* Like the other physics adapters this is not in `populateEngineSerializationRegistry`; the host
|
|
13
12
|
* registers it with the effector adapters.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FluidEffectorsComponentSerializationAdapter.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.js"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"FluidEffectorsComponentSerializationAdapter.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH;;IAEI,sCAAgC;IAGhC;;OAEG;IACH,eAFU,mCAAiC,IAAI,CAE1B;IAErB;;;OAGG;IACH,+EAEC;IAED;;;OAGG;IACH,uCAFW,uBAAuB,QAWjC;IAED;;;;;OAKG;IACH,yCAFW,uBAAuB,QAWjC;CACJ;gDAtE+C,gEAAgE;wCACxE,8BAA8B"}
|
|
@@ -9,8 +9,7 @@ import { FluidEffectorsComponent } from "./FluidEffectorsComponent.js";
|
|
|
9
9
|
* Every effector class in a saved component needs its adapter in the same registry: the engine's
|
|
10
10
|
* are {@link GlobalFluidEffectorSerializationAdapter}, {@link ImpulseFluidEffectorSerializationAdapter},
|
|
11
11
|
* {@link WakeFluidEffectorSerializationAdapter} and {@link VortexFluidEffectorSerializationAdapter}, and
|
|
12
|
-
* an effector class of your own needs a `typeName` and an adapter of its own.
|
|
13
|
-
* go with it, so a save resumes the gust where it was.
|
|
12
|
+
* an effector class of your own needs a `typeName` and an adapter of its own.
|
|
14
13
|
*
|
|
15
14
|
* Like the other physics adapters this is not in `populateEngineSerializationRegistry`; the host
|
|
16
15
|
* registers it with the effector adapters.
|
|
@@ -11,22 +11,25 @@
|
|
|
11
11
|
*
|
|
12
12
|
* 3. the fold of every {@link GlobalFluidEffector} into one far field, integrated in f64.
|
|
13
13
|
*
|
|
14
|
-
* Effectors carry state across ticks — a wake's trail advances in its sync
|
|
15
|
-
*
|
|
16
|
-
* effectors. It used to be a line in each fluid system, and a scene with two of them advanced
|
|
14
|
+
* Effectors carry state across ticks — a wake's trail advances in its sync — so this has to happen
|
|
15
|
+
* exactly once a tick however many fluid systems apply the effectors. It used to be a line in each fluid system, and a scene with two of them advanced
|
|
17
16
|
* every wake twice.
|
|
18
17
|
*
|
|
19
18
|
* ## The far field
|
|
20
19
|
*
|
|
21
20
|
* The globals fold into `D = Σ d` (their drags), `W = Σ (d/D)·w` (the drag-weighted mean of their
|
|
22
|
-
* winds), `
|
|
21
|
+
* winds), `I = Σ (d/D)·i` and `L = Σ (d/D)·l` (of their turbulence intensities and length scales)
|
|
22
|
+
* and `F = Σ force`. The far field is `u`, its mean, plus turbulence of rms `σ = I·|u|`:
|
|
23
23
|
*
|
|
24
24
|
* - `u` relaxes toward `W` exactly, `u ← W + (u − W)·e^(−D·dt)`. Only this system's first fold
|
|
25
25
|
* seeds it at `W`, so a scene that starts with its globals starts in steady state; a global
|
|
26
26
|
* that arrives later relaxes the air from where it is, at its drag. With `D = 0` — the last
|
|
27
27
|
* global gone included — nothing relaxes it and it holds. A scene that never had a global is
|
|
28
28
|
* still air; calm is authored as a global with wind 0 and a drag.
|
|
29
|
-
* - `
|
|
29
|
+
* - `I` and `L` are this tick's, and with `D = 0` hold where they were, like `u`.
|
|
30
|
+
* - the turbulence is carried by `u`: its offset `o = ∫ u dt` is integrated exactly over each tick
|
|
31
|
+
* along `u`'s relaxation, `W·dt + (u₀ − W)·(1 − e^(−D·dt))/D`, or `u·dt` with no drag. `o` is this
|
|
32
|
+
* system's own and starts at 0, so a scene loaded from a save starts the eddies over.
|
|
30
33
|
* - `Λ += D·dt`, so a field brought from one instant to another keeps `e^(−ΔΛ)` of its deviation
|
|
31
34
|
* from the far field however `D` varied in between.
|
|
32
35
|
* - `F` is not part of the far field: a world-wide body force would be an unbounded downdraft at
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FluidEffectorsSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/ecs/FluidEffectorsSystem.js"],"names":[],"mappings":"AASA
|
|
1
|
+
{"version":3,"file":"FluidEffectorsSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/ecs/FluidEffectorsSystem.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH;;IAEI,mIAME;IAyEF;;;;;;;;OAQG;IACH,qBAHW,YAAY,GAAC,MAAM,EAAE,UACrB,MAAM,QAQhB;;CAkMJ;uBA3VsB,wBAAwB;wCAIP,8BAA8B;4CAL1B,uDAAuD;4BAEvE,uCAAuC"}
|
|
@@ -20,22 +20,25 @@ import { fluid_sync_effectors_from_transform } from "./fluid_sync_effectors_from
|
|
|
20
20
|
*
|
|
21
21
|
* 3. the fold of every {@link GlobalFluidEffector} into one far field, integrated in f64.
|
|
22
22
|
*
|
|
23
|
-
* Effectors carry state across ticks — a wake's trail advances in its sync
|
|
24
|
-
*
|
|
25
|
-
* effectors. It used to be a line in each fluid system, and a scene with two of them advanced
|
|
23
|
+
* Effectors carry state across ticks — a wake's trail advances in its sync — so this has to happen
|
|
24
|
+
* exactly once a tick however many fluid systems apply the effectors. It used to be a line in each fluid system, and a scene with two of them advanced
|
|
26
25
|
* every wake twice.
|
|
27
26
|
*
|
|
28
27
|
* ## The far field
|
|
29
28
|
*
|
|
30
29
|
* The globals fold into `D = Σ d` (their drags), `W = Σ (d/D)·w` (the drag-weighted mean of their
|
|
31
|
-
* winds), `
|
|
30
|
+
* winds), `I = Σ (d/D)·i` and `L = Σ (d/D)·l` (of their turbulence intensities and length scales)
|
|
31
|
+
* and `F = Σ force`. The far field is `u`, its mean, plus turbulence of rms `σ = I·|u|`:
|
|
32
32
|
*
|
|
33
33
|
* - `u` relaxes toward `W` exactly, `u ← W + (u − W)·e^(−D·dt)`. Only this system's first fold
|
|
34
34
|
* seeds it at `W`, so a scene that starts with its globals starts in steady state; a global
|
|
35
35
|
* that arrives later relaxes the air from where it is, at its drag. With `D = 0` — the last
|
|
36
36
|
* global gone included — nothing relaxes it and it holds. A scene that never had a global is
|
|
37
37
|
* still air; calm is authored as a global with wind 0 and a drag.
|
|
38
|
-
* - `
|
|
38
|
+
* - `I` and `L` are this tick's, and with `D = 0` hold where they were, like `u`.
|
|
39
|
+
* - the turbulence is carried by `u`: its offset `o = ∫ u dt` is integrated exactly over each tick
|
|
40
|
+
* along `u`'s relaxation, `W·dt + (u₀ − W)·(1 − e^(−D·dt))/D`, or `u·dt` with no drag. `o` is this
|
|
41
|
+
* system's own and starts at 0, so a scene loaded from a save starts the eddies over.
|
|
39
42
|
* - `Λ += D·dt`, so a field brought from one instant to another keeps `e^(−ΔΛ)` of its deviation
|
|
40
43
|
* from the far field however `D` varied in between.
|
|
41
44
|
* - `F` is not part of the far field: a world-wide body force would be an unbounded downdraft at
|
|
@@ -91,10 +94,22 @@ export class FluidEffectorsSystem extends System {
|
|
|
91
94
|
#global_count = 0;
|
|
92
95
|
|
|
93
96
|
/**
|
|
94
|
-
*
|
|
97
|
+
* `o`, how far `u` has carried the turbulence, WORLD units.
|
|
95
98
|
* @type {Float64Array}
|
|
96
99
|
*/
|
|
97
|
-
#
|
|
100
|
+
#turbulence_offset = new Float64Array(3);
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* `I`, the folded turbulence intensity, held with `D = 0`.
|
|
104
|
+
* @type {number}
|
|
105
|
+
*/
|
|
106
|
+
#turbulence_intensity = 0;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* `L`, the folded length scale, held with `D = 0`; 0 before any global with drag.
|
|
110
|
+
* @type {number}
|
|
111
|
+
*/
|
|
112
|
+
#turbulence_length = 0;
|
|
98
113
|
|
|
99
114
|
/**
|
|
100
115
|
* `u`, the far field's steady part, WORLD units per second.
|
|
@@ -207,10 +222,8 @@ export class FluidEffectorsSystem extends System {
|
|
|
207
222
|
#fold(dt) {
|
|
208
223
|
const globals = this.#globals;
|
|
209
224
|
const count = this.#global_count;
|
|
210
|
-
const gust = this.#gust;
|
|
211
225
|
|
|
212
226
|
let D = 0;
|
|
213
|
-
let gx = 0, gy = 0, gz = 0;
|
|
214
227
|
let fx = 0, fy = 0, fz = 0;
|
|
215
228
|
|
|
216
229
|
for (let i = 0; i < count; i++) {
|
|
@@ -224,19 +237,16 @@ export class FluidEffectorsSystem extends System {
|
|
|
224
237
|
fx += force[0];
|
|
225
238
|
fy += force[1];
|
|
226
239
|
fz += force[2];
|
|
227
|
-
|
|
228
|
-
effector.compute_gust(gust);
|
|
229
|
-
gx += gust[0];
|
|
230
|
-
gy += gust[1];
|
|
231
|
-
gz += gust[2];
|
|
232
240
|
}
|
|
233
241
|
|
|
234
242
|
const steady = this.#steady;
|
|
243
|
+
const offset = this.#turbulence_offset;
|
|
235
244
|
|
|
236
245
|
// With no drag (no global at all included) nothing relaxes the air: `u` holds.
|
|
237
246
|
if (D > 0) {
|
|
238
247
|
// Weights d/D, so one global's mean wind is its own wind exactly.
|
|
239
248
|
let wx = 0, wy = 0, wz = 0;
|
|
249
|
+
let intensity = 0, length = 0;
|
|
240
250
|
|
|
241
251
|
for (let i = 0; i < count; i++) {
|
|
242
252
|
const effector = globals[i];
|
|
@@ -251,11 +261,24 @@ export class FluidEffectorsSystem extends System {
|
|
|
251
261
|
wx += weight * wind[0];
|
|
252
262
|
wy += weight * wind[1];
|
|
253
263
|
wz += weight * wind[2];
|
|
264
|
+
|
|
265
|
+
intensity += weight * effector.turbulence_intensity;
|
|
266
|
+
length += weight * effector.turbulence_length;
|
|
254
267
|
}
|
|
255
268
|
|
|
269
|
+
this.#turbulence_intensity = intensity;
|
|
270
|
+
this.#turbulence_length = length;
|
|
271
|
+
|
|
256
272
|
if (this.#first_fold_done) {
|
|
257
273
|
const keep = Math.exp(-D * dt);
|
|
258
274
|
|
|
275
|
+
// ∫ u dt over the tick, along the relaxation, before u moves
|
|
276
|
+
const carried = (1 - keep) / D;
|
|
277
|
+
|
|
278
|
+
offset[0] += wx * dt + (steady[0] - wx) * carried;
|
|
279
|
+
offset[1] += wy * dt + (steady[1] - wy) * carried;
|
|
280
|
+
offset[2] += wz * dt + (steady[2] - wz) * carried;
|
|
281
|
+
|
|
259
282
|
steady[0] = wx + (steady[0] - wx) * keep;
|
|
260
283
|
steady[1] = wy + (steady[1] - wy) * keep;
|
|
261
284
|
steady[2] = wz + (steady[2] - wz) * keep;
|
|
@@ -264,7 +287,16 @@ export class FluidEffectorsSystem extends System {
|
|
|
264
287
|
steady[0] = wx;
|
|
265
288
|
steady[1] = wy;
|
|
266
289
|
steady[2] = wz;
|
|
290
|
+
|
|
291
|
+
offset[0] += wx * dt;
|
|
292
|
+
offset[1] += wy * dt;
|
|
293
|
+
offset[2] += wz * dt;
|
|
267
294
|
}
|
|
295
|
+
} else {
|
|
296
|
+
// nothing relaxes u: it carries the turbulence as it stands
|
|
297
|
+
offset[0] += steady[0] * dt;
|
|
298
|
+
offset[1] += steady[1] * dt;
|
|
299
|
+
offset[2] += steady[2] * dt;
|
|
268
300
|
}
|
|
269
301
|
|
|
270
302
|
this.#first_fold_done = true;
|
|
@@ -292,9 +324,9 @@ export class FluidEffectorsSystem extends System {
|
|
|
292
324
|
const atmosphere = this.#atmosphere;
|
|
293
325
|
|
|
294
326
|
atmosphere[FluidAtmosphere.TIME] += dt;
|
|
295
|
-
atmosphere[FluidAtmosphere.VELOCITY_X] = steady[0]
|
|
296
|
-
atmosphere[FluidAtmosphere.VELOCITY_Y] = steady[1]
|
|
297
|
-
atmosphere[FluidAtmosphere.VELOCITY_Z] = steady[2]
|
|
327
|
+
atmosphere[FluidAtmosphere.VELOCITY_X] = steady[0];
|
|
328
|
+
atmosphere[FluidAtmosphere.VELOCITY_Y] = steady[1];
|
|
329
|
+
atmosphere[FluidAtmosphere.VELOCITY_Z] = steady[2];
|
|
298
330
|
atmosphere[FluidAtmosphere.LAMBDA] += D * dt;
|
|
299
331
|
atmosphere[FluidAtmosphere.FORCED_X] = forced[0];
|
|
300
332
|
atmosphere[FluidAtmosphere.FORCED_Y] = forced[1];
|
|
@@ -303,5 +335,16 @@ export class FluidEffectorsSystem extends System {
|
|
|
303
335
|
atmosphere[FluidAtmosphere.FORCE_Y] = fy;
|
|
304
336
|
atmosphere[FluidAtmosphere.FORCE_Z] = fz;
|
|
305
337
|
atmosphere[FluidAtmosphere.DRAG] = D;
|
|
338
|
+
|
|
339
|
+
// no length scale, no tile to lay out: no turbulence
|
|
340
|
+
const length = this.#turbulence_length;
|
|
341
|
+
const speed = Math.sqrt(steady[0] * steady[0] + steady[1] * steady[1] + steady[2] * steady[2]);
|
|
342
|
+
const sigma = length > 0 && this.#turbulence_intensity > 0 ? this.#turbulence_intensity * speed : 0;
|
|
343
|
+
|
|
344
|
+
atmosphere[FluidAtmosphere.TURBULENCE_OFFSET_X] = offset[0];
|
|
345
|
+
atmosphere[FluidAtmosphere.TURBULENCE_OFFSET_Y] = offset[1];
|
|
346
|
+
atmosphere[FluidAtmosphere.TURBULENCE_OFFSET_Z] = offset[2];
|
|
347
|
+
atmosphere[FluidAtmosphere.TURBULENCE_SIGMA] = sigma;
|
|
348
|
+
atmosphere[FluidAtmosphere.TURBULENCE_LENGTH] = length;
|
|
306
349
|
}
|
|
307
350
|
}
|
|
@@ -38,6 +38,22 @@ export class FluidObstacle {
|
|
|
38
38
|
* @type {number}
|
|
39
39
|
*/
|
|
40
40
|
inflation: number;
|
|
41
|
+
/**
|
|
42
|
+
* How the obstacle stops the wind, 1/m. `0` (default): it is **solid**, and the air takes its
|
|
43
|
+
* velocity wherever it is. Above `0`: it is **porous**, the air passes through it and is slowed
|
|
44
|
+
* toward its velocity by `drag · |u − v| · (u − v)` each second, `u` the air's velocity and `v`
|
|
45
|
+
* the obstacle's.
|
|
46
|
+
*
|
|
47
|
+
* For something made of leaves or blades it is their drag coefficient times their one-sided area
|
|
48
|
+
* per cubic metre of the volume: a canopy of grass, a crop, the crown of a tree, a hedge. Their drag
|
|
49
|
+
* is spread through the volume, which is what makes the wind slow inside and fast above, and the
|
|
50
|
+
* shear at its top roll up into the gusts that run over a field.
|
|
51
|
+
*
|
|
52
|
+
* Only the GPU fluid has porous obstacles; the CPU fluid leaves them out.
|
|
53
|
+
*
|
|
54
|
+
* @type {number}
|
|
55
|
+
*/
|
|
56
|
+
drag: number;
|
|
41
57
|
/**
|
|
42
58
|
* True when the previous tick stamped a non-zero wall velocity. A body
|
|
43
59
|
* that stops (or sleeps — the solver zeroes velocities on sleep) must
|
|
@@ -58,6 +74,7 @@ export class FluidObstacle {
|
|
|
58
74
|
hash(): number;
|
|
59
75
|
toJSON(): {
|
|
60
76
|
inflation: number;
|
|
77
|
+
drag: number;
|
|
61
78
|
};
|
|
62
79
|
fromJSON(json: any): void;
|
|
63
80
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FluidObstacle.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/ecs/FluidObstacle.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FluidObstacle.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/physics/fluid/ecs/FluidObstacle.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH;IAEI;;;;;;;;;;;;OAYG;IACH,WAFU,MAAM,CAEF;IAEd;;;;;;;;;;;;;;OAcG;IACH,MAFU,MAAM,CAEP;IAET;;;;;;;OAOG;IACH,aAFU,OAAO,CAEG;IAEpB;;;OAGG;IACH,cAHW,aAAa,GACZ,OAAO,CAUlB;IAED;;OAEG;IACH,QAFY,MAAM,CAIjB;IAED;;;MAKC;IAED,0BAGC;IASL;;;OAGG;IACH,0BAFU,OAAO,CAEsB;CAZtC;;kBAIS,MAAM"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { hash_mix2 } from "../../../../core/math/hash/hash_mix2.js";
|
|
1
2
|
import { computeHashFloat } from "../../../../core/primitives/numbers/computeHashFloat.js";
|
|
2
3
|
|
|
3
4
|
/**
|
|
@@ -42,6 +43,23 @@ export class FluidObstacle {
|
|
|
42
43
|
*/
|
|
43
44
|
inflation = 0;
|
|
44
45
|
|
|
46
|
+
/**
|
|
47
|
+
* How the obstacle stops the wind, 1/m. `0` (default): it is **solid**, and the air takes its
|
|
48
|
+
* velocity wherever it is. Above `0`: it is **porous**, the air passes through it and is slowed
|
|
49
|
+
* toward its velocity by `drag · |u − v| · (u − v)` each second, `u` the air's velocity and `v`
|
|
50
|
+
* the obstacle's.
|
|
51
|
+
*
|
|
52
|
+
* For something made of leaves or blades it is their drag coefficient times their one-sided area
|
|
53
|
+
* per cubic metre of the volume: a canopy of grass, a crop, the crown of a tree, a hedge. Their drag
|
|
54
|
+
* is spread through the volume, which is what makes the wind slow inside and fast above, and the
|
|
55
|
+
* shear at its top roll up into the gusts that run over a field.
|
|
56
|
+
*
|
|
57
|
+
* Only the GPU fluid has porous obstacles; the CPU fluid leaves them out.
|
|
58
|
+
*
|
|
59
|
+
* @type {number}
|
|
60
|
+
*/
|
|
61
|
+
drag = 0;
|
|
62
|
+
|
|
45
63
|
/**
|
|
46
64
|
* True when the previous tick stamped a non-zero wall velocity. A body
|
|
47
65
|
* that stops (or sleeps — the solver zeroes velocities on sleep) must
|
|
@@ -63,24 +81,26 @@ export class FluidObstacle {
|
|
|
63
81
|
if (other === null || other === undefined || other.isFluidObstacle !== true) {
|
|
64
82
|
return false;
|
|
65
83
|
}
|
|
66
|
-
return this.inflation === other.inflation;
|
|
84
|
+
return this.inflation === other.inflation && this.drag === other.drag;
|
|
67
85
|
}
|
|
68
86
|
|
|
69
87
|
/**
|
|
70
88
|
* @return {number}
|
|
71
89
|
*/
|
|
72
90
|
hash() {
|
|
73
|
-
return computeHashFloat(this.inflation);
|
|
91
|
+
return hash_mix2(computeHashFloat(this.inflation), computeHashFloat(this.drag));
|
|
74
92
|
}
|
|
75
93
|
|
|
76
94
|
toJSON() {
|
|
77
95
|
return {
|
|
78
96
|
inflation: this.inflation,
|
|
97
|
+
drag: this.drag,
|
|
79
98
|
};
|
|
80
99
|
}
|
|
81
100
|
|
|
82
101
|
fromJSON(json) {
|
|
83
102
|
if (json.inflation !== undefined) this.inflation = json.inflation;
|
|
103
|
+
this.drag = json.drag ?? 0;
|
|
84
104
|
}
|
|
85
105
|
}
|
|
86
106
|
|