@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
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
2
|
import { convex_hull_monotone_2d } from "../../../core/geom/2d/convex-hull/convex_hull_monotone_2d.js";
|
|
3
3
|
import { StandardAttributes } from "../../../shade/renderer/geometry/StandardAttributes.js";
|
|
4
|
-
import { tree_mesh_build_foliage } from "../mesh/tree_mesh_build_foliage.js";
|
|
5
4
|
|
|
6
5
|
/**
|
|
7
6
|
* Mean area (m^2) a tree's drawn envelope shows from the side, over every azimuth: the envelope is the convex hull of
|
|
@@ -81,9 +80,11 @@ export const TREE_RENDER_COST_CEILING = { triangle_density: [761.2, 412.3, 96.2]
|
|
|
81
80
|
* @param {import("../skeleton/TreeSkeleton.js").TreeSkeleton} skeleton
|
|
82
81
|
* @param {import("../../../shade/renderer/geometry/Geometry.js").Geometry|null} leaves every leaf's card
|
|
83
82
|
* (`tree_mesh_build_foliage`), `null` for a leafless tree
|
|
83
|
+
* @param {Float32Array|null} [carried] the cards of the leaves it draws but does not hold, its shoot prototypes'
|
|
84
|
+
* (`tree_shoot_instance_leaves`): positions
|
|
84
85
|
* @returns {number}
|
|
85
86
|
*/
|
|
86
|
-
export function tree_grown_side_area(skeleton, leaves) {
|
|
87
|
+
export function tree_grown_side_area(skeleton, leaves, carried = null) {
|
|
87
88
|
const nodes = new Float32Array(skeleton.node_count * 3);
|
|
88
89
|
for (let v = 0; v < skeleton.node_count; v++) {
|
|
89
90
|
skeleton.node_read_position(nodes, v * 3, v);
|
|
@@ -92,6 +93,9 @@ export function tree_grown_side_area(skeleton, leaves) {
|
|
|
92
93
|
if (leaves !== null) {
|
|
93
94
|
shown.push(leaves.getAttribute(StandardAttributes.Position).data);
|
|
94
95
|
}
|
|
96
|
+
if (carried !== null && carried.length > 0) {
|
|
97
|
+
shown.push(carried);
|
|
98
|
+
}
|
|
95
99
|
return tree_envelope_side_area(shown);
|
|
96
100
|
}
|
|
97
101
|
|
|
@@ -108,7 +112,7 @@ function triangle_count(geometry) {
|
|
|
108
112
|
|
|
109
113
|
/**
|
|
110
114
|
* @typedef {Object} TreeRenderCost
|
|
111
|
-
* @property {number} side_area m^2, `tree_grown_side_area`: what the tree grew shows from the side
|
|
115
|
+
* @property {number} side_area m^2, `tree_grown_side_area`: what the tree grew shows from the side (`TreeAsset.side_area`)
|
|
112
116
|
* @property {number[]} triangles bark and foliage triangles of each LOD
|
|
113
117
|
* @property {number[]} triangle_density each LOD's triangles per m^2 of `side_area`
|
|
114
118
|
* @property {number[]} joints each LOD's wind joints
|
|
@@ -127,10 +131,7 @@ function triangle_count(geometry) {
|
|
|
127
131
|
export function tree_render_cost(asset) {
|
|
128
132
|
assert.greaterThan(asset.lods.length, 0, 'asset.lods.length');
|
|
129
133
|
|
|
130
|
-
const
|
|
131
|
-
? tree_mesh_build_foliage(asset.skeleton, asset.attachments, asset.config, asset.foliage_cutout)
|
|
132
|
-
: null;
|
|
133
|
-
const side_area = tree_grown_side_area(asset.skeleton, leaves);
|
|
134
|
+
const side_area = asset.side_area;
|
|
134
135
|
assert.greaterThan(side_area, 0, 'side_area');
|
|
135
136
|
|
|
136
137
|
const triangles = asset.lods.map(lod => triangle_count(lod.bark_geometry) + triangle_count(lod.foliage_geometry));
|
|
@@ -22,6 +22,23 @@ export class TreeAsset {
|
|
|
22
22
|
* @type {import("../mesh/foliage_collect_attachments.js").FoliageAttachmentSet}
|
|
23
23
|
*/
|
|
24
24
|
attachments: import("../mesh/foliage_collect_attachments.js").FoliageAttachmentSet;
|
|
25
|
+
/**
|
|
26
|
+
* What the tree grew shows from the side, m^2 (`tree_grown_side_area`): its wood and every leaf it draws, its
|
|
27
|
+
* shoot prototypes' included. Its LODs spend against it (`tree_lod_plan`, `tree_render_cost`).
|
|
28
|
+
* @type {number}
|
|
29
|
+
*/
|
|
30
|
+
side_area: number;
|
|
31
|
+
/**
|
|
32
|
+
* The species' shoot prototypes it draws, when grown by its generator graph (`tree_shoot_prototypes`), else `null`:
|
|
33
|
+
* every leaf it draws is theirs, and `attachments` holds none.
|
|
34
|
+
* @type {import("./tree_shoot_prototypes.js").TreeShootPrototypes|null}
|
|
35
|
+
*/
|
|
36
|
+
shoot_prototypes: import("./tree_shoot_prototypes.js").TreeShootPrototypes | null;
|
|
37
|
+
/**
|
|
38
|
+
* Where it draws them: one on each of its carriers (`tree_shoot_instances`), else `null`.
|
|
39
|
+
* @type {import("./tree_shoot_instances.js").TreeShootInstance[]|null}
|
|
40
|
+
*/
|
|
41
|
+
shoot_instances: import("./tree_shoot_instances.js").TreeShootInstance[] | null;
|
|
25
42
|
/**
|
|
26
43
|
* The wind joints of all the wood as grown, which `attachments` are bound to; no LOD draws it, each has its own
|
|
27
44
|
* (`TreeLODAsset.skin_info`).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeAsset.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/asset/TreeAsset.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH;IACI;;;OAGG;IACH,QAFU,OAAO,gCAAgC,EAAE,iBAAiB,CAEtD;IAEd;;;OAGG;IACH,UAFU,OAAO,6BAA6B,EAAE,YAAY,CAE5C;IAEhB;;;OAGG;IACH,aAFU,OAAO,wCAAwC,EAAE,oBAAoB,CAE5D;IAEnB;;;;OAIG;IACH,WAFU,6GAAsG,CAE/F;IAEjB;;;OAGG;IACH,eAFU,OAAO,2DAA2D,EAAE,qBAAqB,CAE9E;IAErB;;;OAGG;IACH,kBAFU,OAAO,2DAA2D,EAAE,qBAAqB,CAE3E;IAExB;;;OAGG;IACH,gBAFU,OAAO,mCAAmC,EAAE,kBAAkB,GAAC,IAAI,CAEvD;IAEtB;;;OAGG;IACH,MAFU,OAAO,mBAAmB,EAAE,YAAY,EAAE,CAE1C;IAEV;;;OAGG;IACH,qFAEC;IAED;;;OAGG;IACH,wFAEC;IAED;;;OAGG;IACH,2GAEC;IAED;;;OAGG;IACH,8GAEC;IAED;;;OAGG;IACH,qGAEC;IAED;;;OAGG;IACH,wFAEC;IAED;;;OAGG;IACH,0EAEC;IAGL;;;OAGG;IACH,sBAFU,OAAO,CAEc;CAN9B"}
|
|
1
|
+
{"version":3,"file":"TreeAsset.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/asset/TreeAsset.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH;IACI;;;OAGG;IACH,QAFU,OAAO,gCAAgC,EAAE,iBAAiB,CAEtD;IAEd;;;OAGG;IACH,UAFU,OAAO,6BAA6B,EAAE,YAAY,CAE5C;IAEhB;;;OAGG;IACH,aAFU,OAAO,wCAAwC,EAAE,oBAAoB,CAE5D;IAEnB;;;;OAIG;IACH,WAFU,MAAM,CAEF;IAEd;;;;OAIG;IACH,kBAFU,OAAO,4BAA4B,EAAE,mBAAmB,GAAC,IAAI,CAE/C;IAExB;;;OAGG;IACH,iBAFU,OAAO,2BAA2B,EAAE,iBAAiB,EAAE,GAAC,IAAI,CAE/C;IAEvB;;;;OAIG;IACH,WAFU,6GAAsG,CAE/F;IAEjB;;;OAGG;IACH,eAFU,OAAO,2DAA2D,EAAE,qBAAqB,CAE9E;IAErB;;;OAGG;IACH,kBAFU,OAAO,2DAA2D,EAAE,qBAAqB,CAE3E;IAExB;;;OAGG;IACH,gBAFU,OAAO,mCAAmC,EAAE,kBAAkB,GAAC,IAAI,CAEvD;IAEtB;;;OAGG;IACH,MAFU,OAAO,mBAAmB,EAAE,YAAY,EAAE,CAE1C;IAEV;;;OAGG;IACH,qFAEC;IAED;;;OAGG;IACH,wFAEC;IAED;;;OAGG;IACH,2GAEC;IAED;;;OAGG;IACH,8GAEC;IAED;;;OAGG;IACH,qGAEC;IAED;;;OAGG;IACH,wFAEC;IAED;;;OAGG;IACH,0EAEC;IAGL;;;OAGG;IACH,sBAFU,OAAO,CAEc;CAN9B"}
|
|
@@ -25,6 +25,26 @@ export class TreeAsset {
|
|
|
25
25
|
*/
|
|
26
26
|
attachments = null;
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* What the tree grew shows from the side, m^2 (`tree_grown_side_area`): its wood and every leaf it draws, its
|
|
30
|
+
* shoot prototypes' included. Its LODs spend against it (`tree_lod_plan`, `tree_render_cost`).
|
|
31
|
+
* @type {number}
|
|
32
|
+
*/
|
|
33
|
+
side_area = 0;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The species' shoot prototypes it draws, when grown by its generator graph (`tree_shoot_prototypes`), else `null`:
|
|
37
|
+
* every leaf it draws is theirs, and `attachments` holds none.
|
|
38
|
+
* @type {import("./tree_shoot_prototypes.js").TreeShootPrototypes|null}
|
|
39
|
+
*/
|
|
40
|
+
shoot_prototypes = null;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Where it draws them: one on each of its carriers (`tree_shoot_instances`), else `null`.
|
|
44
|
+
* @type {import("./tree_shoot_instances.js").TreeShootInstance[]|null}
|
|
45
|
+
*/
|
|
46
|
+
shoot_instances = null;
|
|
47
|
+
|
|
28
48
|
/**
|
|
29
49
|
* The wind joints of all the wood as grown, which `attachments` are bound to; no LOD draws it, each has its own
|
|
30
50
|
* (`TreeLODAsset.skin_info`).
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What every tree of a species shares, whatever its seed or how it grew: its bark material, its leaf atlas and its
|
|
3
|
+
* shoot prototypes, each made once, when a tree first asks for it (`generate_tree`'s `cache`). The caller owns it,
|
|
4
|
+
* and what it holds lives as long as it does.
|
|
5
|
+
*
|
|
6
|
+
* Each is keyed on exactly what it is made from: the bark material on the species' `bark_material`, the leaf atlas on
|
|
7
|
+
* its `foliage` and `foliage_material`, made from a species holding those alone, and the prototypes on the whole
|
|
8
|
+
* species but its seed, as they grow on its own framework. Trees that differ in nothing one is made from share it.
|
|
9
|
+
*/
|
|
10
|
+
export class TreeSpeciesCache {
|
|
11
|
+
/**
|
|
12
|
+
* Lets go of everything held: the trees already made keep what they drew with.
|
|
13
|
+
*/
|
|
14
|
+
clear(): void;
|
|
15
|
+
/**
|
|
16
|
+
* Number of bark materials held.
|
|
17
|
+
* @returns {number}
|
|
18
|
+
*/
|
|
19
|
+
get bark_count(): number;
|
|
20
|
+
/**
|
|
21
|
+
* Number of leaf atlases held.
|
|
22
|
+
* @returns {number}
|
|
23
|
+
*/
|
|
24
|
+
get leaf_count(): number;
|
|
25
|
+
/**
|
|
26
|
+
* Number of species whose shoot prototypes are held.
|
|
27
|
+
* @returns {number}
|
|
28
|
+
*/
|
|
29
|
+
get prototype_count(): number;
|
|
30
|
+
/**
|
|
31
|
+
* The bark material of `species`, the same noise for every bark (`make_bark_material`'s own seed).
|
|
32
|
+
*
|
|
33
|
+
* @param {TreeSpeciesConfig} species
|
|
34
|
+
* @returns {import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial}
|
|
35
|
+
*/
|
|
36
|
+
bark_material(species: TreeSpeciesConfig): import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial;
|
|
37
|
+
/**
|
|
38
|
+
* The leaf atlas of `species`, in the species' leaf material, which a tree clones to tint its own, and the atlas's
|
|
39
|
+
* shape.
|
|
40
|
+
*
|
|
41
|
+
* @param {TreeSpeciesConfig} species
|
|
42
|
+
* @returns {{material: import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial, cutout: FoliageAtlasCutout}}
|
|
43
|
+
*/
|
|
44
|
+
leaves(species: TreeSpeciesConfig): {
|
|
45
|
+
material: import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial;
|
|
46
|
+
cutout: FoliageAtlasCutout;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* The shoot prototypes of `species` (`tree_shoot_prototypes`), whatever its seed, their cuts baked from the leaves
|
|
50
|
+
* of `material`: its own leaf atlas (`leaves`) by default, or a caller's own material, whose atlas has no fitted
|
|
51
|
+
* shape (`cutout` null).
|
|
52
|
+
*
|
|
53
|
+
* @param {TreeSpeciesConfig} species
|
|
54
|
+
* @param {import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial|null} [material]
|
|
55
|
+
* @param {FoliageAtlasCutout|null} [cutout] the shape of `material`'s atlas
|
|
56
|
+
* @returns {import("./tree_shoot_prototypes.js").TreeShootPrototypes}
|
|
57
|
+
*/
|
|
58
|
+
prototypes(species: TreeSpeciesConfig, material?: import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial | null, cutout?: FoliageAtlasCutout | null): import("./tree_shoot_prototypes.js").TreeShootPrototypes;
|
|
59
|
+
#private;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The cache `generate_tree` shares between the trees it is asked for without one of their own: each species' materials and
|
|
63
|
+
* shoot prototypes are made once, the first time a tree asks, and held until `clear`ed.
|
|
64
|
+
* @type {TreeSpeciesCache}
|
|
65
|
+
*/
|
|
66
|
+
export const TREE_SPECIES_CACHE: TreeSpeciesCache;
|
|
67
|
+
import { TreeSpeciesConfig } from "../config/TreeSpeciesConfig.js";
|
|
68
|
+
import { FoliageAtlasCutout } from "../material/FoliageAtlasCutout.js";
|
|
69
|
+
//# sourceMappingURL=TreeSpeciesCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeSpeciesCache.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/asset/TreeSpeciesCache.js"],"names":[],"mappings":"AAOA;;;;;;;;GAQG;AACH;IAoBI;;OAEG;IACH,cAKC;IAED;;;OAGG;IACH,yBAEC;IAED;;;OAGG;IACH,yBAEC;IAED;;;OAGG;IACH,8BAEC;IAED;;;;;OAKG;IACH,uBAHW,iBAAiB,GACf,OAAO,2DAA2D,EAAE,qBAAqB,CAUrG;IAED;;;;;;OAMG;IACH,gBAHW,iBAAiB,GACf;QAAC,QAAQ,EAAE,OAAO,2DAA2D,EAAE,qBAAqB,CAAC;QAAC,MAAM,EAAE,kBAAkB,CAAA;KAAC,CAe7I;IAED;;;;;;;;;OASG;IACH,oBALW,iBAAiB,aACjB,OAAO,2DAA2D,EAAE,qBAAqB,GAAC,IAAI,WAC9F,kBAAkB,GAAC,IAAI,GACrB,OAAO,4BAA4B,EAAE,mBAAmB,CAsBpE;;CACJ;AAED;;;;GAIG;AACH,iCAFU,gBAAgB,CAE+B;kCAjJvB,gCAAgC;mCAC/B,mCAAmC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { HashMap } from "../../../core/collection/map/HashMap.js";
|
|
2
|
+
import { TreeSpeciesConfig } from "../config/TreeSpeciesConfig.js";
|
|
3
|
+
import { FoliageAtlasCutout } from "../material/FoliageAtlasCutout.js";
|
|
4
|
+
import { make_bark_material } from "../material/make_bark_material.js";
|
|
5
|
+
import { make_foliage_material } from "../material/make_foliage_material.js";
|
|
6
|
+
import { tree_shoot_prototypes } from "./tree_shoot_prototypes.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* What every tree of a species shares, whatever its seed or how it grew: its bark material, its leaf atlas and its
|
|
10
|
+
* shoot prototypes, each made once, when a tree first asks for it (`generate_tree`'s `cache`). The caller owns it,
|
|
11
|
+
* and what it holds lives as long as it does.
|
|
12
|
+
*
|
|
13
|
+
* Each is keyed on exactly what it is made from: the bark material on the species' `bark_material`, the leaf atlas on
|
|
14
|
+
* its `foliage` and `foliage_material`, made from a species holding those alone, and the prototypes on the whole
|
|
15
|
+
* species but its seed, as they grow on its own framework. Trees that differ in nothing one is made from share it.
|
|
16
|
+
*/
|
|
17
|
+
export class TreeSpeciesCache {
|
|
18
|
+
/**
|
|
19
|
+
* Each bark material, by the `bark_material` it is made from.
|
|
20
|
+
* @type {HashMap<import("../config/BarkMaterialConfig.js").BarkMaterialConfig, import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial>}
|
|
21
|
+
*/
|
|
22
|
+
#barks = new HashMap();
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Each leaf atlas, by the species it is made from: one holding its `foliage` and `foliage_material` alone.
|
|
26
|
+
* @type {HashMap<TreeSpeciesConfig, {material: import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial, cutout: FoliageAtlasCutout}>}
|
|
27
|
+
*/
|
|
28
|
+
#leaves = new HashMap();
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Each species' shoot prototypes, by the species at their seed, then by the leaf material they are drawn with.
|
|
32
|
+
* @type {HashMap<TreeSpeciesConfig, Map<import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial, import("./tree_shoot_prototypes.js").TreeShootPrototypes>>}
|
|
33
|
+
*/
|
|
34
|
+
#prototypes = new HashMap();
|
|
35
|
+
#prototype_count = 0;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Lets go of everything held: the trees already made keep what they drew with.
|
|
39
|
+
*/
|
|
40
|
+
clear() {
|
|
41
|
+
this.#barks.clear();
|
|
42
|
+
this.#leaves.clear();
|
|
43
|
+
this.#prototypes.clear();
|
|
44
|
+
this.#prototype_count = 0;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Number of bark materials held.
|
|
49
|
+
* @returns {number}
|
|
50
|
+
*/
|
|
51
|
+
get bark_count() {
|
|
52
|
+
return this.#barks.size;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Number of leaf atlases held.
|
|
57
|
+
* @returns {number}
|
|
58
|
+
*/
|
|
59
|
+
get leaf_count() {
|
|
60
|
+
return this.#leaves.size;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Number of species whose shoot prototypes are held.
|
|
65
|
+
* @returns {number}
|
|
66
|
+
*/
|
|
67
|
+
get prototype_count() {
|
|
68
|
+
return this.#prototype_count;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The bark material of `species`, the same noise for every bark (`make_bark_material`'s own seed).
|
|
73
|
+
*
|
|
74
|
+
* @param {TreeSpeciesConfig} species
|
|
75
|
+
* @returns {import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial}
|
|
76
|
+
*/
|
|
77
|
+
bark_material(species) {
|
|
78
|
+
let material = this.#barks.get(species.bark_material);
|
|
79
|
+
if (material === undefined) {
|
|
80
|
+
const held = species.bark_material.clone();
|
|
81
|
+
material = make_bark_material(held);
|
|
82
|
+
this.#barks.set(held, material);
|
|
83
|
+
}
|
|
84
|
+
return material;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* The leaf atlas of `species`, in the species' leaf material, which a tree clones to tint its own, and the atlas's
|
|
89
|
+
* shape.
|
|
90
|
+
*
|
|
91
|
+
* @param {TreeSpeciesConfig} species
|
|
92
|
+
* @returns {{material: import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial, cutout: FoliageAtlasCutout}}
|
|
93
|
+
*/
|
|
94
|
+
leaves(species) {
|
|
95
|
+
// the species as far as its leaves go, and no further: whatever the atlas reads, it reads from the key
|
|
96
|
+
const key = new TreeSpeciesConfig();
|
|
97
|
+
key.seed = 0;
|
|
98
|
+
key.foliage.copy(species.foliage);
|
|
99
|
+
key.foliage_material.copy(species.foliage_material);
|
|
100
|
+
let entry = this.#leaves.get(key);
|
|
101
|
+
if (entry === undefined) {
|
|
102
|
+
const cutout = new FoliageAtlasCutout();
|
|
103
|
+
entry = { material: make_foliage_material(key, cutout), cutout };
|
|
104
|
+
this.#leaves.set(key, entry);
|
|
105
|
+
}
|
|
106
|
+
return entry;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* The shoot prototypes of `species` (`tree_shoot_prototypes`), whatever its seed, their cuts baked from the leaves
|
|
111
|
+
* of `material`: its own leaf atlas (`leaves`) by default, or a caller's own material, whose atlas has no fitted
|
|
112
|
+
* shape (`cutout` null).
|
|
113
|
+
*
|
|
114
|
+
* @param {TreeSpeciesConfig} species
|
|
115
|
+
* @param {import("../../../shade/renderer/material/StandardShadeMaterial.js").StandardShadeMaterial|null} [material]
|
|
116
|
+
* @param {FoliageAtlasCutout|null} [cutout] the shape of `material`'s atlas
|
|
117
|
+
* @returns {import("./tree_shoot_prototypes.js").TreeShootPrototypes}
|
|
118
|
+
*/
|
|
119
|
+
prototypes(species, material = null, cutout = null) {
|
|
120
|
+
if (material === null) {
|
|
121
|
+
const leaves = this.leaves(species);
|
|
122
|
+
material = leaves.material;
|
|
123
|
+
cutout = leaves.cutout;
|
|
124
|
+
}
|
|
125
|
+
const key = species.clone();
|
|
126
|
+
key.seed = 0;
|
|
127
|
+
let by_material = this.#prototypes.get(key);
|
|
128
|
+
if (by_material === undefined) {
|
|
129
|
+
by_material = new Map();
|
|
130
|
+
this.#prototypes.set(key, by_material);
|
|
131
|
+
}
|
|
132
|
+
let prototypes = by_material.get(material);
|
|
133
|
+
if (prototypes === undefined) {
|
|
134
|
+
prototypes = tree_shoot_prototypes(key, material, cutout);
|
|
135
|
+
by_material.set(material, prototypes);
|
|
136
|
+
this.#prototype_count++;
|
|
137
|
+
}
|
|
138
|
+
return prototypes;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* The cache `generate_tree` shares between the trees it is asked for without one of their own: each species' materials and
|
|
144
|
+
* shoot prototypes are made once, the first time a tree asks, and held until `clear`ed.
|
|
145
|
+
* @type {TreeSpeciesCache}
|
|
146
|
+
*/
|
|
147
|
+
export const TREE_SPECIES_CACHE = new TreeSpeciesCache();
|
|
@@ -7,6 +7,16 @@
|
|
|
7
7
|
* - A `TreeSpeciesConfig` instance (`generate_tree(species_config)`).
|
|
8
8
|
* - An options object (`generate_tree({ preset: "birch", seed: 42, crown: { height: 14 }, lod_count: 3 })`).
|
|
9
9
|
*
|
|
10
|
+
* The options object also picks how the tree is grown, `growth` (`TreeGrowth`, by its generator graph unless given):
|
|
11
|
+
* its generator graph's framework with its species' shoot prototypes drawn on it, for most trees; or that framework
|
|
12
|
+
* with every shoot system grown on it, for trees seen up close. Both are drawn by one pipeline. A species is described
|
|
13
|
+
* for the front end that grows it (`make_tree_species_preset`'s `growth`): a preset's name is described for `growth`;
|
|
14
|
+
* a caller's own `TreeSpeciesConfig` is grown as it is, by the generator graph when passed alone, or by `growth` when
|
|
15
|
+
* passed as the options object's `species`. Its `cache`, a
|
|
16
|
+
* `TreeSpeciesCache`, shares each species' bark material, leaf atlas and shoot prototypes between the trees it grows;
|
|
17
|
+
* without one, every call shares `TREE_SPECIES_CACHE`. A caller's own materials (`custom_bark_material`,
|
|
18
|
+
* `custom_foliage_material`) are drawn with instead.
|
|
19
|
+
*
|
|
10
20
|
* Each LOD is the tree drawn to a geometric error (`TreeLODConfig.error`): the finest at which its bark and its
|
|
11
21
|
* foliage, and its wind joints, fit that LOD's `TREE_RENDER_COST_CEILING` over the side area of the leaves and wood
|
|
12
22
|
* the tree grew (`tree_lod_plan`, `tree_grown_side_area`). Its foliage is one card per cluster (`tree_clusters`), each
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate_tree.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/asset/generate_tree.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate_tree.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/asset/generate_tree.js"],"names":[],"mappings":"AAuBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wCAHW,MAAM,GAAC,OAAO,gCAAgC,EAAE,iBAAiB,MAAO,GACtE,SAAS,CA6JrB;0BAlMyB,gBAAgB"}
|
|
@@ -1,16 +1,11 @@
|
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
1
2
|
import { TREE_RENDER_COST_CEILING, tree_grown_side_area } from "../analysis/tree_render_cost.js";
|
|
2
3
|
import { build_tree_wind_rig } from "../animation/build_tree_wind_rig.js";
|
|
3
4
|
import { TREE_LOD_ERROR_FINEST } from "../config/TreeLODConfig.js";
|
|
5
|
+
import { TreeGrowth } from "../config/TreeGrowth.js";
|
|
4
6
|
import { TreePreset } from "../config/TreePreset.js";
|
|
5
|
-
import {
|
|
6
|
-
import { make_bark_material } from "../material/make_bark_material.js";
|
|
7
|
-
import { foliage_material_from_samplers } from "../material/foliage_material_from_samplers.js";
|
|
8
|
-
import { make_foliage_material } from "../material/make_foliage_material.js";
|
|
9
|
-
import { tree_cluster_bake } from "../material/tree_cluster_bake.js";
|
|
7
|
+
import { tree_cluster_atlas } from "../material/tree_cluster_atlas.js";
|
|
10
8
|
import { foliage_collect_attachments } from "../mesh/foliage_collect_attachments.js";
|
|
11
|
-
import { foliage_tile_layout } from "../material/foliage_tile.js";
|
|
12
|
-
import { tree_cluster_cards } from "../mesh/tree_cluster_cards.js";
|
|
13
|
-
import { tree_cluster_representatives } from "../mesh/tree_cluster_representatives.js";
|
|
14
9
|
import { tree_clusters } from "../mesh/tree_clusters.js";
|
|
15
10
|
import { tree_mesh_build_bark, tree_mesh_compute_branch_rings } from "../mesh/tree_mesh_build_bark.js";
|
|
16
11
|
import { tree_mesh_build_clusters } from "../mesh/tree_mesh_build_clusters.js";
|
|
@@ -19,8 +14,11 @@ import { make_tree_species_preset } from "../presets/make_tree_species_preset.js
|
|
|
19
14
|
import { tree_skeleton_assign_skin_joints } from "../skeleton/tree_skeleton_assign_skin_joints.js";
|
|
20
15
|
import { tree_skeleton_bind_skin_joints } from "../skeleton/tree_skeleton_bind_skin_joints.js";
|
|
21
16
|
import { tree_skeleton_grow } from "../skeleton/tree_skeleton_grow.js";
|
|
17
|
+
import { tree_skeleton_grow_framework } from "../skeleton/tree_skeleton_grow_framework.js";
|
|
22
18
|
import { TreeAsset } from "./TreeAsset.js";
|
|
23
19
|
import { TreeLODAsset } from "./TreeLODAsset.js";
|
|
20
|
+
import { TREE_SPECIES_CACHE } from "./TreeSpeciesCache.js";
|
|
21
|
+
import { tree_shoot_instance_card_count, tree_shoot_instance_cards, tree_shoot_instance_leaves, tree_shoot_instances } from "./tree_shoot_instances.js";
|
|
24
22
|
import { tree_lod_plan } from "./tree_lod_plan.js";
|
|
25
23
|
|
|
26
24
|
/**
|
|
@@ -32,6 +30,16 @@ import { tree_lod_plan } from "./tree_lod_plan.js";
|
|
|
32
30
|
* - A `TreeSpeciesConfig` instance (`generate_tree(species_config)`).
|
|
33
31
|
* - An options object (`generate_tree({ preset: "birch", seed: 42, crown: { height: 14 }, lod_count: 3 })`).
|
|
34
32
|
*
|
|
33
|
+
* The options object also picks how the tree is grown, `growth` (`TreeGrowth`, by its generator graph unless given):
|
|
34
|
+
* its generator graph's framework with its species' shoot prototypes drawn on it, for most trees; or that framework
|
|
35
|
+
* with every shoot system grown on it, for trees seen up close. Both are drawn by one pipeline. A species is described
|
|
36
|
+
* for the front end that grows it (`make_tree_species_preset`'s `growth`): a preset's name is described for `growth`;
|
|
37
|
+
* a caller's own `TreeSpeciesConfig` is grown as it is, by the generator graph when passed alone, or by `growth` when
|
|
38
|
+
* passed as the options object's `species`. Its `cache`, a
|
|
39
|
+
* `TreeSpeciesCache`, shares each species' bark material, leaf atlas and shoot prototypes between the trees it grows;
|
|
40
|
+
* without one, every call shares `TREE_SPECIES_CACHE`. A caller's own materials (`custom_bark_material`,
|
|
41
|
+
* `custom_foliage_material`) are drawn with instead.
|
|
42
|
+
*
|
|
35
43
|
* Each LOD is the tree drawn to a geometric error (`TreeLODConfig.error`): the finest at which its bark and its
|
|
36
44
|
* foliage, and its wind joints, fit that LOD's `TREE_RENDER_COST_CEILING` over the side area of the leaves and wood
|
|
37
45
|
* the tree grew (`tree_lod_plan`, `tree_grown_side_area`). Its foliage is one card per cluster (`tree_clusters`), each
|
|
@@ -51,15 +59,21 @@ export function generate_tree(options = {}) {
|
|
|
51
59
|
let eager_meshlets = false;
|
|
52
60
|
let custom_bark_material = null;
|
|
53
61
|
let custom_foliage_material = null;
|
|
62
|
+
// the generator graph unless an options object asks for another
|
|
63
|
+
let growth = TreeGrowth.Graph;
|
|
64
|
+
let cache = null;
|
|
54
65
|
|
|
55
66
|
if (typeof options === "string") {
|
|
56
|
-
config = make_tree_species_preset(options);
|
|
67
|
+
config = make_tree_species_preset(options, {}, growth);
|
|
57
68
|
} else if (options && options.isTreeSpeciesConfig) {
|
|
58
69
|
config = options.clone();
|
|
59
70
|
} else {
|
|
60
71
|
const opts = options || {};
|
|
61
72
|
const preset = opts.preset ?? TreePreset.Oak;
|
|
62
|
-
|
|
73
|
+
growth = opts.growth ?? growth;
|
|
74
|
+
cache = opts.cache ?? null;
|
|
75
|
+
assert.enum(growth, TreeGrowth, "growth");
|
|
76
|
+
config = opts.species?.isTreeSpeciesConfig ? opts.species.clone() : make_tree_species_preset(preset, opts, growth);
|
|
63
77
|
eager_meshlets = Boolean(opts.eager_meshlets);
|
|
64
78
|
if (opts.custom_bark_material && opts.custom_bark_material.isShadeMaterial) {
|
|
65
79
|
custom_bark_material = opts.custom_bark_material;
|
|
@@ -69,13 +83,18 @@ export function generate_tree(options = {}) {
|
|
|
69
83
|
}
|
|
70
84
|
}
|
|
71
85
|
|
|
72
|
-
const skeleton = tree_skeleton_grow(config);
|
|
86
|
+
const skeleton = growth === TreeGrowth.Graph ? tree_skeleton_grow_framework(config) : tree_skeleton_grow(config);
|
|
87
|
+
// what every tree of its species shares, made only where the caller gave none of its own
|
|
88
|
+
const species_cache = cache ?? TREE_SPECIES_CACHE;
|
|
89
|
+
// a tree grown by its generator graph draws its species' shoot prototypes on its carriers
|
|
90
|
+
const prototypes = growth === TreeGrowth.Graph && config.shoot_rules.length > 0
|
|
91
|
+
? species_cache.prototypes(config, custom_foliage_material)
|
|
92
|
+
: null;
|
|
93
|
+
const instances = prototypes !== null ? tree_shoot_instances(skeleton, prototypes) : null;
|
|
73
94
|
// the rig of all the wood as grown, which the leaves as grown are bound to
|
|
74
95
|
const skin_info = tree_skeleton_assign_skin_joints(skeleton, config);
|
|
75
96
|
|
|
76
|
-
const bark_material = custom_bark_material !== null
|
|
77
|
-
? custom_bark_material
|
|
78
|
-
: make_bark_material(config.bark_material, config.seed);
|
|
97
|
+
const bark_material = custom_bark_material !== null ? custom_bark_material : species_cache.bark_material(config);
|
|
79
98
|
|
|
80
99
|
// The atlas's shape sets how many cards a shoot carries and, for hull cards, their outline. A caller's own
|
|
81
100
|
// material has no fitted outline, so its cards cover whole tiles, at the density our atlas would need.
|
|
@@ -84,8 +103,10 @@ export function generate_tree(options = {}) {
|
|
|
84
103
|
if (custom_foliage_material !== null) {
|
|
85
104
|
foliage_material = custom_foliage_material;
|
|
86
105
|
} else if (config.foliage_rules.length > 0) {
|
|
87
|
-
|
|
88
|
-
|
|
106
|
+
// the species' atlas, in a material of the tree's own, which its leaves' tints scale
|
|
107
|
+
const leaves = species_cache.leaves(config);
|
|
108
|
+
foliage_cutout = leaves.cutout;
|
|
109
|
+
foliage_material = leaves.material.clone();
|
|
89
110
|
}
|
|
90
111
|
// The cards anchor on the bark's rings at the finest LOD's error. The LOD search's first step plans the rings at
|
|
91
112
|
// TREE_LOD_ERROR_FINEST with the skeleton still bound to the rig as grown, as here: where the two errors are one,
|
|
@@ -117,8 +138,14 @@ export function generate_tree(options = {}) {
|
|
|
117
138
|
// otherwise be held for as long as any LOD is not
|
|
118
139
|
const has_leaves = attachments.count > 0 && foliage_material !== null;
|
|
119
140
|
const grow_leaves = () => tree_mesh_build_foliage(skeleton, attachments, config, foliage_cutout);
|
|
120
|
-
const
|
|
121
|
-
const
|
|
141
|
+
const draws_prototypes = prototypes !== null && prototypes.atlas !== null;
|
|
142
|
+
const side_area = tree_grown_side_area(skeleton, has_leaves ? grow_leaves() : null,
|
|
143
|
+
instances !== null ? tree_shoot_instance_leaves(skeleton, instances, prototypes) : null);
|
|
144
|
+
asset.side_area = side_area;
|
|
145
|
+
asset.shoot_prototypes = prototypes;
|
|
146
|
+
asset.shoot_instances = instances;
|
|
147
|
+
const plan = tree_lod_plan(skeleton, config, attachments, side_area, config.lods.length, planned,
|
|
148
|
+
instances !== null ? (error) => tree_shoot_instance_card_count(instances, prototypes, error) : null);
|
|
122
149
|
const lod_configs = plan.map((p, i) => {
|
|
123
150
|
const lod_cfg = config.lods[i].clone();
|
|
124
151
|
lod_cfg.error = p.error;
|
|
@@ -130,17 +157,8 @@ export function generate_tree(options = {}) {
|
|
|
130
157
|
let shared = null;
|
|
131
158
|
const cluster_atlas = () => {
|
|
132
159
|
if (shared === null) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
const clusters = tree_clusters(skeleton, attachments, tree_mesh_compute_branch_rings(skeleton, config, lod_cfg));
|
|
136
|
-
return { clusters, cards: tree_cluster_cards(skeleton, attachments, leaves, clusters), error: lod_cfg.error };
|
|
137
|
-
});
|
|
138
|
-
const tiles = foliage_tile_layout(config);
|
|
139
|
-
const representatives = tree_cluster_representatives(skeleton, attachments, leaves, lods, tiles.texel,
|
|
140
|
-
tiles.legible_texel, TREE_RENDER_COST_CEILING.texture_density * side_area);
|
|
141
|
-
const bake = tree_cluster_bake(skeleton, config, representatives.cards, attachments, leaves, foliage_material, representatives.texels);
|
|
142
|
-
const material = foliage_material_from_samplers(bake.albedo, bake.normal, bake.orm, "foliage_clusters");
|
|
143
|
-
shared = { lods, representatives, bake, material };
|
|
160
|
+
shared = tree_cluster_atlas(skeleton, config, attachments, grow_leaves(), lod_configs, foliage_material,
|
|
161
|
+
TREE_RENDER_COST_CEILING.texture_density * side_area);
|
|
144
162
|
}
|
|
145
163
|
return shared;
|
|
146
164
|
};
|
|
@@ -157,6 +175,16 @@ export function generate_tree(options = {}) {
|
|
|
157
175
|
return tree_mesh_build_bark(skeleton, config, lod_cfg);
|
|
158
176
|
},
|
|
159
177
|
() => {
|
|
178
|
+
if (instances !== null) {
|
|
179
|
+
if (!draws_prototypes) return null;
|
|
180
|
+
// its prototypes' cuts at its error, on its own rig
|
|
181
|
+
tree_skeleton_bind_skin_joints(skeleton, lod_skin);
|
|
182
|
+
const rings = tree_mesh_compute_branch_rings(skeleton, config, lod_cfg);
|
|
183
|
+
const { clusters, cards, placement } = tree_shoot_instance_cards(skeleton, rings, instances, prototypes, lod_cfg.error);
|
|
184
|
+
const geometry = tree_mesh_build_clusters(skeleton, config, clusters, cards, placement, prototypes.atlas.bake);
|
|
185
|
+
if (geometry === null) return null;
|
|
186
|
+
return { geometry, material: prototypes.atlas.material };
|
|
187
|
+
}
|
|
160
188
|
if (!has_leaves) return null;
|
|
161
189
|
tree_skeleton_bind_skin_joints(skeleton, lod_skin);
|
|
162
190
|
const clusters = tree_clusters(skeleton, attachments, tree_mesh_compute_branch_rings(skeleton, config, lod_cfg));
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @param {import("../../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext} scene_context
|
|
12
12
|
* @param {import("../../../engine/ecs/EntityComponentDataset.js").EntityComponentDataset} dataset
|
|
13
|
-
* @param {Object} [options={}]
|
|
13
|
+
* @param {Object} [options={}] without a `tree` or a `prefab`, the tree is grown from these by `generate_tree` (its
|
|
14
|
+
* `preset`, `seed`, `growth`, `cache` and the rest)
|
|
14
15
|
* @param {import("./TreeAsset.js").TreeAsset} [options.tree] pre-generated `TreeAsset`
|
|
15
16
|
* @param {import("../../../engine/graphics3/prefab/Prefab.js").Prefab} [options.prefab] pre-compiled `Prefab`
|
|
16
17
|
* @param {number} [options.lod=0] LOD index when placing from `TreeAsset`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"place_tree.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/asset/place_tree.js"],"names":[],"mappings":"AASA
|
|
1
|
+
{"version":3,"file":"place_tree.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/asset/place_tree.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,0CAzBW,OAAO,kDAAkD,EAAE,eAAe,WAC1E,OAAO,+CAA+C,EAAE,sBAAsB;IAGjC,IAAI,GAAjD,OAAO,gBAAgB,EAAE,SAAS;IACoC,MAAM,GAA5E,OAAO,4CAA4C,EAAE,MAAM;IAC1C,GAAG,GAApB,MAAM;IACgB,SAAS,GAA/B,WAAW;IACqC,QAAQ,GAAxD,MAAM,EAAE,GAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC;IACoB,QAAQ,GAAjE,MAAM,EAAE,GAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC;IAC7B,UAAU,GAA3B,MAAM;IACiD,KAAK,GAA5D,MAAM,GAAC,MAAM,EAAE,GAAC;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC;IAC1B,IAAI,GAAtB,OAAO;IACU,WAAW,GAA5B,MAAM;IACW,iBAAiB,GAAlC,MAAM;IACJ;IACZ,IAAQ,EAAE,MAAM,CAAC;IACjB,QAAY,EAAE,OAAO,oDAAoD,EAAE,cAAc,CAAC;IAC1F,KAAS,EAAE;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,EAAE,GAAC,IAAI,CAAC;IACpD,eAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,KAAS,EAAE,MAAM,CAAC;IAClB,IAAQ,EAAE,OAAO,gBAAgB,EAAE,SAAS,GAAC,IAAI,CAAC;IAClD,MAAU,EAAE,OAAO,4CAA4C,EAAE,MAAM,CAAA;CACpE,CA+HH;AAED;;;;;;;GAOG;AACH,4CAJW,OAAO,kDAAkD,EAAE,eAAe,WAC1E,OAAO,+CAA+C,EAAE,sBAAsB,UAC9E,WAAW,iBAAiB,CAAC,QAiBvC;4BAhM2B,8CAA8C"}
|
|
@@ -19,7 +19,8 @@ import { generate_tree } from "./generate_tree.js";
|
|
|
19
19
|
*
|
|
20
20
|
* @param {import("../../../shade/renderer/scene/GPUSceneContext.js").GPUSceneContext} scene_context
|
|
21
21
|
* @param {import("../../../engine/ecs/EntityComponentDataset.js").EntityComponentDataset} dataset
|
|
22
|
-
* @param {Object} [options={}]
|
|
22
|
+
* @param {Object} [options={}] without a `tree` or a `prefab`, the tree is grown from these by `generate_tree` (its
|
|
23
|
+
* `preset`, `seed`, `growth`, `cache` and the rest)
|
|
23
24
|
* @param {import("./TreeAsset.js").TreeAsset} [options.tree] pre-generated `TreeAsset`
|
|
24
25
|
* @param {import("../../../engine/graphics3/prefab/Prefab.js").Prefab} [options.prefab] pre-compiled `Prefab`
|
|
25
26
|
* @param {number} [options.lod=0] LOD index when placing from `TreeAsset`
|
|
@@ -21,7 +21,7 @@ export function tree_triangles_at_error(skeleton: import("../skeleton/TreeSkelet
|
|
|
21
21
|
* `TREE_RENDER_COST_CEILING` over `side_area` (`tree_grown_side_area`), its bark and cluster cards in triangles and,
|
|
22
22
|
* when it is rigged for wind, its joints, no finer than the LOD before it and no finer than `TREE_LOD_ERROR_FINEST`:
|
|
23
23
|
* each halving of the error quadruples the cluster cards' texels, which no ceiling yet bounds. Errors are tried a
|
|
24
|
-
* half-octave apart ({@link
|
|
24
|
+
* half-octave apart ({@link TREE_LOD_ERROR_STEP}), up from the finest until the tree fits, or until it draws no wood at all.
|
|
25
25
|
*
|
|
26
26
|
* An LOD's rig (`tree_skeleton_assign_skin_joints`) is on the wood it draws, at a tolerance no finer than its error
|
|
27
27
|
* (a sway smaller than the shape's error cannot be seen), and its joints are a subset of the finer LOD's. The
|
|
@@ -35,6 +35,8 @@ export function tree_triangles_at_error(skeleton: import("../skeleton/TreeSkelet
|
|
|
35
35
|
* @param {Map<number, ReturnType<typeof tree_mesh_compute_branch_rings>>} [planned] the bark's rings the caller has
|
|
36
36
|
* already planned (`tree_mesh_compute_branch_rings`), by error: the search takes them rather than planning them
|
|
37
37
|
* again
|
|
38
|
+
* @param {((error: number) => number)|null} [cards] how many cards the tree draws at an error, where they are not its
|
|
39
|
+
* own cuts (`tree_shoot_instance_card_count`); its own clusters (`tree_clusters`) by default
|
|
38
40
|
* @returns {TreeLODPlan[]}
|
|
39
41
|
*/
|
|
40
42
|
export function tree_lod_plan(skeleton: import("../skeleton/TreeSkeleton.js").TreeSkeleton, species: import("../config/TreeSpeciesConfig.js").TreeSpeciesConfig, attachments: import("../mesh/foliage_collect_attachments.js").FoliageAttachmentSet, side_area: number, lod_count: number, planned?: Map<number, Map<number, {
|
|
@@ -53,7 +55,7 @@ export function tree_lod_plan(skeleton: import("../skeleton/TreeSkeleton.js").Tr
|
|
|
53
55
|
w1: number;
|
|
54
56
|
w2: number;
|
|
55
57
|
w3: number;
|
|
56
|
-
}[]
|
|
58
|
+
}[]>>, cards?: ((error: number) => number) | null): TreeLODPlan[];
|
|
57
59
|
/**
|
|
58
60
|
* One LOD of a tree: the error it is drawn to and the rig on the wood it draws.
|
|
59
61
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree_lod_plan.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/asset/tree_lod_plan.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tree_lod_plan.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/asset/tree_lod_plan.js"],"names":[],"mappings":"AAiCA;;;;;;;;;GASG;AACH,kDANW,OAAO,6BAA6B,EAAE,YAAY,WAClD,OAAO,gCAAgC,EAAE,iBAAiB,eAC1D,OAAO,wCAAwC,EAAE,oBAAoB,SACrE,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;GAMG;AAEH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wCAZW,OAAO,6BAA6B,EAAE,YAAY,WAClD,OAAO,gCAAgC,EAAE,iBAAiB,eAC1D,OAAO,wCAAwC,EAAE,oBAAoB,aACrE,MAAM,aACN,MAAM,YACN,IAAI,MAAM;;;;;;;;;;;;;;;;KAAoD,UAG9D,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAAC,IAAI,GAE9B,WAAW,EAAE,CAwCzB;;;;;;;;WAjEa,MAAM;;;;eACN,WAAW,uCAAuC,CAAC;;iDA/ChB,iDAAiD"}
|