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