@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,144 @@
1
+ /**
2
+ * Peripheral shoot system edge of the generator graph: every living branch grown by generator `source` carries a
3
+ * twig system grown year by year from its own buds, each axis of which is a branch of generator `target` (see
4
+ * `tree_skeleton_grow_shoots`).
5
+ *
6
+ * The model is the oak's [BB2000, BB1998], generalised: each year every living axis grows a terminal extension unit,
7
+ * and the buds on its units grow into long shoots (the spring after, or the same season), short shoots, or nothing,
8
+ * by bud zone and branching order. How many seasons, and how many new shoots survive in the light they get, is the
9
+ * species' `ShootGrowthConfig`. Per-order lists are indexed from order 1 (the carrier is `carrier_order`), and
10
+ * orders past their end take their last value.
11
+ *
12
+ * The defaults are pedunculate and sessile oak, from the peripheral branches of mature crowns measured by
13
+ * Buck-Sorlin & Bell (2000), Models of crown architecture in Quercus petraea and Q. robur: shoot lengths and bud
14
+ * numbers, Forestry 73(1): 1-19 [BB2000], and the shoot shedding of a free-standing Q. robur measured by
15
+ * Buck-Sorlin & Bell (1998), A quantification of shoot shedding in pedunculate oak (Quercus robur L.), Botanical
16
+ * Journal of the Linnean Society 127: 371-391 [BB1998].
17
+ */
18
+ export class ShootSystemRule {
19
+ /**
20
+ * @param {Partial<ShootSystemRule>} [options]
21
+ * @returns {ShootSystemRule}
22
+ */
23
+ static from(options?: Partial<ShootSystemRule>): ShootSystemRule;
24
+ /**
25
+ * Carrier branch generator index into `TreeSpeciesConfig.branches`.
26
+ * @type {number}
27
+ */
28
+ source: number;
29
+ /**
30
+ * Generator index of the long shoots, which shapes how they look (radial segments, bark, tropisms). Greater than
31
+ * `source`.
32
+ * @type {number}
33
+ */
34
+ target: number;
35
+ /**
36
+ * Generator index of the short shoots, so foliage rules can tell them apart (`FoliageSpawnRule.short_shoot`).
37
+ * Greater than `source`. Used by zones whose buds grow short shoots.
38
+ * @type {number}
39
+ */
40
+ short_target: number;
41
+ /**
42
+ * Highest branching order a shoot may reach within the system [BB2000 p. 15].
43
+ * @type {number}
44
+ */
45
+ max_order: number;
46
+ /**
47
+ * Branching order of the carrier, in the numbering of the rule's per-order lists: where a source counts orders
48
+ * from the stem, a carrier deep in the framework starts deep in its lists. Oak's are counted from the branch
49
+ * measured [BB2000 p. 7], so its carriers are order 1.
50
+ * @type {number}
51
+ */
52
+ carrier_order: number;
53
+ /**
54
+ * Mean length (m) of an axis's terminal extension unit, before {@link terminal_length_slope}, per order of the
55
+ * axis: 11.7 cm at the first order [BB2000 p. 11], shorter by 0.644 an order [BB2000 p. 9].
56
+ * @type {number[]}
57
+ */
58
+ terminal_length: number[];
59
+ /**
60
+ * Mean length of a terminal extension unit per metre of the axis's previous unit, per order of the axis: a
61
+ * terminal unit is `terminal_length + terminal_length_slope * previous unit` long on average. Oak's do not
62
+ * follow their previous unit.
63
+ * @type {number[]}
64
+ */
65
+ terminal_length_slope: number[];
66
+ /**
67
+ * Longest extension unit (m) per order: 30 cm at the first order, falling to 8 cm at the fourth [BB2000 p. 9].
68
+ * @type {number[]}
69
+ */
70
+ max_unit_length: number[];
71
+ /**
72
+ * Probability of failure `p` of the negative binomial count of centimetres a unit grows past its first, per
73
+ * order; orders past the list are Poisson [BB2000 p. 10-11, Fig. 6].
74
+ * @type {number[]}
75
+ */
76
+ length_negative_binomial_p: number[];
77
+ /**
78
+ * Mean length (m) of an extension unit, at which a living shoot's yield of new shoots is counted
79
+ * ({@link shoot_expected_yield}), and against which a shoot's length ranks it for shedding: 5.9 cm on branch o1b1
80
+ * [BB2000 Table 4], where oak's outgrowth shares were counted.
81
+ * @type {number}
82
+ */
83
+ mean_unit_length: number;
84
+ /**
85
+ * Lateral bud zones along an extension unit. Oak's: the pseudo-whorl of "almost always four" subapical buds at
86
+ * 0.8-0.99 of the unit [BB2000 p. 7, 11, 17], 1.17 of which grow out on branch o1b1 [BB2000 p. 11]; and the
87
+ * median buds at 0.3-0.55, as many as `l = 0.98 m - 2.70` (cm) gives over all orders [BB2000 Table 5], 0.38 of
88
+ * whose 8.5 grow out [BB2000 p. 11, Tables 4, 5]. Their laterals average 6.2 and 5.2 cm at the first order
89
+ * [BB2000 p. 11].
90
+ * @type {ShootBudZone[]}
91
+ */
92
+ zones: ShootBudZone[];
93
+ /**
94
+ * Length (m) a short shoot grows a year. Used by zones whose buds grow short shoots.
95
+ * @type {number}
96
+ */
97
+ short_shoot_growth: number;
98
+ /**
99
+ * Share of short shoots alive one year that are alive the next. Used by zones whose buds grow short shoots.
100
+ * @type {number}
101
+ */
102
+ short_shoot_survival: number;
103
+ /**
104
+ * Angle (radians) between a lateral and its mother shoot, per mother order.
105
+ * @type {number[]}
106
+ */
107
+ insertion_angle: number[];
108
+ /**
109
+ * How a mother's buds turn around it, node to node.
110
+ * @type {PhyllotaxisMode|number}
111
+ */
112
+ phyllotaxis_mode: PhyllotaxisMode | number;
113
+ /**
114
+ * @param {Partial<ShootSystemRule>} [overrides]
115
+ * @returns {this}
116
+ */
117
+ applyOverrides(overrides?: Partial<ShootSystemRule>): this;
118
+ /**
119
+ * @param {ShootSystemRule} other
120
+ * @returns {this}
121
+ */
122
+ copy(other: ShootSystemRule): this;
123
+ /**
124
+ * @returns {ShootSystemRule}
125
+ */
126
+ clone(): ShootSystemRule;
127
+ /**
128
+ * @param {ShootSystemRule} other
129
+ * @returns {boolean}
130
+ */
131
+ equals(other: ShootSystemRule): boolean;
132
+ /**
133
+ * @returns {number}
134
+ */
135
+ hash(): number;
136
+ /**
137
+ * @readonly
138
+ * @type {boolean}
139
+ */
140
+ readonly isShootSystemRule: boolean;
141
+ }
142
+ import { ShootBudZone } from "./ShootBudZone.js";
143
+ import { PhyllotaxisMode } from "./PhyllotaxisMode.js";
144
+ //# sourceMappingURL=ShootSystemRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShootSystemRule.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/config/ShootSystemRule.js"],"names":[],"mappings":"AAoCA;;;;;;;;;;;;;;;;GAgBG;AACH;IAyHI;;;OAGG;IACH,sBAHW,QAAQ,eAAe,CAAC,GACtB,eAAe,CAM3B;IAhID;;;OAGG;IACH,QAFU,MAAM,CAEL;IAEX;;;;OAIG;IACH,QAFU,MAAM,CAEL;IAEX;;;;OAIG;IACH,cAFU,MAAM,CAEC;IAEjB;;;OAGG;IACH,WAFU,MAAM,CAEU;IAE1B;;;;;OAKG;IACH,eAFU,MAAM,CAEE;IAElB;;;;OAIG;IACH,iBAFU,MAAM,EAAE,CAEuB;IAEzC;;;;;OAKG;IACH,uBAFU,MAAM,EAAE,CAEU;IAE5B;;;OAGG;IACH,iBAFU,MAAM,EAAE,CAEsB;IAExC;;;;OAIG;IACH,4BAFU,MAAM,EAAE,CAEwB;IAE1C;;;;;OAKG;IACH,kBAFU,MAAM,CAES;IAEzB;;;;;;;OAOG;IACH,OAFU,YAAY,EAAE,CAkBtB;IAEF;;;OAGG;IACH,oBAFU,MAAM,CAEW;IAE3B;;;OAGG;IACH,sBAFU,MAAM,CAEW;IAE3B;;;OAGG;IACH,iBAFU,MAAM,EAAE,CAEO;IAEzB;;;OAGG;IACH,kBAFU,eAAe,GAAC,MAAM,CAEgB;IAYhD;;;OAGG;IACH,2BAHW,QAAQ,eAAe,CAAC,GACtB,IAAI,CA4BhB;IAED;;;OAGG;IACH,YAHW,eAAe,GACb,IAAI,CAoBhB;IAED;;OAEG;IACH,SAFa,eAAe,CAM3B;IAED;;;OAGG;IACH,cAHW,eAAe,GACb,OAAO,CAuBnB;IAED;;OAEG;IACH,QAFa,MAAM,CAoBlB;IAGL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;CAN1C;6BApS4B,mBAAmB;gCADhB,sBAAsB"}
@@ -0,0 +1,316 @@
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
+ import { PhyllotaxisMode } from "./PhyllotaxisMode.js";
7
+ import { ShootBudZone } from "./ShootBudZone.js";
8
+
9
+ /**
10
+ * Factor on oak shoot length per branching order: the longest shoot falls from 30 cm at order 1 to 8 cm at order 4
11
+ * [BB2000 p. 9], (8 / 30)^(1/3).
12
+ * @type {number}
13
+ */
14
+ const OAK_ORDER_LENGTH_RATIO = 0.644;
15
+
16
+ /**
17
+ * Highest branching order of the oak's twig system: up to 7 orders were found on a branch [BB2000 p. 15].
18
+ * @type {number}
19
+ */
20
+ const OAK_MAX_ORDER = 7;
21
+
22
+ /**
23
+ * `value * 0.644^(order - 1 + offset)` for orders 1 to 7: the oak's per-order lengths, which shrink by
24
+ * {@link OAK_ORDER_LENGTH_RATIO} an order [BB2000 p. 9].
25
+ * @param {number} value
26
+ * @param {number} offset
27
+ * @returns {number[]}
28
+ */
29
+ function oak_by_order(value, offset) {
30
+ const out = [];
31
+ for (let k = 0; k < OAK_MAX_ORDER; k++) {
32
+ out.push(value * Math.pow(OAK_ORDER_LENGTH_RATIO, k + offset));
33
+ }
34
+ return out;
35
+ }
36
+
37
+ /**
38
+ * Peripheral shoot system edge of the generator graph: every living branch grown by generator `source` carries a
39
+ * twig system grown year by year from its own buds, each axis of which is a branch of generator `target` (see
40
+ * `tree_skeleton_grow_shoots`).
41
+ *
42
+ * The model is the oak's [BB2000, BB1998], generalised: each year every living axis grows a terminal extension unit,
43
+ * and the buds on its units grow into long shoots (the spring after, or the same season), short shoots, or nothing,
44
+ * by bud zone and branching order. How many seasons, and how many new shoots survive in the light they get, is the
45
+ * species' `ShootGrowthConfig`. Per-order lists are indexed from order 1 (the carrier is `carrier_order`), and
46
+ * orders past their end take their last value.
47
+ *
48
+ * The defaults are pedunculate and sessile oak, from the peripheral branches of mature crowns measured by
49
+ * Buck-Sorlin & Bell (2000), Models of crown architecture in Quercus petraea and Q. robur: shoot lengths and bud
50
+ * numbers, Forestry 73(1): 1-19 [BB2000], and the shoot shedding of a free-standing Q. robur measured by
51
+ * Buck-Sorlin & Bell (1998), A quantification of shoot shedding in pedunculate oak (Quercus robur L.), Botanical
52
+ * Journal of the Linnean Society 127: 371-391 [BB1998].
53
+ */
54
+ export class ShootSystemRule {
55
+ /**
56
+ * Carrier branch generator index into `TreeSpeciesConfig.branches`.
57
+ * @type {number}
58
+ */
59
+ source = 2;
60
+
61
+ /**
62
+ * Generator index of the long shoots, which shapes how they look (radial segments, bark, tropisms). Greater than
63
+ * `source`.
64
+ * @type {number}
65
+ */
66
+ target = 3;
67
+
68
+ /**
69
+ * Generator index of the short shoots, so foliage rules can tell them apart (`FoliageSpawnRule.short_shoot`).
70
+ * Greater than `source`. Used by zones whose buds grow short shoots.
71
+ * @type {number}
72
+ */
73
+ short_target = 3;
74
+
75
+ /**
76
+ * Highest branching order a shoot may reach within the system [BB2000 p. 15].
77
+ * @type {number}
78
+ */
79
+ max_order = OAK_MAX_ORDER;
80
+
81
+ /**
82
+ * Branching order of the carrier, in the numbering of the rule's per-order lists: where a source counts orders
83
+ * from the stem, a carrier deep in the framework starts deep in its lists. Oak's are counted from the branch
84
+ * measured [BB2000 p. 7], so its carriers are order 1.
85
+ * @type {number}
86
+ */
87
+ carrier_order = 1;
88
+
89
+ /**
90
+ * Mean length (m) of an axis's terminal extension unit, before {@link terminal_length_slope}, per order of the
91
+ * axis: 11.7 cm at the first order [BB2000 p. 11], shorter by 0.644 an order [BB2000 p. 9].
92
+ * @type {number[]}
93
+ */
94
+ terminal_length = oak_by_order(0.117, 0);
95
+
96
+ /**
97
+ * Mean length of a terminal extension unit per metre of the axis's previous unit, per order of the axis: a
98
+ * terminal unit is `terminal_length + terminal_length_slope * previous unit` long on average. Oak's do not
99
+ * follow their previous unit.
100
+ * @type {number[]}
101
+ */
102
+ terminal_length_slope = [0];
103
+
104
+ /**
105
+ * Longest extension unit (m) per order: 30 cm at the first order, falling to 8 cm at the fourth [BB2000 p. 9].
106
+ * @type {number[]}
107
+ */
108
+ max_unit_length = oak_by_order(0.30, 0);
109
+
110
+ /**
111
+ * Probability of failure `p` of the negative binomial count of centimetres a unit grows past its first, per
112
+ * order; orders past the list are Poisson [BB2000 p. 10-11, Fig. 6].
113
+ * @type {number[]}
114
+ */
115
+ length_negative_binomial_p = [0.58, 0.60];
116
+
117
+ /**
118
+ * Mean length (m) of an extension unit, at which a living shoot's yield of new shoots is counted
119
+ * ({@link shoot_expected_yield}), and against which a shoot's length ranks it for shedding: 5.9 cm on branch o1b1
120
+ * [BB2000 Table 4], where oak's outgrowth shares were counted.
121
+ * @type {number}
122
+ */
123
+ mean_unit_length = 0.059;
124
+
125
+ /**
126
+ * Lateral bud zones along an extension unit. Oak's: the pseudo-whorl of "almost always four" subapical buds at
127
+ * 0.8-0.99 of the unit [BB2000 p. 7, 11, 17], 1.17 of which grow out on branch o1b1 [BB2000 p. 11]; and the
128
+ * median buds at 0.3-0.55, as many as `l = 0.98 m - 2.70` (cm) gives over all orders [BB2000 Table 5], 0.38 of
129
+ * whose 8.5 grow out [BB2000 p. 11, Tables 4, 5]. Their laterals average 6.2 and 5.2 cm at the first order
130
+ * [BB2000 p. 11].
131
+ * @type {ShootBudZone[]}
132
+ */
133
+ zones = [
134
+ ShootBudZone.from({
135
+ u_min: 0.8,
136
+ u_max: 0.99,
137
+ buds: [4],
138
+ long: [0.29],
139
+ length: oak_by_order(0.062, 1)
140
+ }),
141
+ ShootBudZone.from({
142
+ u_min: 0.3,
143
+ u_max: 0.55,
144
+ buds: [2.70 / 0.98],
145
+ buds_per_metre: [100 / 0.98],
146
+ long: [0.045],
147
+ length: oak_by_order(0.052, 1)
148
+ })
149
+ ];
150
+
151
+ /**
152
+ * Length (m) a short shoot grows a year. Used by zones whose buds grow short shoots.
153
+ * @type {number}
154
+ */
155
+ short_shoot_growth = 0.002;
156
+
157
+ /**
158
+ * Share of short shoots alive one year that are alive the next. Used by zones whose buds grow short shoots.
159
+ * @type {number}
160
+ */
161
+ short_shoot_survival = 0.6;
162
+
163
+ /**
164
+ * Angle (radians) between a lateral and its mother shoot, per mother order.
165
+ * @type {number[]}
166
+ */
167
+ insertion_angle = [0.75];
168
+
169
+ /**
170
+ * How a mother's buds turn around it, node to node.
171
+ * @type {PhyllotaxisMode|number}
172
+ */
173
+ phyllotaxis_mode = PhyllotaxisMode.SpiralGolden;
174
+
175
+ /**
176
+ * @param {Partial<ShootSystemRule>} [options]
177
+ * @returns {ShootSystemRule}
178
+ */
179
+ static from(options = {}) {
180
+ const r = new ShootSystemRule();
181
+ r.applyOverrides(options);
182
+ return r;
183
+ }
184
+
185
+ /**
186
+ * @param {Partial<ShootSystemRule>} [overrides]
187
+ * @returns {this}
188
+ */
189
+ applyOverrides(overrides = {}) {
190
+ if (overrides === null || overrides === undefined) {
191
+ return this;
192
+ }
193
+ if (overrides.source !== undefined) this.source = overrides.source | 0;
194
+ if (overrides.target !== undefined) this.target = overrides.target | 0;
195
+ if (overrides.short_target !== undefined) this.short_target = overrides.short_target | 0;
196
+ if (overrides.max_order !== undefined) this.max_order = Math.max(1, overrides.max_order | 0);
197
+ if (overrides.carrier_order !== undefined) this.carrier_order = Math.max(1, overrides.carrier_order | 0);
198
+ if (overrides.terminal_length !== undefined) this.terminal_length = list(overrides.terminal_length, 0);
199
+ if (overrides.terminal_length_slope !== undefined) this.terminal_length_slope = list(overrides.terminal_length_slope, 0);
200
+ if (overrides.max_unit_length !== undefined) this.max_unit_length = list(overrides.max_unit_length, 0.01);
201
+ if (overrides.length_negative_binomial_p !== undefined) {
202
+ assert.isArray(overrides.length_negative_binomial_p, 'length_negative_binomial_p');
203
+ this.length_negative_binomial_p = overrides.length_negative_binomial_p.map(p => Math.min(0.999, Math.max(0.001, p)));
204
+ }
205
+ if (overrides.mean_unit_length !== undefined) this.mean_unit_length = Math.max(1e-3, overrides.mean_unit_length);
206
+ if (overrides.zones !== undefined) {
207
+ assert.isArray(overrides.zones, 'zones');
208
+ this.zones = overrides.zones.map(z => ShootBudZone.from(z));
209
+ }
210
+ if (overrides.short_shoot_growth !== undefined) this.short_shoot_growth = Math.max(1e-4, overrides.short_shoot_growth);
211
+ if (overrides.short_shoot_survival !== undefined) this.short_shoot_survival = Math.min(1, Math.max(0, overrides.short_shoot_survival));
212
+ if (overrides.insertion_angle !== undefined) this.insertion_angle = list(overrides.insertion_angle, 0);
213
+ if (overrides.phyllotaxis_mode !== undefined) this.phyllotaxis_mode = overrides.phyllotaxis_mode;
214
+ return this;
215
+ }
216
+
217
+ /**
218
+ * @param {ShootSystemRule} other
219
+ * @returns {this}
220
+ */
221
+ copy(other) {
222
+ assert.defined(other, 'other');
223
+ this.source = other.source;
224
+ this.target = other.target;
225
+ this.short_target = other.short_target;
226
+ this.max_order = other.max_order;
227
+ this.carrier_order = other.carrier_order;
228
+ this.terminal_length = other.terminal_length.slice();
229
+ this.terminal_length_slope = other.terminal_length_slope.slice();
230
+ this.max_unit_length = other.max_unit_length.slice();
231
+ this.length_negative_binomial_p = other.length_negative_binomial_p.slice();
232
+ this.mean_unit_length = other.mean_unit_length;
233
+ this.zones = other.zones.map(z => z.clone());
234
+ this.short_shoot_growth = other.short_shoot_growth;
235
+ this.short_shoot_survival = other.short_shoot_survival;
236
+ this.insertion_angle = other.insertion_angle.slice();
237
+ this.phyllotaxis_mode = other.phyllotaxis_mode;
238
+ return this;
239
+ }
240
+
241
+ /**
242
+ * @returns {ShootSystemRule}
243
+ */
244
+ clone() {
245
+ const r = new ShootSystemRule();
246
+ r.copy(this);
247
+ return r;
248
+ }
249
+
250
+ /**
251
+ * @param {ShootSystemRule} other
252
+ * @returns {boolean}
253
+ */
254
+ equals(other) {
255
+ if (this === other) return true;
256
+ if (!other || !other.isShootSystemRule) return false;
257
+ if (this.zones.length !== other.zones.length) return false;
258
+ for (let i = 0; i < this.zones.length; i++) {
259
+ if (!this.zones[i].equals(other.zones[i])) return false;
260
+ }
261
+ return this.source === other.source
262
+ && this.target === other.target
263
+ && this.short_target === other.short_target
264
+ && this.max_order === other.max_order
265
+ && this.carrier_order === other.carrier_order
266
+ && isArrayEqualStrict(this.terminal_length, other.terminal_length)
267
+ && isArrayEqualStrict(this.terminal_length_slope, other.terminal_length_slope)
268
+ && isArrayEqualStrict(this.max_unit_length, other.max_unit_length)
269
+ && isArrayEqualStrict(this.length_negative_binomial_p, other.length_negative_binomial_p)
270
+ && this.mean_unit_length === other.mean_unit_length
271
+ && this.short_shoot_growth === other.short_shoot_growth
272
+ && this.short_shoot_survival === other.short_shoot_survival
273
+ && isArrayEqualStrict(this.insertion_angle, other.insertion_angle)
274
+ && this.phyllotaxis_mode === other.phyllotaxis_mode;
275
+ }
276
+
277
+ /**
278
+ * @returns {number}
279
+ */
280
+ hash() {
281
+ let h = hash_mix2(this.source, this.target);
282
+ h = hash_mix2(h, this.short_target);
283
+ h = hash_mix2(h, this.max_order);
284
+ h = hash_mix2(h, this.carrier_order);
285
+ h = hash_mix2(h, computeHashFloatArray(this.terminal_length));
286
+ h = hash_mix2(h, computeHashFloatArray(this.terminal_length_slope));
287
+ h = hash_mix2(h, computeHashFloatArray(this.max_unit_length));
288
+ h = hash_mix2(h, computeHashFloatArray(this.length_negative_binomial_p));
289
+ h = hash_mix2(h, computeHashFloat(this.mean_unit_length));
290
+ for (let i = 0; i < this.zones.length; i++) {
291
+ h = hash_mix2(h, this.zones[i].hash());
292
+ }
293
+ h = hash_mix2(h, computeHashFloat(this.short_shoot_growth));
294
+ h = hash_mix2(h, computeHashFloat(this.short_shoot_survival));
295
+ h = hash_mix2(h, computeHashFloatArray(this.insertion_angle));
296
+ h = hash_mix2(h, this.phyllotaxis_mode | 0);
297
+ return h;
298
+ }
299
+ }
300
+
301
+ /**
302
+ * @readonly
303
+ * @type {boolean}
304
+ */
305
+ ShootSystemRule.prototype.isShootSystemRule = true;
306
+
307
+ /**
308
+ * @param {number[]} values
309
+ * @param {number} min
310
+ * @returns {number[]}
311
+ */
312
+ function list(values, min) {
313
+ assert.isArray(values, 'values');
314
+ assert.greaterThan(values.length, 0, 'values.length');
315
+ return values.map(v => Math.max(min, v));
316
+ }
@@ -50,7 +50,7 @@ export class TreeLODConfig {
50
50
  */
51
51
  foliage_area_compensation_exponent: number;
52
52
  /**
53
- * If true, complex cards (`TriStarCluster`, `RibbedFrond`, `OctagonalCutoutHull`) collapse
53
+ * If true, complex cards (`TriStarCluster`, `RibbedFrond`, `CutoutHull`) collapse
54
54
  * to simpler low-triangle `FoldedVCard` or single quad representations.
55
55
  * @type {boolean}
56
56
  */
@@ -50,7 +50,7 @@ export class TreeLODConfig {
50
50
  foliage_area_compensation_exponent = 0.42;
51
51
 
52
52
  /**
53
- * If true, complex cards (`TriStarCluster`, `RibbedFrond`, `OctagonalCutoutHull`) collapse
53
+ * If true, complex cards (`TriStarCluster`, `RibbedFrond`, `CutoutHull`) collapse
54
54
  * to simpler low-triangle `FoldedVCard` or single quad representations.
55
55
  * @type {boolean}
56
56
  */
@@ -3,10 +3,15 @@
3
3
  */
4
4
  export class TreeSpeciesConfig {
5
5
  /**
6
- * Creates a default 3-level branch hierarchy (trunk, primary boughs, secondary branches).
7
- * @returns {BranchLevelConfig[]}
6
+ * Default trunk -> primary bough -> secondary branch spawning.
7
+ * @returns {BranchSpawnRule[]}
8
8
  */
9
- static createDefaultLevels(): BranchLevelConfig[];
9
+ static createDefaultBranchRules(): BranchSpawnRule[];
10
+ /**
11
+ * Default branch generators: trunk, primary boughs, secondary branches.
12
+ * @returns {BranchGeneratorConfig[]}
13
+ */
14
+ static createDefaultBranches(): BranchGeneratorConfig[];
10
15
  /**
11
16
  * @param {Partial<TreeSpeciesConfig>} [options]
12
17
  * @returns {TreeSpeciesConfig}
@@ -33,15 +38,38 @@ export class TreeSpeciesConfig {
33
38
  */
34
39
  crown: CrownConfig;
35
40
  /**
36
- * Recursive branch level configurations (`levels[0]` = trunk, `levels[1]` = boughs, etc.).
37
- * @type {BranchLevelConfig[]}
41
+ * Branch generators. `branches[0]` grows the trunk; every other generator grows only where a
42
+ * `branch_rules` entry targets it.
43
+ * @type {BranchGeneratorConfig[]}
38
44
  */
39
- levels: BranchLevelConfig[];
45
+ branches: BranchGeneratorConfig[];
40
46
  /**
41
- * Phyllotactic foliage card placement and geometry configuration.
47
+ * Edges of the generator graph: which generator spawns which, where and how many.
48
+ * Each rule has `source < target`, so the graph is acyclic and the trunk is its only root.
49
+ * @type {BranchSpawnRule[]}
50
+ */
51
+ branch_rules: BranchSpawnRule[];
52
+ /**
53
+ * Leaf card / frond geometry shared by all foliage of the tree.
42
54
  * @type {FoliageConfig}
43
55
  */
44
56
  foliage: FoliageConfig;
57
+ /**
58
+ * Which branch generators carry foliage. How densely is derived (`foliage_cards_per_metre`). Empty = a bare tree.
59
+ * @type {FoliageSpawnRule[]}
60
+ */
61
+ foliage_rules: FoliageSpawnRule[];
62
+ /**
63
+ * Which branch generators carry a peripheral twig system grown year by year from their buds, and which generator
64
+ * its shoots are (`tree_skeleton_grow_shoots`). Empty = none.
65
+ * @type {ShootSystemRule[]}
66
+ */
67
+ shoot_rules: ShootSystemRule[];
68
+ /**
69
+ * How the twig systems of `shoot_rules` grow together: seasons, and vigour in the light they make for each other.
70
+ * @type {ShootGrowthConfig}
71
+ */
72
+ shoot_growth: ShootGrowthConfig;
45
73
  /**
46
74
  * Procedural bark PBR material configuration.
47
75
  * @type {BarkMaterialConfig}
@@ -100,8 +128,12 @@ export class TreeSpeciesConfig {
100
128
  }
101
129
  import { TreePreset } from "./TreePreset.js";
102
130
  import { CrownConfig } from "./CrownConfig.js";
103
- import { BranchLevelConfig } from "./BranchLevelConfig.js";
131
+ import { BranchGeneratorConfig } from "./BranchGeneratorConfig.js";
132
+ import { BranchSpawnRule } from "./BranchSpawnRule.js";
104
133
  import { FoliageConfig } from "./FoliageConfig.js";
134
+ import { FoliageSpawnRule } from "./FoliageSpawnRule.js";
135
+ import { ShootSystemRule } from "./ShootSystemRule.js";
136
+ import { ShootGrowthConfig } from "./ShootGrowthConfig.js";
105
137
  import { BarkMaterialConfig } from "./BarkMaterialConfig.js";
106
138
  import { FoliageMaterialConfig } from "./FoliageMaterialConfig.js";
107
139
  import { TreeWindConfig } from "./TreeWindConfig.js";
@@ -1 +1 @@
1
- {"version":3,"file":"TreeSpeciesConfig.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/config/TreeSpeciesConfig.js"],"names":[],"mappings":"AAaA;;GAEG;AACH;IAyEI;;;OAGG;IACH,8BAFa,iBAAiB,EAAE,CA2H/B;IAED;;;OAGG;IACH,sBAHW,QAAQ,iBAAiB,CAAC,GACxB,iBAAiB,CAS7B;IAlND;;;OAGG;IACH,MAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,QAFU,UAAU,GAAC,MAAM,CAEH;IAExB;;;OAGG;IACH,MAFU,MAAM,CAEJ;IAEZ;;;OAGG;IACH,OAFU,WAAW,CAEK;IAE1B;;;OAGG;IACH,QAFU,iBAAiB,EAAE,CAEjB;IAEZ;;;OAGG;IACH,SAFU,aAAa,CAEO;IAE9B;;;OAGG;IACH,eAFU,kBAAkB,CAEa;IAEzC;;;OAGG;IACH,kBAFU,qBAAqB,CAEgB;IAE/C;;;OAGG;IACH,MAFU,cAAc,CAEI;IAE5B;;;OAGG;IACH,MAFU,aAAa,EAAE,CAEf;IAEV;;;;OAIG;IACH,aAFU,MAAM,UAAU,MAAM,CAAC,CAAC,cAAU,IAAI,CAE7B;IAmJnB;;;;OAIG;IACH,iCAFa,IAAI,CAuDhB;IAED;;;OAGG;IACH,YAHW,iBAAiB,GACf,IAAI,CAkBhB;IAED;;OAEG;IACH,SAFa,iBAAiB,CAM7B;IAED;;;OAGG;IACH,cAHW,iBAAiB,GACf,OAAO,CA0CnB;IAED;;OAEG;IACH,QAFa,MAAM,CAyBlB;IAGL;;;OAGG;IACH,8BAFU,OAAO,CAE8B;CAN9C;2BA/X0B,iBAAiB;4BAJhB,kBAAkB;kCADZ,wBAAwB;8BAE5B,oBAAoB;mCAHf,yBAAyB;sCAItB,4BAA4B;+BAGnC,qBAAqB;8BAFtB,oBAAoB"}
1
+ {"version":3,"file":"TreeSpeciesConfig.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/config/TreeSpeciesConfig.js"],"names":[],"mappings":"AAiBA;;GAEG;AACH;IAsGI;;;OAGG;IACH,mCAFa,eAAe,EAAE,CAwB7B;IAED;;;OAGG;IACH,gCAFa,qBAAqB,EAAE,CAmGnC;IAED;;;OAGG;IACH,sBAHW,QAAQ,iBAAiB,CAAC,GACxB,iBAAiB,CAS7B;IAnPD;;;OAGG;IACH,MAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,QAFU,UAAU,GAAC,MAAM,CAEH;IAExB;;;OAGG;IACH,MAFU,MAAM,CAEJ;IAEZ;;;OAGG;IACH,OAFU,WAAW,CAEK;IAE1B;;;;OAIG;IACH,UAFU,qBAAqB,EAAE,CAEnB;IAEd;;;;OAIG;IACH,cAFU,eAAe,EAAE,CAET;IAElB;;;OAGG;IACH,SAFU,aAAa,CAEO;IAE9B;;;OAGG;IACH,eAFU,gBAAgB,EAAE,CAET;IAEnB;;;;OAIG;IACH,aAFU,eAAe,EAAE,CAEV;IAEjB;;;OAGG;IACH,cAFU,iBAAiB,CAEY;IAEvC;;;OAGG;IACH,eAFU,kBAAkB,CAEa;IAEzC;;;OAGG;IACH,kBAFU,qBAAqB,CAEgB;IAE/C;;;OAGG;IACH,MAFU,cAAc,CAEI;IAE5B;;;OAGG;IACH,MAFU,aAAa,EAAE,CAEf;IAEV;;;;OAIG;IACH,aAFU,MAAM,UAAU,MAAM,CAAC,CAAC,cAAU,IAAI,CAE7B;IAyJnB;;;;OAIG;IACH,iCAFa,IAAI,CA6ChB;IAED;;;OAGG;IACH,YAHW,iBAAiB,GACf,IAAI,CAsBhB;IAED;;OAEG;IACH,SAFa,iBAAiB,CAM7B;IAED;;;OAGG;IACH,cAHW,iBAAiB,GACf,OAAO,CAyDnB;IAED;;OAEG;IACH,QAFa,MAAM,CAmClB;IAGL;;;OAGG;IACH,8BAFU,OAAO,CAE8B;CAN9C;2BAnb0B,iBAAiB;4BAPhB,kBAAkB;sCAFR,4BAA4B;gCAClC,sBAAsB;8BAExB,oBAAoB;iCAEjB,uBAAuB;gCAExB,sBAAsB;kCADpB,wBAAwB;mCAPvB,yBAAyB;sCAKtB,4BAA4B;+BAMnC,qBAAqB;8BAFtB,oBAAoB"}