@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,10 @@
1
+ /**
2
+ * How a leaf blade is lobed (Ellis et al. 2009, Manual of Leaf Architecture).
3
+ */
4
+ export type LeafLobation = number;
5
+ export namespace LeafLobation {
6
+ let Unlobed: number;
7
+ let Pinnate: number;
8
+ let Palmate: number;
9
+ }
10
+ //# sourceMappingURL=LeafLobation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LeafLobation.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/config/LeafLobation.js"],"names":[],"mappings":";;;2BAIU,MAAM"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * How a leaf blade is lobed (Ellis et al. 2009, Manual of Leaf Architecture).
3
+ *
4
+ * @readonly
5
+ * @enum {number}
6
+ */
7
+ export const LeafLobation = {
8
+ /** no lobes */
9
+ Unlobed: 0,
10
+ /** lobes along both sides of the midvein */
11
+ Pinnate: 1,
12
+ /** primary lobes radiating from the top of the petiole, each with its own primary vein */
13
+ Palmate: 2,
14
+ };
@@ -1,3 +1,13 @@
1
+ /**
2
+ * Sample the phyllotactic azimuth angle for organ `index` under `mode`.
3
+ *
4
+ * @param {PhyllotaxisMode|number} mode
5
+ * @param {number} index integer organ index (may be negative)
6
+ * @param {number} [whorl_count=1] organs per whorl when `mode === PhyllotaxisMode.Whorled`
7
+ * @param {number} [base_phi=0] base azimuth offset (radians)
8
+ * @returns {number} azimuth angle in radians
9
+ */
10
+ export function phyllotaxis_sample_angle(mode: PhyllotaxisMode | number, index: number, whorl_count?: number, base_phi?: number): number;
1
11
  /**
2
12
  * Botanical phyllotaxis arrangement modes for axillary buds, lateral branches, and leaf clusters.
3
13
  */
@@ -9,5 +19,6 @@ export namespace PhyllotaxisMode {
9
19
  let Opposite: number;
10
20
  let OppositeDecussate: number;
11
21
  let Whorled: number;
22
+ let FlareLobes: number;
12
23
  }
13
24
  //# sourceMappingURL=PhyllotaxisMode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PhyllotaxisMode.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/config/PhyllotaxisMode.js"],"names":[],"mappings":";;;8BAIU,MAAM"}
1
+ {"version":3,"file":"PhyllotaxisMode.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/config/PhyllotaxisMode.js"],"names":[],"mappings":"AA2BA;;;;;;;;GAQG;AACH,+CANW,eAAe,GAAC,MAAM,SACtB,MAAM,gBACN,MAAM,aACN,MAAM,GACJ,MAAM,CAqBlB;;;;8BA/CS,MAAM"}
@@ -1,3 +1,7 @@
1
+ import { GOLDEN_RATIO } from "../../../core/math/GOLDEN_RATIO.js";
2
+ import { PI2 } from "../../../core/math/PI2.js";
3
+
4
+ const GOLDEN_ANGLE = PI2 / (GOLDEN_RATIO * GOLDEN_RATIO);
1
5
  /**
2
6
  * Botanical phyllotaxis arrangement modes for axillary buds, lateral branches, and leaf clusters.
3
7
  *
@@ -17,4 +21,36 @@ export const PhyllotaxisMode = {
17
21
  OppositeDecussate: 4,
18
22
  /** M-verticillate ring around node with half-step alternation, M >= 3 organs per node */
19
23
  Whorled: 5,
24
+ /** One organ on each crest of the parent's basal flare lobes (`flare_lobes`), so roots continue the buttresses */
25
+ FlareLobes: 6,
20
26
  };
