@woosh/meep-engine 3.55.0 → 3.57.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 (650) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/DUPLICATION_REVIEW_2026_10_24.md +1072 -0
  4. package/src/core/binary/BitSet.js +1 -1
  5. package/src/core/binary/FLOAT16_MAX.d.ts +2 -0
  6. package/src/core/binary/FLOAT16_MAX.d.ts.map +1 -0
  7. package/src/core/binary/FLOAT16_MAX.js +1 -0
  8. package/src/core/binary/base58/base58_encode.js +2 -2
  9. package/src/core/binary/type/TypeBuilder.js +1 -1
  10. package/src/core/bvh2/bvh3/BVH.js +1 -1
  11. package/src/core/bvh2/bvh3/ebvh_optimize_treelet.d.ts.map +1 -1
  12. package/src/core/bvh2/bvh3/ebvh_optimize_treelet.js +7 -3
  13. package/src/core/bvh2/bvh3/ebvh_update_hierarchy_bounds.d.ts.map +1 -1
  14. package/src/core/bvh2/bvh3/ebvh_update_hierarchy_bounds.js +5 -1
  15. package/src/core/bvh2/bvh3/query/compute_tight_near_far_clipping_planes.d.ts.map +1 -1
  16. package/src/core/bvh2/bvh3/query/compute_tight_near_far_clipping_planes.js +195 -246
  17. package/src/core/collection/CuckooFilter.js +1 -1
  18. package/src/core/collection/array/isArrayEqual.d.ts.map +1 -1
  19. package/src/core/collection/array/isArrayEqual.js +33 -58
  20. package/src/core/collection/array/typed/array_buffer_hash.d.ts.map +1 -1
  21. package/src/core/collection/array/typed/array_buffer_hash.js +41 -39
  22. package/src/core/collection/array/typed/float32_array_hash.js +38 -38
  23. package/src/core/collection/array/typed/uint16_array_hash.d.ts +2 -1
  24. package/src/core/collection/array/typed/uint16_array_hash.d.ts.map +1 -1
  25. package/src/core/collection/array/typed/uint16_array_hash.js +30 -29
  26. package/src/core/collection/array/typed/uint32_array_hash.d.ts +2 -1
  27. package/src/core/collection/array/typed/uint32_array_hash.d.ts.map +1 -1
  28. package/src/core/collection/array/typed/uint32_array_hash.js +21 -20
  29. package/src/core/collection/array/typed/uint8_array_hash.d.ts +2 -1
  30. package/src/core/collection/array/typed/uint8_array_hash.d.ts.map +1 -1
  31. package/src/core/collection/array/typed/uint8_array_hash.js +37 -36
  32. package/src/core/collection/array/typed/uint_array_for_count.js +2 -2
  33. package/src/core/collection/list/List.d.ts.map +1 -1
  34. package/src/core/collection/list/List.js +3 -19
  35. package/src/core/collection/table/RowFirstTable.d.ts.map +1 -1
  36. package/src/core/collection/table/RowFirstTable.js +4 -28
  37. package/src/core/debug/matchers/DescribeAs.d.ts.map +1 -1
  38. package/src/core/debug/matchers/DescribeAs.js +62 -64
  39. package/src/core/function/FunctionCompiler.js +4 -4
  40. package/src/core/function/objectsEqual.d.ts.map +1 -1
  41. package/src/core/function/objectsEqual.js +3 -2
  42. package/src/core/geom/2d/bvh/BVH2D.d.ts.map +1 -1
  43. package/src/core/geom/2d/bvh/BVH2D.js +4 -3
  44. package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_relaxation.d.ts +5 -2
  45. package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_relaxation.d.ts.map +1 -1
  46. package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_relaxation.js +49 -11
  47. package/src/core/geom/2d/hash-grid/shg_query_elements_circle.d.ts.map +1 -1
  48. package/src/core/geom/2d/hash-grid/shg_query_elements_circle.js +122 -159
  49. package/src/core/geom/2d/hash-grid/shg_query_elements_line.d.ts.map +1 -1
  50. package/src/core/geom/2d/hash-grid/shg_query_elements_line.js +8 -5
  51. package/src/core/geom/2d/polygon/polygon2_rasterize_coverage.d.ts +18 -0
  52. package/src/core/geom/2d/polygon/polygon2_rasterize_coverage.d.ts.map +1 -0
  53. package/src/core/geom/2d/polygon/polygon2_rasterize_coverage.js +97 -0
  54. package/src/core/geom/2d/r-tree/StaticR2Tree.js +2 -2
  55. package/src/core/geom/2d/triangle/tri2_rasterize_coverage.d.ts +21 -0
  56. package/src/core/geom/2d/triangle/tri2_rasterize_coverage.d.ts.map +1 -0
  57. package/src/core/geom/2d/triangle/tri2_rasterize_coverage.js +54 -0
  58. package/src/core/geom/3d/aabb/aabb3_build_frustum.d.ts.map +1 -1
  59. package/src/core/geom/3d/aabb/aabb3_build_frustum.js +20 -53
  60. package/src/core/geom/3d/aabb/aabb3_score_boxes_SAH.d.ts +1 -1
  61. package/src/core/geom/3d/aabb/aabb3_score_boxes_SAH.d.ts.map +1 -1
  62. package/src/core/geom/3d/aabb/aabb3_score_boxes_SAH.js +11 -42
  63. package/src/core/geom/3d/atlas/pack/atlas_pack_charts.d.ts.map +1 -1
  64. package/src/core/geom/3d/atlas/pack/atlas_pack_charts.js +30 -32
  65. package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_bff.d.ts.map +1 -1
  66. package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_bff.js +1 -5
  67. package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_lscm.d.ts.map +1 -1
  68. package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_lscm.js +1 -15
  69. package/src/core/geom/3d/atlas/segment/atlas_merge_charts.d.ts.map +1 -1
  70. package/src/core/geom/3d/atlas/segment/atlas_merge_charts.js +105 -116
  71. package/src/core/geom/3d/line/line3_compute_segment_point_distance_sqr.d.ts.map +1 -1
  72. package/src/core/geom/3d/line/line3_compute_segment_point_distance_sqr.js +36 -54
  73. package/src/core/geom/3d/plane/plane3_compute_intersection_objects.d.ts +5 -10
  74. package/src/core/geom/3d/plane/plane3_compute_intersection_objects.d.ts.map +1 -1
  75. package/src/core/geom/3d/plane/plane3_compute_intersection_objects.js +20 -82
  76. package/src/core/geom/3d/plane/plane3_slerp.d.ts.map +1 -1
  77. package/src/core/geom/3d/plane/plane3_slerp.js +87 -102
  78. package/src/core/geom/3d/polygon/polygon3_compute_normal.d.ts +12 -0
  79. package/src/core/geom/3d/polygon/polygon3_compute_normal.d.ts.map +1 -1
  80. package/src/core/geom/3d/polygon/polygon3_compute_normal.js +107 -60
  81. package/src/core/geom/3d/ray/ray3_compute_closest_point.d.ts.map +1 -1
  82. package/src/core/geom/3d/ray/ray3_compute_closest_point.js +37 -43
  83. package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
  84. package/src/core/geom/3d/shape/ConvexHullShape3D.js +5 -16
  85. package/src/core/geom/3d/shape/MeshShape3D.js +2 -56
  86. package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
  87. package/src/core/geom/3d/shape/TransformedShape3D.js +10 -7
  88. package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
  89. package/src/core/geom/3d/shape/UnionShape3D.js +9 -3
  90. package/src/core/geom/3d/shape/json/shape_to_type.js +2 -2
  91. package/src/core/geom/3d/sphere/harmonics/SH3_COEFFICIENTS.js +17 -17
  92. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts.map +1 -1
  93. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +6 -2
  94. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts.map +1 -1
  95. package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.js +3 -2
  96. package/src/core/geom/3d/tetrahedra/tetrahedron_contains_point.d.ts +20 -2
  97. package/src/core/geom/3d/tetrahedra/tetrahedron_contains_point.d.ts.map +1 -1
  98. package/src/core/geom/3d/tetrahedra/tetrahedron_contains_point.js +52 -37
  99. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_face_normals.d.ts.map +1 -1
  100. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_face_normals.js +40 -56
  101. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadrics.d.ts.map +1 -1
  102. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadrics.js +251 -260
  103. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.d.ts.map +1 -1
  104. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.js +104 -113
  105. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_resolve_t_junctions.d.ts.map +1 -1
  106. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_resolve_t_junctions.js +227 -238
  107. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
  108. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +15 -24
  109. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.d.ts.map +1 -1
  110. package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.js +31 -115
  111. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_fuse_duplicate_edges.d.ts.map +1 -1
  112. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_fuse_duplicate_edges.js +142 -150
  113. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -1
  114. package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +151 -194
  115. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_incenter.d.ts.map +1 -1
  116. package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_incenter.js +60 -85
  117. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_distance_field.d.ts.map +1 -1
  118. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_distance_field.js +156 -171
  119. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path.d.ts.map +1 -1
  120. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path.js +8 -44
  121. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path_polyanya.d.ts.map +1 -1
  122. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path_polyanya.js +2 -7
  123. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts.map +1 -1
  124. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.js +3 -2
  125. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_segment_penetrates_surface.d.ts.map +1 -1
  126. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_segment_penetrates_surface.js +128 -133
  127. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_surface_ray_parity.d.ts +8 -14
  128. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_surface_ray_parity.d.ts.map +1 -1
  129. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_surface_ray_parity.js +36 -82
  130. package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts.map +1 -1
  131. package/src/core/geom/3d/triangle/tri3_ray_intersection.js +7 -144
  132. package/src/core/geom/ConicRay.d.ts.map +1 -1
  133. package/src/core/geom/ConicRay.js +230 -237
  134. package/src/core/localization/LocaleDataset.d.ts +6 -0
  135. package/src/core/localization/LocaleDataset.d.ts.map +1 -1
  136. package/src/core/localization/LocaleDataset.js +48 -37
  137. package/src/core/localization/LocalizationEngine.d.ts.map +1 -1
  138. package/src/core/localization/LocalizationEngine.js +3 -2
  139. package/src/core/math/lookup/ParameterLookupTable.d.ts.map +1 -1
  140. package/src/core/math/lookup/ParameterLookupTable.js +3 -1
  141. package/src/core/math/spline/spline3_hermite_intersection_spline3_hermite_nd.d.ts.map +1 -1
  142. package/src/core/math/spline/spline3_hermite_intersection_spline3_hermite_nd.js +330 -400
  143. package/src/core/math/spline/spline3_hermite_nearest_point.d.ts +16 -0
  144. package/src/core/math/spline/spline3_hermite_nearest_point.d.ts.map +1 -1
  145. package/src/core/math/spline/spline3_hermite_nearest_point.js +134 -167
  146. package/src/core/model/DebouncedObservedBoolean.d.ts +1 -2
  147. package/src/core/model/DebouncedObservedBoolean.d.ts.map +1 -1
  148. package/src/core/model/DebouncedObservedBoolean.js +1 -1
  149. package/src/core/model/node-graph/node/NodeInstance.d.ts.map +1 -1
  150. package/src/core/model/node-graph/node/NodeInstance.js +2 -7
  151. package/src/core/model/node-graph/node/parameter/NodeParameterDescription.js +1 -1
  152. package/src/core/model/object/optional_equality.d.ts +3 -3
  153. package/src/core/model/object/optional_equality.d.ts.map +1 -1
  154. package/src/core/model/object/optional_equality.js +10 -27
  155. package/src/core/model/object/write_property.js +1 -1
  156. package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.js +2 -2
  157. package/src/core/primitives/strings/string_compute_byte_size.d.ts +3 -3
  158. package/src/core/primitives/strings/string_compute_byte_size.d.ts.map +1 -1
  159. package/src/core/primitives/strings/string_compute_byte_size.js +8 -21
  160. package/src/core/process/executor/ConcurrentExecutor.d.ts.map +1 -1
  161. package/src/core/process/executor/ConcurrentExecutor.js +14 -2
  162. package/src/engine/achievements/gateway/StorageAchievementGateway.d.ts +6 -3
  163. package/src/engine/achievements/gateway/StorageAchievementGateway.d.ts.map +1 -1
  164. package/src/engine/achievements/gateway/StorageAchievementGateway.js +31 -75
  165. package/src/engine/asset/loaders/SVGAssetLoader.d.ts.map +1 -1
  166. package/src/engine/asset/loaders/SVGAssetLoader.js +33 -31
  167. package/src/engine/control/first-person/math/criticallyDampedSpring.d.ts.map +1 -1
  168. package/src/engine/control/first-person/math/criticallyDampedSpring.js +3 -14
  169. package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
  170. package/src/engine/ecs/EntityComponentDataset.js +4 -1
  171. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter.d.ts +0 -2
  172. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter.d.ts.map +1 -1
  173. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter.js +3 -3
  174. package/src/engine/ecs/terrain/ecs/layers/TerrainLayer.js +2 -2
  175. package/src/engine/ecs/transform/Transform64.d.ts +21 -0
  176. package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
  177. package/src/engine/ecs/transform/Transform64.js +26 -0
  178. package/src/engine/graphics/sh3/path_tracer/geometry/sort_triangles_by_distance_to_point.js +1 -1
  179. package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_min_indices.js +1 -1
  180. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  181. package/src/engine/graphics3/WaterSystem.js +2 -1
  182. package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts.map +1 -1
  183. package/src/engine/graphics3/prefab/prefab_skin_frame.js +1 -12
  184. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts +1 -1
  185. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts.map +1 -1
  186. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.js +141 -137
  187. package/src/engine/input/ecs/systems/InputControllerSystem.d.ts.map +1 -1
  188. package/src/engine/input/ecs/systems/InputControllerSystem.js +13 -3
  189. package/src/engine/input/ecs/systems/InputSystem.d.ts.map +1 -1
  190. package/src/engine/input/ecs/systems/InputSystem.js +2 -1
  191. package/src/engine/intelligence/behavior/composite/ParallelBehavior.d.ts +1 -1
  192. package/src/engine/intelligence/behavior/composite/ParallelBehavior.d.ts.map +1 -1
  193. package/src/engine/intelligence/behavior/composite/ParallelBehavior.js +4 -1
  194. package/src/engine/intelligence/behavior/decorator/InvertStatusBehavior.d.ts.map +1 -1
  195. package/src/engine/intelligence/behavior/decorator/InvertStatusBehavior.js +3 -1
  196. package/src/engine/intelligence/behavior/decorator/RepeatBehavior.d.ts.map +1 -1
  197. package/src/engine/intelligence/behavior/decorator/RepeatBehavior.js +3 -1
  198. package/src/engine/intelligence/behavior/decorator/RepeatBehaviorSerializationAdapter.d.ts.map +1 -1
  199. package/src/engine/intelligence/behavior/decorator/RepeatBehaviorSerializationAdapter.js +39 -33
  200. package/src/engine/intelligence/behavior/util/ConditionalBehavior.d.ts +5 -0
  201. package/src/engine/intelligence/behavior/util/ConditionalBehavior.d.ts.map +1 -1
  202. package/src/engine/intelligence/behavior/util/ConditionalBehavior.js +93 -75
  203. package/src/engine/intelligence/behavior/util/RotationBehavior.d.ts.map +1 -1
  204. package/src/engine/intelligence/behavior/util/RotationBehavior.js +79 -76
  205. package/src/engine/intelligence/blackboard/BlackboardStack.d.ts +1 -0
  206. package/src/engine/intelligence/blackboard/BlackboardStack.d.ts.map +1 -1
  207. package/src/engine/intelligence/blackboard/BlackboardStack.js +159 -123
  208. package/src/engine/intelligence/mcts/StateNode.d.ts.map +1 -1
  209. package/src/engine/intelligence/mcts/StateNode.js +366 -364
  210. package/src/engine/intelligence/resource/ResourceAllocationSolver.js +1 -1
  211. package/src/engine/navigation/ecs/components/Path.d.ts.map +1 -1
  212. package/src/engine/navigation/ecs/components/Path.js +2 -1
  213. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts.map +1 -1
  214. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.js +5 -2
  215. package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
  216. package/src/engine/physics/body/SolverBodyState.js +2 -6
  217. package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
  218. package/src/engine/physics/ccd/linear_sweep.js +3 -16
  219. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
  220. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +2 -16
  221. package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts +13 -1
  222. package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
  223. package/src/engine/physics/cloth/ecs/cloth_build_rows.js +15 -4
  224. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  225. package/src/engine/physics/ecs/PhysicsSystem.js +2 -5
  226. package/src/engine/physics/inertia/locked_inverse_inertia.d.ts +12 -0
  227. package/src/engine/physics/inertia/locked_inverse_inertia.d.ts.map +1 -0
  228. package/src/engine/physics/inertia/locked_inverse_inertia.js +22 -0
  229. package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -1
  230. package/src/engine/physics/integration/integrate_velocity.js +3 -18
  231. package/src/engine/physics/mls-mpm/MLS_MPM.d.ts +1 -0
  232. package/src/engine/physics/mls-mpm/MLS_MPM.d.ts.map +1 -1
  233. package/src/engine/physics/mls-mpm/MLS_MPM.js +5 -4
  234. package/src/engine/physics/narrowphase/convex_decomposition.d.ts.map +1 -1
  235. package/src/engine/physics/narrowphase/convex_decomposition.js +7 -16
  236. package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
  237. package/src/engine/physics/vehicle/RaycastVehicle.js +15 -5
  238. package/src/engine/save/StorageBackedList.d.ts +5 -0
  239. package/src/engine/save/StorageBackedList.d.ts.map +1 -1
  240. package/src/engine/save/StorageBackedList.js +161 -144
  241. package/src/engine/simulation/Ticker.d.ts.map +1 -1
  242. package/src/engine/simulation/Ticker.js +394 -391
  243. package/src/engine/sound/simulation/probe/AcousticProbeField.d.ts.map +1 -1
  244. package/src/engine/sound/simulation/probe/AcousticProbeField.js +6 -19
  245. package/src/engine/sound/simulation/probe/probe_edge_visible.d.ts +15 -0
  246. package/src/engine/sound/simulation/probe/probe_edge_visible.d.ts.map +1 -1
  247. package/src/engine/sound/simulation/probe/probe_edge_visible.js +59 -41
  248. package/src/engine/sound/simulation/probe/probe_refine_connectivity.d.ts.map +1 -1
  249. package/src/engine/sound/simulation/probe/probe_refine_connectivity.js +164 -181
  250. package/src/engine/sound/simulation/render/FoaProbeReverbRenderer.d.ts.map +1 -1
  251. package/src/engine/sound/simulation/render/FoaProbeReverbRenderer.js +20 -5
  252. package/src/format/image/avif/av1/decode/Av1FrameContext.d.ts.map +1 -1
  253. package/src/format/image/avif/av1/decode/Av1FrameContext.js +3 -10
  254. package/src/format/image/avif/av1/decode/reconstruct.d.ts +20 -0
  255. package/src/format/image/avif/av1/decode/reconstruct.d.ts.map +1 -1
  256. package/src/format/image/avif/av1/decode/reconstruct.js +22 -9
  257. package/src/format/image/avif/av1/encode/choose_restoration.js +2 -18
  258. package/src/format/image/avif/av1/encode/quantise.d.ts.map +1 -1
  259. package/src/format/image/avif/av1/encode/quantise.js +1 -55
  260. package/src/format/image/avif/av1/filter/loop_restoration.d.ts +9 -0
  261. package/src/format/image/avif/av1/filter/loop_restoration.d.ts.map +1 -1
  262. package/src/format/image/avif/av1/filter/loop_restoration.js +1 -1
  263. package/src/format/texture/basis/transcode/etc1s_to_bc7.js +2 -33
  264. package/src/format/texture/basis/transcode/fit_endpoints.d.ts +11 -0
  265. package/src/format/texture/basis/transcode/fit_endpoints.d.ts.map +1 -1
  266. package/src/format/texture/basis/transcode/fit_endpoints.js +1 -1
  267. package/src/format/texture/basis/uastc/uastc_decode_block.d.ts.map +1 -1
  268. package/src/format/texture/basis/uastc/uastc_decode_block.js +2 -19
  269. package/src/generation/foliage/ANNUAL_SHOOTS_BRIEF_2026_10_25.md +220 -0
  270. package/src/generation/foliage/CROWN_FILLING_BRIEF_2026_10_26.md +172 -0
  271. package/src/generation/foliage/FOLIAGE_DESIGN.md +165 -15
  272. package/src/generation/foliage/LEAF_ARCHITECTURE_BRIEF_2026_10_26.md +158 -0
  273. package/src/generation/foliage/SHOOT_SYSTEMS_ALL_SPECIES_BRIEF_2026_10_26.md +248 -0
  274. package/src/generation/foliage/SPEEDTREE_COMPARISON_2026_10_24.md +694 -0
  275. package/src/generation/foliage/analysis/CrownOpacity.d.ts +118 -0
  276. package/src/generation/foliage/analysis/CrownOpacity.d.ts.map +1 -0
  277. package/src/generation/foliage/analysis/CrownOpacity.js +182 -0
  278. package/src/generation/foliage/analysis/crown_opacity_frames.d.ts +10 -0
  279. package/src/generation/foliage/analysis/crown_opacity_frames.d.ts.map +1 -0
  280. package/src/generation/foliage/analysis/crown_opacity_frames.js +132 -0
  281. package/src/generation/foliage/analysis/crown_opacity_measure.d.ts +51 -0
  282. package/src/generation/foliage/analysis/crown_opacity_measure.d.ts.map +1 -0
  283. package/src/generation/foliage/analysis/crown_opacity_measure.js +649 -0
  284. package/src/generation/foliage/analysis/foliage_measure_leaf_area.d.ts +66 -0
  285. package/src/generation/foliage/analysis/foliage_measure_leaf_area.d.ts.map +1 -0
  286. package/src/generation/foliage/analysis/foliage_measure_leaf_area.js +192 -0
  287. package/src/generation/foliage/analysis/tree_crown_opacity.d.ts +27 -0
  288. package/src/generation/foliage/analysis/tree_crown_opacity.d.ts.map +1 -0
  289. package/src/generation/foliage/analysis/tree_crown_opacity.js +58 -0
  290. package/src/generation/foliage/animation/build_tree_wind_rig.d.ts +3 -2
  291. package/src/generation/foliage/animation/build_tree_wind_rig.d.ts.map +1 -1
  292. package/src/generation/foliage/animation/build_tree_wind_rig.js +12 -30
  293. package/src/generation/foliage/animation/tree_wind_bend_limit.d.ts +12 -0
  294. package/src/generation/foliage/animation/tree_wind_bend_limit.d.ts.map +1 -0
  295. package/src/generation/foliage/animation/tree_wind_bend_limit.js +13 -0
  296. package/src/generation/foliage/asset/TreeAsset.d.ts +5 -0
  297. package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -1
  298. package/src/generation/foliage/asset/TreeAsset.js +6 -0
  299. package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -1
  300. package/src/generation/foliage/asset/generate_tree.js +23 -6
  301. package/src/generation/foliage/config/{BranchLevelConfig.d.ts → BranchGeneratorConfig.d.ts} +61 -75
  302. package/src/generation/foliage/config/BranchGeneratorConfig.d.ts.map +1 -0
  303. package/src/generation/foliage/config/{BranchLevelConfig.js → BranchGeneratorConfig.js} +83 -126
  304. package/src/generation/foliage/config/BranchSpawnRule.d.ts +118 -0
  305. package/src/generation/foliage/config/BranchSpawnRule.d.ts.map +1 -0
  306. package/src/generation/foliage/config/BranchSpawnRule.js +217 -0
  307. package/src/generation/foliage/config/FoliageCardType.d.ts +1 -1
  308. package/src/generation/foliage/config/FoliageCardType.js +2 -2
  309. package/src/generation/foliage/config/FoliageConfig.d.ts +23 -45
  310. package/src/generation/foliage/config/FoliageConfig.d.ts.map +1 -1
  311. package/src/generation/foliage/config/FoliageConfig.js +47 -93
  312. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts +12 -20
  313. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts.map +1 -1
  314. package/src/generation/foliage/config/FoliageMaterialConfig.js +261 -279
  315. package/src/generation/foliage/config/FoliageSpawnRule.d.ts +77 -0
  316. package/src/generation/foliage/config/FoliageSpawnRule.d.ts.map +1 -0
  317. package/src/generation/foliage/config/FoliageSpawnRule.js +135 -0
  318. package/src/generation/foliage/config/FoliageTileContent.d.ts +9 -0
  319. package/src/generation/foliage/config/FoliageTileContent.d.ts.map +1 -0
  320. package/src/generation/foliage/config/FoliageTileContent.js +12 -0
  321. package/src/generation/foliage/config/LeafApexShape.d.ts +12 -0
  322. package/src/generation/foliage/config/LeafApexShape.d.ts.map +1 -0
  323. package/src/generation/foliage/config/LeafApexShape.js +17 -0
  324. package/src/generation/foliage/config/LeafArchitecture.d.ts +155 -0
  325. package/src/generation/foliage/config/LeafArchitecture.d.ts.map +1 -0
  326. package/src/generation/foliage/config/LeafArchitecture.js +288 -0
  327. package/src/generation/foliage/config/LeafBaseShape.d.ts +14 -0
  328. package/src/generation/foliage/config/LeafBaseShape.d.ts.map +1 -0
  329. package/src/generation/foliage/config/LeafBaseShape.js +21 -0
  330. package/src/generation/foliage/config/LeafLobation.d.ts +10 -0
  331. package/src/generation/foliage/config/LeafLobation.d.ts.map +1 -0
  332. package/src/generation/foliage/config/LeafLobation.js +14 -0
  333. package/src/generation/foliage/config/PhyllotaxisMode.d.ts +11 -0
  334. package/src/generation/foliage/config/PhyllotaxisMode.d.ts.map +1 -1
  335. package/src/generation/foliage/config/PhyllotaxisMode.js +36 -0
  336. package/src/generation/foliage/config/ShootBudZone.d.ts +105 -0
  337. package/src/generation/foliage/config/ShootBudZone.d.ts.map +1 -0
  338. package/src/generation/foliage/config/ShootBudZone.js +219 -0
  339. package/src/generation/foliage/config/ShootGrowthConfig.d.ts +84 -0
  340. package/src/generation/foliage/config/ShootGrowthConfig.d.ts.map +1 -0
  341. package/src/generation/foliage/config/ShootGrowthConfig.js +146 -0
  342. package/src/generation/foliage/config/ShootSystemRule.d.ts +144 -0
  343. package/src/generation/foliage/config/ShootSystemRule.d.ts.map +1 -0
  344. package/src/generation/foliage/config/ShootSystemRule.js +316 -0
  345. package/src/generation/foliage/config/TreeLODConfig.d.ts +1 -1
  346. package/src/generation/foliage/config/TreeLODConfig.js +1 -1
  347. package/src/generation/foliage/config/TreeSpeciesConfig.d.ts +40 -8
  348. package/src/generation/foliage/config/TreeSpeciesConfig.d.ts.map +1 -1
  349. package/src/generation/foliage/config/TreeSpeciesConfig.js +124 -68
  350. package/src/generation/foliage/config/TreeWindConfig.d.ts +23 -10
  351. package/src/generation/foliage/config/TreeWindConfig.d.ts.map +1 -1
  352. package/src/generation/foliage/config/TreeWindConfig.js +34 -25
  353. package/src/generation/foliage/index.d.ts +19 -2
  354. package/src/generation/foliage/index.js +63 -44
  355. package/src/generation/foliage/material/FoliageAtlasCutout.d.ts +59 -0
  356. package/src/generation/foliage/material/FoliageAtlasCutout.d.ts.map +1 -0
  357. package/src/generation/foliage/material/FoliageAtlasCutout.js +93 -0
  358. package/src/generation/foliage/material/compute_foliage_variant_atlas_layout.d.ts +26 -0
  359. package/src/generation/foliage/material/compute_foliage_variant_atlas_layout.d.ts.map +1 -0
  360. package/src/generation/foliage/material/compute_foliage_variant_atlas_layout.js +63 -0
  361. package/src/generation/foliage/material/foliage_atlas_cutout.d.ts +34 -0
  362. package/src/generation/foliage/material/foliage_atlas_cutout.d.ts.map +1 -0
  363. package/src/generation/foliage/material/foliage_atlas_cutout.js +174 -0
  364. package/src/generation/foliage/material/foliage_tile.d.ts +110 -0
  365. package/src/generation/foliage/material/foliage_tile.d.ts.map +1 -0
  366. package/src/generation/foliage/material/foliage_tile.js +286 -0
  367. package/src/generation/foliage/material/leaf_geometry.d.ts +103 -0
  368. package/src/generation/foliage/material/leaf_geometry.d.ts.map +1 -0
  369. package/src/generation/foliage/material/leaf_geometry.js +528 -0
  370. package/src/generation/foliage/material/make_foliage_material.d.ts +13 -33
  371. package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -1
  372. package/src/generation/foliage/material/make_foliage_material.js +356 -605
  373. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +39 -4
  374. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -1
  375. package/src/generation/foliage/mesh/foliage_collect_attachments.js +637 -569
  376. package/src/generation/foliage/mesh/interpolate_ring_skin_weights4.d.ts +48 -0
  377. package/src/generation/foliage/mesh/interpolate_ring_skin_weights4.d.ts.map +1 -0
  378. package/src/generation/foliage/mesh/interpolate_ring_skin_weights4.js +232 -0
  379. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
  380. package/src/generation/foliage/mesh/tree_mesh_build_bark.js +1023 -1049
  381. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +9 -2
  382. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -1
  383. package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +467 -454
  384. package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -1
  385. package/src/generation/foliage/presets/make_tree_species_preset.js +1648 -870
  386. package/src/generation/foliage/skeleton/ShootFrameworkHash.d.ts +35 -0
  387. package/src/generation/foliage/skeleton/ShootFrameworkHash.d.ts.map +1 -0
  388. package/src/generation/foliage/skeleton/ShootFrameworkHash.js +129 -0
  389. package/src/generation/foliage/skeleton/ShootGirth.d.ts +51 -0
  390. package/src/generation/foliage/skeleton/ShootGirth.d.ts.map +1 -0
  391. package/src/generation/foliage/skeleton/ShootGirth.js +212 -0
  392. package/src/generation/foliage/skeleton/ShootLightField.d.ts +73 -0
  393. package/src/generation/foliage/skeleton/ShootLightField.d.ts.map +1 -0
  394. package/src/generation/foliage/skeleton/ShootLightField.js +197 -0
  395. package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +106 -3
  396. package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -1
  397. package/src/generation/foliage/skeleton/TreeSkeleton.js +217 -39
  398. package/src/generation/foliage/skeleton/flare_lobe_phase_offset.d.ts +13 -0
  399. package/src/generation/foliage/skeleton/flare_lobe_phase_offset.d.ts.map +1 -0
  400. package/src/generation/foliage/skeleton/flare_lobe_phase_offset.js +16 -0
  401. package/src/generation/foliage/skeleton/foliage_card_density.d.ts +71 -0
  402. package/src/generation/foliage/skeleton/foliage_card_density.d.ts.map +1 -0
  403. package/src/generation/foliage/skeleton/foliage_card_density.js +101 -0
  404. package/src/generation/foliage/skeleton/foliage_senescence.d.ts +101 -0
  405. package/src/generation/foliage/skeleton/foliage_senescence.d.ts.map +1 -0
  406. package/src/generation/foliage/skeleton/foliage_senescence.js +149 -0
  407. package/src/generation/foliage/skeleton/foliage_unit_cards.d.ts +76 -0
  408. package/src/generation/foliage/skeleton/foliage_unit_cards.d.ts.map +1 -0
  409. package/src/generation/foliage/skeleton/foliage_unit_cards.js +95 -0
  410. package/src/generation/foliage/skeleton/shoot_demography.d.ts +22 -0
  411. package/src/generation/foliage/skeleton/shoot_demography.d.ts.map +1 -0
  412. package/src/generation/foliage/skeleton/shoot_demography.js +96 -0
  413. package/src/generation/foliage/skeleton/shoot_geometry.d.ts +66 -0
  414. package/src/generation/foliage/skeleton/shoot_geometry.d.ts.map +1 -0
  415. package/src/generation/foliage/skeleton/shoot_geometry.js +109 -0
  416. package/src/generation/foliage/skeleton/shoot_systems_simulate.d.ts +166 -0
  417. package/src/generation/foliage/skeleton/shoot_systems_simulate.d.ts.map +1 -0
  418. package/src/generation/foliage/skeleton/shoot_systems_simulate.js +588 -0
  419. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts +28 -12
  420. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts.map +1 -1
  421. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.js +137 -102
  422. package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts +112 -0
  423. package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts.map +1 -0
  424. package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.js +408 -0
  425. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts.map +1 -1
  426. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js +208 -206
  427. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +5 -2
  428. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -1
  429. package/src/generation/foliage/skeleton/tree_skeleton_grow.js +2048 -1871
  430. package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts +17 -0
  431. package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts.map +1 -0
  432. package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.js +231 -0
  433. package/src/generation/foliage/skeleton/tree_skeleton_read_joint_motion.d.ts +14 -0
  434. package/src/generation/foliage/skeleton/tree_skeleton_read_joint_motion.d.ts.map +1 -0
  435. package/src/generation/foliage/skeleton/tree_skeleton_read_joint_motion.js +26 -0
  436. package/src/generation/foliage/skeleton/tree_skeleton_read_joint_parents.d.ts +10 -0
  437. package/src/generation/foliage/skeleton/tree_skeleton_read_joint_parents.d.ts.map +1 -0
  438. package/src/generation/foliage/skeleton/tree_skeleton_read_joint_parents.js +20 -0
  439. package/src/generation/grid/generation/road/GridTaskGenerateRoads.d.ts.map +1 -1
  440. package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +4 -1
  441. package/src/generation/markers/GridCellActionPlaceMarkerGroup.d.ts +1 -0
  442. package/src/generation/markers/GridCellActionPlaceMarkerGroup.d.ts.map +1 -1
  443. package/src/generation/markers/GridCellActionPlaceMarkerGroup.js +98 -86
  444. package/src/shade/SHADER_F16_PROPOSAL_2026_10_24.md +263 -0
  445. package/src/shade/descriptor/WebGPUExtensionType.d.ts +17 -0
  446. package/src/shade/descriptor/WebGPUExtensionType.d.ts.map +1 -1
  447. package/src/shade/descriptor/WebGPUExtensionType.js +31 -1
  448. package/src/shade/playground/foliage_wind/FoliageRigOverlay.d.ts +37 -0
  449. package/src/shade/playground/foliage_wind/FoliageRigOverlay.d.ts.map +1 -0
  450. package/src/shade/playground/foliage_wind/FoliageRigOverlay.js +491 -0
  451. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
  452. package/src/shade/playground/foliage_wind/foliage_world.js +600 -602
  453. package/src/shade/playground/foliage_wind/index.html +6 -0
  454. package/src/shade/playground/foliage_wind/main.js +14 -0
  455. package/src/shade/renderer/Renderer.d.ts +5 -0
  456. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  457. package/src/shade/renderer/Renderer.js +25 -2
  458. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  459. package/src/shade/renderer/animation/GPUAnimationManager.js +2 -1
  460. package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts +2 -1
  461. package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts.map +1 -1
  462. package/src/shade/renderer/animation/foliage/FoliageWindJoint.js +2 -1
  463. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts.map +1 -1
  464. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.js +4 -2
  465. package/src/shade/renderer/buffer/table/GPUTypedTable.js +1 -1
  466. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  467. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +403 -401
  468. package/src/shade/renderer/camera/OrbitalCameraController.d.ts +1 -62
  469. package/src/shade/renderer/camera/OrbitalCameraController.d.ts.map +1 -1
  470. package/src/shade/renderer/camera/OrbitalCameraController.js +1 -374
  471. package/src/shade/renderer/deferred/indirect/chunk_lpv_2d_cache_sample_irradiance.d.ts.map +1 -1
  472. package/src/shade/renderer/deferred/indirect/chunk_lpv_2d_cache_sample_irradiance.js +3 -0
  473. package/src/shade/renderer/deferred/indirect/chunk_lpv_sample_light.d.ts.map +1 -1
  474. package/src/shade/renderer/deferred/indirect/chunk_lpv_sample_light.js +6 -1
  475. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.js +1 -1
  476. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +2 -2
  477. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
  478. package/src/shade/renderer/fluid/GPUFluidCascade.js +6 -3
  479. package/src/shade/renderer/fluid/GPU_FLUID_OCCUPANCY_AND_SOTA_REVIEW_2026_10_26.md +361 -0
  480. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
  481. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +335 -241
  482. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.d.ts.map +1 -1
  483. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.js +108 -101
  484. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_query_select.d.ts.map +1 -1
  485. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_query_select.js +69 -67
  486. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts +7 -6
  487. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts.map +1 -1
  488. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.js +341 -287
  489. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +6 -4
  490. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
  491. package/src/shade/renderer/fluid/mac/FluidMacPasses.js +427 -400
  492. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.d.ts +10 -5
  493. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.d.ts.map +1 -1
  494. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.js +532 -190
  495. package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.d.ts.map +1 -1
  496. package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.js +231 -237
  497. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts +2 -2
  498. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts.map +1 -1
  499. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +282 -245
  500. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.d.ts +1 -3
  501. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.d.ts.map +1 -1
  502. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.js +139 -109
  503. package/src/shade/renderer/fluid/mac/shader_fluid_mac_curl.d.ts +6 -6
  504. package/src/shade/renderer/fluid/mac/shader_fluid_mac_curl.d.ts.map +1 -1
  505. package/src/shade/renderer/fluid/mac/shader_fluid_mac_curl.js +257 -222
  506. package/src/shade/renderer/fluid/mac/shader_fluid_mac_divergence.d.ts +8 -7
  507. package/src/shade/renderer/fluid/mac/shader_fluid_mac_divergence.d.ts.map +1 -1
  508. package/src/shade/renderer/fluid/mac/shader_fluid_mac_divergence.js +119 -92
  509. package/src/shade/renderer/fluid/mac/shader_fluid_mac_gradient.d.ts +6 -9
  510. package/src/shade/renderer/fluid/mac/shader_fluid_mac_gradient.d.ts.map +1 -1
  511. package/src/shade/renderer/fluid/mac/shader_fluid_mac_gradient.js +229 -181
  512. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +17 -7
  513. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts.map +1 -1
  514. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.js +634 -621
  515. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_residual_restrict.d.ts +8 -6
  516. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_residual_restrict.d.ts.map +1 -1
  517. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_residual_restrict.js +166 -149
  518. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_smooth.d.ts +8 -6
  519. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_smooth.d.ts.map +1 -1
  520. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_smooth.js +219 -183
  521. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts.map +1 -1
  522. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.js +142 -122
  523. package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +674 -663
  524. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +1 -1
  525. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  526. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +63 -29
  527. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts.map +1 -1
  528. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.js +77 -87
  529. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/meshopt_clusterizer.d.ts.map +1 -1
  530. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/meshopt_clusterizer.js +4 -3
  531. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +11 -11
  532. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  533. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +17 -19
  534. package/src/shade/renderer/global_illumination/lpv/graph_bake_irradiance_lookup_2d.js +4 -4
  535. package/src/shade/renderer/global_illumination/probe/octahedral/sample/chunk_lpv_mesh_interpolate_radiance_via_atlas.d.ts.map +1 -1
  536. package/src/shade/renderer/global_illumination/probe/octahedral/sample/chunk_lpv_mesh_interpolate_radiance_via_atlas.js +5 -1
  537. package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
  538. package/src/shade/renderer/loader/gltf/load_gltf.js +11 -35
  539. package/src/shade/renderer/loader/usd/load_usd.d.ts.map +1 -1
  540. package/src/shade/renderer/loader/usd/load_usd.js +6 -19
  541. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +2 -1
  542. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  543. package/src/shade/renderer/particles/GPUParticleSystem.js +1 -1
  544. package/src/shade/renderer/particles/graph_particles_avboit.d.ts +2 -2
  545. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  546. package/src/shade/renderer/particles/graph_particles_avboit.js +4 -9
  547. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  548. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +199 -193
  549. package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -1
  550. package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +151 -143
  551. package/src/shade/renderer/postprocess/bloom/chunk_karis_blur4x4_sample.d.ts.map +1 -1
  552. package/src/shade/renderer/postprocess/bloom/chunk_karis_blur4x4_sample.js +11 -5
  553. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
  554. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +6 -18
  555. package/src/shade/renderer/postprocess/gtao/GTAO.js +1 -1
  556. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
  557. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +3 -5
  558. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +1 -1
  559. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  560. package/src/shade/renderer/postprocess/nss/chunk_nss_luma_derivative.d.ts.map +1 -1
  561. package/src/shade/renderer/postprocess/nss/chunk_nss_luma_derivative.js +7 -3
  562. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
  563. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +4 -2
  564. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
  565. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +4 -1
  566. package/src/shade/renderer/postprocess/ssr/downsample_karis.d.ts.map +1 -1
  567. package/src/shade/renderer/postprocess/ssr/downsample_karis.js +6 -3
  568. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
  569. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +4 -3
  570. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
  571. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +4 -1
  572. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  573. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
  574. package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap.d.ts.map +1 -1
  575. package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap.js +35 -39
  576. package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap_inv.d.ts.map +1 -1
  577. package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap_inv.js +20 -17
  578. package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
  579. package/src/shade/renderer/postprocess/taa/shader_taa.js +6 -3
  580. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  581. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +3 -1
  582. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +1 -1
  583. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.js +2 -2
  584. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +1 -1
  585. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.d.ts.map +1 -1
  586. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.js +92 -83
  587. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +1 -1
  588. package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
  589. package/src/shade/renderer/shader/ShaderDescriptor.js +12 -4
  590. package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts.map +1 -1
  591. package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.js +294 -286
  592. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_interpolate_probe_irradiance8.js +5 -5
  593. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mesh_interpolate_probe.d.ts.map +1 -1
  594. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mesh_interpolate_probe.js +5 -3
  595. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mesh_interpolate_probe_irradiance.d.ts.map +1 -1
  596. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mesh_interpolate_probe_irradiance.js +9 -6
  597. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_sample_sh3_at.d.ts.map +1 -1
  598. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_sample_sh3_at.js +33 -38
  599. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  600. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +690 -675
  601. package/src/shade/renderer/shader/type/WebGPUArray.d.ts +3 -0
  602. package/src/shade/renderer/shader/type/WebGPUArray.d.ts.map +1 -1
  603. package/src/shade/renderer/shader/type/WebGPUArray.js +185 -167
  604. package/src/shade/renderer/shader/type/WebGPUStruct.d.ts.map +1 -1
  605. package/src/shade/renderer/shader/type/WebGPUStruct.js +461 -455
  606. package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.d.ts.map +1 -1
  607. package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.js +335 -211
  608. package/src/shade/renderer/shader/type/serde/write_gpu_typed_buffer.d.ts.map +1 -1
  609. package/src/shade/renderer/shader/type/serde/write_gpu_typed_buffer.js +329 -221
  610. package/src/shade/renderer/shader/type/type_has_f16.d.ts +12 -0
  611. package/src/shade/renderer/shader/type/type_has_f16.d.ts.map +1 -0
  612. package/src/shade/renderer/shader/type/type_has_f16.js +66 -0
  613. package/src/shade/renderer/view/GPUViewContext.d.ts +0 -14
  614. package/src/shade/renderer/view/GPUViewContext.d.ts.map +1 -1
  615. package/src/shade/renderer/view/GPUViewContext.js +0 -29
  616. package/src/shade/renderer/view/ViewManager.d.ts +1 -1
  617. package/src/shade/renderer/view/ViewManager.js +1 -1
  618. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +40 -3
  619. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  620. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +660 -583
  621. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  622. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +16 -2
  623. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
  624. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +5 -2
  625. package/src/shade/renderer/water/shader_water_avboit.js +1 -1
  626. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  627. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  628. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +260 -23
  629. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts +6 -7
  630. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  631. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +269 -69
  632. package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
  633. package/src/shade/wgsl/validate_wgsl_source.js +27 -1
  634. package/src/view/controller/controls/ListController.d.ts.map +1 -1
  635. package/src/view/controller/controls/ListController.js +118 -113
  636. package/src/view/controller/controls/Vector1Control.js +97 -97
  637. package/src/view/elements/image/SvgImageView.d.ts +1 -0
  638. package/src/view/elements/image/SvgImageView.d.ts.map +1 -1
  639. package/src/view/elements/image/SvgImageView.js +92 -90
  640. package/src/view/minimap/dom/MinimapTerrainView.d.ts +1 -0
  641. package/src/view/minimap/dom/MinimapTerrainView.d.ts.map +1 -1
  642. package/src/view/minimap/dom/MinimapTerrainView.js +151 -147
  643. package/src/view/tooltip/gml/TooltipParser.js +2 -2
  644. package/src/engine/network/PriorityFetch.d.ts +0 -59
  645. package/src/engine/network/PriorityFetch.d.ts.map +0 -1
  646. package/src/engine/network/PriorityFetch.js +0 -193
  647. package/src/generation/foliage/config/BranchLevelConfig.d.ts.map +0 -1
  648. package/src/shade/renderer/volumetrics/VOLUMETRICS_RESOLUTION_Z.d.ts +0 -2
  649. package/src/shade/renderer/volumetrics/VOLUMETRICS_RESOLUTION_Z.d.ts.map +0 -1
  650. package/src/shade/renderer/volumetrics/VOLUMETRICS_RESOLUTION_Z.js +0 -1
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Ontogenetic maturity of atlas variant `variant`: 0 for the juvenile apical flush, 1 for mature basal foliage.
3
+ *
4
+ * @param {number} variant
5
+ * @param {number} variant_count
6
+ * @returns {number}
7
+ */
8
+ export function foliage_variant_maturity(variant: number, variant_count: number): number;
9
+ /**
10
+ * How far a tile of maturity `mu` has senesced at the tree's `senescence`. Tiles are staggered, so an autumn crown
11
+ * shows leaf-to-leaf diversity: juvenile and mature tiles run ahead of the ones in between.
12
+ *
13
+ * @param {number} senescence `[0, 1]`
14
+ * @param {number} mu tile maturity, see {@link foliage_variant_maturity}
15
+ * @returns {number} the tile's senescence stage `sigma_k`, `[0, 1]`
16
+ */
17
+ export function foliage_variant_senescence(senescence: number, mu: number): number;
18
+ /**
19
+ * The tree senescence at which a tile of maturity `mu` has lost the chlorophyll of its exposed lamina: its nutrients
20
+ * are resorbed and the abscission layer can close, so the first of its leaves may fall. Solves
21
+ * {@link foliage_variant_senescence} `= 1 / FOLIAGE_CHLOROPHYLL_LOSS_RATE` for the tree's senescence.
22
+ *
23
+ * @param {number} mu
24
+ * @returns {number} `(0, 1]`
25
+ */
26
+ export function foliage_variant_abscission_onset(mu: number): number;
27
+ /**
28
+ * Ontogenetic maturity of a leaf, `[0, 1]`: acropetal along its shoot (the distal tip is juvenile, basal nodes
29
+ * mature), and younger on the crown's shell than in its shaded core. It picks the atlas variant the leaf shows.
30
+ *
31
+ * @param {number} u_shoot position along the carrying shoot's leafy span, 0 at its base, 1 at its tip
32
+ * @param {number} rho_shell see {@link foliage_crown_rho}
33
+ * @param {number} jitter per-leaf jitter in `[-1, 1]`; 0 for the expected leaf
34
+ * @returns {number}
35
+ */
36
+ export function foliage_leaf_maturity(u_shoot: number, rho_shell: number, jitter: number): number;
37
+ /**
38
+ * Atlas variant shown by a leaf of maturity `maturity`.
39
+ *
40
+ * @param {number} maturity
41
+ * @param {number} variant_count
42
+ * @returns {number}
43
+ */
44
+ export function foliage_leaf_variant(maturity: number, variant_count: number): number;
45
+ /**
46
+ * Ellipsoidal radius of a point in the grown crown: 0 at its centre, 1 on its shell and beyond.
47
+ *
48
+ * @param {import("./TreeSkeleton.js").TreeSkeleton} skeleton
49
+ * @param {number} x
50
+ * @param {number} y
51
+ * @param {number} z
52
+ * @returns {number}
53
+ */
54
+ export function foliage_crown_rho(skeleton: import("./TreeSkeleton.js").TreeSkeleton, x: number, y: number, z: number): number;
55
+ /**
56
+ * Height of `y` across the configured crown: 0 at its base, 1 at its top.
57
+ *
58
+ * @param {import("../config/CrownConfig.js").CrownConfig} crown
59
+ * @param {number} y
60
+ * @returns {number}
61
+ */
62
+ export function foliage_crown_height_norm(crown: import("../config/CrownConfig.js").CrownConfig, y: number): number;
63
+ /**
64
+ * How exposed a leaf is to sun, cold and wind, from 0 (shaded interior) to 1 (crown surface, high up). The crown
65
+ * shell term is the leaf's ellipsoidal radius in the crown, `rho`, the height term its height across the crown.
66
+ *
67
+ * @param {number} rho_shell normalized distance from the crown centre, `[0, 1]`
68
+ * @param {number} h_norm normalized height in the crown, `[0, 1]`
69
+ * @returns {number}
70
+ */
71
+ export function foliage_sun_exposure(rho_shell: number, h_norm: number): number;
72
+ /**
73
+ * The senescence at which a leaf is shed. No leaf falls before its tile has lost the chlorophyll of its exposed
74
+ * lamina (`onset`, {@link foliage_variant_abscission_onset}); after that, outer and apical leaves go first: a leaf at
75
+ * the crown's surface and at its shoot's tip (`sun_exposure = u_shoot = 1`) falls at `onset`, a shaded basal one last,
76
+ * at 1.
77
+ *
78
+ * @param {number} onset its tile's abscission onset
79
+ * @param {number} sun_exposure see {@link foliage_sun_exposure}
80
+ * @param {number} u_shoot position along the carrying shoot's leafy span, 0 at its base, 1 at its tip
81
+ * @returns {number} in `[onset, 1]`
82
+ */
83
+ export function foliage_abscission_threshold(onset: number, sun_exposure: number, u_shoot: number): number;
84
+ /**
85
+ * How far a still-attached leaf has dried, `[0, 1)`: 0 while its tile still has chlorophyll (it is turgid), rising
86
+ * from its tile's onset to 1 at its own abscission threshold.
87
+ *
88
+ * @param {number} senescence
89
+ * @param {number} onset its tile's abscission onset
90
+ * @param {number} threshold see {@link foliage_abscission_threshold}
91
+ * @returns {number}
92
+ */
93
+ export function foliage_leaf_dryness(senescence: number, onset: number, threshold: number): number;
94
+ /**
95
+ * Rate at which senescence strips chlorophyll from the exposed lamina in the leaf pigment model
96
+ * (`make_foliage_material`): a tile at senescence stage `sigma_k` retains `1 - sigma_k * (rate - shielding)` of its
97
+ * chlorophyll, so its most exposed lamina is bare of it once `sigma_k` reaches `1 / rate`.
98
+ * @type {number}
99
+ */
100
+ export const FOLIAGE_CHLOROPHYLL_LOSS_RATE: number;
101
+ //# sourceMappingURL=foliage_senescence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foliage_senescence.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/foliage_senescence.js"],"names":[],"mappings":"AAUA;;;;;;GAMG;AACH,kDAJW,MAAM,iBACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;GAOG;AACH,uDAJW,MAAM,MACN,MAAM,GACJ,MAAM,CAOlB;AAED;;;;;;;GAOG;AACH,qDAHW,MAAM,GACJ,MAAM,CAOlB;AAED;;;;;;;;GAQG;AACH,+CALW,MAAM,aACN,MAAM,UACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;GAMG;AACH,+CAJW,MAAM,iBACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;GAQG;AACH,4CANW,OAAO,mBAAmB,EAAE,YAAY,KACxC,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,CASlB;AAED;;;;;;GAMG;AACH,iDAJW,OAAO,0BAA0B,EAAE,WAAW,KAC9C,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;GAOG;AACH,gDAJW,MAAM,UACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;GAUG;AACH,oDALW,MAAM,gBACN,MAAM,WACN,MAAM,GACJ,MAAM,CAKlB;AAED;;;;;;;;GAQG;AACH,iDALW,MAAM,SACN,MAAM,aACN,MAAM,GACJ,MAAM,CASlB;AAlJD;;;;;GAKG;AACH,4CAFU,MAAM,CAEkC"}
@@ -0,0 +1,149 @@
1
+ import { clamp } from "../../../core/math/clamp.js";
2
+
3
+ /**
4
+ * Rate at which senescence strips chlorophyll from the exposed lamina in the leaf pigment model
5
+ * (`make_foliage_material`): a tile at senescence stage `sigma_k` retains `1 - sigma_k * (rate - shielding)` of its
6
+ * chlorophyll, so its most exposed lamina is bare of it once `sigma_k` reaches `1 / rate`.
7
+ * @type {number}
8
+ */
9
+ export const FOLIAGE_CHLOROPHYLL_LOSS_RATE = 1.36;
10
+
11
+ /**
12
+ * Ontogenetic maturity of atlas variant `variant`: 0 for the juvenile apical flush, 1 for mature basal foliage.
13
+ *
14
+ * @param {number} variant
15
+ * @param {number} variant_count
16
+ * @returns {number}
17
+ */
18
+ export function foliage_variant_maturity(variant, variant_count) {
19
+ return variant_count > 1 ? variant / (variant_count - 1) : 0.65;
20
+ }
21
+
22
+ /**
23
+ * How far a tile of maturity `mu` has senesced at the tree's `senescence`. Tiles are staggered, so an autumn crown
24
+ * shows leaf-to-leaf diversity: juvenile and mature tiles run ahead of the ones in between.
25
+ *
26
+ * @param {number} senescence `[0, 1]`
27
+ * @param {number} mu tile maturity, see {@link foliage_variant_maturity}
28
+ * @returns {number} the tile's senescence stage `sigma_k`, `[0, 1]`
29
+ */
30
+ export function foliage_variant_senescence(senescence, mu) {
31
+ if (senescence <= 0.0) {
32
+ return 0.0;
33
+ }
34
+ return clamp(senescence * (0.80 + 0.36 * Math.abs(mu - 0.35)) + senescence * senescence * 0.12, 0.0, 1.0);
35
+ }
36
+
37
+ /**
38
+ * The tree senescence at which a tile of maturity `mu` has lost the chlorophyll of its exposed lamina: its nutrients
39
+ * are resorbed and the abscission layer can close, so the first of its leaves may fall. Solves
40
+ * {@link foliage_variant_senescence} `= 1 / FOLIAGE_CHLOROPHYLL_LOSS_RATE` for the tree's senescence.
41
+ *
42
+ * @param {number} mu
43
+ * @returns {number} `(0, 1]`
44
+ */
45
+ export function foliage_variant_abscission_onset(mu) {
46
+ const a = 0.80 + 0.36 * Math.abs(mu - 0.35);
47
+ const c = 1.0 / FOLIAGE_CHLOROPHYLL_LOSS_RATE;
48
+ // 0.12 s^2 + a s - c = 0
49
+ return Math.min(1.0, (-a + Math.sqrt(a * a + 4.0 * 0.12 * c)) / (2.0 * 0.12));
50
+ }
51
+
52
+ /**
53
+ * Ontogenetic maturity of a leaf, `[0, 1]`: acropetal along its shoot (the distal tip is juvenile, basal nodes
54
+ * mature), and younger on the crown's shell than in its shaded core. It picks the atlas variant the leaf shows.
55
+ *
56
+ * @param {number} u_shoot position along the carrying shoot's leafy span, 0 at its base, 1 at its tip
57
+ * @param {number} rho_shell see {@link foliage_crown_rho}
58
+ * @param {number} jitter per-leaf jitter in `[-1, 1]`; 0 for the expected leaf
59
+ * @returns {number}
60
+ */
61
+ export function foliage_leaf_maturity(u_shoot, rho_shell, jitter) {
62
+ return clamp(0.66 * (1.0 - u_shoot) + 0.24 * (1.0 - rho_shell) + 0.05 + 0.07 * jitter, 0.0, 1.0);
63
+ }
64
+
65
+ /**
66
+ * Atlas variant shown by a leaf of maturity `maturity`.
67
+ *
68
+ * @param {number} maturity
69
+ * @param {number} variant_count
70
+ * @returns {number}
71
+ */
72
+ export function foliage_leaf_variant(maturity, variant_count) {
73
+ return clamp(Math.floor(maturity * variant_count), 0, variant_count - 1);
74
+ }
75
+
76
+ /**
77
+ * Ellipsoidal radius of a point in the grown crown: 0 at its centre, 1 on its shell and beyond.
78
+ *
79
+ * @param {import("./TreeSkeleton.js").TreeSkeleton} skeleton
80
+ * @param {number} x
81
+ * @param {number} y
82
+ * @param {number} z
83
+ * @returns {number}
84
+ */
85
+ export function foliage_crown_rho(skeleton, x, y, z) {
86
+ const c = skeleton.crown_center;
87
+ const r = skeleton.crown_radii;
88
+ const dx = (x - c[0]) / Math.max(0.5, r[0]);
89
+ const dy = (y - c[1]) / Math.max(0.5, r[1]);
90
+ const dz = (z - c[2]) / Math.max(0.5, r[2]);
91
+ return clamp(Math.sqrt(dx * dx + dy * dy + dz * dz), 0.0, 1.0);
92
+ }
93
+
94
+ /**
95
+ * Height of `y` across the configured crown: 0 at its base, 1 at its top.
96
+ *
97
+ * @param {import("../config/CrownConfig.js").CrownConfig} crown
98
+ * @param {number} y
99
+ * @returns {number}
100
+ */
101
+ export function foliage_crown_height_norm(crown, y) {
102
+ return clamp((y - crown.base_height) / Math.max(0.1, crown.height), 0.0, 1.0);
103
+ }
104
+
105
+ /**
106
+ * How exposed a leaf is to sun, cold and wind, from 0 (shaded interior) to 1 (crown surface, high up). The crown
107
+ * shell term is the leaf's ellipsoidal radius in the crown, `rho`, the height term its height across the crown.
108
+ *
109
+ * @param {number} rho_shell normalized distance from the crown centre, `[0, 1]`
110
+ * @param {number} h_norm normalized height in the crown, `[0, 1]`
111
+ * @returns {number}
112
+ */
113
+ export function foliage_sun_exposure(rho_shell, h_norm) {
114
+ return clamp(0.62 * rho_shell + 0.38 * h_norm, 0.0, 1.0);
115
+ }
116
+
117
+ /**
118
+ * The senescence at which a leaf is shed. No leaf falls before its tile has lost the chlorophyll of its exposed
119
+ * lamina (`onset`, {@link foliage_variant_abscission_onset}); after that, outer and apical leaves go first: a leaf at
120
+ * the crown's surface and at its shoot's tip (`sun_exposure = u_shoot = 1`) falls at `onset`, a shaded basal one last,
121
+ * at 1.
122
+ *
123
+ * @param {number} onset its tile's abscission onset
124
+ * @param {number} sun_exposure see {@link foliage_sun_exposure}
125
+ * @param {number} u_shoot position along the carrying shoot's leafy span, 0 at its base, 1 at its tip
126
+ * @returns {number} in `[onset, 1]`
127
+ */
128
+ export function foliage_abscission_threshold(onset, sun_exposure, u_shoot) {
129
+ const exposure_order = 0.5 * (clamp(sun_exposure, 0.0, 1.0) + clamp(u_shoot, 0.0, 1.0));
130
+ return onset + (1.0 - onset) * (1.0 - exposure_order);
131
+ }
132
+
133
+ /**
134
+ * How far a still-attached leaf has dried, `[0, 1)`: 0 while its tile still has chlorophyll (it is turgid), rising
135
+ * from its tile's onset to 1 at its own abscission threshold.
136
+ *
137
+ * @param {number} senescence
138
+ * @param {number} onset its tile's abscission onset
139
+ * @param {number} threshold see {@link foliage_abscission_threshold}
140
+ * @returns {number}
141
+ */
142
+ export function foliage_leaf_dryness(senescence, onset, threshold) {
143
+ const span = threshold - onset;
144
+ if (span <= 1e-9) {
145
+ // it falls the moment its tile's chlorophyll goes: attached, it has not begun to dry
146
+ return 0.0;
147
+ }
148
+ return clamp((senescence - onset) / span, 0.0, 1.0);
149
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Leaves an annual unit `length` metres long bears, before any have fallen: `leaves_per_unit + leaves_per_metre *
3
+ * length`, or a short shoot's `leaves_per_short_shoot`, every year.
4
+ *
5
+ * @param {import("../config/TreeSpeciesConfig.js").TreeSpeciesConfig} species
6
+ * @param {boolean} short_shoot
7
+ * @param {number} length
8
+ * @returns {number}
9
+ */
10
+ export function foliage_unit_leaf_count(species: import("../config/TreeSpeciesConfig.js").TreeSpeciesConfig, short_shoot: boolean, length: number): number;
11
+ /**
12
+ * @typedef {Object} FoliageUnitCardSpan
13
+ * @property {number} age years since the unit grew, 0 for this year's
14
+ * @property {number} t_min where the cards hang, as `t_norm` along the branch: card `k` of `count` hangs at
15
+ * `lerp(t_min, t_max, (k + slot) / count)`, the slot by what a card draws; a short shoot's all at its tip
16
+ * @property {number} t_max
17
+ * @property {number} count cards
18
+ * @property {number} scale card size relative to the species' card
19
+ * @property {number} u_min where along the branch's leafy growth the first card's leaves sit, 0 at its oldest end, 1 at
20
+ * its tip; card `k` is at `lerp(u_min, u_max, (k + 0.5) / count)`. Equal ends draw one place for every card.
21
+ * @property {number} u_max
22
+ * @property {number} unit_t_min the unit the cards grow on, whose wood carries them
23
+ * @property {number} unit_t_max
24
+ */
25
+ /**
26
+ * Leaf cards of foliage `rule` on branch `b`, grown by annual units (`TreeSkeleton.branch_unit_count[b] > 0`): one
27
+ * span per unit young enough to carry leaves (`FoliageConfig.leaf_survival`), oldest first.
28
+ *
29
+ * A unit carries its leaves, `leaves_per_unit + leaves_per_metre *` its length (a short shoot:
30
+ * `leaves_per_short_shoot` a year), kept by `leaf_survival[age]`, over the leaves a card draws
31
+ * (`foliage_tile_layout`): one card a leaf, or a needle shoot's needles a card. The count is rounded with a dither per
32
+ * branch and age so it is exact on average. Every card is the species' card, so leaves keep their size whatever the
33
+ * shoot. A short shoot's leaves are crowded at its tip, and each short shoot draws its own leaf maturity; elsewhere
34
+ * maturity follows the card's place along the branch's leafy growth.
35
+ *
36
+ * @param {import("./TreeSkeleton.js").TreeSkeleton} skeleton
37
+ * @param {import("../config/TreeSpeciesConfig.js").TreeSpeciesConfig} species
38
+ * @param {number} b
39
+ * @param {import("../config/FoliageSpawnRule.js").FoliageSpawnRule} rule
40
+ * @param {number} leaves_per_card `FoliageTileLayout.leaves_per_card`
41
+ * @param {FoliageUnitCardSpan[]} out cleared and filled
42
+ * @returns {FoliageUnitCardSpan[]} `out`
43
+ */
44
+ export function foliage_unit_card_spans(skeleton: import("./TreeSkeleton.js").TreeSkeleton, species: import("../config/TreeSpeciesConfig.js").TreeSpeciesConfig, b: number, rule: import("../config/FoliageSpawnRule.js").FoliageSpawnRule, leaves_per_card: number, out: FoliageUnitCardSpan[]): FoliageUnitCardSpan[];
45
+ export type FoliageUnitCardSpan = {
46
+ /**
47
+ * years since the unit grew, 0 for this year's
48
+ */
49
+ age: number;
50
+ /**
51
+ * where the cards hang, as `t_norm` along the branch: card `k` of `count` hangs at
52
+ * `lerp(t_min, t_max, (k + slot) / count)`, the slot by what a card draws; a short shoot's all at its tip
53
+ */
54
+ t_min: number;
55
+ t_max: number;
56
+ /**
57
+ * cards
58
+ */
59
+ count: number;
60
+ /**
61
+ * card size relative to the species' card
62
+ */
63
+ scale: number;
64
+ /**
65
+ * where along the branch's leafy growth the first card's leaves sit, 0 at its oldest end, 1 at
66
+ * its tip; card `k` is at `lerp(u_min, u_max, (k + 0.5) / count)`. Equal ends draw one place for every card.
67
+ */
68
+ u_min: number;
69
+ u_max: number;
70
+ /**
71
+ * the unit the cards grow on, whose wood carries them
72
+ */
73
+ unit_t_min: number;
74
+ unit_t_max: number;
75
+ };
76
+ //# sourceMappingURL=foliage_unit_cards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foliage_unit_cards.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/foliage_unit_cards.js"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AACH,iDALW,OAAO,gCAAgC,EAAE,iBAAiB,eAC1D,OAAO,UACP,MAAM,GACJ,MAAM,CAMlB;AAED;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,kDARW,OAAO,mBAAmB,EAAE,YAAY,WACxC,OAAO,gCAAgC,EAAE,iBAAiB,KAC1D,MAAM,QACN,OAAO,+BAA+B,EAAE,gBAAgB,mBACxD,MAAM,OACN,mBAAmB,EAAE,GACnB,mBAAmB,EAAE,CAyCjC;;;;;SAvEa,MAAM;;;;;WACN,MAAM;WAEN,MAAM;;;;WACN,MAAM;;;;WACN,MAAM;;;;;WACN,MAAM;WAEN,MAAM;;;;gBACN,MAAM;gBACN,MAAM"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * `1 / golden ratio`: the per-age step of the dither that rounds a thinned cohort's card count.
3
+ * @type {number}
4
+ */
5
+ const GOLDEN_CONJUGATE = 0.6180339887498949;
6
+
7
+ /**
8
+ * Leaves an annual unit `length` metres long bears, before any have fallen: `leaves_per_unit + leaves_per_metre *
9
+ * length`, or a short shoot's `leaves_per_short_shoot`, every year.
10
+ *
11
+ * @param {import("../config/TreeSpeciesConfig.js").TreeSpeciesConfig} species
12
+ * @param {boolean} short_shoot
13
+ * @param {number} length
14
+ * @returns {number}
15
+ */
16
+ export function foliage_unit_leaf_count(species, short_shoot, length) {
17
+ return short_shoot
18
+ ? species.foliage.leaves_per_short_shoot
19
+ : species.foliage.leaves_per_unit + species.foliage.leaves_per_metre * length;
20
+ }
21
+
22
+ /**
23
+ * @typedef {Object} FoliageUnitCardSpan
24
+ * @property {number} age years since the unit grew, 0 for this year's
25
+ * @property {number} t_min where the cards hang, as `t_norm` along the branch: card `k` of `count` hangs at
26
+ * `lerp(t_min, t_max, (k + slot) / count)`, the slot by what a card draws; a short shoot's all at its tip
27
+ * @property {number} t_max
28
+ * @property {number} count cards
29
+ * @property {number} scale card size relative to the species' card
30
+ * @property {number} u_min where along the branch's leafy growth the first card's leaves sit, 0 at its oldest end, 1 at
31
+ * its tip; card `k` is at `lerp(u_min, u_max, (k + 0.5) / count)`. Equal ends draw one place for every card.
32
+ * @property {number} u_max
33
+ * @property {number} unit_t_min the unit the cards grow on, whose wood carries them
34
+ * @property {number} unit_t_max
35
+ */
36
+
37
+ /**
38
+ * Leaf cards of foliage `rule` on branch `b`, grown by annual units (`TreeSkeleton.branch_unit_count[b] > 0`): one
39
+ * span per unit young enough to carry leaves (`FoliageConfig.leaf_survival`), oldest first.
40
+ *
41
+ * A unit carries its leaves, `leaves_per_unit + leaves_per_metre *` its length (a short shoot:
42
+ * `leaves_per_short_shoot` a year), kept by `leaf_survival[age]`, over the leaves a card draws
43
+ * (`foliage_tile_layout`): one card a leaf, or a needle shoot's needles a card. The count is rounded with a dither per
44
+ * branch and age so it is exact on average. Every card is the species' card, so leaves keep their size whatever the
45
+ * shoot. A short shoot's leaves are crowded at its tip, and each short shoot draws its own leaf maturity; elsewhere
46
+ * maturity follows the card's place along the branch's leafy growth.
47
+ *
48
+ * @param {import("./TreeSkeleton.js").TreeSkeleton} skeleton
49
+ * @param {import("../config/TreeSpeciesConfig.js").TreeSpeciesConfig} species
50
+ * @param {number} b
51
+ * @param {import("../config/FoliageSpawnRule.js").FoliageSpawnRule} rule
52
+ * @param {number} leaves_per_card `FoliageTileLayout.leaves_per_card`
53
+ * @param {FoliageUnitCardSpan[]} out cleared and filled
54
+ * @returns {FoliageUnitCardSpan[]} `out`
55
+ */
56
+ export function foliage_unit_card_spans(skeleton, species, b, rule, leaves_per_card, out) {
57
+ out.length = 0;
58
+ const units = skeleton.branch_unit_count[b];
59
+ if (units === 0) {
60
+ return out;
61
+ }
62
+ const survival = species.foliage.leaf_survival;
63
+ const at_tip = rule.short_shoot;
64
+ const branch_length = skeleton.branch_length[b];
65
+ const phase = skeleton.branch_phase_hash[b];
66
+
67
+ const cohorts = Math.min(units, survival.length);
68
+ for (let age = cohorts - 1; age >= 0; age--) {
69
+ const t0 = skeleton.branch_unit_start_t(b, age);
70
+ const t1 = age > 0 ? skeleton.branch_unit_start_t(b, age - 1) : 1.0;
71
+ const length = Math.max(0.0, t1 - t0) * branch_length;
72
+
73
+ const leaves = foliage_unit_leaf_count(species, rule.short_shoot, length);
74
+ const dither = (phase + age * GOLDEN_CONJUGATE) % 1.0;
75
+ const count = Math.floor(leaves * survival[age] / Math.max(1, leaves_per_card) + dither);
76
+ if (count === 0) continue;
77
+
78
+ // the oldest leaf-bearing unit is the base of the branch's leafy growth, this year's its tip
79
+ const u0 = (cohorts - 1 - age) / cohorts;
80
+ const u1 = (cohorts - age) / cohorts;
81
+ out.push({
82
+ age,
83
+ t_min: at_tip ? t1 : t0,
84
+ t_max: t1,
85
+ count,
86
+ scale: 1.0,
87
+ // a short shoot's leaves share its own place
88
+ u_min: at_tip ? phase : u0,
89
+ u_max: at_tip ? phase : u1,
90
+ unit_t_min: t0,
91
+ unit_t_max: t1
92
+ });
93
+ }
94
+ return out;
95
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Length (m) of one extension unit of mean `mean` grown at branching `order`: 1 cm plus a negative binomial (orders
3
+ * listed in `rule.length_negative_binomial_p`) or Poisson (the rest) count of further centimetres, the models
4
+ * [BB2000 p. 10-11] fitted to oak, capped at `rule.max_unit_length` of the order.
5
+ *
6
+ * @param {function():number} rng
7
+ * @param {number} mean metres
8
+ * @param {number} order 1-based
9
+ * @param {import("../config/ShootSystemRule.js").ShootSystemRule} rule
10
+ * @returns {number}
11
+ */
12
+ export function shoot_sample_unit_length(rng: () => number, mean: number, order: number, rule: import("../config/ShootSystemRule.js").ShootSystemRule): number;
13
+ /**
14
+ * Expected new long shoots a living shoot of the carrier's order yields in a year: its terminal, plus the laterals its
15
+ * bud zones grow out on a unit of `rule.mean_unit_length`. About 2.65 for oak [BB2000 p. 11]. Short shoots are not
16
+ * counted: they bear no laterals.
17
+ *
18
+ * @param {import("../config/ShootSystemRule.js").ShootSystemRule} rule
19
+ * @returns {number}
20
+ */
21
+ export function shoot_expected_yield(rule: import("../config/ShootSystemRule.js").ShootSystemRule): number;
22
+ //# sourceMappingURL=shoot_demography.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shoot_demography.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/shoot_demography.js"],"names":[],"mappings":"AAoDA;;;;;;;;;;GAUG;AACH,oDANsB,MAAM,QACjB,MAAM,SACN,MAAM,QACN,OAAO,8BAA8B,EAAE,eAAe,GACpD,MAAM,CAgBlB;AAED;;;;;;;GAOG;AACH,2CAHW,OAAO,8BAA8B,EAAE,eAAe,GACpD,MAAM,CAUlB"}
@@ -0,0 +1,96 @@
1
+ import { clamp } from "../../../core/math/clamp.js";
2
+ import { shoot_order_value } from "../config/ShootBudZone.js";
3
+
4
+ /**
5
+ * Lowest length (m) of an extension unit: the 1 cm length class [BB2000 p. 9]. [BB2000]: Buck-Sorlin & Bell (2000),
6
+ * Forestry 73(1): 1-19.
7
+ * @type {number}
8
+ */
9
+ const MIN_UNIT_LENGTH = 0.01;
10
+
11
+ /**
12
+ * @param {function():number} rng
13
+ * @param {number} lambda
14
+ * @returns {number}
15
+ */
16
+ function sample_poisson(rng, lambda) {
17
+ if (lambda <= 0) return 0;
18
+ const limit = Math.exp(-lambda);
19
+ let k = 0;
20
+ let p = rng();
21
+ while (p > limit) {
22
+ k++;
23
+ p *= rng();
24
+ }
25
+ return k;
26
+ }
27
+
28
+ /**
29
+ * Marsaglia & Tsang gamma variate with scale 1.
30
+ * @param {function():number} rng
31
+ * @param {number} shape
32
+ * @returns {number}
33
+ */
34
+ function sample_gamma(rng, shape) {
35
+ if (shape < 1) {
36
+ return sample_gamma(rng, shape + 1) * Math.pow(Math.max(1e-12, rng()), 1 / shape);
37
+ }
38
+ const d = shape - 1 / 3;
39
+ const c = 1 / Math.sqrt(9 * d);
40
+ for (; ;) {
41
+ // standard normal by Box-Muller
42
+ const n = Math.sqrt(-2 * Math.log(Math.max(1e-12, rng()))) * Math.cos(2 * Math.PI * rng());
43
+ const v0 = 1 + c * n;
44
+ if (v0 <= 0) continue;
45
+ const v = v0 * v0 * v0;
46
+ const u = rng();
47
+ if (Math.log(Math.max(1e-12, u)) < 0.5 * n * n + d - d * v + d * Math.log(v)) {
48
+ return d * v;
49
+ }
50
+ }
51
+ }
52
+
53
+ /**
54
+ * Length (m) of one extension unit of mean `mean` grown at branching `order`: 1 cm plus a negative binomial (orders
55
+ * listed in `rule.length_negative_binomial_p`) or Poisson (the rest) count of further centimetres, the models
56
+ * [BB2000 p. 10-11] fitted to oak, capped at `rule.max_unit_length` of the order.
57
+ *
58
+ * @param {function():number} rng
59
+ * @param {number} mean metres
60
+ * @param {number} order 1-based
61
+ * @param {import("../config/ShootSystemRule.js").ShootSystemRule} rule
62
+ * @returns {number}
63
+ */
64
+ export function shoot_sample_unit_length(rng, mean, order, rule) {
65
+ const extra_cm = Math.max(0, mean * 100 - 1);
66
+ const nb_p = rule.length_negative_binomial_p;
67
+ let count;
68
+ if (order <= nb_p.length && extra_cm > 0) {
69
+ // a negative binomial as a gamma-Poisson mixture, with as many failures r as give the fitted p this mean
70
+ const p = nb_p[order - 1];
71
+ const r = extra_cm * p / (1 - p);
72
+ count = sample_poisson(rng, sample_gamma(rng, r) * (1 - p) / p);
73
+ } else {
74
+ count = sample_poisson(rng, extra_cm);
75
+ }
76
+ const cap = shoot_order_value(rule.max_unit_length, order);
77
+ return clamp((1 + count + rng()) / 100, MIN_UNIT_LENGTH, Math.max(MIN_UNIT_LENGTH, cap));
78
+ }
79
+
80
+ /**
81
+ * Expected new long shoots a living shoot of the carrier's order yields in a year: its terminal, plus the laterals its
82
+ * bud zones grow out on a unit of `rule.mean_unit_length`. About 2.65 for oak [BB2000 p. 11]. Short shoots are not
83
+ * counted: they bear no laterals.
84
+ *
85
+ * @param {import("../config/ShootSystemRule.js").ShootSystemRule} rule
86
+ * @returns {number}
87
+ */
88
+ export function shoot_expected_yield(rule) {
89
+ const order = rule.carrier_order;
90
+ let y = 1;
91
+ for (let z = 0; z < rule.zones.length; z++) {
92
+ const zone = rule.zones[z];
93
+ y += zone.bud_count(rule.mean_unit_length, order) * (shoot_order_value(zone.long, order) + shoot_order_value(zone.sylleptic, order));
94
+ }
95
+ return y;
96
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Radius (m) at the base of an annual unit `length` (m) long that grew `age` years ago: diameter `d = 0.27 + 0.02 l`
3
+ * (cm) for a current shoot and `0.40 + 0.02 l` a year on [BB2000 Table 7, all oaks], so a ring of 0.13 cm a year,
4
+ * carried on to older wood. Kept above the 1.9 mm the bark mesher draws without thin-strand artifacts. [BB2000]:
5
+ * Buck-Sorlin & Bell (2000), Forestry 73(1): 1-19.
6
+ * @param {number} length
7
+ * @param {number} age
8
+ * @returns {number}
9
+ */
10
+ export function shoot_radius(length: number, age: number): number;
11
+ /**
12
+ * The radius of {@link shoot_radius} as the wood has it, before the floor the bark mesher draws at: what a shoot adds to
13
+ * the pipe model of the wood that carries it.
14
+ * @param {number} length
15
+ * @param {number} age
16
+ * @returns {number}
17
+ */
18
+ export function shoot_wood_radius(length: number, age: number): number;
19
+ /**
20
+ * Normalises `(x, y, z)` into `out`; a zero vector becomes up.
21
+ * @param {Float32Array|Float64Array|number[]} out
22
+ * @param {number} x
23
+ * @param {number} y
24
+ * @param {number} z
25
+ */
26
+ export function shoot_normalize3(out: Float32Array | Float64Array | number[], x: number, y: number, z: number): void;
27
+ /**
28
+ * A unit vector perpendicular to unit `(x, y, z)`.
29
+ * @param {Float32Array|Float64Array|number[]} out
30
+ * @param {number} x
31
+ * @param {number} y
32
+ * @param {number} z
33
+ */
34
+ export function shoot_perpendicular3(out: Float32Array | Float64Array | number[], x: number, y: number, z: number): void;
35
+ /**
36
+ * Direction out of the crown and up at a point, as the foliage's phototropism reads it.
37
+ * @param {Float32Array|Float64Array|number[]} out
38
+ * @param {import("./TreeSkeleton.js").TreeSkeleton} skeleton
39
+ * @param {number} x
40
+ * @param {number} y
41
+ * @param {number} z
42
+ */
43
+ export function shoot_outward3(out: Float32Array | Float64Array | number[], skeleton: import("./TreeSkeleton.js").TreeSkeleton, x: number, y: number, z: number): void;
44
+ /**
45
+ * The segment of a branch chain containing `t`, and where on it.
46
+ * @param {import("./TreeSkeleton.js").TreeSkeleton} skeleton
47
+ * @param {number[]} nodes
48
+ * @param {number[]} edges
49
+ * @param {number} t
50
+ * @returns {{edge: number, u: number}}
51
+ */
52
+ export function shoot_locate_on_chain(skeleton: import("./TreeSkeleton.js").TreeSkeleton, nodes: number[], edges: number[], t: number): {
53
+ edge: number;
54
+ u: number;
55
+ };
56
+ /**
57
+ * Thinnest radius (m) a shoot is drawn at.
58
+ * @type {number}
59
+ */
60
+ export const SHOOT_MIN_RADIUS: number;
61
+ /**
62
+ * Largest radius of a lateral relative to its mother where it grows out, as `tree_skeleton_compute_pipe_radii` holds it.
63
+ * @type {number}
64
+ */
65
+ export const SHOOT_LATERAL_RADIUS_RATIO: number;
66
+ //# sourceMappingURL=shoot_geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shoot_geometry.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/shoot_geometry.js"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,qCAJW,MAAM,OACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;GAMG;AACH,0CAJW,MAAM,OACN,MAAM,GACJ,MAAM,CAIlB;AAcD;;;;;;GAMG;AACH,sCALW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,KAClC,MAAM,KACN,MAAM,KACN,MAAM,QAahB;AAED;;;;;;GAMG;AACH,0CALW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,KAClC,MAAM,KACN,MAAM,KACN,MAAM,QAShB;AAED;;;;;;;GAOG;AACH,oCANW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,YAClC,OAAO,mBAAmB,EAAE,YAAY,KACxC,MAAM,KACN,MAAM,KACN,MAAM,QAShB;AAED;;;;;;;GAOG;AACH,gDANW,OAAO,mBAAmB,EAAE,YAAY,SACxC,MAAM,EAAE,SACR,MAAM,EAAE,KACR,MAAM,GACJ;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAC,CAWrC;AAlFD;;;GAGG;AACH,+BAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,yCAFU,MAAM,CAE+B"}