@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
@@ -1 +1 @@
1
- {"version":3,"file":"Av1FrameContext.d.ts","sourceRoot":"","sources":["../../../../../../../src/format/image/avif/av1/decode/Av1FrameContext.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Av1FrameContext.d.ts","sourceRoot":"","sources":["../../../../../../../src/format/image/avif/av1/decode/Av1FrameContext.js"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { CdfContext } from "../entropy/CdfContext.js";
2
+ import { count_units_in_frame } from "../filter/loop_restoration.js";
2
3
  import { FilmGrainState } from "../grain/FilmGrainState.js";
3
4
  import { IntraPredictionState } from "../predict/IntraPredictionState.js";
4
5
  import { PartitionCdf } from "../entropy/partition_cdf.js";
@@ -540,8 +541,8 @@ export class Av1FrameContext {
540
541
 
541
542
  const unit_size = frame.loop_restoration_size[plane];
542
543
 
543
- columns = Math.max(columns, count_units(unit_size, (frame.upscaled_width + sub_x) >> sub_x));
544
- unit_rows = Math.max(unit_rows, count_units(unit_size, (frame.frame_height + sub_y) >> sub_y));
544
+ columns = Math.max(columns, count_units_in_frame(unit_size, (frame.upscaled_width + sub_x) >> sub_x));
545
+ unit_rows = Math.max(unit_rows, count_units_in_frame(unit_size, (frame.frame_height + sub_y) >> sub_y));
545
546
  }
546
547
 
547
548
  this.lr_unit_stride = columns;
@@ -567,14 +568,6 @@ export class Av1FrameContext {
567
568
  }
568
569
  }
569
570
 
570
- /**
571
- * @param {number} unit_size
572
- * @param {number} frame_size
573
- * @returns {number}
574
- */
575
- function count_units(unit_size, frame_size) {
576
- return Math.max(Math.floor((frame_size + (unit_size >> 1)) / unit_size), 1);
577
- }
578
571
 
579
572
  /**
580
573
  * @param {Uint8Array|null} existing
@@ -33,4 +33,24 @@ export function get_qindex(ctx: Av1FrameContext): number;
33
33
  * @copyright Company Named Limited (c) 2026
34
34
  */
35
35
  export function reconstruct(ctx: Av1FrameContext, plane: number, x: number, y: number, tx_size: number): void;
36
+ /**
37
+ * The divisor the dequantiser applies after multiplying by the step, which is how large transforms
38
+ * keep their coefficients in range.
39
+ *
40
+ * @param {number} tx_size
41
+ * @returns {number}
42
+ */
43
+ export function dequant_denominator(tx_size: number): number;
44
+ /**
45
+ * @param {FrameHeader} frame
46
+ * @param {number} plane
47
+ * @returns {number}
48
+ */
49
+ export function dc_delta(frame: FrameHeader, plane: number): number;
50
+ /**
51
+ * @param {FrameHeader} frame
52
+ * @param {number} plane
53
+ * @returns {number}
54
+ */
55
+ export function ac_delta(frame: FrameHeader, plane: number): number;
36
56
  //# sourceMappingURL=reconstruct.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reconstruct.d.ts","sourceRoot":"","sources":["../../../../../../../src/format/image/avif/av1/decode/reconstruct.js"],"names":[],"mappings":"AAkCA;;;;;GAKG;AACH,oCAJW,MAAM,KACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;GAKG;AACH,oCAJW,MAAM,KACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;GAKG;AACH,kDAHa,MAAM,CAsBlB;AA0BD;;;;;;;;;;;;GAYG;AACH,yDATW,MAAM,KACN,MAAM,KACN,MAAM,WACN,MAAM,QAsGhB"}
1
+ {"version":3,"file":"reconstruct.d.ts","sourceRoot":"","sources":["../../../../../../../src/format/image/avif/av1/decode/reconstruct.js"],"names":[],"mappings":"AAkCA;;;;;GAKG;AACH,oCAJW,MAAM,KACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;GAKG;AACH,oCAJW,MAAM,KACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;GAKG;AACH,kDAHa,MAAM,CAsBlB;AA0BD;;;;;;;;;;;;GAYG;AACH,yDATW,MAAM,KACN,MAAM,KACN,MAAM,WACN,MAAM,QAgGhB;AAED;;;;;;GAMG;AACH,6CAHW,MAAM,GACJ,MAAM,CAYlB;AAED;;;;GAIG;AACH,oDAHW,MAAM,GACJ,MAAM,CAQlB;AAED;;;;GAIG;AACH,oDAHW,MAAM,GACJ,MAAM,CAQlB"}
@@ -120,13 +120,7 @@ export function reconstruct(ctx, plane, x, y, tx_size) {
120
120
  const frame = ctx.frame;
121
121
  const bit_depth = ctx.bit_depth;
122
122
 
123
- let dq_denom = 1;
124
-
125
- if (tx_size === TX_32X32 || tx_size === TX_16X32 || tx_size === TX_32X16 || tx_size === TX_16X64 || tx_size === TX_64X16) {
126
- dq_denom = 2;
127
- } else if (tx_size === TX_64X64 || tx_size === TX_32X64 || tx_size === TX_64X32) {
128
- dq_denom = 4;
129
- }
123
+ const dq_denom = dequant_denominator(tx_size);
130
124
 
131
125
  const w = TX_WIDTH[tx_size];
132
126
  const h = TX_HEIGHT[tx_size];
@@ -214,12 +208,31 @@ export function reconstruct(ctx, plane, x, y, tx_size) {
214
208
  }
215
209
  }
216
210
 
211
+ /**
212
+ * The divisor the dequantiser applies after multiplying by the step, which is how large transforms
213
+ * keep their coefficients in range.
214
+ *
215
+ * @param {number} tx_size
216
+ * @returns {number}
217
+ */
218
+ export function dequant_denominator(tx_size) {
219
+ if (tx_size === TX_32X32 || tx_size === TX_16X32 || tx_size === TX_32X16 || tx_size === TX_16X64 || tx_size === TX_64X16) {
220
+ return 2;
221
+ }
222
+
223
+ if (tx_size === TX_64X64 || tx_size === TX_32X64 || tx_size === TX_64X32) {
224
+ return 4;
225
+ }
226
+
227
+ return 1;
228
+ }
229
+
217
230
  /**
218
231
  * @param {FrameHeader} frame
219
232
  * @param {number} plane
220
233
  * @returns {number}
221
234
  */
222
- function dc_delta(frame, plane) {
235
+ export function dc_delta(frame, plane) {
223
236
  if (plane === 0) {
224
237
  return frame.delta_q_y_dc;
225
238
  }
@@ -232,7 +245,7 @@ function dc_delta(frame, plane) {
232
245
  * @param {number} plane
233
246
  * @returns {number}
234
247
  */
235
- function ac_delta(frame, plane) {
248
+ export function ac_delta(frame, plane) {
236
249
  if (plane === 0) {
237
250
  return 0;
238
251
  }
@@ -1,7 +1,7 @@
1
1
  import { clamp_index } from "../../../../../core/math/clamp_index.js";
2
2
  import { RESTORE_NONE, RESTORE_WIENER } from "../tables/av1_symbols.js";
3
3
  import { WIENER_TAPS_MAX, WIENER_TAPS_MID, WIENER_TAPS_MIN } from "../tables/filter_tables.js";
4
- import { apply_loop_restoration, count_units_in_frame, restoration_unit_of } from "../filter/loop_restoration.js";
4
+ import { apply_loop_restoration, count_units_in_frame, expand_wiener, restoration_unit_of } from "../filter/loop_restoration.js";
5
5
  import { DECODE_THOROUGH } from "./decode_effort.js";
6
6
  import { apply_cdef } from "../filter/cdef.js";
7
7
  import { round2 } from "../util/round2.js";
@@ -238,7 +238,7 @@ function filter_plane(ec, plane, input, output, stride, width, height, map_strid
238
238
  continue;
239
239
  }
240
240
 
241
- expand(taps, ec.restoration_map[map_row + (x >> 2)] * 6 + pass * 3, filter);
241
+ expand_wiener(taps, ec.restoration_map[map_row + (x >> 2)] * 6 + pass * 3, filter);
242
242
 
243
243
  let sum = 0;
244
244
 
@@ -585,22 +585,6 @@ function unit_count(ec, plane) {
585
585
  return ec.restoration_rows * ec.restoration_columns;
586
586
  }
587
587
 
588
- /**
589
- * @param {Int8Array} coefficients
590
- * @param {number} offset
591
- * @param {Int32Array} filter
592
- */
593
- function expand(coefficients, offset, filter) {
594
- filter[3] = TAP_SCALE;
595
-
596
- for (let i = 0; i < TAPS; i++) {
597
- const c = coefficients[offset + i];
598
-
599
- filter[i] = c;
600
- filter[6 - i] = c;
601
- filter[3] -= 2 * c;
602
- }
603
- }
604
588
 
605
589
  /**
606
590
  * @param {number} tap
@@ -1 +1 @@
1
- {"version":3,"file":"quantise.d.ts","sourceRoot":"","sources":["../../../../../../../src/format/image/avif/av1/encode/quantise.js"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,sEAfW,MAAM,WACN,MAAM,WACN,MAAM,gBACN,UAAU,UACV,UAAU,iBACV,MAAM,QAEN,WAAW,GACT,MAAM,CA2FlB;AAED;;;;;;;;;;;GAWG;AACH,sEAJW,MAAM,WACN,MAAM,GACJ,MAAM,CAclB"}
1
+ {"version":3,"file":"quantise.d.ts","sourceRoot":"","sources":["../../../../../../../src/format/image/avif/av1/encode/quantise.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,sEAfW,MAAM,WACN,MAAM,WACN,MAAM,gBACN,UAAU,UACV,UAAU,iBACV,MAAM,QAEN,WAAW,GACT,MAAM,CA2FlB;AAED;;;;;;;;;;;GAWG;AACH,sEAJW,MAAM,WACN,MAAM,GACJ,MAAM,CAclB"}
@@ -1,15 +1,5 @@
1
- import {
2
- TX_16X32,
3
- TX_16X64,
4
- TX_32X16,
5
- TX_32X32,
6
- TX_32X64,
7
- TX_64X16,
8
- TX_64X32,
9
- TX_64X64
10
- } from "../tables/av1_symbols.js";
11
1
  import { TX_HEIGHT, TX_WIDTH } from "../tables/block_tables.js";
12
- import { ac_quant, dc_quant, get_qindex } from "../decode/reconstruct.js";
2
+ import { ac_delta, ac_quant, dc_delta, dc_quant, dequant_denominator, get_qindex } from "../decode/reconstruct.js";
13
3
 
14
4
  /**
15
5
  * Largest level the format can carry. The decoder masks a coefficient to twenty bits before
@@ -166,47 +156,3 @@ export function quantiser_zero_threshold(ec, plane, tx_size) {
166
156
  return ((1 - ec.rounding) * step) / dequant_denominator(tx_size);
167
157
  }
168
158
 
169
- /**
170
- * The divisor the dequantiser applies after multiplying by the step, which is how large transforms
171
- * keep their coefficients in range.
172
- *
173
- * @param {number} tx_size
174
- * @returns {number}
175
- */
176
- function dequant_denominator(tx_size) {
177
- if (tx_size === TX_32X32 || tx_size === TX_16X32 || tx_size === TX_32X16 || tx_size === TX_16X64 || tx_size === TX_64X16) {
178
- return 2;
179
- }
180
-
181
- if (tx_size === TX_64X64 || tx_size === TX_32X64 || tx_size === TX_64X32) {
182
- return 4;
183
- }
184
-
185
- return 1;
186
- }
187
-
188
- /**
189
- * @param {FrameHeader} frame
190
- * @param {number} plane
191
- * @returns {number}
192
- */
193
- function dc_delta(frame, plane) {
194
- if (plane === 0) {
195
- return frame.delta_q_y_dc;
196
- }
197
-
198
- return plane === 1 ? frame.delta_q_u_dc : frame.delta_q_v_dc;
199
- }
200
-
201
- /**
202
- * @param {FrameHeader} frame
203
- * @param {number} plane
204
- * @returns {number}
205
- */
206
- function ac_delta(frame, plane) {
207
- if (plane === 0) {
208
- return 0;
209
- }
210
-
211
- return plane === 1 ? frame.delta_q_u_ac : frame.delta_q_v_ac;
212
- }
@@ -39,4 +39,13 @@ export function count_units_in_frame(unit_size: number, frame_size: number): num
39
39
  * @returns {number} index into the per-unit arrays
40
40
  */
41
41
  export function restoration_unit_of(ctx: Av1FrameContext, plane: number, row: number, col: number): number;
42
+ /**
43
+ * Expand three coded taps into the seven of a symmetric unit-gain filter.
44
+ *
45
+ * @param {Int8Array} coefficients
46
+ * @param {number} offset
47
+ * @param {Int32Array} filter
48
+ * @see AV1 spec 7.17.5 "Wiener coefficient process"
49
+ */
50
+ export function expand_wiener(coefficients: Int8Array, offset: number, filter: Int32Array): void;
42
51
  //# sourceMappingURL=loop_restoration.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop_restoration.d.ts","sourceRoot":"","sources":["../../../../../../../src/format/image/avif/av1/filter/loop_restoration.js"],"names":[],"mappings":"AA8DA;;;;;;;;;;;;;;;;;GAiBG;AACH,sEATW,WAAW,EAAE,QACb,WAAW,EAAE,UACb,WAAW,EAAE,UACb,UAAU,QA+BpB;AAwDD;;;;;;GAMG;AACH,gDAJW,MAAM,cACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;;;GAYG;AACH,iEALW,MAAM,OACN,MAAM,OACN,MAAM,GACJ,MAAM,CAiBlB"}
1
+ {"version":3,"file":"loop_restoration.d.ts","sourceRoot":"","sources":["../../../../../../../src/format/image/avif/av1/filter/loop_restoration.js"],"names":[],"mappings":"AA8DA;;;;;;;;;;;;;;;;;GAiBG;AACH,sEATW,WAAW,EAAE,QACb,WAAW,EAAE,UACb,WAAW,EAAE,UACb,UAAU,QA+BpB;AAwDD;;;;;;GAMG;AACH,gDAJW,MAAM,cACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;;;GAYG;AACH,iEALW,MAAM,OACN,MAAM,OACN,MAAM,GACJ,MAAM,CAiBlB;AAqFD;;;;;;;GAOG;AACH,4CALW,SAAS,UACT,MAAM,UACN,UAAU,QAapB"}
@@ -291,7 +291,7 @@ function wiener_filter(ctx, output, stride, plane, unit_index, x, y, w, h) {
291
291
  * @param {Int32Array} filter
292
292
  * @see AV1 spec 7.17.5 "Wiener coefficient process"
293
293
  */
294
- function expand_wiener(coefficients, offset, filter) {
294
+ export function expand_wiener(coefficients, offset, filter) {
295
295
  filter[3] = 128;
296
296
 
297
297
  for (let i = 0; i < 3; i++) {
@@ -1,6 +1,6 @@
1
1
  import { etc1s_block_colors } from "../etc1s/etc1s_block_colors.js";
2
2
  import { build_range_plan } from "./build_range_plan.js";
3
- import { fit_endpoints, SELECTOR_RANGES } from "./fit_endpoints.js";
3
+ import { fit_endpoints, nearest_weight, SELECTOR_RANGES } from "./fit_endpoints.js";
4
4
 
5
5
  /**
6
6
  * Bytes one BC7 block occupies.
@@ -361,7 +361,7 @@ function build_color_templates(endpoints, plan, weights, quantise) {
361
361
  step off wherever that move mattered.
362
362
  */
363
363
  for (let selector = 0; selector < 4; selector++) {
364
- selector_to_index[pairing * 4 + selector] = closest_weight(
364
+ selector_to_index[pairing * 4 + selector] = nearest_weight(
365
365
  decoded_low, decoded_high, weights, colors, selector * 3
366
366
  );
367
367
  }
@@ -463,34 +463,3 @@ function fill_indices(out, selector_to_index, pairing, selectors, selector_base,
463
463
  return flipped;
464
464
  }
465
465
 
466
- /**
467
- * Which interpolation weight best reproduces a target colour between two endpoints.
468
- *
469
- * @param {Uint8Array} a three channels, as they decode
470
- * @param {Uint8Array} b three channels, as they decode
471
- * @param {Int32Array} weights
472
- * @param {Uint8Array} target
473
- * @param {number} target_offset
474
- * @returns {number} an index into `weights`
475
- */
476
- function closest_weight(a, b, weights, target, target_offset) {
477
- let best = 0;
478
- let best_error = Infinity;
479
-
480
- for (let i = 0; i < weights.length; i++) {
481
- let error = 0;
482
-
483
- for (let c = 0; c < 3; c++) {
484
- const delta = interpolate(a[c], b[c], weights[i]) - target[target_offset + c];
485
-
486
- error += delta * delta;
487
- }
488
-
489
- if (error < best_error) {
490
- best_error = error;
491
- best = i;
492
- }
493
- }
494
-
495
- return best;
496
- }
@@ -64,6 +64,17 @@ export function fit_endpoints(low: Uint8Array, high: Uint8Array, colors: Uint8Ar
64
64
  * weight, which says nothing about where the endpoints are
65
65
  */
66
66
  export function solve_endpoints(low: Uint8Array, high: Uint8Array, colors: Uint8Array, weight_of_selector: Int32Array, min_selector: number, max_selector: number): boolean;
67
+ /**
68
+ * Which weight puts the interpolated colour closest to a target.
69
+ *
70
+ * @param {Uint8Array} low three channels
71
+ * @param {Uint8Array} high three channels
72
+ * @param {Int32Array} weights
73
+ * @param {Uint8Array} target
74
+ * @param {number} target_offset
75
+ * @returns {number} an index into `weights`
76
+ */
77
+ export function nearest_weight(low: Uint8Array, high: Uint8Array, weights: Int32Array, target: Uint8Array, target_offset: number): number;
67
78
  /**
68
79
  * The `[min, max]` selector span of every entry of a selector codebook.
69
80
  *
@@ -1 +1 @@
1
- {"version":3,"file":"fit_endpoints.d.ts","sourceRoot":"","sources":["../../../../../../src/format/texture/basis/transcode/fit_endpoints.js"],"names":[],"mappings":"AA2DA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,mCAVW,UAAU,QACV,UAAU,UACV,UAAU,WACV,UAAU,gBACV,MAAM,gBACN,MAAM,QAwDhB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qCATW,UAAU,QACV,UAAU,UACV,UAAU,sBACV,UAAU,gBACV,MAAM,gBACN,MAAM,GACJ,OAAO,CAyCnB;AA+CD;;;;;GAKG;AACH,4EAFa,UAAU,CAyBtB;AAzQD;;;;;;;;;GASG;AACH,8BAFU,MAAM,EAAE,EAAE,CAOlB"}
1
+ {"version":3,"file":"fit_endpoints.d.ts","sourceRoot":"","sources":["../../../../../../src/format/texture/basis/transcode/fit_endpoints.js"],"names":[],"mappings":"AA2DA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,mCAVW,UAAU,QACV,UAAU,UACV,UAAU,WACV,UAAU,gBACV,MAAM,gBACN,MAAM,QAwDhB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qCATW,UAAU,QACV,UAAU,UACV,UAAU,sBACV,UAAU,gBACV,MAAM,gBACN,MAAM,GACJ,OAAO,CAyCnB;AAYD;;;;;;;;;GASG;AACH,oCAPW,UAAU,QACV,UAAU,WACV,UAAU,UACV,UAAU,iBACV,MAAM,GACJ,MAAM,CAyBlB;AAED;;;;;GAKG;AACH,4EAFa,UAAU,CAyBtB;AAzQD;;;;;;;;;GASG;AACH,8BAFU,MAAM,EAAE,EAAE,CAOlB"}
@@ -234,7 +234,7 @@ function clamp_round(value) {
234
234
  * @param {number} target_offset
235
235
  * @returns {number} an index into `weights`
236
236
  */
237
- function nearest_weight(low, high, weights, target, target_offset) {
237
+ export function nearest_weight(low, high, weights, target, target_offset) {
238
238
  let best = 0;
239
239
  let best_error = Infinity;
240
240
 
@@ -1 +1 @@
1
- {"version":3,"file":"uastc_decode_block.d.ts","sourceRoot":"","sources":["../../../../../../src/format/texture/basis/uastc/uastc_decode_block.js"],"names":[],"mappings":"AAiJA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,0CATW,UAAU,QACV,MAAM,GACJ,UAAU,CAmEtB;AAwMD;;;;;;;;;GASG;AACH,0CAPW,UAAU,OACV,UAAU,eACV,MAAM,QA6BhB;AAhdD;;;;;GAKG;AACH,gCAFU,MAAM,CAEoB;;;;;;;;;UAoItB,MAAM;aACN,MAAM;;;;;eACN,OAAO;;;;aAEP,MAAM;;;;eACN,UAAU;;;;eACV,UAAU;;;;aACV,UAAU;;;;;oBACV,UAAU;;;;kBAEV,MAAM;gBACN,OAAO;;;;wBACP,MAAM"}
1
+ {"version":3,"file":"uastc_decode_block.d.ts","sourceRoot":"","sources":["../../../../../../src/format/texture/basis/uastc/uastc_decode_block.js"],"names":[],"mappings":"AAgIA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,0CATW,UAAU,QACV,MAAM,GACJ,UAAU,CAmEtB;AAwMD;;;;;;;;;GASG;AACH,0CAPW,UAAU,OACV,UAAU,eACV,MAAM,QA6BhB;AA9bD;;;;;GAKG;AACH,gCAFU,MAAM,CAEoB;;;;;;;;;UAkHtB,MAAM;aACN,MAAM;;;;;eACN,OAAO;;;;aAEP,MAAM;;;;eACN,UAAU;;;;eACV,UAAU;;;;aACV,UAAU;;;;;oBACV,UAAU;;;;kBAEV,MAAM;gBACN,OAAO;;;;wBACP,MAAM"}
@@ -1,3 +1,4 @@
1
+ import { astc_interpolate } from "../astc_block.js";
1
2
  import {
2
3
  UASTC_ANCHORS_2,
3
4
  UASTC_ANCHORS_2_BC7_3,
@@ -74,24 +75,6 @@ function components_of(cem) {
74
75
  return cem === 4 ? 2 : cem === 8 ? 3 : 4;
75
76
  }
76
77
 
77
- /**
78
- * ASTC's endpoint interpolation, which UASTC uses unchanged.
79
- *
80
- * The eight-bit endpoints are widened to sixteen by replication before interpolating and the result
81
- * narrowed back, which is not the same as interpolating at eight bits — the extra precision is why
82
- * the specification calls the BC7 mapping lossy while the ASTC one is exact.
83
- *
84
- * @param {number} low eight bits
85
- * @param {number} high eight bits
86
- * @param {number} weight `[0, 64]`
87
- * @returns {number} eight bits
88
- */
89
- function interpolate(low, high, weight) {
90
- const l = (low << 8) | low;
91
- const h = (high << 8) | high;
92
-
93
- return ((l * (64 - weight) + h * weight + 32) >> 6) >> 8;
94
- }
95
78
 
96
79
  /**
97
80
  * Dequantise one encoded endpoint integer to eight bits.
@@ -472,7 +455,7 @@ export function uastc_block_texels(block, out, out_offset = 0) {
472
455
 
473
456
  const weight = block.weights[texel * planes + plane];
474
457
 
475
- out[out_offset + texel * 4 + c] = interpolate(
458
+ out[out_offset + texel * 4 + c] = astc_interpolate(
476
459
  block.endpoints[low + c], block.endpoints[high + c], weight
477
460
  );
478
461
  }
@@ -0,0 +1,220 @@
1
+ # Annual Shoots: Leaves on Real-Sized Shoots
2
+
3
+ ## Problem
4
+
5
+ The oak's leaf cards are a median 0.90 m long (species card 0.95 x 0.85 m). Each draws 5 leaves at about 0.3-0.4 m
6
+ against a real 6-12 cm, and each moves as one rigid plate, so wind displaces large patches of the crown together. The
7
+ cards are big because they stand in for twigs the skeleton never grows: the oak's leaf carriers (generator 2) are a
8
+ median 1.24 m long, where a current-year oak shoot averages 5.5 cm.
9
+
10
+ Shrinking the cards alone thins the crown: at 0.25 m cards the oak's leaf area falls from 163 to 45 m^2 and its side
11
+ opacity from 0.75 to 0.33, because the density rule ties leaf area per metre of carrier to card size. (Both opacities
12
+ came from a raster window that clipped the crown; see "Landed".)
13
+
14
+ ## Sources
15
+
16
+ **[BB2000]** Buck-Sorlin, G.H. & Bell, A.D. (2000). Models of crown architecture in *Quercus petraea* and *Q. robur*:
17
+ shoot lengths and bud numbers. *Forestry* 73(1): 1-19. Peripheral branches at mid-crown of two *Q. petraea* (70-120
18
+ years) and one *Q. robur* (30 years); no difference found between the species in bud patterns or length distributions.
19
+
20
+ | Quantity | Value | Where |
21
+ | :--- | :--- | :--- |
22
+ | Extension unit (one season's shoot) length, all oaks | mean 5.5 cm, median 3.8 cm, sd 5.0 | Table 4 |
23
+ | Same, the *Q. robur* | mean 7.2 cm, median 5.8 cm | Table 4 |
24
+ | Longest shoot by branching order | 30 cm (order 1) to 8 cm (order 4) | p. 9 |
25
+ | Modal length | 3 cm (order 1) to 2 cm (order 4) | p. 9 |
26
+ | Length distribution | negative binomial, orders 1-2 (p = 0.58, 0.60); Poisson with mean - 1, orders 3-4 | p. 10-11 |
27
+ | Terminal shoot length | 11.7 +- 6.1 cm, about 1-31 cm | p. 11-12 |
28
+ | Lateral lengths, subapical zone (0.8-0.99) | means 3.4-9.0 cm | p. 11 |
29
+ | Lateral lengths, median zone (0.3-0.55) | means 3.4-7.0 cm, at most about 15 cm | p. 11 |
30
+ | Where laterals grow out | none below 0.3; 23.3% at 0.3-0.55; almost none at 0.55-0.8 (female flowers); 71.4% at 0.8-0.99 | p. 11, Fig. 7 |
31
+ | Share of all new shoots | subapical-zone laterals 44.4%, median-zone laterals 14.4% | p. 11 |
32
+ | Subapical buds (pseudo-whorl under the terminal bud) | almost always 4 | p. 7, 17 |
33
+ | Median buds | modal 6-10, range 0-21; length = 0.98 m - 2.7 cm (all orders) | p. 8, Table 5 |
34
+ | Shoot types | spring flush 92.7%, Lammas 5.2%, sylleptic 2.1% | Table 3 |
35
+ | Current shoot diameter | d = 0.27 + 0.02 l (cm), never above 5.5 mm | Table 7, p. 13 |
36
+ | Branching orders on a branch | up to 7 | p. 15 |
37
+
38
+ Subapical and median buds each sit in the axil of a leaf; basal buds have none (footnote 3, p. 5).
39
+
40
+ **[BB1998]** Buck-Sorlin, G.H. & Bell, A.D. (1998). A quantification of shoot shedding in pedunculate oak (*Quercus
41
+ robur* L.). *Botanical Journal of the Linnean Society* 127: 371-391. Everything shed in one year by one free-standing
42
+ *Q. robur* (about 14 m, 40 years).
43
+
44
+ | Quantity | Value | Where |
45
+ | :--- | :--- | :--- |
46
+ | Shoot fragments shed in a year | 14,767 (13,185 actively shed, 1,582 broken) | p. 376 |
47
+ | Age of shed fragments with current growth | 21.3% current, 33.8% 1 year, 21.6% 2 years, 23.3% 3-10 years | p. 382-383 |
48
+ | Unbranched / a single extension unit | 70.5% / 35.8% (live); 90.7% / 66.6% (dead) | p. 381 |
49
+ | Longest extension unit under 5 cm | 83.7% | p. 377 |
50
+ | Most at risk | the highest branching orders; short shoots whose terminal bud seldom extends the axis | p. 388 |
51
+ | Where | shoots up to about 10 years old: the outer metre of the crown | p. 388 |
52
+ | How | always at the base of a module (the axis from one bud), never along it | p. 388 |
53
+ | Net effect | "the surplus of peripheral shoots apparently produced every year is mostly thinned out within 2 years" | p. 388 |
54
+
55
+ **[W1989]** Wilson, B.F. (1989). Tree branches as populations of twigs. *Can. J. Bot.* 67: 434-442, as cited in
56
+ [BB2000] p. 15: twig populations fluctuate but show no long-term change in numbers.
57
+
58
+ **[TP2015]** *Tree Physiology* (2015) table comparing *Q. robur* and *Q. faginea*: 11.2 +- 0.9 leaves per shoot. The age
59
+ of the trees is not stated.
60
+
61
+ ## Derived
62
+
63
+ - **Shoots per mother shoot per year: about 2.65.** On [BB2000]'s branch o1b1, laterals were 44.4% + 14.4% of new
64
+ shoots, which is 71.4% + 23.3% of laterals, so laterals were 62.2% of all new shoots and terminals 37.8%. If every
65
+ mother shoot grew its terminal bud, each yielded 1 terminal, 1.17 subapical laterals (29% of its 4 subapical buds)
66
+ and 0.38 median laterals.
67
+ - **Survival: about 38% of new shoots a year.** A population that holds steady [W1989] keeps 1 / 2.65 of what it
68
+ produces, which matches "mostly thinned out within 2 years" [BB1998].
69
+ - **Leaves per shoot: 4 + median buds**, 9-14 for typical lengths, against 11.2 in [TP2015].
70
+
71
+ ## Decisions
72
+
73
+ Alex's direction (2026-10-25): appearance, flexibility and working well with the other parameters come before
74
+ real-world accuracy.
75
+
76
+ 1. **The leaf-bearing unit is the current-year shoot.** A deciduous oak's leaves sit on this year's growth only. One
77
+ card per current-year shoot draws that shoot's leaves crowded at its tip (a new `rosette` leaf arrangement in the
78
+ atlas). The card covers the shoot plus its leaves, about 0.2 m for the oak.
79
+ 2. **The peripheral twig system is grown year by year** in a pass after the framework, from an explicit rule list,
80
+ `TreeSpeciesConfig.shoot_rules` (`ShootSystemRule`: carrier generator, shoot generator, years, vigour, and the
81
+ demography above as defaults). The shoot generator is an ordinary `BranchGeneratorConfig` for the twigs' look. A
82
+ module (the axis grown from one bud) is one skeleton branch, one segment per year, so shedding removes a module at
83
+ its base, as [BB1998] observed.
84
+ 3. **Every year**, each living module adds a terminal extension unit, and each unit grown the year before bursts its
85
+ buds: about 1.17 laterals in its subapical zone and 0.38 in its median zone. Lengths are drawn from [BB2000]'s
86
+ distributions, shorter with branching order.
87
+ 4. **Shedding** keeps, of each year's new shoots, the expected `vigour / 2.65` share, taking the highest-order and
88
+ shortest first [BB1998]. A deterministic dither keeps counts close to their expectation, so the crown does not
89
+ swing with seed luck.
90
+ 5. **Density closure (the one unsourced part).** Steady state fixes how a population changes, not how big it is. Each
91
+ carrier's own last `years` of growth seeds the system: its extension units are laid back from its tip, and each
92
+ one's buds start lineages. `vigour` (default above 1, a growing crown) is the authored knob that sets how full the
93
+ crown is; at 1 the periphery holds steady. LAI is reported as a check, not fitted.
94
+ 6. **Leaves only on current growth** is keyed on a runtime fact: the skeleton records where each module's current-year
95
+ unit starts. A carrier without that record keeps today's density rule, so every other preset is unchanged.
96
+ 7. **Levels.** All modules take the carrier's level + 1, the twig layer, so the LOD chain and the wind rig treat them as
97
+ one layer. Branching order is tracked inside the pass only.
98
+ 8. **Joints** come from the existing derived placement. Each current shoot carrying a card will likely take its own
99
+ joint, which is the leaf-scale motion this work is for. The `max_joints` safety net rises from 4,096 to 16,384 so
100
+ the oak does not reach it; that number is chosen.
101
+
102
+ Not modelled: Lammas and sylleptic shoots (7.3% of shoots), male and female short shoots, and shedding of shoots older
103
+ than the simulated `years`.
104
+
105
+ ## Plan
106
+
107
+ 1. `ShootSystemRule` config with [BB2000]/[BB1998] defaults, wired into `TreeSpeciesConfig`.
108
+ 2. `tree_skeleton_grow_shoots`: the demography as a pure, seeded function producing module records, then written into
109
+ the skeleton before the pipe-model pass, with radii from [BB2000] Table 7.
110
+ 3. Foliage: one card per current-year shoot; the `rosette` arrangement; segment mechanics take the same leaf area.
111
+ 4. The oak preset grows shoots on generators 2 and 4, with cards sized for 6-12 cm leaves.
112
+ 5. Specs: outgrowth positions and counts, steady survival at vigour 1, length means by order, leaves only on current
113
+ growth, mechanics leaf area equal to the cards'. Mutation-test them.
114
+ 6. Measure the oak (cards, joints, leaf area, opacity, triangles, generation time) and look at it in the playground.
115
+
116
+ ## Landed
117
+
118
+ Built as planned, with these differences.
119
+
120
+ - **Pass order.** The shoots are written after the pipe-model pass, not before. The pipe pass would otherwise thicken
121
+ the framework under shoots already placed against it, and they would end up inside its wood. Twig radii are not
122
+ left to the pipe model: each axis's radius is computed bottom-up from [BB2000] Table 7. Each unit takes the
123
+ largest of:
124
+ - its current-shoot diameter, aged by one year per unit below the tip;
125
+ - the pipe area of what it carries;
126
+ - 1 / 0.82 of its thickest lateral.
127
+
128
+ The radius floor is 1.9 mm, the thinnest tip the bark mesher draws cleanly, and the framework's own floor in
129
+ `tree_skeleton_grow.spec.js`. A carrier's young end is thickened the same way, then swept so it still tapers.
130
+ - **No twig grows through wood.** All carriers are thickened first. Then each axis's path is computed and tested
131
+ against a spatial hash of the framework (`FrameworkHash`). An axis that would cross the framework is a blocked bud
132
+ and does not grow, nor does anything on it. Its own junction with its mother is exempt. Measured at seed 1337: 286
133
+ of 2,639 modules are blocked, and 195 more lose their mother that way.
134
+ - **Plagiotropic mothers** knock out ventral buds as the framework's do: a bud turns by the golden angle, up to 5
135
+ times, until it clears the downward cone.
136
+ - **Each segment now bends under its own load.** Before, only what a segment carried loaded it, so a twig of one unit,
137
+ carrying its card at the tip, had zero compliance. A segment's own drag and mass now act at L / 6 from its base.
138
+ Together with the twig layer, this moved the oak's boughs, so `elastic_modulus` was refitted from 3.33e7 to 4.55e7.
139
+ Over 12 seeds, the median primary bough of the oak, bent as one cantilever, is back at its old compliance (ratio
140
+ 0.999). Against their sway before, maple boughs move 1.12x, pine 1.14x and birch 1.04x.
141
+ - **The oak preset**, tuned for its look:
142
+ - Its secondary branches (generator 2) are 1.4x longer, with 12 to a bough where there were 8.
143
+ - Shoot rules run on generators 1, 2 and 4, with `years: 10` and `vigour: 1.3`.
144
+ - The cards are `TriStarCluster` cards of 0.17 x 0.17 m. Each carries a `rosette` of 11 leaflets.
145
+ - **`max_joints`** rose to 16,384, as planned.
146
+
147
+ **Measured, oak at seed 1337, master (6aff5265e) against now:**
148
+
149
+ | | master | now |
150
+ | :--- | ---: | ---: |
151
+ | current shoots | none | 2,158 |
152
+ | cards | 842 | 2,261 |
153
+ | median card length | 0.90 m | 0.17 m (p10 0.14, p90 0.20) |
154
+ | skeleton nodes | 766 | 9,860 |
155
+ | wind joints (1 cm) | 447 | 5,703 |
156
+ | leaf area | 164 m^2 | 93 m^2 |
157
+ | LAI over the crown's top silhouette | 4.0 | 3.2 |
158
+ | side opacity over the silhouette | 0.64 (40.0 m^2) | 0.49 (26.7 m^2) |
159
+ | top opacity | 0.74 (40.8 m^2) | 0.61 (29.3 m^2) |
160
+ | generation, best of 8 | 291 ms | 441 ms |
161
+
162
+ The playground draws the oak at LOD 0 in 82,761 triangles.
163
+
164
+ **Opacity is set by the framework's gaps, not by the leaf.** The crown is more see-through than master's. Each leaf now
165
+ sits on its own twig, and the gaps between boughs show. Raising the leaf does little:
166
+
167
+ | years : vigour | shoots | joints | leaf | LAI | side opacity |
168
+ | :--- | ---: | ---: | ---: | ---: | ---: |
169
+ | 10 : 1.3 (preset) | 2,158 | 5,703 | 93 m^2 | 3.2 | 0.49 |
170
+ | 12 : 1.3 | 3,042 | 8,066 | 129 m^2 | 4.2 | 0.55 |
171
+ | 10 : 1.5 | 4,919 | 10,455 | 202 m^2 | 6.7 | 0.62 |
172
+ | 10 : 1.7 | 9,442 | 15,719 | 372 m^2 | 12.1 | 0.67 |
173
+
174
+ At vigour 1.7, four times the leaf area gives 0.67. A fuller crown is a framework change: more or longer boughs.
175
+
176
+ **Correction (2026-10-26).** The first version of these tables came from a probe whose raster window was a fixed 14 m
177
+ square. It clipped the oak's top view, and master's side view too, whose 0.9 m cards reach past it. With a window
178
+ fitted to the leaves, master's oak reads side 0.64 over 40.0 m^2, top 0.74 over 40.8 m^2, LAI 4.0 (first stated as
179
+ 0.75 over 33.9, 0.83 over 21.9 and 7.5), and the oak with shoots LAI 3.2 (first stated as 5.2, "an oak crown's"). It is
180
+ lower than master's, not equal to a real crown's.
181
+
182
+ **Other presets** keep their cards. They have no `shoot_rules`, so they change only through the new self-load and
183
+ modulus. Joints at seed 1337, master against now: pine 525 to 544, birch 186 to 185, willow 514 to 513, maple 313 to
184
+ 332, spruce 423 to 435, palm 65 to 65, shrub 46 to 54, fern 26 to 24. Their card counts are unchanged.
185
+
186
+ **Specs.**
187
+ - **Demography:** `shoot_demography.spec.js`, 6 specs.
188
+ - **Shoot layer:** `tree_skeleton_grow_shoots.spec.js`, 10 specs:
189
+ - The twig layer and its records.
190
+ - The framework is untouched by the shoot rules.
191
+ - One card per current shoot, anchored on its current unit.
192
+ - A single-unit twig bends.
193
+ - Determinism.
194
+ - Twig against mother radius.
195
+ - Year-old wood against Table 7.
196
+ - Every atlas variant is used.
197
+ - A carrier's young end and its tip against Table 7.
198
+ - **Mutation testing:** 11 mutants, all killed:
199
+ - zone widened;
200
+ - no shedding;
201
+ - no order shortening;
202
+ - no framework avoidance;
203
+ - no plagiotropic knockout;
204
+ - no self-load;
205
+ - leaves along the whole carrier;
206
+ - no carrier thickening;
207
+ - no twig radius floor;
208
+ - no ageing;
209
+ - one maturity for every card.
210
+ - **Existing specs:**
211
+ - `tree_skeleton_grow.spec.js` allows twigs Table 7's slenderness, up to 50, against 26 for the framework.
212
+ - Its interpenetration check skips twig against twig, and twig against its mother within one segment of the
213
+ junction.
214
+ - The density and reach specs moved from the oak to the maple, which still has density-rule cards.
215
+
216
+ **Not done.**
217
+ - Lammas and sylleptic shoots.
218
+ - Shedding of shoots older than `years`.
219
+ - Shoots for the other broadleaf presets. Maple and birch would take the same rules once their own shoot lengths are
220
+ sourced.