@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
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {Object} TreeShootPrototype
|
|
3
|
+
* @property {number} generator its carrier's generator, a shoot rule's `source`
|
|
4
|
+
* @property {number} carrier the framework branch it grew on
|
|
5
|
+
* @property {number} length m, its carrier's in the framework: what a carrier it is drawn on is scaled against
|
|
6
|
+
* @property {number} first its carrier's branch in `TreeShootPrototypes.sheet`; its shoots follow it
|
|
7
|
+
* @property {number} branch_count its branches in the sheet, from `first`
|
|
8
|
+
* @property {Array<{parent: number, t: number, leaf_area: number, reach: number}>} carried each shoot system on it that
|
|
9
|
+
* no LOD draws as wood, hanging from drawn wood: the sheet branch and `t_norm` it hangs from, its one-sided leaf
|
|
10
|
+
* area (m^2) and how far it reaches from there (m), as the wind's mechanics weigh them
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* @typedef {Object} TreeShootPrototypes
|
|
14
|
+
* @property {import("../config/TreeSpeciesConfig.js").TreeSpeciesConfig} species the species as its prototypes grew,
|
|
15
|
+
* at {@link PROTOTYPE_SEED}
|
|
16
|
+
* @property {TreeSkeleton} framework the species' framework, grown by its generator graph alone
|
|
17
|
+
* @property {TreeShootPrototype[]} prototypes
|
|
18
|
+
* @property {Map<number, {lengths: Float64Array, low: number, high: number}>} carriers per carrier generator, its
|
|
19
|
+
* carriers' lengths (ascending), and the scale a prototype may be drawn at, its leaves' own spread
|
|
20
|
+
* (`foliage_scale_spread`)
|
|
21
|
+
* @property {TreeSkeleton} sheet every prototype where it grew on the framework, under the framework's crown frame
|
|
22
|
+
* @property {import("../mesh/foliage_collect_attachments.js").FoliageAttachmentSet} attachments the sheet's leaves
|
|
23
|
+
* @property {import("../../../shade/renderer/geometry/Geometry.js").Geometry|null} leaves every leaf's card
|
|
24
|
+
* @property {number} side_area m^2, every prototype's grown side area together
|
|
25
|
+
* @property {number[]} errors m, each error the sheet was cut at: {@link TREE_LOD_ERROR_STEP} apart from
|
|
26
|
+
* {@link TREE_LOD_ERROR_FINEST} to the first that draws no wood, every prototype one cut
|
|
27
|
+
* @property {ReturnType<typeof tree_cluster_atlas>|null} atlas their cuts at every error, drawn with a few tiles, as
|
|
28
|
+
* large as the texture ceiling affords over {@link side_area}
|
|
29
|
+
* @property {Uint8Array} drawn per sheet branch, whether any LOD draws it as wood: the finest error does, and so does
|
|
30
|
+
* its parent; a carrier always is
|
|
31
|
+
* @property {Int32Array} prototype_of per sheet branch, its prototype
|
|
32
|
+
* @property {Int32Array[]} owners per error, each card's prototype
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* A species' shoot prototypes (TWO_FRONT_ENDS_BRIEF_2026_10_28.md, G1): the shoot systems its shoot rules grow, grown
|
|
36
|
+
* once, by the botanical front end, on carriers of its own framework, and cut and baked into one atlas. A tree grown by
|
|
37
|
+
* its generator graph draws them on its carriers (G3).
|
|
38
|
+
*
|
|
39
|
+
* - **Where.** Each grows on a carrier of the framework the species' graph grows, in place: as old as that carrier is
|
|
40
|
+
* in the tree, kept out of the framework's wood, in the light of its own leaves alone (`tree_skeleton_grow_shoots_on`).
|
|
41
|
+
* It stays there: its leaves are collected, cut and baked where they grew, under the framework's crown frame, as a
|
|
42
|
+
* tree's own are.
|
|
43
|
+
* - **Which.** For each generator the rules grow on, the carrier of median length first. Drawn on a carrier of another
|
|
44
|
+
* length, a prototype is scaled by their ratio, and so are its leaves; within the spread of sizes the species' leaves
|
|
45
|
+
* already grow to, a scaled leaf is one it grows (`foliage_scale_spread`). Prototypes are added, shortest first, until
|
|
46
|
+
* their scaled lengths reach without a gap from the shortest carrier to the longest, each the longest carrier that
|
|
47
|
+
* still reaches back to where the last one stopped.
|
|
48
|
+
* - **Cut.** At every error from the finest to where no wood is drawn, through the same cuts, representatives and bake
|
|
49
|
+
* a tree's own LODs take (`tree_cluster_atlas`).
|
|
50
|
+
*
|
|
51
|
+
* @param {import("../config/TreeSpeciesConfig.js").TreeSpeciesConfig} species
|
|
52
|
+
* @param {import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial} leaf_material
|
|
53
|
+
* the species' leaf material (`TreeSpeciesCache.leaves`)
|
|
54
|
+
* @param {import("../material/FoliageAtlasCutout.js").FoliageAtlasCutout|null} cutout its atlas's shape, `null` for a
|
|
55
|
+
* caller's own material, whose cards cover whole tiles
|
|
56
|
+
* @returns {TreeShootPrototypes}
|
|
57
|
+
*/
|
|
58
|
+
export function tree_shoot_prototypes(species: import("../config/TreeSpeciesConfig.js").TreeSpeciesConfig, leaf_material: import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial, cutout: import("../material/FoliageAtlasCutout.js").FoliageAtlasCutout | null): TreeShootPrototypes;
|
|
59
|
+
export type TreeShootPrototype = {
|
|
60
|
+
/**
|
|
61
|
+
* its carrier's generator, a shoot rule's `source`
|
|
62
|
+
*/
|
|
63
|
+
generator: number;
|
|
64
|
+
/**
|
|
65
|
+
* the framework branch it grew on
|
|
66
|
+
*/
|
|
67
|
+
carrier: number;
|
|
68
|
+
/**
|
|
69
|
+
* m, its carrier's in the framework: what a carrier it is drawn on is scaled against
|
|
70
|
+
*/
|
|
71
|
+
length: number;
|
|
72
|
+
/**
|
|
73
|
+
* its carrier's branch in `TreeShootPrototypes.sheet`; its shoots follow it
|
|
74
|
+
*/
|
|
75
|
+
first: number;
|
|
76
|
+
/**
|
|
77
|
+
* its branches in the sheet, from `first`
|
|
78
|
+
*/
|
|
79
|
+
branch_count: number;
|
|
80
|
+
/**
|
|
81
|
+
* each shoot system on it that
|
|
82
|
+
* no LOD draws as wood, hanging from drawn wood: the sheet branch and `t_norm` it hangs from, its one-sided leaf
|
|
83
|
+
* area (m^2) and how far it reaches from there (m), as the wind's mechanics weigh them
|
|
84
|
+
*/
|
|
85
|
+
carried: Array<{
|
|
86
|
+
parent: number;
|
|
87
|
+
t: number;
|
|
88
|
+
leaf_area: number;
|
|
89
|
+
reach: number;
|
|
90
|
+
}>;
|
|
91
|
+
};
|
|
92
|
+
export type TreeShootPrototypes = {
|
|
93
|
+
/**
|
|
94
|
+
* the species as its prototypes grew,
|
|
95
|
+
* at {@link PROTOTYPE_SEED }
|
|
96
|
+
*/
|
|
97
|
+
species: import("../config/TreeSpeciesConfig.js").TreeSpeciesConfig;
|
|
98
|
+
/**
|
|
99
|
+
* the species' framework, grown by its generator graph alone
|
|
100
|
+
*/
|
|
101
|
+
framework: TreeSkeleton;
|
|
102
|
+
prototypes: TreeShootPrototype[];
|
|
103
|
+
/**
|
|
104
|
+
* per carrier generator, its
|
|
105
|
+
* carriers' lengths (ascending), and the scale a prototype may be drawn at, its leaves' own spread
|
|
106
|
+
* (`foliage_scale_spread`)
|
|
107
|
+
*/
|
|
108
|
+
carriers: Map<number, {
|
|
109
|
+
lengths: Float64Array;
|
|
110
|
+
low: number;
|
|
111
|
+
high: number;
|
|
112
|
+
}>;
|
|
113
|
+
/**
|
|
114
|
+
* every prototype where it grew on the framework, under the framework's crown frame
|
|
115
|
+
*/
|
|
116
|
+
sheet: TreeSkeleton;
|
|
117
|
+
/**
|
|
118
|
+
* the sheet's leaves
|
|
119
|
+
*/
|
|
120
|
+
attachments: import("../mesh/foliage_collect_attachments.js").FoliageAttachmentSet;
|
|
121
|
+
/**
|
|
122
|
+
* every leaf's card
|
|
123
|
+
*/
|
|
124
|
+
leaves: import("../../../shade/renderer/geometry/Geometry.js").Geometry | null;
|
|
125
|
+
/**
|
|
126
|
+
* m^2, every prototype's grown side area together
|
|
127
|
+
*/
|
|
128
|
+
side_area: number;
|
|
129
|
+
/**
|
|
130
|
+
* m, each error the sheet was cut at: {@link TREE_LOD_ERROR_STEP } apart from
|
|
131
|
+
* {@link TREE_LOD_ERROR_FINEST } to the first that draws no wood, every prototype one cut
|
|
132
|
+
*/
|
|
133
|
+
errors: number[];
|
|
134
|
+
/**
|
|
135
|
+
* their cuts at every error, drawn with a few tiles, as
|
|
136
|
+
* large as the texture ceiling affords over {@link side_area }
|
|
137
|
+
*/
|
|
138
|
+
atlas: ReturnType<typeof tree_cluster_atlas> | null;
|
|
139
|
+
/**
|
|
140
|
+
* per sheet branch, whether any LOD draws it as wood: the finest error does, and so does
|
|
141
|
+
* its parent; a carrier always is
|
|
142
|
+
*/
|
|
143
|
+
drawn: Uint8Array;
|
|
144
|
+
/**
|
|
145
|
+
* per sheet branch, its prototype
|
|
146
|
+
*/
|
|
147
|
+
prototype_of: Int32Array;
|
|
148
|
+
/**
|
|
149
|
+
* per error, each card's prototype
|
|
150
|
+
*/
|
|
151
|
+
owners: Int32Array[];
|
|
152
|
+
};
|
|
153
|
+
import { TreeSkeleton } from "../skeleton/TreeSkeleton.js";
|
|
154
|
+
import { tree_cluster_atlas } from "../material/tree_cluster_atlas.js";
|
|
155
|
+
//# sourceMappingURL=tree_shoot_prototypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree_shoot_prototypes.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/asset/tree_shoot_prototypes.js"],"names":[],"mappings":"AAmBA;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,+CAPW,OAAO,gCAAgC,EAAE,iBAAiB,iBAC1D,OAAO,2DAA2D,EAAE,qBAAqB,UAEzF,OAAO,mCAAmC,EAAE,kBAAkB,GAAC,IAAI,GAEjE,mBAAmB,CAiJ/B;;;;;eAxMa,MAAM;;;;aACN,MAAM;;;;YACN,MAAM;;;;WACN,MAAM;;;;kBACN,MAAM;;;;;;aACN,MAAM;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;;;;;;;aAOpE,OAAO,gCAAgC,EAAE,iBAAiB;;;;eAE1D,YAAY;gBACZ,kBAAkB,EAAE;;;;;;cACpB,IAAI,MAAM,EAAE;QAAC,OAAO,EAAE,YAAY,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,CAAC;;;;WAG/D,YAAY;;;;iBACZ,OAAO,wCAAwC,EAAE,oBAAoB;;;;YACrE,OAAO,8CAA8C,EAAE,QAAQ,GAAC,IAAI;;;;eACpE,MAAM;;;;;YACN,MAAM,EAAE;;;;;WAER,WAAW,yBAAyB,CAAC,GAAC,IAAI;;;;;WAE1C,UAAU;;;;kBAEV,UAAU;;;;YACV,UAAU,EAAE;;6BA5CG,6BAA6B;mCALvB,mCAAmC"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { TREE_RENDER_COST_CEILING, tree_grown_side_area } from "../analysis/tree_render_cost.js";
|
|
2
|
+
import { TREE_LOD_ERROR_FINEST, TREE_LOD_ERROR_STEP } from "../config/TreeLODConfig.js";
|
|
3
|
+
import { tree_cluster_atlas } from "../material/tree_cluster_atlas.js";
|
|
4
|
+
import { foliage_collect_attachments } from "../mesh/foliage_collect_attachments.js";
|
|
5
|
+
import { foliage_scale_spread } from "../mesh/foliage_scale_spread.js";
|
|
6
|
+
import { tree_mesh_compute_branch_rings } from "../mesh/tree_mesh_build_bark.js";
|
|
7
|
+
import { tree_mesh_build_foliage } from "../mesh/tree_mesh_build_foliage.js";
|
|
8
|
+
import { TreeSkeleton } from "../skeleton/TreeSkeleton.js";
|
|
9
|
+
import { tree_skeleton_compute_segment_mechanics } from "../skeleton/tree_skeleton_compute_joint_mechanics.js";
|
|
10
|
+
import { tree_skeleton_copy_branches } from "../skeleton/tree_skeleton_copy_branches.js";
|
|
11
|
+
import { tree_skeleton_grow_framework } from "../skeleton/tree_skeleton_grow_framework.js";
|
|
12
|
+
import { tree_skeleton_grow_shoots_on } from "../skeleton/tree_skeleton_grow_shoots.js";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The seed a species' prototypes grow from: they are the species', whatever a tree's seed.
|
|
16
|
+
* @type {number}
|
|
17
|
+
*/
|
|
18
|
+
const PROTOTYPE_SEED = 0;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @typedef {Object} TreeShootPrototype
|
|
22
|
+
* @property {number} generator its carrier's generator, a shoot rule's `source`
|
|
23
|
+
* @property {number} carrier the framework branch it grew on
|
|
24
|
+
* @property {number} length m, its carrier's in the framework: what a carrier it is drawn on is scaled against
|
|
25
|
+
* @property {number} first its carrier's branch in `TreeShootPrototypes.sheet`; its shoots follow it
|
|
26
|
+
* @property {number} branch_count its branches in the sheet, from `first`
|
|
27
|
+
* @property {Array<{parent: number, t: number, leaf_area: number, reach: number}>} carried each shoot system on it that
|
|
28
|
+
* no LOD draws as wood, hanging from drawn wood: the sheet branch and `t_norm` it hangs from, its one-sided leaf
|
|
29
|
+
* area (m^2) and how far it reaches from there (m), as the wind's mechanics weigh them
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @typedef {Object} TreeShootPrototypes
|
|
34
|
+
* @property {import("../config/TreeSpeciesConfig.js").TreeSpeciesConfig} species the species as its prototypes grew,
|
|
35
|
+
* at {@link PROTOTYPE_SEED}
|
|
36
|
+
* @property {TreeSkeleton} framework the species' framework, grown by its generator graph alone
|
|
37
|
+
* @property {TreeShootPrototype[]} prototypes
|
|
38
|
+
* @property {Map<number, {lengths: Float64Array, low: number, high: number}>} carriers per carrier generator, its
|
|
39
|
+
* carriers' lengths (ascending), and the scale a prototype may be drawn at, its leaves' own spread
|
|
40
|
+
* (`foliage_scale_spread`)
|
|
41
|
+
* @property {TreeSkeleton} sheet every prototype where it grew on the framework, under the framework's crown frame
|
|
42
|
+
* @property {import("../mesh/foliage_collect_attachments.js").FoliageAttachmentSet} attachments the sheet's leaves
|
|
43
|
+
* @property {import("../../../shade/renderer/geometry/Geometry.js").Geometry|null} leaves every leaf's card
|
|
44
|
+
* @property {number} side_area m^2, every prototype's grown side area together
|
|
45
|
+
* @property {number[]} errors m, each error the sheet was cut at: {@link TREE_LOD_ERROR_STEP} apart from
|
|
46
|
+
* {@link TREE_LOD_ERROR_FINEST} to the first that draws no wood, every prototype one cut
|
|
47
|
+
* @property {ReturnType<typeof tree_cluster_atlas>|null} atlas their cuts at every error, drawn with a few tiles, as
|
|
48
|
+
* large as the texture ceiling affords over {@link side_area}
|
|
49
|
+
* @property {Uint8Array} drawn per sheet branch, whether any LOD draws it as wood: the finest error does, and so does
|
|
50
|
+
* its parent; a carrier always is
|
|
51
|
+
* @property {Int32Array} prototype_of per sheet branch, its prototype
|
|
52
|
+
* @property {Int32Array[]} owners per error, each card's prototype
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* A species' shoot prototypes (TWO_FRONT_ENDS_BRIEF_2026_10_28.md, G1): the shoot systems its shoot rules grow, grown
|
|
57
|
+
* once, by the botanical front end, on carriers of its own framework, and cut and baked into one atlas. A tree grown by
|
|
58
|
+
* its generator graph draws them on its carriers (G3).
|
|
59
|
+
*
|
|
60
|
+
* - **Where.** Each grows on a carrier of the framework the species' graph grows, in place: as old as that carrier is
|
|
61
|
+
* in the tree, kept out of the framework's wood, in the light of its own leaves alone (`tree_skeleton_grow_shoots_on`).
|
|
62
|
+
* It stays there: its leaves are collected, cut and baked where they grew, under the framework's crown frame, as a
|
|
63
|
+
* tree's own are.
|
|
64
|
+
* - **Which.** For each generator the rules grow on, the carrier of median length first. Drawn on a carrier of another
|
|
65
|
+
* length, a prototype is scaled by their ratio, and so are its leaves; within the spread of sizes the species' leaves
|
|
66
|
+
* already grow to, a scaled leaf is one it grows (`foliage_scale_spread`). Prototypes are added, shortest first, until
|
|
67
|
+
* their scaled lengths reach without a gap from the shortest carrier to the longest, each the longest carrier that
|
|
68
|
+
* still reaches back to where the last one stopped.
|
|
69
|
+
* - **Cut.** At every error from the finest to where no wood is drawn, through the same cuts, representatives and bake
|
|
70
|
+
* a tree's own LODs take (`tree_cluster_atlas`).
|
|
71
|
+
*
|
|
72
|
+
* @param {import("../config/TreeSpeciesConfig.js").TreeSpeciesConfig} species
|
|
73
|
+
* @param {import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial} leaf_material
|
|
74
|
+
* the species' leaf material (`TreeSpeciesCache.leaves`)
|
|
75
|
+
* @param {import("../material/FoliageAtlasCutout.js").FoliageAtlasCutout|null} cutout its atlas's shape, `null` for a
|
|
76
|
+
* caller's own material, whose cards cover whole tiles
|
|
77
|
+
* @returns {TreeShootPrototypes}
|
|
78
|
+
*/
|
|
79
|
+
export function tree_shoot_prototypes(species, leaf_material, cutout) {
|
|
80
|
+
const config = species.clone();
|
|
81
|
+
config.seed = PROTOTYPE_SEED;
|
|
82
|
+
const framework = tree_skeleton_grow_framework(config);
|
|
83
|
+
|
|
84
|
+
// each carrier's shoot systems, grown in place on a framework of its own
|
|
85
|
+
const grown = new Map();
|
|
86
|
+
const grow = (carrier) => {
|
|
87
|
+
let skeleton = grown.get(carrier);
|
|
88
|
+
if (skeleton === undefined) {
|
|
89
|
+
skeleton = framework.clone();
|
|
90
|
+
const on = new Uint8Array(framework.branch_count);
|
|
91
|
+
on[carrier] = 1;
|
|
92
|
+
tree_skeleton_grow_shoots_on(skeleton, config, on);
|
|
93
|
+
grown.set(carrier, skeleton);
|
|
94
|
+
}
|
|
95
|
+
return skeleton;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const generators = [...new Set(config.shoot_rules.map(rule => rule.source))].sort((a, b) => a - b);
|
|
99
|
+
/** @type {TreeShootPrototype[]} */
|
|
100
|
+
const prototypes = [];
|
|
101
|
+
const carriers = new Map();
|
|
102
|
+
for (const generator of generators) {
|
|
103
|
+
const of_generator = [];
|
|
104
|
+
for (let b = 0; b < framework.branch_count; b++) {
|
|
105
|
+
if (framework.branch_generator[b] === generator && !framework.branch_dead[b] && framework.branch_length[b] > 0) {
|
|
106
|
+
of_generator.push(b);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (of_generator.length === 0) continue;
|
|
110
|
+
of_generator.sort((a, b) => framework.branch_length[a] - framework.branch_length[b]);
|
|
111
|
+
const lengths = Float64Array.from(of_generator, b => framework.branch_length[b]);
|
|
112
|
+
const n = lengths.length;
|
|
113
|
+
|
|
114
|
+
// the median carrier's leaves say how far a prototype may be scaled; a system without leaves, any
|
|
115
|
+
const median = of_generator[n >> 1];
|
|
116
|
+
grow(median);
|
|
117
|
+
const own = foliage_collect_attachments(in_place(framework, grown, [median]), config, cutout);
|
|
118
|
+
const { low, high } = own.count > 0 ? foliage_scale_spread(own.scales, own.count) : { low: 0, high: Infinity };
|
|
119
|
+
carriers.set(generator, { lengths, low, high });
|
|
120
|
+
|
|
121
|
+
// `need`: the shortest length not yet reached, or, once `reached`, the longest that is
|
|
122
|
+
let need = lengths[0];
|
|
123
|
+
let reached = false;
|
|
124
|
+
for (; ;) {
|
|
125
|
+
// the longest carrier that scales down to it
|
|
126
|
+
let k = 0;
|
|
127
|
+
while (k + 1 < n && lengths[k + 1] * low <= need) k++;
|
|
128
|
+
if (reached && lengths[k] * high <= need) {
|
|
129
|
+
// none reaches further: no carrier's length lies past it within reach, so on to the next that does
|
|
130
|
+
let j = 0;
|
|
131
|
+
while (j < n && lengths[j] <= need) j++;
|
|
132
|
+
if (j === n) break;
|
|
133
|
+
need = lengths[j];
|
|
134
|
+
reached = false;
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
grow(of_generator[k]);
|
|
138
|
+
prototypes.push({ generator, carrier: of_generator[k], length: lengths[k], first: 0, branch_count: 0, carried: [] });
|
|
139
|
+
need = lengths[k] * high;
|
|
140
|
+
reached = true;
|
|
141
|
+
if (need >= lengths[n - 1]) break;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// every prototype where it grew, one skeleton
|
|
146
|
+
const sheet = in_place(framework, grown, prototypes.map(p => p.carrier), prototypes);
|
|
147
|
+
const attachments = foliage_collect_attachments(sheet, config, cutout);
|
|
148
|
+
const leaves = attachments.count > 0 ? tree_mesh_build_foliage(sheet, attachments, config, cutout) : null;
|
|
149
|
+
let side_area = 0;
|
|
150
|
+
for (const prototype of prototypes) {
|
|
151
|
+
const one = in_place(framework, grown, [prototype.carrier]);
|
|
152
|
+
const own = foliage_collect_attachments(one, config, cutout);
|
|
153
|
+
side_area += tree_grown_side_area(one, own.count > 0 ? tree_mesh_build_foliage(one, own, config, cutout) : null);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// the error ladder, to where no wood is drawn
|
|
157
|
+
const errors = [];
|
|
158
|
+
const lods = [];
|
|
159
|
+
const planned = new Map();
|
|
160
|
+
for (let error = TREE_LOD_ERROR_FINEST; ; error *= TREE_LOD_ERROR_STEP) {
|
|
161
|
+
const lod = config.lods[0].clone();
|
|
162
|
+
lod.error = error;
|
|
163
|
+
const rings = tree_mesh_compute_branch_rings(sheet, config, lod);
|
|
164
|
+
planned.set(error, rings);
|
|
165
|
+
errors.push(error);
|
|
166
|
+
lods.push(lod);
|
|
167
|
+
if (rings.size === 0) break;
|
|
168
|
+
}
|
|
169
|
+
const atlas = leaves !== null
|
|
170
|
+
? tree_cluster_atlas(sheet, config, attachments, leaves, lods, leaf_material, TREE_RENDER_COST_CEILING.texture_density * side_area, planned)
|
|
171
|
+
: null;
|
|
172
|
+
|
|
173
|
+
// what any LOD can draw as wood: what the finest error draws, from the carrier out
|
|
174
|
+
const prototype_of = new Int32Array(sheet.branch_count).fill(-1);
|
|
175
|
+
const drawn = new Uint8Array(sheet.branch_count);
|
|
176
|
+
const finest = planned.get(TREE_LOD_ERROR_FINEST);
|
|
177
|
+
for (let i = 0; i < prototypes.length; i++) {
|
|
178
|
+
const q = prototypes[i];
|
|
179
|
+
prototype_of.fill(i, q.first, q.first + q.branch_count);
|
|
180
|
+
drawn[q.first] = 1;
|
|
181
|
+
for (let b = q.first + 1; b < q.first + q.branch_count; b++) {
|
|
182
|
+
drawn[b] = finest.has(b) && drawn[sheet.branch_parent[b]] ? 1 : 0;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
const owners = atlas === null ? [] : atlas.lods.map(({ clusters, cards }) => Int32Array.from(cards, card => {
|
|
186
|
+
const cluster = clusters[card.cluster];
|
|
187
|
+
return prototype_of[cluster.branch >= 0 ? cluster.branch : cluster.root];
|
|
188
|
+
}));
|
|
189
|
+
|
|
190
|
+
// what each carries without drawing it as wood: the shoot systems hanging from its drawn wood, weighed as the
|
|
191
|
+
// wind's mechanics weigh the wood they would hang from
|
|
192
|
+
const mechanics = tree_skeleton_compute_segment_mechanics(sheet, config);
|
|
193
|
+
const top = new Int32Array(sheet.branch_count).fill(-1);
|
|
194
|
+
const area = new Float64Array(sheet.branch_count);
|
|
195
|
+
for (const q of prototypes) {
|
|
196
|
+
for (let b = q.first + 1; b < q.first + q.branch_count; b++) {
|
|
197
|
+
if (drawn[b]) continue;
|
|
198
|
+
const p = sheet.branch_parent[b];
|
|
199
|
+
top[b] = drawn[p] ? b : top[p];
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
for (let e = 0; e < sheet.segment_count; e++) {
|
|
203
|
+
const r = top[sheet.node_branch_id(sheet.segment_v1(e))];
|
|
204
|
+
if (r >= 0) area[r] += mechanics.leaf_area[e];
|
|
205
|
+
}
|
|
206
|
+
const nodes = [], edges = [];
|
|
207
|
+
const at = new Float64Array(3);
|
|
208
|
+
for (const q of prototypes) {
|
|
209
|
+
q.carried = [];
|
|
210
|
+
for (let r = q.first + 1; r < q.first + q.branch_count; r++) {
|
|
211
|
+
if (top[r] !== r) continue;
|
|
212
|
+
sheet.collect_branch_chain(r, nodes, edges);
|
|
213
|
+
if (edges.length === 0) continue;
|
|
214
|
+
// from where it hangs to the middle of its first segment, and on as far as that segment carries
|
|
215
|
+
sheet.node_read_position(at, 0, nodes[0]);
|
|
216
|
+
const e0 = edges[0];
|
|
217
|
+
const reach = mechanics.reach[e0] + Math.hypot(mechanics.mid[e0 * 3] - at[0], mechanics.mid[e0 * 3 + 1] - at[1], mechanics.mid[e0 * 3 + 2] - at[2]);
|
|
218
|
+
q.carried.push({ parent: sheet.branch_parent[r], t: sheet.branch_parent_attach_t[r], leaf_area: area[r], reach });
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return { species: config, framework, prototypes, carriers, sheet, attachments, leaves, side_area, errors, atlas, drawn, prototype_of, owners };
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* The shoot systems of `carriers`, each with its carrier, where they grew on the framework (`grown`), in one skeleton
|
|
226
|
+
* under the framework's crown frame.
|
|
227
|
+
*
|
|
228
|
+
* @param {TreeSkeleton} framework
|
|
229
|
+
* @param {Map<number, TreeSkeleton>} grown each carrier's framework with its shoot systems grown
|
|
230
|
+
* @param {number[]} carriers
|
|
231
|
+
* @param {TreeShootPrototype[]} [records] where each carrier's branches land in the skeleton, recorded on its prototype
|
|
232
|
+
* @returns {TreeSkeleton}
|
|
233
|
+
*/
|
|
234
|
+
function in_place(framework, grown, carriers, records) {
|
|
235
|
+
const out = new TreeSkeleton();
|
|
236
|
+
for (let i = 0; i < carriers.length; i++) {
|
|
237
|
+
const carrier = carriers[i];
|
|
238
|
+
const skeleton = grown.get(carrier);
|
|
239
|
+
// the carrier, and every shoot: after the framework, mothers before their laterals
|
|
240
|
+
const branches = [carrier];
|
|
241
|
+
for (let b = framework.branch_count; b < skeleton.branch_count; b++) branches.push(b);
|
|
242
|
+
if (records !== undefined) {
|
|
243
|
+
records[i].first = out.branch_count;
|
|
244
|
+
records[i].branch_count = branches.length;
|
|
245
|
+
}
|
|
246
|
+
tree_skeleton_copy_branches(skeleton, branches, out);
|
|
247
|
+
}
|
|
248
|
+
out.crown_center.set(framework.crown_center);
|
|
249
|
+
out.crown_radii.set(framework.crown_radii);
|
|
250
|
+
return out;
|
|
251
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How a tree is grown. Both front ends grow the same `TreeSkeleton` and its leaves, which the rest of the pipeline
|
|
3
|
+
* draws alike (`TWO_FRONT_ENDS_BRIEF_2026_10_28.md`).
|
|
4
|
+
*/
|
|
5
|
+
export type TreeGrowth = string;
|
|
6
|
+
export namespace TreeGrowth {
|
|
7
|
+
let Graph: string;
|
|
8
|
+
let Botanical: string;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=TreeGrowth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeGrowth.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/config/TreeGrowth.js"],"names":[],"mappings":";;;;yBAKU,MAAM"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How a tree is grown. Both front ends grow the same `TreeSkeleton` and its leaves, which the rest of the pipeline
|
|
3
|
+
* draws alike (`TWO_FRONT_ENDS_BRIEF_2026_10_28.md`).
|
|
4
|
+
*
|
|
5
|
+
* @readonly
|
|
6
|
+
* @enum {string}
|
|
7
|
+
*/
|
|
8
|
+
export const TreeGrowth = {
|
|
9
|
+
/**
|
|
10
|
+
* The framework of the generator graph alone (`tree_skeleton_grow_framework`): for real-time trees.
|
|
11
|
+
*/
|
|
12
|
+
Graph: "graph",
|
|
13
|
+
/**
|
|
14
|
+
* The framework, then every shoot system on it, year by year in the crown's light (`tree_skeleton_grow`): for
|
|
15
|
+
* trees seen up close.
|
|
16
|
+
*/
|
|
17
|
+
Botanical: "botanical",
|
|
18
|
+
};
|
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
* @type {number}
|
|
5
5
|
*/
|
|
6
6
|
export const TREE_LOD_ERROR_FINEST: number;
|
|
7
|
+
/**
|
|
8
|
+
* Ratio between consecutive errors a tree is cut at (`tree_lod_plan`'s search, a species' prototypes): each a
|
|
9
|
+
* half-octave coarser than the last.
|
|
10
|
+
* @type {number}
|
|
11
|
+
*/
|
|
12
|
+
export const TREE_LOD_ERROR_STEP: number;
|
|
7
13
|
/**
|
|
8
14
|
* A level of detail: the tree drawn to a geometric error.
|
|
9
15
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeLODConfig.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/config/TreeLODConfig.js"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,oCAFU,MAAM,CAE0B;AAE1C;;GAEG;AACH;IAcI;;;OAGG;IACH,sBAHW,QAAQ,aAAa,CAAC,GACpB,aAAa,CAMzB;IAED;;;;;;OAMG;IACH,sCAJW,MAAM,UACN,MAAM,GACJ,aAAa,EAAE,CAY3B;IAxCD;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,OAFU,MAAM,CAEc;IA+B9B;;;OAGG;IACH,2BAHW,QAAQ,aAAa,CAAC,GACpB,IAAI,CAYhB;IAED;;;OAGG;IACH,YAHW,aAAa,GACX,IAAI,CAOhB;IAED;;OAEG;IACH,SAFa,aAAa,CAMzB;IAED;;;OAGG;IACH,cAHW,aAAa,GACX,OAAO,CAOnB;IAED;;OAEG;IACH,QAFa,MAAM,CAKlB;IAGL;;;OAGG;IACH,0BAFU,OAAO,CAEsB;CANtC"}
|
|
1
|
+
{"version":3,"file":"TreeLODConfig.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/config/TreeLODConfig.js"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,oCAFU,MAAM,CAE0B;AAE1C;;;;GAIG;AACH,kCAFU,MAAM,CAE8B;AAE9C;;GAEG;AACH;IAcI;;;OAGG;IACH,sBAHW,QAAQ,aAAa,CAAC,GACpB,aAAa,CAMzB;IAED;;;;;;OAMG;IACH,sCAJW,MAAM,UACN,MAAM,GACJ,aAAa,EAAE,CAY3B;IAxCD;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,OAFU,MAAM,CAEc;IA+B9B;;;OAGG;IACH,2BAHW,QAAQ,aAAa,CAAC,GACpB,IAAI,CAYhB;IAED;;;OAGG;IACH,YAHW,aAAa,GACX,IAAI,CAOhB;IAED;;OAEG;IACH,SAFa,aAAa,CAMzB;IAED;;;OAGG;IACH,cAHW,aAAa,GACX,OAAO,CAOnB;IAED;;OAEG;IACH,QAFa,MAAM,CAKlB;IAGL;;;OAGG;IACH,0BAFU,OAAO,CAEsB;CANtC"}
|
|
@@ -9,6 +9,13 @@ import { computeHashFloat } from "../../../core/primitives/numbers/computeHashFl
|
|
|
9
9
|
*/
|
|
10
10
|
export const TREE_LOD_ERROR_FINEST = 0.01;
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Ratio between consecutive errors a tree is cut at (`tree_lod_plan`'s search, a species' prototypes): each a
|
|
14
|
+
* half-octave coarser than the last.
|
|
15
|
+
* @type {number}
|
|
16
|
+
*/
|
|
17
|
+
export const TREE_LOD_ERROR_STEP = Math.SQRT2;
|
|
18
|
+
|
|
12
19
|
/**
|
|
13
20
|
* A level of detail: the tree drawn to a geometric error.
|
|
14
21
|
*/
|
|
@@ -3,6 +3,7 @@ export { PhyllotaxisMode } from "./config/PhyllotaxisMode.js";
|
|
|
3
3
|
export { FoliageCardType } from "./config/FoliageCardType.js";
|
|
4
4
|
export { FoliageBarkType } from "./config/FoliageBarkType.js";
|
|
5
5
|
export { TreePreset } from "./config/TreePreset.js";
|
|
6
|
+
export { TreeGrowth } from "./config/TreeGrowth.js";
|
|
6
7
|
export { BranchGeneratorConfig } from "./config/BranchGeneratorConfig.js";
|
|
7
8
|
export { BranchSpawnRule } from "./config/BranchSpawnRule.js";
|
|
8
9
|
export { FoliageSpawnRule } from "./config/FoliageSpawnRule.js";
|
|
@@ -22,6 +23,7 @@ export { make_tree_species_preset } from "./presets/make_tree_species_preset.js"
|
|
|
22
23
|
export { TreeSkeleton } from "./skeleton/TreeSkeleton.js";
|
|
23
24
|
export { spine_frame_double_reflection } from "./skeleton/spine_frame_double_reflection.js";
|
|
24
25
|
export { tree_skeleton_grow } from "./skeleton/tree_skeleton_grow.js";
|
|
26
|
+
export { tree_skeleton_grow_framework } from "./skeleton/tree_skeleton_grow_framework.js";
|
|
25
27
|
export { tree_skeleton_compute_pipe_radii } from "./skeleton/tree_skeleton_compute_pipe_radii.js";
|
|
26
28
|
export { tree_skeleton_assign_skin_joints } from "./skeleton/tree_skeleton_assign_skin_joints.js";
|
|
27
29
|
export { branch_collar_project } from "./mesh/branch_collar_project.js";
|
|
@@ -52,5 +54,6 @@ export { tree_mesh_build_bark, geometry_obtain_joints_attribute } from "./mesh/t
|
|
|
52
54
|
export { FoliageAtlasCutout, CUTOUT_HULL_VERTEX_COUNT } from "./material/FoliageAtlasCutout.js";
|
|
53
55
|
export { foliage_tile_layout, foliage_tile_raster } from "./material/foliage_tile.js";
|
|
54
56
|
export { leaf_geometry, needle_shoot_geometry } from "./material/leaf_geometry.js";
|
|
57
|
+
export { TreeSpeciesCache, TREE_SPECIES_CACHE } from "./asset/TreeSpeciesCache.js";
|
|
55
58
|
export { place_tree, unplace_tree } from "./asset/place_tree.js";
|
|
56
59
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -3,6 +3,7 @@ export { PhyllotaxisMode } from "./config/PhyllotaxisMode.js";
|
|
|
3
3
|
export { FoliageCardType } from "./config/FoliageCardType.js";
|
|
4
4
|
export { FoliageBarkType } from "./config/FoliageBarkType.js";
|
|
5
5
|
export { TreePreset } from "./config/TreePreset.js";
|
|
6
|
+
export { TreeGrowth } from "./config/TreeGrowth.js";
|
|
6
7
|
export { BranchGeneratorConfig } from "./config/BranchGeneratorConfig.js";
|
|
7
8
|
export { BranchSpawnRule } from "./config/BranchSpawnRule.js";
|
|
8
9
|
export { FoliageSpawnRule } from "./config/FoliageSpawnRule.js";
|
|
@@ -25,6 +26,7 @@ export { TreeSkeleton } from "./skeleton/TreeSkeleton.js";
|
|
|
25
26
|
export { crown_envelope_evaluate, crown_envelope_sdf } from "./skeleton/crown_envelope_evaluate.js";
|
|
26
27
|
export { spine_frame_double_reflection } from "./skeleton/spine_frame_double_reflection.js";
|
|
27
28
|
export { tree_skeleton_grow } from "./skeleton/tree_skeleton_grow.js";
|
|
29
|
+
export { tree_skeleton_grow_framework } from "./skeleton/tree_skeleton_grow_framework.js";
|
|
28
30
|
export { tree_skeleton_compute_pipe_radii } from "./skeleton/tree_skeleton_compute_pipe_radii.js";
|
|
29
31
|
export { tree_skeleton_assign_skin_joints } from "./skeleton/tree_skeleton_assign_skin_joints.js";
|
|
30
32
|
|
|
@@ -54,6 +56,7 @@ export { FoliageWindSystem } from "../../engine/graphics3/FoliageWindSystem.js";
|
|
|
54
56
|
|
|
55
57
|
export { TreeLODAsset } from "./asset/TreeLODAsset.js";
|
|
56
58
|
export { TreeAsset } from "./asset/TreeAsset.js";
|
|
59
|
+
export { TreeSpeciesCache, TREE_SPECIES_CACHE } from "./asset/TreeSpeciesCache.js";
|
|
57
60
|
export { generate_tree } from "./asset/generate_tree.js";
|
|
58
61
|
export { place_tree, unplace_tree } from "./asset/place_tree.js";
|
|
59
62
|
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
* @property {number} shoot_length length of shoot a needle-shoot tile draws (m), 0 for a leaf
|
|
12
12
|
* @property {number} outline the mature organ's finest feature of shape (m), its margin's teeth aside (`LeafGeometry`)
|
|
13
13
|
* @property {number} texel the tile's texel (m): `card_size / resolution`
|
|
14
|
-
* @property {number} legible_texel the coarsest texel (m) a cluster card
|
|
15
|
-
* the leaf from another seen whole: its outline's finest feature
|
|
16
|
-
* as a stem is, `STEM_TEXELS` across its width
|
|
14
|
+
* @property {number} legible_texel the coarsest texel (m) a cluster card draws the organ at while the tree's atlas holds
|
|
15
|
+
* its cover, as coarse as still tells the leaf from another seen whole: its outline's finest feature
|
|
16
|
+
* `FEATURE_TEXELS` across; a needle, a line, as a stem is, `STEM_TEXELS` across its width
|
|
17
17
|
*/
|
|
18
18
|
/**
|
|
19
19
|
* Maturity variants of a species' foliage atlas.
|
|
@@ -90,9 +90,9 @@ export type FoliageTileLayout = {
|
|
|
90
90
|
*/
|
|
91
91
|
texel: number;
|
|
92
92
|
/**
|
|
93
|
-
* the coarsest texel (m) a cluster card
|
|
94
|
-
* the leaf from another seen whole: its outline's finest feature
|
|
95
|
-
* as a stem is, `STEM_TEXELS` across its width
|
|
93
|
+
* the coarsest texel (m) a cluster card draws the organ at while the tree's atlas holds
|
|
94
|
+
* its cover, as coarse as still tells the leaf from another seen whole: its outline's finest feature
|
|
95
|
+
* `FEATURE_TEXELS` across; a needle, a line, as a stem is, `STEM_TEXELS` across its width
|
|
96
96
|
*/
|
|
97
97
|
legible_texel: number;
|
|
98
98
|
};
|
|
@@ -60,9 +60,9 @@ const COVERAGE_ROWS = 4;
|
|
|
60
60
|
* @property {number} shoot_length length of shoot a needle-shoot tile draws (m), 0 for a leaf
|
|
61
61
|
* @property {number} outline the mature organ's finest feature of shape (m), its margin's teeth aside (`LeafGeometry`)
|
|
62
62
|
* @property {number} texel the tile's texel (m): `card_size / resolution`
|
|
63
|
-
* @property {number} legible_texel the coarsest texel (m) a cluster card
|
|
64
|
-
* the leaf from another seen whole: its outline's finest feature
|
|
65
|
-
* as a stem is, `STEM_TEXELS` across its width
|
|
63
|
+
* @property {number} legible_texel the coarsest texel (m) a cluster card draws the organ at while the tree's atlas holds
|
|
64
|
+
* its cover, as coarse as still tells the leaf from another seen whole: its outline's finest feature
|
|
65
|
+
* `FEATURE_TEXELS` across; a needle, a line, as a stem is, `STEM_TEXELS` across its width
|
|
66
66
|
*/
|
|
67
67
|
|
|
68
68
|
/**
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The cluster cards of `skeleton` at each of `lods`' errors, all drawn with a few cuts' tiles in one atlas, no larger
|
|
3
|
+
* than `budget` (`tree_cluster_representatives`), baked from the leaves and twigs those cuts grew (`tree_cluster_bake`).
|
|
4
|
+
* A tree's own LODs are cut this way, and so are a species' prototypes.
|
|
5
|
+
*
|
|
6
|
+
* @param {import("../skeleton/TreeSkeleton.js").TreeSkeleton} skeleton
|
|
7
|
+
* @param {import("../config/TreeSpeciesConfig.js").TreeSpeciesConfig} species
|
|
8
|
+
* @param {import("../mesh/foliage_collect_attachments.js").FoliageAttachmentSet} attachments
|
|
9
|
+
* @param {import("../../../shade/renderer/geometry/Geometry.js").Geometry} leaves every leaf's card, in attachment order
|
|
10
|
+
* @param {import("../config/TreeLODConfig.js").TreeLODConfig[]} lods finest first
|
|
11
|
+
* @param {import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial} leaf_material the
|
|
12
|
+
* leaves' material, whose textures the cuts are baked from
|
|
13
|
+
* @param {number} budget bytes of atlas, its maps' base levels
|
|
14
|
+
* @param {Map<number, ReturnType<typeof tree_mesh_compute_branch_rings>>} [planned] the bark's rings the caller has
|
|
15
|
+
* already planned, by error: taken rather than planned again
|
|
16
|
+
* @returns {{lods: Array<{clusters: import("../mesh/tree_clusters.js").TreeCluster[], cards: import("../mesh/tree_cluster_cards.js").TreeClusterCard[], error: number}>, representatives: *, bake: import("./tree_cluster_bake.js").TreeClusterBake, material: import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial}}
|
|
17
|
+
*/
|
|
18
|
+
export function tree_cluster_atlas(skeleton: import("../skeleton/TreeSkeleton.js").TreeSkeleton, species: import("../config/TreeSpeciesConfig.js").TreeSpeciesConfig, attachments: import("../mesh/foliage_collect_attachments.js").FoliageAttachmentSet, leaves: import("../../../shade/renderer/geometry/Geometry.js").Geometry, lods: import("../config/TreeLODConfig.js").TreeLODConfig[], leaf_material: import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial, budget: number, planned?: Map<number, Map<number, {
|
|
19
|
+
cx: number;
|
|
20
|
+
cy: number;
|
|
21
|
+
cz: number;
|
|
22
|
+
r: number;
|
|
23
|
+
m: number;
|
|
24
|
+
t_norm: number;
|
|
25
|
+
flute_amp: number;
|
|
26
|
+
j0: number;
|
|
27
|
+
j1: number;
|
|
28
|
+
j2: number;
|
|
29
|
+
j3: number;
|
|
30
|
+
w0: number;
|
|
31
|
+
w1: number;
|
|
32
|
+
w2: number;
|
|
33
|
+
w3: number;
|
|
34
|
+
}[]>>): {
|
|
35
|
+
lods: Array<{
|
|
36
|
+
clusters: import("../mesh/tree_clusters.js").TreeCluster[];
|
|
37
|
+
cards: import("../mesh/tree_cluster_cards.js").TreeClusterCard[];
|
|
38
|
+
error: number;
|
|
39
|
+
}>;
|
|
40
|
+
representatives: any;
|
|
41
|
+
bake: import("./tree_cluster_bake.js").TreeClusterBake;
|
|
42
|
+
material: import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial;
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=tree_cluster_atlas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree_cluster_atlas.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/material/tree_cluster_atlas.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;GAgBG;AACH,6CAZW,OAAO,6BAA6B,EAAE,YAAY,WAClD,OAAO,gCAAgC,EAAE,iBAAiB,eAC1D,OAAO,wCAAwC,EAAE,oBAAoB,UACrE,OAAO,8CAA8C,EAAE,QAAQ,QAC/D,OAAO,4BAA4B,EAAE,aAAa,EAAE,iBACpD,OAAO,2DAA2D,EAAE,qBAAqB,UAEzF,MAAM,YACN,IAAI,MAAM;;;;;;;;;;;;;;;;KAAoD,GAE5D;IAAC,IAAI,EAAE,MAAM;QAAC,QAAQ,EAAE,OAAO,0BAA0B,EAAE,WAAW,EAAE,CAAC;QAAC,KAAK,EAAE,OAAO,+BAA+B,EAAE,eAAe,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IAAC,eAAe,MAAI;IAAC,IAAI,EAAE,OAAO,wBAAwB,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,OAAO,2DAA2D,EAAE,qBAAqB,CAAA;CAAC,CAazV"}
|