@woosh/meep-engine 3.56.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 (625) 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/graphics/sh3/path_tracer/geometry/sort_triangles_by_distance_to_point.js +1 -1
  176. package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_min_indices.js +1 -1
  177. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  178. package/src/engine/graphics3/WaterSystem.js +2 -1
  179. package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts.map +1 -1
  180. package/src/engine/graphics3/prefab/prefab_skin_frame.js +1 -12
  181. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts +1 -1
  182. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts.map +1 -1
  183. package/src/engine/grid/grid2transform/GridPosition2TransformSystem.js +141 -137
  184. package/src/engine/input/ecs/systems/InputControllerSystem.d.ts.map +1 -1
  185. package/src/engine/input/ecs/systems/InputControllerSystem.js +13 -3
  186. package/src/engine/input/ecs/systems/InputSystem.d.ts.map +1 -1
  187. package/src/engine/input/ecs/systems/InputSystem.js +2 -1
  188. package/src/engine/intelligence/behavior/composite/ParallelBehavior.d.ts +1 -1
  189. package/src/engine/intelligence/behavior/composite/ParallelBehavior.d.ts.map +1 -1
  190. package/src/engine/intelligence/behavior/composite/ParallelBehavior.js +4 -1
  191. package/src/engine/intelligence/behavior/decorator/InvertStatusBehavior.d.ts.map +1 -1
  192. package/src/engine/intelligence/behavior/decorator/InvertStatusBehavior.js +3 -1
  193. package/src/engine/intelligence/behavior/decorator/RepeatBehavior.d.ts.map +1 -1
  194. package/src/engine/intelligence/behavior/decorator/RepeatBehavior.js +3 -1
  195. package/src/engine/intelligence/behavior/decorator/RepeatBehaviorSerializationAdapter.d.ts.map +1 -1
  196. package/src/engine/intelligence/behavior/decorator/RepeatBehaviorSerializationAdapter.js +39 -33
  197. package/src/engine/intelligence/behavior/util/ConditionalBehavior.d.ts +5 -0
  198. package/src/engine/intelligence/behavior/util/ConditionalBehavior.d.ts.map +1 -1
  199. package/src/engine/intelligence/behavior/util/ConditionalBehavior.js +93 -75
  200. package/src/engine/intelligence/behavior/util/RotationBehavior.d.ts.map +1 -1
  201. package/src/engine/intelligence/behavior/util/RotationBehavior.js +79 -76
  202. package/src/engine/intelligence/blackboard/BlackboardStack.d.ts +1 -0
  203. package/src/engine/intelligence/blackboard/BlackboardStack.d.ts.map +1 -1
  204. package/src/engine/intelligence/blackboard/BlackboardStack.js +159 -123
  205. package/src/engine/intelligence/mcts/StateNode.d.ts.map +1 -1
  206. package/src/engine/intelligence/mcts/StateNode.js +366 -364
  207. package/src/engine/intelligence/resource/ResourceAllocationSolver.js +1 -1
  208. package/src/engine/navigation/ecs/components/Path.d.ts.map +1 -1
  209. package/src/engine/navigation/ecs/components/Path.js +2 -1
  210. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts.map +1 -1
  211. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.js +5 -2
  212. package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
  213. package/src/engine/physics/body/SolverBodyState.js +2 -6
  214. package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
  215. package/src/engine/physics/ccd/linear_sweep.js +3 -16
  216. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
  217. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +2 -16
  218. package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts +13 -1
  219. package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
  220. package/src/engine/physics/cloth/ecs/cloth_build_rows.js +15 -4
  221. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  222. package/src/engine/physics/ecs/PhysicsSystem.js +2 -5
  223. package/src/engine/physics/inertia/locked_inverse_inertia.d.ts +12 -0
  224. package/src/engine/physics/inertia/locked_inverse_inertia.d.ts.map +1 -0
  225. package/src/engine/physics/inertia/locked_inverse_inertia.js +22 -0
  226. package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -1
  227. package/src/engine/physics/integration/integrate_velocity.js +3 -18
  228. package/src/engine/physics/mls-mpm/MLS_MPM.d.ts +1 -0
  229. package/src/engine/physics/mls-mpm/MLS_MPM.d.ts.map +1 -1
  230. package/src/engine/physics/mls-mpm/MLS_MPM.js +5 -4
  231. package/src/engine/physics/narrowphase/convex_decomposition.d.ts.map +1 -1
  232. package/src/engine/physics/narrowphase/convex_decomposition.js +7 -16
  233. package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
  234. package/src/engine/physics/vehicle/RaycastVehicle.js +15 -5
  235. package/src/engine/save/StorageBackedList.d.ts +5 -0
  236. package/src/engine/save/StorageBackedList.d.ts.map +1 -1
  237. package/src/engine/save/StorageBackedList.js +161 -144
  238. package/src/engine/simulation/Ticker.d.ts.map +1 -1
  239. package/src/engine/simulation/Ticker.js +394 -391
  240. package/src/engine/sound/simulation/probe/AcousticProbeField.d.ts.map +1 -1
  241. package/src/engine/sound/simulation/probe/AcousticProbeField.js +6 -19
  242. package/src/engine/sound/simulation/probe/probe_edge_visible.d.ts +15 -0
  243. package/src/engine/sound/simulation/probe/probe_edge_visible.d.ts.map +1 -1
  244. package/src/engine/sound/simulation/probe/probe_edge_visible.js +59 -41
  245. package/src/engine/sound/simulation/probe/probe_refine_connectivity.d.ts.map +1 -1
  246. package/src/engine/sound/simulation/probe/probe_refine_connectivity.js +164 -181
  247. package/src/engine/sound/simulation/render/FoaProbeReverbRenderer.d.ts.map +1 -1
  248. package/src/engine/sound/simulation/render/FoaProbeReverbRenderer.js +20 -5
  249. package/src/format/image/avif/av1/decode/Av1FrameContext.d.ts.map +1 -1
  250. package/src/format/image/avif/av1/decode/Av1FrameContext.js +3 -10
  251. package/src/format/image/avif/av1/decode/reconstruct.d.ts +20 -0
  252. package/src/format/image/avif/av1/decode/reconstruct.d.ts.map +1 -1
  253. package/src/format/image/avif/av1/decode/reconstruct.js +22 -9
  254. package/src/format/image/avif/av1/encode/choose_restoration.js +2 -18
  255. package/src/format/image/avif/av1/encode/quantise.d.ts.map +1 -1
  256. package/src/format/image/avif/av1/encode/quantise.js +1 -55
  257. package/src/format/image/avif/av1/filter/loop_restoration.d.ts +9 -0
  258. package/src/format/image/avif/av1/filter/loop_restoration.d.ts.map +1 -1
  259. package/src/format/image/avif/av1/filter/loop_restoration.js +1 -1
  260. package/src/format/texture/basis/transcode/etc1s_to_bc7.js +2 -33
  261. package/src/format/texture/basis/transcode/fit_endpoints.d.ts +11 -0
  262. package/src/format/texture/basis/transcode/fit_endpoints.d.ts.map +1 -1
  263. package/src/format/texture/basis/transcode/fit_endpoints.js +1 -1
  264. package/src/format/texture/basis/uastc/uastc_decode_block.d.ts.map +1 -1
  265. package/src/format/texture/basis/uastc/uastc_decode_block.js +2 -19
  266. package/src/generation/foliage/ANNUAL_SHOOTS_BRIEF_2026_10_25.md +220 -0
  267. package/src/generation/foliage/CROWN_FILLING_BRIEF_2026_10_26.md +172 -0
  268. package/src/generation/foliage/FOLIAGE_DESIGN.md +165 -15
  269. package/src/generation/foliage/LEAF_ARCHITECTURE_BRIEF_2026_10_26.md +158 -0
  270. package/src/generation/foliage/SHOOT_SYSTEMS_ALL_SPECIES_BRIEF_2026_10_26.md +248 -0
  271. package/src/generation/foliage/SPEEDTREE_COMPARISON_2026_10_24.md +694 -0
  272. package/src/generation/foliage/analysis/CrownOpacity.d.ts +118 -0
  273. package/src/generation/foliage/analysis/CrownOpacity.d.ts.map +1 -0
  274. package/src/generation/foliage/analysis/CrownOpacity.js +182 -0
  275. package/src/generation/foliage/analysis/crown_opacity_frames.d.ts +10 -0
  276. package/src/generation/foliage/analysis/crown_opacity_frames.d.ts.map +1 -0
  277. package/src/generation/foliage/analysis/crown_opacity_frames.js +132 -0
  278. package/src/generation/foliage/analysis/crown_opacity_measure.d.ts +51 -0
  279. package/src/generation/foliage/analysis/crown_opacity_measure.d.ts.map +1 -0
  280. package/src/generation/foliage/analysis/crown_opacity_measure.js +649 -0
  281. package/src/generation/foliage/analysis/foliage_measure_leaf_area.d.ts +66 -0
  282. package/src/generation/foliage/analysis/foliage_measure_leaf_area.d.ts.map +1 -0
  283. package/src/generation/foliage/analysis/foliage_measure_leaf_area.js +192 -0
  284. package/src/generation/foliage/analysis/tree_crown_opacity.d.ts +27 -0
  285. package/src/generation/foliage/analysis/tree_crown_opacity.d.ts.map +1 -0
  286. package/src/generation/foliage/analysis/tree_crown_opacity.js +58 -0
  287. package/src/generation/foliage/animation/build_tree_wind_rig.d.ts +3 -2
  288. package/src/generation/foliage/animation/build_tree_wind_rig.d.ts.map +1 -1
  289. package/src/generation/foliage/animation/build_tree_wind_rig.js +12 -30
  290. package/src/generation/foliage/animation/tree_wind_bend_limit.d.ts +12 -0
  291. package/src/generation/foliage/animation/tree_wind_bend_limit.d.ts.map +1 -0
  292. package/src/generation/foliage/animation/tree_wind_bend_limit.js +13 -0
  293. package/src/generation/foliage/asset/TreeAsset.d.ts +5 -0
  294. package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -1
  295. package/src/generation/foliage/asset/TreeAsset.js +6 -0
  296. package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -1
  297. package/src/generation/foliage/asset/generate_tree.js +23 -6
  298. package/src/generation/foliage/config/{BranchLevelConfig.d.ts → BranchGeneratorConfig.d.ts} +61 -75
  299. package/src/generation/foliage/config/BranchGeneratorConfig.d.ts.map +1 -0
  300. package/src/generation/foliage/config/{BranchLevelConfig.js → BranchGeneratorConfig.js} +83 -126
  301. package/src/generation/foliage/config/BranchSpawnRule.d.ts +118 -0
  302. package/src/generation/foliage/config/BranchSpawnRule.d.ts.map +1 -0
  303. package/src/generation/foliage/config/BranchSpawnRule.js +217 -0
  304. package/src/generation/foliage/config/FoliageCardType.d.ts +1 -1
  305. package/src/generation/foliage/config/FoliageCardType.js +2 -2
  306. package/src/generation/foliage/config/FoliageConfig.d.ts +23 -45
  307. package/src/generation/foliage/config/FoliageConfig.d.ts.map +1 -1
  308. package/src/generation/foliage/config/FoliageConfig.js +47 -93
  309. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts +12 -20
  310. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts.map +1 -1
  311. package/src/generation/foliage/config/FoliageMaterialConfig.js +261 -279
  312. package/src/generation/foliage/config/FoliageSpawnRule.d.ts +77 -0
  313. package/src/generation/foliage/config/FoliageSpawnRule.d.ts.map +1 -0
  314. package/src/generation/foliage/config/FoliageSpawnRule.js +135 -0
  315. package/src/generation/foliage/config/FoliageTileContent.d.ts +9 -0
  316. package/src/generation/foliage/config/FoliageTileContent.d.ts.map +1 -0
  317. package/src/generation/foliage/config/FoliageTileContent.js +12 -0
  318. package/src/generation/foliage/config/LeafApexShape.d.ts +12 -0
  319. package/src/generation/foliage/config/LeafApexShape.d.ts.map +1 -0
  320. package/src/generation/foliage/config/LeafApexShape.js +17 -0
  321. package/src/generation/foliage/config/LeafArchitecture.d.ts +155 -0
  322. package/src/generation/foliage/config/LeafArchitecture.d.ts.map +1 -0
  323. package/src/generation/foliage/config/LeafArchitecture.js +288 -0
  324. package/src/generation/foliage/config/LeafBaseShape.d.ts +14 -0
  325. package/src/generation/foliage/config/LeafBaseShape.d.ts.map +1 -0
  326. package/src/generation/foliage/config/LeafBaseShape.js +21 -0
  327. package/src/generation/foliage/config/LeafLobation.d.ts +10 -0
  328. package/src/generation/foliage/config/LeafLobation.d.ts.map +1 -0
  329. package/src/generation/foliage/config/LeafLobation.js +14 -0
  330. package/src/generation/foliage/config/PhyllotaxisMode.d.ts +11 -0
  331. package/src/generation/foliage/config/PhyllotaxisMode.d.ts.map +1 -1
  332. package/src/generation/foliage/config/PhyllotaxisMode.js +36 -0
  333. package/src/generation/foliage/config/ShootBudZone.d.ts +105 -0
  334. package/src/generation/foliage/config/ShootBudZone.d.ts.map +1 -0
  335. package/src/generation/foliage/config/ShootBudZone.js +219 -0
  336. package/src/generation/foliage/config/ShootGrowthConfig.d.ts +84 -0
  337. package/src/generation/foliage/config/ShootGrowthConfig.d.ts.map +1 -0
  338. package/src/generation/foliage/config/ShootGrowthConfig.js +146 -0
  339. package/src/generation/foliage/config/ShootSystemRule.d.ts +144 -0
  340. package/src/generation/foliage/config/ShootSystemRule.d.ts.map +1 -0
  341. package/src/generation/foliage/config/ShootSystemRule.js +316 -0
  342. package/src/generation/foliage/config/TreeLODConfig.d.ts +1 -1
  343. package/src/generation/foliage/config/TreeLODConfig.js +1 -1
  344. package/src/generation/foliage/config/TreeSpeciesConfig.d.ts +40 -8
  345. package/src/generation/foliage/config/TreeSpeciesConfig.d.ts.map +1 -1
  346. package/src/generation/foliage/config/TreeSpeciesConfig.js +124 -68
  347. package/src/generation/foliage/config/TreeWindConfig.d.ts +23 -10
  348. package/src/generation/foliage/config/TreeWindConfig.d.ts.map +1 -1
  349. package/src/generation/foliage/config/TreeWindConfig.js +34 -25
  350. package/src/generation/foliage/index.d.ts +19 -2
  351. package/src/generation/foliage/index.js +63 -44
  352. package/src/generation/foliage/material/FoliageAtlasCutout.d.ts +59 -0
  353. package/src/generation/foliage/material/FoliageAtlasCutout.d.ts.map +1 -0
  354. package/src/generation/foliage/material/FoliageAtlasCutout.js +93 -0
  355. package/src/generation/foliage/material/compute_foliage_variant_atlas_layout.d.ts +26 -0
  356. package/src/generation/foliage/material/compute_foliage_variant_atlas_layout.d.ts.map +1 -0
  357. package/src/generation/foliage/material/compute_foliage_variant_atlas_layout.js +63 -0
  358. package/src/generation/foliage/material/foliage_atlas_cutout.d.ts +34 -0
  359. package/src/generation/foliage/material/foliage_atlas_cutout.d.ts.map +1 -0
  360. package/src/generation/foliage/material/foliage_atlas_cutout.js +174 -0
  361. package/src/generation/foliage/material/foliage_tile.d.ts +110 -0
  362. package/src/generation/foliage/material/foliage_tile.d.ts.map +1 -0
  363. package/src/generation/foliage/material/foliage_tile.js +286 -0
  364. package/src/generation/foliage/material/leaf_geometry.d.ts +103 -0
  365. package/src/generation/foliage/material/leaf_geometry.d.ts.map +1 -0
  366. package/src/generation/foliage/material/leaf_geometry.js +528 -0
  367. package/src/generation/foliage/material/make_foliage_material.d.ts +13 -33
  368. package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -1
  369. package/src/generation/foliage/material/make_foliage_material.js +356 -605
  370. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +39 -4
  371. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -1
  372. package/src/generation/foliage/mesh/foliage_collect_attachments.js +637 -569
  373. package/src/generation/foliage/mesh/interpolate_ring_skin_weights4.d.ts +48 -0
  374. package/src/generation/foliage/mesh/interpolate_ring_skin_weights4.d.ts.map +1 -0
  375. package/src/generation/foliage/mesh/interpolate_ring_skin_weights4.js +232 -0
  376. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
  377. package/src/generation/foliage/mesh/tree_mesh_build_bark.js +1023 -1049
  378. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +9 -2
  379. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -1
  380. package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +467 -454
  381. package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -1
  382. package/src/generation/foliage/presets/make_tree_species_preset.js +1648 -870
  383. package/src/generation/foliage/skeleton/ShootFrameworkHash.d.ts +35 -0
  384. package/src/generation/foliage/skeleton/ShootFrameworkHash.d.ts.map +1 -0
  385. package/src/generation/foliage/skeleton/ShootFrameworkHash.js +129 -0
  386. package/src/generation/foliage/skeleton/ShootGirth.d.ts +51 -0
  387. package/src/generation/foliage/skeleton/ShootGirth.d.ts.map +1 -0
  388. package/src/generation/foliage/skeleton/ShootGirth.js +212 -0
  389. package/src/generation/foliage/skeleton/ShootLightField.d.ts +73 -0
  390. package/src/generation/foliage/skeleton/ShootLightField.d.ts.map +1 -0
  391. package/src/generation/foliage/skeleton/ShootLightField.js +197 -0
  392. package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +106 -3
  393. package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -1
  394. package/src/generation/foliage/skeleton/TreeSkeleton.js +217 -39
  395. package/src/generation/foliage/skeleton/flare_lobe_phase_offset.d.ts +13 -0
  396. package/src/generation/foliage/skeleton/flare_lobe_phase_offset.d.ts.map +1 -0
  397. package/src/generation/foliage/skeleton/flare_lobe_phase_offset.js +16 -0
  398. package/src/generation/foliage/skeleton/foliage_card_density.d.ts +71 -0
  399. package/src/generation/foliage/skeleton/foliage_card_density.d.ts.map +1 -0
  400. package/src/generation/foliage/skeleton/foliage_card_density.js +101 -0
  401. package/src/generation/foliage/skeleton/foliage_senescence.d.ts +101 -0
  402. package/src/generation/foliage/skeleton/foliage_senescence.d.ts.map +1 -0
  403. package/src/generation/foliage/skeleton/foliage_senescence.js +149 -0
  404. package/src/generation/foliage/skeleton/foliage_unit_cards.d.ts +76 -0
  405. package/src/generation/foliage/skeleton/foliage_unit_cards.d.ts.map +1 -0
  406. package/src/generation/foliage/skeleton/foliage_unit_cards.js +95 -0
  407. package/src/generation/foliage/skeleton/shoot_demography.d.ts +22 -0
  408. package/src/generation/foliage/skeleton/shoot_demography.d.ts.map +1 -0
  409. package/src/generation/foliage/skeleton/shoot_demography.js +96 -0
  410. package/src/generation/foliage/skeleton/shoot_geometry.d.ts +66 -0
  411. package/src/generation/foliage/skeleton/shoot_geometry.d.ts.map +1 -0
  412. package/src/generation/foliage/skeleton/shoot_geometry.js +109 -0
  413. package/src/generation/foliage/skeleton/shoot_systems_simulate.d.ts +166 -0
  414. package/src/generation/foliage/skeleton/shoot_systems_simulate.d.ts.map +1 -0
  415. package/src/generation/foliage/skeleton/shoot_systems_simulate.js +588 -0
  416. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts +28 -12
  417. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts.map +1 -1
  418. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.js +137 -102
  419. package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts +112 -0
  420. package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts.map +1 -0
  421. package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.js +408 -0
  422. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts.map +1 -1
  423. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js +208 -206
  424. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +5 -2
  425. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -1
  426. package/src/generation/foliage/skeleton/tree_skeleton_grow.js +2048 -1871
  427. package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts +17 -0
  428. package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts.map +1 -0
  429. package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.js +231 -0
  430. package/src/generation/foliage/skeleton/tree_skeleton_read_joint_motion.d.ts +14 -0
  431. package/src/generation/foliage/skeleton/tree_skeleton_read_joint_motion.d.ts.map +1 -0
  432. package/src/generation/foliage/skeleton/tree_skeleton_read_joint_motion.js +26 -0
  433. package/src/generation/foliage/skeleton/tree_skeleton_read_joint_parents.d.ts +10 -0
  434. package/src/generation/foliage/skeleton/tree_skeleton_read_joint_parents.d.ts.map +1 -0
  435. package/src/generation/foliage/skeleton/tree_skeleton_read_joint_parents.js +20 -0
  436. package/src/generation/grid/generation/road/GridTaskGenerateRoads.d.ts.map +1 -1
  437. package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +4 -1
  438. package/src/generation/markers/GridCellActionPlaceMarkerGroup.d.ts +1 -0
  439. package/src/generation/markers/GridCellActionPlaceMarkerGroup.d.ts.map +1 -1
  440. package/src/generation/markers/GridCellActionPlaceMarkerGroup.js +98 -86
  441. package/src/shade/SHADER_F16_PROPOSAL_2026_10_24.md +263 -0
  442. package/src/shade/descriptor/WebGPUExtensionType.d.ts +17 -0
  443. package/src/shade/descriptor/WebGPUExtensionType.d.ts.map +1 -1
  444. package/src/shade/descriptor/WebGPUExtensionType.js +31 -1
  445. package/src/shade/playground/foliage_wind/FoliageRigOverlay.d.ts +37 -0
  446. package/src/shade/playground/foliage_wind/FoliageRigOverlay.d.ts.map +1 -0
  447. package/src/shade/playground/foliage_wind/FoliageRigOverlay.js +491 -0
  448. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
  449. package/src/shade/playground/foliage_wind/foliage_world.js +600 -602
  450. package/src/shade/playground/foliage_wind/index.html +6 -0
  451. package/src/shade/playground/foliage_wind/main.js +14 -0
  452. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  453. package/src/shade/renderer/animation/GPUAnimationManager.js +2 -1
  454. package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts +2 -1
  455. package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts.map +1 -1
  456. package/src/shade/renderer/animation/foliage/FoliageWindJoint.js +2 -1
  457. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts.map +1 -1
  458. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.js +4 -2
  459. package/src/shade/renderer/buffer/table/GPUTypedTable.js +1 -1
  460. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  461. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +403 -401
  462. package/src/shade/renderer/camera/OrbitalCameraController.d.ts +1 -62
  463. package/src/shade/renderer/camera/OrbitalCameraController.d.ts.map +1 -1
  464. package/src/shade/renderer/camera/OrbitalCameraController.js +1 -374
  465. package/src/shade/renderer/deferred/indirect/chunk_lpv_2d_cache_sample_irradiance.d.ts.map +1 -1
  466. package/src/shade/renderer/deferred/indirect/chunk_lpv_2d_cache_sample_irradiance.js +3 -0
  467. package/src/shade/renderer/deferred/indirect/chunk_lpv_sample_light.d.ts.map +1 -1
  468. package/src/shade/renderer/deferred/indirect/chunk_lpv_sample_light.js +6 -1
  469. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.js +1 -1
  470. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +2 -2
  471. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
  472. package/src/shade/renderer/fluid/GPUFluidCascade.js +6 -3
  473. package/src/shade/renderer/fluid/GPU_FLUID_OCCUPANCY_AND_SOTA_REVIEW_2026_10_26.md +361 -0
  474. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
  475. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +335 -241
  476. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.d.ts.map +1 -1
  477. package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.js +108 -101
  478. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_query_select.d.ts.map +1 -1
  479. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_query_select.js +69 -67
  480. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts +7 -6
  481. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts.map +1 -1
  482. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.js +341 -287
  483. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +6 -4
  484. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
  485. package/src/shade/renderer/fluid/mac/FluidMacPasses.js +427 -400
  486. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.d.ts +10 -5
  487. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.d.ts.map +1 -1
  488. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.js +532 -190
  489. package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.d.ts.map +1 -1
  490. package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.js +231 -237
  491. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts +2 -2
  492. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts.map +1 -1
  493. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +282 -245
  494. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.d.ts +1 -3
  495. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.d.ts.map +1 -1
  496. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.js +139 -109
  497. package/src/shade/renderer/fluid/mac/shader_fluid_mac_curl.d.ts +6 -6
  498. package/src/shade/renderer/fluid/mac/shader_fluid_mac_curl.d.ts.map +1 -1
  499. package/src/shade/renderer/fluid/mac/shader_fluid_mac_curl.js +257 -222
  500. package/src/shade/renderer/fluid/mac/shader_fluid_mac_divergence.d.ts +8 -7
  501. package/src/shade/renderer/fluid/mac/shader_fluid_mac_divergence.d.ts.map +1 -1
  502. package/src/shade/renderer/fluid/mac/shader_fluid_mac_divergence.js +119 -92
  503. package/src/shade/renderer/fluid/mac/shader_fluid_mac_gradient.d.ts +6 -9
  504. package/src/shade/renderer/fluid/mac/shader_fluid_mac_gradient.d.ts.map +1 -1
  505. package/src/shade/renderer/fluid/mac/shader_fluid_mac_gradient.js +229 -181
  506. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +17 -7
  507. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts.map +1 -1
  508. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.js +634 -621
  509. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_residual_restrict.d.ts +8 -6
  510. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_residual_restrict.d.ts.map +1 -1
  511. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_residual_restrict.js +166 -149
  512. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_smooth.d.ts +8 -6
  513. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_smooth.d.ts.map +1 -1
  514. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_smooth.js +219 -183
  515. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts.map +1 -1
  516. package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.js +142 -122
  517. package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +674 -663
  518. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +1 -1
  519. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  520. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +63 -29
  521. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts.map +1 -1
  522. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.js +77 -87
  523. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/meshopt_clusterizer.d.ts.map +1 -1
  524. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/meshopt_clusterizer.js +4 -3
  525. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +11 -11
  526. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  527. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +17 -19
  528. package/src/shade/renderer/global_illumination/lpv/graph_bake_irradiance_lookup_2d.js +4 -4
  529. package/src/shade/renderer/global_illumination/probe/octahedral/sample/chunk_lpv_mesh_interpolate_radiance_via_atlas.d.ts.map +1 -1
  530. package/src/shade/renderer/global_illumination/probe/octahedral/sample/chunk_lpv_mesh_interpolate_radiance_via_atlas.js +5 -1
  531. package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
  532. package/src/shade/renderer/loader/gltf/load_gltf.js +11 -35
  533. package/src/shade/renderer/loader/usd/load_usd.d.ts.map +1 -1
  534. package/src/shade/renderer/loader/usd/load_usd.js +6 -19
  535. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  536. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +199 -193
  537. package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -1
  538. package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +151 -143
  539. package/src/shade/renderer/postprocess/bloom/chunk_karis_blur4x4_sample.d.ts.map +1 -1
  540. package/src/shade/renderer/postprocess/bloom/chunk_karis_blur4x4_sample.js +11 -5
  541. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
  542. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +6 -18
  543. package/src/shade/renderer/postprocess/gtao/GTAO.js +1 -1
  544. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
  545. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +3 -5
  546. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +1 -1
  547. package/src/shade/renderer/postprocess/nss/chunk_nss_luma_derivative.d.ts.map +1 -1
  548. package/src/shade/renderer/postprocess/nss/chunk_nss_luma_derivative.js +7 -3
  549. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
  550. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +4 -2
  551. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
  552. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +4 -1
  553. package/src/shade/renderer/postprocess/ssr/downsample_karis.d.ts.map +1 -1
  554. package/src/shade/renderer/postprocess/ssr/downsample_karis.js +6 -3
  555. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
  556. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +4 -3
  557. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
  558. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +4 -1
  559. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  560. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
  561. package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap.d.ts.map +1 -1
  562. package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap.js +35 -39
  563. package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap_inv.d.ts.map +1 -1
  564. package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap_inv.js +20 -17
  565. package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
  566. package/src/shade/renderer/postprocess/taa/shader_taa.js +6 -3
  567. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  568. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +3 -1
  569. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +1 -1
  570. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.js +2 -2
  571. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +1 -1
  572. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.d.ts.map +1 -1
  573. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.js +92 -83
  574. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +1 -1
  575. package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
  576. package/src/shade/renderer/shader/ShaderDescriptor.js +12 -4
  577. package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts.map +1 -1
  578. package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.js +294 -286
  579. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_interpolate_probe_irradiance8.js +5 -5
  580. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mesh_interpolate_probe.d.ts.map +1 -1
  581. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mesh_interpolate_probe.js +5 -3
  582. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mesh_interpolate_probe_irradiance.d.ts.map +1 -1
  583. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mesh_interpolate_probe_irradiance.js +9 -6
  584. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_sample_sh3_at.d.ts.map +1 -1
  585. package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_sample_sh3_at.js +33 -38
  586. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  587. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +690 -675
  588. package/src/shade/renderer/shader/type/WebGPUArray.d.ts +3 -0
  589. package/src/shade/renderer/shader/type/WebGPUArray.d.ts.map +1 -1
  590. package/src/shade/renderer/shader/type/WebGPUArray.js +185 -167
  591. package/src/shade/renderer/shader/type/WebGPUStruct.d.ts.map +1 -1
  592. package/src/shade/renderer/shader/type/WebGPUStruct.js +461 -455
  593. package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.d.ts.map +1 -1
  594. package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.js +335 -211
  595. package/src/shade/renderer/shader/type/serde/write_gpu_typed_buffer.d.ts.map +1 -1
  596. package/src/shade/renderer/shader/type/serde/write_gpu_typed_buffer.js +329 -221
  597. package/src/shade/renderer/shader/type/type_has_f16.d.ts +12 -0
  598. package/src/shade/renderer/shader/type/type_has_f16.d.ts.map +1 -0
  599. package/src/shade/renderer/shader/type/type_has_f16.js +66 -0
  600. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  601. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +16 -2
  602. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
  603. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +5 -2
  604. package/src/shade/renderer/water/shader_water_avboit.js +1 -1
  605. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  606. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +260 -23
  607. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts +6 -7
  608. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  609. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +269 -69
  610. package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
  611. package/src/shade/wgsl/validate_wgsl_source.js +27 -1
  612. package/src/view/controller/controls/ListController.d.ts.map +1 -1
  613. package/src/view/controller/controls/ListController.js +118 -113
  614. package/src/view/controller/controls/Vector1Control.js +97 -97
  615. package/src/view/elements/image/SvgImageView.d.ts +1 -0
  616. package/src/view/elements/image/SvgImageView.d.ts.map +1 -1
  617. package/src/view/elements/image/SvgImageView.js +92 -90
  618. package/src/view/minimap/dom/MinimapTerrainView.d.ts +1 -0
  619. package/src/view/minimap/dom/MinimapTerrainView.d.ts.map +1 -1
  620. package/src/view/minimap/dom/MinimapTerrainView.js +151 -147
  621. package/src/view/tooltip/gml/TooltipParser.js +2 -2
  622. package/src/engine/network/PriorityFetch.d.ts +0 -59
  623. package/src/engine/network/PriorityFetch.d.ts.map +0 -1
  624. package/src/engine/network/PriorityFetch.js +0 -193
  625. package/src/generation/foliage/config/BranchLevelConfig.d.ts.map +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"}