@woosh/meep-engine 3.51.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/playground/tonemap_sdr/README.md +5 -3
- package/src/shade/renderer/Renderer.d.ts +1 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +88 -31
- package/src/shade/renderer/ShadeToneMappingMode.d.ts +3 -2
- package/src/shade/renderer/ShadeToneMappingMode.js +15 -4
- 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/deferred/tonemap/TonemapAces2Tables.d.ts +38 -0
- package/src/shade/renderer/deferred/tonemap/TonemapAces2Tables.d.ts.map +1 -0
- package/src/shade/renderer/deferred/tonemap/TonemapAces2Tables.js +97 -0
- package/src/shade/renderer/deferred/{TonemapDisplaySettings.d.ts → tonemap/TonemapDisplaySettings.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/TonemapDisplaySettings.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{TonemapDisplaySettings.js → tonemap/TonemapDisplaySettings.js} +5 -5
- package/src/shade/renderer/deferred/{shader_tonemap_HDR.d.ts → tonemap/shader_tonemap_HDR.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_HDR.js → tonemap/shader_tonemap_HDR.js} +9 -9
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.d.ts +17 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.d.ts.map +1 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.js +101 -0
- package/src/shade/renderer/deferred/{shader_tonemap_HDR_none.d.ts → tonemap/shader_tonemap_HDR_none.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_none.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_HDR_none.js → tonemap/shader_tonemap_HDR_none.js} +6 -6
- package/src/shade/renderer/deferred/{shader_tonemap_HDR_pbr_neutral.d.ts → tonemap/shader_tonemap_HDR_pbr_neutral.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_pbr_neutral.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_HDR_pbr_neutral.js → tonemap/shader_tonemap_HDR_pbr_neutral.js} +8 -8
- package/src/shade/renderer/deferred/{shader_tonemap_LDR.d.ts → tonemap/shader_tonemap_LDR.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_LDR.js → tonemap/shader_tonemap_LDR.js} +10 -10
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.d.ts +10 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.d.ts.map +1 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.js +77 -0
- package/src/shade/renderer/deferred/{shader_tonemap_LDR_none.d.ts → tonemap/shader_tonemap_LDR_none.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_none.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_LDR_none.js → tonemap/shader_tonemap_LDR_none.js} +7 -7
- package/src/shade/renderer/deferred/{shader_tonemap_LDR_pbr_neutral.d.ts → tonemap/shader_tonemap_LDR_pbr_neutral.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_pbr_neutral.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_LDR_pbr_neutral.js → tonemap/shader_tonemap_LDR_pbr_neutral.js} +8 -8
- 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 +10 -3
- 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 +8 -1
- 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/forcing/GPUFluidForcing.d.ts +6 -6
- 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 +8 -1
- 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/fluid/query/GPUFluidQueries.d.ts +1 -1
- 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/loader/gltf/tiny-gltf.d.ts +1 -1
- 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/nss/NSS.d.ts +1 -1
- 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/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +160 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +5 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +15 -5
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.d.ts +41 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.js +692 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.js +446 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.js +68 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.d.ts +32 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.js +163 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts +10 -3
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js +12 -4
- 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
- package/src/shade/renderer/deferred/TonemapDisplaySettings.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR_none.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_LDR.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_LDR_none.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.d.ts.map +0 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evaluates the normalized radial crown envelope profile $S_{\text{env}}(h_{\text{norm}}) \in [0.05, 1.0]$
|
|
3
|
+
* at normalized crown height $h_{\text{norm}} \in [0, 1]$ (0 = base of crown, 1 = apex of crown).
|
|
4
|
+
*
|
|
5
|
+
* Implements Weber & Penn (1995) / SpeedTree botanical crown envelope shapes.
|
|
6
|
+
*
|
|
7
|
+
* @param {CrownEnvelopeType|number} envelope_type
|
|
8
|
+
* @param {number} h_norm normalized height in [0, 1]
|
|
9
|
+
* @param {number} [prune_width_peak=0.6] normalized height of maximum crown width for asymmetric envelopes
|
|
10
|
+
* @param {number} [power_low=1.5] lower envelope exponent
|
|
11
|
+
* @param {number} [power_high=1.5] upper envelope exponent
|
|
12
|
+
* @returns {number} radial envelope factor in [0.05, 1.0]
|
|
13
|
+
*/
|
|
14
|
+
export function crown_envelope_evaluate(envelope_type: CrownEnvelopeType | number, h_norm: number, prune_width_peak?: number, power_low?: number, power_high?: number): number;
|
|
15
|
+
/**
|
|
16
|
+
* Evaluates a signed distance approximation to the 3D crown envelope around the `+Y` trunk axis.
|
|
17
|
+
* Negative inside the crown envelope, positive outside.
|
|
18
|
+
*
|
|
19
|
+
* @param {number} px
|
|
20
|
+
* @param {number} py
|
|
21
|
+
* @param {number} pz
|
|
22
|
+
* @param {import("../config/CrownConfig.js").CrownConfig} crown_config
|
|
23
|
+
* @returns {number}
|
|
24
|
+
*/
|
|
25
|
+
export function crown_envelope_sdf(px: number, py: number, pz: number, crown_config: import("../config/CrownConfig.js").CrownConfig): number;
|
|
26
|
+
import { CrownEnvelopeType } from "../config/CrownEnvelopeType.js";
|
|
27
|
+
//# sourceMappingURL=crown_envelope_evaluate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crown_envelope_evaluate.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/crown_envelope_evaluate.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AACH,uDAPW,iBAAiB,GAAC,MAAM,UACxB,MAAM,qBACN,MAAM,cACN,MAAM,eACN,MAAM,GACJ,MAAM,CAyElB;AAED;;;;;;;;;GASG;AACH,uCANW,MAAM,MACN,MAAM,MACN,MAAM,gBACN,OAAO,0BAA0B,EAAE,WAAW,GAC5C,MAAM,CAuBlB;kCAvHiC,gCAAgC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { clamp } from "../../../core/math/clamp.js";
|
|
2
|
+
import { CrownEnvelopeType } from "../config/CrownEnvelopeType.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Evaluates the normalized radial crown envelope profile $S_{\text{env}}(h_{\text{norm}}) \in [0.05, 1.0]$
|
|
6
|
+
* at normalized crown height $h_{\text{norm}} \in [0, 1]$ (0 = base of crown, 1 = apex of crown).
|
|
7
|
+
*
|
|
8
|
+
* Implements Weber & Penn (1995) / SpeedTree botanical crown envelope shapes.
|
|
9
|
+
*
|
|
10
|
+
* @param {CrownEnvelopeType|number} envelope_type
|
|
11
|
+
* @param {number} h_norm normalized height in [0, 1]
|
|
12
|
+
* @param {number} [prune_width_peak=0.6] normalized height of maximum crown width for asymmetric envelopes
|
|
13
|
+
* @param {number} [power_low=1.5] lower envelope exponent
|
|
14
|
+
* @param {number} [power_high=1.5] upper envelope exponent
|
|
15
|
+
* @returns {number} radial envelope factor in [0.05, 1.0]
|
|
16
|
+
*/
|
|
17
|
+
export function crown_envelope_evaluate(
|
|
18
|
+
envelope_type,
|
|
19
|
+
h_norm,
|
|
20
|
+
prune_width_peak = 0.6,
|
|
21
|
+
power_low = 1.5,
|
|
22
|
+
power_high = 1.5
|
|
23
|
+
) {
|
|
24
|
+
const h = clamp(h_norm, 0.0, 1.0);
|
|
25
|
+
let val = 1.0;
|
|
26
|
+
|
|
27
|
+
switch (envelope_type) {
|
|
28
|
+
case CrownEnvelopeType.Conical:
|
|
29
|
+
val = 0.2 + 0.8 * (1.0 - h);
|
|
30
|
+
break;
|
|
31
|
+
|
|
32
|
+
case CrownEnvelopeType.Spherical:
|
|
33
|
+
val = 0.2 + 0.8 * Math.sin(Math.PI * h);
|
|
34
|
+
break;
|
|
35
|
+
|
|
36
|
+
case CrownEnvelopeType.Hemispherical:
|
|
37
|
+
val = 0.2 + 0.8 * Math.sin(0.5 * Math.PI * (1.0 - h));
|
|
38
|
+
break;
|
|
39
|
+
|
|
40
|
+
case CrownEnvelopeType.Cylindrical:
|
|
41
|
+
val = 1.0;
|
|
42
|
+
break;
|
|
43
|
+
|
|
44
|
+
case CrownEnvelopeType.TaperedCylindrical:
|
|
45
|
+
val = 0.5 + 0.5 * (1.0 - h);
|
|
46
|
+
break;
|
|
47
|
+
|
|
48
|
+
case CrownEnvelopeType.Flame:
|
|
49
|
+
if (h <= 0.7) {
|
|
50
|
+
val = h / 0.7;
|
|
51
|
+
} else {
|
|
52
|
+
val = (1.0 - h) / 0.3;
|
|
53
|
+
}
|
|
54
|
+
val = 0.15 + 0.85 * val;
|
|
55
|
+
break;
|
|
56
|
+
|
|
57
|
+
case CrownEnvelopeType.InverseConical:
|
|
58
|
+
val = 0.2 + 0.8 * h;
|
|
59
|
+
break;
|
|
60
|
+
|
|
61
|
+
case CrownEnvelopeType.TendFlame:
|
|
62
|
+
if (h <= 0.7) {
|
|
63
|
+
val = 0.5 + 0.5 * (h / 0.7);
|
|
64
|
+
} else {
|
|
65
|
+
val = 0.5 + 0.5 * ((1.0 - h) / 0.3);
|
|
66
|
+
}
|
|
67
|
+
break;
|
|
68
|
+
|
|
69
|
+
case CrownEnvelopeType.Weeping: {
|
|
70
|
+
const peak = clamp(prune_width_peak, 0.1, 0.9);
|
|
71
|
+
if (h < peak) {
|
|
72
|
+
const u = (peak - h) / peak;
|
|
73
|
+
val = 1.0 - Math.pow(u, power_low);
|
|
74
|
+
} else {
|
|
75
|
+
const u = (h - peak) / (1.0 - peak);
|
|
76
|
+
val = 1.0 - Math.pow(u, power_high);
|
|
77
|
+
}
|
|
78
|
+
val = 0.18 + 0.82 * Math.max(0.0, val);
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
default:
|
|
83
|
+
val = 0.2 + 0.8 * Math.sin(Math.PI * h);
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return clamp(val, 0.05, 1.0);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Evaluates a signed distance approximation to the 3D crown envelope around the `+Y` trunk axis.
|
|
92
|
+
* Negative inside the crown envelope, positive outside.
|
|
93
|
+
*
|
|
94
|
+
* @param {number} px
|
|
95
|
+
* @param {number} py
|
|
96
|
+
* @param {number} pz
|
|
97
|
+
* @param {import("../config/CrownConfig.js").CrownConfig} crown_config
|
|
98
|
+
* @returns {number}
|
|
99
|
+
*/
|
|
100
|
+
export function crown_envelope_sdf(px, py, pz, crown_config) {
|
|
101
|
+
const base_y = crown_config.base_height;
|
|
102
|
+
const height = Math.max(0.1, crown_config.height);
|
|
103
|
+
const max_r = Math.max(0.1, crown_config.radius);
|
|
104
|
+
|
|
105
|
+
const h_norm = (py - base_y) / height;
|
|
106
|
+
const r_horiz = Math.sqrt(px * px + pz * pz);
|
|
107
|
+
const r_env = max_r * crown_envelope_evaluate(crown_config.envelope_type, clamp(h_norm, 0.0, 1.0));
|
|
108
|
+
|
|
109
|
+
const d_radial = r_horiz - r_env;
|
|
110
|
+
let d_vert = 0.0;
|
|
111
|
+
if (py < base_y) {
|
|
112
|
+
d_vert = base_y - py;
|
|
113
|
+
} else if (py > base_y + height) {
|
|
114
|
+
d_vert = py - (base_y + height);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (d_vert > 0.0 && d_radial > 0.0) {
|
|
118
|
+
return Math.sqrt(d_radial * d_radial + d_vert * d_vert);
|
|
119
|
+
}
|
|
120
|
+
return Math.max(d_radial, d_vert > 0.0 ? d_vert : (Math.abs(h_norm - 0.5) - 0.5) * height);
|
|
121
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Computes a fourth-order accurate Rotation-Minimizing Frame (RMF) along a 3D spine step
|
|
3
|
+
* using the Double Reflection method (Wang, Jüttler, Zheng, & Liu, ACM TOG 2008).
|
|
4
|
+
*
|
|
5
|
+
* Writes the orthonormal cross-section basis `[Rx1, Ry1, Rz1, Sx1, Sy1, Sz1]` at `(x1, y1, z1)`
|
|
6
|
+
* into `out` starting at `out_offset`, where `S1 = T1 x R1`.
|
|
7
|
+
*
|
|
8
|
+
* Includes full numerical guards for:
|
|
9
|
+
* - Zero displacement (`||x1 - x0||^2 <= 1e-12`): delegates to `tube_frame_transport`.
|
|
10
|
+
* - Anti-parallel reflected tangent (`||T1 - T0_L||^2 <= 1e-12`): skips second reflection.
|
|
11
|
+
* - Gram-Schmidt re-orthonormalization against `T1` so `R1` is strictly unit and perpendicular to `T1`.
|
|
12
|
+
*
|
|
13
|
+
* @param {number[]|Float32Array|Float64Array} out
|
|
14
|
+
* @param {number} out_offset
|
|
15
|
+
* @param {number} x0 previous position X
|
|
16
|
+
* @param {number} y0 previous position Y
|
|
17
|
+
* @param {number} z0 previous position Z
|
|
18
|
+
* @param {number} tx0 previous unit tangent X
|
|
19
|
+
* @param {number} ty0 previous unit tangent Y
|
|
20
|
+
* @param {number} tz0 previous unit tangent Z
|
|
21
|
+
* @param {number} rx0 previous unit radial reference X
|
|
22
|
+
* @param {number} ry0 previous unit radial reference Y
|
|
23
|
+
* @param {number} rz0 previous unit radial reference Z
|
|
24
|
+
* @param {number} x1 current position X
|
|
25
|
+
* @param {number} y1 current position Y
|
|
26
|
+
* @param {number} z1 current position Z
|
|
27
|
+
* @param {number} tx1 current unit tangent X
|
|
28
|
+
* @param {number} ty1 current unit tangent Y
|
|
29
|
+
* @param {number} tz1 current unit tangent Z
|
|
30
|
+
*/
|
|
31
|
+
export function spine_frame_double_reflection(out: number[] | Float32Array | Float64Array, out_offset: number, x0: number, y0: number, z0: number, tx0: number, ty0: number, tz0: number, rx0: number, ry0: number, rz0: number, x1: number, y1: number, z1: number, tx1: number, ty1: number, tz1: number): void;
|
|
32
|
+
//# sourceMappingURL=spine_frame_double_reflection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spine_frame_double_reflection.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/spine_frame_double_reflection.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,mDAlBW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,cAClC,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,QAsDhB"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { tube_frame_transport } from "../../../engine/graphics/trail/tube/tube_frame.js";
|
|
2
|
+
|
|
3
|
+
const DEGENERATE_EPSILON = 1e-12;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Computes a fourth-order accurate Rotation-Minimizing Frame (RMF) along a 3D spine step
|
|
7
|
+
* using the Double Reflection method (Wang, Jüttler, Zheng, & Liu, ACM TOG 2008).
|
|
8
|
+
*
|
|
9
|
+
* Writes the orthonormal cross-section basis `[Rx1, Ry1, Rz1, Sx1, Sy1, Sz1]` at `(x1, y1, z1)`
|
|
10
|
+
* into `out` starting at `out_offset`, where `S1 = T1 x R1`.
|
|
11
|
+
*
|
|
12
|
+
* Includes full numerical guards for:
|
|
13
|
+
* - Zero displacement (`||x1 - x0||^2 <= 1e-12`): delegates to `tube_frame_transport`.
|
|
14
|
+
* - Anti-parallel reflected tangent (`||T1 - T0_L||^2 <= 1e-12`): skips second reflection.
|
|
15
|
+
* - Gram-Schmidt re-orthonormalization against `T1` so `R1` is strictly unit and perpendicular to `T1`.
|
|
16
|
+
*
|
|
17
|
+
* @param {number[]|Float32Array|Float64Array} out
|
|
18
|
+
* @param {number} out_offset
|
|
19
|
+
* @param {number} x0 previous position X
|
|
20
|
+
* @param {number} y0 previous position Y
|
|
21
|
+
* @param {number} z0 previous position Z
|
|
22
|
+
* @param {number} tx0 previous unit tangent X
|
|
23
|
+
* @param {number} ty0 previous unit tangent Y
|
|
24
|
+
* @param {number} tz0 previous unit tangent Z
|
|
25
|
+
* @param {number} rx0 previous unit radial reference X
|
|
26
|
+
* @param {number} ry0 previous unit radial reference Y
|
|
27
|
+
* @param {number} rz0 previous unit radial reference Z
|
|
28
|
+
* @param {number} x1 current position X
|
|
29
|
+
* @param {number} y1 current position Y
|
|
30
|
+
* @param {number} z1 current position Z
|
|
31
|
+
* @param {number} tx1 current unit tangent X
|
|
32
|
+
* @param {number} ty1 current unit tangent Y
|
|
33
|
+
* @param {number} tz1 current unit tangent Z
|
|
34
|
+
*/
|
|
35
|
+
export function spine_frame_double_reflection(
|
|
36
|
+
out,
|
|
37
|
+
out_offset,
|
|
38
|
+
x0, y0, z0,
|
|
39
|
+
tx0, ty0, tz0,
|
|
40
|
+
rx0, ry0, rz0,
|
|
41
|
+
x1, y1, z1,
|
|
42
|
+
tx1, ty1, tz1
|
|
43
|
+
) {
|
|
44
|
+
const v1x = x1 - x0;
|
|
45
|
+
const v1y = y1 - y0;
|
|
46
|
+
const v1z = z1 - z0;
|
|
47
|
+
const c1 = v1x * v1x + v1y * v1y + v1z * v1z;
|
|
48
|
+
|
|
49
|
+
if (c1 <= DEGENERATE_EPSILON) {
|
|
50
|
+
tube_frame_transport(out, out_offset, tx1, ty1, tz1, rx0, ry0, rz0);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const two_inv_c1 = 2.0 / c1;
|
|
55
|
+
const dot_v1_r0 = v1x * rx0 + v1y * ry0 + v1z * rz0;
|
|
56
|
+
const dot_v1_t0 = v1x * tx0 + v1y * ty0 + v1z * tz0;
|
|
57
|
+
|
|
58
|
+
// First Householder reflection across hyperplane bisecting x0 and x1
|
|
59
|
+
const rLx = rx0 - two_inv_c1 * dot_v1_r0 * v1x;
|
|
60
|
+
const rLy = ry0 - two_inv_c1 * dot_v1_r0 * v1y;
|
|
61
|
+
const rLz = rz0 - two_inv_c1 * dot_v1_r0 * v1z;
|
|
62
|
+
|
|
63
|
+
const tLx = tx0 - two_inv_c1 * dot_v1_t0 * v1x;
|
|
64
|
+
const tLy = ty0 - two_inv_c1 * dot_v1_t0 * v1y;
|
|
65
|
+
const tLz = tz0 - two_inv_c1 * dot_v1_t0 * v1z;
|
|
66
|
+
|
|
67
|
+
// Second Householder reflection aligning tL with t1
|
|
68
|
+
const v2x = tx1 - tLx;
|
|
69
|
+
const v2y = ty1 - tLy;
|
|
70
|
+
const v2z = tz1 - tLz;
|
|
71
|
+
const c2 = v2x * v2x + v2y * v2y + v2z * v2z;
|
|
72
|
+
|
|
73
|
+
let rx1 = rLx;
|
|
74
|
+
let ry1 = rLy;
|
|
75
|
+
let rz1 = rLz;
|
|
76
|
+
|
|
77
|
+
if (c2 > DEGENERATE_EPSILON) {
|
|
78
|
+
const two_inv_c2 = 2.0 / c2;
|
|
79
|
+
const dot_v2_rL = v2x * rLx + v2y * rLy + v2z * rLz;
|
|
80
|
+
rx1 = rLx - two_inv_c2 * dot_v2_rL * v2x;
|
|
81
|
+
ry1 = rLy - two_inv_c2 * dot_v2_rL * v2y;
|
|
82
|
+
rz1 = rLz - two_inv_c2 * dot_v2_rL * v2z;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Gram-Schmidt projection + normalization via tube_frame_transport to prevent floating-point drift
|
|
86
|
+
tube_frame_transport(out, out_offset, tx1, ty1, tz1, rx1, ry1, rz1);
|
|
87
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Selects up to `max_joints` structural skeleton nodes in strict topological pre-order
|
|
3
|
+
* (`joint_parents[j] < j`) from `skeleton.graph` for GPU skeletal wind animation (`Skin`),
|
|
4
|
+
* and writes `[primary_joint_index, parent_joint_index]` into `skeleton.attr_node_joint` for every node.
|
|
5
|
+
*
|
|
6
|
+
* @param {import("./TreeSkeleton.js").TreeSkeleton} skeleton
|
|
7
|
+
* @param {number} [max_joints=32]
|
|
8
|
+
* @returns {{
|
|
9
|
+
* joint_count: number,
|
|
10
|
+
* joint_vertex_ids: Int32Array,
|
|
11
|
+
* joint_parents: Int32Array,
|
|
12
|
+
* joint_positions: Float32Array,
|
|
13
|
+
* joint_tangents: Float32Array,
|
|
14
|
+
* joint_levels: Uint8Array,
|
|
15
|
+
* joint_phases: Float32Array,
|
|
16
|
+
* joint_t_norms: Float32Array,
|
|
17
|
+
* joint_radii: Float32Array,
|
|
18
|
+
* joint_lengths: Float32Array
|
|
19
|
+
* }}
|
|
20
|
+
*/
|
|
21
|
+
export function tree_skeleton_assign_skin_joints(skeleton: import("./TreeSkeleton.js").TreeSkeleton, max_joints?: number): {
|
|
22
|
+
joint_count: number;
|
|
23
|
+
joint_vertex_ids: Int32Array;
|
|
24
|
+
joint_parents: Int32Array;
|
|
25
|
+
joint_positions: Float32Array;
|
|
26
|
+
joint_tangents: Float32Array;
|
|
27
|
+
joint_levels: Uint8Array;
|
|
28
|
+
joint_phases: Float32Array;
|
|
29
|
+
joint_t_norms: Float32Array;
|
|
30
|
+
joint_radii: Float32Array;
|
|
31
|
+
joint_lengths: Float32Array;
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=tree_skeleton_assign_skin_joints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree_skeleton_assign_skin_joints.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,2DAfW,OAAO,mBAAmB,EAAE,YAAY,eACxC,MAAM,GACJ;IACZ,WAAe,EAAE,MAAM,CAAC;IACxB,gBAAoB,EAAE,UAAU,CAAC;IACjC,aAAiB,EAAE,UAAU,CAAC;IAC9B,eAAmB,EAAE,YAAY,CAAC;IAClC,cAAkB,EAAE,YAAY,CAAC;IACjC,YAAgB,EAAE,UAAU,CAAC;IAC7B,YAAgB,EAAE,YAAY,CAAC;IAC/B,aAAiB,EAAE,YAAY,CAAC;IAChC,WAAe,EAAE,YAAY,CAAC;IAC9B,aAAiB,EAAE,YAAY,CAAA;CAC5B,CAsLH"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
const SCRATCH_POS = new Float32Array(3);
|
|
2
|
+
const SCRATCH_TAN = new Float32Array(3);
|
|
3
|
+
const SCRATCH_PARAM = new Float32Array(3);
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Selects up to `max_joints` structural skeleton nodes in strict topological pre-order
|
|
7
|
+
* (`joint_parents[j] < j`) from `skeleton.graph` for GPU skeletal wind animation (`Skin`),
|
|
8
|
+
* and writes `[primary_joint_index, parent_joint_index]` into `skeleton.attr_node_joint` for every node.
|
|
9
|
+
*
|
|
10
|
+
* @param {import("./TreeSkeleton.js").TreeSkeleton} skeleton
|
|
11
|
+
* @param {number} [max_joints=32]
|
|
12
|
+
* @returns {{
|
|
13
|
+
* joint_count: number,
|
|
14
|
+
* joint_vertex_ids: Int32Array,
|
|
15
|
+
* joint_parents: Int32Array,
|
|
16
|
+
* joint_positions: Float32Array,
|
|
17
|
+
* joint_tangents: Float32Array,
|
|
18
|
+
* joint_levels: Uint8Array,
|
|
19
|
+
* joint_phases: Float32Array,
|
|
20
|
+
* joint_t_norms: Float32Array,
|
|
21
|
+
* joint_radii: Float32Array,
|
|
22
|
+
* joint_lengths: Float32Array
|
|
23
|
+
* }}
|
|
24
|
+
*/
|
|
25
|
+
export function tree_skeleton_assign_skin_joints(skeleton, max_joints = 32) {
|
|
26
|
+
const vertex_count = skeleton.node_count;
|
|
27
|
+
const budget = Math.max(1, max_joints | 0);
|
|
28
|
+
|
|
29
|
+
if (vertex_count === 0) {
|
|
30
|
+
return {
|
|
31
|
+
joint_count: 1,
|
|
32
|
+
joint_vertex_ids: new Int32Array([0]),
|
|
33
|
+
joint_parents: new Int32Array([-1]),
|
|
34
|
+
joint_positions: new Float32Array([0, 0, 0]),
|
|
35
|
+
joint_tangents: new Float32Array([0, 1, 0]),
|
|
36
|
+
joint_levels: new Uint8Array([0]),
|
|
37
|
+
joint_phases: new Float32Array([0]),
|
|
38
|
+
joint_t_norms: new Float32Array([0]),
|
|
39
|
+
joint_radii: new Float32Array([0.1]),
|
|
40
|
+
joint_lengths: new Float32Array([1.0])
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Mark candidate nodes by branch-aware round-robin so the joint budget is distributed
|
|
45
|
+
// across the trunk (2-4 joints) AND all primary boughs around 360° of the crown,
|
|
46
|
+
// then iterate node IDs in ascending order to guarantee topological pre-order (parent < child).
|
|
47
|
+
const is_selected = new Uint8Array(vertex_count);
|
|
48
|
+
let selected_count = 0;
|
|
49
|
+
|
|
50
|
+
// Always include node 0 (trunk root) as joint 0
|
|
51
|
+
is_selected[0] = 1;
|
|
52
|
+
selected_count = 1;
|
|
53
|
+
|
|
54
|
+
const branch_count = skeleton.branch_count;
|
|
55
|
+
|
|
56
|
+
// 1. Trunk / level-0 branches: pick up to 3 evenly spaced milestones (t ~ 0.35, 0.68, 1.0)
|
|
57
|
+
const max_trunk_joints = Math.min(budget, Math.max(2, Math.min(5, Math.floor(budget * 0.2))));
|
|
58
|
+
const trunk_targets = [0.38, 0.72, 1.0];
|
|
59
|
+
for (let m = 0; m < trunk_targets.length && selected_count < max_trunk_joints; m++) {
|
|
60
|
+
const target_t = trunk_targets[m];
|
|
61
|
+
for (let b = 0; b < branch_count && selected_count < max_trunk_joints; b++) {
|
|
62
|
+
if (skeleton.branch_level[b] !== 0) continue;
|
|
63
|
+
const nodes = [];
|
|
64
|
+
const edges = [];
|
|
65
|
+
skeleton.collect_branch_chain(b, nodes, edges);
|
|
66
|
+
let best_v = -1;
|
|
67
|
+
let best_dist = Infinity;
|
|
68
|
+
for (let i = 1; i < nodes.length; i++) {
|
|
69
|
+
const v = nodes[i];
|
|
70
|
+
if (is_selected[v]) continue;
|
|
71
|
+
const d = Math.abs(skeleton.node_t_norm(v) - target_t);
|
|
72
|
+
if (d < best_dist) {
|
|
73
|
+
best_dist = d;
|
|
74
|
+
best_v = v;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (best_v >= 0 && best_dist <= 0.28) {
|
|
78
|
+
is_selected[best_v] = 1;
|
|
79
|
+
selected_count++;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// 2. Primary boughs (level === 1): first select root hinge nodes[0] so every bough pivots at its trunk collar,
|
|
85
|
+
// then select a mid-bough node (~0.55) on a second pass for multi-segment bough bending.
|
|
86
|
+
for (let pass = 0; pass < 2 && selected_count < budget; pass++) {
|
|
87
|
+
for (let b = 0; b < branch_count && selected_count < budget; b++) {
|
|
88
|
+
if (skeleton.branch_level[b] !== 1) continue;
|
|
89
|
+
const nodes = [];
|
|
90
|
+
const edges = [];
|
|
91
|
+
skeleton.collect_branch_chain(b, nodes, edges);
|
|
92
|
+
if (nodes.length === 0) continue;
|
|
93
|
+
|
|
94
|
+
if (pass === 0) {
|
|
95
|
+
const root_v = nodes[0];
|
|
96
|
+
if (!is_selected[root_v]) {
|
|
97
|
+
is_selected[root_v] = 1;
|
|
98
|
+
selected_count++;
|
|
99
|
+
}
|
|
100
|
+
} else if (nodes.length >= 3) {
|
|
101
|
+
const mid_idx = Math.max(1, Math.min(nodes.length - 1, Math.round((nodes.length - 1) * 0.55)));
|
|
102
|
+
const mid_v = nodes[mid_idx];
|
|
103
|
+
if (!is_selected[mid_v]) {
|
|
104
|
+
is_selected[mid_v] = 1;
|
|
105
|
+
selected_count++;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// 3. Secondary branches (level >= 2): select root hinge nodes[0] across remaining budget
|
|
112
|
+
for (let b = 0; b < branch_count && selected_count < budget; b++) {
|
|
113
|
+
if (skeleton.branch_level[b] < 2) continue;
|
|
114
|
+
const root_v = skeleton.branch_root_vertex[b];
|
|
115
|
+
if (root_v >= 0 && !is_selected[root_v]) {
|
|
116
|
+
is_selected[root_v] = 1;
|
|
117
|
+
selected_count++;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// 4. If budget still has room, fill any remaining nodes in topological order
|
|
122
|
+
for (let v = 1; v < vertex_count && selected_count < budget; v++) {
|
|
123
|
+
if (!is_selected[v]) {
|
|
124
|
+
is_selected[v] = 1;
|
|
125
|
+
selected_count++;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const joint_count = selected_count;
|
|
130
|
+
const joint_vertex_ids = new Int32Array(joint_count);
|
|
131
|
+
const joint_parents = new Int32Array(joint_count);
|
|
132
|
+
const joint_positions = new Float32Array(joint_count * 3);
|
|
133
|
+
const joint_tangents = new Float32Array(joint_count * 3);
|
|
134
|
+
const joint_levels = new Uint8Array(joint_count);
|
|
135
|
+
const joint_phases = new Float32Array(joint_count);
|
|
136
|
+
const joint_t_norms = new Float32Array(joint_count);
|
|
137
|
+
const joint_radii = new Float32Array(joint_count);
|
|
138
|
+
const joint_lengths = new Float32Array(joint_count);
|
|
139
|
+
|
|
140
|
+
// Map each node to its active joint index (or closest selected ancestor joint index in `skeleton.graph`)
|
|
141
|
+
const vertex_active_joint = new Int32Array(vertex_count);
|
|
142
|
+
let j_cursor = 0;
|
|
143
|
+
|
|
144
|
+
for (let v = 0; v < vertex_count; v++) {
|
|
145
|
+
const parent_v = skeleton.node_parent_vertex(v);
|
|
146
|
+
const ancestor_joint = (parent_v >= 0 && parent_v < v) ? vertex_active_joint[parent_v] : 0;
|
|
147
|
+
|
|
148
|
+
if (is_selected[v]) {
|
|
149
|
+
const j = j_cursor++;
|
|
150
|
+
const pj = v === 0 ? -1 : ancestor_joint;
|
|
151
|
+
joint_vertex_ids[j] = v;
|
|
152
|
+
joint_parents[j] = pj;
|
|
153
|
+
|
|
154
|
+
skeleton.node_read_position(SCRATCH_POS, 0, v);
|
|
155
|
+
skeleton.node_read_tangent(SCRATCH_TAN, 0, v);
|
|
156
|
+
skeleton.node_read_spine_param(SCRATCH_PARAM, 0, v);
|
|
157
|
+
|
|
158
|
+
joint_positions[j * 3] = SCRATCH_POS[0];
|
|
159
|
+
joint_positions[j * 3 + 1] = SCRATCH_POS[1];
|
|
160
|
+
joint_positions[j * 3 + 2] = SCRATCH_POS[2];
|
|
161
|
+
|
|
162
|
+
joint_tangents[j * 3] = SCRATCH_TAN[0];
|
|
163
|
+
joint_tangents[j * 3 + 1] = SCRATCH_TAN[1];
|
|
164
|
+
joint_tangents[j * 3 + 2] = SCRATCH_TAN[2];
|
|
165
|
+
|
|
166
|
+
const b_v = skeleton.node_branch_id(v);
|
|
167
|
+
joint_levels[j] = skeleton.node_level(v);
|
|
168
|
+
joint_t_norms[j] = b_v > 0 ? Math.max(0.55, SCRATCH_PARAM[0]) : SCRATCH_PARAM[0];
|
|
169
|
+
joint_phases[j] = SCRATCH_PARAM[2];
|
|
170
|
+
joint_radii[j] = Math.max(0.005, skeleton.node_read_radius(v));
|
|
171
|
+
|
|
172
|
+
if (b_v > 0 && b_v < skeleton.branch_count) {
|
|
173
|
+
joint_lengths[j] = Math.max(0.2, skeleton.branch_length[b_v]);
|
|
174
|
+
} else if (pj >= 0) {
|
|
175
|
+
const dx = SCRATCH_POS[0] - joint_positions[pj * 3];
|
|
176
|
+
const dy = SCRATCH_POS[1] - joint_positions[pj * 3 + 1];
|
|
177
|
+
const dz = SCRATCH_POS[2] - joint_positions[pj * 3 + 2];
|
|
178
|
+
joint_lengths[j] = Math.max(0.2, Math.hypot(dx, dy, dz));
|
|
179
|
+
} else {
|
|
180
|
+
joint_lengths[j] = 1.0;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
vertex_active_joint[v] = j;
|
|
184
|
+
const p_joint = pj >= 0 ? pj : 0;
|
|
185
|
+
skeleton.node_write_joint(v, j, p_joint);
|
|
186
|
+
} else {
|
|
187
|
+
vertex_active_joint[v] = ancestor_joint;
|
|
188
|
+
const p_joint = joint_parents[ancestor_joint] >= 0 ? joint_parents[ancestor_joint] : 0;
|
|
189
|
+
skeleton.node_write_joint(v, ancestor_joint, p_joint);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return {
|
|
194
|
+
joint_count,
|
|
195
|
+
joint_vertex_ids,
|
|
196
|
+
joint_parents,
|
|
197
|
+
joint_positions,
|
|
198
|
+
joint_tangents,
|
|
199
|
+
joint_levels,
|
|
200
|
+
joint_phases,
|
|
201
|
+
joint_t_norms,
|
|
202
|
+
joint_radii,
|
|
203
|
+
joint_lengths
|
|
204
|
+
};
|
|
205
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Computes and blends botanical Pipe Model Theory (Shinozaki et al. 1964; Leonardo da Vinci / Murray's law)
|
|
3
|
+
* cross-sectional radii $R_p^\alpha = \sum R_i^\alpha$ bottom-up across `skeleton.graph`,
|
|
4
|
+
* blending with the parametric `radius_profile` curves according to `config.crown.pipe_model_weight`.
|
|
5
|
+
*
|
|
6
|
+
* Also guarantees monotonic non-increasing radii along each branch from base to tip and updates
|
|
7
|
+
* each node's {@link Transform64} scale and `skeleton.branch_base_radius`.
|
|
8
|
+
*
|
|
9
|
+
* @param {import("./TreeSkeleton.js").TreeSkeleton} skeleton
|
|
10
|
+
* @param {TreeSpeciesConfig|Object} [config]
|
|
11
|
+
*/
|
|
12
|
+
export function tree_skeleton_compute_pipe_radii(skeleton: import("./TreeSkeleton.js").TreeSkeleton, config?: TreeSpeciesConfig | any): void;
|
|
13
|
+
import { TreeSpeciesConfig } from "../config/TreeSpeciesConfig.js";
|
|
14
|
+
//# sourceMappingURL=tree_skeleton_compute_pipe_radii.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree_skeleton_compute_pipe_radii.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AACH,2DAHW,OAAO,mBAAmB,EAAE,YAAY,WACxC,iBAAiB,MAAO,QAqKlC;kCAhLiC,gCAAgC"}
|