@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.
- package/build/bundle-worker-terrain.js +1 -1
- package/package.json +1 -1
- package/src/DUPLICATION_REVIEW_2026_10_24.md +1072 -0
- package/src/core/binary/BitSet.js +1 -1
- package/src/core/binary/FLOAT16_MAX.d.ts +2 -0
- package/src/core/binary/FLOAT16_MAX.d.ts.map +1 -0
- package/src/core/binary/FLOAT16_MAX.js +1 -0
- package/src/core/binary/base58/base58_encode.js +2 -2
- package/src/core/binary/type/TypeBuilder.js +1 -1
- package/src/core/bvh2/bvh3/BVH.js +1 -1
- package/src/core/bvh2/bvh3/ebvh_optimize_treelet.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/ebvh_optimize_treelet.js +7 -3
- package/src/core/bvh2/bvh3/ebvh_update_hierarchy_bounds.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/ebvh_update_hierarchy_bounds.js +5 -1
- package/src/core/bvh2/bvh3/query/compute_tight_near_far_clipping_planes.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/query/compute_tight_near_far_clipping_planes.js +195 -246
- package/src/core/collection/CuckooFilter.js +1 -1
- package/src/core/collection/array/isArrayEqual.d.ts.map +1 -1
- package/src/core/collection/array/isArrayEqual.js +33 -58
- package/src/core/collection/array/typed/array_buffer_hash.d.ts.map +1 -1
- package/src/core/collection/array/typed/array_buffer_hash.js +41 -39
- package/src/core/collection/array/typed/float32_array_hash.js +38 -38
- package/src/core/collection/array/typed/uint16_array_hash.d.ts +2 -1
- package/src/core/collection/array/typed/uint16_array_hash.d.ts.map +1 -1
- package/src/core/collection/array/typed/uint16_array_hash.js +30 -29
- package/src/core/collection/array/typed/uint32_array_hash.d.ts +2 -1
- package/src/core/collection/array/typed/uint32_array_hash.d.ts.map +1 -1
- package/src/core/collection/array/typed/uint32_array_hash.js +21 -20
- package/src/core/collection/array/typed/uint8_array_hash.d.ts +2 -1
- package/src/core/collection/array/typed/uint8_array_hash.d.ts.map +1 -1
- package/src/core/collection/array/typed/uint8_array_hash.js +37 -36
- package/src/core/collection/array/typed/uint_array_for_count.js +2 -2
- package/src/core/collection/list/List.d.ts.map +1 -1
- package/src/core/collection/list/List.js +3 -19
- package/src/core/collection/table/RowFirstTable.d.ts.map +1 -1
- package/src/core/collection/table/RowFirstTable.js +4 -28
- package/src/core/debug/matchers/DescribeAs.d.ts.map +1 -1
- package/src/core/debug/matchers/DescribeAs.js +62 -64
- package/src/core/function/FunctionCompiler.js +4 -4
- package/src/core/function/objectsEqual.d.ts.map +1 -1
- package/src/core/function/objectsEqual.js +3 -2
- package/src/core/geom/2d/bvh/BVH2D.d.ts.map +1 -1
- package/src/core/geom/2d/bvh/BVH2D.js +4 -3
- package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_relaxation.d.ts +5 -2
- package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_relaxation.d.ts.map +1 -1
- package/src/core/geom/2d/convex-hull/convex_hull_fixed_count_2d_relaxation.js +49 -11
- package/src/core/geom/2d/hash-grid/shg_query_elements_circle.d.ts.map +1 -1
- package/src/core/geom/2d/hash-grid/shg_query_elements_circle.js +122 -159
- package/src/core/geom/2d/hash-grid/shg_query_elements_line.d.ts.map +1 -1
- package/src/core/geom/2d/hash-grid/shg_query_elements_line.js +8 -5
- package/src/core/geom/2d/polygon/polygon2_rasterize_coverage.d.ts +18 -0
- package/src/core/geom/2d/polygon/polygon2_rasterize_coverage.d.ts.map +1 -0
- package/src/core/geom/2d/polygon/polygon2_rasterize_coverage.js +97 -0
- package/src/core/geom/2d/r-tree/StaticR2Tree.js +2 -2
- package/src/core/geom/2d/triangle/tri2_rasterize_coverage.d.ts +21 -0
- package/src/core/geom/2d/triangle/tri2_rasterize_coverage.d.ts.map +1 -0
- package/src/core/geom/2d/triangle/tri2_rasterize_coverage.js +54 -0
- package/src/core/geom/3d/aabb/aabb3_build_frustum.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_build_frustum.js +20 -53
- package/src/core/geom/3d/aabb/aabb3_score_boxes_SAH.d.ts +1 -1
- package/src/core/geom/3d/aabb/aabb3_score_boxes_SAH.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_score_boxes_SAH.js +11 -42
- package/src/core/geom/3d/atlas/pack/atlas_pack_charts.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/pack/atlas_pack_charts.js +30 -32
- package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_bff.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_bff.js +1 -5
- package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_lscm.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/param/atlas_chart_parameterize_lscm.js +1 -15
- package/src/core/geom/3d/atlas/segment/atlas_merge_charts.d.ts.map +1 -1
- package/src/core/geom/3d/atlas/segment/atlas_merge_charts.js +105 -116
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_sqr.d.ts.map +1 -1
- package/src/core/geom/3d/line/line3_compute_segment_point_distance_sqr.js +36 -54
- package/src/core/geom/3d/plane/plane3_compute_intersection_objects.d.ts +5 -10
- package/src/core/geom/3d/plane/plane3_compute_intersection_objects.d.ts.map +1 -1
- package/src/core/geom/3d/plane/plane3_compute_intersection_objects.js +20 -82
- package/src/core/geom/3d/plane/plane3_slerp.d.ts.map +1 -1
- package/src/core/geom/3d/plane/plane3_slerp.js +87 -102
- package/src/core/geom/3d/polygon/polygon3_compute_normal.d.ts +12 -0
- package/src/core/geom/3d/polygon/polygon3_compute_normal.d.ts.map +1 -1
- package/src/core/geom/3d/polygon/polygon3_compute_normal.js +107 -60
- package/src/core/geom/3d/ray/ray3_compute_closest_point.d.ts.map +1 -1
- package/src/core/geom/3d/ray/ray3_compute_closest_point.js +37 -43
- package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/ConvexHullShape3D.js +5 -16
- package/src/core/geom/3d/shape/MeshShape3D.js +2 -56
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/TransformedShape3D.js +10 -7
- package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnionShape3D.js +9 -3
- package/src/core/geom/3d/shape/json/shape_to_type.js +2 -2
- package/src/core/geom/3d/sphere/harmonics/SH3_COEFFICIENTS.js +17 -17
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +6 -2
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_carve_outside_surface.js +3 -2
- package/src/core/geom/3d/tetrahedra/tetrahedron_contains_point.d.ts +20 -2
- package/src/core/geom/3d/tetrahedra/tetrahedron_contains_point.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedron_contains_point.js +52 -37
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_face_normals.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_face_normals.js +40 -56
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadrics.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadrics.js +251 -260
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_wedge_attribute_quadrics.js +104 -113
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_resolve_t_junctions.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_resolve_t_junctions.js +227 -238
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_simplify.js +15 -24
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_edge_create.js +31 -115
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_fuse_duplicate_edges.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_fuse_duplicate_edges.js +142 -150
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +151 -194
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_incenter.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_incenter.js +60 -85
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_distance_field.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_boundary_distance_field.js +156 -171
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path.js +8 -44
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path_polyanya.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_face_find_path_polyanya.js +2 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_sample_interior_grid_points.js +3 -2
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_segment_penetrates_surface.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_segment_penetrates_surface.js +128 -133
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_surface_ray_parity.d.ts +8 -14
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_surface_ray_parity.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_surface_ray_parity.js +36 -82
- package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_ray_intersection.js +7 -144
- package/src/core/geom/ConicRay.d.ts.map +1 -1
- package/src/core/geom/ConicRay.js +230 -237
- package/src/core/localization/LocaleDataset.d.ts +6 -0
- package/src/core/localization/LocaleDataset.d.ts.map +1 -1
- package/src/core/localization/LocaleDataset.js +48 -37
- package/src/core/localization/LocalizationEngine.d.ts.map +1 -1
- package/src/core/localization/LocalizationEngine.js +3 -2
- package/src/core/math/lookup/ParameterLookupTable.d.ts.map +1 -1
- package/src/core/math/lookup/ParameterLookupTable.js +3 -1
- package/src/core/math/spline/spline3_hermite_intersection_spline3_hermite_nd.d.ts.map +1 -1
- package/src/core/math/spline/spline3_hermite_intersection_spline3_hermite_nd.js +330 -400
- package/src/core/math/spline/spline3_hermite_nearest_point.d.ts +16 -0
- package/src/core/math/spline/spline3_hermite_nearest_point.d.ts.map +1 -1
- package/src/core/math/spline/spline3_hermite_nearest_point.js +134 -167
- package/src/core/model/DebouncedObservedBoolean.d.ts +1 -2
- package/src/core/model/DebouncedObservedBoolean.d.ts.map +1 -1
- package/src/core/model/DebouncedObservedBoolean.js +1 -1
- package/src/core/model/node-graph/node/NodeInstance.d.ts.map +1 -1
- package/src/core/model/node-graph/node/NodeInstance.js +2 -7
- package/src/core/model/node-graph/node/parameter/NodeParameterDescription.js +1 -1
- package/src/core/model/object/optional_equality.d.ts +3 -3
- package/src/core/model/object/optional_equality.d.ts.map +1 -1
- package/src/core/model/object/optional_equality.js +10 -27
- package/src/core/model/object/write_property.js +1 -1
- package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.js +2 -2
- package/src/core/primitives/strings/string_compute_byte_size.d.ts +3 -3
- package/src/core/primitives/strings/string_compute_byte_size.d.ts.map +1 -1
- package/src/core/primitives/strings/string_compute_byte_size.js +8 -21
- package/src/core/process/executor/ConcurrentExecutor.d.ts.map +1 -1
- package/src/core/process/executor/ConcurrentExecutor.js +14 -2
- package/src/engine/achievements/gateway/StorageAchievementGateway.d.ts +6 -3
- package/src/engine/achievements/gateway/StorageAchievementGateway.d.ts.map +1 -1
- package/src/engine/achievements/gateway/StorageAchievementGateway.js +31 -75
- package/src/engine/asset/loaders/SVGAssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/SVGAssetLoader.js +33 -31
- package/src/engine/control/first-person/math/criticallyDampedSpring.d.ts.map +1 -1
- package/src/engine/control/first-person/math/criticallyDampedSpring.js +3 -14
- package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
- package/src/engine/ecs/EntityComponentDataset.js +4 -1
- package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter.d.ts +0 -2
- package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter.d.ts.map +1 -1
- package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter.js +3 -3
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayer.js +2 -2
- package/src/engine/graphics/sh3/path_tracer/geometry/sort_triangles_by_distance_to_point.js +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_min_indices.js +1 -1
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +2 -1
- package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts.map +1 -1
- package/src/engine/graphics3/prefab/prefab_skin_frame.js +1 -12
- package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts +1 -1
- package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts.map +1 -1
- package/src/engine/grid/grid2transform/GridPosition2TransformSystem.js +141 -137
- package/src/engine/input/ecs/systems/InputControllerSystem.d.ts.map +1 -1
- package/src/engine/input/ecs/systems/InputControllerSystem.js +13 -3
- package/src/engine/input/ecs/systems/InputSystem.d.ts.map +1 -1
- package/src/engine/input/ecs/systems/InputSystem.js +2 -1
- package/src/engine/intelligence/behavior/composite/ParallelBehavior.d.ts +1 -1
- package/src/engine/intelligence/behavior/composite/ParallelBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/composite/ParallelBehavior.js +4 -1
- package/src/engine/intelligence/behavior/decorator/InvertStatusBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/decorator/InvertStatusBehavior.js +3 -1
- package/src/engine/intelligence/behavior/decorator/RepeatBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/decorator/RepeatBehavior.js +3 -1
- package/src/engine/intelligence/behavior/decorator/RepeatBehaviorSerializationAdapter.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/decorator/RepeatBehaviorSerializationAdapter.js +39 -33
- package/src/engine/intelligence/behavior/util/ConditionalBehavior.d.ts +5 -0
- package/src/engine/intelligence/behavior/util/ConditionalBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/util/ConditionalBehavior.js +93 -75
- package/src/engine/intelligence/behavior/util/RotationBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/util/RotationBehavior.js +79 -76
- package/src/engine/intelligence/blackboard/BlackboardStack.d.ts +1 -0
- package/src/engine/intelligence/blackboard/BlackboardStack.d.ts.map +1 -1
- package/src/engine/intelligence/blackboard/BlackboardStack.js +159 -123
- package/src/engine/intelligence/mcts/StateNode.d.ts.map +1 -1
- package/src/engine/intelligence/mcts/StateNode.js +366 -364
- package/src/engine/intelligence/resource/ResourceAllocationSolver.js +1 -1
- package/src/engine/navigation/ecs/components/Path.d.ts.map +1 -1
- package/src/engine/navigation/ecs/components/Path.js +2 -1
- package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts.map +1 -1
- package/src/engine/navigation/ecs/path_following/PathFollowingSystem.js +5 -2
- package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
- package/src/engine/physics/body/SolverBodyState.js +2 -6
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +3 -16
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +2 -16
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts +13 -1
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_build_rows.js +15 -4
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +2 -5
- package/src/engine/physics/inertia/locked_inverse_inertia.d.ts +12 -0
- package/src/engine/physics/inertia/locked_inverse_inertia.d.ts.map +1 -0
- package/src/engine/physics/inertia/locked_inverse_inertia.js +22 -0
- package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_velocity.js +3 -18
- package/src/engine/physics/mls-mpm/MLS_MPM.d.ts +1 -0
- package/src/engine/physics/mls-mpm/MLS_MPM.d.ts.map +1 -1
- package/src/engine/physics/mls-mpm/MLS_MPM.js +5 -4
- package/src/engine/physics/narrowphase/convex_decomposition.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/convex_decomposition.js +7 -16
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
- package/src/engine/physics/vehicle/RaycastVehicle.js +15 -5
- package/src/engine/save/StorageBackedList.d.ts +5 -0
- package/src/engine/save/StorageBackedList.d.ts.map +1 -1
- package/src/engine/save/StorageBackedList.js +161 -144
- package/src/engine/simulation/Ticker.d.ts.map +1 -1
- package/src/engine/simulation/Ticker.js +394 -391
- package/src/engine/sound/simulation/probe/AcousticProbeField.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/AcousticProbeField.js +6 -19
- package/src/engine/sound/simulation/probe/probe_edge_visible.d.ts +15 -0
- package/src/engine/sound/simulation/probe/probe_edge_visible.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/probe_edge_visible.js +59 -41
- package/src/engine/sound/simulation/probe/probe_refine_connectivity.d.ts.map +1 -1
- package/src/engine/sound/simulation/probe/probe_refine_connectivity.js +164 -181
- package/src/engine/sound/simulation/render/FoaProbeReverbRenderer.d.ts.map +1 -1
- package/src/engine/sound/simulation/render/FoaProbeReverbRenderer.js +20 -5
- package/src/format/image/avif/av1/decode/Av1FrameContext.d.ts.map +1 -1
- package/src/format/image/avif/av1/decode/Av1FrameContext.js +3 -10
- package/src/format/image/avif/av1/decode/reconstruct.d.ts +20 -0
- package/src/format/image/avif/av1/decode/reconstruct.d.ts.map +1 -1
- package/src/format/image/avif/av1/decode/reconstruct.js +22 -9
- package/src/format/image/avif/av1/encode/choose_restoration.js +2 -18
- package/src/format/image/avif/av1/encode/quantise.d.ts.map +1 -1
- package/src/format/image/avif/av1/encode/quantise.js +1 -55
- package/src/format/image/avif/av1/filter/loop_restoration.d.ts +9 -0
- package/src/format/image/avif/av1/filter/loop_restoration.d.ts.map +1 -1
- package/src/format/image/avif/av1/filter/loop_restoration.js +1 -1
- package/src/format/texture/basis/transcode/etc1s_to_bc7.js +2 -33
- package/src/format/texture/basis/transcode/fit_endpoints.d.ts +11 -0
- package/src/format/texture/basis/transcode/fit_endpoints.d.ts.map +1 -1
- package/src/format/texture/basis/transcode/fit_endpoints.js +1 -1
- package/src/format/texture/basis/uastc/uastc_decode_block.d.ts.map +1 -1
- package/src/format/texture/basis/uastc/uastc_decode_block.js +2 -19
- package/src/generation/foliage/ANNUAL_SHOOTS_BRIEF_2026_10_25.md +220 -0
- package/src/generation/foliage/CROWN_FILLING_BRIEF_2026_10_26.md +172 -0
- package/src/generation/foliage/FOLIAGE_DESIGN.md +165 -15
- package/src/generation/foliage/LEAF_ARCHITECTURE_BRIEF_2026_10_26.md +158 -0
- package/src/generation/foliage/SHOOT_SYSTEMS_ALL_SPECIES_BRIEF_2026_10_26.md +248 -0
- package/src/generation/foliage/SPEEDTREE_COMPARISON_2026_10_24.md +694 -0
- package/src/generation/foliage/analysis/CrownOpacity.d.ts +118 -0
- package/src/generation/foliage/analysis/CrownOpacity.d.ts.map +1 -0
- package/src/generation/foliage/analysis/CrownOpacity.js +182 -0
- package/src/generation/foliage/analysis/crown_opacity_frames.d.ts +10 -0
- package/src/generation/foliage/analysis/crown_opacity_frames.d.ts.map +1 -0
- package/src/generation/foliage/analysis/crown_opacity_frames.js +132 -0
- package/src/generation/foliage/analysis/crown_opacity_measure.d.ts +51 -0
- package/src/generation/foliage/analysis/crown_opacity_measure.d.ts.map +1 -0
- package/src/generation/foliage/analysis/crown_opacity_measure.js +649 -0
- package/src/generation/foliage/analysis/foliage_measure_leaf_area.d.ts +66 -0
- package/src/generation/foliage/analysis/foliage_measure_leaf_area.d.ts.map +1 -0
- package/src/generation/foliage/analysis/foliage_measure_leaf_area.js +192 -0
- package/src/generation/foliage/analysis/tree_crown_opacity.d.ts +27 -0
- package/src/generation/foliage/analysis/tree_crown_opacity.d.ts.map +1 -0
- package/src/generation/foliage/analysis/tree_crown_opacity.js +58 -0
- package/src/generation/foliage/animation/build_tree_wind_rig.d.ts +3 -2
- package/src/generation/foliage/animation/build_tree_wind_rig.d.ts.map +1 -1
- package/src/generation/foliage/animation/build_tree_wind_rig.js +12 -30
- package/src/generation/foliage/animation/tree_wind_bend_limit.d.ts +12 -0
- package/src/generation/foliage/animation/tree_wind_bend_limit.d.ts.map +1 -0
- package/src/generation/foliage/animation/tree_wind_bend_limit.js +13 -0
- package/src/generation/foliage/asset/TreeAsset.d.ts +5 -0
- package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -1
- package/src/generation/foliage/asset/TreeAsset.js +6 -0
- package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -1
- package/src/generation/foliage/asset/generate_tree.js +23 -6
- package/src/generation/foliage/config/{BranchLevelConfig.d.ts → BranchGeneratorConfig.d.ts} +61 -75
- package/src/generation/foliage/config/BranchGeneratorConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/{BranchLevelConfig.js → BranchGeneratorConfig.js} +83 -126
- package/src/generation/foliage/config/BranchSpawnRule.d.ts +118 -0
- package/src/generation/foliage/config/BranchSpawnRule.d.ts.map +1 -0
- package/src/generation/foliage/config/BranchSpawnRule.js +217 -0
- package/src/generation/foliage/config/FoliageCardType.d.ts +1 -1
- package/src/generation/foliage/config/FoliageCardType.js +2 -2
- package/src/generation/foliage/config/FoliageConfig.d.ts +23 -45
- package/src/generation/foliage/config/FoliageConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/FoliageConfig.js +47 -93
- package/src/generation/foliage/config/FoliageMaterialConfig.d.ts +12 -20
- package/src/generation/foliage/config/FoliageMaterialConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/FoliageMaterialConfig.js +261 -279
- package/src/generation/foliage/config/FoliageSpawnRule.d.ts +77 -0
- package/src/generation/foliage/config/FoliageSpawnRule.d.ts.map +1 -0
- package/src/generation/foliage/config/FoliageSpawnRule.js +135 -0
- package/src/generation/foliage/config/FoliageTileContent.d.ts +9 -0
- package/src/generation/foliage/config/FoliageTileContent.d.ts.map +1 -0
- package/src/generation/foliage/config/FoliageTileContent.js +12 -0
- package/src/generation/foliage/config/LeafApexShape.d.ts +12 -0
- package/src/generation/foliage/config/LeafApexShape.d.ts.map +1 -0
- package/src/generation/foliage/config/LeafApexShape.js +17 -0
- package/src/generation/foliage/config/LeafArchitecture.d.ts +155 -0
- package/src/generation/foliage/config/LeafArchitecture.d.ts.map +1 -0
- package/src/generation/foliage/config/LeafArchitecture.js +288 -0
- package/src/generation/foliage/config/LeafBaseShape.d.ts +14 -0
- package/src/generation/foliage/config/LeafBaseShape.d.ts.map +1 -0
- package/src/generation/foliage/config/LeafBaseShape.js +21 -0
- package/src/generation/foliage/config/LeafLobation.d.ts +10 -0
- package/src/generation/foliage/config/LeafLobation.d.ts.map +1 -0
- package/src/generation/foliage/config/LeafLobation.js +14 -0
- package/src/generation/foliage/config/PhyllotaxisMode.d.ts +11 -0
- package/src/generation/foliage/config/PhyllotaxisMode.d.ts.map +1 -1
- package/src/generation/foliage/config/PhyllotaxisMode.js +36 -0
- package/src/generation/foliage/config/ShootBudZone.d.ts +105 -0
- package/src/generation/foliage/config/ShootBudZone.d.ts.map +1 -0
- package/src/generation/foliage/config/ShootBudZone.js +219 -0
- package/src/generation/foliage/config/ShootGrowthConfig.d.ts +84 -0
- package/src/generation/foliage/config/ShootGrowthConfig.d.ts.map +1 -0
- package/src/generation/foliage/config/ShootGrowthConfig.js +146 -0
- package/src/generation/foliage/config/ShootSystemRule.d.ts +144 -0
- package/src/generation/foliage/config/ShootSystemRule.d.ts.map +1 -0
- package/src/generation/foliage/config/ShootSystemRule.js +316 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts +1 -1
- package/src/generation/foliage/config/TreeLODConfig.js +1 -1
- package/src/generation/foliage/config/TreeSpeciesConfig.d.ts +40 -8
- package/src/generation/foliage/config/TreeSpeciesConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/TreeSpeciesConfig.js +124 -68
- package/src/generation/foliage/config/TreeWindConfig.d.ts +23 -10
- package/src/generation/foliage/config/TreeWindConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/TreeWindConfig.js +34 -25
- package/src/generation/foliage/index.d.ts +19 -2
- package/src/generation/foliage/index.js +63 -44
- package/src/generation/foliage/material/FoliageAtlasCutout.d.ts +59 -0
- package/src/generation/foliage/material/FoliageAtlasCutout.d.ts.map +1 -0
- package/src/generation/foliage/material/FoliageAtlasCutout.js +93 -0
- package/src/generation/foliage/material/compute_foliage_variant_atlas_layout.d.ts +26 -0
- package/src/generation/foliage/material/compute_foliage_variant_atlas_layout.d.ts.map +1 -0
- package/src/generation/foliage/material/compute_foliage_variant_atlas_layout.js +63 -0
- package/src/generation/foliage/material/foliage_atlas_cutout.d.ts +34 -0
- package/src/generation/foliage/material/foliage_atlas_cutout.d.ts.map +1 -0
- package/src/generation/foliage/material/foliage_atlas_cutout.js +174 -0
- package/src/generation/foliage/material/foliage_tile.d.ts +110 -0
- package/src/generation/foliage/material/foliage_tile.d.ts.map +1 -0
- package/src/generation/foliage/material/foliage_tile.js +286 -0
- package/src/generation/foliage/material/leaf_geometry.d.ts +103 -0
- package/src/generation/foliage/material/leaf_geometry.d.ts.map +1 -0
- package/src/generation/foliage/material/leaf_geometry.js +528 -0
- package/src/generation/foliage/material/make_foliage_material.d.ts +13 -33
- package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -1
- package/src/generation/foliage/material/make_foliage_material.js +356 -605
- package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +39 -4
- package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -1
- package/src/generation/foliage/mesh/foliage_collect_attachments.js +637 -569
- package/src/generation/foliage/mesh/interpolate_ring_skin_weights4.d.ts +48 -0
- package/src/generation/foliage/mesh/interpolate_ring_skin_weights4.d.ts.map +1 -0
- package/src/generation/foliage/mesh/interpolate_ring_skin_weights4.js +232 -0
- package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_mesh_build_bark.js +1023 -1049
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +9 -2
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +467 -454
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -1
- package/src/generation/foliage/presets/make_tree_species_preset.js +1648 -870
- package/src/generation/foliage/skeleton/ShootFrameworkHash.d.ts +35 -0
- package/src/generation/foliage/skeleton/ShootFrameworkHash.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/ShootFrameworkHash.js +129 -0
- package/src/generation/foliage/skeleton/ShootGirth.d.ts +51 -0
- package/src/generation/foliage/skeleton/ShootGirth.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/ShootGirth.js +212 -0
- package/src/generation/foliage/skeleton/ShootLightField.d.ts +73 -0
- package/src/generation/foliage/skeleton/ShootLightField.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/ShootLightField.js +197 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +106 -3
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/TreeSkeleton.js +217 -39
- package/src/generation/foliage/skeleton/flare_lobe_phase_offset.d.ts +13 -0
- package/src/generation/foliage/skeleton/flare_lobe_phase_offset.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/flare_lobe_phase_offset.js +16 -0
- package/src/generation/foliage/skeleton/foliage_card_density.d.ts +71 -0
- package/src/generation/foliage/skeleton/foliage_card_density.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/foliage_card_density.js +101 -0
- package/src/generation/foliage/skeleton/foliage_senescence.d.ts +101 -0
- package/src/generation/foliage/skeleton/foliage_senescence.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/foliage_senescence.js +149 -0
- package/src/generation/foliage/skeleton/foliage_unit_cards.d.ts +76 -0
- package/src/generation/foliage/skeleton/foliage_unit_cards.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/foliage_unit_cards.js +95 -0
- package/src/generation/foliage/skeleton/shoot_demography.d.ts +22 -0
- package/src/generation/foliage/skeleton/shoot_demography.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/shoot_demography.js +96 -0
- package/src/generation/foliage/skeleton/shoot_geometry.d.ts +66 -0
- package/src/generation/foliage/skeleton/shoot_geometry.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/shoot_geometry.js +109 -0
- package/src/generation/foliage/skeleton/shoot_systems_simulate.d.ts +166 -0
- package/src/generation/foliage/skeleton/shoot_systems_simulate.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/shoot_systems_simulate.js +588 -0
- package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts +28 -12
- package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.js +137 -102
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts +112 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.js +408 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js +208 -206
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +5 -2
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow.js +2048 -1871
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts +17 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.js +231 -0
- package/src/generation/foliage/skeleton/tree_skeleton_read_joint_motion.d.ts +14 -0
- package/src/generation/foliage/skeleton/tree_skeleton_read_joint_motion.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_read_joint_motion.js +26 -0
- package/src/generation/foliage/skeleton/tree_skeleton_read_joint_parents.d.ts +10 -0
- package/src/generation/foliage/skeleton/tree_skeleton_read_joint_parents.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_read_joint_parents.js +20 -0
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.d.ts.map +1 -1
- package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +4 -1
- package/src/generation/markers/GridCellActionPlaceMarkerGroup.d.ts +1 -0
- package/src/generation/markers/GridCellActionPlaceMarkerGroup.d.ts.map +1 -1
- package/src/generation/markers/GridCellActionPlaceMarkerGroup.js +98 -86
- package/src/shade/SHADER_F16_PROPOSAL_2026_10_24.md +263 -0
- package/src/shade/descriptor/WebGPUExtensionType.d.ts +17 -0
- package/src/shade/descriptor/WebGPUExtensionType.d.ts.map +1 -1
- package/src/shade/descriptor/WebGPUExtensionType.js +31 -1
- package/src/shade/playground/foliage_wind/FoliageRigOverlay.d.ts +37 -0
- package/src/shade/playground/foliage_wind/FoliageRigOverlay.d.ts.map +1 -0
- package/src/shade/playground/foliage_wind/FoliageRigOverlay.js +491 -0
- package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
- package/src/shade/playground/foliage_wind/foliage_world.js +600 -602
- package/src/shade/playground/foliage_wind/index.html +6 -0
- package/src/shade/playground/foliage_wind/main.js +14 -0
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +2 -1
- package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts +2 -1
- package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts.map +1 -1
- package/src/shade/renderer/animation/foliage/FoliageWindJoint.js +2 -1
- package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts.map +1 -1
- package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.js +4 -2
- package/src/shade/renderer/buffer/table/GPUTypedTable.js +1 -1
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +403 -401
- package/src/shade/renderer/camera/OrbitalCameraController.d.ts +1 -62
- package/src/shade/renderer/camera/OrbitalCameraController.d.ts.map +1 -1
- package/src/shade/renderer/camera/OrbitalCameraController.js +1 -374
- package/src/shade/renderer/deferred/indirect/chunk_lpv_2d_cache_sample_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/deferred/indirect/chunk_lpv_2d_cache_sample_irradiance.js +3 -0
- package/src/shade/renderer/deferred/indirect/chunk_lpv_sample_light.d.ts.map +1 -1
- package/src/shade/renderer/deferred/indirect/chunk_lpv_sample_light.js +6 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.js +1 -1
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +2 -2
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
- package/src/shade/renderer/fluid/GPUFluidCascade.js +6 -3
- package/src/shade/renderer/fluid/GPU_FLUID_OCCUPANCY_AND_SOTA_REVIEW_2026_10_26.md +361 -0
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +335 -241
- package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.d.ts.map +1 -1
- package/src/shade/renderer/fluid/coupling/shader_fluid_cascade_ghosts.js +108 -101
- package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_query_select.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_query_select.js +69 -67
- package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts +7 -6
- package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.js +341 -287
- package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +6 -4
- package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/FluidMacPasses.js +427 -400
- package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.d.ts +10 -5
- package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.js +532 -190
- package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.js +231 -237
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts +2 -2
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +282 -245
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.d.ts +1 -3
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.js +139 -109
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_curl.d.ts +6 -6
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_curl.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_curl.js +257 -222
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_divergence.d.ts +8 -7
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_divergence.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_divergence.js +119 -92
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_gradient.d.ts +6 -9
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_gradient.d.ts.map +1 -1
- package/src/shade/renderer/fluid/mac/shader_fluid_mac_gradient.js +229 -181
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +17 -7
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts.map +1 -1
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.js +634 -621
- package/src/shade/renderer/fluid/pressure/shader_fluid_mg_residual_restrict.d.ts +8 -6
- package/src/shade/renderer/fluid/pressure/shader_fluid_mg_residual_restrict.d.ts.map +1 -1
- package/src/shade/renderer/fluid/pressure/shader_fluid_mg_residual_restrict.js +166 -149
- package/src/shade/renderer/fluid/pressure/shader_fluid_mg_smooth.d.ts +8 -6
- package/src/shade/renderer/fluid/pressure/shader_fluid_mg_smooth.d.ts.map +1 -1
- package/src/shade/renderer/fluid/pressure/shader_fluid_mg_smooth.js +219 -183
- package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.d.ts.map +1 -1
- package/src/shade/renderer/fluid/publish/shader_fluid_wind_publish.js +142 -122
- package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +674 -663
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +63 -29
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.js +77 -87
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/meshopt_clusterizer.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/meshopt_clusterizer.js +4 -3
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +11 -11
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +17 -19
- package/src/shade/renderer/global_illumination/lpv/graph_bake_irradiance_lookup_2d.js +4 -4
- package/src/shade/renderer/global_illumination/probe/octahedral/sample/chunk_lpv_mesh_interpolate_radiance_via_atlas.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/sample/chunk_lpv_mesh_interpolate_radiance_via_atlas.js +5 -1
- package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/load_gltf.js +11 -35
- package/src/shade/renderer/loader/usd/load_usd.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/load_usd.js +6 -19
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +199 -193
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +151 -143
- package/src/shade/renderer/postprocess/bloom/chunk_karis_blur4x4_sample.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/bloom/chunk_karis_blur4x4_sample.js +11 -5
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +6 -18
- package/src/shade/renderer/postprocess/gtao/GTAO.js +1 -1
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +3 -5
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +1 -1
- package/src/shade/renderer/postprocess/nss/chunk_nss_luma_derivative.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/chunk_nss_luma_derivative.js +7 -3
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +4 -2
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +4 -1
- package/src/shade/renderer/postprocess/ssr/downsample_karis.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/downsample_karis.js +6 -3
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +4 -3
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +4 -1
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
- package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap.js +35 -39
- package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap_inv.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/chunk_taa_tonemap_inv.js +20 -17
- package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/shader_taa.js +6 -3
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +3 -1
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.js +2 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.js +92 -83
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +1 -1
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/ShaderDescriptor.js +12 -4
- package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/bvh/chunk_bvh_query_aabb_cooperative.js +294 -286
- package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_interpolate_probe_irradiance8.js +5 -5
- package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mesh_interpolate_probe.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mesh_interpolate_probe.js +5 -3
- package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mesh_interpolate_probe_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_mesh_interpolate_probe_irradiance.js +9 -6
- package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_sample_sh3_at.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/lpv/chunk_lpv_sample_sh3_at.js +33 -38
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +690 -675
- package/src/shade/renderer/shader/type/WebGPUArray.d.ts +3 -0
- package/src/shade/renderer/shader/type/WebGPUArray.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/WebGPUArray.js +185 -167
- package/src/shade/renderer/shader/type/WebGPUStruct.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/WebGPUStruct.js +461 -455
- package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.js +335 -211
- package/src/shade/renderer/shader/type/serde/write_gpu_typed_buffer.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/serde/write_gpu_typed_buffer.js +329 -221
- package/src/shade/renderer/shader/type/type_has_f16.d.ts +12 -0
- package/src/shade/renderer/shader/type/type_has_f16.d.ts.map +1 -0
- package/src/shade/renderer/shader/type/type_has_f16.js +66 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +16 -2
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +5 -2
- package/src/shade/renderer/water/shader_water_avboit.js +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +260 -23
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts +6 -7
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +269 -69
- package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
- package/src/shade/wgsl/validate_wgsl_source.js +27 -1
- package/src/view/controller/controls/ListController.d.ts.map +1 -1
- package/src/view/controller/controls/ListController.js +118 -113
- package/src/view/controller/controls/Vector1Control.js +97 -97
- package/src/view/elements/image/SvgImageView.d.ts +1 -0
- package/src/view/elements/image/SvgImageView.d.ts.map +1 -1
- package/src/view/elements/image/SvgImageView.js +92 -90
- package/src/view/minimap/dom/MinimapTerrainView.d.ts +1 -0
- package/src/view/minimap/dom/MinimapTerrainView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapTerrainView.js +151 -147
- package/src/view/tooltip/gml/TooltipParser.js +2 -2
- package/src/engine/network/PriorityFetch.d.ts +0 -59
- package/src/engine/network/PriorityFetch.d.ts.map +0 -1
- package/src/engine/network/PriorityFetch.js +0 -193
- package/src/generation/foliage/config/BranchLevelConfig.d.ts.map +0 -1
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* One branch generator of a tree: how a branch it grows is shaped (spine, taper, tropisms, bark relief,
|
|
3
|
+
* collar, splitting). Where and how many of its branches attach to a parent is described by the
|
|
4
|
+
* `BranchSpawnRule`s that target it, see `TreeSpeciesConfig.branch_rules`.
|
|
4
5
|
*/
|
|
5
|
-
export class
|
|
6
|
+
export class BranchGeneratorConfig {
|
|
6
7
|
/**
|
|
7
|
-
* @param {Partial<
|
|
8
|
-
* @returns {
|
|
8
|
+
* @param {Partial<BranchGeneratorConfig>} [options]
|
|
9
|
+
* @returns {BranchGeneratorConfig}
|
|
9
10
|
*/
|
|
10
|
-
static from(options?: Partial<
|
|
11
|
-
/**
|
|
12
|
-
* Recursion level index (0 = trunk).
|
|
13
|
-
* @type {number}
|
|
14
|
-
*/
|
|
15
|
-
level: number;
|
|
11
|
+
static from(options?: Partial<BranchGeneratorConfig>): BranchGeneratorConfig;
|
|
16
12
|
/**
|
|
17
13
|
* Number of longitudinal Cubic Hermite segments along the spine.
|
|
18
14
|
* @type {number}
|
|
@@ -29,7 +25,7 @@ export class BranchLevelConfig {
|
|
|
29
25
|
*/
|
|
30
26
|
radial_segments_min: number;
|
|
31
27
|
/**
|
|
32
|
-
* Nominal length
|
|
28
|
+
* Nominal length in meters (scaled per child by the spawning rule's `length_profile`).
|
|
33
29
|
* @type {number}
|
|
34
30
|
*/
|
|
35
31
|
length: number;
|
|
@@ -38,11 +34,6 @@ export class BranchLevelConfig {
|
|
|
38
34
|
* @type {number}
|
|
39
35
|
*/
|
|
40
36
|
length_variance: number;
|
|
41
|
-
/**
|
|
42
|
-
* 1D Hermite curve scaling child length along parent normalized position t in [0, 1].
|
|
43
|
-
* @type {AnimationCurve}
|
|
44
|
-
*/
|
|
45
|
-
length_profile: AnimationCurve;
|
|
46
37
|
/**
|
|
47
38
|
* Base radius as a fraction of branch length.
|
|
48
39
|
* @type {number}
|
|
@@ -58,47 +49,6 @@ export class BranchLevelConfig {
|
|
|
58
49
|
* @type {AnimationCurve}
|
|
59
50
|
*/
|
|
60
51
|
radius_profile: AnimationCurve;
|
|
61
|
-
/**
|
|
62
|
-
* Fraction [0, 0.95] at the base of this branch where no child branches spawn.
|
|
63
|
-
* @type {number}
|
|
64
|
-
*/
|
|
65
|
-
bare_length_ratio: number;
|
|
66
|
-
/**
|
|
67
|
-
* Number of lateral child branch nodes spawned by a branch at this level into (level + 1).
|
|
68
|
-
* @type {number}
|
|
69
|
-
*/
|
|
70
|
-
child_count: number;
|
|
71
|
-
/**
|
|
72
|
-
* Phyllotactic arrangement for children spawned along this branch.
|
|
73
|
-
* @type {PhyllotaxisMode|number}
|
|
74
|
-
*/
|
|
75
|
-
phyllotaxis_mode: PhyllotaxisMode | number;
|
|
76
|
-
/**
|
|
77
|
-
* Number of branches per whorl when `phyllotaxis_mode === PhyllotaxisMode.Whorled`.
|
|
78
|
-
* @type {number}
|
|
79
|
-
*/
|
|
80
|
-
whorl_count: number;
|
|
81
|
-
/**
|
|
82
|
-
* Random azimuthal jitter in radians.
|
|
83
|
-
* @type {number}
|
|
84
|
-
*/
|
|
85
|
-
azimuth_jitter: number;
|
|
86
|
-
/**
|
|
87
|
-
* Axillary insertion (polar divergence) angle in radians from parent tangent.
|
|
88
|
-
* @type {number}
|
|
89
|
-
*/
|
|
90
|
-
insertion_angle: number;
|
|
91
|
-
/**
|
|
92
|
-
* Random variation in insertion angle (radians).
|
|
93
|
-
* @type {number}
|
|
94
|
-
*/
|
|
95
|
-
insertion_angle_variation: number;
|
|
96
|
-
/**
|
|
97
|
-
* 1D Hermite curve scaling insertion angle along parent normalized position t in [0, 1].
|
|
98
|
-
* Typically wider at bottom of crown (1.0) and steeper near apex (0.6).
|
|
99
|
-
* @type {AnimationCurve}
|
|
100
|
-
*/
|
|
101
|
-
insertion_angle_profile: AnimationCurve;
|
|
102
52
|
/**
|
|
103
53
|
* Cumulative intrinsic pitch curvature (radians) along the spine.
|
|
104
54
|
* @type {number}
|
|
@@ -229,6 +179,29 @@ export class BranchLevelConfig {
|
|
|
229
179
|
* @type {number}
|
|
230
180
|
*/
|
|
231
181
|
tip_upcurl: number;
|
|
182
|
+
/**
|
|
183
|
+
* Plagiotropism [0, 1]: how dorsiventral this generator's shoots are. A plagiotropic shoot grows in the horizontal
|
|
184
|
+
* plane and bears its buds in it: its spine is pulled towards horizontal, its children's buds are fanned into the
|
|
185
|
+
* plane spanned by its tangent and the horizontal across it, and no bud is emitted into the downward cone of
|
|
186
|
+
* half-angle `plagiotropism * pi / 2`: a bud on its underside does not break, nor one that fanning or a turn for
|
|
187
|
+
* clearance would carry into the cone (contact with a neighbour can still deflect a child afterwards).
|
|
188
|
+
* Set it by the species' architectural model: the branches of Massart's model (fir, spruce) and Troll's (beech, lime,
|
|
189
|
+
* elm) are plagiotropic; those of Rauh's model (pine, maple, oak, birch) are orthotropic, built like the trunk, and
|
|
190
|
+
* take 0. Only lateral (non-trunk) shoots are plagiotropic; a vertical parent has no horizontal plane to fan its buds
|
|
191
|
+
* into.
|
|
192
|
+
*
|
|
193
|
+
* Models: Hallé, Oldeman & Tomlinson (1978), *Tropical Trees and Forests*. Species per model: Pfisterer (2000),
|
|
194
|
+
* *Mitt. Biol. Bundesanst. Land- Forstwirtsch.* 370; Millet, Bouchard & Édelin (1999), *Écoscience* 6: 187–203.
|
|
195
|
+
* @type {number}
|
|
196
|
+
*/
|
|
197
|
+
plagiotropism: number;
|
|
198
|
+
/**
|
|
199
|
+
* Straightness [0, 1]: pull of the growing tip back towards the heading its bud left the parent with (for the fork
|
|
200
|
+
* that continues a split, the heading the split gave it), so a strongly gnarled branch still arrives near where it
|
|
201
|
+
* was aimed. It resists every deviation from that heading, droop and curl included.
|
|
202
|
+
* @type {number}
|
|
203
|
+
*/
|
|
204
|
+
straightness: number;
|
|
232
205
|
/**
|
|
233
206
|
* Biomechanical reaction-wood cross-sectional ovalization on inclined boughs [0, 0.5].
|
|
234
207
|
* @type {number}
|
|
@@ -240,39 +213,53 @@ export class BranchLevelConfig {
|
|
|
240
213
|
*/
|
|
241
214
|
bark_displacement: number;
|
|
242
215
|
/**
|
|
243
|
-
* Swelling collar boss amplitude on this parent stem around attached child branches.
|
|
216
|
+
* Swelling collar boss amplitude on this parent stem around attached child branches. The collar outlives a shed
|
|
217
|
+
* branch: it is the healed callus rim around the scar left where the branch grew (see `self_pruning`).
|
|
244
218
|
* @type {number}
|
|
245
219
|
*/
|
|
246
220
|
parent_collar_bulge: number;
|
|
247
221
|
/**
|
|
248
|
-
*
|
|
249
|
-
*
|
|
222
|
+
* Excurrent (monopodial) stem habit: a single dominant plumb leader with tight lateral drift and no apical
|
|
223
|
+
* relaxation, as in conifers. Only meaningful on the trunk generator.
|
|
224
|
+
* @type {boolean}
|
|
225
|
+
*/
|
|
226
|
+
excurrent: boolean;
|
|
227
|
+
/**
|
|
228
|
+
* Structural surface root: the branch creeps along the ground plane `y = 0`, sinking from fully exposed at
|
|
229
|
+
* the stem until it is buried about halfway out,
|
|
230
|
+
* adds no pipe-model area to its parent and is never given a wind joint. Its spawning rule should
|
|
231
|
+
* set `crown_envelope: false`.
|
|
232
|
+
* @type {boolean}
|
|
250
233
|
*/
|
|
251
|
-
|
|
234
|
+
root: boolean;
|
|
252
235
|
/**
|
|
253
|
-
*
|
|
236
|
+
* Self-pruning [0, 1]: how readily this generator's branches are shed once the crown rises above them and they
|
|
237
|
+
* die in its shade. `1` = dead branches drop at the collar and are grown over, leaving no stub. Below that, a
|
|
238
|
+
* dead branch keeps `(1 - self_pruning) - age` of its length, `age` running from 0 just below the living
|
|
239
|
+
* branches to 1 at the stem's base; what no longer clears the bark has been grown over. Good self-pruners
|
|
240
|
+
* (birch, beech) sit near 1, poor ones that keep a skirt of dead branches (spruce) near 0.
|
|
254
241
|
* @type {number}
|
|
255
242
|
*/
|
|
256
|
-
|
|
243
|
+
self_pruning: number;
|
|
257
244
|
/**
|
|
258
|
-
* @param {Partial<
|
|
245
|
+
* @param {Partial<BranchGeneratorConfig>} [overrides]
|
|
259
246
|
* @returns {this}
|
|
260
247
|
*/
|
|
261
|
-
applyOverrides(overrides?: Partial<
|
|
248
|
+
applyOverrides(overrides?: Partial<BranchGeneratorConfig>): this;
|
|
262
249
|
/**
|
|
263
|
-
* @param {
|
|
250
|
+
* @param {BranchGeneratorConfig} other
|
|
264
251
|
* @returns {this}
|
|
265
252
|
*/
|
|
266
|
-
copy(other:
|
|
253
|
+
copy(other: BranchGeneratorConfig): this;
|
|
267
254
|
/**
|
|
268
|
-
* @returns {
|
|
255
|
+
* @returns {BranchGeneratorConfig}
|
|
269
256
|
*/
|
|
270
|
-
clone():
|
|
257
|
+
clone(): BranchGeneratorConfig;
|
|
271
258
|
/**
|
|
272
|
-
* @param {
|
|
259
|
+
* @param {BranchGeneratorConfig} other
|
|
273
260
|
* @returns {boolean}
|
|
274
261
|
*/
|
|
275
|
-
equals(other:
|
|
262
|
+
equals(other: BranchGeneratorConfig): boolean;
|
|
276
263
|
/**
|
|
277
264
|
* @returns {number}
|
|
278
265
|
*/
|
|
@@ -281,8 +268,7 @@ export class BranchLevelConfig {
|
|
|
281
268
|
* @readonly
|
|
282
269
|
* @type {boolean}
|
|
283
270
|
*/
|
|
284
|
-
readonly
|
|
271
|
+
readonly isBranchGeneratorConfig: boolean;
|
|
285
272
|
}
|
|
286
273
|
import { AnimationCurve } from "../../../engine/animation/curve/AnimationCurve.js";
|
|
287
|
-
|
|
288
|
-
//# sourceMappingURL=BranchLevelConfig.d.ts.map
|
|
274
|
+
//# sourceMappingURL=BranchGeneratorConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BranchGeneratorConfig.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/config/BranchGeneratorConfig.js"],"names":[],"mappings":"AAMA;;;;GAIG;AACH;IAmRI;;;OAGG;IACH,sBAHW,QAAQ,qBAAqB,CAAC,GAC5B,qBAAqB,CAMjC;IA1RD;;;OAGG;IACH,UAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,qBAFU,MAAM,CAES;IAEzB;;;OAGG;IACH,qBAFU,MAAM,CAEQ;IAExB;;;OAGG;IACH,QAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,iBAFU,MAAM,CAEM;IAEtB;;;OAGG;IACH,cAFU,MAAM,CAEI;IAEpB;;;OAGG;IACH,OAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,gBAFU,cAAc,CAE8B;IAEtD;;;OAGG;IACH,WAFU,MAAM,CAEC;IAEjB;;;OAGG;IACH,YAFU,MAAM,CAEC;IAEjB;;;OAGG;IACH,cAFU,MAAM,CAEG;IAEnB;;;OAGG;IACH,cAFU,MAAM,CAEI;IAEpB;;;OAGG;IACH,cAFU,MAAM,CAEI;IAEpB;;;OAGG;IACH,gBAFU,MAAM,CAEM;IAEtB;;;OAGG;IACH,iBAFU,MAAM,CAEO;IAEvB;;;OAGG;IACH,mBAFU,MAAM,CAEQ;IAExB;;;OAGG;IACH,aAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,aAFU,MAAM,CAEG;IAEnB;;;OAGG;IACH,iBAFU,MAAM,CAEM;IAEtB;;;OAGG;IACH,oBAFU,MAAM,CAEU;IAE1B;;;OAGG;IACH,aAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,iBAFU,MAAM,CAEM;IAEtB;;;OAGG;IACH,iBAFU,MAAM,CAEM;IAEtB;;;OAGG;IACH,iBAFU,MAAM,CAEI;IAEpB;;;OAGG;IACH,mBAFU,MAAM,CAEM;IAEtB;;;OAGG;IACH,qBAFU,MAAM,CAEW;IAE3B;;;OAGG;IACH,qBAFU,MAAM,CAEW;IAE3B;;;OAGG;IACH,qBAFU,MAAM,CAEW;IAE3B;;;OAGG;IACH,qBAFU,MAAM,CAEW;IAE3B;;;OAGG;IACH,YAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,qBAFU,MAAM,CAEW;IAE3B;;;OAGG;IACH,kBAFU,MAAM,CAEQ;IAExB;;;OAGG;IACH,gBAFU,MAAM,CAEM;IAEtB;;;OAGG;IACH,YAFU,MAAM,CAEE;IAElB;;;;;;;;;;;;;;OAcG;IACH,eAFU,MAAM,CAEI;IAEpB;;;;;OAKG;IACH,cAFU,MAAM,CAEG;IAEnB;;;OAGG;IACH,mBAFU,MAAM,CAES;IAEzB;;;OAGG;IACH,mBAFU,MAAM,CAES;IAEzB;;;;OAIG;IACH,qBAFU,MAAM,CAEW;IAE3B;;;;OAIG;IACH,WAFU,OAAO,CAEC;IAElB;;;;;;OAMG;IACH,MAFU,OAAO,CAEJ;IAEb;;;;;;;OAOG;IACH,cAFU,MAAM,CAEG;IAYnB;;;OAGG;IACH,2BAHW,QAAQ,qBAAqB,CAAC,GAC5B,IAAI,CAoDhB;IAED;;;OAGG;IACH,YAHW,qBAAqB,GACnB,IAAI,CA+ChB;IAED;;OAEG;IACH,SAFa,qBAAqB,CAMjC;IAED;;;OAGG;IACH,cAHW,qBAAqB,GACnB,OAAO,CA+CnB;IAED;;OAEG;IACH,QAFa,MAAM,CAqBlB;IAGL;;;OAGG;IACH,kCAFU,OAAO,CAEsC;CANtD;+BAle8B,mDAAmD"}
|
|
@@ -1,20 +1,15 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { clamp } from "../../../core/math/clamp.js";
|
|
2
3
|
import { hash_mix2 } from "../../../core/math/hash/hash_mix2.js";
|
|
3
4
|
import { computeHashFloat } from "../../../core/primitives/numbers/computeHashFloat.js";
|
|
4
5
|
import { AnimationCurve } from "../../../engine/animation/curve/AnimationCurve.js";
|
|
5
|
-
import { PhyllotaxisMode } from "./PhyllotaxisMode.js";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* One branch generator of a tree: how a branch it grows is shaped (spine, taper, tropisms, bark relief,
|
|
9
|
+
* collar, splitting). Where and how many of its branches attach to a parent is described by the
|
|
10
|
+
* `BranchSpawnRule`s that target it, see `TreeSpeciesConfig.branch_rules`.
|
|
10
11
|
*/
|
|
11
|
-
export class
|
|
12
|
-
/**
|
|
13
|
-
* Recursion level index (0 = trunk).
|
|
14
|
-
* @type {number}
|
|
15
|
-
*/
|
|
16
|
-
level = 0;
|
|
17
|
-
|
|
12
|
+
export class BranchGeneratorConfig {
|
|
18
13
|
/**
|
|
19
14
|
* Number of longitudinal Cubic Hermite segments along the spine.
|
|
20
15
|
* @type {number}
|
|
@@ -34,7 +29,7 @@ export class BranchLevelConfig {
|
|
|
34
29
|
radial_segments_min = 4;
|
|
35
30
|
|
|
36
31
|
/**
|
|
37
|
-
* Nominal length
|
|
32
|
+
* Nominal length in meters (scaled per child by the spawning rule's `length_profile`).
|
|
38
33
|
* @type {number}
|
|
39
34
|
*/
|
|
40
35
|
length = 8.0;
|
|
@@ -45,12 +40,6 @@ export class BranchLevelConfig {
|
|
|
45
40
|
*/
|
|
46
41
|
length_variance = 0.1;
|
|
47
42
|
|
|
48
|
-
/**
|
|
49
|
-
* 1D Hermite curve scaling child length along parent normalized position t in [0, 1].
|
|
50
|
-
* @type {AnimationCurve}
|
|
51
|
-
*/
|
|
52
|
-
length_profile = AnimationCurve.constant(0, 1, 1);
|
|
53
|
-
|
|
54
43
|
/**
|
|
55
44
|
* Base radius as a fraction of branch length.
|
|
56
45
|
* @type {number}
|
|
@@ -69,55 +58,6 @@ export class BranchLevelConfig {
|
|
|
69
58
|
*/
|
|
70
59
|
radius_profile = AnimationCurve.linear(0, 1, 1, 0.15);
|
|
71
60
|
|
|
72
|
-
/**
|
|
73
|
-
* Fraction [0, 0.95] at the base of this branch where no child branches spawn.
|
|
74
|
-
* @type {number}
|
|
75
|
-
*/
|
|
76
|
-
bare_length_ratio = 0.25;
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Number of lateral child branch nodes spawned by a branch at this level into (level + 1).
|
|
80
|
-
* @type {number}
|
|
81
|
-
*/
|
|
82
|
-
child_count = 10;
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Phyllotactic arrangement for children spawned along this branch.
|
|
86
|
-
* @type {PhyllotaxisMode|number}
|
|
87
|
-
*/
|
|
88
|
-
phyllotaxis_mode = PhyllotaxisMode.SpiralGolden;
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Number of branches per whorl when `phyllotaxis_mode === PhyllotaxisMode.Whorled`.
|
|
92
|
-
* @type {number}
|
|
93
|
-
*/
|
|
94
|
-
whorl_count = 3;
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Random azimuthal jitter in radians.
|
|
98
|
-
* @type {number}
|
|
99
|
-
*/
|
|
100
|
-
azimuth_jitter = 0.15;
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Axillary insertion (polar divergence) angle in radians from parent tangent.
|
|
104
|
-
* @type {number}
|
|
105
|
-
*/
|
|
106
|
-
insertion_angle = 0.72;
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Random variation in insertion angle (radians).
|
|
110
|
-
* @type {number}
|
|
111
|
-
*/
|
|
112
|
-
insertion_angle_variation = 0.12;
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* 1D Hermite curve scaling insertion angle along parent normalized position t in [0, 1].
|
|
116
|
-
* Typically wider at bottom of crown (1.0) and steeper near apex (0.6).
|
|
117
|
-
* @type {AnimationCurve}
|
|
118
|
-
*/
|
|
119
|
-
insertion_angle_profile = AnimationCurve.linear(0, 1.0, 1, 0.65);
|
|
120
|
-
|
|
121
61
|
/**
|
|
122
62
|
* Cumulative intrinsic pitch curvature (radians) along the spine.
|
|
123
63
|
* @type {number}
|
|
@@ -274,6 +214,31 @@ export class BranchLevelConfig {
|
|
|
274
214
|
*/
|
|
275
215
|
tip_upcurl = 0.18;
|
|
276
216
|
|
|
217
|
+
/**
|
|
218
|
+
* Plagiotropism [0, 1]: how dorsiventral this generator's shoots are. A plagiotropic shoot grows in the horizontal
|
|
219
|
+
* plane and bears its buds in it: its spine is pulled towards horizontal, its children's buds are fanned into the
|
|
220
|
+
* plane spanned by its tangent and the horizontal across it, and no bud is emitted into the downward cone of
|
|
221
|
+
* half-angle `plagiotropism * pi / 2`: a bud on its underside does not break, nor one that fanning or a turn for
|
|
222
|
+
* clearance would carry into the cone (contact with a neighbour can still deflect a child afterwards).
|
|
223
|
+
* Set it by the species' architectural model: the branches of Massart's model (fir, spruce) and Troll's (beech, lime,
|
|
224
|
+
* elm) are plagiotropic; those of Rauh's model (pine, maple, oak, birch) are orthotropic, built like the trunk, and
|
|
225
|
+
* take 0. Only lateral (non-trunk) shoots are plagiotropic; a vertical parent has no horizontal plane to fan its buds
|
|
226
|
+
* into.
|
|
227
|
+
*
|
|
228
|
+
* Models: Hallé, Oldeman & Tomlinson (1978), *Tropical Trees and Forests*. Species per model: Pfisterer (2000),
|
|
229
|
+
* *Mitt. Biol. Bundesanst. Land- Forstwirtsch.* 370; Millet, Bouchard & Édelin (1999), *Écoscience* 6: 187–203.
|
|
230
|
+
* @type {number}
|
|
231
|
+
*/
|
|
232
|
+
plagiotropism = 0.0;
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Straightness [0, 1]: pull of the growing tip back towards the heading its bud left the parent with (for the fork
|
|
236
|
+
* that continues a split, the heading the split gave it), so a strongly gnarled branch still arrives near where it
|
|
237
|
+
* was aimed. It resists every deviation from that heading, droop and curl included.
|
|
238
|
+
* @type {number}
|
|
239
|
+
*/
|
|
240
|
+
straightness = 0.0;
|
|
241
|
+
|
|
277
242
|
/**
|
|
278
243
|
* Biomechanical reaction-wood cross-sectional ovalization on inclined boughs [0, 0.5].
|
|
279
244
|
* @type {number}
|
|
@@ -287,42 +252,56 @@ export class BranchLevelConfig {
|
|
|
287
252
|
bark_displacement = 0.08;
|
|
288
253
|
|
|
289
254
|
/**
|
|
290
|
-
* Swelling collar boss amplitude on this parent stem around attached child branches.
|
|
255
|
+
* Swelling collar boss amplitude on this parent stem around attached child branches. The collar outlives a shed
|
|
256
|
+
* branch: it is the healed callus rim around the scar left where the branch grew (see `self_pruning`).
|
|
291
257
|
* @type {number}
|
|
292
258
|
*/
|
|
293
259
|
parent_collar_bulge = 0.28;
|
|
294
260
|
|
|
295
261
|
/**
|
|
296
|
-
*
|
|
297
|
-
*
|
|
262
|
+
* Excurrent (monopodial) stem habit: a single dominant plumb leader with tight lateral drift and no apical
|
|
263
|
+
* relaxation, as in conifers. Only meaningful on the trunk generator.
|
|
264
|
+
* @type {boolean}
|
|
265
|
+
*/
|
|
266
|
+
excurrent = false;
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Structural surface root: the branch creeps along the ground plane `y = 0`, sinking from fully exposed at
|
|
270
|
+
* the stem until it is buried about halfway out,
|
|
271
|
+
* adds no pipe-model area to its parent and is never given a wind joint. Its spawning rule should
|
|
272
|
+
* set `crown_envelope: false`.
|
|
273
|
+
* @type {boolean}
|
|
298
274
|
*/
|
|
299
|
-
|
|
275
|
+
root = false;
|
|
300
276
|
|
|
301
277
|
/**
|
|
302
|
-
*
|
|
278
|
+
* Self-pruning [0, 1]: how readily this generator's branches are shed once the crown rises above them and they
|
|
279
|
+
* die in its shade. `1` = dead branches drop at the collar and are grown over, leaving no stub. Below that, a
|
|
280
|
+
* dead branch keeps `(1 - self_pruning) - age` of its length, `age` running from 0 just below the living
|
|
281
|
+
* branches to 1 at the stem's base; what no longer clears the bark has been grown over. Good self-pruners
|
|
282
|
+
* (birch, beech) sit near 1, poor ones that keep a skirt of dead branches (spruce) near 0.
|
|
303
283
|
* @type {number}
|
|
304
284
|
*/
|
|
305
|
-
|
|
285
|
+
self_pruning = 1.0;
|
|
306
286
|
|
|
307
287
|
/**
|
|
308
|
-
* @param {Partial<
|
|
309
|
-
* @returns {
|
|
288
|
+
* @param {Partial<BranchGeneratorConfig>} [options]
|
|
289
|
+
* @returns {BranchGeneratorConfig}
|
|
310
290
|
*/
|
|
311
291
|
static from(options = {}) {
|
|
312
|
-
const r = new
|
|
292
|
+
const r = new BranchGeneratorConfig();
|
|
313
293
|
r.applyOverrides(options);
|
|
314
294
|
return r;
|
|
315
295
|
}
|
|
316
296
|
|
|
317
297
|
/**
|
|
318
|
-
* @param {Partial<
|
|
298
|
+
* @param {Partial<BranchGeneratorConfig>} [overrides]
|
|
319
299
|
* @returns {this}
|
|
320
300
|
*/
|
|
321
301
|
applyOverrides(overrides = {}) {
|
|
322
302
|
if (overrides === null || overrides === undefined) {
|
|
323
303
|
return this;
|
|
324
304
|
}
|
|
325
|
-
if (overrides.level !== undefined) this.level = overrides.level;
|
|
326
305
|
if (overrides.segments !== undefined) this.segments = Math.max(1, overrides.segments | 0);
|
|
327
306
|
if (overrides.radial_segments_max !== undefined) this.radial_segments_max = Math.max(3, overrides.radial_segments_max | 0);
|
|
328
307
|
if (overrides.radial_segments_min !== undefined) this.radial_segments_min = Math.max(3, overrides.radial_segments_min | 0);
|
|
@@ -331,18 +310,9 @@ export class BranchLevelConfig {
|
|
|
331
310
|
}
|
|
332
311
|
if (overrides.length !== undefined) this.length = overrides.length;
|
|
333
312
|
if (overrides.length_variance !== undefined) this.length_variance = overrides.length_variance;
|
|
334
|
-
if (overrides.length_profile !== undefined) this.length_profile.copy(overrides.length_profile);
|
|
335
313
|
if (overrides.radius_ratio !== undefined) this.radius_ratio = overrides.radius_ratio;
|
|
336
314
|
if (overrides.taper !== undefined) this.taper = overrides.taper;
|
|
337
315
|
if (overrides.radius_profile !== undefined) this.radius_profile.copy(overrides.radius_profile);
|
|
338
|
-
if (overrides.bare_length_ratio !== undefined) this.bare_length_ratio = overrides.bare_length_ratio;
|
|
339
|
-
if (overrides.child_count !== undefined) this.child_count = Math.max(0, overrides.child_count | 0);
|
|
340
|
-
if (overrides.phyllotaxis_mode !== undefined) this.phyllotaxis_mode = overrides.phyllotaxis_mode;
|
|
341
|
-
if (overrides.whorl_count !== undefined) this.whorl_count = Math.max(1, overrides.whorl_count | 0);
|
|
342
|
-
if (overrides.azimuth_jitter !== undefined) this.azimuth_jitter = overrides.azimuth_jitter;
|
|
343
|
-
if (overrides.insertion_angle !== undefined) this.insertion_angle = overrides.insertion_angle;
|
|
344
|
-
if (overrides.insertion_angle_variation !== undefined) this.insertion_angle_variation = overrides.insertion_angle_variation;
|
|
345
|
-
if (overrides.insertion_angle_profile !== undefined) this.insertion_angle_profile.copy(overrides.insertion_angle_profile);
|
|
346
316
|
if (overrides.curvature !== undefined) this.curvature = overrides.curvature;
|
|
347
317
|
if (overrides.curve_back !== undefined) this.curve_back = overrides.curve_back;
|
|
348
318
|
if (overrides.spiral_twist !== undefined) this.spiral_twist = overrides.spiral_twist;
|
|
@@ -369,38 +339,31 @@ export class BranchLevelConfig {
|
|
|
369
339
|
if (overrides.internode_zigzag !== undefined) this.internode_zigzag = overrides.internode_zigzag;
|
|
370
340
|
if (overrides.kink_sharpness !== undefined) this.kink_sharpness = overrides.kink_sharpness;
|
|
371
341
|
if (overrides.tip_upcurl !== undefined) this.tip_upcurl = overrides.tip_upcurl;
|
|
342
|
+
if (overrides.plagiotropism !== undefined) this.plagiotropism = clamp(overrides.plagiotropism, 0.0, 1.0);
|
|
343
|
+
if (overrides.straightness !== undefined) this.straightness = clamp(overrides.straightness, 0.0, 1.0);
|
|
372
344
|
if (overrides.oval_eccentricity !== undefined) this.oval_eccentricity = overrides.oval_eccentricity;
|
|
373
345
|
if (overrides.bark_displacement !== undefined) this.bark_displacement = overrides.bark_displacement;
|
|
374
346
|
if (overrides.parent_collar_bulge !== undefined) this.parent_collar_bulge = overrides.parent_collar_bulge;
|
|
375
|
-
if (overrides.
|
|
376
|
-
if (overrides.
|
|
347
|
+
if (overrides.excurrent !== undefined) this.excurrent = Boolean(overrides.excurrent);
|
|
348
|
+
if (overrides.root !== undefined) this.root = Boolean(overrides.root);
|
|
349
|
+
if (overrides.self_pruning !== undefined) this.self_pruning = clamp(overrides.self_pruning, 0.0, 1.0);
|
|
377
350
|
return this;
|
|
378
351
|
}
|
|
379
352
|
|
|
380
353
|
/**
|
|
381
|
-
* @param {
|
|
354
|
+
* @param {BranchGeneratorConfig} other
|
|
382
355
|
* @returns {this}
|
|
383
356
|
*/
|
|
384
357
|
copy(other) {
|
|
385
358
|
assert.defined(other, 'other');
|
|
386
|
-
this.level = other.level;
|
|
387
359
|
this.segments = other.segments;
|
|
388
360
|
this.radial_segments_max = other.radial_segments_max;
|
|
389
361
|
this.radial_segments_min = other.radial_segments_min;
|
|
390
362
|
this.length = other.length;
|
|
391
363
|
this.length_variance = other.length_variance;
|
|
392
|
-
this.length_profile.copy(other.length_profile);
|
|
393
364
|
this.radius_ratio = other.radius_ratio;
|
|
394
365
|
this.taper = other.taper;
|
|
395
366
|
this.radius_profile.copy(other.radius_profile);
|
|
396
|
-
this.bare_length_ratio = other.bare_length_ratio;
|
|
397
|
-
this.child_count = other.child_count;
|
|
398
|
-
this.phyllotaxis_mode = other.phyllotaxis_mode;
|
|
399
|
-
this.whorl_count = other.whorl_count;
|
|
400
|
-
this.azimuth_jitter = other.azimuth_jitter;
|
|
401
|
-
this.insertion_angle = other.insertion_angle;
|
|
402
|
-
this.insertion_angle_variation = other.insertion_angle_variation;
|
|
403
|
-
this.insertion_angle_profile.copy(other.insertion_angle_profile);
|
|
404
367
|
this.curvature = other.curvature;
|
|
405
368
|
this.curve_back = other.curve_back;
|
|
406
369
|
this.spiral_twist = other.spiral_twist;
|
|
@@ -427,48 +390,41 @@ export class BranchLevelConfig {
|
|
|
427
390
|
this.internode_zigzag = other.internode_zigzag;
|
|
428
391
|
this.kink_sharpness = other.kink_sharpness;
|
|
429
392
|
this.tip_upcurl = other.tip_upcurl;
|
|
393
|
+
this.plagiotropism = other.plagiotropism;
|
|
394
|
+
this.straightness = other.straightness;
|
|
430
395
|
this.oval_eccentricity = other.oval_eccentricity;
|
|
431
396
|
this.bark_displacement = other.bark_displacement;
|
|
432
397
|
this.parent_collar_bulge = other.parent_collar_bulge;
|
|
433
|
-
this.
|
|
434
|
-
this.
|
|
398
|
+
this.excurrent = other.excurrent;
|
|
399
|
+
this.root = other.root;
|
|
400
|
+
this.self_pruning = other.self_pruning;
|
|
435
401
|
return this;
|
|
436
402
|
}
|
|
437
403
|
|
|
438
404
|
/**
|
|
439
|
-
* @returns {
|
|
405
|
+
* @returns {BranchGeneratorConfig}
|
|
440
406
|
*/
|
|
441
407
|
clone() {
|
|
442
|
-
const r = new
|
|
408
|
+
const r = new BranchGeneratorConfig();
|
|
443
409
|
r.copy(this);
|
|
444
410
|
return r;
|
|
445
411
|
}
|
|
446
412
|
|
|
447
413
|
/**
|
|
448
|
-
* @param {
|
|
414
|
+
* @param {BranchGeneratorConfig} other
|
|
449
415
|
* @returns {boolean}
|
|
450
416
|
*/
|
|
451
417
|
equals(other) {
|
|
452
418
|
if (this === other) return true;
|
|
453
|
-
if (!other || !other.
|
|
454
|
-
return this.
|
|
455
|
-
&& this.segments === other.segments
|
|
419
|
+
if (!other || !other.isBranchGeneratorConfig) return false;
|
|
420
|
+
return this.segments === other.segments
|
|
456
421
|
&& this.radial_segments_max === other.radial_segments_max
|
|
457
422
|
&& this.radial_segments_min === other.radial_segments_min
|
|
458
423
|
&& this.length === other.length
|
|
459
424
|
&& this.length_variance === other.length_variance
|
|
460
|
-
&& this.length_profile.equals(other.length_profile)
|
|
461
425
|
&& this.radius_ratio === other.radius_ratio
|
|
462
426
|
&& this.taper === other.taper
|
|
463
427
|
&& this.radius_profile.equals(other.radius_profile)
|
|
464
|
-
&& this.bare_length_ratio === other.bare_length_ratio
|
|
465
|
-
&& this.child_count === other.child_count
|
|
466
|
-
&& this.phyllotaxis_mode === other.phyllotaxis_mode
|
|
467
|
-
&& this.whorl_count === other.whorl_count
|
|
468
|
-
&& this.azimuth_jitter === other.azimuth_jitter
|
|
469
|
-
&& this.insertion_angle === other.insertion_angle
|
|
470
|
-
&& this.insertion_angle_variation === other.insertion_angle_variation
|
|
471
|
-
&& this.insertion_angle_profile.equals(other.insertion_angle_profile)
|
|
472
428
|
&& this.curvature === other.curvature
|
|
473
429
|
&& this.curve_back === other.curve_back
|
|
474
430
|
&& this.spiral_twist === other.spiral_twist
|
|
@@ -495,26 +451,25 @@ export class BranchLevelConfig {
|
|
|
495
451
|
&& this.internode_zigzag === other.internode_zigzag
|
|
496
452
|
&& this.kink_sharpness === other.kink_sharpness
|
|
497
453
|
&& this.tip_upcurl === other.tip_upcurl
|
|
454
|
+
&& this.plagiotropism === other.plagiotropism
|
|
455
|
+
&& this.straightness === other.straightness
|
|
498
456
|
&& this.oval_eccentricity === other.oval_eccentricity
|
|
499
457
|
&& this.bark_displacement === other.bark_displacement
|
|
500
458
|
&& this.parent_collar_bulge === other.parent_collar_bulge
|
|
501
|
-
&& this.
|
|
502
|
-
&& this.
|
|
459
|
+
&& this.excurrent === other.excurrent
|
|
460
|
+
&& this.root === other.root
|
|
461
|
+
&& this.self_pruning === other.self_pruning;
|
|
503
462
|
}
|
|
504
463
|
|
|
505
464
|
/**
|
|
506
465
|
* @returns {number}
|
|
507
466
|
*/
|
|
508
467
|
hash() {
|
|
509
|
-
let h = hash_mix2(this.
|
|
510
|
-
h = hash_mix2(h, this.radial_segments_max);
|
|
468
|
+
let h = hash_mix2(this.segments, this.radial_segments_max);
|
|
511
469
|
h = hash_mix2(h, this.radial_segments_min);
|
|
512
470
|
h = hash_mix2(h, computeHashFloat(this.length));
|
|
513
471
|
h = hash_mix2(h, computeHashFloat(this.radius_ratio));
|
|
514
472
|
h = hash_mix2(h, computeHashFloat(this.taper));
|
|
515
|
-
h = hash_mix2(h, this.child_count);
|
|
516
|
-
h = hash_mix2(h, this.phyllotaxis_mode);
|
|
517
|
-
h = hash_mix2(h, computeHashFloat(this.insertion_angle));
|
|
518
473
|
h = hash_mix2(h, computeHashFloat(this.curvature));
|
|
519
474
|
h = hash_mix2(h, computeHashFloat(this.gravitropism));
|
|
520
475
|
h = hash_mix2(h, computeHashFloat(this.phototropism));
|
|
@@ -522,9 +477,11 @@ export class BranchLevelConfig {
|
|
|
522
477
|
h = hash_mix2(h, computeHashFloat(this.nodal_kink_strength));
|
|
523
478
|
h = hash_mix2(h, computeHashFloat(this.internode_zigzag));
|
|
524
479
|
h = hash_mix2(h, computeHashFloat(this.bark_displacement));
|
|
525
|
-
h = hash_mix2(h, computeHashFloat(this.knot_strength));
|
|
526
|
-
h = hash_mix2(h, this.length_profile.hash());
|
|
527
480
|
h = hash_mix2(h, this.radius_profile.hash());
|
|
481
|
+
h = hash_mix2(h, (this.excurrent ? 1 : 0) | (this.root ? 2 : 0));
|
|
482
|
+
h = hash_mix2(h, computeHashFloat(this.self_pruning));
|
|
483
|
+
h = hash_mix2(h, computeHashFloat(this.plagiotropism));
|
|
484
|
+
h = hash_mix2(h, computeHashFloat(this.straightness));
|
|
528
485
|
return h;
|
|
529
486
|
}
|
|
530
487
|
}
|
|
@@ -533,4 +490,4 @@ export class BranchLevelConfig {
|
|
|
533
490
|
* @readonly
|
|
534
491
|
* @type {boolean}
|
|
535
492
|
*/
|
|
536
|
-
|
|
493
|
+
BranchGeneratorConfig.prototype.isBranchGeneratorConfig = true;
|