@woosh/meep-engine 3.55.0 → 3.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/ecs/transform/Transform64.d.ts +21 -0
- package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform64.js +26 -0
- 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/Renderer.d.ts +5 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +25 -2
- 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/GPUParticleSystem.d.ts +2 -1
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +1 -1
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts +2 -2
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles_avboit.js +4 -9
- 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/NSS.d.ts +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/view/GPUViewContext.d.ts +0 -14
- package/src/shade/renderer/view/GPUViewContext.d.ts.map +1 -1
- package/src/shade/renderer/view/GPUViewContext.js +0 -29
- package/src/shade/renderer/view/ViewManager.d.ts +1 -1
- package/src/shade/renderer/view/ViewManager.js +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +40 -3
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +660 -583
- 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/renderer/wind/GPUSceneWind.d.ts +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
- package/src/shade/renderer/volumetrics/VOLUMETRICS_RESOLUTION_Z.d.ts +0 -2
- package/src/shade/renderer/volumetrics/VOLUMETRICS_RESOLUTION_Z.d.ts.map +0 -1
- package/src/shade/renderer/volumetrics/VOLUMETRICS_RESOLUTION_Z.js +0 -1
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How opaque a crown is, in the terms of the USDA Forest Inventory and Analysis crown indicators (Schomaker et al.
|
|
3
|
+
* 2007, GTR SRS-102, §2.3.5 and §2.3.7), from orthographic views of everything the renderer draws.
|
|
4
|
+
*
|
|
5
|
+
* The views are the frames of a hemi-octahedral impostor, `frame_count` x `frame_count` of them, frame `(i, j)` at
|
|
6
|
+
* index `j * frame_count + i`. A view and its opposite see the same mirrored image, so the upper hemisphere holds every
|
|
7
|
+
* view once: its rim is the horizon, where FIA rates from, and its centre the vertical, Nowak's (1996) view from below.
|
|
8
|
+
*
|
|
9
|
+
* Produced by `crown_opacity_measure`. Every ratio is in `[0, 1]`; a frame that sees nothing of the crown has `NaN`
|
|
10
|
+
* ratios and zero areas.
|
|
11
|
+
*/
|
|
12
|
+
export class CrownOpacity {
|
|
13
|
+
/**
|
|
14
|
+
* Frames along each side of the grid.
|
|
15
|
+
* @type {number}
|
|
16
|
+
*/
|
|
17
|
+
frame_count: number;
|
|
18
|
+
/**
|
|
19
|
+
* Unit direction of each frame's view axis, 3 per frame, on the upper hemisphere (y up).
|
|
20
|
+
* @type {Float64Array}
|
|
21
|
+
*/
|
|
22
|
+
directions: Float64Array;
|
|
23
|
+
/**
|
|
24
|
+
* Solid angle each frame stands for, steradians: the frame's cell of the grid, mapped onto the hemisphere.
|
|
25
|
+
* They sum to `2 PI`.
|
|
26
|
+
* @type {Float64Array}
|
|
27
|
+
*/
|
|
28
|
+
solid_angles: Float64Array;
|
|
29
|
+
/**
|
|
30
|
+
* Azimuth each horizon frame stands for, radians: half the arc to each of its neighbours on the rim. Zero off the
|
|
31
|
+
* horizon; they sum to `2 PI`.
|
|
32
|
+
* @type {Float64Array}
|
|
33
|
+
*/
|
|
34
|
+
horizon_weights: Float64Array;
|
|
35
|
+
/**
|
|
36
|
+
* Crown density of each frame: the share of the crown outline that crown stem, branches and foliage block.
|
|
37
|
+
* @type {Float64Array}
|
|
38
|
+
*/
|
|
39
|
+
density: Float64Array;
|
|
40
|
+
/**
|
|
41
|
+
* Foliage transparency of each frame: the share of skylight through the foliage, over the foliated part of the
|
|
42
|
+
* outline, with branches treated as if light passed them.
|
|
43
|
+
* @type {Float64Array}
|
|
44
|
+
*/
|
|
45
|
+
transparency: Float64Array;
|
|
46
|
+
/**
|
|
47
|
+
* Area of each frame's crown outline, m^2.
|
|
48
|
+
* @type {Float64Array}
|
|
49
|
+
*/
|
|
50
|
+
outline_area: Float64Array;
|
|
51
|
+
/**
|
|
52
|
+
* Area of each frame's foliated part of the outline, m^2.
|
|
53
|
+
* @type {Float64Array}
|
|
54
|
+
*/
|
|
55
|
+
foliated_area: Float64Array;
|
|
56
|
+
/**
|
|
57
|
+
* Height of the live crown base: nothing below it is part of the crown.
|
|
58
|
+
* @type {number}
|
|
59
|
+
*/
|
|
60
|
+
crown_base: number;
|
|
61
|
+
/**
|
|
62
|
+
* Width of a raster pixel, m.
|
|
63
|
+
* @type {number}
|
|
64
|
+
*/
|
|
65
|
+
pixel_size: number;
|
|
66
|
+
/**
|
|
67
|
+
* Radius of the closing that separates microholes from the large gaps between foliage, m.
|
|
68
|
+
* @type {number}
|
|
69
|
+
*/
|
|
70
|
+
microhole_radius: number;
|
|
71
|
+
/**
|
|
72
|
+
* @param {number} frame_count
|
|
73
|
+
* @returns {this}
|
|
74
|
+
*/
|
|
75
|
+
resize(frame_count: number): this;
|
|
76
|
+
/**
|
|
77
|
+
* Index of the frame that looks along the vertical, the grid's centre.
|
|
78
|
+
* @returns {number}
|
|
79
|
+
*/
|
|
80
|
+
vertical_frame(): number;
|
|
81
|
+
/**
|
|
82
|
+
* Crown density over every direction, each frame weighted by its solid angle.
|
|
83
|
+
* @returns {number}
|
|
84
|
+
*/
|
|
85
|
+
mean_density(): number;
|
|
86
|
+
/**
|
|
87
|
+
* Foliage transparency over every direction, each frame weighted by its solid angle.
|
|
88
|
+
* @returns {number}
|
|
89
|
+
*/
|
|
90
|
+
mean_transparency(): number;
|
|
91
|
+
/**
|
|
92
|
+
* Crown density seen from the side, as FIA rates it: the horizon frames, each weighted by its azimuth.
|
|
93
|
+
* @returns {number}
|
|
94
|
+
*/
|
|
95
|
+
side_density(): number;
|
|
96
|
+
/**
|
|
97
|
+
* Foliage transparency seen from the side, as FIA rates it: the horizon frames, each weighted by its azimuth.
|
|
98
|
+
* @returns {number}
|
|
99
|
+
*/
|
|
100
|
+
side_transparency(): number;
|
|
101
|
+
/**
|
|
102
|
+
* Crown density seen from directly below: the share of light from above that the crown intercepts over its
|
|
103
|
+
* footprint, as Nowak (1996) measured it.
|
|
104
|
+
* @returns {number}
|
|
105
|
+
*/
|
|
106
|
+
below_density(): number;
|
|
107
|
+
/**
|
|
108
|
+
* Foliage transparency seen from directly below.
|
|
109
|
+
* @returns {number}
|
|
110
|
+
*/
|
|
111
|
+
below_transparency(): number;
|
|
112
|
+
/**
|
|
113
|
+
* @readonly
|
|
114
|
+
* @type {boolean}
|
|
115
|
+
*/
|
|
116
|
+
readonly isCrownOpacity: boolean;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=CrownOpacity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CrownOpacity.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/analysis/CrownOpacity.js"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH;IACI;;;OAGG;IACH,aAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,YAFU,YAAY,CAEW;IAEjC;;;;OAIG;IACH,cAFU,YAAY,CAEa;IAEnC;;;;OAIG;IACH,iBAFU,YAAY,CAEgB;IAEtC;;;OAGG;IACH,SAFU,YAAY,CAEQ;IAE9B;;;;OAIG;IACH,cAFU,YAAY,CAEa;IAEnC;;;OAGG;IACH,cAFU,YAAY,CAEa;IAEnC;;;OAGG;IACH,eAFU,YAAY,CAEc;IAEpC;;;OAGG;IACH,YAFU,MAAM,CAEO;IAEvB;;;OAGG;IACH,YAFU,MAAM,CAED;IAEf;;;OAGG;IACH,kBAFU,MAAM,CAEK;IAErB;;;OAGG;IACH,oBAHW,MAAM,GACJ,IAAI,CAehB;IAED;;;OAGG;IACH,kBAFa,MAAM,CAKlB;IAED;;;OAGG;IACH,gBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,qBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,gBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,qBAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,iBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,sBAFa,MAAM,CAIlB;IAqBL;;;OAGG;IACH,yBAFU,OAAO,CAEoB;CAxBpC"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How opaque a crown is, in the terms of the USDA Forest Inventory and Analysis crown indicators (Schomaker et al.
|
|
3
|
+
* 2007, GTR SRS-102, §2.3.5 and §2.3.7), from orthographic views of everything the renderer draws.
|
|
4
|
+
*
|
|
5
|
+
* The views are the frames of a hemi-octahedral impostor, `frame_count` x `frame_count` of them, frame `(i, j)` at
|
|
6
|
+
* index `j * frame_count + i`. A view and its opposite see the same mirrored image, so the upper hemisphere holds every
|
|
7
|
+
* view once: its rim is the horizon, where FIA rates from, and its centre the vertical, Nowak's (1996) view from below.
|
|
8
|
+
*
|
|
9
|
+
* Produced by `crown_opacity_measure`. Every ratio is in `[0, 1]`; a frame that sees nothing of the crown has `NaN`
|
|
10
|
+
* ratios and zero areas.
|
|
11
|
+
*/
|
|
12
|
+
export class CrownOpacity {
|
|
13
|
+
/**
|
|
14
|
+
* Frames along each side of the grid.
|
|
15
|
+
* @type {number}
|
|
16
|
+
*/
|
|
17
|
+
frame_count = 0;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Unit direction of each frame's view axis, 3 per frame, on the upper hemisphere (y up).
|
|
21
|
+
* @type {Float64Array}
|
|
22
|
+
*/
|
|
23
|
+
directions = new Float64Array(0);
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Solid angle each frame stands for, steradians: the frame's cell of the grid, mapped onto the hemisphere.
|
|
27
|
+
* They sum to `2 PI`.
|
|
28
|
+
* @type {Float64Array}
|
|
29
|
+
*/
|
|
30
|
+
solid_angles = new Float64Array(0);
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Azimuth each horizon frame stands for, radians: half the arc to each of its neighbours on the rim. Zero off the
|
|
34
|
+
* horizon; they sum to `2 PI`.
|
|
35
|
+
* @type {Float64Array}
|
|
36
|
+
*/
|
|
37
|
+
horizon_weights = new Float64Array(0);
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Crown density of each frame: the share of the crown outline that crown stem, branches and foliage block.
|
|
41
|
+
* @type {Float64Array}
|
|
42
|
+
*/
|
|
43
|
+
density = new Float64Array(0);
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Foliage transparency of each frame: the share of skylight through the foliage, over the foliated part of the
|
|
47
|
+
* outline, with branches treated as if light passed them.
|
|
48
|
+
* @type {Float64Array}
|
|
49
|
+
*/
|
|
50
|
+
transparency = new Float64Array(0);
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Area of each frame's crown outline, m^2.
|
|
54
|
+
* @type {Float64Array}
|
|
55
|
+
*/
|
|
56
|
+
outline_area = new Float64Array(0);
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Area of each frame's foliated part of the outline, m^2.
|
|
60
|
+
* @type {Float64Array}
|
|
61
|
+
*/
|
|
62
|
+
foliated_area = new Float64Array(0);
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Height of the live crown base: nothing below it is part of the crown.
|
|
66
|
+
* @type {number}
|
|
67
|
+
*/
|
|
68
|
+
crown_base = -Infinity;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Width of a raster pixel, m.
|
|
72
|
+
* @type {number}
|
|
73
|
+
*/
|
|
74
|
+
pixel_size = 0;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Radius of the closing that separates microholes from the large gaps between foliage, m.
|
|
78
|
+
* @type {number}
|
|
79
|
+
*/
|
|
80
|
+
microhole_radius = 0;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @param {number} frame_count
|
|
84
|
+
* @returns {this}
|
|
85
|
+
*/
|
|
86
|
+
resize(frame_count) {
|
|
87
|
+
if (this.frame_count !== frame_count) {
|
|
88
|
+
const n = frame_count * frame_count;
|
|
89
|
+
this.frame_count = frame_count;
|
|
90
|
+
this.directions = new Float64Array(n * 3);
|
|
91
|
+
this.solid_angles = new Float64Array(n);
|
|
92
|
+
this.horizon_weights = new Float64Array(n);
|
|
93
|
+
this.density = new Float64Array(n);
|
|
94
|
+
this.transparency = new Float64Array(n);
|
|
95
|
+
this.outline_area = new Float64Array(n);
|
|
96
|
+
this.foliated_area = new Float64Array(n);
|
|
97
|
+
}
|
|
98
|
+
return this;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Index of the frame that looks along the vertical, the grid's centre.
|
|
103
|
+
* @returns {number}
|
|
104
|
+
*/
|
|
105
|
+
vertical_frame() {
|
|
106
|
+
const half = (this.frame_count - 1) >> 1;
|
|
107
|
+
return half * this.frame_count + half;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Crown density over every direction, each frame weighted by its solid angle.
|
|
112
|
+
* @returns {number}
|
|
113
|
+
*/
|
|
114
|
+
mean_density() {
|
|
115
|
+
return weighted_mean(this.density, this.solid_angles);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Foliage transparency over every direction, each frame weighted by its solid angle.
|
|
120
|
+
* @returns {number}
|
|
121
|
+
*/
|
|
122
|
+
mean_transparency() {
|
|
123
|
+
return weighted_mean(this.transparency, this.solid_angles);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Crown density seen from the side, as FIA rates it: the horizon frames, each weighted by its azimuth.
|
|
128
|
+
* @returns {number}
|
|
129
|
+
*/
|
|
130
|
+
side_density() {
|
|
131
|
+
return weighted_mean(this.density, this.horizon_weights);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Foliage transparency seen from the side, as FIA rates it: the horizon frames, each weighted by its azimuth.
|
|
136
|
+
* @returns {number}
|
|
137
|
+
*/
|
|
138
|
+
side_transparency() {
|
|
139
|
+
return weighted_mean(this.transparency, this.horizon_weights);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Crown density seen from directly below: the share of light from above that the crown intercepts over its
|
|
144
|
+
* footprint, as Nowak (1996) measured it.
|
|
145
|
+
* @returns {number}
|
|
146
|
+
*/
|
|
147
|
+
below_density() {
|
|
148
|
+
return this.density[this.vertical_frame()];
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Foliage transparency seen from directly below.
|
|
153
|
+
* @returns {number}
|
|
154
|
+
*/
|
|
155
|
+
below_transparency() {
|
|
156
|
+
return this.transparency[this.vertical_frame()];
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* @param {Float64Array} values
|
|
162
|
+
* @param {Float64Array} weights
|
|
163
|
+
* @returns {number}
|
|
164
|
+
*/
|
|
165
|
+
function weighted_mean(values, weights) {
|
|
166
|
+
let sum = 0.0;
|
|
167
|
+
let weight_sum = 0.0;
|
|
168
|
+
for (let i = 0; i < values.length; i++) {
|
|
169
|
+
const w = weights[i];
|
|
170
|
+
if (w > 0) {
|
|
171
|
+
sum += values[i] * w;
|
|
172
|
+
weight_sum += w;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return sum / weight_sum;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* @readonly
|
|
180
|
+
* @type {boolean}
|
|
181
|
+
*/
|
|
182
|
+
CrownOpacity.prototype.isCrownOpacity = true;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lays out the views of a hemi-octahedral impostor grid in `out`, sized to `out.frame_count`: frame `(i, j)` looks
|
|
3
|
+
* along `HemiOctahedralUvEncoder`'s direction for `(i, j) / (frame_count - 1)`, the impostor shader's `FrameXYToRay`.
|
|
4
|
+
* Fills each frame's direction, the solid angle of its cell (half a frame spacing each way, inside the grid), and on
|
|
5
|
+
* the rim, the azimuth it stands for.
|
|
6
|
+
*
|
|
7
|
+
* @param {import("./CrownOpacity.js").CrownOpacity} out
|
|
8
|
+
*/
|
|
9
|
+
export function crown_opacity_frames(out: import("./CrownOpacity.js").CrownOpacity): void;
|
|
10
|
+
//# sourceMappingURL=crown_opacity_frames.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crown_opacity_frames.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/analysis/crown_opacity_frames.js"],"names":[],"mappings":"AAiEA;;;;;;;GAOG;AACH,0CAFW,OAAO,mBAAmB,EAAE,YAAY,QAkClD"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { HemiOctahedralUvEncoder } from "../../../engine/graphics/impostors/octahedral/grid/HemiOctahedralUvEncoder.js";
|
|
3
|
+
|
|
4
|
+
const encoder = new HemiOctahedralUvEncoder();
|
|
5
|
+
const scratch_uv = new Float64Array(2);
|
|
6
|
+
const scratch_direction = new Float64Array(3);
|
|
7
|
+
const scratch_a = new Float64Array(3);
|
|
8
|
+
const scratch_b = new Float64Array(3);
|
|
9
|
+
const scratch_c = new Float64Array(3);
|
|
10
|
+
const scratch_d = new Float64Array(3);
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The hemi-octahedron point over `(x, z)` on the unit sphere, `x`, `z` the encoder's in-plane coordinates.
|
|
14
|
+
* @param {Float64Array} out
|
|
15
|
+
* @param {number} x
|
|
16
|
+
* @param {number} z
|
|
17
|
+
*/
|
|
18
|
+
function lift(out, x, z) {
|
|
19
|
+
const y = 1.0 - Math.abs(x) - Math.abs(z);
|
|
20
|
+
const m = 1.0 / Math.sqrt(x * x + y * y + z * z);
|
|
21
|
+
out[0] = x * m;
|
|
22
|
+
out[1] = y * m;
|
|
23
|
+
out[2] = z * m;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Solid angle of the spherical triangle over three unit vectors (Van Oosterom and Strackee 1983).
|
|
28
|
+
* @param {Float64Array} a
|
|
29
|
+
* @param {Float64Array} b
|
|
30
|
+
* @param {Float64Array} c
|
|
31
|
+
* @returns {number}
|
|
32
|
+
*/
|
|
33
|
+
function spherical_triangle_solid_angle(a, b, c) {
|
|
34
|
+
const triple = a[0] * (b[1] * c[2] - b[2] * c[1])
|
|
35
|
+
+ a[1] * (b[2] * c[0] - b[0] * c[2])
|
|
36
|
+
+ a[2] * (b[0] * c[1] - b[1] * c[0]);
|
|
37
|
+
const ab = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
38
|
+
const bc = b[0] * c[0] + b[1] * c[1] + b[2] * c[2];
|
|
39
|
+
const ca = c[0] * a[0] + c[1] * a[1] + c[2] * a[2];
|
|
40
|
+
return 2.0 * Math.abs(Math.atan2(triple, 1.0 + ab + bc + ca));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Solid angle of a frame's cell `[u0, u1] x [v0, v1]` of the grid, its corners on the sphere `a, b, c, d` in order.
|
|
45
|
+
*
|
|
46
|
+
* The encoder maps the cell linearly onto the hemi-octahedron. Its creases, `u = v` and `u + v = 1`, run through
|
|
47
|
+
* the frames and meet the cells' edges only at their corners, so each edge lies on one face, where a straight line
|
|
48
|
+
* projects to a great-circle arc: the cell is the spherical quadrilateral on its corners, exactly.
|
|
49
|
+
*
|
|
50
|
+
* @param {number} u0
|
|
51
|
+
* @param {number} v0
|
|
52
|
+
* @param {number} u1
|
|
53
|
+
* @param {number} v1
|
|
54
|
+
* @returns {number}
|
|
55
|
+
*/
|
|
56
|
+
function cell_solid_angle(u0, v0, u1, v1) {
|
|
57
|
+
// the encoder's x = u - v, z = u + v - 1
|
|
58
|
+
lift(scratch_a, u0 - v0, u0 + v0 - 1);
|
|
59
|
+
lift(scratch_b, u1 - v0, u1 + v0 - 1);
|
|
60
|
+
lift(scratch_c, u1 - v1, u1 + v1 - 1);
|
|
61
|
+
lift(scratch_d, u0 - v1, u0 + v1 - 1);
|
|
62
|
+
return spherical_triangle_solid_angle(scratch_a, scratch_b, scratch_c)
|
|
63
|
+
+ spherical_triangle_solid_angle(scratch_a, scratch_c, scratch_d);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Lays out the views of a hemi-octahedral impostor grid in `out`, sized to `out.frame_count`: frame `(i, j)` looks
|
|
68
|
+
* along `HemiOctahedralUvEncoder`'s direction for `(i, j) / (frame_count - 1)`, the impostor shader's `FrameXYToRay`.
|
|
69
|
+
* Fills each frame's direction, the solid angle of its cell (half a frame spacing each way, inside the grid), and on
|
|
70
|
+
* the rim, the azimuth it stands for.
|
|
71
|
+
*
|
|
72
|
+
* @param {import("./CrownOpacity.js").CrownOpacity} out
|
|
73
|
+
*/
|
|
74
|
+
export function crown_opacity_frames(out) {
|
|
75
|
+
const N = out.frame_count;
|
|
76
|
+
assert.greaterThanOrEqual(N, 2, 'frame_count');
|
|
77
|
+
|
|
78
|
+
const h = 1 / (N - 1);
|
|
79
|
+
|
|
80
|
+
for (let j = 0; j < N; j++) {
|
|
81
|
+
for (let i = 0; i < N; i++) {
|
|
82
|
+
const f = j * N + i;
|
|
83
|
+
scratch_uv[0] = i * h;
|
|
84
|
+
scratch_uv[1] = j * h;
|
|
85
|
+
encoder.uv_to_unit(scratch_direction, scratch_uv);
|
|
86
|
+
out.directions[f * 3] = scratch_direction[0];
|
|
87
|
+
out.directions[f * 3 + 1] = scratch_direction[1];
|
|
88
|
+
out.directions[f * 3 + 2] = scratch_direction[2];
|
|
89
|
+
|
|
90
|
+
out.solid_angles[f] = cell_solid_angle(
|
|
91
|
+
Math.max(0, (i - 0.5) * h), Math.max(0, (j - 0.5) * h),
|
|
92
|
+
Math.min(1, (i + 0.5) * h), Math.min(1, (j + 0.5) * h)
|
|
93
|
+
);
|
|
94
|
+
out.horizon_weights[f] = 0;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// the rim, in order around the grid's border
|
|
99
|
+
const rim_count = 4 * (N - 1);
|
|
100
|
+
for (let r = 0; r < rim_count; r++) {
|
|
101
|
+
const f = rim_frame(N, r);
|
|
102
|
+
const prev = rim_frame(N, (r + rim_count - 1) % rim_count);
|
|
103
|
+
const next = rim_frame(N, (r + 1) % rim_count);
|
|
104
|
+
out.horizon_weights[f] = 0.5 * (azimuth_between(out.directions, prev, f) + azimuth_between(out.directions, f, next));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Frame index of the `r`-th frame around the grid's border.
|
|
110
|
+
* @param {number} N
|
|
111
|
+
* @param {number} r
|
|
112
|
+
* @returns {number}
|
|
113
|
+
*/
|
|
114
|
+
function rim_frame(N, r) {
|
|
115
|
+
const side = N - 1;
|
|
116
|
+
if (r < side) return r;
|
|
117
|
+
if (r < 2 * side) return (r - side) * N + side;
|
|
118
|
+
if (r < 3 * side) return side * N + (3 * side - r);
|
|
119
|
+
return (4 * side - r) * N;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @param {Float64Array} directions
|
|
124
|
+
* @param {number} a
|
|
125
|
+
* @param {number} b
|
|
126
|
+
* @returns {number} the azimuth between two horizon frames, radians
|
|
127
|
+
*/
|
|
128
|
+
function azimuth_between(directions, a, b) {
|
|
129
|
+
let d = Math.atan2(directions[b * 3 + 2], directions[b * 3]) - Math.atan2(directions[a * 3 + 2], directions[a * 3]);
|
|
130
|
+
d = ((d % (2 * Math.PI)) + 3 * Math.PI) % (2 * Math.PI) - Math.PI;
|
|
131
|
+
return Math.abs(d);
|
|
132
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Measures how opaque a tree crown is, as the USDA Forest Inventory and Analysis program rates it in the field
|
|
3
|
+
* (Schomaker et al. 2007, GTR SRS-102), by rasterising what the renderer draws in orthographic views from every frame
|
|
4
|
+
* of a `frame_count` x `frame_count` hemi-octahedral impostor grid (`crown_opacity_frames`). A view and its opposite
|
|
5
|
+
* see mirrored images of the same transmittance, so the hemisphere holds every view once; the grid's rim is the
|
|
6
|
+
* horizon, where FIA rates from, and its centre the view from directly below. Rim frames come in opposite pairs, and
|
|
7
|
+
* each pair is measured once.
|
|
8
|
+
*
|
|
9
|
+
* - **Crown**: everything above the live crown base, which is the lowest foliage reached from the top without a
|
|
10
|
+
* vertical gap in foliage wider than the FIA five-foot rule's 1.524 m. Nothing below it is drawn.
|
|
11
|
+
* - **Crown outline**: the convex hull of every pixel the crown draws (bark or foliage), with every gap inside it.
|
|
12
|
+
* - **Crown density**: the mean of `1 - T` over the outline, `T` the transmittance of bark and foliage together.
|
|
13
|
+
* From below, over the footprint, this is the light the crown intercepts (Nowak 1996).
|
|
14
|
+
* - **Foliated part**: FIA rates transparency "where foliage or remnants of foliage occur", excluding macroholes
|
|
15
|
+
* and "the spaces between clumps of foliage" (§2.3.7). Here it is the morphological closing of the foliage's pixels
|
|
16
|
+
* by a ball of `microhole_radius`, inside the outline: gaps narrower than two radii are microholes, wider ones are
|
|
17
|
+
* large gaps and drop out.
|
|
18
|
+
* - **Foliage transparency**: the mean foliage-only transmittance over the foliated part. Bark does not count, as
|
|
19
|
+
* FIA's raters "exclude the branches from foliage ... as if the light were penetrating the branches".
|
|
20
|
+
*
|
|
21
|
+
* Each pixel is a point sample of what the renderer draws there. The outline and the foliated part are extremes over
|
|
22
|
+
* those samples, and grow as finer pixels catch thinner twigs and leaf stalks, so the pixel size is part of the
|
|
23
|
+
* definition: by default it is what a rater sees, one minute of arc (normal acuity) from one tree length away, the
|
|
24
|
+
* tree's length being the height of everything drawn.
|
|
25
|
+
*
|
|
26
|
+
* `leaf_transmittance` is the fraction of the light a leaf lets through where it covers. Our shading model has no
|
|
27
|
+
* leaf translucency, so it defaults to 0; it is the hook for when the shading model gains one.
|
|
28
|
+
*
|
|
29
|
+
* @param {import("../../../shade/renderer/geometry/Geometry.js").Geometry|null} bark opaque geometry
|
|
30
|
+
* @param {import("../../../shade/renderer/geometry/Geometry.js").Geometry|null} foliage cards, `uv0` into `atlas`
|
|
31
|
+
* @param {Sampler2D|null} atlas the cards' texture; required with `foliage`
|
|
32
|
+
* @param {Object} options
|
|
33
|
+
* @param {number} options.microhole_radius closing radius separating microholes from large gaps, m
|
|
34
|
+
* @param {number} [options.pixel_size] m, the tree's height times the tangent of one minute of arc by default
|
|
35
|
+
* @param {number} [options.frame_count=9] frames along each side of the grid; odd, so the vertical is a frame. At 9
|
|
36
|
+
* every preset's hemisphere means are within 0.2 points of 13's; 5 is off by up to 1.6, 3 by up to 5.8
|
|
37
|
+
* @param {number} [options.leaf_transmittance=0] fraction of light a leaf passes, in `[0, 1]`
|
|
38
|
+
* @param {number} [options.atlas_alpha_channel=3] channel of `atlas` holding the cards' coverage
|
|
39
|
+
* @param {CrownOpacity} [out]
|
|
40
|
+
* @returns {CrownOpacity}
|
|
41
|
+
*/
|
|
42
|
+
export function crown_opacity_measure(bark: import("../../../shade/renderer/geometry/Geometry.js").Geometry | null, foliage: import("../../../shade/renderer/geometry/Geometry.js").Geometry | null, atlas: Sampler2D | null, { microhole_radius, pixel_size, frame_count, leaf_transmittance, atlas_alpha_channel }: {
|
|
43
|
+
microhole_radius: number;
|
|
44
|
+
pixel_size?: number;
|
|
45
|
+
frame_count?: number;
|
|
46
|
+
leaf_transmittance?: number;
|
|
47
|
+
atlas_alpha_channel?: number;
|
|
48
|
+
}, out?: CrownOpacity): CrownOpacity;
|
|
49
|
+
import { Sampler2D } from "../../../engine/graphics/texture/sampler/Sampler2D.js";
|
|
50
|
+
import { CrownOpacity } from "./CrownOpacity.js";
|
|
51
|
+
//# sourceMappingURL=crown_opacity_measure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crown_opacity_measure.d.ts","sourceRoot":"","sources":["../../../../../src/generation/foliage/analysis/crown_opacity_measure.js"],"names":[],"mappings":"AAmdA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,4CAbW,OAAO,8CAA8C,EAAE,QAAQ,GAAC,IAAI,WACpE,OAAO,8CAA8C,EAAE,QAAQ,GAAC,IAAI,SACpE,SAAS,GAAC,IAAI;IAEE,gBAAgB,EAAhC,MAAM;IACW,UAAU,GAA3B,MAAM;IACW,WAAW,GAA5B,MAAM;IAEW,kBAAkB,GAAnC,MAAM;IACW,mBAAmB,GAApC,MAAM;SACN,YAAY,GACV,YAAY,CA8IxB;0BAjoByB,uDAAuD;6BAEpD,mBAAmB"}
|