@woosh/meep-engine 3.52.0 → 3.53.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/package.json +1 -1
- package/src/engine/ecs/animation/Animation.d.ts +4 -25
- package/src/engine/ecs/animation/Animation.d.ts.map +1 -1
- package/src/engine/ecs/animation/Animation.js +9 -41
- package/src/engine/ecs/ik/IKGoalSystem.d.ts +4 -5
- package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -1
- package/src/engine/ecs/ik/IKGoalSystem.js +4 -6
- package/src/engine/graphics/ecs/mesh/assetTypeByPath.js +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.d.ts +9 -22
- package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +58 -203
- package/src/engine/graphics3/AnimationSystem.d.ts +7 -18
- package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
- package/src/engine/graphics3/AnimationSystem.js +62 -243
- package/src/engine/graphics3/FoliageWindSystem.d.ts +67 -0
- package/src/engine/graphics3/FoliageWindSystem.d.ts.map +1 -0
- package/src/engine/graphics3/FoliageWindSystem.js +257 -0
- package/src/engine/graphics3/GPUFluidSystem.d.ts +7 -0
- package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUFluidSystem.js +39 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +0 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +19 -5
- package/src/engine/graphics3/animation/AnimationClips.d.ts +107 -13
- package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -1
- package/src/engine/graphics3/animation/AnimationClips.js +207 -10
- package/src/engine/graphics3/animation/AnimationClipsSink.d.ts +89 -0
- package/src/engine/graphics3/animation/AnimationClipsSink.d.ts.map +1 -0
- package/src/engine/graphics3/animation/AnimationClipsSink.js +205 -0
- package/src/engine/graphics3/animation/FoliageWindRigs.d.ts +43 -0
- package/src/engine/graphics3/animation/FoliageWindRigs.d.ts.map +1 -0
- package/src/engine/graphics3/animation/FoliageWindRigs.js +69 -0
- package/src/engine/graphics3/animation/write_clip_playback.d.ts +17 -11
- package/src/engine/graphics3/animation/write_clip_playback.d.ts.map +1 -1
- package/src/engine/graphics3/animation/write_clip_playback.js +36 -27
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +8 -6
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.js +11 -5
- package/src/engine/graphics3/pose/collect_entity_playbacks.d.ts +7 -7
- package/src/engine/graphics3/pose/collect_entity_playbacks.d.ts.map +1 -1
- package/src/engine/graphics3/pose/collect_entity_playbacks.js +14 -15
- package/src/engine/graphics3/prefab/Prefab.d.ts +6 -0
- package/src/engine/graphics3/prefab/Prefab.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/Prefab.js +169 -162
- package/src/engine/graphics3/prefab/prefab_compile.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_compile.js +369 -334
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_instantiate.js +43 -2
- package/src/engine/graphics3/terrain/chunk_terrain_material_surface.js +2 -2
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts +2 -3
- package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/ContactProbeSystem.js +2 -4
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/sound/simulation/PROBE_PLACEMENT.md +4 -4
- package/src/engine/sound/simulation/README.md +1 -1
- package/src/engine/sound/simulation/probe/bakeProbeField.d.ts +22 -8
- package/src/engine/sound/simulation/probe/bakeProbeField.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/bakeProbeField.js +60 -15
- package/src/engine/sound/simulation/probe/bakeProbeReflectors.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/bakeProbeReflectors.js +19 -23
- package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts +63 -17
- package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/probe_sdf_grid.js +67 -17
- package/src/generation/foliage/FOLIAGE_DESIGN.md +318 -0
- package/src/generation/foliage/FOLIAGE_PLAN.md +198 -0
- package/src/generation/foliage/animation/build_tree_wind_rig.d.ts +20 -0
- package/src/generation/foliage/animation/build_tree_wind_rig.d.ts.map +1 -0
- package/src/generation/foliage/animation/build_tree_wind_rig.js +108 -0
- package/src/generation/foliage/asset/TreeAsset.d.ts +86 -0
- package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -0
- package/src/generation/foliage/asset/TreeAsset.js +111 -0
- package/src/generation/foliage/asset/TreeLODAsset.d.ts +115 -0
- package/src/generation/foliage/asset/TreeLODAsset.d.ts.map +1 -0
- package/src/generation/foliage/asset/TreeLODAsset.js +346 -0
- package/src/generation/foliage/asset/generate_tree.d.ts +15 -0
- package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -0
- package/src/generation/foliage/asset/generate_tree.js +93 -0
- package/src/generation/foliage/asset/place_tree.d.ts +82 -0
- package/src/generation/foliage/asset/place_tree.d.ts.map +1 -0
- package/src/generation/foliage/asset/place_tree.js +194 -0
- package/src/generation/foliage/config/BarkMaterialConfig.d.ts +120 -0
- package/src/generation/foliage/config/BarkMaterialConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/BarkMaterialConfig.js +250 -0
- package/src/generation/foliage/config/BranchLevelConfig.d.ts +288 -0
- package/src/generation/foliage/config/BranchLevelConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/BranchLevelConfig.js +536 -0
- package/src/generation/foliage/config/CrownConfig.d.ts +100 -0
- package/src/generation/foliage/config/CrownConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/CrownConfig.js +186 -0
- package/src/generation/foliage/config/CrownEnvelopeType.d.ts +16 -0
- package/src/generation/foliage/config/CrownEnvelopeType.d.ts.map +1 -0
- package/src/generation/foliage/config/CrownEnvelopeType.js +17 -0
- package/src/generation/foliage/config/FoliageCardType.d.ts +12 -0
- package/src/generation/foliage/config/FoliageCardType.d.ts.map +1 -0
- package/src/generation/foliage/config/FoliageCardType.js +18 -0
- package/src/generation/foliage/config/FoliageConfig.d.ts +151 -0
- package/src/generation/foliage/config/FoliageConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/FoliageConfig.js +283 -0
- package/src/generation/foliage/config/FoliageMaterialConfig.d.ts +90 -0
- package/src/generation/foliage/config/FoliageMaterialConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/FoliageMaterialConfig.js +181 -0
- package/src/generation/foliage/config/PhyllotaxisMode.d.ts +13 -0
- package/src/generation/foliage/config/PhyllotaxisMode.d.ts.map +1 -0
- package/src/generation/foliage/config/PhyllotaxisMode.js +20 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts +87 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/TreeLODConfig.js +211 -0
- package/src/generation/foliage/config/TreePreset.d.ts +16 -0
- package/src/generation/foliage/config/TreePreset.d.ts.map +1 -0
- package/src/generation/foliage/config/TreePreset.js +17 -0
- package/src/generation/foliage/config/TreeSpeciesConfig.d.ts +109 -0
- package/src/generation/foliage/config/TreeSpeciesConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/TreeSpeciesConfig.js +400 -0
- package/src/generation/foliage/config/TreeWindConfig.d.ts +84 -0
- package/src/generation/foliage/config/TreeWindConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/TreeWindConfig.js +157 -0
- package/src/generation/foliage/index.d.ts +38 -0
- package/src/generation/foliage/index.d.ts.map +1 -0
- package/src/generation/foliage/index.js +43 -0
- package/src/generation/foliage/material/make_bark_material.d.ts +37 -0
- package/src/generation/foliage/material/make_bark_material.d.ts.map +1 -0
- package/src/generation/foliage/material/make_bark_material.js +802 -0
- package/src/generation/foliage/material/make_foliage_material.d.ts +14 -0
- package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -0
- package/src/generation/foliage/material/make_foliage_material.js +359 -0
- package/src/generation/foliage/mesh/branch_collar_project.d.ts +42 -0
- package/src/generation/foliage/mesh/branch_collar_project.d.ts.map +1 -0
- package/src/generation/foliage/mesh/branch_collar_project.js +203 -0
- package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +35 -0
- package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts.map +1 -0
- package/src/generation/foliage/mesh/branch_ring_triangulate.js +72 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +80 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.js +502 -0
- package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.d.ts +19 -0
- package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.js +150 -0
- package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts +55 -0
- package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_mesh_build_bark.js +1047 -0
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +21 -0
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +415 -0
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts +13 -0
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -0
- package/src/generation/foliage/presets/make_tree_species_preset.js +837 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +443 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.js +1100 -0
- package/src/generation/foliage/skeleton/crown_envelope_evaluate.d.ts +27 -0
- package/src/generation/foliage/skeleton/crown_envelope_evaluate.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/crown_envelope_evaluate.js +121 -0
- package/src/generation/foliage/skeleton/spine_frame_double_reflection.d.ts +32 -0
- package/src/generation/foliage/skeleton/spine_frame_double_reflection.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/spine_frame_double_reflection.js +87 -0
- package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts +33 -0
- package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.js +205 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts +14 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js +179 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +18 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow.js +1104 -0
- package/src/shade/playground/additive_blending/index.html +197 -0
- package/src/shade/playground/additive_blending/main.d.ts +2 -0
- package/src/shade/playground/additive_blending/main.d.ts.map +1 -0
- package/src/shade/playground/additive_blending/main.js +529 -0
- package/src/shade/playground/foliage_wind/README.md +18 -0
- package/src/shade/playground/foliage_wind/foliage_world.d.ts +127 -0
- package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -0
- package/src/shade/playground/foliage_wind/foliage_world.js +593 -0
- package/src/shade/playground/foliage_wind/index.html +254 -0
- package/src/shade/playground/foliage_wind/main.d.ts +2 -0
- package/src/shade/playground/foliage_wind/main.d.ts.map +1 -0
- package/src/shade/playground/foliage_wind/main.js +263 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +45 -16
- package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +145 -0
- package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts +9 -1
- package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.js +53 -1
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts +8 -0
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.js +71 -0
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts +11 -0
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.js +32 -0
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +30 -3
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +532 -79
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +19 -12
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
- package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +20 -13
- package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +35 -8
- package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
- package/src/shade/renderer/animation/ShadeAnimationClip.js +433 -2
- package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
- package/src/shade/renderer/animation/chunk_pose_accumulator.js +40 -32
- package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts +97 -0
- package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts.map +1 -0
- package/src/shade/renderer/animation/foliage/FoliageWindJoint.js +161 -0
- package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts +65 -0
- package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts.map +1 -0
- package/src/shade/renderer/animation/foliage/FoliageWindRig.js +89 -0
- package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts +19 -0
- package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts.map +1 -0
- package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.js +143 -0
- package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts +14 -0
- package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts.map +1 -0
- package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.js +116 -0
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/pose_evaluate_local.js +39 -29
- package/src/shade/renderer/animation/shader_animation_pose_resolve.js +37 -37
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +2 -2
- package/src/shade/renderer/extension/RenderExtension.d.ts +7 -0
- package/src/shade/renderer/extension/RenderExtension.d.ts.map +1 -1
- package/src/shade/renderer/extension/RenderExtension.js +9 -0
- package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts +6 -0
- package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts.map +1 -1
- package/src/shade/renderer/extension/RenderExtensionRegistry.js +15 -0
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +7 -0
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
- package/src/shade/renderer/fluid/GPUFluidCascade.js +15 -0
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +7 -0
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +11 -0
- 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 +51 -48
- package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +6 -0
- package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/FluidMacPasses.js +16 -0
- package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.js +15 -3
- package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.js +102 -96
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +12 -12
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.js +12 -12
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +7 -0
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts.map +1 -1
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.js +16 -0
- package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +7 -0
- package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
- package/src/shade/renderer/fluid/publish/FluidWindPublish.js +10 -0
- package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +2 -2
- package/src/shade/renderer/loader/SceneBundle.d.ts +7 -0
- package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
- package/src/shade/renderer/loader/SceneBundle.js +119 -111
- package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts +4 -0
- package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
- package/src/shade/renderer/material/standard/fragment_gbuffer.js +6 -5
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +8 -7
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
- package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +9 -8
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +3 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +9 -4
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +9 -7
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.js +15 -7
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +6 -4
- package/src/shade/renderer/rasterize/native/oit/oit_resolve_fragment_body.js +3 -3
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +8 -5
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +4 -3
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1 -1
- package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts +9 -0
- package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts.map +1 -0
- package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.js +17 -0
- package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts +8 -0
- package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts.map +1 -1
- package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.js +28 -20
- package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts +8 -0
- package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts.map +1 -0
- package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.js +15 -0
- package/src/shade/renderer/view/chunk_view_mip_bias.d.ts +21 -0
- package/src/shade/renderer/view/chunk_view_mip_bias.d.ts.map +1 -0
- package/src/shade/renderer/view/chunk_view_mip_bias.js +44 -0
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +105 -26
- package/src/engine/graphics/composit/CompositingStages.d.ts +0 -6
- package/src/engine/graphics/composit/CompositingStages.d.ts.map +0 -1
- package/src/engine/graphics/composit/CompositingStages.js +0 -8
- package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts +0 -7
- package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts.map +0 -1
- package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.js +0 -24
- package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts +0 -8
- package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts.map +0 -1
- package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.js +0 -17
- package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts +0 -8
- package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts.map +0 -1
- package/src/engine/graphics/geometry/buffered/computeGeometryEquality.js +0 -60
- package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts +0 -7
- package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts.map +0 -1
- package/src/engine/graphics/geometry/buffered/computeGeometryHash.js +0 -26
- package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts +0 -7
- package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts.map +0 -1
- package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.js +0 -23
- package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts +0 -7
- package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts.map +0 -1
- package/src/engine/graphics/geometry/instancing/geometry_copy.js +0 -15
- package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts +0 -2
- package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts.map +0 -1
- package/src/engine/graphics/geometry/instancing/rewriteMaterial.js +0 -57
- package/src/engine/graphics/geometry/ribbon/Quad.d.ts +0 -96
- package/src/engine/graphics/geometry/ribbon/Quad.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/Quad.js +0 -213
- package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts +0 -9
- package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/copyAttributeV3.js +0 -12
- package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts +0 -10
- package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/copyAttributeValue.js +0 -17
- package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts +0 -10
- package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/equalAttributeV3.js +0 -13
- package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts +0 -11
- package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/equalAttributeValue.js +0 -24
- package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts +0 -6
- package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/rotateRibbon.js +0 -37
- package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts +0 -9
- package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts.map +0 -1
- package/src/engine/graphics/geometry/ribbon/updateTipPosition.js +0 -52
- package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts +0 -8
- package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts.map +0 -1
- package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.js +0 -54
- package/src/engine/graphics/render/RenderPassType.d.ts +0 -6
- package/src/engine/graphics/render/RenderPassType.d.ts.map +0 -1
- package/src/engine/graphics/render/RenderPassType.js +0 -8
- package/src/engine/graphics/render/layers/RenderLayer.d.ts +0 -78
- package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +0 -1
- package/src/engine/graphics/render/layers/RenderLayer.js +0 -95
- package/src/engine/graphics/render/layers/RenderLayerManager.d.ts +0 -72
- package/src/engine/graphics/render/layers/RenderLayerManager.d.ts.map +0 -1
- package/src/engine/graphics/render/layers/RenderLayerManager.js +0 -160
- package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts +0 -18
- package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts.map +0 -1
- package/src/engine/graphics/render/layers/RenderLayerManagerState.js +0 -48
- package/src/engine/graphics/render/layers/RenderLayerState.d.ts +0 -18
- package/src/engine/graphics/render/layers/RenderLayerState.d.ts.map +0 -1
- package/src/engine/graphics/render/layers/RenderLayerState.js +0 -27
- package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts +0 -8
- package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts.map +0 -1
- package/src/engine/graphics/render/layers/RenderLayerUtils.js +0 -103
- package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts +0 -10
- package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts.map +0 -1
- package/src/engine/graphics/render/make_bvh_visibility_builder.js +0 -64
- package/src/engine/graphics/render/view/CameraViewFlags.d.ts +0 -7
- package/src/engine/graphics/render/view/CameraViewFlags.d.ts.map +0 -1
- package/src/engine/graphics/render/view/CameraViewFlags.js +0 -9
- package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts +0 -143
- package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts.map +0 -1
- package/src/engine/graphics/render/visibility/IncrementalDeltaSet.js +0 -328
- package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts +0 -39
- package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts.map +0 -1
- package/src/engine/graphics/render/visibility/VisibilityComputer.js +0 -80
- package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts +0 -29
- package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts.map +0 -1
- package/src/engine/graphics/render/visibility/VisibilityFilter.js +0 -37
- package/src/engine/graphics3/animation/write_graph_playback.d.ts +0 -24
- package/src/engine/graphics3/animation/write_graph_playback.d.ts.map +0 -1
- package/src/engine/graphics3/animation/write_graph_playback.js +0 -48
|
@@ -3,6 +3,8 @@ import { chunk_atomic_add_f32_storage } from "../shader/chunk/atomic/chunk_atomi
|
|
|
3
3
|
import {
|
|
4
4
|
POSE_ACCUMULATOR_OFFSET_DIRTY,
|
|
5
5
|
POSE_ACCUMULATOR_OFFSET_REST_ROTATION,
|
|
6
|
+
POSE_ACCUMULATOR_OFFSET_REST_SCALE,
|
|
7
|
+
POSE_ACCUMULATOR_OFFSET_REST_TRANSLATION,
|
|
6
8
|
POSE_ACCUMULATOR_OFFSET_ROTATION,
|
|
7
9
|
POSE_ACCUMULATOR_OFFSET_SCALE,
|
|
8
10
|
POSE_ACCUMULATOR_OFFSET_TRANSLATION,
|
|
@@ -42,6 +44,8 @@ const POSE_OFFSET_ROTATION: u32 = ${POSE_ACCUMULATOR_OFFSET_ROTATION}u;
|
|
|
42
44
|
const POSE_OFFSET_SCALE: u32 = ${POSE_ACCUMULATOR_OFFSET_SCALE}u;
|
|
43
45
|
const POSE_OFFSET_DIRTY: u32 = ${POSE_ACCUMULATOR_OFFSET_DIRTY}u;
|
|
44
46
|
const POSE_OFFSET_REST_ROTATION: u32 = ${POSE_ACCUMULATOR_OFFSET_REST_ROTATION}u;
|
|
47
|
+
const POSE_OFFSET_REST_TRANSLATION: u32 = ${POSE_ACCUMULATOR_OFFSET_REST_TRANSLATION}u;
|
|
48
|
+
const POSE_OFFSET_REST_SCALE: u32 = ${POSE_ACCUMULATOR_OFFSET_REST_SCALE}u;
|
|
45
49
|
|
|
46
50
|
const POSE_DIRTY_TX: u32 = ${POSE_DIRTY_TX}u;
|
|
47
51
|
const POSE_DIRTY_TY: u32 = ${POSE_DIRTY_TY}u;
|
|
@@ -57,23 +61,28 @@ fn pose_accumulator_slot_base(row: u32) -> u32 {
|
|
|
57
61
|
return row * POSE_ACCUMULATOR_STRIDE;
|
|
58
62
|
}
|
|
59
63
|
|
|
60
|
-
fn pose_accumulator_add_translation(row: u32, value: vec3<f32>, mask: u32) {
|
|
61
|
-
let
|
|
64
|
+
fn pose_accumulator_add_translation(row: u32, value: vec3<f32>, mask: u32, weight: f32, rest: vec3<f32>) {
|
|
65
|
+
let slot_base = pose_accumulator_slot_base(row);
|
|
66
|
+
let base = slot_base + POSE_OFFSET_TRANSLATION;
|
|
67
|
+
let rest_base = slot_base + POSE_OFFSET_REST_TRANSLATION;
|
|
62
68
|
var dirty_bits: u32 = 0u;
|
|
63
69
|
if (mask & 0x1u) != 0u {
|
|
64
|
-
atomic_add_f32_storage(&pose_accumulator[base + 0u], value.x);
|
|
70
|
+
atomic_add_f32_storage(&pose_accumulator[base + 0u], value.x - rest.x * weight);
|
|
71
|
+
atomicStore(&pose_accumulator[rest_base + 0u], bitcast<u32>(rest.x));
|
|
65
72
|
dirty_bits |= POSE_DIRTY_TX;
|
|
66
73
|
}
|
|
67
74
|
if (mask & 0x2u) != 0u {
|
|
68
|
-
atomic_add_f32_storage(&pose_accumulator[base + 1u], value.y);
|
|
75
|
+
atomic_add_f32_storage(&pose_accumulator[base + 1u], value.y - rest.y * weight);
|
|
76
|
+
atomicStore(&pose_accumulator[rest_base + 1u], bitcast<u32>(rest.y));
|
|
69
77
|
dirty_bits |= POSE_DIRTY_TY;
|
|
70
78
|
}
|
|
71
79
|
if (mask & 0x4u) != 0u {
|
|
72
|
-
atomic_add_f32_storage(&pose_accumulator[base + 2u], value.z);
|
|
80
|
+
atomic_add_f32_storage(&pose_accumulator[base + 2u], value.z - rest.z * weight);
|
|
81
|
+
atomicStore(&pose_accumulator[rest_base + 2u], bitcast<u32>(rest.z));
|
|
73
82
|
dirty_bits |= POSE_DIRTY_TZ;
|
|
74
83
|
}
|
|
75
84
|
if dirty_bits != 0u {
|
|
76
|
-
atomicOr(&pose_accumulator[
|
|
85
|
+
atomicOr(&pose_accumulator[slot_base + POSE_OFFSET_DIRTY], dirty_bits);
|
|
77
86
|
}
|
|
78
87
|
}
|
|
79
88
|
|
|
@@ -84,55 +93,54 @@ fn pose_accumulator_add_rotation(row: u32, value: vec4<f32>, mask: u32, weight:
|
|
|
84
93
|
// right for x/y/z but turns a missing w curve into a 180-degree
|
|
85
94
|
// rotation after normalisation — pose_evaluate_local, the CPU twin,
|
|
86
95
|
// defaults w to 1 and the GPU must match.
|
|
87
|
-
// The resolve pass normalises the accumulated sum,
|
|
88
|
-
// corrects a weighted-vec4 blend back onto the unit 4-sphere.
|
|
96
|
+
// The resolve pass adds rest and normalises the accumulated delta sum,
|
|
97
|
+
// which corrects a weighted-vec4 blend back onto the unit 4-sphere.
|
|
89
98
|
//
|
|
90
|
-
// The value arrives ALREADY multiplied by the clip's weight,
|
|
91
|
-
//
|
|
92
|
-
// identity's w is the weight, not 1.0. Substituting an unweighted 1.0 made
|
|
93
|
-
// one clip at weight 0.5 accumulate (0.5x, 0.5y, 0.5z, 1.0) against the
|
|
94
|
-
// twin's (0.5x, 0.5y, 0.5z, 0.5) — a different rotation once normalised,
|
|
95
|
-
// pulled toward identity — and it put a floor of 1.0 under the sum's
|
|
96
|
-
// length, so the resolve's rest-pose fallback for a zero-length sum could
|
|
97
|
-
// not fire and a joint rotated only by a silent clip lost its rest pose.
|
|
99
|
+
// The value arrives ALREADY multiplied by the clip's weight, so by
|
|
100
|
+
// distributive law w_i * (q_i - rest) == value - rest * weight.
|
|
98
101
|
let w = select(weight, value.w, (mask & 0x8u) != 0u);
|
|
99
102
|
|
|
100
|
-
let
|
|
101
|
-
|
|
102
|
-
atomic_add_f32_storage(&pose_accumulator[base +
|
|
103
|
-
atomic_add_f32_storage(&pose_accumulator[base +
|
|
104
|
-
atomic_add_f32_storage(&pose_accumulator[base +
|
|
103
|
+
let slot_base = pose_accumulator_slot_base(row);
|
|
104
|
+
let base = slot_base + POSE_OFFSET_ROTATION;
|
|
105
|
+
atomic_add_f32_storage(&pose_accumulator[base + 0u], value.x - rest.x * weight);
|
|
106
|
+
atomic_add_f32_storage(&pose_accumulator[base + 1u], value.y - rest.y * weight);
|
|
107
|
+
atomic_add_f32_storage(&pose_accumulator[base + 2u], value.z - rest.z * weight);
|
|
108
|
+
atomic_add_f32_storage(&pose_accumulator[base + 3u], w - rest.w * weight);
|
|
105
109
|
|
|
106
110
|
// The target's rest rotation, stored rather than added, by every contribution whatever its
|
|
107
|
-
// weight: the resolve
|
|
108
|
-
//
|
|
109
|
-
|
|
110
|
-
let rest_base = pose_accumulator_slot_base(row) + POSE_OFFSET_REST_ROTATION;
|
|
111
|
+
// weight: the resolve reconstructs rest + delta from it. Every binding of one target carries
|
|
112
|
+
// the same rest, so concurrent stores agree.
|
|
113
|
+
let rest_base = slot_base + POSE_OFFSET_REST_ROTATION;
|
|
111
114
|
atomicStore(&pose_accumulator[rest_base + 0u], bitcast<u32>(rest.x));
|
|
112
115
|
atomicStore(&pose_accumulator[rest_base + 1u], bitcast<u32>(rest.y));
|
|
113
116
|
atomicStore(&pose_accumulator[rest_base + 2u], bitcast<u32>(rest.z));
|
|
114
117
|
atomicStore(&pose_accumulator[rest_base + 3u], bitcast<u32>(rest.w));
|
|
115
118
|
|
|
116
|
-
atomicOr(&pose_accumulator[
|
|
119
|
+
atomicOr(&pose_accumulator[slot_base + POSE_OFFSET_DIRTY], POSE_DIRTY_R);
|
|
117
120
|
}
|
|
118
121
|
|
|
119
|
-
fn pose_accumulator_add_scale(row: u32, value: vec3<f32>, mask: u32) {
|
|
120
|
-
let
|
|
122
|
+
fn pose_accumulator_add_scale(row: u32, value: vec3<f32>, mask: u32, weight: f32, rest: vec3<f32>) {
|
|
123
|
+
let slot_base = pose_accumulator_slot_base(row);
|
|
124
|
+
let base = slot_base + POSE_OFFSET_SCALE;
|
|
125
|
+
let rest_base = slot_base + POSE_OFFSET_REST_SCALE;
|
|
121
126
|
var dirty_bits: u32 = 0u;
|
|
122
127
|
if (mask & 0x1u) != 0u {
|
|
123
|
-
atomic_add_f32_storage(&pose_accumulator[base + 0u], value.x);
|
|
128
|
+
atomic_add_f32_storage(&pose_accumulator[base + 0u], value.x - rest.x * weight);
|
|
129
|
+
atomicStore(&pose_accumulator[rest_base + 0u], bitcast<u32>(rest.x));
|
|
124
130
|
dirty_bits |= POSE_DIRTY_SX;
|
|
125
131
|
}
|
|
126
132
|
if (mask & 0x2u) != 0u {
|
|
127
|
-
atomic_add_f32_storage(&pose_accumulator[base + 1u], value.y);
|
|
133
|
+
atomic_add_f32_storage(&pose_accumulator[base + 1u], value.y - rest.y * weight);
|
|
134
|
+
atomicStore(&pose_accumulator[rest_base + 1u], bitcast<u32>(rest.y));
|
|
128
135
|
dirty_bits |= POSE_DIRTY_SY;
|
|
129
136
|
}
|
|
130
137
|
if (mask & 0x4u) != 0u {
|
|
131
|
-
atomic_add_f32_storage(&pose_accumulator[base + 2u], value.z);
|
|
138
|
+
atomic_add_f32_storage(&pose_accumulator[base + 2u], value.z - rest.z * weight);
|
|
139
|
+
atomicStore(&pose_accumulator[rest_base + 2u], bitcast<u32>(rest.z));
|
|
132
140
|
dirty_bits |= POSE_DIRTY_SZ;
|
|
133
141
|
}
|
|
134
142
|
if dirty_bits != 0u {
|
|
135
|
-
atomicOr(&pose_accumulator[
|
|
143
|
+
atomicOr(&pose_accumulator[slot_base + POSE_OFFSET_DIRTY], dirty_bits);
|
|
136
144
|
}
|
|
137
145
|
}
|
|
138
146
|
`, [chunk_atomic_add_f32_storage]);
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Botanical and aeroelastic parameters for one skeletal foliage bone in a {@link FoliageWindRig}.
|
|
3
|
+
*
|
|
4
|
+
* When carried on a {@link SceneBundle} or {@link Prefab}, {@link target} is a node index;
|
|
5
|
+
* when bound to a placed instance (`place_tree` or `GPUAnimationManager#register_foliage_rig`),
|
|
6
|
+
* {@link target} is the joint's ECS entity ID.
|
|
7
|
+
*/
|
|
8
|
+
export class FoliageWindJoint {
|
|
9
|
+
/**
|
|
10
|
+
* @param {Object} options
|
|
11
|
+
* @param {number} options.target
|
|
12
|
+
* @param {ArrayLike<number>} [options.branch_axis]
|
|
13
|
+
* @param {number} [options.compliance]
|
|
14
|
+
* @param {number} [options.natural_frequency]
|
|
15
|
+
* @param {number} [options.damping_ratio]
|
|
16
|
+
* @param {number} [options.max_angle]
|
|
17
|
+
* @param {number} [options.turbulence]
|
|
18
|
+
* @param {number} [options.phase_offset]
|
|
19
|
+
* @param {number} [options.flutter_phase]
|
|
20
|
+
* @returns {FoliageWindJoint}
|
|
21
|
+
*/
|
|
22
|
+
static from({ target, branch_axis, compliance, natural_frequency, damping_ratio, max_angle, turbulence, phase_offset, flutter_phase, }: {
|
|
23
|
+
target: number;
|
|
24
|
+
branch_axis?: ArrayLike<number>;
|
|
25
|
+
compliance?: number;
|
|
26
|
+
natural_frequency?: number;
|
|
27
|
+
damping_ratio?: number;
|
|
28
|
+
max_angle?: number;
|
|
29
|
+
turbulence?: number;
|
|
30
|
+
phase_offset?: number;
|
|
31
|
+
flutter_phase?: number;
|
|
32
|
+
}): FoliageWindJoint;
|
|
33
|
+
/**
|
|
34
|
+
* Target node index (in a `SceneBundle` / `Prefab`) or ECS entity ID (when bound to an instance).
|
|
35
|
+
* @type {number}
|
|
36
|
+
*/
|
|
37
|
+
target: number;
|
|
38
|
+
/**
|
|
39
|
+
* Unit growth axis `[dx, dy, dz]` of the branch segment in tree model space.
|
|
40
|
+
* @type {Float32Array}
|
|
41
|
+
*/
|
|
42
|
+
branch_axis: Float32Array;
|
|
43
|
+
/**
|
|
44
|
+
* Rotational aeroelastic compliance (`rad / (m/s)^2`) derived from the pipe-model cross-section radius.
|
|
45
|
+
* @type {number}
|
|
46
|
+
*/
|
|
47
|
+
compliance: number;
|
|
48
|
+
/**
|
|
49
|
+
* Undamped natural angular frequency `omega_0` (`rad/s`) of the branch's restoring stiffness.
|
|
50
|
+
* @type {number}
|
|
51
|
+
*/
|
|
52
|
+
natural_frequency: number;
|
|
53
|
+
/**
|
|
54
|
+
* Dimensionless damping ratio `zeta` (`> 0`).
|
|
55
|
+
* @type {number}
|
|
56
|
+
*/
|
|
57
|
+
damping_ratio: number;
|
|
58
|
+
/**
|
|
59
|
+
* Asymptotic soft-saturation deflection angle limit in radians (`theta_max`).
|
|
60
|
+
* @type {number}
|
|
61
|
+
*/
|
|
62
|
+
max_angle: number;
|
|
63
|
+
/**
|
|
64
|
+
* Strouhal vortex-shedding oscillation amplitude factor.
|
|
65
|
+
* @type {number}
|
|
66
|
+
*/
|
|
67
|
+
turbulence: number;
|
|
68
|
+
/**
|
|
69
|
+
* Initial vortex-shedding phase offset in radians.
|
|
70
|
+
* @type {number}
|
|
71
|
+
*/
|
|
72
|
+
phase_offset: number;
|
|
73
|
+
/**
|
|
74
|
+
* @param {number} v
|
|
75
|
+
*/
|
|
76
|
+
set flutter_phase(v: number);
|
|
77
|
+
/**
|
|
78
|
+
* Alias for {@link phase_offset}.
|
|
79
|
+
* @returns {number}
|
|
80
|
+
*/
|
|
81
|
+
get flutter_phase(): number;
|
|
82
|
+
/**
|
|
83
|
+
* @param {FoliageWindJoint} other
|
|
84
|
+
* @returns {this}
|
|
85
|
+
*/
|
|
86
|
+
copy(other: FoliageWindJoint): this;
|
|
87
|
+
/**
|
|
88
|
+
* @returns {FoliageWindJoint}
|
|
89
|
+
*/
|
|
90
|
+
clone(): FoliageWindJoint;
|
|
91
|
+
/**
|
|
92
|
+
* @readonly
|
|
93
|
+
* @type {boolean}
|
|
94
|
+
*/
|
|
95
|
+
readonly isFoliageWindJoint: boolean;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=FoliageWindJoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FoliageWindJoint.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/animation/foliage/FoliageWindJoint.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH;IAgEI;;;;;;;;;;;;OAYG;IACH;QAX2B,MAAM,EAAtB,MAAM;QACsB,WAAW,GAAvC,UAAU,MAAM,CAAC;QACA,UAAU,GAA3B,MAAM;QACW,iBAAiB,GAAlC,MAAM;QACW,aAAa,GAA9B,MAAM;QACW,SAAS,GAA1B,MAAM;QACW,UAAU,GAA3B,MAAM;QACW,YAAY,GAA7B,MAAM;QACW,aAAa,GAA9B,MAAM;QACJ,gBAAgB,CAyC5B;IAnHD;;;OAGG;IACH,QAFU,MAAM,CAEL;IAEX;;;OAGG;IACH,aAFU,YAAY,CAEoB;IAE1C;;;OAGG;IACH,YAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,mBAFU,MAAM,CAEQ;IAExB;;;OAGG;IACH,eAFU,MAAM,CAEK;IAErB;;;OAGG;IACH,WAFU,MAAM,CAEC;IAEjB;;;OAGG;IACH,YAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,cAFU,MAAM,CAEG;IAUnB;;OAEG;IACH,6BAEC;IAbD;;;OAGG;IACH,4BAEC;IA+DD;;;OAGG;IACH,YAHW,gBAAgB,GACd,IAAI,CAehB;IAED;;OAEG;IACH,SAFa,gBAAgB,CAM5B;IAGL;;;OAGG;IACH,6BAFU,OAAO,CAE4B;CAN5C"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Botanical and aeroelastic parameters for one skeletal foliage bone in a {@link FoliageWindRig}.
|
|
5
|
+
*
|
|
6
|
+
* When carried on a {@link SceneBundle} or {@link Prefab}, {@link target} is a node index;
|
|
7
|
+
* when bound to a placed instance (`place_tree` or `GPUAnimationManager#register_foliage_rig`),
|
|
8
|
+
* {@link target} is the joint's ECS entity ID.
|
|
9
|
+
*/
|
|
10
|
+
export class FoliageWindJoint {
|
|
11
|
+
/**
|
|
12
|
+
* Target node index (in a `SceneBundle` / `Prefab`) or ECS entity ID (when bound to an instance).
|
|
13
|
+
* @type {number}
|
|
14
|
+
*/
|
|
15
|
+
target = 0;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Unit growth axis `[dx, dy, dz]` of the branch segment in tree model space.
|
|
19
|
+
* @type {Float32Array}
|
|
20
|
+
*/
|
|
21
|
+
branch_axis = new Float32Array([0, 1, 0]);
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Rotational aeroelastic compliance (`rad / (m/s)^2`) derived from the pipe-model cross-section radius.
|
|
25
|
+
* @type {number}
|
|
26
|
+
*/
|
|
27
|
+
compliance = 0.02;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Undamped natural angular frequency `omega_0` (`rad/s`) of the branch's restoring stiffness.
|
|
31
|
+
* @type {number}
|
|
32
|
+
*/
|
|
33
|
+
natural_frequency = 3.0;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Dimensionless damping ratio `zeta` (`> 0`).
|
|
37
|
+
* @type {number}
|
|
38
|
+
*/
|
|
39
|
+
damping_ratio = 0.45;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Asymptotic soft-saturation deflection angle limit in radians (`theta_max`).
|
|
43
|
+
* @type {number}
|
|
44
|
+
*/
|
|
45
|
+
max_angle = 0.45;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Strouhal vortex-shedding oscillation amplitude factor.
|
|
49
|
+
* @type {number}
|
|
50
|
+
*/
|
|
51
|
+
turbulence = 0.35;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Initial vortex-shedding phase offset in radians.
|
|
55
|
+
* @type {number}
|
|
56
|
+
*/
|
|
57
|
+
phase_offset = 0.0;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Alias for {@link phase_offset}.
|
|
61
|
+
* @returns {number}
|
|
62
|
+
*/
|
|
63
|
+
get flutter_phase() {
|
|
64
|
+
return this.phase_offset;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @param {number} v
|
|
69
|
+
*/
|
|
70
|
+
set flutter_phase(v) {
|
|
71
|
+
this.phase_offset = v;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* @param {Object} options
|
|
76
|
+
* @param {number} options.target
|
|
77
|
+
* @param {ArrayLike<number>} [options.branch_axis]
|
|
78
|
+
* @param {number} [options.compliance]
|
|
79
|
+
* @param {number} [options.natural_frequency]
|
|
80
|
+
* @param {number} [options.damping_ratio]
|
|
81
|
+
* @param {number} [options.max_angle]
|
|
82
|
+
* @param {number} [options.turbulence]
|
|
83
|
+
* @param {number} [options.phase_offset]
|
|
84
|
+
* @param {number} [options.flutter_phase]
|
|
85
|
+
* @returns {FoliageWindJoint}
|
|
86
|
+
*/
|
|
87
|
+
static from({
|
|
88
|
+
target,
|
|
89
|
+
branch_axis = [0, 1, 0],
|
|
90
|
+
compliance = 0.02,
|
|
91
|
+
natural_frequency = 3.0,
|
|
92
|
+
damping_ratio = 0.45,
|
|
93
|
+
max_angle = 0.45,
|
|
94
|
+
turbulence = 0.35,
|
|
95
|
+
phase_offset,
|
|
96
|
+
flutter_phase = 0.0,
|
|
97
|
+
}) {
|
|
98
|
+
assert.isNonNegativeInteger(target, 'target');
|
|
99
|
+
const r = new FoliageWindJoint();
|
|
100
|
+
r.target = target;
|
|
101
|
+
|
|
102
|
+
let ax = branch_axis[0] ?? 0;
|
|
103
|
+
let ay = branch_axis[1] ?? 1;
|
|
104
|
+
let az = branch_axis[2] ?? 0;
|
|
105
|
+
const len = Math.hypot(ax, ay, az);
|
|
106
|
+
if (len > 1e-6) {
|
|
107
|
+
ax /= len;
|
|
108
|
+
ay /= len;
|
|
109
|
+
az /= len;
|
|
110
|
+
} else {
|
|
111
|
+
ax = 0;
|
|
112
|
+
ay = 1;
|
|
113
|
+
az = 0;
|
|
114
|
+
}
|
|
115
|
+
r.branch_axis[0] = ax;
|
|
116
|
+
r.branch_axis[1] = ay;
|
|
117
|
+
r.branch_axis[2] = az;
|
|
118
|
+
|
|
119
|
+
r.compliance = Math.max(0, compliance);
|
|
120
|
+
r.natural_frequency = Math.max(0.1, natural_frequency);
|
|
121
|
+
r.damping_ratio = Math.max(0.05, damping_ratio);
|
|
122
|
+
r.max_angle = Math.max(0.01, max_angle);
|
|
123
|
+
r.turbulence = Math.max(0, turbulence);
|
|
124
|
+
r.phase_offset = phase_offset !== undefined ? phase_offset : flutter_phase;
|
|
125
|
+
return r;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* @param {FoliageWindJoint} other
|
|
130
|
+
* @returns {this}
|
|
131
|
+
*/
|
|
132
|
+
copy(other) {
|
|
133
|
+
assert.defined(other, 'other');
|
|
134
|
+
this.target = other.target;
|
|
135
|
+
this.branch_axis[0] = other.branch_axis[0];
|
|
136
|
+
this.branch_axis[1] = other.branch_axis[1];
|
|
137
|
+
this.branch_axis[2] = other.branch_axis[2];
|
|
138
|
+
this.compliance = other.compliance;
|
|
139
|
+
this.natural_frequency = other.natural_frequency;
|
|
140
|
+
this.damping_ratio = other.damping_ratio;
|
|
141
|
+
this.max_angle = other.max_angle;
|
|
142
|
+
this.turbulence = other.turbulence;
|
|
143
|
+
this.phase_offset = other.phase_offset;
|
|
144
|
+
return this;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* @returns {FoliageWindJoint}
|
|
149
|
+
*/
|
|
150
|
+
clone() {
|
|
151
|
+
const r = new FoliageWindJoint();
|
|
152
|
+
r.copy(this);
|
|
153
|
+
return r;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* @readonly
|
|
159
|
+
* @type {boolean}
|
|
160
|
+
*/
|
|
161
|
+
FoliageWindJoint.prototype.isFoliageWindJoint = true;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aeroelastic foliage bone rig descriptor for GPU fluid-driven skeletal wind animation.
|
|
3
|
+
*
|
|
4
|
+
* Unlike a baked keyframe {@link ShadeAnimationClip}, a `FoliageWindRig` defines the physical
|
|
5
|
+
* and botanical parameters of each skeletal branch joint (`branch_axis`, `compliance`,
|
|
6
|
+
* `natural_frequency`, `damping_ratio`, `max_angle`, `turbulence`, `phase_offset`).
|
|
7
|
+
*
|
|
8
|
+
* At runtime, `GPUAnimationManager` evaluates `shader_foliage_wind_apply` on the GPU, sampling
|
|
9
|
+
* the scene's 3D fluid wind field (`GPUSceneWind` / `wind_field_sample(pos_ws)`) at each bone's
|
|
10
|
+
* world position, stepping a second-order damped spring-damper oscillator with Strouhal vortex
|
|
11
|
+
* shedding, and contributing the resulting bone rotations into `pose_accumulator`.
|
|
12
|
+
*/
|
|
13
|
+
export class FoliageWindRig {
|
|
14
|
+
/**
|
|
15
|
+
* @param {Object} options
|
|
16
|
+
* @param {string} [options.name=""]
|
|
17
|
+
* @param {number} [options.root=0]
|
|
18
|
+
* @param {number} [options.weight=1.0]
|
|
19
|
+
* @param {FoliageWindJoint[]} [options.joints=[]]
|
|
20
|
+
* @returns {FoliageWindRig}
|
|
21
|
+
*/
|
|
22
|
+
static from({ name, root, weight, joints }?: {
|
|
23
|
+
name?: string;
|
|
24
|
+
root?: number;
|
|
25
|
+
weight?: number;
|
|
26
|
+
joints?: FoliageWindJoint[];
|
|
27
|
+
}): FoliageWindRig;
|
|
28
|
+
/**
|
|
29
|
+
* Optional rig name.
|
|
30
|
+
* @type {string}
|
|
31
|
+
*/
|
|
32
|
+
name: string;
|
|
33
|
+
/**
|
|
34
|
+
* Root node index (in a `SceneBundle` / `Prefab`, typically `0`) or root ECS entity ID (when bound).
|
|
35
|
+
* Used by the GPU solver to transform world-space wind vectors into the tree's model frame.
|
|
36
|
+
* @type {number}
|
|
37
|
+
*/
|
|
38
|
+
root: number;
|
|
39
|
+
/**
|
|
40
|
+
* Overall rig contribution weight (`1.0` = full aeroelastic response).
|
|
41
|
+
* @type {number}
|
|
42
|
+
*/
|
|
43
|
+
weight: number;
|
|
44
|
+
/**
|
|
45
|
+
* Aeroelastic joints in this rig.
|
|
46
|
+
* @type {FoliageWindJoint[]}
|
|
47
|
+
*/
|
|
48
|
+
joints: FoliageWindJoint[];
|
|
49
|
+
/**
|
|
50
|
+
* @param {FoliageWindRig} other
|
|
51
|
+
* @returns {this}
|
|
52
|
+
*/
|
|
53
|
+
copy(other: FoliageWindRig): this;
|
|
54
|
+
/**
|
|
55
|
+
* @returns {FoliageWindRig}
|
|
56
|
+
*/
|
|
57
|
+
clone(): FoliageWindRig;
|
|
58
|
+
/**
|
|
59
|
+
* @readonly
|
|
60
|
+
* @type {boolean}
|
|
61
|
+
*/
|
|
62
|
+
readonly isFoliageWindRig: boolean;
|
|
63
|
+
}
|
|
64
|
+
import { FoliageWindJoint } from "./FoliageWindJoint.js";
|
|
65
|
+
//# sourceMappingURL=FoliageWindRig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FoliageWindRig.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/animation/foliage/FoliageWindRig.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH;IA0BI;;;;;;;OAOG;IACH;QAN4B,IAAI,GAArB,MAAM;QACW,IAAI,GAArB,MAAM;QACW,MAAM,GAAvB,MAAM;QACuB,MAAM,GAAnC,gBAAgB,EAAE;QAChB,cAAc,CAY1B;IA3CD;;;OAGG;IACH,MAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,MAFU,MAAM,CAEP;IAET;;;OAGG;IACH,QAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,QAFU,gBAAgB,EAAE,CAEhB;IAsBZ;;;OAGG;IACH,YAHW,cAAc,GACZ,IAAI,CAShB;IAED;;OAEG;IACH,SAFa,cAAc,CAM1B;IAGL;;;OAGG;IACH,2BAFU,OAAO,CAEwB;CANxC;iCAjFgC,uBAAuB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import { FoliageWindJoint } from "./FoliageWindJoint.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Aeroelastic foliage bone rig descriptor for GPU fluid-driven skeletal wind animation.
|
|
6
|
+
*
|
|
7
|
+
* Unlike a baked keyframe {@link ShadeAnimationClip}, a `FoliageWindRig` defines the physical
|
|
8
|
+
* and botanical parameters of each skeletal branch joint (`branch_axis`, `compliance`,
|
|
9
|
+
* `natural_frequency`, `damping_ratio`, `max_angle`, `turbulence`, `phase_offset`).
|
|
10
|
+
*
|
|
11
|
+
* At runtime, `GPUAnimationManager` evaluates `shader_foliage_wind_apply` on the GPU, sampling
|
|
12
|
+
* the scene's 3D fluid wind field (`GPUSceneWind` / `wind_field_sample(pos_ws)`) at each bone's
|
|
13
|
+
* world position, stepping a second-order damped spring-damper oscillator with Strouhal vortex
|
|
14
|
+
* shedding, and contributing the resulting bone rotations into `pose_accumulator`.
|
|
15
|
+
*/
|
|
16
|
+
export class FoliageWindRig {
|
|
17
|
+
/**
|
|
18
|
+
* Optional rig name.
|
|
19
|
+
* @type {string}
|
|
20
|
+
*/
|
|
21
|
+
name = "";
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Root node index (in a `SceneBundle` / `Prefab`, typically `0`) or root ECS entity ID (when bound).
|
|
25
|
+
* Used by the GPU solver to transform world-space wind vectors into the tree's model frame.
|
|
26
|
+
* @type {number}
|
|
27
|
+
*/
|
|
28
|
+
root = 0;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Overall rig contribution weight (`1.0` = full aeroelastic response).
|
|
32
|
+
* @type {number}
|
|
33
|
+
*/
|
|
34
|
+
weight = 1.0;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Aeroelastic joints in this rig.
|
|
38
|
+
* @type {FoliageWindJoint[]}
|
|
39
|
+
*/
|
|
40
|
+
joints = [];
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @param {Object} options
|
|
44
|
+
* @param {string} [options.name=""]
|
|
45
|
+
* @param {number} [options.root=0]
|
|
46
|
+
* @param {number} [options.weight=1.0]
|
|
47
|
+
* @param {FoliageWindJoint[]} [options.joints=[]]
|
|
48
|
+
* @returns {FoliageWindRig}
|
|
49
|
+
*/
|
|
50
|
+
static from({ name = "", root = 0, weight = 1.0, joints = [] } = {}) {
|
|
51
|
+
assert.isNonNegativeInteger(root, 'root');
|
|
52
|
+
assert.isArray(joints, 'joints');
|
|
53
|
+
|
|
54
|
+
const r = new FoliageWindRig();
|
|
55
|
+
r.name = name;
|
|
56
|
+
r.root = root;
|
|
57
|
+
r.weight = weight;
|
|
58
|
+
r.joints = joints.map((j) => (j && j.isFoliageWindJoint ? j.clone() : FoliageWindJoint.from(j)));
|
|
59
|
+
return r;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @param {FoliageWindRig} other
|
|
64
|
+
* @returns {this}
|
|
65
|
+
*/
|
|
66
|
+
copy(other) {
|
|
67
|
+
assert.defined(other, 'other');
|
|
68
|
+
this.name = other.name;
|
|
69
|
+
this.root = other.root;
|
|
70
|
+
this.weight = other.weight;
|
|
71
|
+
this.joints = other.joints.map((j) => j.clone());
|
|
72
|
+
return this;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @returns {FoliageWindRig}
|
|
77
|
+
*/
|
|
78
|
+
clone() {
|
|
79
|
+
const r = new FoliageWindRig();
|
|
80
|
+
r.copy(this);
|
|
81
|
+
return r;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @readonly
|
|
87
|
+
* @type {boolean}
|
|
88
|
+
*/
|
|
89
|
+
FoliageWindRig.prototype.isFoliageWindRig = true;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aeroelastic foliage bone step and local pose composition.
|
|
3
|
+
*
|
|
4
|
+
* - `foliage_wind_to_model(wind_ws, root_global)`: projects a world-space fluid velocity (m/s)
|
|
5
|
+
* onto the unit local axes of the tree root's world matrix (`mat4_extract_scale` + `v3_safe_rcp`),
|
|
6
|
+
* preserving metric wind speed regardless of node scale.
|
|
7
|
+
* - `foliage_wind_step(joint, wind_model, dt)`: evaluates cross-flow aerodynamic drag torque and
|
|
8
|
+
* Strouhal vortex-shedding oscillation around the bone's rest `branch_axis` (using
|
|
9
|
+
* `build_orthonormal_matrix_n` when flow is axial), soft-saturates the target deflection to
|
|
10
|
+
* `joint.max_angle`, and advances the bone's 2nd-order damped spring-damper state with an
|
|
11
|
+
* unconditionally stable implicit Euler step.
|
|
12
|
+
* - `foliage_wind_local_rotation(rest_rotation, angular_displacement)`: composes the bone's
|
|
13
|
+
* rest quaternion with the axis-angle deflection (`quat_from_axis_angle` + `quat_multiply`).
|
|
14
|
+
*
|
|
15
|
+
* @type {CodeChunk}
|
|
16
|
+
*/
|
|
17
|
+
export const chunk_foliage_wind_step: CodeChunk;
|
|
18
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
19
|
+
//# sourceMappingURL=chunk_foliage_wind_step.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_foliage_wind_step.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/animation/foliage/chunk_foliage_wind_step.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;;;GAeG;AACH,sCAFU,SAAS,CAmHjB;0BApIwB,oCAAoC"}
|