@woosh/meep-engine 3.68.0 → 3.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +74 -0
- package/build/bundle-worker-terrain.js +1 -1
- package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +2 -17
- package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +1 -1
- package/editor/ecs/component/editors/ecs/Trail3DEditor.js +3 -18
- package/package.json +1 -1
- package/src/core/bvh8/build/BVH8Converter.d.ts +16 -0
- package/src/core/bvh8/build/BVH8Converter.d.ts.map +1 -1
- package/src/core/bvh8/build/BVH8Converter.js +64 -37
- package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts +25 -0
- package/src/core/bvh8/build/bvh8_assign_slots_greedy.d.ts.map +1 -0
- package/src/core/bvh8/build/bvh8_assign_slots_greedy.js +68 -0
- package/src/core/bvh8/build/bvh8_from_proxy.d.ts.map +1 -1
- package/src/core/bvh8/build/bvh8_from_proxy.js +2 -33
- package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts +22 -0
- package/src/core/bvh8/build/bvh8_node_fit_slots.d.ts.map +1 -0
- package/src/core/bvh8/build/bvh8_node_fit_slots.js +115 -0
- package/src/core/bvh8/bvh8_depth.d.ts +8 -0
- package/src/core/bvh8/bvh8_depth.d.ts.map +1 -0
- package/src/core/bvh8/bvh8_depth.js +39 -0
- package/src/core/math/complex/complex_fft_radix2.d.ts +19 -0
- package/src/core/math/complex/complex_fft_radix2.d.ts.map +1 -0
- package/src/core/math/complex/complex_fft_radix2.js +71 -0
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +33 -65
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3D.js +37 -245
- package/src/engine/graphics/ecs/trail3d/Trail3DFlags.d.ts +0 -4
- package/src/engine/graphics/ecs/trail3d/Trail3DFlags.js +4 -10
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts +13 -10
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +28 -37
- package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts +10 -0
- package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts.map +1 -0
- package/src/engine/graphics/ecs/trail3d/trail_knot_count.js +27 -0
- package/src/engine/graphics/trail/TrailKnots.d.ts +62 -0
- package/src/engine/graphics/trail/TrailKnots.d.ts.map +1 -0
- package/src/engine/graphics/trail/TrailKnots.js +137 -0
- package/src/engine/graphics/trail/tube/TubeXMaterialSpec.d.ts +1 -1
- package/src/engine/graphics/trail/tube/TubeXMaterialSpec.js +1 -1
- package/src/engine/graphics3/EntityRowHold.d.ts +48 -0
- package/src/engine/graphics3/EntityRowHold.d.ts.map +1 -0
- package/src/engine/graphics3/EntityRowHold.js +128 -0
- package/src/engine/graphics3/GPUFluidSystem.d.ts +17 -4
- package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUFluidSystem.js +113 -16
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +6 -2
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +11 -44
- package/src/engine/graphics3/Trail3DSystem.d.ts +69 -35
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem.js +380 -81
- package/src/engine/physics/cloth/playground/wind_main.js +7 -6
- package/src/engine/physics/cloth/wind/AbstractClothWind.d.ts +2 -2
- package/src/engine/physics/cloth/wind/AbstractClothWind.js +2 -2
- package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts +3 -3
- package/src/engine/physics/cloth/wind/ClothFluidWind.d.ts.map +1 -1
- package/src/engine/physics/cloth/wind/ClothFluidWind.js +7 -9
- package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts +10 -10
- package/src/engine/physics/cloth/wind/ClothGPUFluidWind.d.ts.map +1 -1
- package/src/engine/physics/cloth/wind/ClothGPUFluidWind.js +14 -22
- package/src/engine/physics/fluid/FluidAtmosphere.d.ts +16 -2
- package/src/engine/physics/fluid/FluidAtmosphere.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidAtmosphere.js +17 -3
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts +1 -2
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidEffectorsComponentSerializationAdapter.js +1 -2
- package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts +8 -5
- package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidEffectorsSystem.js +60 -17
- package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts +17 -0
- package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacle.js +22 -2
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +6 -5
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +14 -3
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +1 -1
- package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +1 -1
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts +33 -47
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +38 -176
- package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts +8 -11
- package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationAdapter.js +13 -24
- package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts +16 -0
- package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/physics/fluid/effector/GlobalFluidEffectorSerializationUpgrader_0_1.js +35 -0
- package/src/engine/physics/fluid/fluid_apply_atmosphere.d.ts +1 -1
- package/src/engine/physics/fluid/fluid_apply_atmosphere.js +1 -1
- package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts +9 -1
- package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts.map +1 -1
- package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.js +11 -1
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts +5 -0
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts.map +1 -1
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.js +2 -0
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts +4 -3
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts.map +1 -1
- package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.js +11 -3
- package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts +28 -0
- package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.d.ts.map +1 -0
- package/src/engine/physics/fluid/turbulence/FLUID_TURBULENCE_TILE.js +29 -0
- package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts +16 -0
- package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.d.ts.map +1 -0
- package/src/engine/physics/fluid/turbulence/fluid_atmosphere_velocity_at.js +49 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts +11 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.d.ts.map +1 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_inverse_tile_size.js +18 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts +25 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.d.ts.map +1 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_data.js +65 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts +56 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.d.ts.map +1 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_generate.js +313 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts +16 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.d.ts.map +1 -0
- package/src/engine/physics/fluid/turbulence/fluid_turbulence_tile_sample.js +69 -0
- package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +1 -1
- package/src/generation/foliage/mesh/branch_ring_triangulate.js +1 -1
- package/src/shade/playground/bvh_repro/README.md +8 -6
- package/src/shade/playground/bvh_repro/index.html +125 -124
- package/src/shade/playground/bvh_repro/main.js +259 -254
- package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
- package/src/shade/playground/foliage_wind/foliage_world.js +7 -4
- package/src/shade/playground/grass_surfaces/main.js +3 -2
- package/src/shade/playground/particle_ecs/bonfire_wind.d.ts +23 -13
- package/src/shade/playground/particle_ecs/bonfire_wind.d.ts.map +1 -1
- package/src/shade/playground/particle_ecs/bonfire_wind.js +30 -33
- package/src/shade/playground/skinned_blas_refit/README.md +26 -14
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts +14 -9
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +126 -127
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +95 -95
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts +9 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +146 -135
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +6 -6
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +148 -134
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts +11 -8
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +342 -202
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +12 -13
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +136 -116
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +4 -4
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +255 -249
- package/src/shade/playground/trails/index.html +50 -0
- package/src/shade/playground/trails/main.d.ts +2 -0
- package/src/shade/playground/trails/main.d.ts.map +1 -0
- package/src/shade/playground/trails/main.js +258 -0
- package/src/shade/playground/water_surface/main.js +6 -3
- package/src/shade/renderer/animation/GPUAnimationManager.js +2 -2
- package/src/shade/renderer/animation/animation_curve_write_keys.d.ts +18 -0
- package/src/shade/renderer/animation/animation_curve_write_keys.d.ts.map +1 -0
- package/src/shade/renderer/animation/animation_curve_write_keys.js +34 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +7 -8
- package/src/shade/renderer/deferred/tonemap/ColorGrade.d.ts.map +1 -1
- package/src/shade/renderer/deferred/tonemap/ColorGrade.js +13 -36
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +2 -2
- package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts +2 -13
- package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.js +6 -21
- package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts +17 -6
- package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.js +38 -178
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts +7 -9
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +17 -106
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts +7 -17
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.js +18 -118
- package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts +111 -0
- package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/fluid/FLUID_FAR_FIELD_STRUCT.js +162 -0
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +37 -8
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
- package/src/shade/renderer/fluid/GPUFluidCascade.js +149 -47
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +10 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +69 -10
- package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts +19 -0
- package/src/shade/renderer/fluid/chunk_fluid_far_field.d.ts.map +1 -0
- package/src/shade/renderer/fluid/chunk_fluid_far_field.js +43 -0
- package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts +10 -9
- package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_PARENT_STRUCT.js +14 -12
- package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts +3 -2
- package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/FLUID_CASCADE_RESTRICT_STRUCT.js +7 -5
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts +17 -9
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_epilogue.js +58 -18
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts +23 -11
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +371 -335
- package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_fill.js +2 -1
- package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.js +109 -108
- package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts +5 -3
- package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_restrict.js +24 -12
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts +14 -0
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING.js +18 -0
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts +3 -1
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.js +4 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +9 -0
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.js +20 -4
- package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts +11 -2
- package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.js +59 -2
- package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts +4 -1
- package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.js +367 -341
- package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts +6 -2
- package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/FLUID_MAC_STEP_STRUCT.js +10 -5
- package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +20 -21
- package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/FluidMacPasses.js +453 -427
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts +6 -2
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +340 -282
- package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +13 -5
- package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
- package/src/shade/renderer/fluid/publish/FluidWindPublish.js +20 -10
- package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.d.ts +2 -2
- package/src/shade/renderer/fluid/publish/chunk_fluid_wind_publish_cell.js +2 -2
- package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts +5 -3
- package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts.map +1 -1
- package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.js +147 -142
- package/src/shade/renderer/fluid/query/GPUFluidQueries.js +2 -2
- package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/GPUGeometryManager.js +5 -7
- package/src/shade/renderer/geometry/MeshletGeometry.d.ts +4 -1
- package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/MeshletGeometry.js +4 -1
- package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts +20 -0
- package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.d.ts.map +1 -1
- package/src/shade/renderer/geometry/MeshletGeometrySerializationAdapter.js +35 -3
- package/src/shade/renderer/geometry/blas_from_meshlets.d.ts +9 -3
- package/src/shade/renderer/geometry/blas_from_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/blas_from_meshlets.js +16 -30
- package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts +14 -0
- package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/bvh/BLAS8_REFIT_TARGET_STRUCT.js +33 -0
- package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts +18 -21
- package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +78 -158
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +18 -39
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +39 -398
- package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts +6 -7
- package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryMeshletsBVH.js +5 -7
- package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts +36 -0
- package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.d.ts.map +1 -0
- package/src/shade/renderer/geometry/bvh/bvh8_build_for_meshlets.js +179 -0
- package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts +30 -0
- package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/bvh/meshlet_batch_to_clustered_bvh.js +207 -0
- package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts +52 -0
- package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.d.ts.map +1 -0
- package/src/shade/renderer/geometry/bvh/shader_blas8_refit_batch.js +464 -0
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts +12 -0
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +37 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js +4 -4
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js +2 -2
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js +2 -2
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +4 -4
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.js +2 -2
- package/src/shade/renderer/geometry/sr_create_group_RTX.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sr_create_group_RTX.js +4 -4
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -0
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -0
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +372 -376
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +9 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +10 -11
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts +12 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +109 -60
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_sdf.js +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.js +2 -2
- package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.d.ts +2 -2
- package/src/shade/renderer/gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js +70 -70
- package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts +6 -7
- package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.js +6 -7
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +3 -3
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +3 -3
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.js +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +2 -2
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +3 -3
- package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts +69 -0
- package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/BVH8_TREE_BUFFER_LAYOUT.js +89 -0
- package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts +41 -0
- package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/bvh8_encode_from_bvh2.js +348 -0
- package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts +34 -0
- package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/check_bvh8_tree.js +291 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts +31 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_assign.js +175 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts +27 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_depth.js +48 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts +26 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_gather.js +118 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts +22 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_node.js +143 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts +36 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/chunk_bvh8_encode_sums.js +97 -0
- package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts +49 -0
- package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/graph_bvh8_encode_from_bvh2.js +265 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts +37 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_assign.js +109 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts +15 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count.js +85 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts +26 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_count_single_workgroup.js +200 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts +19 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_parents.js +81 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts +14 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/shader_bvh8_encode_write.js +101 -0
- package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts +19 -0
- package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh8/verify_gpu_bvh8_encode.js +361 -0
- package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts +3 -2
- package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts.map +1 -1
- package/src/shade/renderer/grass/press/shader_grass_press_mark.js +5 -3
- package/src/shade/renderer/grass/surface/shader_grass_surface_bake.d.ts.map +1 -1
- package/src/shade/renderer/grass/surface/shader_grass_surface_bake.js +5 -6
- package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/GPULightMap.js +1 -0
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -0
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts +49 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.js +144 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts +71 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.js +152 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts +21 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.js +30 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts +101 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.js +306 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +11 -4
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +8 -4
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +60 -33
- package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts +6 -6
- package/src/shade/renderer/scene/verify_gpu_tlas_build.d.ts.map +1 -1
- package/src/shade/renderer/scene/verify_gpu_tlas_build.js +23 -53
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts +3 -1
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_INODE_STRUCT.js +5 -3
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts +28 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/BVH8_MAX_DEPTH.js +29 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_grid.js +97 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts +8 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_intersect.js +23 -14
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts +36 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_node_slot_distances.js +222 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts +20 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_direction_rcp.js +30 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts +30 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_tree_read.js +91 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_waiting_slots.js +40 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_nearest.js +121 -70
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts +13 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_blas_occluded.js +117 -61
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest.js +111 -72
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts +1 -2
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_nearest_among.js +83 -54
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_ray_query_occluded.js +92 -60
- package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/sdf/chunk_point_query_blas_nearest.js +153 -106
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_point_query_nearest.js +115 -74
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts +5 -2
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.js +89 -63
- package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/sdf/chunk_sdf_query_distance.js +108 -63
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts +14 -0
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast.js +94 -60
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +4 -4
- package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts +69 -0
- package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts.map +1 -0
- package/src/shade/renderer/trails/GPUTrailAVBOITChannel.js +129 -0
- package/src/shade/renderer/trails/GPUTrailSystem.d.ts +164 -0
- package/src/shade/renderer/trails/GPUTrailSystem.d.ts.map +1 -0
- package/src/shade/renderer/trails/GPUTrailSystem.js +725 -0
- package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts +14 -0
- package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts.map +1 -0
- package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.js +38 -0
- package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts +66 -0
- package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts.map +1 -0
- package/src/shade/renderer/trails/data/TRAIL_KNOT.js +154 -0
- package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts +19 -0
- package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts.map +1 -0
- package/src/shade/renderer/trails/data/TRAIL_RECORD.js +68 -0
- package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts +18 -0
- package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts.map +1 -0
- package/src/shade/renderer/trails/data/TRAIL_STATE.js +43 -0
- package/src/shade/renderer/trails/graph_trails.d.ts +58 -0
- package/src/shade/renderer/trails/graph_trails.d.ts.map +1 -0
- package/src/shade/renderer/trails/graph_trails.js +155 -0
- package/src/shade/renderer/trails/graph_trails_avboit.d.ts +126 -0
- package/src/shade/renderer/trails/graph_trails_avboit.d.ts.map +1 -0
- package/src/shade/renderer/trails/graph_trails_avboit.js +300 -0
- package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts +56 -0
- package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts.map +1 -0
- package/src/shade/renderer/trails/runtime/TrailFadeCurves.js +220 -0
- package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts +49 -0
- package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts.map +1 -0
- package/src/shade/renderer/trails/runtime/TrailKnotPool.js +162 -0
- package/src/shade/renderer/trails/runtime/TrailParameters.d.ts +52 -0
- package/src/shade/renderer/trails/runtime/TrailParameters.d.ts.map +1 -0
- package/src/shade/renderer/trails/runtime/TrailParameters.js +126 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts +23 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.js +57 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts +14 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.js +40 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts +18 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_seed.js +64 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts +14 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_segment.js +51 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts +48 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_update.js +197 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts +34 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/chunk_trail_vertex.js +111 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts +24 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit.js +78 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts +23 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.js +130 -0
- package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts +29 -0
- package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/shader_trail_draw_args.js +78 -0
- package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts +18 -0
- package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/shader_trail_seed.js +79 -0
- package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts +20 -0
- package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts.map +1 -0
- package/src/shade/renderer/trails/shaders/shader_trail_update.js +101 -0
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -2
- package/src/shade/renderer/water/query/shader_water_surface_query.d.ts.map +1 -1
- package/src/shade/renderer/water/query/shader_water_surface_query.js +227 -227
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
- package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +7 -4
- package/src/shade/renderer/water/surface/particles/shader_water_particles.js +2 -2
- package/src/shade/renderer/wind/GPUSceneWind.d.ts +36 -4
- package/src/shade/renderer/wind/GPUSceneWind.d.ts.map +1 -1
- package/src/shade/renderer/wind/GPUSceneWind.js +150 -4
- package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts +9 -3
- package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/wind/WIND_FIELD_STRUCT.js +13 -3
- package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.d.ts +6 -6
- package/src/shade/renderer/wind/WIND_FIELD_UNIFORM.js +6 -6
- package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts +39 -0
- package/src/shade/renderer/wind/chunk_fluid_turbulence.d.ts.map +1 -0
- package/src/shade/renderer/wind/chunk_fluid_turbulence.js +63 -0
- package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts +10 -7
- package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts.map +1 -1
- package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.js +34 -11
- package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.d.ts +2 -2
- package/src/shade/renderer/wind/chunk_wind_field_sample_uniform.js +2 -2
- package/src/shade/renderer/wind/wind_field_add_resources.d.ts +6 -4
- package/src/shade/renderer/wind/wind_field_add_resources.d.ts.map +1 -1
- package/src/shade/renderer/wind/wind_field_add_resources.js +9 -6
- package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts +0 -18
- package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts.map +0 -1
- package/src/engine/graphics/ecs/trail3d/advance_trail.js +0 -42
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts +0 -14
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts.map +0 -1
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +0 -75
- package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts +0 -17
- package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts.map +0 -1
- package/src/engine/graphics/ecs/trail3d/trail_head_position.js +0 -19
- package/src/engine/graphics/trail/tube/TubeX.d.ts +0 -186
- package/src/engine/graphics/trail/tube/TubeX.d.ts.map +0 -1
- package/src/engine/graphics/trail/tube/TubeX.js +0 -575
- package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts +0 -16
- package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts.map +0 -1
- package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.js +0 -34
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +0 -27
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +0 -1
- package/src/engine/graphics/trail/tube/tube_attributes_spec.js +0 -70
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +0 -38
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts.map +0 -1
- package/src/engine/graphics3/trail/trail_tube_write_geometry.js +0 -119
- package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts +0 -18
- package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/geometry/bvh/BLAS_REFIT_TARGET_STRUCT.js +0 -50
- package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts +0 -23
- package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts.map +0 -1
- package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.js +0 -87
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts +0 -42
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.d.ts.map +0 -1
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch.js +0 -141
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts +0 -21
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.d.ts.map +0 -1
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_batch_seed.js +0 -75
- package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts +0 -17
- package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts.map +0 -1
- package/src/shade/renderer/geometry/meshlet_batch_to_bvh.js +0 -247
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts +0 -7
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/bvh/bvh8/webgpu/chunk_bvh8_ray_query_blas_occlusion.js +0 -226
- package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts +0 -8
- package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mask_visibility_via_rays.js +0 -45
- package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts +0 -3
- package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_ray_sample_light.js +0 -105
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts +0 -6
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.d.ts.map +0 -1
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_distance.js +0 -86
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts +0 -2
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.d.ts.map +0 -1
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.js +0 -136
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { assert } from "../../assert.js";
|
|
2
|
+
import { isPowerOfTwo } from "../isPowerOfTwo.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The discrete Fourier transform of `n` complex values, in place, radix 2:
|
|
6
|
+
*
|
|
7
|
+
* X_k = Σ_j x_j · e^(∓2πi·jk/n)
|
|
8
|
+
*
|
|
9
|
+
* the minus sign forward, the plus sign inverse. The inverse is not scaled: a forward transform
|
|
10
|
+
* then an inverse one multiplies every value by `n`.
|
|
11
|
+
*
|
|
12
|
+
* Iterative Cooley–Tukey, decimation in time: a bit-reversal permutation, then `log2(n)` stages of
|
|
13
|
+
* butterflies. Each stage's twiddles are taken from `Math.cos` and `Math.sin` directly, `n − 1` pairs
|
|
14
|
+
* over the transform, so the error does not grow along a recurrence. Allocates nothing.
|
|
15
|
+
*
|
|
16
|
+
* @param {Float64Array|Float32Array|number[]} re real parts, read and written at `0..n−1`
|
|
17
|
+
* @param {Float64Array|Float32Array|number[]} im imaginary parts, likewise
|
|
18
|
+
* @param {number} n a power of two
|
|
19
|
+
* @param {boolean} inverse
|
|
20
|
+
*/
|
|
21
|
+
export function complex_fft_radix2(re, im, n, inverse) {
|
|
22
|
+
assert.isPositiveInteger(n, 'n');
|
|
23
|
+
assert.ok(isPowerOfTwo(n), 'n is a power of two');
|
|
24
|
+
|
|
25
|
+
// bit-reversal permutation
|
|
26
|
+
for (let i = 1, j = 0; i < n; i++) {
|
|
27
|
+
let bit = n >> 1;
|
|
28
|
+
|
|
29
|
+
while ((j & bit) !== 0) {
|
|
30
|
+
j ^= bit;
|
|
31
|
+
bit >>= 1;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
j ^= bit;
|
|
35
|
+
|
|
36
|
+
if (i < j) {
|
|
37
|
+
const r = re[i];
|
|
38
|
+
re[i] = re[j];
|
|
39
|
+
re[j] = r;
|
|
40
|
+
|
|
41
|
+
const m = im[i];
|
|
42
|
+
im[i] = im[j];
|
|
43
|
+
im[j] = m;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const sign = inverse ? 1 : -1;
|
|
48
|
+
|
|
49
|
+
for (let length = 2; length <= n; length <<= 1) {
|
|
50
|
+
const half = length >> 1;
|
|
51
|
+
const step = sign * 2 * Math.PI / length;
|
|
52
|
+
|
|
53
|
+
for (let k = 0; k < half; k++) {
|
|
54
|
+
const w_re = Math.cos(step * k);
|
|
55
|
+
const w_im = Math.sin(step * k);
|
|
56
|
+
|
|
57
|
+
for (let start = 0; start < n; start += length) {
|
|
58
|
+
const a = start + k;
|
|
59
|
+
const b = a + half;
|
|
60
|
+
|
|
61
|
+
const t_re = re[b] * w_re - im[b] * w_im;
|
|
62
|
+
const t_im = re[b] * w_im + im[b] * w_re;
|
|
63
|
+
|
|
64
|
+
re[b] = re[a] - t_re;
|
|
65
|
+
im[b] = im[a] - t_im;
|
|
66
|
+
re[a] += t_re;
|
|
67
|
+
im[a] += t_im;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
export default Trail3D;
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
3
|
+
* A tube left behind an entity — the volumetric counterpart of {@link Trail2D}. The head follows the
|
|
4
|
+
* entity at {@link offset}; knots are laid down behind it as it travels, each with the frame its ring
|
|
5
|
+
* stands in, and fade by {@link fade} as they age towards {@link maxAge}.
|
|
6
|
+
*
|
|
7
|
+
* The component is the trail's description. Its knots live where {@link Trail3DSystem} simulates and
|
|
8
|
+
* draws them, on the GPU; a game writes these fields and the system picks the change up.
|
|
7
9
|
*/
|
|
8
10
|
declare class Trail3D {
|
|
9
11
|
static fromJSON(json: any): Trail3D;
|
|
10
12
|
/**
|
|
11
|
-
* Age at which a trail knot disappears, in seconds.
|
|
13
|
+
* Age at which a trail knot disappears, in seconds. How many knots the trail holds is fixed when the
|
|
14
|
+
* system registers it: a later change moves the fade and how often a knot is laid down, not the
|
|
15
|
+
* length of the ring.
|
|
12
16
|
* @type {number}
|
|
13
17
|
*/
|
|
14
18
|
maxAge: number;
|
|
@@ -18,8 +22,8 @@ declare class Trail3D {
|
|
|
18
22
|
*/
|
|
19
23
|
width: number;
|
|
20
24
|
/**
|
|
21
|
-
* Number of radial subdivisions around the tube. Higher = rounder tube.
|
|
22
|
-
*
|
|
25
|
+
* Number of radial subdivisions around the tube. Higher = rounder tube. Fixed when the system
|
|
26
|
+
* registers the trail; re-add the component to change it.
|
|
23
27
|
* @type {number}
|
|
24
28
|
*/
|
|
25
29
|
radialSegments: number;
|
|
@@ -34,25 +38,6 @@ declare class Trail3D {
|
|
|
34
38
|
* @type {number}
|
|
35
39
|
*/
|
|
36
40
|
spawnDistance: number;
|
|
37
|
-
/**
|
|
38
|
-
* Current simulated time since trail birth.
|
|
39
|
-
* @type {number}
|
|
40
|
-
*/
|
|
41
|
-
time: number;
|
|
42
|
-
/**
|
|
43
|
-
* @type {number}
|
|
44
|
-
*/
|
|
45
|
-
trailingIndex: number;
|
|
46
|
-
/**
|
|
47
|
-
* Time elapsed since the last knot was committed.
|
|
48
|
-
* @type {number}
|
|
49
|
-
*/
|
|
50
|
-
timeSinceLastUpdate: number;
|
|
51
|
-
/**
|
|
52
|
-
* Distance the head has travelled since the last knot was committed.
|
|
53
|
-
* @type {number}
|
|
54
|
-
*/
|
|
55
|
-
distanceSinceLastUpdate: number;
|
|
56
41
|
/**
|
|
57
42
|
* RGB tints the tube; alpha is the trail's base opacity, which {@link fade}
|
|
58
43
|
* scales as each knot ages.
|
|
@@ -83,35 +68,34 @@ declare class Trail3D {
|
|
|
83
68
|
*/
|
|
84
69
|
readonly offset: Vector3;
|
|
85
70
|
/**
|
|
86
|
-
*
|
|
87
|
-
*
|
|
71
|
+
* Whether a new trail fades in over its first {@link maxAge} seconds: its head is born
|
|
72
|
+
* `maxAge - t` old while the trail is `t` seconds old, so the stretch laid down first is the
|
|
73
|
+
* faintest. On by default; turn it off for a trail that must be fully visible from its first
|
|
74
|
+
* frame, a tracer.
|
|
75
|
+
* @type {boolean}
|
|
88
76
|
*/
|
|
89
|
-
|
|
77
|
+
warmup: boolean;
|
|
90
78
|
/**
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* transient
|
|
96
|
-
* @type {Mesh|null}
|
|
79
|
+
* Knots laid down whole by the author — a stroke, a helix — instead of by the entity's travel, or
|
|
80
|
+
* null for a trail the entity draws. See {@link TrailKnots}; {@link seed_trail_stroke} writes one.
|
|
81
|
+
* @type {import("../../trail/TrailKnots.js").TrailKnots|null}
|
|
97
82
|
*/
|
|
98
|
-
|
|
83
|
+
knots: import("../../trail/TrailKnots.js").TrailKnots | null;
|
|
84
|
+
/**
|
|
85
|
+
* Moved by every {@link clear}, so the system sees the request by comparing it.
|
|
86
|
+
* @type {number}
|
|
87
|
+
*/
|
|
88
|
+
clearCount: number;
|
|
99
89
|
/**
|
|
100
90
|
* transient
|
|
101
91
|
* @type {TubeXMaterialSpec}
|
|
102
92
|
*/
|
|
103
93
|
material: TubeXMaterialSpec;
|
|
104
|
-
/**
|
|
105
|
-
* @readonly
|
|
106
|
-
* @type {BvhClient}
|
|
107
|
-
*/
|
|
108
|
-
readonly bvh: BvhClient;
|
|
109
94
|
/**
|
|
110
95
|
* @private
|
|
111
96
|
* @type {Trail3DFlags|number}
|
|
112
97
|
*/
|
|
113
98
|
private flags;
|
|
114
|
-
dispose(): void;
|
|
115
99
|
set textureURL(v: string);
|
|
116
100
|
get textureURL(): string;
|
|
117
101
|
set depthWrite(v: boolean);
|
|
@@ -131,8 +115,7 @@ declare class Trail3D {
|
|
|
131
115
|
*
|
|
132
116
|
* Stored in {@link Trail3DFlags.Lit}. This is a build-time option — it selects
|
|
133
117
|
* the compiled material and the mesh's shadow settings — so it must be set
|
|
134
|
-
* before the trail is
|
|
135
|
-
* afterwards.
|
|
118
|
+
* before the trail is registered with the system.
|
|
136
119
|
*
|
|
137
120
|
* @returns {boolean}
|
|
138
121
|
*/
|
|
@@ -158,18 +141,12 @@ declare class Trail3D {
|
|
|
158
141
|
*/
|
|
159
142
|
getFlag(flag: number | Trail3DFlags): boolean;
|
|
160
143
|
/**
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
* @param {number} segment_count
|
|
166
|
-
*/
|
|
167
|
-
build(segment_count: number): void;
|
|
168
|
-
/**
|
|
169
|
-
* Clear the trail's geometry and reset its state.
|
|
144
|
+
* Erase the trail: at the next frame every knot expires and collapses onto the head where the entity
|
|
145
|
+
* stands, so nothing bridges what comes after to what went before (a teleport leaves no streak). The
|
|
146
|
+
* trail keeps its birth, so its warm-up does not run again.
|
|
170
147
|
*/
|
|
171
148
|
clear(): void;
|
|
172
|
-
fromJSON({ maxAge, width, radialSegments, spawnMode, spawnDistance, textureURL, depthWrite, lightingEnabled, offset, color, fade }: {
|
|
149
|
+
fromJSON({ maxAge, width, radialSegments, spawnMode, spawnDistance, textureURL, depthWrite, lightingEnabled, warmup, offset, color, fade }: {
|
|
173
150
|
maxAge?: number;
|
|
174
151
|
width?: number;
|
|
175
152
|
radialSegments?: number;
|
|
@@ -178,6 +155,7 @@ declare class Trail3D {
|
|
|
178
155
|
textureURL: any;
|
|
179
156
|
depthWrite?: boolean;
|
|
180
157
|
lightingEnabled?: boolean;
|
|
158
|
+
warmup?: boolean;
|
|
181
159
|
offset?: Vector3;
|
|
182
160
|
color?: {
|
|
183
161
|
r: number;
|
|
@@ -205,6 +183,7 @@ declare class Trail3D {
|
|
|
205
183
|
textureURL: string;
|
|
206
184
|
depthWrite: boolean;
|
|
207
185
|
lightingEnabled: boolean;
|
|
186
|
+
warmup: boolean;
|
|
208
187
|
offset: {
|
|
209
188
|
x: number;
|
|
210
189
|
y: number;
|
|
@@ -215,15 +194,6 @@ declare class Trail3D {
|
|
|
215
194
|
* @param {Trail3D} other
|
|
216
195
|
*/
|
|
217
196
|
equals(other: Trail3D): boolean;
|
|
218
|
-
/**
|
|
219
|
-
* @param {number} x
|
|
220
|
-
* @param {number} y
|
|
221
|
-
* @param {number} z
|
|
222
|
-
* @param {number} head_age
|
|
223
|
-
* @returns {boolean} whether the head position changed
|
|
224
|
-
*/
|
|
225
|
-
updateHead(x: number, y: number, z: number, head_age: number): boolean;
|
|
226
|
-
#private;
|
|
227
197
|
}
|
|
228
198
|
declare namespace Trail3D {
|
|
229
199
|
let typeName: string;
|
|
@@ -233,8 +203,6 @@ import { TrailSpawnMode } from "../../trail/TrailSpawnMode.js";
|
|
|
233
203
|
import { Color } from "../../../../core/color/Color.js";
|
|
234
204
|
import { AnimationCurve } from "../../../animation/curve/AnimationCurve.js";
|
|
235
205
|
import Vector3 from "../../../../core/geom/Vector3.js";
|
|
236
|
-
import { TubeX } from "../../trail/tube/TubeX.js";
|
|
237
206
|
import { TubeXMaterialSpec } from "../../trail/tube/TubeXMaterialSpec.js";
|
|
238
|
-
import { BvhClient } from "../../../../core/bvh2/bvh3/BvhClient.js";
|
|
239
207
|
import { Trail3DFlags } from "./Trail3DFlags.js";
|
|
240
208
|
//# sourceMappingURL=Trail3D.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Trail3D.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/trail3d/Trail3D.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"Trail3D.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/trail3d/Trail3D.js"],"names":[],"mappings":";AAkBA;;;;;;;GAOG;AACH;IA6LI,oCAMC;IAjMD;;;;;OAKG;IACH,QAFU,MAAM,CAES;IAEzB;;;OAGG;IACH,OAFU,MAAM,CAEM;IAEtB;;;;OAIG;IACH,gBAFU,MAAM,CAEyB;IAEzC;;;OAGG;IACH,WAFU,cAAc,GAAC,MAAM,CAEC;IAEhC;;;;OAIG;IACH,eAFU,MAAM,CAEuB;IAEvC;;;;;;;OAOG;IACH,gBAFU,KAAK,CAEe;IAE9B;;;;;;;;;OASG;IACH,MAFU,cAAc,CAEG;IAE3B;;;;;;;OAOG;IACH,iBAFU,OAAO,CAEM;IAEvB;;;;;;OAMG;IACH,QAFU,OAAO,CAEH;IAEd;;;;OAIG;IACH,OAFU,OAAO,2BAA2B,EAAE,UAAU,GAAC,IAAI,CAEhD;IAEb;;;OAGG;IACH,YAFU,MAAM,CAED;IAEf;;;OAGG;IACH,UAFU,iBAAiB,CAEQ;IAEnC;;;OAGG;IACH,cAAsB;IAMtB,0BAEC;IAND,yBAEC;IAUD,2BAEC;IAND,0BAEC;IAyBD;;OAEG;IACH,gCAEC;IAxBD;;;;;;;;;;;;;;OAcG;IACH,+BAEC;IASD;;;OAGG;IACH,cAHW,MAAM,GAAC,YAAY,GACjB,IAAI,CAIhB;IAED;;;OAGG;IACH,gBAHW,MAAM,GAAC,YAAY,GACjB,IAAI,CAIhB;IAED;;;OAGG;IACH,gBAHW,MAAM,GAAC,YAAY,SACnB,OAAO,QAQjB;IAED;;;OAGG;IACH,cAHW,MAAM,GAAC,YAAY,GACjB,OAAO,CAInB;IAED;;;;OAIG;IACH,cAEC;IAUD;;;;;;;;;;;;;;;;;;aAqCC;IAED;;;;;;;;;;;;;;;;;;;;;;;;MAeC;IAED;;OAEG;IACH,cAFW,OAAO,WAgBjB;CACJ;;;;;+BAtS8B,+BAA+B;sBAHxC,iCAAiC;+BAExB,4CAA4C;oBADvD,kCAAkC;kCAGpB,uCAAuC;6BAE5C,mBAAmB"}
|
|
@@ -1,22 +1,12 @@
|
|
|
1
|
-
import { assert } from "../../../../core/assert.js";
|
|
2
|
-
import { FLOAT32_MAX } from "../../../../core/binary/FLOAT32_MAX.js";
|
|
3
|
-
import { BvhClient } from "../../../../core/bvh2/bvh3/BvhClient.js";
|
|
4
1
|
import { Color } from "../../../../core/color/Color.js";
|
|
5
2
|
import Vector3 from "../../../../core/geom/Vector3.js";
|
|
6
|
-
import { v3_distance } from "../../../../core/geom/vec3/v3_distance.js";
|
|
7
|
-
import { v3_length } from "../../../../core/geom/vec3/v3_length.js";
|
|
8
|
-
import { clamp01 } from "../../../../core/math/clamp01.js";
|
|
9
|
-
import { EPSILON } from "../../../../core/math/EPSILON.js";
|
|
10
3
|
import { AnimationCurve } from "../../../animation/curve/AnimationCurve.js";
|
|
11
4
|
import { TrailSpawnMode } from "../../trail/TrailSpawnMode.js";
|
|
12
|
-
import { TUBE_ATTRIBUTE_ADDRESS_AGE } from "../../trail/tube/tube_attributes_spec.js";
|
|
13
|
-
import { tube_frame_transport } from "../../trail/tube/tube_frame.js";
|
|
14
|
-
import { TubeX } from "../../trail/tube/TubeX.js";
|
|
15
5
|
import { TubeXMaterialSpec } from "../../trail/tube/TubeXMaterialSpec.js";
|
|
16
6
|
import { TRAIL3D_FADE_LINEAR } from "./TRAIL3D_FADE_LINEAR.js";
|
|
17
7
|
import { Trail3DFlags } from "./Trail3DFlags.js";
|
|
18
8
|
|
|
19
|
-
const DEFAULT_FLAGS = Trail3DFlags.Spawning
|
|
9
|
+
const DEFAULT_FLAGS = Trail3DFlags.Spawning;
|
|
20
10
|
|
|
21
11
|
const DEFAULT_MAX_AGE = 5;
|
|
22
12
|
|
|
@@ -26,22 +16,20 @@ const DEFAULT_RADIAL_SEGMENTS = 8;
|
|
|
26
16
|
|
|
27
17
|
const DEFAULT_SPAWN_DISTANCE = 1;
|
|
28
18
|
|
|
29
|
-
// module-static scratch — keeps updateHead allocation-free
|
|
30
|
-
const v3_head_pos = new Float64Array(3);
|
|
31
|
-
const v3_pred_pos = new Float64Array(3);
|
|
32
|
-
const v3_pred_n = new Float64Array(3);
|
|
33
|
-
const frame_out = new Float32Array(6);
|
|
34
|
-
|
|
35
19
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
20
|
+
* A tube left behind an entity — the volumetric counterpart of {@link Trail2D}. The head follows the
|
|
21
|
+
* entity at {@link offset}; knots are laid down behind it as it travels, each with the frame its ring
|
|
22
|
+
* stands in, and fade by {@link fade} as they age towards {@link maxAge}.
|
|
23
|
+
*
|
|
24
|
+
* The component is the trail's description. Its knots live where {@link Trail3DSystem} simulates and
|
|
25
|
+
* draws them, on the GPU; a game writes these fields and the system picks the change up.
|
|
40
26
|
*/
|
|
41
27
|
class Trail3D {
|
|
42
28
|
|
|
43
29
|
/**
|
|
44
|
-
* Age at which a trail knot disappears, in seconds.
|
|
30
|
+
* Age at which a trail knot disappears, in seconds. How many knots the trail holds is fixed when the
|
|
31
|
+
* system registers it: a later change moves the fade and how often a knot is laid down, not the
|
|
32
|
+
* length of the ring.
|
|
45
33
|
* @type {number}
|
|
46
34
|
*/
|
|
47
35
|
maxAge = DEFAULT_MAX_AGE;
|
|
@@ -53,8 +41,8 @@ class Trail3D {
|
|
|
53
41
|
width = DEFAULT_WIDTH;
|
|
54
42
|
|
|
55
43
|
/**
|
|
56
|
-
* Number of radial subdivisions around the tube. Higher = rounder tube.
|
|
57
|
-
*
|
|
44
|
+
* Number of radial subdivisions around the tube. Higher = rounder tube. Fixed when the system
|
|
45
|
+
* registers the trail; re-add the component to change it.
|
|
58
46
|
* @type {number}
|
|
59
47
|
*/
|
|
60
48
|
radialSegments = DEFAULT_RADIAL_SEGMENTS;
|
|
@@ -72,29 +60,6 @@ class Trail3D {
|
|
|
72
60
|
*/
|
|
73
61
|
spawnDistance = DEFAULT_SPAWN_DISTANCE;
|
|
74
62
|
|
|
75
|
-
/**
|
|
76
|
-
* Current simulated time since trail birth.
|
|
77
|
-
* @type {number}
|
|
78
|
-
*/
|
|
79
|
-
time = 0;
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* @type {number}
|
|
83
|
-
*/
|
|
84
|
-
trailingIndex = 0;
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Time elapsed since the last knot was committed.
|
|
88
|
-
* @type {number}
|
|
89
|
-
*/
|
|
90
|
-
timeSinceLastUpdate = 0;
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Distance the head has travelled since the last knot was committed.
|
|
94
|
-
* @type {number}
|
|
95
|
-
*/
|
|
96
|
-
distanceSinceLastUpdate = 0;
|
|
97
|
-
|
|
98
63
|
/**
|
|
99
64
|
* RGB tints the tube; alpha is the trail's base opacity, which {@link fade}
|
|
100
65
|
* scales as each knot ages.
|
|
@@ -128,32 +93,32 @@ class Trail3D {
|
|
|
128
93
|
offset = new Vector3();
|
|
129
94
|
|
|
130
95
|
/**
|
|
131
|
-
*
|
|
132
|
-
*
|
|
96
|
+
* Whether a new trail fades in over its first {@link maxAge} seconds: its head is born
|
|
97
|
+
* `maxAge - t` old while the trail is `t` seconds old, so the stretch laid down first is the
|
|
98
|
+
* faintest. On by default; turn it off for a trail that must be fully visible from its first
|
|
99
|
+
* frame, a tracer.
|
|
100
|
+
* @type {boolean}
|
|
133
101
|
*/
|
|
134
|
-
|
|
102
|
+
warmup = true;
|
|
135
103
|
|
|
136
104
|
/**
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
* transient
|
|
142
|
-
* @type {Mesh|null}
|
|
105
|
+
* Knots laid down whole by the author — a stroke, a helix — instead of by the entity's travel, or
|
|
106
|
+
* null for a trail the entity draws. See {@link TrailKnots}; {@link seed_trail_stroke} writes one.
|
|
107
|
+
* @type {import("../../trail/TrailKnots.js").TrailKnots|null}
|
|
143
108
|
*/
|
|
144
|
-
|
|
109
|
+
knots = null;
|
|
145
110
|
|
|
146
111
|
/**
|
|
147
|
-
*
|
|
148
|
-
* @type {
|
|
112
|
+
* Moved by every {@link clear}, so the system sees the request by comparing it.
|
|
113
|
+
* @type {number}
|
|
149
114
|
*/
|
|
150
|
-
|
|
115
|
+
clearCount = 0;
|
|
151
116
|
|
|
152
117
|
/**
|
|
153
|
-
*
|
|
154
|
-
* @type {
|
|
118
|
+
* transient
|
|
119
|
+
* @type {TubeXMaterialSpec}
|
|
155
120
|
*/
|
|
156
|
-
|
|
121
|
+
material = new TubeXMaterialSpec();
|
|
157
122
|
|
|
158
123
|
/**
|
|
159
124
|
* @private
|
|
@@ -161,24 +126,6 @@ class Trail3D {
|
|
|
161
126
|
*/
|
|
162
127
|
flags = DEFAULT_FLAGS;
|
|
163
128
|
|
|
164
|
-
dispose() {
|
|
165
|
-
if (this.tube === null) {
|
|
166
|
-
// nothing to dispose
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
this.tube = null;
|
|
171
|
-
|
|
172
|
-
// The knots the drawable was a view over are gone, so the component must stop claiming to
|
|
173
|
-
// be built: link() would otherwise take its "already built" branch, hang a material on the
|
|
174
|
-
// dead mesh and leave the tube null, and the first update would hand that null to the
|
|
175
|
-
// simulator. Dropping Built makes a re-link rebuild instead. Whatever a renderer made of
|
|
176
|
-
// the tube is that renderer's to release; the material is owned by the tube plugin's
|
|
177
|
-
// cache, so neither is ours to dispose — only to forget.
|
|
178
|
-
this.mesh = null;
|
|
179
|
-
this.clearFlag(Trail3DFlags.Built);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
129
|
get textureURL() {
|
|
183
130
|
return this.material.diffuse;
|
|
184
131
|
}
|
|
@@ -206,8 +153,7 @@ class Trail3D {
|
|
|
206
153
|
*
|
|
207
154
|
* Stored in {@link Trail3DFlags.Lit}. This is a build-time option — it selects
|
|
208
155
|
* the compiled material and the mesh's shadow settings — so it must be set
|
|
209
|
-
* before the trail is
|
|
210
|
-
* afterwards.
|
|
156
|
+
* before the trail is registered with the system.
|
|
211
157
|
*
|
|
212
158
|
* @returns {boolean}
|
|
213
159
|
*/
|
|
@@ -219,12 +165,6 @@ class Trail3D {
|
|
|
219
165
|
* @param {boolean} v
|
|
220
166
|
*/
|
|
221
167
|
set lightingEnabled(v) {
|
|
222
|
-
if (v === this.lightingEnabled) {
|
|
223
|
-
return;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
assert.notOk(this.getFlag(Trail3DFlags.Built), "lightingEnabled cannot change after the trail is built");
|
|
227
|
-
|
|
228
168
|
this.writeFlag(Trail3DFlags.Lit, v);
|
|
229
169
|
}
|
|
230
170
|
|
|
@@ -265,43 +205,12 @@ class Trail3D {
|
|
|
265
205
|
}
|
|
266
206
|
|
|
267
207
|
/**
|
|
268
|
-
*
|
|
269
|
-
*
|
|
270
|
-
*
|
|
271
|
-
*
|
|
272
|
-
* @param {number} segment_count
|
|
273
|
-
*/
|
|
274
|
-
build(segment_count) {
|
|
275
|
-
|
|
276
|
-
const tube = new TubeX();
|
|
277
|
-
|
|
278
|
-
tube.setCount(segment_count, this.radialSegments);
|
|
279
|
-
|
|
280
|
-
this.tube = tube;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
/**
|
|
284
|
-
* Clear the trail's geometry and reset its state.
|
|
208
|
+
* Erase the trail: at the next frame every knot expires and collapses onto the head where the entity
|
|
209
|
+
* stands, so nothing bridges what comes after to what went before (a teleport leaves no streak). The
|
|
210
|
+
* trail keeps its birth, so its warm-up does not run again.
|
|
285
211
|
*/
|
|
286
212
|
clear() {
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
if (tube === null) {
|
|
290
|
-
// nothing to clear
|
|
291
|
-
return;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
const n = tube.getCount();
|
|
295
|
-
|
|
296
|
-
for (let i = 0; i < n; i++) {
|
|
297
|
-
tube.setKnotAttribute_Scalar(i, TUBE_ATTRIBUTE_ADDRESS_AGE, FLOAT32_MAX);
|
|
298
|
-
tube.setKnotAlpha(i, 0);
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
// Ages/alphas alone don't erase the tube: knot POSITIONS still trace the old
|
|
302
|
-
// path. Defer a geometry reset to the next updateHead() (the first code to
|
|
303
|
-
// know the post-clear position), which collapses the whole tube onto the head.
|
|
304
|
-
this.setFlag(Trail3DFlags.Reseed);
|
|
213
|
+
this.clearCount++;
|
|
305
214
|
}
|
|
306
215
|
|
|
307
216
|
static fromJSON(json) {
|
|
@@ -321,6 +230,7 @@ class Trail3D {
|
|
|
321
230
|
textureURL,
|
|
322
231
|
depthWrite = false,
|
|
323
232
|
lightingEnabled = false,
|
|
233
|
+
warmup = true,
|
|
324
234
|
offset = Vector3.zero,
|
|
325
235
|
color = { r: 1, g: 1, b: 1, a: 1 },
|
|
326
236
|
fade
|
|
@@ -334,6 +244,7 @@ class Trail3D {
|
|
|
334
244
|
this.textureURL = textureURL;
|
|
335
245
|
this.depthWrite = depthWrite;
|
|
336
246
|
this.lightingEnabled = lightingEnabled;
|
|
247
|
+
this.warmup = warmup;
|
|
337
248
|
|
|
338
249
|
this.offset.fromJSON(offset);
|
|
339
250
|
this.color.fromJSON(color);
|
|
@@ -361,6 +272,7 @@ class Trail3D {
|
|
|
361
272
|
textureURL: this.textureURL,
|
|
362
273
|
depthWrite: this.depthWrite,
|
|
363
274
|
lightingEnabled: this.lightingEnabled,
|
|
275
|
+
warmup: this.warmup,
|
|
364
276
|
offset: this.offset.toJSON()
|
|
365
277
|
};
|
|
366
278
|
}
|
|
@@ -372,6 +284,7 @@ class Trail3D {
|
|
|
372
284
|
return this.textureURL === other.textureURL
|
|
373
285
|
&& this.depthWrite === other.depthWrite
|
|
374
286
|
&& this.lightingEnabled === other.lightingEnabled
|
|
287
|
+
&& this.warmup === other.warmup
|
|
375
288
|
&& this.width === other.width
|
|
376
289
|
&& this.radialSegments === other.radialSegments
|
|
377
290
|
&& this.maxAge === other.maxAge
|
|
@@ -382,127 +295,6 @@ class Trail3D {
|
|
|
382
295
|
&& this.offset.equals(other.offset)
|
|
383
296
|
;
|
|
384
297
|
}
|
|
385
|
-
|
|
386
|
-
/**
|
|
387
|
-
* Orient the head knot's ring by parallel-transporting the frame from its
|
|
388
|
-
* predecessor (the last committed knot). No-op until the head has separated
|
|
389
|
-
* from its predecessor (e.g. right after build), preserving the existing frame.
|
|
390
|
-
* @param {number} head_index
|
|
391
|
-
* @param {number} x
|
|
392
|
-
* @param {number} y
|
|
393
|
-
* @param {number} z
|
|
394
|
-
* @returns {void}
|
|
395
|
-
*/
|
|
396
|
-
#updateHeadFrame(head_index, x, y, z) {
|
|
397
|
-
const tube = this.tube;
|
|
398
|
-
|
|
399
|
-
const predecessor_index = (head_index + 1) % tube.getCount();
|
|
400
|
-
|
|
401
|
-
tube.getKnotPosition(v3_pred_pos, predecessor_index);
|
|
402
|
-
|
|
403
|
-
let tx = x - v3_pred_pos[0];
|
|
404
|
-
let ty = y - v3_pred_pos[1];
|
|
405
|
-
let tz = z - v3_pred_pos[2];
|
|
406
|
-
|
|
407
|
-
const t_length = v3_length(tx, ty, tz);
|
|
408
|
-
|
|
409
|
-
if (t_length <= EPSILON) {
|
|
410
|
-
// head and predecessor coincide (no direction yet) — keep current frame
|
|
411
|
-
return;
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
const inv = 1 / t_length;
|
|
415
|
-
tx *= inv;
|
|
416
|
-
ty *= inv;
|
|
417
|
-
tz *= inv;
|
|
418
|
-
|
|
419
|
-
tube.getKnotNormal(v3_pred_n, predecessor_index);
|
|
420
|
-
|
|
421
|
-
tube_frame_transport(
|
|
422
|
-
frame_out, 0,
|
|
423
|
-
tx, ty, tz,
|
|
424
|
-
v3_pred_n[0], v3_pred_n[1], v3_pred_n[2]
|
|
425
|
-
);
|
|
426
|
-
|
|
427
|
-
tube.setKnotFrame(
|
|
428
|
-
head_index,
|
|
429
|
-
frame_out[0], frame_out[1], frame_out[2],
|
|
430
|
-
frame_out[3], frame_out[4], frame_out[5]
|
|
431
|
-
);
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
/**
|
|
435
|
-
* @param {number} x
|
|
436
|
-
* @param {number} y
|
|
437
|
-
* @param {number} z
|
|
438
|
-
* @param {number} head_age
|
|
439
|
-
* @returns {boolean} whether the head position changed
|
|
440
|
-
*/
|
|
441
|
-
updateHead(x, y, z, head_age) {
|
|
442
|
-
const tube = this.tube;
|
|
443
|
-
|
|
444
|
-
const maxAge = this.maxAge;
|
|
445
|
-
|
|
446
|
-
if (this.getFlag(Trail3DFlags.Reseed)) {
|
|
447
|
-
// post-clear() re-seed: collapse every knot onto the new head position so
|
|
448
|
-
// no segment bridges post-clear geometry to pre-clear history.
|
|
449
|
-
const n = tube.getCount();
|
|
450
|
-
for (let i = 0; i < n; i++) {
|
|
451
|
-
tube.setKnotPosition(i, x, y, z);
|
|
452
|
-
}
|
|
453
|
-
this.timeSinceLastUpdate = 0;
|
|
454
|
-
this.distanceSinceLastUpdate = 0;
|
|
455
|
-
this.clearFlag(Trail3DFlags.Reseed);
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
const refitTimeDelta = maxAge / tube.getCount();
|
|
459
|
-
|
|
460
|
-
let head_index = tube.getHeadIndex();
|
|
461
|
-
tube.getKnotPosition(v3_head_pos, head_index);
|
|
462
|
-
|
|
463
|
-
const head_position_changed = x !== v3_head_pos[0]
|
|
464
|
-
|| y !== v3_head_pos[1]
|
|
465
|
-
|| z !== v3_head_pos[2];
|
|
466
|
-
|
|
467
|
-
if (head_position_changed) {
|
|
468
|
-
this.distanceSinceLastUpdate += v3_distance(
|
|
469
|
-
v3_head_pos[0], v3_head_pos[1], v3_head_pos[2],
|
|
470
|
-
x, y, z
|
|
471
|
-
);
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
const should_spawn = this.spawnMode === TrailSpawnMode.Distance
|
|
475
|
-
? this.distanceSinceLastUpdate >= this.spawnDistance
|
|
476
|
-
: this.timeSinceLastUpdate >= refitTimeDelta;
|
|
477
|
-
|
|
478
|
-
if (should_spawn && head_position_changed) {
|
|
479
|
-
// commit a new knot: both accumulators reset so a mid-life mode switch
|
|
480
|
-
// can't carry stale accumulation across.
|
|
481
|
-
this.timeSinceLastUpdate = 0;
|
|
482
|
-
this.distanceSinceLastUpdate = 0;
|
|
483
|
-
|
|
484
|
-
tube.rotate();
|
|
485
|
-
|
|
486
|
-
head_index = tube.getHeadIndex();
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
if (head_position_changed) {
|
|
490
|
-
this.#updateHeadFrame(head_index, x, y, z);
|
|
491
|
-
|
|
492
|
-
tube.setKnotPosition(head_index, x, y, z);
|
|
493
|
-
|
|
494
|
-
this.setFlag(Trail3DFlags.BoundsNeedUpdate);
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
// set head to fresh value; alpha follows the same fade law the simulator
|
|
498
|
-
// applies every tick, so the knot doesn't pop when it stops being the head
|
|
499
|
-
tube.setKnotAttribute_Scalar(head_index, TUBE_ATTRIBUTE_ADDRESS_AGE, head_age);
|
|
500
|
-
tube.setKnotAlpha(head_index, this.fade.evaluate(clamp01(head_age / maxAge)) * this.color.w);
|
|
501
|
-
tube.setKnotThickness(head_index, this.width);
|
|
502
|
-
|
|
503
|
-
return head_position_changed;
|
|
504
|
-
}
|
|
505
|
-
|
|
506
298
|
}
|
|
507
299
|
|
|
508
300
|
Trail3D.typeName = "Trail3D";
|