@woosh/meep-engine 3.58.0 → 3.59.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/editor/particles/effect/ParticleEffectDocument.d.ts +162 -43
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
- package/editor/particles/effect/ParticleEffectDocument.js +450 -43
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts +12 -3
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
- package/editor/particles/effect/ParticleReferenceSimulation.js +78 -23
- package/editor/particles/effect/make_starter_particle_effect.js +17 -17
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts +3 -3
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleEmitterInspectorView.js +224 -67
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleGraphEditorView.js +44 -11
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts +2 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.js +46 -16
- package/editor/view/particles/effect/ParticlePreviewView.js +2 -2
- package/editor/view/particles/effect/particle-editor.css +77 -68
- package/package.json +1 -1
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +2 -2
- package/src/engine/ecs/EntityManager.d.ts +29 -5
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +37 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +4 -0
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +74 -17
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.js +156 -25
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts +13 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.js +59 -13
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts +3 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.js +9 -9
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.d.ts +15 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.d.ts.map +1 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.js +78 -0
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +2 -0
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3D.js +2 -0
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +1 -1
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +1 -1
- package/src/engine/graphics/trail/tube/TubeX.d.ts +5 -3
- package/src/engine/graphics/trail/tube/TubeX.d.ts.map +1 -1
- package/src/engine/graphics/trail/tube/TubeX.js +5 -3
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +3 -2
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +1 -1
- package/src/engine/graphics/trail/tube/tube_attributes_spec.js +9 -8
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +65 -4
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +1351 -904
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +1 -1
- package/src/engine/graphics3/trail/trail_tube_write_geometry.js +13 -13
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/generation/foliage/FOLIAGE_DESIGN.md +26 -5
- package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +35 -0
- package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +2 -1
- package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +552 -0
- package/src/generation/foliage/analysis/tree_crown_opacity.d.ts.map +1 -1
- package/src/generation/foliage/analysis/tree_crown_opacity.js +2 -1
- package/src/generation/foliage/analysis/tree_render_cost.d.ts +5 -3
- package/src/generation/foliage/analysis/tree_render_cost.d.ts.map +1 -1
- package/src/generation/foliage/analysis/tree_render_cost.js +8 -7
- package/src/generation/foliage/asset/TreeAsset.d.ts +17 -0
- package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -1
- package/src/generation/foliage/asset/TreeAsset.js +20 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.d.ts +69 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.d.ts.map +1 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.js +147 -0
- package/src/generation/foliage/asset/generate_tree.d.ts +10 -0
- package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -1
- package/src/generation/foliage/asset/generate_tree.js +57 -29
- package/src/generation/foliage/asset/place_tree.d.ts +2 -1
- package/src/generation/foliage/asset/place_tree.d.ts.map +1 -1
- package/src/generation/foliage/asset/place_tree.js +2 -1
- package/src/generation/foliage/asset/tree_lod_plan.d.ts +4 -2
- package/src/generation/foliage/asset/tree_lod_plan.d.ts.map +1 -1
- package/src/generation/foliage/asset/tree_lod_plan.js +12 -14
- package/src/generation/foliage/asset/tree_shoot_instances.d.ts +119 -0
- package/src/generation/foliage/asset/tree_shoot_instances.d.ts.map +1 -0
- package/src/generation/foliage/asset/tree_shoot_instances.js +410 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.d.ts +155 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.d.ts.map +1 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.js +251 -0
- package/src/generation/foliage/config/TreeGrowth.d.ts +10 -0
- package/src/generation/foliage/config/TreeGrowth.d.ts.map +1 -0
- package/src/generation/foliage/config/TreeGrowth.js +18 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts +6 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/TreeLODConfig.js +7 -0
- package/src/generation/foliage/index.d.ts +3 -0
- package/src/generation/foliage/index.js +3 -0
- package/src/generation/foliage/material/foliage_tile.d.ts +6 -6
- package/src/generation/foliage/material/foliage_tile.js +3 -3
- package/src/generation/foliage/material/tree_cluster_atlas.d.ts +44 -0
- package/src/generation/foliage/material/tree_cluster_atlas.d.ts.map +1 -0
- package/src/generation/foliage/material/tree_cluster_atlas.js +37 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.js +2 -2
- package/src/generation/foliage/mesh/foliage_scale_spread.d.ts +14 -0
- package/src/generation/foliage/mesh/foliage_scale_spread.d.ts.map +1 -0
- package/src/generation/foliage/mesh/foliage_scale_spread.js +15 -0
- package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts +8 -7
- package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_cluster_representatives.js +85 -40
- package/src/generation/foliage/mesh/tree_clusters.d.ts +26 -5
- package/src/generation/foliage/mesh/tree_clusters.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_clusters.js +52 -39
- package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_mesh_build_bark.js +32 -54
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts +6 -1
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -1
- package/src/generation/foliage/presets/make_tree_species_preset.js +157 -3
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +19 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/TreeSkeleton.js +41 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts +5 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.js +8 -1
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.d.ts +70 -0
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.js +171 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.d.ts +17 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.js +79 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.d.ts +12 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.js +56 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.d.ts +11 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.js +38 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +4 -11
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow.js +8 -2034
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.d.ts +22 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.js +2050 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts +10 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.js +27 -56
- package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/DepthStencilState.js +170 -144
- package/src/shade/descriptor/pipeline/render/MultisampleState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/MultisampleState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/MultisampleState.js +78 -65
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +176 -172
- package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/StencilFaceState.js +107 -88
- package/src/shade/playground/particle_ecs/README.md +9 -8
- package/src/shade/playground/particle_ecs/bonfire_editor.js +3 -3
- package/src/shade/playground/particle_ecs/bonfire_effects.d.ts +6 -6
- package/src/shade/playground/particle_ecs/bonfire_effects.js +6 -6
- package/src/shade/playground/particle_editor/README.md +14 -11
- package/src/shade/playground/particle_system/particle_prototype.js +18 -18
- package/src/shade/playground/particle_system/particle_scene.js +13 -13
- package/src/shade/playground/probe_clipmap/README.md +42 -0
- package/src/shade/playground/probe_clipmap/index.html +178 -0
- package/src/shade/playground/probe_clipmap/main.d.ts +8 -0
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -0
- package/src/shade/playground/probe_clipmap/main.js +360 -0
- package/src/shade/renderer/Renderer.d.ts +3 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +94 -38
- package/src/shade/renderer/extension/ViewTextures.d.ts +2 -1
- package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/ViewTextures.js +2 -1
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +34 -12
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +56 -15
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +2 -2
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +13 -26
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +25 -2
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +54 -32
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.js +37 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +2 -6
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts +131 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.js +467 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js +111 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts +42 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.js +404 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.js +23 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.js +65 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +14 -70
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +13 -773
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts +55 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.js +248 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +15 -174
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.js +8 -24
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.js +1 -25
- package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.js +5 -23
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +25 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +126 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +832 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +7 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +8 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +16 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +9 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/{mesh/chunk_mesh_brick_object.d.ts → chunk_brick_object.d.ts} +8 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.js +42 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts +45 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.js +93 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts +0 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.js +0 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +2 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +5 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.js +13 -22
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts +99 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.js +139 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts +65 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js +393 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts +17 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js +108 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts +31 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.js +113 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.js +85 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.js +273 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.js +151 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.js +133 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts +22 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.js +135 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +20 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +152 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +7 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +8 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +14 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +50 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts +19 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.js +40 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts +72 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +343 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +188 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +132 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +4 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +26 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +3 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +8 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts +12 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.js +101 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts +15 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js +175 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +210 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts +3 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +3 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +5 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +3 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts +5 -9
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +9 -110
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +27 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +110 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +13 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +40 -0
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +11 -6
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +15 -8
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +9 -2
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +25 -11
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/particles/DESIGN.md +151 -42
- package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +283 -0
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +10 -2
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +46 -8
- package/src/shade/renderer/particles/ParticleConstants.d.ts +23 -6
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +25 -6
- package/src/shade/renderer/particles/bounds/chunk_particle_bounds.js +5 -5
- package/src/shade/renderer/particles/bounds/shader_particle_bounds.js +187 -187
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts +20 -9
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js +36 -10
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +8 -7
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +25 -16
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts +51 -0
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.js +56 -0
- package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/particle_emitter_record.js +2 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +1 -1
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +22 -11
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +14 -11
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +4 -4
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +59 -24
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts +3 -3
- package/src/shade/renderer/particles/graph/ParticleValueType.js +287 -287
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts +13 -6
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/compile_particle_graph.js +46 -27
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts +8 -2
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.js +240 -234
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts +1 -1
- package/src/shade/renderer/particles/graph/make_particle_group.js +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts +3 -2
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.js +3 -2
- package/src/shade/renderer/particles/graph/particle_graph_distributions.js +170 -170
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts +25 -16
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_json.js +16 -2
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +29 -15
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_parameters.js +54 -22
- package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_presentation.js +18 -8
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +9 -2
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/validate_particle_graph.js +70 -32
- package/src/shade/renderer/particles/graph_particles.d.ts +9 -4
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +27 -4
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts +7 -6
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/InstructionStream.js +17 -16
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts +17 -0
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleAssembler.js +35 -0
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +26 -6
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleProgram.js +61 -9
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +55 -4
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.js +79 -10
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts +20 -6
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/particle_assembly.js +136 -25
- package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts +20 -0
- package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts.map +1 -0
- package/src/shade/renderer/particles/isa/particle_link_global_fields.js +46 -0
- package/src/shade/renderer/particles/isa/validate_particle_program.js +8 -8
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +62 -28
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
- package/src/shade/renderer/particles/layout/ParticleLayout.js +102 -62
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js +2 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.js +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +4 -3
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.js +2 -2
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts +3 -3
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +11 -11
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +4 -4
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +5 -4
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts +1 -1
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.js +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +4 -4
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +13 -11
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +7 -7
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +3 -2
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +5 -4
- package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.js +51 -51
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +5 -5
- package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_schedule.js +2 -2
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +5 -4
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +93 -22
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +336 -29
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +43 -3
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +43 -3
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +56 -26
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +89 -33
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts +85 -0
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.js +221 -0
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts +143 -18
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ProgramHeap.js +378 -28
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +19 -7
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/create_particle_effect.js +22 -9
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +8 -8
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts +3 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.js +4 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts +30 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.js +121 -0
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.js +3 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +12 -4
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.js +48 -11
- package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/chunk_particle_vm.js +36 -14
- package/src/shade/renderer/postprocess/PostProcess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/PostProcess.js +2 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +31 -19
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +44 -30
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +16 -2
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.js +4 -3
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts +7 -1
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.js +16 -0
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts +20 -2
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +53 -3
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts +10 -2
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.js +31 -3
- 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 +17 -11
- package/src/shade/renderer/postprocess/taa/TAA.d.ts +4 -2
- package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/TAA.js +6 -1
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.js +10 -5
- package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/shader_taa.js +15 -12
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +26 -17
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts +4 -3
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.js +6 -4
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts +12 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.js +57 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +4 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +4 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +8 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +28 -15
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.js +19 -3
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +4 -2
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts +3 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +27 -14
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +19 -3
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts +2 -8
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.js +25 -52
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.js +52 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.js +12 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.js +37 -0
- package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.js +26 -60
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.js +54 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.js +43 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.js +37 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts +27 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.js +61 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.js +41 -0
- package/src/shade/renderer/texture/util/texture_fill_rectangle.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/texture_fill_rectangle.js +282 -267
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +8 -4
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +36 -36
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +6 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +498 -484
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +15 -2
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +57 -3
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +197 -191
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +4 -4
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +2 -1
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +5 -1
- package/src/shade/renderer/water/chunk_water_gi.d.ts +13 -3
- package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_gi.js +47 -5
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
- package/src/shade/renderer/water/shader_water.d.ts +3 -2
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +9 -3
- package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts +0 -2
- package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts +0 -8
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_object.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_object.js +0 -42
- package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts +0 -31
- package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +0 -42
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +0 -54
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +0 -14
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +0 -30
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +0 -23
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +0 -1
|
@@ -41,6 +41,12 @@ const SCRATCH_PARENT_T = new Float32Array(3);
|
|
|
41
41
|
const SCRATCH_COLLAR_POS = new Float32Array(3);
|
|
42
42
|
const SCRATCH_COLLAR_NORM = new Float32Array(3);
|
|
43
43
|
const SCRATCH_RELIEF = new Float32Array(4);
|
|
44
|
+
/**
|
|
45
|
+
* Per node of the branch being meshed, the joint its span moves with alone, or -1 (`tree_mesh_build_bark`).
|
|
46
|
+
* @type {Int32Array}
|
|
47
|
+
*/
|
|
48
|
+
let SCRATCH_SPAN_JOINT = new Int32Array(64);
|
|
49
|
+
|
|
44
50
|
const SCRATCH_JOINTS4 = new Int32Array(4);
|
|
45
51
|
const SCRATCH_WEIGHTS4 = new Float64Array(4);
|
|
46
52
|
const SCRATCH_SHAPE = new Float64Array(4);
|
|
@@ -868,6 +874,25 @@ export function tree_mesh_build_bark(
|
|
|
868
874
|
base_w3 = SCRATCH_WEIGHTS4[3];
|
|
869
875
|
}
|
|
870
876
|
|
|
877
|
+
// The branch's joint spans, each run of its nodes bound to one joint, and how each is carried. A joint turns its
|
|
878
|
+
// whole span about its pivot, as the rig derived it (`tree_skeleton_assign_skin_joints`): a span that starts at
|
|
879
|
+
// its joint's pivot moves with that joint alone. The bark is then continuous across every pivot, which the joint
|
|
880
|
+
// turning it does not move, and a child's joint pivots where the bark it grows from carries it. Blending a span
|
|
881
|
+
// with the joints above it tears the bark at the pivot that ends it. A span of a joint pivoted further up (a child
|
|
882
|
+
// before its own first joint) is carried as the parent's bark carries the child's base.
|
|
883
|
+
// per node, the joint its span moves with alone, or -1 where the parent's bark carries it
|
|
884
|
+
if (SCRATCH_SPAN_JOINT.length < E + 1) SCRATCH_SPAN_JOINT = new Int32Array(2 * (E + 1));
|
|
885
|
+
const span_joint = SCRATCH_SPAN_JOINT;
|
|
886
|
+
for (let k = 0; k <= E;) {
|
|
887
|
+
const joint = skeleton.node_read_joint(nodes[k], 0);
|
|
888
|
+
let e = k;
|
|
889
|
+
while (e < E && skeleton.node_read_joint(nodes[e + 1], 0) === joint) e++;
|
|
890
|
+
// a run of a joint starts at that joint's pivot, if the joint is the branch's own
|
|
891
|
+
const own = !has_meshed_parent || skeleton.joint_vertex[joint] === nodes[k];
|
|
892
|
+
for (let n = k; n <= e; n++) span_joint[n] = own ? joint : -1;
|
|
893
|
+
k = e + 1;
|
|
894
|
+
}
|
|
895
|
+
|
|
871
896
|
let prev_ring_start = -1;
|
|
872
897
|
let prev_m = 0;
|
|
873
898
|
const current_branch_rings = [];
|
|
@@ -973,60 +998,13 @@ export function tree_mesh_build_bark(
|
|
|
973
998
|
const arc_s = lerp(SCRATCH_SPINE0[1], SCRATCH_SPINE1[1], local_u);
|
|
974
999
|
const phase_hash = skeleton.branch_phase_hash[b];
|
|
975
1000
|
|
|
976
|
-
// Skinning joint
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
const j_v0 = skeleton.node_read_joint(v0, 0);
|
|
984
|
-
if (i === 0 || j_v0 === ancestor_j) {
|
|
985
|
-
ring_j0 = base_j0;
|
|
986
|
-
ring_j1 = base_j1;
|
|
987
|
-
ring_j2 = base_j2;
|
|
988
|
-
ring_j3 = base_j3;
|
|
989
|
-
ring_w0 = base_w0;
|
|
990
|
-
ring_w1 = base_w1;
|
|
991
|
-
ring_w2 = base_w2;
|
|
992
|
-
ring_w3 = base_w3;
|
|
993
|
-
} else if (j_v0 === j_branch_root) {
|
|
994
|
-
const w_own = clamp(0.85 * t_norm, 0.0, 0.90);
|
|
995
|
-
const w_base = 1.0 - w_own;
|
|
996
|
-
ring_j0 = j_v0;
|
|
997
|
-
ring_j1 = base_j0;
|
|
998
|
-
ring_j2 = base_j1;
|
|
999
|
-
ring_j3 = 0;
|
|
1000
|
-
ring_w0 = w_own;
|
|
1001
|
-
ring_w1 = w_base * base_w0;
|
|
1002
|
-
ring_w2 = w_base * base_w1;
|
|
1003
|
-
ring_w3 = 0.0;
|
|
1004
|
-
const rw_sum = ring_w0 + ring_w1 + ring_w2;
|
|
1005
|
-
if (rw_sum > 1e-6) {
|
|
1006
|
-
ring_w0 /= rw_sum;
|
|
1007
|
-
ring_w1 /= rw_sum;
|
|
1008
|
-
ring_w2 /= rw_sum;
|
|
1009
|
-
}
|
|
1010
|
-
} else {
|
|
1011
|
-
const w_own = clamp(0.50 + 0.45 * t_norm, 0.0, 0.95);
|
|
1012
|
-
ring_j0 = j_v0;
|
|
1013
|
-
ring_j1 = j_branch_root;
|
|
1014
|
-
ring_j2 = 0;
|
|
1015
|
-
ring_j3 = 0;
|
|
1016
|
-
ring_w0 = w_own;
|
|
1017
|
-
ring_w1 = 1.0 - w_own;
|
|
1018
|
-
ring_w2 = 0.0;
|
|
1019
|
-
ring_w3 = 0.0;
|
|
1020
|
-
}
|
|
1021
|
-
} else {
|
|
1022
|
-
const j_primary = skeleton.node_read_joint(v0, 0);
|
|
1023
|
-
const j_parent = skeleton.node_read_joint(v0, 1);
|
|
1024
|
-
const w_primary = (v0 === 0 || j_primary === j_parent) ? 1.0 : clamp(0.25 + 0.75 * t_norm, 0.0, 1.0);
|
|
1025
|
-
ring_j0 = j_primary;
|
|
1026
|
-
ring_j1 = j_parent;
|
|
1027
|
-
ring_w0 = w_primary;
|
|
1028
|
-
ring_w1 = 1.0 - w_primary;
|
|
1029
|
-
}
|
|
1001
|
+
// Skinning: the joint whose span the ring is in, alone (`SCRATCH_SPAN_JOINT`); a child's first ring is seated in its parent's
|
|
1002
|
+
// bark and carried as that bark carries it
|
|
1003
|
+
const joint = i === 0 && has_meshed_parent ? -1 : span_joint[edge_idx];
|
|
1004
|
+
const ring_j0 = joint >= 0 ? joint : base_j0, ring_j1 = joint >= 0 ? 0 : base_j1;
|
|
1005
|
+
const ring_j2 = joint >= 0 ? 0 : base_j2, ring_j3 = joint >= 0 ? 0 : base_j3;
|
|
1006
|
+
const ring_w0 = joint >= 0 ? 1.0 : base_w0, ring_w1 = joint >= 0 ? 0.0 : base_w1;
|
|
1007
|
+
const ring_w2 = joint >= 0 ? 0.0 : base_w2, ring_w3 = joint >= 0 ? 0.0 : base_w3;
|
|
1030
1008
|
|
|
1031
1009
|
// Collar weld factor: i === 0 of every child branch is always seated into its meshed parent frustum
|
|
1032
1010
|
let weld_factor = 0.0;
|
|
@@ -3,11 +3,16 @@
|
|
|
3
3
|
* `TreePreset` archetypes (`Oak`, `Pine`, `Birch`, `Willow`, `Maple`, `Spruce`, `Palm`, `Shrub`, `Fern`),
|
|
4
4
|
* with optional deep parameter overrides.
|
|
5
5
|
*
|
|
6
|
+
* A species is the same for both front ends but where the botanical one grows its framework from shoots: the pine's,
|
|
7
|
+
* which grows from its seed, has its own framework for the generator graph.
|
|
8
|
+
*
|
|
6
9
|
* @param {TreePreset|string} [preset=TreePreset.Oak]
|
|
7
10
|
* @param {Object} [overrides]
|
|
11
|
+
* @param {TreeGrowth} [growth=TreeGrowth.Botanical] which front end the species is grown by
|
|
8
12
|
* @returns {TreeSpeciesConfig}
|
|
9
13
|
*/
|
|
10
|
-
export function make_tree_species_preset(preset?: TreePreset | string, overrides?: any): TreeSpeciesConfig;
|
|
14
|
+
export function make_tree_species_preset(preset?: TreePreset | string, overrides?: any, growth?: TreeGrowth): TreeSpeciesConfig;
|
|
11
15
|
import { TreePreset } from "../config/TreePreset.js";
|
|
16
|
+
import { TreeGrowth } from "../config/TreeGrowth.js";
|
|
12
17
|
import { TreeSpeciesConfig } from "../config/TreeSpeciesConfig.js";
|
|
13
18
|
//# sourceMappingURL=make_tree_species_preset.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make_tree_species_preset.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/presets/make_tree_species_preset.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"make_tree_species_preset.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/presets/make_tree_species_preset.js"],"names":[],"mappings":"AAoTA;;;;;;;;;;;;GAYG;AACH,kDALW,UAAU,GAAC,MAAM,4BAEjB,UAAU,GACR,iBAAiB,CA00C7B;2BAnoD0B,yBAAyB;2BADzB,yBAAyB;kCAElB,gCAAgC"}
|
|
@@ -3,6 +3,7 @@ import { CrownEnvelopeType } from "../config/CrownEnvelopeType.js";
|
|
|
3
3
|
import { FoliageBarkType } from "../config/FoliageBarkType.js";
|
|
4
4
|
import { FoliageCardType } from "../config/FoliageCardType.js";
|
|
5
5
|
import { PhyllotaxisMode } from "../config/PhyllotaxisMode.js";
|
|
6
|
+
import { TreeGrowth } from "../config/TreeGrowth.js";
|
|
6
7
|
import { TreePreset } from "../config/TreePreset.js";
|
|
7
8
|
import { TreeSpeciesConfig } from "../config/TreeSpeciesConfig.js";
|
|
8
9
|
import { BranchGeneratorConfig } from "../config/BranchGeneratorConfig.js";
|
|
@@ -160,16 +161,165 @@ function make_conifer_leader_rule(target) {
|
|
|
160
161
|
});
|
|
161
162
|
}
|
|
162
163
|
|
|
164
|
+
/**
|
|
165
|
+
* The pine's framework for the generator graph alone (`TreeGrowth.Graph`), as it was before the shoot simulation grew
|
|
166
|
+
* the pine from its seed (4a3a41928): the seed-grown pine's stem and boughs, as tall and long as the grown tree's, a
|
|
167
|
+
* whorl of boughs a year and short branches between the whorls, twigs on both, and the twig system grown year by year
|
|
168
|
+
* on all three (KK1991, as the spruce's). Its roots and its twig system's shoots are the seed-grown pine's own.
|
|
169
|
+
* @param {TreeSpeciesConfig} config the seed-grown pine
|
|
170
|
+
*/
|
|
171
|
+
function make_pine_framework(config) {
|
|
172
|
+
const [stem, bough, roots, twig_system] = config.branches;
|
|
173
|
+
config.branches = [
|
|
174
|
+
stem.clone().applyOverrides({
|
|
175
|
+
segments: 12,
|
|
176
|
+
length: 11.2,
|
|
177
|
+
length_variance: 0.05,
|
|
178
|
+
taper: 0.88,
|
|
179
|
+
curvature: 0.16,
|
|
180
|
+
curve_back: -0.10,
|
|
181
|
+
spiral_twist: 0.22,
|
|
182
|
+
gnarl_strength: 0.09,
|
|
183
|
+
gnarl_frequency: 0.32,
|
|
184
|
+
nodal_kink_strength: 0.18,
|
|
185
|
+
kink_sharpness: 0.48
|
|
186
|
+
}),
|
|
187
|
+
bough.clone().applyOverrides({
|
|
188
|
+
self_pruning: 0.55, // open-grown Scots pine holds dead lower branches for a while
|
|
189
|
+
segments: 7,
|
|
190
|
+
length: 3.8,
|
|
191
|
+
length_variance: 0.10,
|
|
192
|
+
radius_ratio: 0.035,
|
|
193
|
+
taper: 0.85,
|
|
194
|
+
curvature: 0.16,
|
|
195
|
+
curve_back: -0.12,
|
|
196
|
+
gnarl_strength: 0.12,
|
|
197
|
+
nodal_kink_strength: 0.42,
|
|
198
|
+
kink_sharpness: 0.55,
|
|
199
|
+
tip_upcurl: 0.34
|
|
200
|
+
}),
|
|
201
|
+
// Inter-whorl branches: short laterals spiralling along the internodes between whorls
|
|
202
|
+
BranchGeneratorConfig.from({
|
|
203
|
+
self_pruning: 0.55, // open-grown Scots pine holds dead lower branches for a while
|
|
204
|
+
segments: 5,
|
|
205
|
+
length: 1.9,
|
|
206
|
+
length_variance: 0.18,
|
|
207
|
+
radius_ratio: 0.034,
|
|
208
|
+
taper: 0.86,
|
|
209
|
+
curvature: 0.14,
|
|
210
|
+
curve_back: -0.10,
|
|
211
|
+
gravitropism: 0.26,
|
|
212
|
+
phototropism: 0.14,
|
|
213
|
+
gnarl_strength: 0.12,
|
|
214
|
+
nodal_kink_strength: 0.30,
|
|
215
|
+
internode_zigzag: 0.10,
|
|
216
|
+
kink_sharpness: 0.55,
|
|
217
|
+
tip_upcurl: 0.30,
|
|
218
|
+
oval_eccentricity: 0.12,
|
|
219
|
+
bark_displacement: 0.05,
|
|
220
|
+
collar_weld_rings: 1
|
|
221
|
+
}),
|
|
222
|
+
BranchGeneratorConfig.from({
|
|
223
|
+
segments: 5,
|
|
224
|
+
length: 1.4,
|
|
225
|
+
length_variance: 0.14,
|
|
226
|
+
radius_ratio: 0.032,
|
|
227
|
+
taper: 0.85,
|
|
228
|
+
curvature: 0.14,
|
|
229
|
+
gravitropism: 0.08,
|
|
230
|
+
phototropism: 0.24,
|
|
231
|
+
gnarl_strength: 0.12,
|
|
232
|
+
internode_zigzag: 0.12,
|
|
233
|
+
tip_upcurl: 0.32,
|
|
234
|
+
collar_weld_rings: 1
|
|
235
|
+
}),
|
|
236
|
+
// 4: surface roots on the flare crests
|
|
237
|
+
roots,
|
|
238
|
+
// 5: the twig system
|
|
239
|
+
twig_system
|
|
240
|
+
];
|
|
241
|
+
config.branch_rules = [
|
|
242
|
+
BranchSpawnRule.from({
|
|
243
|
+
source: 0,
|
|
244
|
+
target: 1,
|
|
245
|
+
count: 32,
|
|
246
|
+
attach_min: 0.24,
|
|
247
|
+
phyllotaxis_mode: PhyllotaxisMode.Whorled,
|
|
248
|
+
whorl_count: 4,
|
|
249
|
+
azimuth_jitter: 0.16,
|
|
250
|
+
insertion_angle: 1.34,
|
|
251
|
+
insertion_angle_variation: 0.08,
|
|
252
|
+
insertion_angle_profile: AnimationCurve.linear(0, 1.05, 1, 0.52),
|
|
253
|
+
length_profile: AnimationCurve.linear(0, 1.0, 1, 0.72),
|
|
254
|
+
parent_kink: 0.0
|
|
255
|
+
}),
|
|
256
|
+
BranchSpawnRule.from({
|
|
257
|
+
source: 0,
|
|
258
|
+
target: 2,
|
|
259
|
+
count: 14,
|
|
260
|
+
attach_min: 0.30,
|
|
261
|
+
phyllotaxis_mode: PhyllotaxisMode.SpiralGolden,
|
|
262
|
+
azimuth_jitter: 0.30,
|
|
263
|
+
insertion_angle: 1.22,
|
|
264
|
+
insertion_angle_variation: 0.12,
|
|
265
|
+
insertion_angle_profile: AnimationCurve.linear(0, 1.05, 1, 0.55),
|
|
266
|
+
length_profile: AnimationCurve.linear(0, 1.0, 1, 0.6),
|
|
267
|
+
parent_kink: 0.0
|
|
268
|
+
}),
|
|
269
|
+
// Whorl boughs and inter-whorl branches both carry the same twigs
|
|
270
|
+
BranchSpawnRule.from({
|
|
271
|
+
source: 1,
|
|
272
|
+
target: 3,
|
|
273
|
+
count: 7,
|
|
274
|
+
attach_min: 0.12,
|
|
275
|
+
phyllotaxis_mode: PhyllotaxisMode.AlternateDistichous,
|
|
276
|
+
azimuth_jitter: 0.14,
|
|
277
|
+
insertion_angle: 0.88,
|
|
278
|
+
insertion_angle_variation: 0.10,
|
|
279
|
+
length_profile: AnimationCurve.linear(0, 0.95, 1, 0.48)
|
|
280
|
+
}),
|
|
281
|
+
BranchSpawnRule.from({
|
|
282
|
+
source: 2,
|
|
283
|
+
target: 3,
|
|
284
|
+
count: 4,
|
|
285
|
+
attach_min: 0.15,
|
|
286
|
+
phyllotaxis_mode: PhyllotaxisMode.AlternateDistichous,
|
|
287
|
+
azimuth_jitter: 0.14,
|
|
288
|
+
insertion_angle: 0.88,
|
|
289
|
+
insertion_angle_variation: 0.10,
|
|
290
|
+
length_profile: AnimationCurve.linear(0, 0.8, 1, 0.45)
|
|
291
|
+
})
|
|
292
|
+
];
|
|
293
|
+
config.branch_rules.push(make_surface_roots_rule(4, config.branches[0].flare_lobes));
|
|
294
|
+
// Shoots average 11.02 cm on the whorl branches, at most 47.5 cm [KK1991 Table 4, Eq. 6]; branching angles 61, 59,
|
|
295
|
+
// 65 degrees by the lateral's order 2-4 [KK1991 Fig. 2]
|
|
296
|
+
config.shoot_rules = [1, 2, 3].map(source => make_conifer_shoot_rule(source, 5, {
|
|
297
|
+
carrier_order: source === 3 ? 2 : 1,
|
|
298
|
+
mean_unit_length: [0.1102],
|
|
299
|
+
max_unit_length: [0.475],
|
|
300
|
+
insertion_angle: [1.065, 1.030, 1.134]
|
|
301
|
+
}));
|
|
302
|
+
config.shoot_rules.push(make_conifer_leader_rule(5));
|
|
303
|
+
config.foliage_rules = [0, 1, 2, 3, 5].map(source => FoliageSpawnRule.from({
|
|
304
|
+
source,
|
|
305
|
+
phyllotaxis_mode: PhyllotaxisMode.SpiralGolden
|
|
306
|
+
}));
|
|
307
|
+
}
|
|
308
|
+
|
|
163
309
|
/**
|
|
164
310
|
* Returns a rich, botanically tuned `TreeSpeciesConfig` for one of the 9 built-in
|
|
165
311
|
* `TreePreset` archetypes (`Oak`, `Pine`, `Birch`, `Willow`, `Maple`, `Spruce`, `Palm`, `Shrub`, `Fern`),
|
|
166
312
|
* with optional deep parameter overrides.
|
|
167
313
|
*
|
|
314
|
+
* A species is the same for both front ends but where the botanical one grows its framework from shoots: the pine's,
|
|
315
|
+
* which grows from its seed, has its own framework for the generator graph.
|
|
316
|
+
*
|
|
168
317
|
* @param {TreePreset|string} [preset=TreePreset.Oak]
|
|
169
318
|
* @param {Object} [overrides]
|
|
319
|
+
* @param {TreeGrowth} [growth=TreeGrowth.Botanical] which front end the species is grown by
|
|
170
320
|
* @returns {TreeSpeciesConfig}
|
|
171
321
|
*/
|
|
172
|
-
export function make_tree_species_preset(preset = TreePreset.Oak, overrides = {}) {
|
|
322
|
+
export function make_tree_species_preset(preset = TreePreset.Oak, overrides = {}, growth = TreeGrowth.Botanical) {
|
|
173
323
|
const config = new TreeSpeciesConfig();
|
|
174
324
|
const key = typeof preset === "string" ? preset.toLowerCase() : TreePreset.Oak;
|
|
175
325
|
|
|
@@ -177,8 +327,9 @@ export function make_tree_species_preset(preset = TreePreset.Oak, overrides = {}
|
|
|
177
327
|
case TreePreset.Pine: {
|
|
178
328
|
// Pinus follows Rauh's model (Pfisterer 2000): its branches are orthotropic, built like the trunk, so they carry no
|
|
179
329
|
// plagiotropism.
|
|
180
|
-
// Grown from the seed leader: one whorl of branches a year at the leader's tip, and every order below
|
|
181
|
-
// same shoot demography [KK1991]; the generator graph lays only the seed and the roots.
|
|
330
|
+
// Grown botanically from the seed leader: one whorl of branches a year at the leader's tip, and every order below
|
|
331
|
+
// from the same shoot demography [KK1991]; the generator graph lays only the seed and the roots. Grown by the
|
|
332
|
+
// generator graph alone, it stands on a framework of its own (make_pine_framework).
|
|
182
333
|
config.name = "pine";
|
|
183
334
|
config.preset = TreePreset.Pine;
|
|
184
335
|
config.crown.applyOverrides({
|
|
@@ -335,6 +486,9 @@ export function make_tree_species_preset(preset = TreePreset.Oak, overrides = {}
|
|
|
335
486
|
anthocyanin_potential: 0.0,
|
|
336
487
|
tannin_oxidation: 0.30
|
|
337
488
|
});
|
|
489
|
+
if (growth === TreeGrowth.Graph) {
|
|
490
|
+
make_pine_framework(config);
|
|
491
|
+
}
|
|
338
492
|
break;
|
|
339
493
|
}
|
|
340
494
|
|
|
@@ -132,6 +132,25 @@ export class TreeSkeleton {
|
|
|
132
132
|
* @type {Float32Array}
|
|
133
133
|
*/
|
|
134
134
|
branch_phase_hash: Float32Array;
|
|
135
|
+
/**
|
|
136
|
+
* The shoot-prototype instance each branch belongs to (`tree_shoot_instances`), or -1. A prototype draws its leaves,
|
|
137
|
+
* and its wood where the tree does not draw it as wood: its cuts at the tree's error, placed on the tree. The tree's
|
|
138
|
+
* own leaves (`foliage_collect_attachments`) leave it out.
|
|
139
|
+
* @type {Int32Array}
|
|
140
|
+
*/
|
|
141
|
+
branch_instance: Int32Array;
|
|
142
|
+
/**
|
|
143
|
+
* One-sided leaf area (m^2) each segment carries that the skeleton does not hold: shoot systems a prototype instance
|
|
144
|
+
* draws, hanging from it. The wind's mechanics load the segment with it (`tree_skeleton_compute_segment_mechanics`).
|
|
145
|
+
* @type {Float32Array}
|
|
146
|
+
*/
|
|
147
|
+
segment_carried_leaf_area: Float32Array;
|
|
148
|
+
/**
|
|
149
|
+
* How far (m) what each segment carries without holding it reaches from where it hangs (see
|
|
150
|
+
* {@link segment_carried_leaf_area}): a bend of the segment moves it by up to that much more.
|
|
151
|
+
* @type {Float32Array}
|
|
152
|
+
*/
|
|
153
|
+
segment_carried_reach: Float32Array;
|
|
135
154
|
/**
|
|
136
155
|
* Annual extension units recorded for each branch grown by them (`tree_skeleton_grow_shoots`): branch `b`'s
|
|
137
156
|
* units start at `unit_start_t[branch_unit_offset[b] + k]` for `k < branch_unit_count[b]`, as `t_norm` along
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeSkeleton.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/TreeSkeleton.js"],"names":[],"mappings":"AAuCA;;;;;;;;;;;;;;;;GAgBG;AACH;IACI;;;OAGG;IACH,OAFU,MAAM,MAAM,CAAC,CAEH;IAEpB;;;OAGG;IACH,iBAFU,WAAW,EAAE,CAEF;IAErB;;;OAGG;IACH,YAFU,MAAM,CAED;IAEf;;;OAGG;IACH,eAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,cAFU,MAAM,CAEC;IAiBjB;;;OAGG;IACH,uBAFU,SAAS,CAEsF;IAEzG;;;OAGG;IACH,uBAFU,SAAS,CAEwF;IAE3G;;;OAGG;IACH,iBAFU,SAAS,CAE2E;IAE9F;;;OAGG;IACH,wBAFU,SAAS,CAE2F;IAE9G;;;OAGG;IACH,yBAFU,SAAS,CAE+F;IAElH;;;OAGG;IACH,yBAFU,SAAS,CAE+F;IAElH;;;OAGG;IACH,sBAFU,SAAS,CAEyF;IAE5G;;;OAGG;IACH,oBAFU,UAAU,CAEyC;IAE7D;;;OAGG;IACH,mBAFU,UAAU,CAEwC;IAE5D;;;OAGG;IACH,cAFU,UAAU,CAEmC;IAEvD;;;OAGG;IACH,kBAFU,WAAW,CAEuC;IAE5D;;;;OAIG;IACH,aAFU,UAAU,CAEkC;IAEtD;;;OAGG;IACH,eAFU,UAAU,CAEoC;IAExD;;;OAGG;IACH,oBAFU,UAAU,CAEyC;IAE7D;;;OAGG;IACH,wBAFU,YAAY,CAE6C;IAEnE;;;OAGG;IACH,eAFU,YAAY,CAEoC;IAE1D;;;OAGG;IACH,oBAFU,YAAY,CAEyC;IAE/D;;;OAGG;IACH,mBAFU,YAAY,CAEwC;IAE9D;;;;;;OAMG;IACH,oBAFU,WAAW,CAEyC;IAE9D;;;OAGG;IACH,mBAFU,WAAW,CAEwC;IAE7D;;;OAGG;IACH,cAFU,YAAY,CAEe;IAErC;;;OAGG;IACH,YAFU,MAAM,CAED;IAEf;;;OAGG;IACH,aAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,cAFU,UAAU,CAEc;IAElC;;;;OAIG;IACH,gBAFU,YAAY,CAEgB;IAEtC;;;OAGG;IACH,cAFU,YAAY,CAEqB;IAE3C;;;OAGG;IACH,aAFU,YAAY,CAE0B;IAEhD;;;OAGG;IACH,YAFU,MAAM,CAED;IAEf;;;OAGG;IACH,aAFU,UAAU,CAEa;IAEjC;;;;OAIG;IACH,WAFU,YAAY,CAEe;IAYrC;;OAEG;IACH,cAeC;IAED;;;;;OAKG;IACH,qBAHW,UAAU,MAAM,CAAC,aACjB,UAAU,MAAM,CAAC,QAY3B;IAED;;;;;;OAMG;IACH,yBAHW,MAAM,UACN,UAAU,MAAM,CAAC,QAiB3B;IAED;;;;;;;OAOG;IACH,4BAJW,MAAM,OACN,MAAM,GACJ,MAAM,CAMlB;IAED;;;;;;;;;;OAUG;IACH,iBARW,MAAM,KACN,MAAM,SACN,MAAM,SACN,MAAM,SACN,MAAM,UACN,MAAM,GACJ,MAAM,CAqBlB;
|
|
1
|
+
{"version":3,"file":"TreeSkeleton.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/TreeSkeleton.js"],"names":[],"mappings":"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"}
|
|
@@ -209,6 +209,28 @@ export class TreeSkeleton {
|
|
|
209
209
|
*/
|
|
210
210
|
branch_phase_hash = new Float32Array(INITIAL_BRANCH_CAPACITY);
|
|
211
211
|
|
|
212
|
+
/**
|
|
213
|
+
* The shoot-prototype instance each branch belongs to (`tree_shoot_instances`), or -1. A prototype draws its leaves,
|
|
214
|
+
* and its wood where the tree does not draw it as wood: its cuts at the tree's error, placed on the tree. The tree's
|
|
215
|
+
* own leaves (`foliage_collect_attachments`) leave it out.
|
|
216
|
+
* @type {Int32Array}
|
|
217
|
+
*/
|
|
218
|
+
branch_instance = new Int32Array(INITIAL_BRANCH_CAPACITY);
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* One-sided leaf area (m^2) each segment carries that the skeleton does not hold: shoot systems a prototype instance
|
|
222
|
+
* draws, hanging from it. The wind's mechanics load the segment with it (`tree_skeleton_compute_segment_mechanics`).
|
|
223
|
+
* @type {Float32Array}
|
|
224
|
+
*/
|
|
225
|
+
segment_carried_leaf_area = new Float32Array(INITIAL_SEGMENT_CAPACITY);
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* How far (m) what each segment carries without holding it reaches from where it hangs (see
|
|
229
|
+
* {@link segment_carried_leaf_area}): a bend of the segment moves it by up to that much more.
|
|
230
|
+
* @type {Float32Array}
|
|
231
|
+
*/
|
|
232
|
+
segment_carried_reach = new Float32Array(INITIAL_SEGMENT_CAPACITY);
|
|
233
|
+
|
|
212
234
|
/**
|
|
213
235
|
* Annual extension units recorded for each branch grown by them (`tree_skeleton_grow_shoots`): branch `b`'s
|
|
214
236
|
* units start at `unit_start_t[branch_unit_offset[b] + k]` for `k < branch_unit_count[b]`, as `t_norm` along
|
|
@@ -436,6 +458,12 @@ export class TreeSkeleton {
|
|
|
436
458
|
grow_attribute_capacity(this.attr_segment_hermite_m0, next_cap);
|
|
437
459
|
grow_attribute_capacity(this.attr_segment_hermite_m1, next_cap);
|
|
438
460
|
grow_attribute_capacity(this.attr_segment_metrics, next_cap);
|
|
461
|
+
const carried = new Float32Array(next_cap);
|
|
462
|
+
carried.set(this.segment_carried_leaf_area);
|
|
463
|
+
this.segment_carried_leaf_area = carried;
|
|
464
|
+
const reach = new Float32Array(next_cap);
|
|
465
|
+
reach.set(this.segment_carried_reach);
|
|
466
|
+
this.segment_carried_reach = reach;
|
|
439
467
|
this.#segment_capacity = next_cap;
|
|
440
468
|
}
|
|
441
469
|
|
|
@@ -483,6 +511,7 @@ export class TreeSkeleton {
|
|
|
483
511
|
this.branch_length = grow_f32(this.branch_length);
|
|
484
512
|
this.branch_base_radius = grow_f32(this.branch_base_radius);
|
|
485
513
|
this.branch_phase_hash = grow_f32(this.branch_phase_hash);
|
|
514
|
+
this.branch_instance = grow_i32(this.branch_instance);
|
|
486
515
|
const grown_offset = new Uint32Array(next_cap);
|
|
487
516
|
grown_offset.set(this.branch_unit_offset);
|
|
488
517
|
this.branch_unit_offset = grown_offset;
|
|
@@ -531,6 +560,7 @@ export class TreeSkeleton {
|
|
|
531
560
|
this.branch_base_radius[id] = base_radius;
|
|
532
561
|
this.branch_phase_hash[id] = phase_hash;
|
|
533
562
|
this.branch_unit_count[id] = 0;
|
|
563
|
+
this.branch_instance[id] = -1;
|
|
534
564
|
|
|
535
565
|
return id;
|
|
536
566
|
}
|
|
@@ -678,6 +708,8 @@ export class TreeSkeleton {
|
|
|
678
708
|
const metrics = /** @type {Float32Array} */ (this.attr_segment_metrics.data);
|
|
679
709
|
metrics[e * 2] = length;
|
|
680
710
|
metrics[e * 2 + 1] = parent_attach_t;
|
|
711
|
+
this.segment_carried_leaf_area[e] = 0;
|
|
712
|
+
this.segment_carried_reach[e] = 0;
|
|
681
713
|
|
|
682
714
|
// Record incoming Hermite segment on v1 if v1 belongs to the same branch or has no segment yet
|
|
683
715
|
const b_info = /** @type {Int32Array} */ (this.attr_node_branch_info.data);
|
|
@@ -1239,6 +1271,14 @@ export class TreeSkeleton {
|
|
|
1239
1271
|
this.attr_segment_hermite_m1.copy(other.attr_segment_hermite_m1);
|
|
1240
1272
|
this.attr_segment_metrics.copy(other.attr_segment_metrics);
|
|
1241
1273
|
this.#segment_capacity = this.attr_segment_endpoints.data.length / 2;
|
|
1274
|
+
if (this.segment_carried_leaf_area.length < this.#segment_capacity) {
|
|
1275
|
+
this.segment_carried_leaf_area = new Float32Array(this.#segment_capacity);
|
|
1276
|
+
}
|
|
1277
|
+
this.segment_carried_leaf_area.set(other.segment_carried_leaf_area.subarray(0, other.segment_count));
|
|
1278
|
+
if (this.segment_carried_reach.length < this.#segment_capacity) {
|
|
1279
|
+
this.segment_carried_reach = new Float32Array(this.#segment_capacity);
|
|
1280
|
+
}
|
|
1281
|
+
this.segment_carried_reach.set(other.segment_carried_reach.subarray(0, other.segment_count));
|
|
1242
1282
|
|
|
1243
1283
|
for (let i = 0; i < other.branch_count; i++) {
|
|
1244
1284
|
this.branch_root_vertex[i] = other.branch_root_vertex[i];
|
|
@@ -1254,6 +1294,7 @@ export class TreeSkeleton {
|
|
|
1254
1294
|
this.branch_phase_hash[i] = other.branch_phase_hash[i];
|
|
1255
1295
|
this.branch_unit_offset[i] = other.branch_unit_offset[i];
|
|
1256
1296
|
this.branch_unit_count[i] = other.branch_unit_count[i];
|
|
1297
|
+
this.branch_instance[i] = other.branch_instance[i];
|
|
1257
1298
|
}
|
|
1258
1299
|
|
|
1259
1300
|
this.crown_center.set(other.crown_center);
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* @typedef {Object} TreeSegmentMechanics
|
|
3
3
|
* @property {Float64Array} mid segment midpoints, `3` per segment
|
|
4
4
|
* @property {Float64Array} mass kg per segment (green wood + fresh leaves)
|
|
5
|
+
* @property {Float64Array} leaf_area one-sided leaf area each segment holds or carries (m^2)
|
|
5
6
|
* @property {Float64Array} flex `integral dx / r^4` per segment (`0` in the soil)
|
|
6
7
|
* @property {Float64Array} moment drag moment carried by each segment per unit `0.5 rho v^2` (m^3)
|
|
7
8
|
* @property {Float64Array} mass_moment moment of the mass carried by each segment (kg m)
|
|
@@ -91,6 +92,10 @@ export type TreeSegmentMechanics = {
|
|
|
91
92
|
* kg per segment (green wood + fresh leaves)
|
|
92
93
|
*/
|
|
93
94
|
mass: Float64Array;
|
|
95
|
+
/**
|
|
96
|
+
* one-sided leaf area each segment holds or carries (m^2)
|
|
97
|
+
*/
|
|
98
|
+
leaf_area: Float64Array;
|
|
94
99
|
/**
|
|
95
100
|
* `integral dx / r^4` per segment (`0` in the soil)
|
|
96
101
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree_skeleton_compute_joint_mechanics.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.js"],"names":[],"mappings":"AAsEA
|
|
1
|
+
{"version":3,"file":"tree_skeleton_compute_joint_mechanics.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.js"],"names":[],"mappings":"AAsEA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;GAWG;AACH,kEAJW,OAAO,mBAAmB,EAAE,YAAY,WACxC,OAAO,gCAAgC,EAAE,iBAAiB,GACxD,oBAAoB,CAsJhC;AAED;;;;;;;GAOG;AACH,kEAJW,OAAO,gCAAgC,EAAE,iBAAiB,YAC1D,oBAAoB,OACpB,YAAY,QAQtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,gEARW,OAAO,mBAAmB,EAAE,YAAY,WACxC,OAAO,gCAAgC,EAAE,iBAAiB,YAC1D,oBAAoB,oBACpB,UAAU,cACV,UAAU,kBACV,YAAY,yBACZ,YAAY,QAgCtB;AAED;;;;;;;;;;;;;GAaG;AACH,iEALW,OAAO,mBAAmB,EAAE,YAAY,WACxC,OAAO,gCAAgC,EAAE,iBAAiB,YAC1D,oBAAoB,OACpB,YAAY,QA0CtB;AAED;;;;;;;;GAQG;AACH,kEALW,OAAO,mBAAmB,EAAE,YAAY,WACxC,OAAO,gCAAgC,EAAE,iBAAiB,YAC1D,oBAAoB,OACpB,YAAY,QAYtB;;;;;SAjUa,YAAY;;;;UACZ,YAAY;;;;eACZ,YAAY;;;;UACZ,YAAY;;;;YACZ,YAAY;;;;iBACZ,YAAY;;;;;WACZ,YAAY"}
|
|
@@ -72,6 +72,7 @@ function segment_flexibility(len, r0, r1) {
|
|
|
72
72
|
* @typedef {Object} TreeSegmentMechanics
|
|
73
73
|
* @property {Float64Array} mid segment midpoints, `3` per segment
|
|
74
74
|
* @property {Float64Array} mass kg per segment (green wood + fresh leaves)
|
|
75
|
+
* @property {Float64Array} leaf_area one-sided leaf area each segment holds or carries (m^2)
|
|
75
76
|
* @property {Float64Array} flex `integral dx / r^4` per segment (`0` in the soil)
|
|
76
77
|
* @property {Float64Array} moment drag moment carried by each segment per unit `0.5 rho v^2` (m^3)
|
|
77
78
|
* @property {Float64Array} mass_moment moment of the mass carried by each segment (kg m)
|
|
@@ -99,6 +100,7 @@ export function tree_skeleton_compute_segment_mechanics(skeleton, species) {
|
|
|
99
100
|
const mid = new Float64Array(segment_count * 3);
|
|
100
101
|
const drag_area = new Float64Array(segment_count);
|
|
101
102
|
const mass = new Float64Array(segment_count);
|
|
103
|
+
const leaf_areas = new Float64Array(segment_count);
|
|
102
104
|
const flex = new Float64Array(segment_count);
|
|
103
105
|
const moment = new Float64Array(segment_count);
|
|
104
106
|
const mass_moment = new Float64Array(segment_count);
|
|
@@ -185,6 +187,11 @@ export function tree_skeleton_compute_segment_mechanics(skeleton, species) {
|
|
|
185
187
|
leaf_area += foliage_leaf_area_per_metre(reach, rule.insertion_angle) * len * overlap / Math.max(1e-6, t1 - t0);
|
|
186
188
|
}
|
|
187
189
|
|
|
190
|
+
// and the shoot systems a prototype draws hanging from it, which the skeleton does not hold
|
|
191
|
+
leaf_area += skeleton.segment_carried_leaf_area[s];
|
|
192
|
+
card_reach[s] = Math.max(card_reach[s], skeleton.segment_carried_reach[s]);
|
|
193
|
+
|
|
194
|
+
leaf_areas[s] = leaf_area;
|
|
188
195
|
drag_area[s] = DRAG_COEFFICIENT_WOOD * 2.0 * r_mean * len + DRAG_COEFFICIENT_FOLIAGE * leaf_area;
|
|
189
196
|
mass[s] = WOOD_DENSITY * Math.PI * r_mean * r_mean * len + LEAF_AREAL_MASS * leaf_area;
|
|
190
197
|
flex[s] = segment_flexibility(len, r0, r1);
|
|
@@ -232,7 +239,7 @@ export function tree_skeleton_compute_segment_mechanics(skeleton, species) {
|
|
|
232
239
|
}
|
|
233
240
|
}
|
|
234
241
|
|
|
235
|
-
return { mid, mass, flex, moment, mass_moment, reach };
|
|
242
|
+
return { mid, mass, leaf_area: leaf_areas, flex, moment, mass_moment, reach };
|
|
236
243
|
}
|
|
237
244
|
|
|
238
245
|
/**
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {Object} TreeBranchPlacement where a copied branch goes, when not where it was: `p' = to + scale turn (p - from)`
|
|
3
|
+
* @property {ArrayLike<number>} turn row-major 3x3 rotation, turning its spine, frames, tangents and scars
|
|
4
|
+
* @property {number} scale uniform: positions about `from`, arc and segment lengths, and girth
|
|
5
|
+
* @property {ArrayLike<number>} from the point placed at `to`
|
|
6
|
+
* @property {ArrayLike<number>} to
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Copies branch `b` of `source`, with its nodes, segments, annual units, scars and dead flag, into `out`, hanging from
|
|
10
|
+
* `parent` there (or starting a tree of its own when `-1`) at `attach_t` on its segment `parent_edge`, its first node
|
|
11
|
+
* from `hang`, at depth `level`; carried by `placement` if given. The wind rig's joints are not copied: the rig is
|
|
12
|
+
* assigned to `out` as a whole.
|
|
13
|
+
*
|
|
14
|
+
* @param {import("./TreeSkeleton.js").TreeSkeleton} source
|
|
15
|
+
* @param {number} b
|
|
16
|
+
* @param {import("./TreeSkeleton.js").TreeSkeleton} out
|
|
17
|
+
* @param {number} parent branch in `out`, or `-1`
|
|
18
|
+
* @param {number} parent_edge segment of `parent` in `out`, or `-1`
|
|
19
|
+
* @param {number} attach_t where along `parent`, as `t_norm`
|
|
20
|
+
* @param {number} hang node of `out` its first node hangs from, or `-1`
|
|
21
|
+
* @param {number} level
|
|
22
|
+
* @param {TreeBranchPlacement|null} placement
|
|
23
|
+
* @param {Map<number, number>} edge_of receives each copied segment's id in `out`, by its id in `source`
|
|
24
|
+
* @returns {number} its id in `out`
|
|
25
|
+
*/
|
|
26
|
+
export function tree_skeleton_copy_branch(source: import("./TreeSkeleton.js").TreeSkeleton, b: number, out: import("./TreeSkeleton.js").TreeSkeleton, parent: number, parent_edge: number, attach_t: number, hang: number, level: number, placement: TreeBranchPlacement | null, edge_of: Map<number, number>): number;
|
|
27
|
+
/**
|
|
28
|
+
* Copies `branches` of `source` into `out`, where they are (`tree_skeleton_copy_branch`). A branch whose parent is
|
|
29
|
+
* copied before it hangs from that parent's copy, from the node the original hung from; any other starts a tree of its
|
|
30
|
+
* own in `out`, at the level it had.
|
|
31
|
+
*
|
|
32
|
+
* A species' prototypes are gathered from the trees they grew in this way (`tree_shoot_prototypes`).
|
|
33
|
+
*
|
|
34
|
+
* @param {import("./TreeSkeleton.js").TreeSkeleton} source
|
|
35
|
+
* @param {ArrayLike<number>} branches parents before their children
|
|
36
|
+
* @param {import("./TreeSkeleton.js").TreeSkeleton} out
|
|
37
|
+
* @returns {Int32Array} each copied branch's id in `out`, in the order of `branches`
|
|
38
|
+
*/
|
|
39
|
+
export function tree_skeleton_copy_branches(source: import("./TreeSkeleton.js").TreeSkeleton, branches: ArrayLike<number>, out: import("./TreeSkeleton.js").TreeSkeleton): Int32Array;
|
|
40
|
+
/**
|
|
41
|
+
* `v = M v`: a direction carried by a placement's `turn`.
|
|
42
|
+
* @param {Float64Array|number[]} v
|
|
43
|
+
* @param {ArrayLike<number>} m row-major 3x3
|
|
44
|
+
*/
|
|
45
|
+
export function tree_branch_turn(v: Float64Array | number[], m: ArrayLike<number>): void;
|
|
46
|
+
/**
|
|
47
|
+
* `p = to + scale turn (p - from)`: a point carried by `placement`.
|
|
48
|
+
* @param {Float64Array|number[]} p
|
|
49
|
+
* @param {TreeBranchPlacement} placement
|
|
50
|
+
*/
|
|
51
|
+
export function tree_branch_placement_apply(p: Float64Array | number[], placement: TreeBranchPlacement): void;
|
|
52
|
+
/**
|
|
53
|
+
* where a copied branch goes, when not where it was: `p' = to + scale turn (p - from)`
|
|
54
|
+
*/
|
|
55
|
+
export type TreeBranchPlacement = {
|
|
56
|
+
/**
|
|
57
|
+
* row-major 3x3 rotation, turning its spine, frames, tangents and scars
|
|
58
|
+
*/
|
|
59
|
+
turn: ArrayLike<number>;
|
|
60
|
+
/**
|
|
61
|
+
* uniform: positions about `from`, arc and segment lengths, and girth
|
|
62
|
+
*/
|
|
63
|
+
scale: number;
|
|
64
|
+
/**
|
|
65
|
+
* the point placed at `to`
|
|
66
|
+
*/
|
|
67
|
+
from: ArrayLike<number>;
|
|
68
|
+
to: ArrayLike<number>;
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=tree_skeleton_copy_branches.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree_skeleton_copy_branches.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/tree_skeleton_copy_branches.js"],"names":[],"mappings":"AAOA;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH,kDAZW,OAAO,mBAAmB,EAAE,YAAY,KACxC,MAAM,OACN,OAAO,mBAAmB,EAAE,YAAY,UACxC,MAAM,eACN,MAAM,YACN,MAAM,QACN,MAAM,SACN,MAAM,aACN,mBAAmB,GAAC,IAAI,WACxB,IAAI,MAAM,EAAE,MAAM,CAAC,GACjB,MAAM,CAmElB;AAED;;;;;;;;;;;GAWG;AACH,oDALW,OAAO,mBAAmB,EAAE,YAAY,YACxC,UAAU,MAAM,CAAC,OACjB,OAAO,mBAAmB,EAAE,YAAY,GACtC,UAAU,CAgCtB;AAED;;;;GAIG;AACH,oCAHW,YAAY,GAAC,MAAM,EAAE,KACrB,UAAU,MAAM,CAAC,QAO3B;AAED;;;;GAIG;AACH,+CAHW,YAAY,GAAC,MAAM,EAAE,aACrB,mBAAmB,QAW7B;;;;;;;;UAjKa,UAAU,MAAM,CAAC;;;;WACjB,MAAM;;;;UACN,UAAU,MAAM,CAAC;QACjB,UAAU,MAAM,CAAC"}
|