@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
|
@@ -155,11 +155,24 @@ export class TreeSkeleton {
|
|
|
155
155
|
branch_tip_vertex = new Int32Array(INITIAL_BRANCH_CAPACITY);
|
|
156
156
|
|
|
157
157
|
/**
|
|
158
|
-
*
|
|
158
|
+
* Branching depth of each branch (0 = trunk, parent depth + 1 for a lateral, parent depth for a split fork).
|
|
159
159
|
* @type {Uint8Array}
|
|
160
160
|
*/
|
|
161
161
|
branch_level = new Uint8Array(INITIAL_BRANCH_CAPACITY);
|
|
162
162
|
|
|
163
|
+
/**
|
|
164
|
+
* Index into `TreeSpeciesConfig.branches` of the generator that grew each branch.
|
|
165
|
+
* @type {Uint16Array}
|
|
166
|
+
*/
|
|
167
|
+
branch_generator = new Uint16Array(INITIAL_BRANCH_CAPACITY);
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* `1` for a dead branch: a self-pruned stub, shaded out below the crown, that grows nothing, carries no leaves
|
|
171
|
+
* and conducts no sap.
|
|
172
|
+
* @type {Uint8Array}
|
|
173
|
+
*/
|
|
174
|
+
branch_dead = new Uint8Array(INITIAL_BRANCH_CAPACITY);
|
|
175
|
+
|
|
163
176
|
/**
|
|
164
177
|
* Parent branch ID (-1 for trunk).
|
|
165
178
|
* @type {Int32Array}
|
|
@@ -196,6 +209,52 @@ export class TreeSkeleton {
|
|
|
196
209
|
*/
|
|
197
210
|
branch_phase_hash = new Float32Array(INITIAL_BRANCH_CAPACITY);
|
|
198
211
|
|
|
212
|
+
/**
|
|
213
|
+
* Annual extension units recorded for each branch grown by them (`tree_skeleton_grow_shoots`): branch `b`'s
|
|
214
|
+
* units start at `unit_start_t[branch_unit_offset[b] + k]` for `k < branch_unit_count[b]`, as `t_norm` along
|
|
215
|
+
* it, oldest first, the last being this year's. A branch with no record has a count of 0. See
|
|
216
|
+
* {@link branch_unit_start_t}.
|
|
217
|
+
* @type {Uint32Array}
|
|
218
|
+
*/
|
|
219
|
+
branch_unit_offset = new Uint32Array(INITIAL_BRANCH_CAPACITY);
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Annual extension units recorded for each branch, see {@link branch_unit_offset}.
|
|
223
|
+
* @type {Uint16Array}
|
|
224
|
+
*/
|
|
225
|
+
branch_unit_count = new Uint16Array(INITIAL_BRANCH_CAPACITY);
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Where each recorded annual extension unit starts, as `t_norm` along its branch, see {@link branch_unit_offset}.
|
|
229
|
+
* @type {Float32Array}
|
|
230
|
+
*/
|
|
231
|
+
unit_start_t = new Float32Array(256);
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Entries of {@link unit_start_t} in use.
|
|
235
|
+
* @type {number}
|
|
236
|
+
*/
|
|
237
|
+
unit_count = 0;
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Wind joints bound to the nodes (`attr_node_joint`), written by `tree_skeleton_assign_skin_joints`; 0 until then.
|
|
241
|
+
* @type {number}
|
|
242
|
+
*/
|
|
243
|
+
joint_count = 0;
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Node each wind joint pivots at, see {@link joint_count}.
|
|
247
|
+
* @type {Int32Array}
|
|
248
|
+
*/
|
|
249
|
+
joint_vertex = new Int32Array(16);
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* How far (rad) each wind joint turns the wood it carries in the reference wind, as the joints were placed for it,
|
|
253
|
+
* see {@link joint_count}.
|
|
254
|
+
* @type {Float32Array}
|
|
255
|
+
*/
|
|
256
|
+
joint_rotation = new Float32Array(16);
|
|
257
|
+
|
|
199
258
|
/**
|
|
200
259
|
* Crown center `[cx, cy, cz]` in tree local space (Y-up).
|
|
201
260
|
* @type {Float32Array}
|
|
@@ -208,6 +267,25 @@ export class TreeSkeleton {
|
|
|
208
267
|
*/
|
|
209
268
|
crown_radii = new Float32Array([4.5, 5.0, 4.5]);
|
|
210
269
|
|
|
270
|
+
/**
|
|
271
|
+
* Number of branch scars: healed-over sites where a shed branch once grew.
|
|
272
|
+
* @type {number}
|
|
273
|
+
*/
|
|
274
|
+
scar_count = 0;
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Branch carrying each scar.
|
|
278
|
+
* @type {Int32Array}
|
|
279
|
+
*/
|
|
280
|
+
scar_branch = new Int32Array(16);
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Float32x5 per scar: `[t, dir_x, dir_y, dir_z, radius]`, the normalized position along its branch, the unit
|
|
284
|
+
* direction the shed branch grew in, and that branch's radius when it died.
|
|
285
|
+
* @type {Float32Array}
|
|
286
|
+
*/
|
|
287
|
+
scar_data = new Float32Array(16 * 5);
|
|
288
|
+
|
|
211
289
|
constructor() {
|
|
212
290
|
this.attr_node_branch_info.count = 0;
|
|
213
291
|
this.attr_node_spine_param.count = 0;
|
|
@@ -233,6 +311,97 @@ export class TreeSkeleton {
|
|
|
233
311
|
this.attr_segment_hermite_m0.count = 0;
|
|
234
312
|
this.attr_segment_hermite_m1.count = 0;
|
|
235
313
|
this.attr_segment_metrics.count = 0;
|
|
314
|
+
this.scar_count = 0;
|
|
315
|
+
this.unit_count = 0;
|
|
316
|
+
this.joint_count = 0;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Records the wind joints bound to the nodes: where each pivots and how far it turns in the reference wind.
|
|
321
|
+
*
|
|
322
|
+
* @param {ArrayLike<number>} vertices node of each joint
|
|
323
|
+
* @param {ArrayLike<number>} rotations rad, per joint
|
|
324
|
+
*/
|
|
325
|
+
set_joints(vertices, rotations) {
|
|
326
|
+
const n = vertices.length;
|
|
327
|
+
assert.equal(rotations.length, n, 'rotations.length');
|
|
328
|
+
if (n > this.joint_vertex.length) {
|
|
329
|
+
this.joint_vertex = new Int32Array(n);
|
|
330
|
+
this.joint_rotation = new Float32Array(n);
|
|
331
|
+
}
|
|
332
|
+
this.joint_vertex.set(vertices);
|
|
333
|
+
this.joint_rotation.set(rotations);
|
|
334
|
+
this.joint_count = n;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Records where each annual extension unit of `branch` starts, as `t_norm` along it, oldest first, the last being
|
|
339
|
+
* this year's. Replaces any record `branch` had (the old one stays allocated).
|
|
340
|
+
*
|
|
341
|
+
* @param {number} branch
|
|
342
|
+
* @param {ArrayLike<number>} starts
|
|
343
|
+
*/
|
|
344
|
+
set_branch_units(branch, starts) {
|
|
345
|
+
const n = starts.length;
|
|
346
|
+
assert.lessThanOrEqual(n, 0xFFFF, 'starts.length');
|
|
347
|
+
const offset = this.unit_count;
|
|
348
|
+
if (offset + n > this.unit_start_t.length) {
|
|
349
|
+
const grown = new Float32Array(Math.max(this.unit_start_t.length * 2, offset + n));
|
|
350
|
+
grown.set(this.unit_start_t);
|
|
351
|
+
this.unit_start_t = grown;
|
|
352
|
+
}
|
|
353
|
+
for (let k = 0; k < n; k++) {
|
|
354
|
+
this.unit_start_t[offset + k] = starts[k];
|
|
355
|
+
}
|
|
356
|
+
this.unit_count = offset + n;
|
|
357
|
+
this.branch_unit_offset[branch] = offset;
|
|
358
|
+
this.branch_unit_count[branch] = n;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Where the recorded annual unit of `branch` that grew `age` years ago starts, as `t_norm` along it: `age` 0 is
|
|
363
|
+
* this year's. The unit ends where the one a year younger starts, or at the tip.
|
|
364
|
+
*
|
|
365
|
+
* @param {number} branch
|
|
366
|
+
* @param {number} age `[0, branch_unit_count[branch])`
|
|
367
|
+
* @returns {number}
|
|
368
|
+
*/
|
|
369
|
+
branch_unit_start_t(branch, age) {
|
|
370
|
+
const n = this.branch_unit_count[branch];
|
|
371
|
+
assert.lessThan(age, n, 'age');
|
|
372
|
+
return this.unit_start_t[this.branch_unit_offset[branch] + n - 1 - age];
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Records the healed-over site of a shed branch on `branch`.
|
|
377
|
+
*
|
|
378
|
+
* @param {number} branch
|
|
379
|
+
* @param {number} t normalized position along `branch`
|
|
380
|
+
* @param {number} dir_x unit direction the shed branch grew in
|
|
381
|
+
* @param {number} dir_y
|
|
382
|
+
* @param {number} dir_z
|
|
383
|
+
* @param {number} radius the shed branch's radius when it died
|
|
384
|
+
* @returns {number} scar index
|
|
385
|
+
*/
|
|
386
|
+
add_scar(branch, t, dir_x, dir_y, dir_z, radius) {
|
|
387
|
+
const id = this.scar_count;
|
|
388
|
+
if (id >= this.scar_branch.length) {
|
|
389
|
+
const branches = new Int32Array(this.scar_branch.length * 2);
|
|
390
|
+
branches.set(this.scar_branch);
|
|
391
|
+
this.scar_branch = branches;
|
|
392
|
+
const data = new Float32Array(this.scar_data.length * 2);
|
|
393
|
+
data.set(this.scar_data);
|
|
394
|
+
this.scar_data = data;
|
|
395
|
+
}
|
|
396
|
+
this.scar_branch[id] = branch;
|
|
397
|
+
const d = id * 5;
|
|
398
|
+
this.scar_data[d] = t;
|
|
399
|
+
this.scar_data[d + 1] = dir_x;
|
|
400
|
+
this.scar_data[d + 2] = dir_y;
|
|
401
|
+
this.scar_data[d + 3] = dir_z;
|
|
402
|
+
this.scar_data[d + 4] = radius;
|
|
403
|
+
this.scar_count = id + 1;
|
|
404
|
+
return id;
|
|
236
405
|
}
|
|
237
406
|
|
|
238
407
|
/**
|
|
@@ -292,6 +461,11 @@ export class TreeSkeleton {
|
|
|
292
461
|
arr.set(old);
|
|
293
462
|
return arr;
|
|
294
463
|
};
|
|
464
|
+
const grow_u16 = (old) => {
|
|
465
|
+
const arr = new Uint16Array(next_cap);
|
|
466
|
+
arr.set(old);
|
|
467
|
+
return arr;
|
|
468
|
+
};
|
|
295
469
|
const grow_f32 = (old) => {
|
|
296
470
|
const arr = new Float32Array(next_cap);
|
|
297
471
|
arr.set(old);
|
|
@@ -301,12 +475,18 @@ export class TreeSkeleton {
|
|
|
301
475
|
this.branch_root_vertex = grow_i32(this.branch_root_vertex);
|
|
302
476
|
this.branch_tip_vertex = grow_i32(this.branch_tip_vertex);
|
|
303
477
|
this.branch_level = grow_u8(this.branch_level);
|
|
478
|
+
this.branch_generator = grow_u16(this.branch_generator);
|
|
479
|
+
this.branch_dead = grow_u8(this.branch_dead);
|
|
304
480
|
this.branch_parent = grow_i32(this.branch_parent);
|
|
305
481
|
this.branch_parent_edge = grow_i32(this.branch_parent_edge);
|
|
306
482
|
this.branch_parent_attach_t = grow_f32(this.branch_parent_attach_t);
|
|
307
483
|
this.branch_length = grow_f32(this.branch_length);
|
|
308
484
|
this.branch_base_radius = grow_f32(this.branch_base_radius);
|
|
309
485
|
this.branch_phase_hash = grow_f32(this.branch_phase_hash);
|
|
486
|
+
const grown_offset = new Uint32Array(next_cap);
|
|
487
|
+
grown_offset.set(this.branch_unit_offset);
|
|
488
|
+
this.branch_unit_offset = grown_offset;
|
|
489
|
+
this.branch_unit_count = grow_u16(this.branch_unit_count);
|
|
310
490
|
this.#branch_capacity = next_cap;
|
|
311
491
|
}
|
|
312
492
|
|
|
@@ -314,7 +494,8 @@ export class TreeSkeleton {
|
|
|
314
494
|
* Registers a new branch in the branch table and returns its `branch_id`.
|
|
315
495
|
*
|
|
316
496
|
* @param {number} root_vertex
|
|
317
|
-
* @param {number} level
|
|
497
|
+
* @param {number} level branching depth
|
|
498
|
+
* @param {number} generator index into `TreeSpeciesConfig.branches`
|
|
318
499
|
* @param {number} parent_branch_id
|
|
319
500
|
* @param {number} parent_edge_id
|
|
320
501
|
* @param {number} parent_attach_t
|
|
@@ -326,6 +507,7 @@ export class TreeSkeleton {
|
|
|
326
507
|
add_branch(
|
|
327
508
|
root_vertex,
|
|
328
509
|
level,
|
|
510
|
+
generator,
|
|
329
511
|
parent_branch_id,
|
|
330
512
|
parent_edge_id,
|
|
331
513
|
parent_attach_t,
|
|
@@ -340,12 +522,15 @@ export class TreeSkeleton {
|
|
|
340
522
|
this.branch_root_vertex[id] = root_vertex;
|
|
341
523
|
this.branch_tip_vertex[id] = root_vertex;
|
|
342
524
|
this.branch_level[id] = level;
|
|
525
|
+
this.branch_generator[id] = generator;
|
|
526
|
+
this.branch_dead[id] = 0;
|
|
343
527
|
this.branch_parent[id] = parent_branch_id;
|
|
344
528
|
this.branch_parent_edge[id] = parent_edge_id;
|
|
345
529
|
this.branch_parent_attach_t[id] = parent_attach_t;
|
|
346
530
|
this.branch_length[id] = length;
|
|
347
531
|
this.branch_base_radius[id] = base_radius;
|
|
348
532
|
this.branch_phase_hash[id] = phase_hash;
|
|
533
|
+
this.branch_unit_count[id] = 0;
|
|
349
534
|
|
|
350
535
|
return id;
|
|
351
536
|
}
|
|
@@ -859,14 +1044,13 @@ export class TreeSkeleton {
|
|
|
859
1044
|
}
|
|
860
1045
|
|
|
861
1046
|
/**
|
|
862
|
-
* Evaluates the 3D position along Cubic Hermite segment `edge_id` at parameter `u` in `[0, 1]`.
|
|
863
|
-
*
|
|
864
1047
|
* @param {number[]|Float32Array} out
|
|
865
1048
|
* @param {number} out_offset
|
|
866
1049
|
* @param {number} edge_id
|
|
867
1050
|
* @param {number} u
|
|
1051
|
+
* @param {(t: number, p0: number, p1: number, m0: number, m1: number) => number} eval_fn
|
|
868
1052
|
*/
|
|
869
|
-
|
|
1053
|
+
#evaluate_segment_hermite(out, out_offset, edge_id, u, eval_fn) {
|
|
870
1054
|
const endpoints = /** @type {Int32Array} */ (this.attr_segment_endpoints.data);
|
|
871
1055
|
const v0 = endpoints[edge_id * 2];
|
|
872
1056
|
const v1 = endpoints[edge_id * 2 + 1];
|
|
@@ -877,21 +1061,21 @@ export class TreeSkeleton {
|
|
|
877
1061
|
const m1 = /** @type {Float32Array} */ (this.attr_segment_hermite_m1.data);
|
|
878
1062
|
const e3 = edge_id * 3;
|
|
879
1063
|
|
|
880
|
-
out[out_offset] =
|
|
1064
|
+
out[out_offset] = eval_fn(
|
|
881
1065
|
u,
|
|
882
1066
|
t0[TRANSFORM64_TRANSLATION_OFFSET],
|
|
883
1067
|
t1[TRANSFORM64_TRANSLATION_OFFSET],
|
|
884
1068
|
m0[e3],
|
|
885
1069
|
m1[e3]
|
|
886
1070
|
);
|
|
887
|
-
out[out_offset + 1] =
|
|
1071
|
+
out[out_offset + 1] = eval_fn(
|
|
888
1072
|
u,
|
|
889
1073
|
t0[TRANSFORM64_TRANSLATION_OFFSET + 1],
|
|
890
1074
|
t1[TRANSFORM64_TRANSLATION_OFFSET + 1],
|
|
891
1075
|
m0[e3 + 1],
|
|
892
1076
|
m1[e3 + 1]
|
|
893
1077
|
);
|
|
894
|
-
out[out_offset + 2] =
|
|
1078
|
+
out[out_offset + 2] = eval_fn(
|
|
895
1079
|
u,
|
|
896
1080
|
t0[TRANSFORM64_TRANSLATION_OFFSET + 2],
|
|
897
1081
|
t1[TRANSFORM64_TRANSLATION_OFFSET + 2],
|
|
@@ -900,6 +1084,18 @@ export class TreeSkeleton {
|
|
|
900
1084
|
);
|
|
901
1085
|
}
|
|
902
1086
|
|
|
1087
|
+
/**
|
|
1088
|
+
* Evaluates the 3D position along Cubic Hermite segment `edge_id` at parameter `u` in `[0, 1]`.
|
|
1089
|
+
*
|
|
1090
|
+
* @param {number[]|Float32Array} out
|
|
1091
|
+
* @param {number} out_offset
|
|
1092
|
+
* @param {number} edge_id
|
|
1093
|
+
* @param {number} u
|
|
1094
|
+
*/
|
|
1095
|
+
evaluate_segment_position(out, out_offset, edge_id, u) {
|
|
1096
|
+
this.#evaluate_segment_hermite(out, out_offset, edge_id, u, spline3_hermite);
|
|
1097
|
+
}
|
|
1098
|
+
|
|
903
1099
|
/**
|
|
904
1100
|
* Evaluates the unnormalized 3D derivative along Cubic Hermite segment `edge_id` at parameter `u` in `[0, 1]`.
|
|
905
1101
|
*
|
|
@@ -909,37 +1105,7 @@ export class TreeSkeleton {
|
|
|
909
1105
|
* @param {number} u
|
|
910
1106
|
*/
|
|
911
1107
|
evaluate_segment_derivative(out, out_offset, edge_id, u) {
|
|
912
|
-
|
|
913
|
-
const v0 = endpoints[edge_id * 2];
|
|
914
|
-
const v1 = endpoints[edge_id * 2 + 1];
|
|
915
|
-
|
|
916
|
-
const t0 = this.node_transforms[v0];
|
|
917
|
-
const t1 = this.node_transforms[v1];
|
|
918
|
-
const m0 = /** @type {Float32Array} */ (this.attr_segment_hermite_m0.data);
|
|
919
|
-
const m1 = /** @type {Float32Array} */ (this.attr_segment_hermite_m1.data);
|
|
920
|
-
const e3 = edge_id * 3;
|
|
921
|
-
|
|
922
|
-
out[out_offset] = spline3_hermite_derivative(
|
|
923
|
-
u,
|
|
924
|
-
t0[TRANSFORM64_TRANSLATION_OFFSET],
|
|
925
|
-
t1[TRANSFORM64_TRANSLATION_OFFSET],
|
|
926
|
-
m0[e3],
|
|
927
|
-
m1[e3]
|
|
928
|
-
);
|
|
929
|
-
out[out_offset + 1] = spline3_hermite_derivative(
|
|
930
|
-
u,
|
|
931
|
-
t0[TRANSFORM64_TRANSLATION_OFFSET + 1],
|
|
932
|
-
t1[TRANSFORM64_TRANSLATION_OFFSET + 1],
|
|
933
|
-
m0[e3 + 1],
|
|
934
|
-
m1[e3 + 1]
|
|
935
|
-
);
|
|
936
|
-
out[out_offset + 2] = spline3_hermite_derivative(
|
|
937
|
-
u,
|
|
938
|
-
t0[TRANSFORM64_TRANSLATION_OFFSET + 2],
|
|
939
|
-
t1[TRANSFORM64_TRANSLATION_OFFSET + 2],
|
|
940
|
-
m0[e3 + 2],
|
|
941
|
-
m1[e3 + 2]
|
|
942
|
-
);
|
|
1108
|
+
this.#evaluate_segment_hermite(out, out_offset, edge_id, u, spline3_hermite_derivative);
|
|
943
1109
|
}
|
|
944
1110
|
|
|
945
1111
|
/**
|
|
@@ -1069,15 +1235,27 @@ export class TreeSkeleton {
|
|
|
1069
1235
|
this.branch_root_vertex[i] = other.branch_root_vertex[i];
|
|
1070
1236
|
this.branch_tip_vertex[i] = other.branch_tip_vertex[i];
|
|
1071
1237
|
this.branch_level[i] = other.branch_level[i];
|
|
1238
|
+
this.branch_generator[i] = other.branch_generator[i];
|
|
1239
|
+
this.branch_dead[i] = other.branch_dead[i];
|
|
1072
1240
|
this.branch_parent[i] = other.branch_parent[i];
|
|
1073
1241
|
this.branch_parent_edge[i] = other.branch_parent_edge[i];
|
|
1074
1242
|
this.branch_parent_attach_t[i] = other.branch_parent_attach_t[i];
|
|
1075
1243
|
this.branch_length[i] = other.branch_length[i];
|
|
1076
1244
|
this.branch_base_radius[i] = other.branch_base_radius[i];
|
|
1077
1245
|
this.branch_phase_hash[i] = other.branch_phase_hash[i];
|
|
1246
|
+
this.branch_unit_offset[i] = other.branch_unit_offset[i];
|
|
1247
|
+
this.branch_unit_count[i] = other.branch_unit_count[i];
|
|
1078
1248
|
}
|
|
1079
1249
|
|
|
1080
1250
|
this.crown_center.set(other.crown_center);
|
|
1251
|
+
this.scar_count = other.scar_count;
|
|
1252
|
+
this.unit_count = other.unit_count;
|
|
1253
|
+
this.unit_start_t = other.unit_start_t.slice();
|
|
1254
|
+
this.joint_count = other.joint_count;
|
|
1255
|
+
this.joint_vertex = other.joint_vertex.slice();
|
|
1256
|
+
this.joint_rotation = other.joint_rotation.slice();
|
|
1257
|
+
this.scar_branch = other.scar_branch.slice();
|
|
1258
|
+
this.scar_data = other.scar_data.slice();
|
|
1081
1259
|
this.crown_radii.set(other.crown_radii);
|
|
1082
1260
|
|
|
1083
1261
|
return this;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Angular offset of a branch's basal flare lobes and flutes at arc length `arc_s`: the lobe pattern around
|
|
3
|
+
* the cross-section is a function of `theta + flare_lobe_phase_offset(arc_s, phase_hash)`, so its crests sit at
|
|
4
|
+
* `theta = 2 * pi * k / flare_lobes - flare_lobe_phase_offset(arc_s, phase_hash)`.
|
|
5
|
+
*
|
|
6
|
+
* Shared by the bark mesher (which shapes the lobes) and the skeleton grower (which plants roots on their crests).
|
|
7
|
+
*
|
|
8
|
+
* @param {number} arc_s arc length along the branch (meters)
|
|
9
|
+
* @param {number} phase_hash per-branch random phase in [0, 1)
|
|
10
|
+
* @returns {number} radians
|
|
11
|
+
*/
|
|
12
|
+
export function flare_lobe_phase_offset(arc_s: number, phase_hash: number): number;
|
|
13
|
+
//# sourceMappingURL=flare_lobe_phase_offset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flare_lobe_phase_offset.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/flare_lobe_phase_offset.js"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,+CAJW,MAAM,cACN,MAAM,GACJ,MAAM,CAIlB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PI2 } from "../../../core/math/PI2.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Angular offset of a branch's basal flare lobes and flutes at arc length `arc_s`: the lobe pattern around
|
|
5
|
+
* the cross-section is a function of `theta + flare_lobe_phase_offset(arc_s, phase_hash)`, so its crests sit at
|
|
6
|
+
* `theta = 2 * pi * k / flare_lobes - flare_lobe_phase_offset(arc_s, phase_hash)`.
|
|
7
|
+
*
|
|
8
|
+
* Shared by the bark mesher (which shapes the lobes) and the skeleton grower (which plants roots on their crests).
|
|
9
|
+
*
|
|
10
|
+
* @param {number} arc_s arc length along the branch (meters)
|
|
11
|
+
* @param {number} phase_hash per-branch random phase in [0, 1)
|
|
12
|
+
* @returns {number} radians
|
|
13
|
+
*/
|
|
14
|
+
export function flare_lobe_phase_offset(arc_s, phase_hash) {
|
|
15
|
+
return 0.32 * arc_s + phase_hash * PI2;
|
|
16
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Planes one card of `card_type` stands up: a cross card is two tiles, a tri-star three.
|
|
3
|
+
*
|
|
4
|
+
* @param {FoliageCardType|number} card_type
|
|
5
|
+
* @returns {number}
|
|
6
|
+
*/
|
|
7
|
+
export function foliage_card_plane_count(card_type: FoliageCardType | number): number;
|
|
8
|
+
/**
|
|
9
|
+
* Where a carrier's leafy span starts, normalized along it: the rule's `attach_min`, honoured up to 0.92 so every
|
|
10
|
+
* carrier keeps a stretch to hang its cards on. The cards and the wind sail both start here.
|
|
11
|
+
*
|
|
12
|
+
* @param {number} attach_min
|
|
13
|
+
* @returns {number}
|
|
14
|
+
*/
|
|
15
|
+
export function foliage_leafy_span_start(attach_min: number): number;
|
|
16
|
+
/**
|
|
17
|
+
* Size of the cards a shoot of `shoot_length` carries, relative to the species' card: a shoot shorter than a card
|
|
18
|
+
* carries cards about as long as itself (`shoot_length / 0.95`), never smaller than 0.22 of the species' card.
|
|
19
|
+
*
|
|
20
|
+
* @param {number} card_size the species' card (m), `foliage_tile_layout`
|
|
21
|
+
* @param {number} shoot_length
|
|
22
|
+
* @returns {number}
|
|
23
|
+
*/
|
|
24
|
+
export function foliage_shoot_card_scale(card_size: number, shoot_length: number): number;
|
|
25
|
+
/**
|
|
26
|
+
* How far a card reaches from the shoot it hangs on (m): its tile from the anchor up.
|
|
27
|
+
*
|
|
28
|
+
* @param {import("../material/foliage_tile.js").FoliageTileLayout} layout
|
|
29
|
+
* @param {number} card_scale
|
|
30
|
+
* @returns {number}
|
|
31
|
+
*/
|
|
32
|
+
export function foliage_card_reach(layout: import("../material/foliage_tile.js").FoliageTileLayout, card_scale: number): number;
|
|
33
|
+
/**
|
|
34
|
+
* One-sided leaf area one card holds: its tile, at the species' scale, times the atlas's leaf coverage, for every
|
|
35
|
+
* plane it stands up.
|
|
36
|
+
*
|
|
37
|
+
* @param {import("../material/foliage_tile.js").FoliageTileLayout} layout
|
|
38
|
+
* @param {FoliageCardType|number} card_type
|
|
39
|
+
* @param {number} coverage leaf fraction of an atlas tile, `FoliageAtlasCutout.mean_coverage()`
|
|
40
|
+
* @param {number} card_scale
|
|
41
|
+
* @returns {number} m^2
|
|
42
|
+
*/
|
|
43
|
+
export function foliage_card_leaf_area(layout: import("../material/foliage_tile.js").FoliageTileLayout, card_type: FoliageCardType | number, coverage: number, card_scale: number): number;
|
|
44
|
+
/**
|
|
45
|
+
* One-sided leaf area per metre of a carrier's leafy span.
|
|
46
|
+
*
|
|
47
|
+
* Cards leave the shoot at `insertion_angle` and reach `reach` from it, so the shoot wears a sleeve of foliage of
|
|
48
|
+
* radius `R = reach sin(insertion_angle)`. The carrier holds just enough leaf that every line of sight through that
|
|
49
|
+
* sleeve meets one leaf on average: by Cauchy's formula the sleeve's mean projected area is a quarter of its surface
|
|
50
|
+
* `2 pi R` per metre, a flat leaf's is half its area, so the leaf area is `pi R` per metre. Leaf beyond that is
|
|
51
|
+
* overdraw; less leaves the shoot see-through.
|
|
52
|
+
*
|
|
53
|
+
* @param {number} reach m, `foliage_card_reach`
|
|
54
|
+
* @param {number} insertion_angle radians from the shoot's tangent
|
|
55
|
+
* @returns {number} m^2 per m
|
|
56
|
+
*/
|
|
57
|
+
export function foliage_leaf_area_per_metre(reach: number, insertion_angle: number): number;
|
|
58
|
+
/**
|
|
59
|
+
* Cards per metre of a carrier's leafy span that carry {@link foliage_leaf_area_per_metre} of leaf: each card
|
|
60
|
+
* holds the atlas's leaf coverage of every plane it stands up.
|
|
61
|
+
*
|
|
62
|
+
* @param {import("../material/foliage_tile.js").FoliageTileLayout} layout
|
|
63
|
+
* @param {FoliageCardType|number} card_type
|
|
64
|
+
* @param {number} coverage leaf fraction of an atlas tile, `FoliageAtlasCutout.mean_coverage()`
|
|
65
|
+
* @param {number} insertion_angle
|
|
66
|
+
* @param {number} card_scale
|
|
67
|
+
* @returns {number}
|
|
68
|
+
*/
|
|
69
|
+
export function foliage_cards_per_metre(layout: import("../material/foliage_tile.js").FoliageTileLayout, card_type: FoliageCardType | number, coverage: number, insertion_angle: number, card_scale: number): number;
|
|
70
|
+
import { FoliageCardType } from "../config/FoliageCardType.js";
|
|
71
|
+
//# sourceMappingURL=foliage_card_density.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"foliage_card_density.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/skeleton/foliage_card_density.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,oDAHW,eAAe,GAAC,MAAM,GACpB,MAAM,CAWlB;AAED;;;;;;GAMG;AACH,qDAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;GAOG;AACH,oDAJW,MAAM,gBACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;GAMG;AACH,2CAJW,OAAO,6BAA6B,EAAE,iBAAiB,cACvD,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;GASG;AACH,+CANW,OAAO,6BAA6B,EAAE,iBAAiB,aACvD,eAAe,GAAC,MAAM,YACtB,MAAM,cACN,MAAM,GACJ,MAAM,CAKlB;AAED;;;;;;;;;;;;GAYG;AACH,mDAJW,MAAM,mBACN,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;GAUG;AACH,gDAPW,OAAO,6BAA6B,EAAE,iBAAiB,aACvD,eAAe,GAAC,MAAM,YACtB,MAAM,mBACN,MAAM,cACN,MAAM,GACJ,MAAM,CAKlB;gCAnG+B,8BAA8B"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { clamp } from "../../../core/math/clamp.js";
|
|
2
|
+
import { FoliageCardType } from "../config/FoliageCardType.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Planes one card of `card_type` stands up: a cross card is two tiles, a tri-star three.
|
|
6
|
+
*
|
|
7
|
+
* @param {FoliageCardType|number} card_type
|
|
8
|
+
* @returns {number}
|
|
9
|
+
*/
|
|
10
|
+
export function foliage_card_plane_count(card_type) {
|
|
11
|
+
switch (card_type) {
|
|
12
|
+
case FoliageCardType.CrossCard:
|
|
13
|
+
return 2;
|
|
14
|
+
case FoliageCardType.TriStarCluster:
|
|
15
|
+
return 3;
|
|
16
|
+
default:
|
|
17
|
+
return 1;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Where a carrier's leafy span starts, normalized along it: the rule's `attach_min`, honoured up to 0.92 so every
|
|
23
|
+
* carrier keeps a stretch to hang its cards on. The cards and the wind sail both start here.
|
|
24
|
+
*
|
|
25
|
+
* @param {number} attach_min
|
|
26
|
+
* @returns {number}
|
|
27
|
+
*/
|
|
28
|
+
export function foliage_leafy_span_start(attach_min) {
|
|
29
|
+
return clamp(attach_min, 0.0, 0.92);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Size of the cards a shoot of `shoot_length` carries, relative to the species' card: a shoot shorter than a card
|
|
34
|
+
* carries cards about as long as itself (`shoot_length / 0.95`), never smaller than 0.22 of the species' card.
|
|
35
|
+
*
|
|
36
|
+
* @param {number} card_size the species' card (m), `foliage_tile_layout`
|
|
37
|
+
* @param {number} shoot_length
|
|
38
|
+
* @returns {number}
|
|
39
|
+
*/
|
|
40
|
+
export function foliage_shoot_card_scale(card_size, shoot_length) {
|
|
41
|
+
return clamp(shoot_length / (Math.max(0.25, card_size) * 0.95), 0.22, 1.0);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* How far a card reaches from the shoot it hangs on (m): its tile from the anchor up.
|
|
46
|
+
*
|
|
47
|
+
* @param {import("../material/foliage_tile.js").FoliageTileLayout} layout
|
|
48
|
+
* @param {number} card_scale
|
|
49
|
+
* @returns {number}
|
|
50
|
+
*/
|
|
51
|
+
export function foliage_card_reach(layout, card_scale) {
|
|
52
|
+
return layout.card_size * (1.0 - layout.anchor_v) * card_scale;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* One-sided leaf area one card holds: its tile, at the species' scale, times the atlas's leaf coverage, for every
|
|
57
|
+
* plane it stands up.
|
|
58
|
+
*
|
|
59
|
+
* @param {import("../material/foliage_tile.js").FoliageTileLayout} layout
|
|
60
|
+
* @param {FoliageCardType|number} card_type
|
|
61
|
+
* @param {number} coverage leaf fraction of an atlas tile, `FoliageAtlasCutout.mean_coverage()`
|
|
62
|
+
* @param {number} card_scale
|
|
63
|
+
* @returns {number} m^2
|
|
64
|
+
*/
|
|
65
|
+
export function foliage_card_leaf_area(layout, card_type, coverage, card_scale) {
|
|
66
|
+
const tile_area = layout.card_size * layout.card_size * card_scale * card_scale;
|
|
67
|
+
return tile_area * Math.max(1e-3, coverage) * foliage_card_plane_count(card_type);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* One-sided leaf area per metre of a carrier's leafy span.
|
|
72
|
+
*
|
|
73
|
+
* Cards leave the shoot at `insertion_angle` and reach `reach` from it, so the shoot wears a sleeve of foliage of
|
|
74
|
+
* radius `R = reach sin(insertion_angle)`. The carrier holds just enough leaf that every line of sight through that
|
|
75
|
+
* sleeve meets one leaf on average: by Cauchy's formula the sleeve's mean projected area is a quarter of its surface
|
|
76
|
+
* `2 pi R` per metre, a flat leaf's is half its area, so the leaf area is `pi R` per metre. Leaf beyond that is
|
|
77
|
+
* overdraw; less leaves the shoot see-through.
|
|
78
|
+
*
|
|
79
|
+
* @param {number} reach m, `foliage_card_reach`
|
|
80
|
+
* @param {number} insertion_angle radians from the shoot's tangent
|
|
81
|
+
* @returns {number} m^2 per m
|
|
82
|
+
*/
|
|
83
|
+
export function foliage_leaf_area_per_metre(reach, insertion_angle) {
|
|
84
|
+
return Math.PI * reach * Math.abs(Math.sin(insertion_angle));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Cards per metre of a carrier's leafy span that carry {@link foliage_leaf_area_per_metre} of leaf: each card
|
|
89
|
+
* holds the atlas's leaf coverage of every plane it stands up.
|
|
90
|
+
*
|
|
91
|
+
* @param {import("../material/foliage_tile.js").FoliageTileLayout} layout
|
|
92
|
+
* @param {FoliageCardType|number} card_type
|
|
93
|
+
* @param {number} coverage leaf fraction of an atlas tile, `FoliageAtlasCutout.mean_coverage()`
|
|
94
|
+
* @param {number} insertion_angle
|
|
95
|
+
* @param {number} card_scale
|
|
96
|
+
* @returns {number}
|
|
97
|
+
*/
|
|
98
|
+
export function foliage_cards_per_metre(layout, card_type, coverage, insertion_angle, card_scale) {
|
|
99
|
+
return foliage_leaf_area_per_metre(foliage_card_reach(layout, card_scale), insertion_angle)
|
|
100
|
+
/ foliage_card_leaf_area(layout, card_type, coverage, card_scale);
|
|
101
|
+
}
|