27
+
28
+ /**
29
+ * Sample the phyllotactic azimuth angle for organ `index` under `mode`.
30
+ *
31
+ * @param {PhyllotaxisMode|number} mode
32
+ * @param {number} index integer organ index (may be negative)
33
+ * @param {number} [whorl_count=1] organs per whorl when `mode === PhyllotaxisMode.Whorled`
34
+ * @param {number} [base_phi=0] base azimuth offset (radians)
35
+ * @returns {number} azimuth angle in radians
36
+ */
37
+ export function phyllotaxis_sample_angle(mode, index, whorl_count = 1, base_phi = 0) {
38
+ switch (mode) {
39
+ case PhyllotaxisMode.AlternateDistichous:
40
+ return base_phi + index * Math.PI;
41
+ case PhyllotaxisMode.Tristichous:
42
+ return base_phi + index * (PI2 / 3.0);
43
+ case PhyllotaxisMode.Opposite:
44
+ return base_phi + (index & 1) * Math.PI;
45
+ case PhyllotaxisMode.OppositeDecussate:
46
+ return base_phi + (index & 1) * Math.PI + (index >> 1) * (Math.PI * 0.5);
47
+ case PhyllotaxisMode.Whorled: {
48
+ const w_size = Math.max(1, whorl_count | 0);
49
+ const sub_idx = ((index % w_size) + w_size) % w_size;
50
+ return base_phi + (sub_idx * PI2) / w_size + (Math.floor(index / w_size) * Math.PI) / w_size;
51
+ }
52
+ case PhyllotaxisMode.SpiralGolden:
53
+ default:
54
+ return base_phi + index * GOLDEN_ANGLE;
55
+ }
56
+ }
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Value of a per-order list at a 1-based branching `order`: orders past its end take its last value.
3
+ *
4
+ * @param {number[]} values
5
+ * @param {number} order 1-based
6
+ * @returns {number}
7
+ */
8
+ export function shoot_order_value(values: number[], order: number): number;
9
+ /**
10
+ * One zone of lateral buds along an annual extension unit, and what its buds grow into. A unit's zones are listed in
11
+ * `ShootSystemRule.zones`; the defaults are no zone at all.
12
+ *
13
+ * Every per-order list is indexed by the order of the mother axis, the carrier being order 1, and orders past its
14
+ * end take its last value.
15
+ */
16
+ export class ShootBudZone {
17
+ /**
18
+ * @param {Partial<ShootBudZone>} [options]
19
+ * @returns {ShootBudZone}
20
+ */
21
+ static from(options?: Partial<ShootBudZone>): ShootBudZone;
22
+ /**
23
+ * Where the zone starts along its unit, 0 at the unit's base, 1 at its tip.
24
+ * @type {number}
25
+ */
26
+ u_min: number;
27
+ /**
28
+ * Where the zone ends along its unit.
29
+ * @type {number}
30
+ */
31
+ u_max: number;
32
+ /**
33
+ * Buds the zone holds on a unit of no length, per mother order; with {@link buds_per_metre}, a unit `l` metres long
34
+ * holds `round(buds + buds_per_metre * l)`.
35
+ * @type {number[]}
36
+ */
37
+ buds: number[];
38
+ /**
39
+ * Buds the zone gains per metre of unit, per mother order.
40
+ * @type {number[]}
41
+ */
42
+ buds_per_metre: number[];
43
+ /**
44
+ * Share of the zone's buds that grow a long shoot the spring after their unit grew (proleptic), per mother order.
45
+ * @type {number[]}
46
+ */
47
+ long: number[];
48
+ /**
49
+ * Share of the zone's buds that grow a long shoot in the same season as their unit (sylleptic), per mother order.
50
+ * @type {number[]}
51
+ */
52
+ sylleptic: number[];
53
+ /**
54
+ * Share of the zone's buds that grow a short shoot the spring after their unit grew, per mother order.
55
+ * @type {number[]}
56
+ */
57
+ short: number[];
58
+ /**
59
+ * Mean length (m) of a long shoot's first unit from this zone, before {@link length_slope}, per mother order.
60
+ * @type {number[]}
61
+ */
62
+ length: number[];
63
+ /**
64
+ * Mean length of a long shoot's first unit from this zone per metre of the mother unit it grows from, per mother
65
+ * order: a lateral's length is `length + length_slope * mother unit length`.
66
+ * @type {number[]}
67
+ */
68
+ length_slope: number[];
69
+ /**
70
+ * @param {Partial<ShootBudZone>} [overrides]
71
+ * @returns {this}
72
+ */
73
+ applyOverrides(overrides?: Partial<ShootBudZone>): this;
74
+ /**
75
+ * Buds the zone holds on a unit `length` metres long, on a mother of `order`.
76
+ * @param {number} length
77
+ * @param {number} order
78
+ * @returns {number}
79
+ */
80
+ bud_count(length: number, order: number): number;
81
+ /**
82
+ * @param {ShootBudZone} other
83
+ * @returns {this}
84
+ */
85
+ copy(other: ShootBudZone): this;
86
+ /**
87
+ * @returns {ShootBudZone}
88
+ */
89
+ clone(): ShootBudZone;
90
+ /**
91
+ * @param {ShootBudZone} other
92
+ * @returns {boolean}
93
+ */
94
+ equals(other: ShootBudZone): boolean;
95
+ /**
96
+ * @returns {number}
97
+ */
98
+ hash(): number;
99
+ /**
100
+ * @readonly
101
+ * @type {boolean}
102
+ */
103
+ readonly isShootBudZone: boolean;
104
+ }
105
+ //# sourceMappingURL=ShootBudZone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShootBudZone.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/config/ShootBudZone.js"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,0CAJW,MAAM,EAAE,SACR,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;GAMG;AACH;IAyDI;;;OAGG;IACH,sBAHW,QAAQ,YAAY,CAAC,GACnB,YAAY,CAMxB;IAhED;;;OAGG;IACH,OAFU,MAAM,CAEJ;IAEZ;;;OAGG;IACH,OAFU,MAAM,CAEJ;IAEZ;;;;OAIG;IACH,MAFU,MAAM,EAAE,CAEP;IAEX;;;OAGG;IACH,gBAFU,MAAM,EAAE,CAEG;IAErB;;;OAGG;IACH,MAFU,MAAM,EAAE,CAEP;IAEX;;;OAGG;IACH,WAFU,MAAM,EAAE,CAEF;IAEhB;;;OAGG;IACH,OAFU,MAAM,EAAE,CAEN;IAEZ;;;OAGG;IACH,QAFU,MAAM,EAAE,CAEF;IAEhB;;;;OAIG;IACH,cAFU,MAAM,EAAE,CAEC;IAYnB;;;OAGG;IACH,2BAHW,QAAQ,YAAY,CAAC,GACnB,IAAI,CAgBhB;IAED;;;;;OAKG;IACH,kBAJW,MAAM,SACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,YAHW,YAAY,GACV,IAAI,CAchB;IAED;;OAEG;IACH,SAFa,YAAY,CAMxB;IAED;;;OAGG;IACH,cAHW,YAAY,GACV,OAAO,CAcnB;IAED;;OAEG;IACH,QAFa,MAAM,CAYlB;IAGL;;;OAGG;IACH,yBAFU,OAAO,CAEoB;CANpC"}
@@ -0,0 +1,219 @@
1
+ import { assert } from "../../../core/assert.js";
2
+ import { isArrayEqualStrict } from "../../../core/collection/array/isArrayEqualStrict.js";
3
+ import { hash_mix2 } from "../../../core/math/hash/hash_mix2.js";
4
+ import { computeHashFloatArray } from "../../../core/math/hash/computeHashFloatArray.js";
5
+ import { computeHashFloat } from "../../../core/primitives/numbers/computeHashFloat.js";
6
+
7
+ /**
8
+ * Value of a per-order list at a 1-based branching `order`: orders past its end take its last value.
9
+ *
10
+ * @param {number[]} values
11
+ * @param {number} order 1-based
12
+ * @returns {number}
13
+ */
14
+ export function shoot_order_value(values, order) {
15
+ return values[Math.min(values.length, Math.max(1, order)) - 1];
16
+ }
17
+
18
+ /**
19
+ * One zone of lateral buds along an annual extension unit, and what its buds grow into. A unit's zones are listed in
20
+ * `ShootSystemRule.zones`; the defaults are no zone at all.
21
+ *
22
+ * Every per-order list is indexed by the order of the mother axis, the carrier being order 1, and orders past its
23
+ * end take its last value.
24
+ */
25
+ export class ShootBudZone {
26
+ /**
27
+ * Where the zone starts along its unit, 0 at the unit's base, 1 at its tip.
28
+ * @type {number}
29
+ */
30
+ u_min = 0.0;
31
+
32
+ /**
33
+ * Where the zone ends along its unit.
34
+ * @type {number}
35
+ */
36
+ u_max = 1.0;
37
+
38
+ /**
39
+ * Buds the zone holds on a unit of no length, per mother order; with {@link buds_per_metre}, a unit `l` metres long
40
+ * holds `round(buds + buds_per_metre * l)`.
41
+ * @type {number[]}
42
+ */
43
+ buds = [0];
44
+
45
+ /**
46
+ * Buds the zone gains per metre of unit, per mother order.
47
+ * @type {number[]}
48
+ */
49
+ buds_per_metre = [0];
50
+
51
+ /**
52
+ * Share of the zone's buds that grow a long shoot the spring after their unit grew (proleptic), per mother order.
53
+ * @type {number[]}
54
+ */
55
+ long = [0];
56
+
57
+ /**
58
+ * Share of the zone's buds that grow a long shoot in the same season as their unit (sylleptic), per mother order.
59
+ * @type {number[]}
60
+ */
61
+ sylleptic = [0];
62
+
63
+ /**
64
+ * Share of the zone's buds that grow a short shoot the spring after their unit grew, per mother order.
65
+ * @type {number[]}
66
+ */
67
+ short = [0];
68
+
69
+ /**
70
+ * Mean length (m) of a long shoot's first unit from this zone, before {@link length_slope}, per mother order.
71
+ * @type {number[]}
72
+ */
73
+ length = [0.05];
74
+
75
+ /**
76
+ * Mean length of a long shoot's first unit from this zone per metre of the mother unit it grows from, per mother
77
+ * order: a lateral's length is `length + length_slope * mother unit length`.
78
+ * @type {number[]}
79
+ */
80
+ length_slope = [0];
81
+
82
+ /**
83
+ * @param {Partial<ShootBudZone>} [options]
84
+ * @returns {ShootBudZone}
85
+ */
86
+ static from(options = {}) {
87
+ const r = new ShootBudZone();
88
+ r.applyOverrides(options);
89
+ return r;
90
+ }
91
+
92
+ /**
93
+ * @param {Partial<ShootBudZone>} [overrides]
94
+ * @returns {this}
95
+ */
96
+ applyOverrides(overrides = {}) {
97
+ if (overrides === null || overrides === undefined) {
98
+ return this;
99
+ }
100
+ if (overrides.u_min !== undefined) this.u_min = Math.min(1, Math.max(0, overrides.u_min));
101
+ if (overrides.u_max !== undefined) this.u_max = Math.min(1, Math.max(0, overrides.u_max));
102
+ if (overrides.buds !== undefined) this.buds = signed_list(overrides.buds);
103
+ if (overrides.buds_per_metre !== undefined) this.buds_per_metre = positive_list(overrides.buds_per_metre, 0);
104
+ if (overrides.long !== undefined) this.long = share_list(overrides.long);
105
+ if (overrides.sylleptic !== undefined) this.sylleptic = share_list(overrides.sylleptic);
106
+ if (overrides.short !== undefined) this.short = share_list(overrides.short);
107
+ if (overrides.length !== undefined) this.length = positive_list(overrides.length, 1e-3);
108
+ if (overrides.length_slope !== undefined) this.length_slope = positive_list(overrides.length_slope, 0);
109
+ return this;
110
+ }
111
+
112
+ /**
113
+ * Buds the zone holds on a unit `length` metres long, on a mother of `order`.
114
+ * @param {number} length
115
+ * @param {number} order
116
+ * @returns {number}
117
+ */
118
+ bud_count(length, order) {
119
+ return Math.max(0, Math.round(shoot_order_value(this.buds, order) + shoot_order_value(this.buds_per_metre, order) * length));
120
+ }
121
+
122
+ /**
123
+ * @param {ShootBudZone} other
124
+ * @returns {this}
125
+ */
126
+ copy(other) {
127
+ assert.defined(other, 'other');
128
+ this.u_min = other.u_min;
129
+ this.u_max = other.u_max;
130
+ this.buds = other.buds.slice();
131
+ this.buds_per_metre = other.buds_per_metre.slice();
132
+ this.long = other.long.slice();
133
+ this.sylleptic = other.sylleptic.slice();
134
+ this.short = other.short.slice();
135
+ this.length = other.length.slice();
136
+ this.length_slope = other.length_slope.slice();
137
+ return this;
138
+ }
139
+
140
+ /**
141
+ * @returns {ShootBudZone}
142
+ */
143
+ clone() {
144
+ const r = new ShootBudZone();
145
+ r.copy(this);
146
+ return r;
147
+ }
148
+
149
+ /**
150
+ * @param {ShootBudZone} other
151
+ * @returns {boolean}
152
+ */
153
+ equals(other) {
154
+ if (this === other) return true;
155
+ if (!other || !other.isShootBudZone) return false;
156
+ return this.u_min === other.u_min
157
+ && this.u_max === other.u_max
158
+ && isArrayEqualStrict(this.buds, other.buds)
159
+ && isArrayEqualStrict(this.buds_per_metre, other.buds_per_metre)
160
+ && isArrayEqualStrict(this.long, other.long)
161
+ && isArrayEqualStrict(this.sylleptic, other.sylleptic)
162
+ && isArrayEqualStrict(this.short, other.short)
163
+ && isArrayEqualStrict(this.length, other.length)
164
+ && isArrayEqualStrict(this.length_slope, other.length_slope);
165
+ }
166
+
167
+ /**
168
+ * @returns {number}
169
+ */
170
+ hash() {
171
+ let h = hash_mix2(computeHashFloat(this.u_min), computeHashFloat(this.u_max));
172
+ h = hash_mix2(h, computeHashFloatArray(this.buds));
173
+ h = hash_mix2(h, computeHashFloatArray(this.buds_per_metre));
174
+ h = hash_mix2(h, computeHashFloatArray(this.long));
175
+ h = hash_mix2(h, computeHashFloatArray(this.sylleptic));
176
+ h = hash_mix2(h, computeHashFloatArray(this.short));
177
+ h = hash_mix2(h, computeHashFloatArray(this.length));
178
+ h = hash_mix2(h, computeHashFloatArray(this.length_slope));
179
+ return h;
180
+ }
181
+ }
182
+
183
+ /**
184
+ * @readonly
185
+ * @type {boolean}
186
+ */
187
+ ShootBudZone.prototype.isShootBudZone = true;
188
+
189
+ /**
190
+ * @param {number[]} values
191
+ * @returns {number[]}
192
+ */
193
+ function share_list(values) {
194
+ assert.isArray(values, 'values');
195
+ assert.greaterThan(values.length, 0, 'values.length');
196
+ return values.map(v => Math.min(1, Math.max(0, v)));
197
+ }
198
+
199
+ /**
200
+ * A per-order list whose values may be negative: an intercept of a fitted line.
201
+ * @param {number[]} values
202
+ * @returns {number[]}
203
+ */
204
+ function signed_list(values) {
205
+ assert.isArray(values, 'values');
206
+ assert.greaterThan(values.length, 0, 'values.length');
207
+ return values.slice();
208
+ }
209
+
210
+ /**
211
+ * @param {number[]} values
212
+ * @param {number} min
213
+ * @returns {number[]}
214
+ */
215
+ function positive_list(values, min) {
216
+ assert.isArray(values, 'values');
217
+ assert.greaterThan(values.length, 0, 'values.length');
218
+ return values.map(v => Math.max(min, v));
219
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * How a species' twig systems grow together, season by season, in the light they make for each other (see
3
+ * `tree_skeleton_grow_shoots`): how old the framework is, and how a shoot's vigour follows the light it receives.
4
+ *
5
+ * Vigour is the bifurcation ratio Rb, the net shoots a shoot leaves a year (Niinemets & Lukjanova 2003, New Phytol.
6
+ * 158: 75-89). It rises with light: from 1, where shoots just replace themselves, at {@link compensation_light}, to
7
+ * {@link vigour} at {@link saturation_light}, flat above, and below 1 in deeper shade, where a branch thins and dies.
8
+ * The defaults are chosen; each preset says where its own come from.
9
+ */
10
+ export class ShootGrowthConfig {
11
+ /**
12
+ * @param {Partial<ShootGrowthConfig>} [options]
13
+ * @returns {ShootGrowthConfig}
14
+ */
15
+ static from(options?: Partial<ShootGrowthConfig>): ShootGrowthConfig;
16
+ /**
17
+ * Length (m) the leader grows a year. It dates the framework: every branch elongates at this rate from when its
18
+ * parent's growth reached where it joins, so the tree is as old as its longest path from the base took to grow.
19
+ * @type {number}
20
+ */
21
+ leader_growth: number;
22
+ /**
23
+ * Net shoots a shoot leaves a year in full light (Rb at or above {@link saturation_light}).
24
+ * @type {number}
25
+ */
26
+ vigour: number;
27
+ /**
28
+ * Relative irradiance (1 under open sky) at which a shoot just replaces itself: Rb = 1.
29
+ * @type {number}
30
+ */
31
+ compensation_light: number;
32
+ /**
33
+ * Relative irradiance at and above which a shoot grows at its full {@link vigour}.
34
+ * @type {number}
35
+ */
36
+ saturation_light: number;
37
+ /**
38
+ * Clumping of leaves within a voxel of the light field (Omega): 1 spreads them at random, below 1 bunches them on
39
+ * their shoots, which lets more light through.
40
+ * @type {number}
41
+ */
42
+ leaf_clumping: number;
43
+ /**
44
+ * Edge (m) of a voxel of the light field: the scale over which leaf area is averaged. 0.25 m is chosen, about a
45
+ * shoot system's.
46
+ * @type {number}
47
+ */
48
+ light_cell: number;
49
+ /**
50
+ * Net shoots a shoot leaves a year at relative irradiance `light`.
51
+ * @param {number} light
52
+ * @returns {number}
53
+ */
54
+ net_yield(light: number): number;
55
+ /**
56
+ * @param {Partial<ShootGrowthConfig>} [overrides]
57
+ * @returns {this}
58
+ */
59
+ applyOverrides(overrides?: Partial<ShootGrowthConfig>): this;
60
+ /**
61
+ * @param {ShootGrowthConfig} other
62
+ * @returns {this}
63
+ */
64
+ copy(other: ShootGrowthConfig): this;
65
+ /**
66
+ * @returns {ShootGrowthConfig}
67
+ */
68
+ clone(): ShootGrowthConfig;
69
+ /**
70
+ * @param {ShootGrowthConfig} other
71
+ * @returns {boolean}
72
+ */
73
+ equals(other: ShootGrowthConfig): boolean;
74
+ /**
75
+ * @returns {number}
76
+ */
77
+ hash(): number;
78
+ /**
79
+ * @readonly
80
+ * @type {boolean}
81
+ */
82
+ readonly isShootGrowthConfig: boolean;
83
+ }
84
+ //# sourceMappingURL=ShootGrowthConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShootGrowthConfig.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/config/ShootGrowthConfig.js"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AACH;IAmDI;;;OAGG;IACH,sBAHW,QAAQ,iBAAiB,CAAC,GACxB,iBAAiB,CAM7B;IA1DD;;;;OAIG;IACH,eAFU,MAAM,CAEI;IAEpB;;;OAGG;IACH,QAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,oBAFU,MAAM,CAEU;IAE1B;;;OAGG;IACH,kBAFU,MAAM,CAEQ;IAExB;;;;OAIG;IACH,eAFU,MAAM,CAEI;IAEpB;;;;OAIG;IACH,YAFU,MAAM,CAEE;IAElB;;;;OAIG;IACH,iBAHW,MAAM,GACJ,MAAM,CAMlB;IAYD;;;OAGG;IACH,2BAHW,QAAQ,iBAAiB,CAAC,GACxB,IAAI,CAahB;IAED;;;OAGG;IACH,YAHW,iBAAiB,GACf,IAAI,CAWhB;IAED;;OAEG;IACH,SAFa,iBAAiB,CAI7B;IAED;;;OAGG;IACH,cAHW,iBAAiB,GACf,OAAO,CAWnB;IAED;;OAEG;IACH,QAFa,MAAM,CASlB;IAGL;;;OAGG;IACH,8BAFU,OAAO,CAE8B;CAN9C"}
@@ -0,0 +1,146 @@
1
+ import { assert } from "../../../core/assert.js";
2
+ import { hash_mix2 } from "../../../core/math/hash/hash_mix2.js";
3
+ import { computeHashFloat } from "../../../core/primitives/numbers/computeHashFloat.js";
4
+
5
+ /**
6
+ * How a species' twig systems grow together, season by season, in the light they make for each other (see
7
+ * `tree_skeleton_grow_shoots`): how old the framework is, and how a shoot's vigour follows the light it receives.
8
+ *
9
+ * Vigour is the bifurcation ratio Rb, the net shoots a shoot leaves a year (Niinemets & Lukjanova 2003, New Phytol.
10
+ * 158: 75-89). It rises with light: from 1, where shoots just replace themselves, at {@link compensation_light}, to
11
+ * {@link vigour} at {@link saturation_light}, flat above, and below 1 in deeper shade, where a branch thins and dies.
12
+ * The defaults are chosen; each preset says where its own come from.
13
+ */
14
+ export class ShootGrowthConfig {
15
+ /**
16
+ * Length (m) the leader grows a year. It dates the framework: every branch elongates at this rate from when its
17
+ * parent's growth reached where it joins, so the tree is as old as its longest path from the base took to grow.
18
+ * @type {number}
19
+ */
20
+ leader_growth = 0.3;
21
+
22
+ /**
23
+ * Net shoots a shoot leaves a year in full light (Rb at or above {@link saturation_light}).
24
+ * @type {number}
25
+ */
26
+ vigour = 1.5;
27
+
28
+ /**
29
+ * Relative irradiance (1 under open sky) at which a shoot just replaces itself: Rb = 1.
30
+ * @type {number}
31
+ */
32
+ compensation_light = 0.22;
33
+
34
+ /**
35
+ * Relative irradiance at and above which a shoot grows at its full {@link vigour}.
36
+ * @type {number}
37
+ */
38
+ saturation_light = 0.30;
39
+
40
+ /**
41
+ * Clumping of leaves within a voxel of the light field (Omega): 1 spreads them at random, below 1 bunches them on
42
+ * their shoots, which lets more light through.
43
+ * @type {number}
44
+ */
45
+ leaf_clumping = 1.0;
46
+
47
+ /**
48
+ * Edge (m) of a voxel of the light field: the scale over which leaf area is averaged. 0.25 m is chosen, about a
49
+ * shoot system's.
50
+ * @type {number}
51
+ */
52
+ light_cell = 0.25;
53
+
54
+ /**
55
+ * Net shoots a shoot leaves a year at relative irradiance `light`.
56
+ * @param {number} light
57
+ * @returns {number}
58
+ */
59
+ net_yield(light) {
60
+ const span = Math.max(1e-6, this.saturation_light - this.compensation_light);
61
+ const slope = (this.vigour - 1) / span;
62
+ return Math.max(0, Math.min(this.vigour, 1 + (light - this.compensation_light) * slope));
63
+ }
64
+
65
+ /**
66
+ * @param {Partial<ShootGrowthConfig>} [options]
67
+ * @returns {ShootGrowthConfig}
68
+ */
69
+ static from(options = {}) {
70
+ const r = new ShootGrowthConfig();
71
+ r.applyOverrides(options);
72
+ return r;
73
+ }
74
+
75
+ /**
76
+ * @param {Partial<ShootGrowthConfig>} [overrides]
77
+ * @returns {this}
78
+ */
79
+ applyOverrides(overrides = {}) {
80
+ if (overrides === null || overrides === undefined) {
81
+ return this;
82
+ }
83
+ if (overrides.leader_growth !== undefined) this.leader_growth = Math.max(0.01, overrides.leader_growth);
84
+ if (overrides.vigour !== undefined) this.vigour = Math.max(0, overrides.vigour);
85
+ if (overrides.compensation_light !== undefined) this.compensation_light = Math.min(1, Math.max(0, overrides.compensation_light));
86
+ if (overrides.saturation_light !== undefined) this.saturation_light = Math.min(1, Math.max(0, overrides.saturation_light));
87
+ if (overrides.leaf_clumping !== undefined) this.leaf_clumping = Math.min(1, Math.max(0, overrides.leaf_clumping));
88
+ if (overrides.light_cell !== undefined) this.light_cell = Math.max(0.02, overrides.light_cell);
89
+ return this;
90
+ }
91
+
92
+ /**
93
+ * @param {ShootGrowthConfig} other
94
+ * @returns {this}
95
+ */
96
+ copy(other) {
97
+ assert.defined(other, 'other');
98
+ this.leader_growth = other.leader_growth;
99
+ this.vigour = other.vigour;
100
+ this.compensation_light = other.compensation_light;
101
+ this.saturation_light = other.saturation_light;
102
+ this.leaf_clumping = other.leaf_clumping;
103
+ this.light_cell = other.light_cell;
104
+ return this;
105
+ }
106
+
107
+ /**
108
+ * @returns {ShootGrowthConfig}
109
+ */
110
+ clone() {
111
+ return new ShootGrowthConfig().copy(this);
112
+ }
113
+
114
+ /**
115
+ * @param {ShootGrowthConfig} other
116
+ * @returns {boolean}
117
+ */
118
+ equals(other) {
119
+ if (this === other) return true;
120
+ if (!other || !other.isShootGrowthConfig) return false;
121
+ return this.leader_growth === other.leader_growth
122
+ && this.vigour === other.vigour
123
+ && this.compensation_light === other.compensation_light
124
+ && this.saturation_light === other.saturation_light
125
+ && this.leaf_clumping === other.leaf_clumping
126
+ && this.light_cell === other.light_cell;
127
+ }
128
+
129
+ /**
130
+ * @returns {number}
131
+ */
132
+ hash() {
133
+ let h = hash_mix2(computeHashFloat(this.leader_growth), computeHashFloat(this.vigour));
134
+ h = hash_mix2(h, computeHashFloat(this.compensation_light));
135
+ h = hash_mix2(h, computeHashFloat(this.saturation_light));
136
+ h = hash_mix2(h, computeHashFloat(this.leaf_clumping));
137
+ h = hash_mix2(h, computeHashFloat(this.light_cell));
138
+ return h;
139
+ }
140
+ }
141
+
142
+ /**
143
+ * @readonly
144
+ * @type {boolean}
145
+ */
146
+ ShootGrowthConfig.prototype.isShootGrowthConfig = true;