@woosh/meep-engine 3.57.0 → 3.59.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/editor/ecs/component/editors/ColorEditor.js +2 -2
- package/editor/particles/effect/ParticleEffectDocument.d.ts +162 -43
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
- package/editor/particles/effect/ParticleEffectDocument.js +452 -48
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts +12 -3
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
- package/editor/particles/effect/ParticleReferenceSimulation.js +78 -23
- package/editor/particles/effect/make_starter_particle_effect.js +17 -17
- package/editor/tools/GridPaintTool.js +2 -2
- package/editor/view/node-graph/NodeGraphEditorView.d.ts +1 -1
- package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphEditorView.js +2 -2
- package/editor/view/node-graph/NodeGraphView.d.ts +0 -1
- package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphView.js +0 -2
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts +3 -3
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleEmitterInspectorView.js +224 -67
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleGraphEditorView.js +44 -11
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts +2 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.js +46 -16
- package/editor/view/particles/effect/ParticlePreviewView.js +2 -2
- package/editor/view/particles/effect/particle-editor.css +77 -68
- package/package.json +1 -1
- package/src/core/bvh8/build/NodeProxy.js +2 -2
- package/src/core/bvh8/build/aabb3_compute_merge_cost.js +4 -4
- package/src/core/bvh8/build/bvh8_build_for_geometry.js +2 -2
- package/src/core/geom/2d/line/line2_segment_intersection_fraction_2d.d.ts +1 -1
- package/src/core/geom/2d/line/line2_segment_intersection_fraction_2d.js +1 -1
- package/src/core/geom/2d/triangle/tri2_intersects_aabb2.d.ts +17 -0
- package/src/core/geom/2d/triangle/tri2_intersects_aabb2.d.ts.map +1 -0
- package/src/core/geom/2d/triangle/tri2_intersects_aabb2.js +64 -0
- package/src/core/geom/2d/triangle/tri2_rasterize_barycentric.d.ts +23 -0
- package/src/core/geom/2d/triangle/tri2_rasterize_barycentric.d.ts.map +1 -0
- package/src/core/geom/2d/triangle/tri2_rasterize_barycentric.js +81 -0
- package/src/core/geom/2d/triangle/tri2_rasterize_conservative.d.ts.map +1 -1
- package/src/core/geom/2d/triangle/tri2_rasterize_conservative.js +36 -99
- package/src/core/geom/3d/aabb/aabb3_build_frustum.d.ts +0 -11
- package/src/core/geom/3d/aabb/aabb3_build_frustum.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_build_frustum.js +15 -20
- package/src/core/geom/3d/box/box3_raycast.d.ts +1 -1
- package/src/core/geom/3d/box/box3_raycast.js +1 -1
- package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.d.ts +1 -1
- package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.js +1 -1
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts +3 -3
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.js +3 -3
- package/src/core/geom/3d/shape/HeightMapShape3D.js +2 -2
- package/src/core/geom/3d/shape/MeshShape3D.d.ts +2 -2
- package/src/core/geom/3d/shape/MeshShape3D.js +2 -2
- package/src/core/geom/3d/shape/PosedShape3D.js +2 -2
- package/src/core/geom/3d/sphere/sphere_matrix4_transform.d.ts +0 -7
- package/src/core/geom/3d/sphere/sphere_matrix4_transform.d.ts.map +1 -1
- package/src/core/geom/3d/sphere/sphere_matrix4_transform.js +0 -4
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_compute_tet_quality.d.ts +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_compute_tet_quality.js +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.d.ts +1 -1
- package/src/core/geom/3d/tetrahedra/tetrahedron_compute_quality.js +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.d.ts +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_face_decouple.js +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_fuse_duplicate_edges.d.ts +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_fuse_duplicate_edges.js +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.d.ts +2 -2
- package/src/core/geom/3d/topology/struct/binary/io/edge/bt_mesh_kill_short_edges.js +2 -2
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.d.ts +0 -14
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/io/face/bt_face_poke.js +0 -5
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vertex_replace.js +151 -151
- package/src/core/geom/3d/topology/struct/binary/query/bt_edge_collapse_fold_limit.js +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_vertex_adjacent_faces.d.ts +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_vertex_adjacent_faces.js +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_face_bvh.d.ts.map +1 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_build_face_bvh.js +1 -2
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_surface_ray_parity.d.ts +0 -8
- 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 +25 -36
- package/src/core/geom/clipmap/ClipmapCascadePlacement.d.ts +137 -0
- package/src/core/geom/clipmap/ClipmapCascadePlacement.d.ts.map +1 -0
- package/src/core/geom/clipmap/ClipmapCascadePlacement.js +350 -0
- package/src/core/geom/polyline/polyline_simplify_by_error.d.ts +16 -0
- package/src/core/geom/polyline/polyline_simplify_by_error.d.ts.map +1 -0
- package/src/core/geom/polyline/polyline_simplify_by_error.js +52 -0
- package/src/core/geom/vec3/v3_quaternion_apply.d.ts +1 -1
- package/src/core/geom/vec3/v3_quaternion_apply.js +1 -1
- package/src/core/geom/vec3/v3_quaternion_apply_inverse.d.ts +2 -2
- package/src/core/geom/vec3/v3_quaternion_apply_inverse.js +2 -2
- package/src/core/geom/vec3/v3_triple_cross.d.ts +1 -1
- package/src/core/geom/vec3/v3_triple_cross.js +1 -1
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +2 -2
- package/src/engine/asset/preloader/AssetPreloader.d.ts +0 -5
- package/src/engine/asset/preloader/AssetPreloader.d.ts.map +1 -1
- package/src/engine/asset/preloader/AssetPreloader.js +0 -6
- package/src/engine/ecs/EntityManager.d.ts +29 -5
- package/src/engine/ecs/EntityManager.d.ts.map +1 -1
- package/src/engine/ecs/EntityManager.js +37 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +4 -0
- package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts.map +1 -1
- package/src/engine/ecs/terrain/tiles/TerrainTile.js +25 -12
- package/src/engine/graphics/ecs/decal/v2/Decal.d.ts +2 -2
- package/src/engine/graphics/ecs/decal/v2/Decal.js +2 -2
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +420 -418
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.d.ts +1 -0
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +10 -0
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +74 -17
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.js +159 -28
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts +13 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.js +59 -13
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts +3 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.js +9 -9
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.d.ts +15 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.d.ts.map +1 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_2_3.js +78 -0
- package/src/engine/graphics/ecs/path/tube/build/makeTubeStream.js +2 -2
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +2 -0
- package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail3d/Trail3D.js +2 -0
- package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +1 -1
- package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +1 -1
- package/src/engine/graphics/geometry/buffered/build_height_field_geometry.d.ts +12 -0
- package/src/engine/graphics/geometry/buffered/build_height_field_geometry.d.ts.map +1 -1
- package/src/engine/graphics/geometry/buffered/build_height_field_geometry.js +29 -2
- package/src/engine/graphics/texture/sprite/prototypeSpriteCutoutGeometry.js +1 -1
- package/src/engine/graphics/trail/tube/TubeX.d.ts +5 -3
- package/src/engine/graphics/trail/tube/TubeX.d.ts.map +1 -1
- package/src/engine/graphics/trail/tube/TubeX.js +5 -3
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +3 -2
- package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +1 -1
- package/src/engine/graphics/trail/tube/tube_attributes_spec.js +9 -8
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +65 -4
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +1351 -904
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +2 -1
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem.js +7 -5
- package/src/engine/graphics3/Trail3DSystem.d.ts +1 -1
- package/src/engine/graphics3/Trail3DSystem.js +1 -1
- package/src/engine/graphics3/WaterSystem.d.ts +60 -0
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +733 -300
- package/src/engine/graphics3/make_default_environment.d.ts.map +1 -1
- package/src/engine/graphics3/make_default_environment.js +2 -4
- package/src/engine/graphics3/prefab/prefab_place.js +1 -1
- package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +1 -1
- package/src/engine/graphics3/trail/trail_tube_write_geometry.js +13 -13
- package/src/engine/navigation/mesh/build/clip_soup_against_overhangs.js +628 -628
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/engine/physics/inertia/world_inverse_inertia.js +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +1 -1
- package/src/engine/sound/simulation/render/reverbImpulseResponse.d.ts +0 -1
- package/src/engine/sound/simulation/render/reverbImpulseResponse.d.ts.map +1 -1
- package/src/engine/sound/simulation/render/reverbImpulseResponse.js +0 -6
- package/src/engine/sound/simulation/render/reverb_band_tails.d.ts +1 -1
- package/src/engine/sound/simulation/render/reverb_band_tails.js +1 -1
- package/src/engine/sound/sopra/runtime/EventInstance.js +1 -1
- package/src/generation/foliage/CROWN_FULLNESS_BRIEF_2026_10_26.md +86 -0
- package/src/generation/foliage/FOLIAGE_DESIGN.md +110 -32
- package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +521 -0
- package/src/generation/foliage/REAL_TIME_TREES_BRIEF_2026_10_27.md +86 -0
- package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +347 -0
- package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +552 -0
- package/src/generation/foliage/analysis/crown_opacity_measure.d.ts.map +1 -1
- package/src/generation/foliage/analysis/crown_opacity_measure.js +80 -102
- package/src/generation/foliage/analysis/foliage_measure_leaf_area.d.ts.map +1 -1
- package/src/generation/foliage/analysis/foliage_measure_leaf_area.js +1 -7
- package/src/generation/foliage/analysis/tree_crown_opacity.d.ts.map +1 -1
- package/src/generation/foliage/analysis/tree_crown_opacity.js +3 -2
- package/src/generation/foliage/analysis/tree_leaf_area_targets.d.ts +66 -0
- package/src/generation/foliage/analysis/tree_leaf_area_targets.d.ts.map +1 -0
- package/src/generation/foliage/analysis/tree_leaf_area_targets.js +95 -0
- package/src/generation/foliage/analysis/tree_render_cost.d.ts +90 -0
- package/src/generation/foliage/analysis/tree_render_cost.d.ts.map +1 -0
- package/src/generation/foliage/analysis/tree_render_cost.js +158 -0
- package/src/generation/foliage/asset/TreeAsset.d.ts +24 -6
- package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -1
- package/src/generation/foliage/asset/TreeAsset.js +29 -6
- package/src/generation/foliage/asset/TreeLODAsset.d.ts +24 -11
- package/src/generation/foliage/asset/TreeLODAsset.d.ts.map +1 -1
- package/src/generation/foliage/asset/TreeLODAsset.js +49 -20
- package/src/generation/foliage/asset/TreeSpeciesCache.d.ts +69 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.d.ts.map +1 -0
- package/src/generation/foliage/asset/TreeSpeciesCache.js +147 -0
- package/src/generation/foliage/asset/generate_tree.d.ts +21 -0
- package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -1
- package/src/generation/foliage/asset/generate_tree.js +123 -21
- package/src/generation/foliage/asset/place_tree.d.ts +2 -1
- package/src/generation/foliage/asset/place_tree.d.ts.map +1 -1
- package/src/generation/foliage/asset/place_tree.js +2 -1
- package/src/generation/foliage/asset/tree_lod_plan.d.ts +73 -0
- package/src/generation/foliage/asset/tree_lod_plan.d.ts.map +1 -0
- package/src/generation/foliage/asset/tree_lod_plan.js +117 -0
- package/src/generation/foliage/asset/tree_shoot_instances.d.ts +119 -0
- package/src/generation/foliage/asset/tree_shoot_instances.d.ts.map +1 -0
- package/src/generation/foliage/asset/tree_shoot_instances.js +410 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.d.ts +155 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.d.ts.map +1 -0
- package/src/generation/foliage/asset/tree_shoot_prototypes.js +251 -0
- package/src/generation/foliage/config/BranchGeneratorConfig.d.ts +0 -10
- package/src/generation/foliage/config/BranchGeneratorConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/BranchGeneratorConfig.js +1 -23
- package/src/generation/foliage/config/ShootGrowthConfig.d.ts +45 -10
- package/src/generation/foliage/config/ShootGrowthConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/ShootGrowthConfig.js +70 -16
- package/src/generation/foliage/config/ShootSystemRule.d.ts +12 -12
- package/src/generation/foliage/config/ShootSystemRule.d.ts.map +1 -1
- package/src/generation/foliage/config/ShootSystemRule.js +24 -20
- package/src/generation/foliage/config/TreeGrowth.d.ts +10 -0
- package/src/generation/foliage/config/TreeGrowth.d.ts.map +1 -0
- package/src/generation/foliage/config/TreeGrowth.js +18 -0
- package/src/generation/foliage/config/TreeLODConfig.d.ts +20 -37
- package/src/generation/foliage/config/TreeLODConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/TreeLODConfig.js +30 -116
- package/src/generation/foliage/config/TreeSpeciesConfig.d.ts +2 -1
- package/src/generation/foliage/config/TreeSpeciesConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/TreeSpeciesConfig.js +2 -7
- package/src/generation/foliage/index.d.ts +3 -0
- package/src/generation/foliage/index.js +3 -0
- package/src/generation/foliage/material/foliage_atlas_cutout.d.ts +6 -4
- package/src/generation/foliage/material/foliage_atlas_cutout.d.ts.map +1 -1
- package/src/generation/foliage/material/foliage_atlas_cutout.js +32 -27
- package/src/generation/foliage/material/foliage_material_from_samplers.d.ts +13 -0
- package/src/generation/foliage/material/foliage_material_from_samplers.d.ts.map +1 -0
- package/src/generation/foliage/material/foliage_material_from_samplers.js +69 -0
- package/src/generation/foliage/material/foliage_tile.d.ts +19 -0
- package/src/generation/foliage/material/foliage_tile.d.ts.map +1 -1
- package/src/generation/foliage/material/foliage_tile.js +9 -1
- package/src/generation/foliage/material/leaf_geometry.d.ts +7 -0
- package/src/generation/foliage/material/leaf_geometry.d.ts.map +1 -1
- package/src/generation/foliage/material/leaf_geometry.js +21 -9
- package/src/generation/foliage/material/make_foliage_material.d.ts +2 -3
- package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -1
- package/src/generation/foliage/material/make_foliage_material.js +3 -57
- package/src/generation/foliage/material/tree_cluster_atlas.d.ts +44 -0
- package/src/generation/foliage/material/tree_cluster_atlas.d.ts.map +1 -0
- package/src/generation/foliage/material/tree_cluster_atlas.js +37 -0
- package/src/generation/foliage/material/tree_cluster_atlas_pack.d.ts +14 -0
- package/src/generation/foliage/material/tree_cluster_atlas_pack.d.ts.map +1 -0
- package/src/generation/foliage/material/tree_cluster_atlas_pack.js +28 -0
- package/src/generation/foliage/material/tree_cluster_bake.d.ts +74 -0
- package/src/generation/foliage/material/tree_cluster_bake.d.ts.map +1 -0
- package/src/generation/foliage/material/tree_cluster_bake.js +415 -0
- package/src/generation/foliage/material/tree_cluster_press.d.ts +18 -0
- package/src/generation/foliage/material/tree_cluster_press.d.ts.map +1 -0
- package/src/generation/foliage/material/tree_cluster_press.js +83 -0
- package/src/generation/foliage/material/tree_cluster_tiles.d.ts +46 -0
- package/src/generation/foliage/material/tree_cluster_tiles.d.ts.map +1 -0
- package/src/generation/foliage/material/tree_cluster_tiles.js +75 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +22 -4
- package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -1
- package/src/generation/foliage/mesh/foliage_collect_attachments.js +28 -16
- package/src/generation/foliage/mesh/foliage_scale_spread.d.ts +14 -0
- package/src/generation/foliage/mesh/foliage_scale_spread.d.ts.map +1 -0
- package/src/generation/foliage/mesh/foliage_scale_spread.js +15 -0
- package/src/generation/foliage/mesh/tree_cluster_cards.d.ts +61 -0
- package/src/generation/foliage/mesh/tree_cluster_cards.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_cluster_cards.js +114 -0
- package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts +122 -0
- package/src/generation/foliage/mesh/tree_cluster_representatives.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_cluster_representatives.js +354 -0
- package/src/generation/foliage/mesh/tree_clusters.d.ts +92 -0
- package/src/generation/foliage/mesh/tree_clusters.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_clusters.js +187 -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 +609 -226
- package/src/generation/foliage/mesh/tree_mesh_build_clusters.d.ts +25 -0
- package/src/generation/foliage/mesh/tree_mesh_build_clusters.d.ts.map +1 -0
- package/src/generation/foliage/mesh/tree_mesh_build_clusters.js +144 -0
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +7 -10
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +13 -39
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts +6 -1
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -1
- package/src/generation/foliage/presets/make_tree_species_preset.js +235 -209
- package/src/generation/foliage/skeleton/ShootFrameworkHash.d.ts +5 -2
- package/src/generation/foliage/skeleton/ShootFrameworkHash.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/ShootFrameworkHash.js +13 -8
- package/src/generation/foliage/skeleton/ShootGirth.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/ShootGirth.js +6 -5
- package/src/generation/foliage/skeleton/ShootLightField.d.ts +9 -0
- package/src/generation/foliage/skeleton/ShootLightField.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/ShootLightField.js +25 -0
- package/src/generation/foliage/skeleton/ShootWoodHash.d.ts +89 -0
- package/src/generation/foliage/skeleton/ShootWoodHash.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/ShootWoodHash.js +195 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +25 -0
- package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/TreeSkeleton.js +50 -0
- package/src/generation/foliage/skeleton/shoot_demography.d.ts +17 -4
- package/src/generation/foliage/skeleton/shoot_demography.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/shoot_demography.js +22 -6
- package/src/generation/foliage/skeleton/shoot_geometry.d.ts +5 -6
- package/src/generation/foliage/skeleton/shoot_geometry.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/shoot_geometry.js +29 -12
- package/src/generation/foliage/skeleton/shoot_systems_simulate.d.ts +43 -4
- package/src/generation/foliage/skeleton/shoot_systems_simulate.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/shoot_systems_simulate.js +537 -70
- package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts +30 -5
- 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 +46 -10
- package/src/generation/foliage/skeleton/tree_skeleton_bind_skin_joints.d.ts +10 -0
- package/src/generation/foliage/skeleton/tree_skeleton_bind_skin_joints.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_bind_skin_joints.js +12 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts +5 -0
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_compute_joint_mechanics.js +8 -1
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.d.ts +70 -0
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_copy_branches.js +171 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.d.ts +17 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_extend_branch.js +79 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.d.ts +12 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_fit_crown_frame.js +56 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.d.ts +11 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_floor_girth.js +38 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +4 -11
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow.js +8 -2033
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.d.ts +22 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.d.ts.map +1 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_framework.js +2050 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts +14 -0
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow_shoots.js +74 -7
- package/src/shade/descriptor/binding/BindGroupLayoutEntry.js +6 -6
- package/src/shade/descriptor/pipeline/render/ColorTargetState.js +2 -2
- package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/DepthStencilState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/DepthStencilState.js +170 -144
- package/src/shade/descriptor/pipeline/render/MultisampleState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/MultisampleState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/MultisampleState.js +78 -65
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +176 -172
- package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts +4 -0
- package/src/shade/descriptor/pipeline/render/StencilFaceState.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/render/StencilFaceState.js +107 -88
- package/src/shade/playground/additive_blending/main.js +529 -529
- package/src/shade/playground/avboit/main.js +1 -1
- package/src/shade/playground/basis_textures/main.js +365 -365
- package/src/shade/playground/caldera/main.js +1 -1
- package/src/shade/playground/contact_shadows/main.js +1 -1
- package/src/shade/playground/foliage_wind/main.js +289 -289
- package/src/shade/playground/mesh_row_ceiling/main.js +1 -1
- package/src/shade/playground/particle_ecs/README.md +9 -8
- package/src/shade/playground/particle_ecs/bonfire_editor.js +3 -3
- package/src/shade/playground/particle_ecs/bonfire_effects.d.ts +6 -6
- package/src/shade/playground/particle_ecs/bonfire_effects.js +6 -6
- package/src/shade/playground/particle_ecs/main.js +1 -1
- package/src/shade/playground/particle_editor/README.md +14 -11
- package/src/shade/playground/particle_system/main.js +1 -1
- package/src/shade/playground/particle_system/particle_prototype.js +18 -18
- package/src/shade/playground/particle_system/particle_scene.js +13 -13
- package/src/shade/playground/probe_clipmap/README.md +42 -0
- package/src/shade/playground/probe_clipmap/index.html +178 -0
- package/src/shade/playground/probe_clipmap/main.d.ts +8 -0
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -0
- package/src/shade/playground/probe_clipmap/main.js +360 -0
- package/src/shade/playground/sh_exponential/main.js +1 -1
- package/src/shade/playground/skinned_blas_refit/main.js +1 -1
- package/src/shade/playground/skinned_mesh_soup/main.js +1 -1
- package/src/shade/playground/sponza_path_trace/main.js +1 -1
- package/src/shade/playground/ssr_motion/main.js +1 -1
- package/src/shade/playground/ssr_reprojection/main.js +1 -1
- package/src/shade/playground/tonemap_sdr/main.js +1 -1
- package/src/shade/playground/vgeo_runtime/main.js +1 -1
- package/src/shade/playground/vgeo_scene/main.js +1 -1
- package/src/shade/playground/volumetrics_froxel/main.js +1 -1
- package/src/shade/playground/vsm/index.html +4 -1
- package/src/shade/playground/vsm/main.d.ts.map +1 -1
- package/src/shade/playground/vsm/main.js +8 -5
- package/src/shade/playground/water_refraction/main.js +1 -1
- package/src/shade/playground/water_surface/main.js +1 -1
- package/src/shade/renderer/Renderer.d.ts +16 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +225 -40
- package/src/shade/renderer/ShadeIndirectLightingMode.d.ts +1 -0
- package/src/shade/renderer/ShadeIndirectLightingMode.js +6 -0
- package/src/shade/renderer/camera/orbital/README.md +3 -6
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_restir.d.ts +1 -1
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_restir.js +1 -1
- package/src/shade/renderer/extension/ViewTextures.d.ts +2 -1
- package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/ViewTextures.js +2 -1
- package/src/shade/renderer/fluid/FluidCascadePlacement.d.ts +8 -105
- package/src/shade/renderer/fluid/FluidCascadePlacement.d.ts.map +1 -1
- package/src/shade/renderer/fluid/FluidCascadePlacement.js +13 -306
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_command.d.ts.map +1 -1
- package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_command.js +8 -14
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/geometry/BoxGeometry.d.ts +0 -1
- package/src/shade/renderer/geometry/BoxGeometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/BoxGeometry.js +0 -9
- package/src/shade/renderer/geometry/GPUGeometryManager.d.ts +4 -2
- package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/GPUGeometryManager.js +13 -2
- package/src/shade/renderer/geometry/Geometry.js +2 -2
- package/src/shade/renderer/geometry/blas_from_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/blas_from_meshlets.js +12 -2
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +18 -0
- package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/bvh2_derive_topology.js +5 -0
- package/src/shade/renderer/geometry/mesh_compute_surface_area.js +4 -4
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts +5 -0
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +15 -0
- package/src/shade/renderer/geometry/meshlet_batch_to_bvh.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet_batch_to_bvh.js +35 -26
- package/src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet_geometry_build_from_geometry.js +2 -1
- package/src/shade/renderer/geometry/normals/decode_octahedral_u32_to_normal.d.ts +13 -0
- package/src/shade/renderer/geometry/normals/decode_octahedral_u32_to_normal.d.ts.map +1 -0
- package/src/shade/renderer/geometry/normals/decode_octahedral_u32_to_normal.js +33 -0
- package/src/shade/renderer/geometry/normals/geometry_build_tangents.js +7 -7
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +189 -45
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +1853 -144
- package/src/shade/renderer/geometry/sdf/MESH_SDF.d.ts +60 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF.js +62 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_RESOURCES.d.ts +29 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_RESOURCES.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_RESOURCES.js +41 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_STRUCT.d.ts +12 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_STRUCT.js +53 -0
- package/src/shade/renderer/geometry/sdf/MeshSDFLayout.d.ts +79 -0
- package/src/shade/renderer/geometry/sdf/MeshSDFLayout.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/MeshSDFLayout.js +168 -0
- package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.d.ts +75 -0
- package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.js +110 -0
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.d.ts +48 -0
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.js +146 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts +31 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js +136 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts +29 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js +146 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.d.ts +19 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.js +77 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.d.ts +18 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.js +84 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.d.ts +19 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.js +72 -0
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +171 -0
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +884 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.d.ts +82 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.js +127 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.d.ts +24 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.js +29 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.d.ts +12 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.js +31 -0
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.d.ts +29 -0
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.js +179 -0
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.d.ts +17 -0
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.js +107 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts +36 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.js +237 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.d.ts +19 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.js +61 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.d.ts +18 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.js +102 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.d.ts +15 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.js +65 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.d.ts +22 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.js +136 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.d.ts +20 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.js +104 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.d.ts +30 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.js +146 -0
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts +35 -0
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_band_sdf.js +161 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.d.ts +21 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.js +112 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_normal.d.ts +15 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_normal.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_normal.js +34 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_raymarch.d.ts +17 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_raymarch.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_raymarch.js +64 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_sample.d.ts +32 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_sample.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_sample.js +104 -0
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts +2 -0
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +13 -23
- package/src/shade/renderer/geometry/util/geometry_compute_surface_area.js +2 -2
- package/src/shade/renderer/geometry/util/geometry_estimate_uv_aspect.js +2 -2
- package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.js +2 -2
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +34 -12
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +56 -15
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +2 -2
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +13 -26
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +25 -2
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +54 -32
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts +14 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_VERDICT.js +37 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_arena.js +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +2 -6
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts +131 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_descent.js +467 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts +24 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js +111 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts +42 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_rule.js +404 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts +16 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_stat.js +23 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_want.js +65 -0
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +14 -70
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +13 -773
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts +55 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_cut_descent.js +248 -0
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +15 -174
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_ao.js +2 -2
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_probe_meta_pick2.js +8 -24
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_forward_indirect.js +1 -25
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +2 -2
- package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/chunk_lpv_get_visibility_mask.js +5 -23
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts +0 -2
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +3 -13
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.d.ts +10 -16
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.js +39 -82
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +136 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +487 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +3505 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +83 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +626 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +265 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +475 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +138 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +189 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_MOVERS.d.ts +37 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_MOVERS.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_MOVERS.js +48 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +239 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +993 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts +69 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.js +169 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts +191 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js +590 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.d.ts +21 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_object.js +42 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts +45 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_provider.js +93 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK_INSTANCE_STRUCT.js +35 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts +35 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MeshSDFBrickProvider.js +124 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +27 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +94 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_texel.js +73 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts +35 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_provider.js +238 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_clear.d.ts +10 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_clear.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_clear.js +44 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_coarse.d.ts +24 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_coarse.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_coarse.js +92 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.js +133 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers.d.ts +21 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers.js +146 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers_command.d.ts +18 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers_command.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers_command.js +84 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_requeue.d.ts +16 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_requeue.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_requeue.js +67 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_scroll.d.ts +20 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_scroll.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_scroll.js +128 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.d.ts +20 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.js +127 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.d.ts +20 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.js +79 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts +99 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGEO_BRICK.js +139 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts +65 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/VGeoBrickProvider.js +393 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts +17 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_box.js +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_pair.js +108 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts +31 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_texel.js +113 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts +36 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/chunk_vgeo_brick_triangle.js +85 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_distance.js +273 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_gather.js +151 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts +13 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_traverse.js +133 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts +22 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/vgeo/shader_vgeo_brick_wait.js +135 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.d.ts +11 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.js +16 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_clipmap.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_clipmap.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_clipmap.js +160 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.d.ts +34 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.js +189 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_sdf.d.ts +25 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_sdf.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_sdf.js +138 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +184 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +1124 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +223 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +297 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +244 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +493 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts +19 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.js +40 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +41 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.js +110 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts +72 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +343 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts +29 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +188 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +132 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +34 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +284 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +37 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +176 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts +12 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.js +101 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +22 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +110 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_fill.d.ts +10 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_fill.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_fill.js +39 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts +15 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js +175 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +210 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.js +177 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_publish.d.ts +18 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_publish.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_publish.js +105 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.d.ts +25 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.js +124 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts +21 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_retire.js +118 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts +19 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.js +72 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +25 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +145 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +33 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +196 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts +19 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.js +88 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts +23 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +98 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +27 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +110 -0
- package/src/shade/renderer/gpu_primitive/indirect/chunk_folded_dispatch.d.ts +19 -0
- package/src/shade/renderer/gpu_primitive/indirect/chunk_folded_dispatch.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/indirect/chunk_folded_dispatch.js +31 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/chunk_slot_stack.d.ts +33 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/chunk_slot_stack.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/chunk_slot_stack.js +58 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/shader_slot_stack_fill.d.ts +31 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/shader_slot_stack_fill.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/shader_slot_stack_fill.js +62 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/shader_slot_stack_push_range.d.ts +21 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/shader_slot_stack_push_range.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/slot_stack/shader_slot_stack_push_range.js +61 -0
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +12 -11
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +117 -120
- package/src/shade/renderer/light/environment/octahedral_z_pole_uv_to_direction.d.ts +1 -2
- package/src/shade/renderer/light/environment/octahedral_z_pole_uv_to_direction.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/octahedral_z_pole_uv_to_direction.js +44 -45
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +13 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +40 -0
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +11 -6
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +15 -8
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +9 -2
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +25 -11
- package/src/shade/renderer/lightmap/atlas/rescale_uvs.js +2 -2
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/StandardShadeMaterial.js +5 -5
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +10 -4
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +112 -8
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts +21 -0
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.js +30 -0
- package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts +24 -0
- package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts.map +1 -0
- package/src/shade/renderer/material/resident/shader_resident_texture_means.js +120 -0
- package/src/shade/renderer/particles/DESIGN.md +151 -42
- package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +283 -0
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +10 -2
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +53 -15
- package/src/shade/renderer/particles/ParticleConstants.d.ts +23 -6
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +25 -6
- package/src/shade/renderer/particles/bounds/chunk_particle_bounds.js +5 -5
- package/src/shade/renderer/particles/bounds/shader_particle_bounds.js +187 -187
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts +20 -9
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js +36 -10
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +8 -7
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +25 -16
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts +51 -0
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/PARTICLE_FIELD_BINDING.js +56 -0
- package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/particle_emitter_record.js +2 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +1 -1
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +22 -11
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +14 -11
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +4 -4
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +59 -24
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts +3 -3
- package/src/shade/renderer/particles/graph/ParticleValueType.js +287 -287
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts +13 -6
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/compile_particle_graph.js +46 -27
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts +8 -2
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.js +240 -234
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts +1 -1
- package/src/shade/renderer/particles/graph/make_particle_group.js +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts +3 -2
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.js +3 -2
- package/src/shade/renderer/particles/graph/particle_graph_distributions.js +170 -170
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts +25 -16
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_json.js +16 -2
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +29 -15
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_parameters.js +54 -22
- package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_presentation.js +18 -8
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +9 -3
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/validate_particle_graph.js +70 -38
- package/src/shade/renderer/particles/graph_particles.d.ts +9 -4
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +27 -4
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts +7 -6
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/InstructionStream.js +17 -16
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts +17 -0
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleAssembler.js +35 -0
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +26 -6
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleProgram.js +61 -9
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +55 -4
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.js +79 -10
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts +20 -6
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/particle_assembly.js +136 -25
- package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts +20 -0
- package/src/shade/renderer/particles/isa/particle_link_global_fields.d.ts.map +1 -0
- package/src/shade/renderer/particles/isa/particle_link_global_fields.js +46 -0
- package/src/shade/renderer/particles/isa/validate_particle_program.js +8 -8
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +62 -28
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
- package/src/shade/renderer/particles/layout/ParticleLayout.js +102 -62
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js +2 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.js +1 -1
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +4 -3
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.js +2 -2
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts +3 -3
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +11 -11
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +4 -4
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +5 -4
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts +1 -1
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.js +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +4 -4
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +13 -11
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +7 -7
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +3 -2
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +5 -4
- package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.js +51 -51
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +5 -5
- package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_schedule.js +2 -2
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +5 -4
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +93 -22
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +336 -29
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +43 -3
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +43 -3
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +56 -26
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +89 -33
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts +85 -0
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/ParticleGlobalFields.js +221 -0
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts +143 -18
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ProgramHeap.js +378 -28
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +19 -7
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/create_particle_effect.js +22 -9
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +8 -8
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts +3 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.js +4 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +5 -6
- package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.js +5 -7
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts +30 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_field_bind.js +121 -0
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +3 -2
- package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.js +3 -2
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.js +3 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +12 -4
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.js +48 -11
- package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/chunk_particle_vm.js +36 -14
- package/src/shade/renderer/particles/warmup/shader_particle_warmup.d.ts.map +1 -1
- package/src/shade/renderer/particles/warmup/shader_particle_warmup.js +316 -318
- package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.d.ts.map +1 -1
- package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.js +3 -2
- package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.d.ts.map +1 -1
- package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.js +2 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_texture.js +1 -1
- package/src/shade/renderer/postprocess/PostProcess.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/PostProcess.js +2 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +31 -19
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +44 -30
- package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.js +75 -78
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +16 -2
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts +0 -5
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +377 -382
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.js +4 -3
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts +7 -1
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.js +16 -0
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts +20 -2
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +53 -2
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts +10 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.js +31 -1
- 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 +17 -11
- package/src/shade/renderer/postprocess/taa/TAA.d.ts +4 -2
- package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/TAA.js +6 -1
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.js +10 -5
- package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/shader_taa.js +15 -12
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +26 -17
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts +4 -2
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.js +6 -2
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts +12 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect_probe_clipmap.js +57 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +4 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +4 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +8 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +28 -15
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw.js +19 -3
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +4 -2
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts +3 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +27 -14
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +19 -3
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +17 -2
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +38 -2
- package/src/shade/renderer/scene/MESH_INSTANCE_METADATA_STRUCT.d.ts +17 -0
- package/src/shade/renderer/scene/MESH_INSTANCE_METADATA_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/scene/MESH_INSTANCE_METADATA_STRUCT.js +27 -0
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts.map +1 -1
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.js +4 -6
- package/src/shade/renderer/scene/chunk_mesh_flags.d.ts +9 -0
- package/src/shade/renderer/scene/chunk_mesh_flags.d.ts.map +1 -0
- package/src/shade/renderer/scene/chunk_mesh_flags.js +22 -0
- package/src/shade/renderer/scene/movers/SCENE_MOVER_LAYOUT.d.ts +65 -0
- package/src/shade/renderer/scene/movers/SCENE_MOVER_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/scene/movers/SCENE_MOVER_LAYOUT.js +87 -0
- package/src/shade/renderer/scene/movers/SceneMoverTracker.d.ts +42 -0
- package/src/shade/renderer/scene/movers/SceneMoverTracker.d.ts.map +1 -0
- package/src/shade/renderer/scene/movers/SceneMoverTracker.js +153 -0
- package/src/shade/renderer/scene/movers/chunk_scene_append_mover.d.ts +14 -0
- package/src/shade/renderer/scene/movers/chunk_scene_append_mover.d.ts.map +1 -0
- package/src/shade/renderer/scene/movers/chunk_scene_append_mover.js +33 -0
- package/src/shade/renderer/scene/movers/graph_scene_movers.d.ts +33 -0
- package/src/shade/renderer/scene/movers/graph_scene_movers.d.ts.map +1 -0
- package/src/shade/renderer/scene/movers/graph_scene_movers.js +114 -0
- package/src/shade/renderer/scene/movers/shader_scene_movers.d.ts +33 -0
- package/src/shade/renderer/scene/movers/shader_scene_movers.d.ts.map +1 -0
- package/src/shade/renderer/scene/movers/shader_scene_movers.js +197 -0
- package/src/shade/renderer/scene/movers/shader_scene_skinned_movers.d.ts +24 -0
- package/src/shade/renderer/scene/movers/shader_scene_skinned_movers.d.ts.map +1 -0
- package/src/shade/renderer/scene/movers/shader_scene_skinned_movers.js +112 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +26 -4
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
- package/src/shade/renderer/scene/rows/GPUSceneRows.js +64 -6
- package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_nearest_point_on_surface.js +1 -1
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_decompose_transform.d.ts +1 -1
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_decompose_transform.js +2 -2
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts +2 -8
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_bounds.js +25 -52
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/meshlet/chunk_read_meshlet_triangle_positions.js +52 -0
- package/src/shade/renderer/shader/chunk/geometry/quaternion/chunk_quat_decode_u32.d.ts +1 -1
- package/src/shade/renderer/shader/chunk/geometry/quaternion/chunk_quat_decode_u32.js +1 -1
- package/src/shade/renderer/shader/chunk/geometry/quaternion/chunk_quat_encode_u32.d.ts +1 -1
- package/src/shade/renderer/shader/chunk/geometry/quaternion/chunk_quat_encode_u32.js +1 -1
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/triangle/TRIANGLE_POSITIONS_STRUCT.js +12 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/grid/chunk_index_to_grid2d_reciprocal.js +37 -0
- package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/lpv/depth/chunk_lpv_mask_weights_by_visibility.js +26 -60
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/light/probe/chunk_probe_visibility_weight.js +54 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/chunk_f16_round_stochastic.js +43 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/chunk_jitter_from_vectors.js +37 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts +27 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_pick2_wrs_mat2x4.js +61 -0
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_sample_discrete_wrs_mat2x4.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_sample_discrete_wrs_mat2x4.js +10 -7
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_sample_discrete_wrs_vec4.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/random/reservoir/chunk_sample_discrete_wrs_vec4.js +6 -3
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/sdf/chunk_scene_sdf_raymarch.js +62 -34
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/chunk_resolve_irradiance_sh_to_specular.js +41 -0
- package/src/shade/renderer/shader/compiler/CodeChunk.d.ts +1 -1
- package/src/shade/renderer/shader/compiler/ShaderSwitch.d.ts +1 -1
- package/src/shade/renderer/shader/compiler/ShaderSwitchSet.d.ts +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceDescriptor.d.ts +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +4 -4
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +50 -11
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +188 -51
- package/src/shade/renderer/shadow/map/SHADOWMAP_PATCH_MIN_SIDE.d.ts +8 -0
- package/src/shade/renderer/shadow/map/SHADOWMAP_PATCH_MIN_SIDE.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/SHADOWMAP_PATCH_MIN_SIDE.js +7 -0
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts +7 -7
- package/src/shade/renderer/shadow/map/Shadowmap.js +7 -7
- package/src/shade/renderer/shadow/map/ShadowmapResolutionPolicy.d.ts +17 -0
- package/src/shade/renderer/shadow/map/ShadowmapResolutionPolicy.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/ShadowmapResolutionPolicy.js +29 -8
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_get_light_visibility.d.ts +0 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_get_light_visibility.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_get_light_visibility.js +0 -3
- package/src/shade/renderer/shadow/sdf/SDF_DRAW_SETTINGS_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/SDF_DRAW_SETTINGS_STRUCT.js +2 -5
- package/src/shade/renderer/shadow/sdf/chunk_geometry_sdf_query_distance.d.ts +8 -0
- package/src/shade/renderer/shadow/sdf/chunk_geometry_sdf_query_distance.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/chunk_geometry_sdf_query_distance.js +13 -41
- package/src/shade/renderer/shadow/sdf/chunk_ray_query_sdf_raycast_traversal_count.js +6 -5
- package/src/shade/renderer/shadow/sdf/chunk_sdf_geometry_raymarch.d.ts +8 -0
- package/src/shade/renderer/shadow/sdf/chunk_sdf_geometry_raymarch.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/chunk_sdf_geometry_raymarch.js +20 -73
- package/src/shade/renderer/shadow/sdf/chunk_sdf_mesh_raymarch.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/chunk_sdf_mesh_raymarch.js +4 -0
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts +2 -0
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +14 -8
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_LOW_LOAD_FACTOR.d.ts +12 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_LOW_LOAD_FACTOR.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_LOW_LOAD_FACTOR.js +11 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.d.ts +9 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_DYNAMIC_LOD_BIAS.js +8 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_LOAD_FACTOR.d.ts +13 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_LOAD_FACTOR.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_MAX_LOAD_FACTOR.js +12 -0
- package/src/shade/renderer/shadow/vsm/PLAN.md +3 -1
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts +80 -1
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VSMPageManager.js +303 -3
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts +54 -3
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +418 -338
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts +8 -9
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.js +9 -92
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.js +6 -6
- package/src/shade/renderer/texture/atlas/GPUTileAtlas2D.d.ts +90 -0
- package/src/shade/renderer/texture/atlas/GPUTileAtlas2D.d.ts.map +1 -0
- package/src/shade/renderer/texture/atlas/GPUTileAtlas2D.js +208 -0
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts +23 -4
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts.map +1 -1
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.js +56 -5
- package/src/shade/renderer/texture/util/texture_fill_rectangle.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/texture_fill_rectangle.js +282 -267
- package/src/shade/renderer/view/GPUViewContext.js +2 -2
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +8 -4
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +36 -36
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_shadow_group_list.d.ts +59 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_shadow_group_list.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_shadow_group_list.js +152 -0
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +145 -46
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +6 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +498 -484
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +14 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +56 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +197 -191
- package/src/shade/renderer/volumetrics/shader_volumetrics_bin_sun_shadow_media.d.ts +21 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_bin_sun_shadow_media.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_bin_sun_shadow_media.js +125 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts +4 -44
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.js +558 -311
- package/src/shade/renderer/volumetrics/shader_volumetrics_cull_sun_shadow_media.d.ts +18 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_cull_sun_shadow_media.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_cull_sun_shadow_media.js +84 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.d.ts +4 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.js +1 -1
- package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +4 -4
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +2 -1
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +5 -1
- package/src/shade/renderer/water/chunk_water_gi.d.ts +12 -2
- package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_gi.js +46 -2
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +127 -0
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts.map +1 -0
- package/src/shade/renderer/water/query/GPUWaterQueries.js +741 -0
- package/src/shade/renderer/water/query/WATER_QUERY_DATABASE_SPEC.d.ts +58 -0
- package/src/shade/renderer/water/query/WATER_QUERY_DATABASE_SPEC.d.ts.map +1 -0
- package/src/shade/renderer/water/query/WATER_QUERY_DATABASE_SPEC.js +79 -0
- package/src/shade/renderer/water/query/shader_water_surface_query.d.ts +32 -0
- package/src/shade/renderer/water/query/shader_water_surface_query.d.ts.map +1 -0
- package/src/shade/renderer/water/query/shader_water_surface_query.js +227 -0
- package/src/shade/renderer/water/shader_water.d.ts +3 -2
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +9 -3
- package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +12 -6
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +20 -1
- package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
- package/src/shade/wgsl/validate_wgsl_source.js +26 -0
- package/src/view/common/LabelView.js +1 -1
- package/src/view/common/VirtualListView.js +1 -1
- package/src/view/elements/progress/SmoothProgressBar.js +1 -1
- package/src/view/tooltip/TooltipManager.js +1 -1
- package/editor/view/ecs/components/DatGuiController.d.ts +0 -2
- package/editor/view/ecs/components/DatGuiController.d.ts.map +0 -1
- package/editor/view/ecs/components/DatGuiController.js +0 -2
- package/editor/view/v2/SplitView.d.ts +0 -2
- package/editor/view/v2/SplitView.d.ts.map +0 -1
- package/editor/view/v2/SplitView.js +0 -2
- package/src/core/binary/hash/XXH128Hash.d.ts +0 -2
- package/src/core/binary/hash/XXH128Hash.d.ts.map +0 -1
- package/src/core/binary/hash/XXH128Hash.js +0 -4
- package/src/core/binary/hash/XXH3_SECRET.d.ts +0 -2
- package/src/core/binary/hash/XXH3_SECRET.d.ts.map +0 -1
- package/src/core/binary/hash/XXH3_SECRET.js +0 -4
- package/src/core/binary/hash/crc32.d.ts +0 -2
- package/src/core/binary/hash/crc32.d.ts.map +0 -1
- package/src/core/binary/hash/crc32.js +0 -4
- package/src/core/binary/hash/xxh3_128.d.ts +0 -2
- package/src/core/binary/hash/xxh3_128.d.ts.map +0 -1
- package/src/core/binary/hash/xxh3_128.js +0 -4
- package/src/core/binary/hash/xxh3_64.d.ts +0 -2
- package/src/core/binary/hash/xxh3_64.d.ts.map +0 -1
- package/src/core/binary/hash/xxh3_64.js +0 -4
- package/src/core/binary/hash/xxh3_common.d.ts +0 -2
- package/src/core/binary/hash/xxh3_common.d.ts.map +0 -1
- package/src/core/binary/hash/xxh3_common.js +0 -90
- package/src/core/binary/lsb_32.d.ts +0 -17
- package/src/core/binary/lsb_32.d.ts.map +0 -1
- package/src/core/binary/lsb_32.js +0 -17
- package/src/core/color/hex/hex2rgb.d.ts +0 -2
- package/src/core/color/hex/hex2rgb.d.ts.map +0 -1
- package/src/core/color/hex/hex2rgb.js +0 -7
- package/src/core/color/hex/rgb2hex.d.ts +0 -2
- package/src/core/color/hex/rgb2hex.d.ts.map +0 -1
- package/src/core/color/hex/rgb2hex.js +0 -7
- package/src/core/color/hsv/hsv2rgb.d.ts +0 -2
- package/src/core/color/hsv/hsv2rgb.d.ts.map +0 -1
- package/src/core/color/hsv/hsv2rgb.js +0 -8
- package/src/core/color/hsv/rgb2hsv.d.ts +0 -2
- package/src/core/color/hsv/rgb2hsv.d.ts.map +0 -1
- package/src/core/color/hsv/rgb2hsv.js +0 -7
- package/src/core/color/hunt/hpe_to_xyz.d.ts +0 -2
- package/src/core/color/hunt/hpe_to_xyz.d.ts.map +0 -1
- package/src/core/color/hunt/hpe_to_xyz.js +0 -4
- package/src/core/color/hunt/xyz_to_hpe.d.ts +0 -2
- package/src/core/color/hunt/xyz_to_hpe.d.ts.map +0 -1
- package/src/core/color/hunt/xyz_to_hpe.js +0 -12
- package/src/core/color/int2rgb.d.ts +0 -2
- package/src/core/color/int2rgb.d.ts.map +0 -1
- package/src/core/color/int2rgb.js +0 -7
- package/src/core/color/rgb2uint24.d.ts +0 -2
- package/src/core/color/rgb2uint24.d.ts.map +0 -1
- package/src/core/color/rgb2uint24.js +0 -7
- package/src/core/color/rgb2uint32.d.ts +0 -2
- package/src/core/color/rgb2uint32.d.ts.map +0 -1
- package/src/core/color/rgb2uint32.js +0 -7
- package/src/core/geom/2d/aabb/aabb2_array_combine.d.ts +0 -7
- package/src/core/geom/2d/aabb/aabb2_array_combine.d.ts.map +0 -1
- package/src/core/geom/2d/aabb/aabb2_array_combine.js +0 -7
- package/src/core/geom/2d/aabb/aabb2_compute_area.d.ts +0 -7
- package/src/core/geom/2d/aabb/aabb2_compute_area.d.ts.map +0 -1
- package/src/core/geom/2d/aabb/aabb2_compute_area.js +0 -7
- package/src/core/geom/2d/aabb/aabb2_compute_center_from_multiple.d.ts +0 -7
- package/src/core/geom/2d/aabb/aabb2_compute_center_from_multiple.d.ts.map +0 -1
- package/src/core/geom/2d/aabb/aabb2_compute_center_from_multiple.js +0 -7
- package/src/core/geom/2d/aabb/aabb2_compute_overlap.d.ts +0 -7
- package/src/core/geom/2d/aabb/aabb2_compute_overlap.d.ts.map +0 -1
- package/src/core/geom/2d/aabb/aabb2_compute_overlap.js +0 -7
- package/src/core/geom/2d/aabb/aabb2_from_v2_array.d.ts +0 -7
- package/src/core/geom/2d/aabb/aabb2_from_v2_array.d.ts.map +0 -1
- package/src/core/geom/2d/aabb/aabb2_from_v2_array.js +0 -7
- package/src/core/geom/2d/aabb/aabb2_intersects_point.d.ts +0 -7
- package/src/core/geom/2d/aabb/aabb2_intersects_point.d.ts.map +0 -1
- package/src/core/geom/2d/aabb/aabb2_intersects_point.js +0 -7
- package/src/core/geom/2d/aabb/aabb2_overlap_exists.d.ts +0 -7
- package/src/core/geom/2d/aabb/aabb2_overlap_exists.d.ts.map +0 -1
- package/src/core/geom/2d/aabb/aabb2_overlap_exists.js +0 -7
- package/src/core/geom/2d/circle/circle_compute_circle_intersection.d.ts +0 -7
- package/src/core/geom/2d/circle/circle_compute_circle_intersection.d.ts.map +0 -1
- package/src/core/geom/2d/circle/circle_compute_circle_intersection.js +0 -7
- package/src/core/geom/2d/circle/circle_compute_circle_penetration.d.ts +0 -7
- package/src/core/geom/2d/circle/circle_compute_circle_penetration.d.ts.map +0 -1
- package/src/core/geom/2d/circle/circle_compute_circle_penetration.js +0 -7
- package/src/core/geom/2d/circle/circle_intersects_point.d.ts +0 -7
- package/src/core/geom/2d/circle/circle_intersects_point.d.ts.map +0 -1
- package/src/core/geom/2d/circle/circle_intersects_point.js +0 -7
- package/src/core/geom/2d/compute_polygon_area_2d.d.ts +0 -7
- package/src/core/geom/2d/compute_polygon_area_2d.d.ts.map +0 -1
- package/src/core/geom/2d/compute_polygon_area_2d.js +0 -7
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_humus.d.ts +0 -7
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_humus.d.ts.map +0 -1
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_humus.js +0 -7
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.d.ts +0 -7
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.d.ts.map +0 -1
- package/src/core/geom/2d/convex-hull/fixed_convex_hull_relaxation.js +0 -7
- package/src/core/geom/2d/convex-hull/orientation3_array.d.ts +0 -7
- package/src/core/geom/2d/convex-hull/orientation3_array.d.ts.map +0 -1
- package/src/core/geom/2d/convex-hull/orientation3_array.js +0 -7
- package/src/core/geom/2d/intersect_ray_2d.d.ts +0 -7
- package/src/core/geom/2d/intersect_ray_2d.d.ts.map +0 -1
- package/src/core/geom/2d/intersect_ray_2d.js +0 -7
- package/src/core/geom/2d/line/line2_distance_to_point_sqr.d.ts +0 -7
- package/src/core/geom/2d/line/line2_distance_to_point_sqr.d.ts.map +0 -1
- package/src/core/geom/2d/line/line2_distance_to_point_sqr.js +0 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_2d.d.ts +0 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_2d.d.ts.map +0 -1
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_2d.js +0 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_array_2d.d.ts +0 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_array_2d.d.ts.map +0 -1
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_array_2d.js +0 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_2d.d.ts +0 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_2d.d.ts.map +0 -1
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_2d.js +0 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_array_2d.d.ts +0 -7
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_array_2d.d.ts.map +0 -1
- package/src/core/geom/2d/line/line_segment_compute_line_segment_intersection_vectors_array_2d.js +0 -7
- package/src/core/geom/2d/line/line_segment_intersection_fraction_2d.d.ts +0 -7
- package/src/core/geom/2d/line/line_segment_intersection_fraction_2d.d.ts.map +0 -1
- package/src/core/geom/2d/line/line_segment_intersection_fraction_2d.js +0 -7
- package/src/core/geom/2d/line/line_segment_line_segment_intersection_exists_2d.d.ts +0 -7
- package/src/core/geom/2d/line/line_segment_line_segment_intersection_exists_2d.d.ts.map +0 -1
- package/src/core/geom/2d/line/line_segment_line_segment_intersection_exists_2d.js +0 -7
- package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.d.ts +0 -7
- package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.d.ts.map +0 -1
- package/src/core/geom/2d/quad-tree/qt_query_data_nearest_to_point.js +0 -7
- package/src/core/geom/2d/rectangle_to_aabb.d.ts +0 -7
- package/src/core/geom/2d/rectangle_to_aabb.d.ts.map +0 -1
- package/src/core/geom/2d/rectangle_to_aabb.js +0 -7
- package/src/core/geom/2d/spline_bezier2_2d.d.ts +0 -7
- package/src/core/geom/2d/spline_bezier2_2d.d.ts.map +0 -1
- package/src/core/geom/2d/spline_bezier2_2d.js +0 -7
- package/src/core/geom/2d/triangle2d_compute_area.d.ts +0 -7
- package/src/core/geom/2d/triangle2d_compute_area.d.ts.map +0 -1
- package/src/core/geom/2d/triangle2d_compute_area.js +0 -7
- package/src/core/geom/2d/triangle2d_contains_point.d.ts +0 -7
- package/src/core/geom/2d/triangle2d_contains_point.d.ts.map +0 -1
- package/src/core/geom/2d/triangle2d_contains_point.js +0 -7
- package/src/core/geom/2d/triangle2d_get_barycentric.d.ts +0 -7
- package/src/core/geom/2d/triangle2d_get_barycentric.d.ts.map +0 -1
- package/src/core/geom/2d/triangle2d_get_barycentric.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_array_intersects_frustum_degree.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_array_intersects_frustum_degree.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_array_intersects_frustum_degree.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_box_surface_area_2.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_box_surface_area_2.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_box_surface_area_2.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_combined_surface_area.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_combined_surface_area.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_combined_surface_area.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_compute_half_surface_area.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_compute_half_surface_area.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_compute_half_surface_area.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_compute_projected_area.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_compute_projected_area.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_compute_projected_area.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_compute_surface_area.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_compute_surface_area.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_compute_surface_area.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_estimate_projected_area2.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_estimate_projected_area2.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_estimate_projected_area2.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_intersects_frustum_degree.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_intersects_frustum_degree.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_intersects_frustum_degree.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_intersects_line_segment.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_intersects_line_segment.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_intersects_line_segment.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_near_distance_to_intersection_ray_segment.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_nearest_point_on_surface.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_nearest_point_on_surface.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_nearest_point_on_surface.js +0 -7
- package/src/core/geom/3d/aabb/aabb3_raycast.d.ts +0 -7
- package/src/core/geom/3d/aabb/aabb3_raycast.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/aabb3_raycast.js +0 -7
- package/src/core/geom/3d/aabb/compute_aabb_from_points.d.ts +0 -7
- package/src/core/geom/3d/aabb/compute_aabb_from_points.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/compute_aabb_from_points.js +0 -7
- package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.d.ts +0 -7
- package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.d.ts.map +0 -1
- package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.js +0 -7
- package/src/core/geom/3d/compute_circle_bounding_box.d.ts +0 -7
- package/src/core/geom/3d/compute_circle_bounding_box.d.ts.map +0 -1
- package/src/core/geom/3d/compute_circle_bounding_box.js +0 -7
- package/src/core/geom/3d/cone/computeConeBoundingBox.d.ts +0 -7
- package/src/core/geom/3d/cone/computeConeBoundingBox.d.ts.map +0 -1
- package/src/core/geom/3d/cone/computeConeBoundingBox.js +0 -7
- package/src/core/geom/3d/cone/computeConePlaneSide.d.ts +0 -7
- package/src/core/geom/3d/cone/computeConePlaneSide.d.ts.map +0 -1
- package/src/core/geom/3d/cone/computeConePlaneSide.js +0 -7
- package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.d.ts +0 -7
- package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.d.ts.map +0 -1
- package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.js +0 -7
- package/src/core/geom/3d/frustum/clipping_volume_matrix4_project.d.ts +0 -7
- package/src/core/geom/3d/frustum/clipping_volume_matrix4_project.d.ts.map +0 -1
- package/src/core/geom/3d/frustum/clipping_volume_matrix4_project.js +0 -7
- package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.d.ts +0 -7
- package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.d.ts.map +0 -1
- package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +0 -7
- package/src/core/geom/3d/frustum/frustum_matrix4_project.d.ts +0 -7
- package/src/core/geom/3d/frustum/frustum_matrix4_project.d.ts.map +0 -1
- package/src/core/geom/3d/frustum/frustum_matrix4_project.js +0 -7
- package/src/core/geom/3d/frustum/hexahedron_from_aabb.d.ts +0 -7
- package/src/core/geom/3d/frustum/hexahedron_from_aabb.d.ts.map +0 -1
- package/src/core/geom/3d/frustum/hexahedron_from_aabb.js +0 -7
- package/src/core/geom/3d/frustum/read_three_planes_to_array.d.ts +0 -7
- package/src/core/geom/3d/frustum/read_three_planes_to_array.d.ts.map +0 -1
- package/src/core/geom/3d/frustum/read_three_planes_to_array.js +0 -7
- package/src/core/geom/3d/frustum/slice_frustum_linear_to_points.d.ts +0 -7
- package/src/core/geom/3d/frustum/slice_frustum_linear_to_points.d.ts.map +0 -1
- package/src/core/geom/3d/frustum/slice_frustum_linear_to_points.js +0 -7
- package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts +0 -7
- package/src/core/geom/3d/line/line3_closest_points_segment_segment.d.ts.map +0 -1
- package/src/core/geom/3d/line/line3_closest_points_segment_segment.js +0 -7
- package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.d.ts +0 -7
- package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.d.ts.map +0 -1
- package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.js +0 -7
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_aabb3_t.d.ts +0 -7
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_aabb3_t.d.ts.map +0 -1
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_aabb3_t.js +0 -7
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.d.ts +0 -7
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.d.ts.map +0 -1
- package/src/core/geom/3d/line/line3_compute_segment_nearest_point_to_point_t.js +0 -7
- package/src/core/geom/3d/mat4/allocate_m4.d.ts +0 -7
- package/src/core/geom/3d/mat4/allocate_m4.d.ts.map +0 -1
- package/src/core/geom/3d/mat4/allocate_m4.js +0 -7
- package/src/core/geom/3d/mat4/apply_mat4_transform_to_direction_v3_array.d.ts +0 -7
- package/src/core/geom/3d/mat4/apply_mat4_transform_to_direction_v3_array.d.ts.map +0 -1
- package/src/core/geom/3d/mat4/apply_mat4_transform_to_direction_v3_array.js +0 -7
- package/src/core/geom/3d/mat4/apply_mat4_transform_to_v3_array.d.ts +0 -7
- package/src/core/geom/3d/mat4/apply_mat4_transform_to_v3_array.d.ts.map +0 -1
- package/src/core/geom/3d/mat4/apply_mat4_transform_to_v3_array.js +0 -7
- package/src/core/geom/3d/mat4/compose_matrix4_array.d.ts +0 -7
- package/src/core/geom/3d/mat4/compose_matrix4_array.d.ts.map +0 -1
- package/src/core/geom/3d/mat4/compose_matrix4_array.js +0 -7
- package/src/core/geom/3d/mat4/decompose_matrix_4_array.d.ts +0 -7
- package/src/core/geom/3d/mat4/decompose_matrix_4_array.d.ts.map +0 -1
- package/src/core/geom/3d/mat4/decompose_matrix_4_array.js +0 -7
- package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.d.ts +0 -7
- package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.d.ts.map +0 -1
- package/src/core/geom/3d/mat4/eulerAnglesFromMatrix.js +0 -7
- package/src/core/geom/3d/mat4/m4_compute_normal_matrix3.d.ts +0 -7
- package/src/core/geom/3d/mat4/m4_compute_normal_matrix3.d.ts.map +0 -1
- package/src/core/geom/3d/mat4/m4_compute_normal_matrix3.js +0 -7
- package/src/core/geom/3d/morton/mortonEncode_LUT.d.ts +0 -7
- package/src/core/geom/3d/morton/mortonEncode_LUT.d.ts.map +0 -1
- package/src/core/geom/3d/morton/mortonEncode_LUT.js +0 -7
- package/src/core/geom/3d/morton/mortonEncode_magicbits.d.ts +0 -7
- package/src/core/geom/3d/morton/mortonEncode_magicbits.d.ts.map +0 -1
- package/src/core/geom/3d/morton/mortonEncode_magicbits.js +0 -7
- package/src/core/geom/3d/normal/hemioct/encode_unit3_hemioct.d.ts +0 -2
- package/src/core/geom/3d/normal/hemioct/encode_unit3_hemioct.d.ts.map +0 -1
- package/src/core/geom/3d/normal/hemioct/encode_unit3_hemioct.js +0 -5
- package/src/core/geom/3d/plane/is_point_within_planes.d.ts +0 -7
- package/src/core/geom/3d/plane/is_point_within_planes.d.ts.map +0 -1
- package/src/core/geom/3d/plane/is_point_within_planes.js +0 -7
- package/src/core/geom/3d/plane/plane3_compute_convex_3_plane_intersection.d.ts +0 -7
- package/src/core/geom/3d/plane/plane3_compute_convex_3_plane_intersection.d.ts.map +0 -1
- package/src/core/geom/3d/plane/plane3_compute_convex_3_plane_intersection.js +0 -7
- package/src/core/geom/3d/plane/plane3_compute_plane_intersection.d.ts +0 -7
- package/src/core/geom/3d/plane/plane3_compute_plane_intersection.d.ts.map +0 -1
- package/src/core/geom/3d/plane/plane3_compute_plane_intersection.js +0 -7
- package/src/core/geom/3d/plane/plane3_intersect_plane.d.ts +0 -7
- package/src/core/geom/3d/plane/plane3_intersect_plane.d.ts.map +0 -1
- package/src/core/geom/3d/plane/plane3_intersect_plane.js +0 -7
- package/src/core/geom/3d/plane/plane3_three_compute_convex_3_plane_intersection.d.ts +0 -7
- package/src/core/geom/3d/plane/plane3_three_compute_convex_3_plane_intersection.d.ts.map +0 -1
- package/src/core/geom/3d/plane/plane3_three_compute_convex_3_plane_intersection.js +0 -7
- package/src/core/geom/3d/quaternion/quat3_createFromAxisAngle.d.ts +0 -7
- package/src/core/geom/3d/quaternion/quat3_createFromAxisAngle.d.ts.map +0 -1
- package/src/core/geom/3d/quaternion/quat3_createFromAxisAngle.js +0 -7
- package/src/core/geom/3d/quaternion/quat_decode_from_uint32.d.ts +0 -7
- package/src/core/geom/3d/quaternion/quat_decode_from_uint32.d.ts.map +0 -1
- package/src/core/geom/3d/quaternion/quat_decode_from_uint32.js +0 -7
- package/src/core/geom/3d/quaternion/quat_encode_to_uint32.d.ts +0 -7
- package/src/core/geom/3d/quaternion/quat_encode_to_uint32.d.ts.map +0 -1
- package/src/core/geom/3d/quaternion/quat_encode_to_uint32.js +0 -7
- package/src/core/geom/3d/ray/ray3_array_compose.d.ts +0 -7
- package/src/core/geom/3d/ray/ray3_array_compose.d.ts.map +0 -1
- package/src/core/geom/3d/ray/ray3_array_compose.js +0 -7
- package/src/core/geom/3d/ray/ray3_compute_nearest_point_to_point.d.ts +0 -7
- package/src/core/geom/3d/ray/ray3_compute_nearest_point_to_point.d.ts.map +0 -1
- package/src/core/geom/3d/ray/ray3_compute_nearest_point_to_point.js +0 -7
- package/src/core/geom/3d/ray/ray3_distance_to_point.d.ts +0 -7
- package/src/core/geom/3d/ray/ray3_distance_to_point.d.ts.map +0 -1
- package/src/core/geom/3d/ray/ray3_distance_to_point.js +0 -7
- package/src/core/geom/3d/ray/ray3_shift_origin_along_direction.d.ts +0 -7
- package/src/core/geom/3d/ray/ray3_shift_origin_along_direction.d.ts.map +0 -1
- package/src/core/geom/3d/ray/ray3_shift_origin_along_direction.js +0 -7
- package/src/core/geom/3d/shape/shape_mesh_from_geometry.d.ts +0 -7
- package/src/core/geom/3d/shape/shape_mesh_from_geometry.d.ts.map +0 -1
- package/src/core/geom/3d/shape/shape_mesh_from_geometry.js +0 -7
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts +0 -7
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.d.ts.map +0 -1
- package/src/core/geom/3d/shape/util/shape3d_voxelize_to_grid.js +0 -7
- package/src/core/geom/3d/sphere/compute_bounding_sphere_of_2_spheres.d.ts +0 -7
- package/src/core/geom/3d/sphere/compute_bounding_sphere_of_2_spheres.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/compute_bounding_sphere_of_2_spheres.js +0 -7
- package/src/core/geom/3d/sphere/harmonics/sh3_rotate_bl.d.ts +0 -7
- package/src/core/geom/3d/sphere/harmonics/sh3_rotate_bl.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/harmonics/sh3_rotate_bl.js +0 -7
- package/src/core/geom/3d/sphere/harmonics/sh_compute_K.d.ts +0 -7
- package/src/core/geom/3d/sphere/harmonics/sh_compute_K.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/harmonics/sh_compute_K.js +0 -7
- package/src/core/geom/3d/sphere/sphere_array_intersects_point.d.ts +0 -7
- package/src/core/geom/3d/sphere/sphere_array_intersects_point.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/sphere_array_intersects_point.js +0 -7
- package/src/core/geom/3d/sphere/sphere_array_intersects_ray.d.ts +0 -7
- package/src/core/geom/3d/sphere/sphere_array_intersects_ray.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/sphere_array_intersects_ray.js +0 -7
- package/src/core/geom/3d/sphere/sphere_intersects_point.d.ts +0 -7
- package/src/core/geom/3d/sphere/sphere_intersects_point.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/sphere_intersects_point.js +0 -7
- package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.d.ts +0 -7
- package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/sphere_projected_sphere_radius_sqr.js +0 -7
- package/src/core/geom/3d/sphere/sphere_radius_sqr_from_v3_array_transformed.d.ts +0 -7
- package/src/core/geom/3d/sphere/sphere_radius_sqr_from_v3_array_transformed.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/sphere_radius_sqr_from_v3_array_transformed.js +0 -7
- package/src/core/geom/3d/sphere/spherical_from_cartesian.d.ts +0 -7
- package/src/core/geom/3d/sphere/spherical_from_cartesian.d.ts.map +0 -1
- package/src/core/geom/3d/sphere/spherical_from_cartesian.js +0 -7
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts +0 -7
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.d.ts.map +0 -1
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_quality.js +0 -7
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_volume.d.ts +0 -7
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_volume.d.ts.map +0 -1
- package/src/core/geom/3d/tetrahedra/compute_tetrahedron_volume.js +0 -7
- package/src/core/geom/3d/tetrahedra/delaunay/fill_in_a_cavity.d.ts +0 -7
- package/src/core/geom/3d/tetrahedra/delaunay/fill_in_a_cavity.d.ts.map +0 -1
- package/src/core/geom/3d/tetrahedra/delaunay/fill_in_a_cavity.js +0 -7
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.d.ts +0 -7
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.d.ts.map +0 -1
- package/src/core/geom/3d/tetrahedra/tetrahedral_mesh_tet_get_neighbours.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadratics.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadratics.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_compute_vertex_quadratics.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_kill_only_vert.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_kill_only_vert.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_kill_only_vert.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_verts_by_distance.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_verts_by_distance.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_merge_verts_by_distance.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_fuse_duplicate_edges.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_fuse_duplicate_edges.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_fuse_duplicate_edges.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_kill.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_kill.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/io/vertex/bt_vert_kill.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_attached_faces.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_attached_faces.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_attached_faces.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_neighbour_faces.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_neighbour_faces.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_face_get_neighbour_faces.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_faces_shared_loop.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_faces_shared_loop.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_faces_shared_loop.js +0 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_count_edge_faces.d.ts +0 -8
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_count_edge_faces.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_count_edge_faces.js +0 -8
- package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts +0 -7
- package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.d.ts.map +0 -1
- package/src/core/geom/3d/topology/struct/binary/query/bt_query_edge_is_boundary.js +0 -7
- package/src/core/geom/3d/triangle/computeTriangleClosestPointToPointBarycentric.d.ts +0 -7
- package/src/core/geom/3d/triangle/computeTriangleClosestPointToPointBarycentric.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/computeTriangleClosestPointToPointBarycentric.js +0 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersection.d.ts +0 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersection.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/computeTriangleRayIntersection.js +0 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentric.d.ts +0 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentric.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentric.js +0 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricEdge.d.ts +0 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricEdge.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricEdge.js +0 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricGeometry.d.ts +0 -7
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricGeometry.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricGeometry.js +0 -7
- package/src/core/geom/3d/triangle/compute_triangle_area_3d.d.ts +0 -7
- package/src/core/geom/3d/triangle/compute_triangle_area_3d.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/compute_triangle_area_3d.js +0 -7
- package/src/core/geom/3d/triangle/compute_triangle_normal.d.ts +0 -7
- package/src/core/geom/3d/triangle/compute_triangle_normal.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/compute_triangle_normal.js +0 -7
- package/src/core/geom/3d/triangle/rayTriangleIntersection.d.ts +0 -7
- package/src/core/geom/3d/triangle/rayTriangleIntersection.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/rayTriangleIntersection.js +0 -7
- package/src/core/geom/3d/triangle/triangle3_incenter.d.ts +0 -7
- package/src/core/geom/3d/triangle/triangle3_incenter.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/triangle3_incenter.js +0 -7
- package/src/core/geom/3d/triangle/triangle_compute_plane_side.d.ts +0 -7
- package/src/core/geom/3d/triangle/triangle_compute_plane_side.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/triangle_compute_plane_side.js +0 -7
- package/src/core/geom/3d/triangle/triangle_compute_signed_volume.d.ts +0 -7
- package/src/core/geom/3d/triangle/triangle_compute_signed_volume.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/triangle_compute_signed_volume.js +0 -7
- package/src/core/geom/3d/triangle/triangle_intersects_clipping_volume.d.ts +0 -7
- package/src/core/geom/3d/triangle/triangle_intersects_clipping_volume.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/triangle_intersects_clipping_volume.js +0 -7
- package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts +0 -7
- package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/triangle_mesh_compute_signed_volume.js +0 -7
- package/src/core/geom/3d/triangle/v3_compute_triangle_normal.d.ts +0 -7
- package/src/core/geom/3d/triangle/v3_compute_triangle_normal.d.ts.map +0 -1
- package/src/core/geom/3d/triangle/v3_compute_triangle_normal.js +0 -7
- package/src/core/geom/3d/util/make_justified_point_grid.d.ts +0 -7
- package/src/core/geom/3d/util/make_justified_point_grid.d.ts.map +0 -1
- package/src/core/geom/3d/util/make_justified_point_grid.js +0 -7
- package/src/core/geom/mat3/m3_cm_from_translation.d.ts +0 -7
- package/src/core/geom/mat3/m3_cm_from_translation.d.ts.map +0 -1
- package/src/core/geom/mat3/m3_cm_from_translation.js +0 -7
- package/src/core/geom/mat3/m3_cm_invert.d.ts +0 -7
- package/src/core/geom/mat3/m3_cm_invert.d.ts.map +0 -1
- package/src/core/geom/mat3/m3_cm_invert.js +0 -7
- package/src/core/geom/mat3/m3_make_rotation.d.ts +0 -2
- package/src/core/geom/mat3/m3_make_rotation.d.ts.map +0 -1
- package/src/core/geom/mat3/m3_make_rotation.js +0 -5
- package/src/core/geom/mat3/m3_multiply_vec3.d.ts +0 -7
- package/src/core/geom/mat3/m3_multiply_vec3.d.ts.map +0 -1
- package/src/core/geom/mat3/m3_multiply_vec3.js +0 -7
- package/src/core/geom/packing/computeBoundingSphereOfSpheres.d.ts +0 -7
- package/src/core/geom/packing/computeBoundingSphereOfSpheres.d.ts.map +0 -1
- package/src/core/geom/packing/computeBoundingSphereOfSpheres.js +0 -7
- package/src/core/geom/packing/max-rect/cost/costByBestShortSide.d.ts +0 -7
- package/src/core/geom/packing/max-rect/cost/costByBestShortSide.d.ts.map +0 -1
- package/src/core/geom/packing/max-rect/cost/costByBestShortSide.js +0 -7
- package/src/core/geom/packing/max-rect/cost/costByRemainingArea.d.ts +0 -7
- package/src/core/geom/packing/max-rect/cost/costByRemainingArea.d.ts.map +0 -1
- package/src/core/geom/packing/max-rect/cost/costByRemainingArea.js +0 -7
- package/src/core/geom/packing/max-rect/cutArea.d.ts +0 -7
- package/src/core/geom/packing/max-rect/cutArea.d.ts.map +0 -1
- package/src/core/geom/packing/max-rect/cutArea.js +0 -7
- package/src/core/geom/packing/max-rect/findBestContainer.d.ts +0 -7
- package/src/core/geom/packing/max-rect/findBestContainer.d.ts.map +0 -1
- package/src/core/geom/packing/max-rect/findBestContainer.js +0 -7
- package/src/core/geom/packing/max-rect/packMaxRectangles.d.ts +0 -7
- package/src/core/geom/packing/max-rect/packMaxRectangles.d.ts.map +0 -1
- package/src/core/geom/packing/max-rect/packMaxRectangles.js +0 -7
- package/src/core/geom/packing/max-rect/packOneBox.d.ts +0 -7
- package/src/core/geom/packing/max-rect/packOneBox.d.ts.map +0 -1
- package/src/core/geom/packing/max-rect/packOneBox.js +0 -7
- package/src/core/geom/packing/max-rect/removeRedundantBoxes.d.ts +0 -7
- package/src/core/geom/packing/max-rect/removeRedundantBoxes.d.ts.map +0 -1
- package/src/core/geom/packing/max-rect/removeRedundantBoxes.js +0 -7
- package/src/core/geom/packing/max-rect/removeRedundantBoxesArray.d.ts +0 -7
- package/src/core/geom/packing/max-rect/removeRedundantBoxesArray.d.ts.map +0 -1
- package/src/core/geom/packing/max-rect/removeRedundantBoxesArray.js +0 -7
- package/src/core/geom/random/randomPointInBox.d.ts +0 -7
- package/src/core/geom/random/randomPointInBox.d.ts.map +0 -1
- package/src/core/geom/random/randomPointInBox.js +0 -7
- package/src/core/geom/random/randomPointInCircle.d.ts +0 -7
- package/src/core/geom/random/randomPointInCircle.d.ts.map +0 -1
- package/src/core/geom/random/randomPointInCircle.js +0 -7
- package/src/core/geom/random/randomPointInPoint.d.ts +0 -7
- package/src/core/geom/random/randomPointInPoint.d.ts.map +0 -1
- package/src/core/geom/random/randomPointInPoint.js +0 -7
- package/src/core/geom/random/randomPointInSphere.d.ts +0 -7
- package/src/core/geom/random/randomPointInSphere.d.ts.map +0 -1
- package/src/core/geom/random/randomPointInSphere.js +0 -7
- package/src/core/geom/random/randomPointOnBox.d.ts +0 -7
- package/src/core/geom/random/randomPointOnBox.d.ts.map +0 -1
- package/src/core/geom/random/randomPointOnBox.js +0 -7
- package/src/core/geom/random/randomPointOnSphere.d.ts +0 -7
- package/src/core/geom/random/randomPointOnSphere.d.ts.map +0 -1
- package/src/core/geom/random/randomPointOnSphere.js +0 -7
- package/src/core/geom/vec/vector_copy.d.ts +0 -7
- package/src/core/geom/vec/vector_copy.d.ts.map +0 -1
- package/src/core/geom/vec/vector_copy.js +0 -7
- package/src/core/geom/vec/vector_scale_array.d.ts +0 -7
- package/src/core/geom/vec/vector_scale_array.d.ts.map +0 -1
- package/src/core/geom/vec/vector_scale_array.js +0 -7
- package/src/core/geom/vec3/v3_angle_atan2_between.d.ts +0 -7
- package/src/core/geom/vec3/v3_angle_atan2_between.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_angle_atan2_between.js +0 -7
- package/src/core/geom/vec3/v3_angle_between.d.ts +0 -7
- package/src/core/geom/vec3/v3_angle_between.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_angle_between.js +0 -7
- package/src/core/geom/vec3/v3_angle_cos_between.d.ts +0 -7
- package/src/core/geom/vec3/v3_angle_cos_between.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_angle_cos_between.js +0 -7
- package/src/core/geom/vec3/v3_array_add_in_place.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_add_in_place.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_add_in_place.js +0 -7
- package/src/core/geom/vec3/v3_array_centroid.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_centroid.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_centroid.js +0 -7
- package/src/core/geom/vec3/v3_array_copy.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_copy.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_copy.js +0 -7
- package/src/core/geom/vec3/v3_array_displace_in_direction.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_displace_in_direction.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_displace_in_direction.js +0 -7
- package/src/core/geom/vec3/v3_array_equals.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_equals.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_equals.js +0 -7
- package/src/core/geom/vec3/v3_array_immediate_add.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_immediate_add.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_immediate_add.js +0 -7
- package/src/core/geom/vec3/v3_array_matrix4_rotate.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_matrix4_rotate.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_matrix4_rotate.js +0 -7
- package/src/core/geom/vec3/v3_array_normalize.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_normalize.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_normalize.js +0 -7
- package/src/core/geom/vec3/v3_array_scale.d.ts +0 -7
- package/src/core/geom/vec3/v3_array_scale.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_array_scale.js +0 -7
- package/src/core/geom/vec3/v3_compute_interior_angle.d.ts +0 -7
- package/src/core/geom/vec3/v3_compute_interior_angle.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_compute_interior_angle.js +0 -7
- package/src/core/geom/vec3/v3_dot_array_array.d.ts +0 -7
- package/src/core/geom/vec3/v3_dot_array_array.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_dot_array_array.js +0 -7
- package/src/core/geom/vec3/v3_matrix4_rotate.d.ts +0 -7
- package/src/core/geom/vec3/v3_matrix4_rotate.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_matrix4_rotate.js +0 -7
- package/src/core/geom/vec3/v3_multiply_scalar.d.ts +0 -7
- package/src/core/geom/vec3/v3_multiply_scalar.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_multiply_scalar.js +0 -7
- package/src/core/geom/vec3/v3_quat3_apply.d.ts +0 -7
- package/src/core/geom/vec3/v3_quat3_apply.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_quat3_apply.js +0 -7
- package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts +0 -7
- package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_quat3_apply_inverse.js +0 -7
- package/src/core/geom/vec3/v3_triple_cross_product.d.ts +0 -7
- package/src/core/geom/vec3/v3_triple_cross_product.d.ts.map +0 -1
- package/src/core/geom/vec3/v3_triple_cross_product.js +0 -7
- package/src/core/geom/vec4/v4_multiply_mat4.d.ts +0 -7
- package/src/core/geom/vec4/v4_multiply_mat4.d.ts.map +0 -1
- package/src/core/geom/vec4/v4_multiply_mat4.js +0 -7
- package/src/core/math/fabsf.d.ts +0 -6
- package/src/core/math/fabsf.d.ts.map +0 -1
- package/src/core/math/fabsf.js +0 -6
- package/src/core/model/object/optional_equality.d.ts +0 -10
- package/src/core/model/object/optional_equality.d.ts.map +0 -1
- package/src/core/model/object/optional_equality.js +0 -10
- package/src/core/primitives/strings/string_compute_byte_size.d.ts +0 -7
- package/src/core/primitives/strings/string_compute_byte_size.d.ts.map +0 -1
- package/src/core/primitives/strings/string_compute_byte_size.js +0 -8
- package/src/engine/graphics/FrameThrottle.d.ts +0 -2
- package/src/engine/graphics/FrameThrottle.d.ts.map +0 -1
- package/src/engine/graphics/FrameThrottle.js +0 -2
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts +0 -2
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts.map +0 -1
- package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.js +0 -2
- package/src/engine/graphics/texture/isImageBitmap.d.ts +0 -2
- package/src/engine/graphics/texture/isImageBitmap.d.ts.map +0 -1
- package/src/engine/graphics/texture/isImageBitmap.js +0 -2
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts +0 -10
- package/src/engine/graphics3/AnimationGraphSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/AnimationGraphSystem3.js +0 -10
- package/src/engine/graphics3/AnimationSystem3.d.ts +0 -10
- package/src/engine/graphics3/AnimationSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/AnimationSystem3.js +0 -10
- package/src/engine/graphics3/CameraSystem3.d.ts +0 -10
- package/src/engine/graphics3/CameraSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/CameraSystem3.js +0 -10
- package/src/engine/graphics3/DebugDrawSystem3.d.ts +0 -10
- package/src/engine/graphics3/DebugDrawSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/DebugDrawSystem3.js +0 -10
- package/src/engine/graphics3/DecalSystem3.d.ts +0 -10
- package/src/engine/graphics3/DecalSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/DecalSystem3.js +0 -10
- package/src/engine/graphics3/FogOfWarSystem3.d.ts +0 -10
- package/src/engine/graphics3/FogOfWarSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/FogOfWarSystem3.js +0 -10
- package/src/engine/graphics3/GraphicsEngine3.d.ts +0 -10
- package/src/engine/graphics3/GraphicsEngine3.d.ts.map +0 -1
- package/src/engine/graphics3/GraphicsEngine3.js +0 -10
- package/src/engine/graphics3/HighlightSystem.d.ts +0 -19
- package/src/engine/graphics3/HighlightSystem.d.ts.map +0 -1
- package/src/engine/graphics3/HighlightSystem.js +0 -27
- package/src/engine/graphics3/HighlightSystem3.d.ts +0 -13
- package/src/engine/graphics3/HighlightSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/HighlightSystem3.js +0 -15
- package/src/engine/graphics3/LightSystem3.d.ts +0 -10
- package/src/engine/graphics3/LightSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/LightSystem3.js +0 -10
- package/src/engine/graphics3/MeshSystem3.d.ts +0 -10
- package/src/engine/graphics3/MeshSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/MeshSystem3.js +0 -10
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +0 -10
- package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/ParticipatingMediaSystem3.js +0 -10
- package/src/engine/graphics3/PathDisplaySystem3.d.ts +0 -10
- package/src/engine/graphics3/PathDisplaySystem3.d.ts.map +0 -1
- package/src/engine/graphics3/PathDisplaySystem3.js +0 -10
- package/src/engine/graphics3/PickingSystem3.d.ts +0 -10
- package/src/engine/graphics3/PickingSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/PickingSystem3.js +0 -10
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts +0 -10
- package/src/engine/graphics3/ShadedGeometrySystem3.d.ts.map +0 -1
- package/src/engine/graphics3/ShadedGeometrySystem3.js +0 -10
- package/src/engine/graphics3/TerrainSystem3.d.ts +0 -10
- package/src/engine/graphics3/TerrainSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/TerrainSystem3.js +0 -10
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts +0 -10
- package/src/engine/graphics3/TooltipComponentSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/TooltipComponentSystem3.js +0 -10
- package/src/engine/graphics3/Trail3DSystem3.d.ts +0 -10
- package/src/engine/graphics3/Trail3DSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/Trail3DSystem3.js +0 -10
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts +0 -10
- package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/VolumetricLightMapSystem3.js +0 -10
- package/src/engine/graphics3/WaterSystem3.d.ts +0 -10
- package/src/engine/graphics3/WaterSystem3.d.ts.map +0 -1
- package/src/engine/graphics3/WaterSystem3.js +0 -10
- package/src/engine/network/convertPathToURL.d.ts +0 -2
- package/src/engine/network/convertPathToURL.d.ts.map +0 -1
- package/src/engine/network/convertPathToURL.js +0 -2
- package/src/format/image/png/crc32.d.ts +0 -2
- package/src/format/image/png/crc32.d.ts.map +0 -1
- package/src/format/image/png/crc32.js +0 -7
- package/src/shade/renderer/camera/OrbitalCameraController.d.ts +0 -2
- package/src/shade/renderer/camera/OrbitalCameraController.d.ts.map +0 -1
- package/src/shade/renderer/camera/OrbitalCameraController.js +0 -1
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_heavy.d.ts +0 -16
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_heavy.d.ts.map +0 -1
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_heavy.js +0 -17
- package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/SDF_BUILD_SETTINGS_STRUCT.js +0 -8
- package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts +0 -2
- package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/SFD_BUILD_WORKGROUP_SIZE.js +0 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts +0 -8
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_sdf.js +0 -49
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/chunk_blas_query_volume_sign.js +0 -90
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts +0 -3
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +0 -126
- package/src/shade/renderer/light/environment/octahedral_uv_to_direction.d.ts +0 -8
- package/src/shade/renderer/light/environment/octahedral_uv_to_direction.d.ts.map +0 -1
- package/src/shade/renderer/light/environment/octahedral_uv_to_direction.js +0 -10
- package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts +0 -31
- package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.d.ts.map +0 -1
- package/src/shade/renderer/particles/shaders/shader_particle_init_free_list.js +0 -62
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +0 -42
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.js +0 -153
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +0 -54
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.js +0 -75
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +0 -14
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.js +0 -32
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +0 -30
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.js +0 -184
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +0 -23
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.js +0 -109
|
@@ -1,628 +1,628 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Exact obstacle carving at the triangle-soup level, with a faithful agent-radius offset.
|
|
3
|
-
*
|
|
4
|
-
* Each overhead obstacle's footprint is DILATED by the agent radius (Minkowski sum with a disc: edges
|
|
5
|
-
* pushed out by r, convex corners replaced by a rounded arc), and that dilated polygon is subtracted
|
|
6
|
-
* from the walkable triangles. The resulting hole boundary is therefore the true offset of the
|
|
7
|
-
* obstacle - straight along edges, a clean arc at corners - rather than a wavy/mitred contour produced
|
|
8
|
-
* by sampling-then-eroding. (Run AFTER the outer boundary has been eroded by r, so the obstacle holes
|
|
9
|
-
* are not eroded a second time.)
|
|
10
|
-
*
|
|
11
|
-
* Overhead obstacles are the DOWNWARD-facing source faces; a face carves a walkable triangle only where
|
|
12
|
-
* it sits above it, within `agent_height`.
|
|
13
|
-
*
|
|
14
|
-
* An obstacle is a group of overhead faces that share a vertex. A group is carved as its convex hull
|
|
15
|
-
* when its triangles TILE that hull, and triangle by triangle when they do not - a concave or holed
|
|
16
|
-
* obstacle (an L, a doorway frame), or two obstacles that merely touch. Both routes carve the same
|
|
17
|
-
* ground wherever the hull is valid, because dilation by a disc distributes over union; the hull is
|
|
18
|
-
* kept only because it is the cheaper of the two.
|
|
19
|
-
*
|
|
20
|
-
* The subtraction uses the disjoint half-plane decomposition of a convex-polygon difference:
|
|
21
|
-
* T \ F = U_i ( T ∩ inside(e_0..e_{i-1}) ∩ outside(e_i) )
|
|
22
|
-
* each term convex, the terms disjoint, the union exactly T minus the convex (dilated) footprint F.
|
|
23
|
-
* Each term is cut against the LINE of e_i rather than the edge itself, so its cut edge overshoots that
|
|
24
|
-
* edge's endpoints; splitting it back at them (see {@link push_outside_piece}) keeps the pieces
|
|
25
|
-
* conforming, so the seams fuse into shared edges instead of leaving T-junctions.
|
|
26
|
-
*
|
|
27
|
-
* Everything is data-oriented: clipping happens in the 2D plane perpendicular to `up`, with polygons
|
|
28
|
-
* held as flat `Float64Array`s of (u,v) pairs and a small set of reused scratch buffers. World XYZ is
|
|
29
|
-
* recovered for each surviving vertex by barycentric reconstruction on its (planar) source triangle, so
|
|
30
|
-
* kept pieces stay exactly on the original - possibly tilted - walkable plane. Degenerate triangles are
|
|
31
|
-
* dropped, and triangles that no footprint overlaps are copied straight through without allocation.
|
|
32
|
-
*
|
|
33
|
-
* The footprints are indexed in a BVH (keyed by their (u,v) extent and carve height band), so each soup
|
|
34
|
-
* triangle only tests the footprints that can actually overlap it - O(m log k) rather than O(m k) for m
|
|
35
|
-
* soup triangles and k footprints.
|
|
36
|
-
*/
|
|
37
|
-
|
|
38
|
-
import { BVH } from "../../../../core/bvh2/bvh3/BVH.js";
|
|
39
|
-
import { bvh_query_user_data_intersects_aabb } from "../../../../core/bvh2/bvh3/query/bvh_query_user_data_intersects_aabb.js";
|
|
40
|
-
import { v3_dot } from "../../../../core/geom/vec3/v3_dot.js";
|
|
41
|
-
import { v3_orthonormal_matrix_from_normal } from "../../../../core/geom/vec3/v3_orthonormal_matrix_from_normal.js";
|
|
42
|
-
import { convex_hull_monotone_2d } from "../../../../core/geom/2d/convex-hull/convex_hull_monotone_2d.js";
|
|
43
|
-
import {
|
|
44
|
-
import { polygon2_clip_halfplane } from "../../../../core/geom/2d/polygon/polygon2_clip_halfplane.js";
|
|
45
|
-
|
|
46
|
-
const POINT_EPS = 1e-9;
|
|
47
|
-
const AREA_EPS = 1e-9;
|
|
48
|
-
const HEIGHT_EPS = 1e-3;
|
|
49
|
-
const CORNER_SEGMENT_ANGLE = Math.PI / 6; // ~30 deg per rounded-corner segment
|
|
50
|
-
// How closely a group's triangles must add up to the area of their own convex hull before that hull
|
|
51
|
-
// is accepted as the group's footprint (see the footprint build). Relative, so it means the same thing
|
|
52
|
-
// at any obstacle size.
|
|
53
|
-
//
|
|
54
|
-
// Loose on purpose. The quantity it has to resolve is a real concavity - a notch, a ring's hole, the
|
|
55
|
-
// space between two obstacles that touch - which is a substantial fraction of the hull, never one part
|
|
56
|
-
// in a million of it. Meanwhile the shoelace sums it compares lose absolute precision as the geometry
|
|
57
|
-
// moves away from the origin (~1e-8 at 10,000 units), and a threshold down at that level would start
|
|
58
|
-
// reading noise as concavity. Erring loose only ever sends a group to the hull, which is what it
|
|
59
|
-
// always used; erring tight sends convex groups down the slower per-triangle route for nothing.
|
|
60
|
-
const HULL_TILING_RELATIVE_EPS = 1e-6;
|
|
61
|
-
|
|
62
|
-
// Vertex coincidence key. Quantize each projected coordinate to QUANTIZE (1mm) and pack the two integer
|
|
63
|
-
// coordinates into one safe-integer key: cheaper than a string and with no per-probe allocation. Each
|
|
64
|
-
// axis occupies a biased 26-bit field, so the key stays unique while |u|,|v| < 2^25 / QUANTIZE
|
|
65
|
-
// (~33,000 units). A 16-bit-per-axis pack would only reach ~3.3 units and silently collide - navmesh
|
|
66
|
-
// coordinates routinely exceed that (e.g. geometry built 10,000 units from the origin). Coincident
|
|
67
|
-
// vertices are the same source vertex projected identically, so they match at any quantization; the
|
|
68
|
-
// precision only needs to keep genuinely distinct obstacle corners apart (the smallest is ~0.3 units).
|
|
69
|
-
const QUANTIZE = 1e3;
|
|
70
|
-
const KEY_BIAS = 1 << 25; // 33,554,432
|
|
71
|
-
const KEY_STRIDE = 1 << 26; // 67,108,864
|
|
72
|
-
|
|
73
|
-
// Reused clip scratch (stride 2: u,v). Grown on demand so a single allocation serves the whole soup.
|
|
74
|
-
let _cur = new Float64Array(64);
|
|
75
|
-
let _tmp = new Float64Array(64);
|
|
76
|
-
let _side = new Float64Array(64);
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Ensure `buf` can hold `vertex_count` (u,v) pairs, returning a large-enough buffer (the same one when
|
|
80
|
-
* it already fits). Contents are not preserved - callers grow before writing.
|
|
81
|
-
*
|
|
82
|
-
* @param {Float64Array} buf
|
|
83
|
-
* @param {number} vertex_count
|
|
84
|
-
* @returns {Float64Array}
|
|
85
|
-
*/
|
|
86
|
-
function ensure_capacity(buf, vertex_count) {
|
|
87
|
-
const needed = vertex_count * 2;
|
|
88
|
-
if (buf.length >= needed) return buf;
|
|
89
|
-
let size = buf.length;
|
|
90
|
-
while (size < needed) size *= 2;
|
|
91
|
-
return new Float64Array(size);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Outward Minkowski-with-disc offset of a convex CCW polygon by `r`: each edge is pushed out by `r` and
|
|
96
|
-
* each convex corner is replaced by a rounded arc. Input/output are flat (u,v) pairs.
|
|
97
|
-
*
|
|
98
|
-
* @param {Float64Array} pts convex CCW polygon (stride 2)
|
|
99
|
-
* @param {number} n vertex count
|
|
100
|
-
* @param {number} r offset radius (> 0)
|
|
101
|
-
* @returns {Float64Array} the offset polygon (CCW, stride 2)
|
|
102
|
-
*/
|
|
103
|
-
function offset_convex_ccw(pts, n, r) {
|
|
104
|
-
// outward edge normals (right of each CCW edge)
|
|
105
|
-
const enx = new Float64Array(n);
|
|
106
|
-
const enz = new Float64Array(n);
|
|
107
|
-
for (let i = 0; i < n; i++) {
|
|
108
|
-
const j = (i + 1) % n;
|
|
109
|
-
let dx = pts[j * 2] - pts[i * 2];
|
|
110
|
-
let dz = pts[j * 2 + 1] - pts[i * 2 + 1];
|
|
111
|
-
const len = Math.hypot(dx, dz) || 1;
|
|
112
|
-
dx /= len; dz /= len;
|
|
113
|
-
enx[i] = dz; // (dir.v, -dir.u) = right/outward of a CCW edge
|
|
114
|
-
enz[i] = -dx;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
const out = [];
|
|
118
|
-
for (let i = 0; i < n; i++) {
|
|
119
|
-
const prev_edge = (i - 1 + n) % n; // edge ending at vertex i
|
|
120
|
-
const next_edge = i; // edge starting at vertex i
|
|
121
|
-
const vu = pts[i * 2], vv = pts[i * 2 + 1];
|
|
122
|
-
|
|
123
|
-
const a1 = Math.atan2(enz[prev_edge], enx[prev_edge]);
|
|
124
|
-
const a2 = Math.atan2(enz[next_edge], enx[next_edge]);
|
|
125
|
-
let da = a2 - a1;
|
|
126
|
-
while (da < 0) da += 2 * Math.PI;
|
|
127
|
-
while (da > 2 * Math.PI) da -= 2 * Math.PI;
|
|
128
|
-
|
|
129
|
-
const steps = Math.max(1, Math.ceil(da / CORNER_SEGMENT_ANGLE));
|
|
130
|
-
for (let s = 0; s <= steps; s++) {
|
|
131
|
-
const a = a1 + da * (s / steps);
|
|
132
|
-
out.push(vu + r * Math.cos(a), vv + r * Math.sin(a));
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
return Float64Array.from(out);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Normalise `pts` to CCW, dilate it by `r`, and append it to the footprint lists.
|
|
141
|
-
*
|
|
142
|
-
* Footprints with no area are dropped: they carve nothing, and the subtraction needs a real polygon.
|
|
143
|
-
* `pts` is taken over rather than copied, so callers pass a buffer they will not reuse.
|
|
144
|
-
*
|
|
145
|
-
* @param {Float64Array} pts convex polygon (stride 2)
|
|
146
|
-
* @param {number} n vertex count
|
|
147
|
-
* @param {number} height the height this footprint carves from
|
|
148
|
-
* @param {number} r dilation radius
|
|
149
|
-
* @param {Float64Array[]} out_poly
|
|
150
|
-
* @param {number[]} out_h
|
|
151
|
-
*/
|
|
152
|
-
function push_footprint(pts, n, height, r, out_poly, out_h) {
|
|
153
|
-
const area =
|
|
154
|
-
|
|
155
|
-
// A polygon with no area has no reliable winding either, and `offset_convex_ccw` turns a mis-wound
|
|
156
|
-
// one inside out - so these are dropped rather than dilated, even though a positive radius would
|
|
157
|
-
// otherwise give a degenerate footprint a real disc to carve. Only sub-AREA_EPS input reaches this:
|
|
158
|
-
// at 1e-9 that is an obstacle tens of micrometres across, which is not one.
|
|
159
|
-
if (Math.abs(area) <= AREA_EPS) {
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
let poly = pts;
|
|
164
|
-
|
|
165
|
-
// CCW - interior to the left of each edge - is what the subtraction expects
|
|
166
|
-
if (area < 0) {
|
|
167
|
-
poly = new Float64Array(n * 2);
|
|
168
|
-
|
|
169
|
-
for (let i = 0; i < n; i++) {
|
|
170
|
-
poly[i * 2] = pts[(n - 1 - i) * 2];
|
|
171
|
-
poly[i * 2 + 1] = pts[(n - 1 - i) * 2 + 1];
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
if (r > 0) {
|
|
176
|
-
poly = offset_convex_ccw(poly, n, r);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
out_poly.push(poly);
|
|
180
|
-
out_h.push(height);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* Append the piece that survives outside one footprint edge, made SEAM-CONFORMING with the pieces on
|
|
185
|
-
* the other side of that edge.
|
|
186
|
-
*
|
|
187
|
-
* Each piece is cut against the LINE of a footprint edge, so its cut edge runs the full width of the
|
|
188
|
-
* piece - past the edge's own endpoints. The other side of that line is subdivided AT those endpoints:
|
|
189
|
-
* the obstacle hole ends where the corner arc begins, and the next piece takes over from there. One
|
|
190
|
-
* edge meeting two is a T-junction, so the faces never fuse into a shared edge and the seam survives
|
|
191
|
-
* into the navmesh as a crack. It bites hardest at a footprint corner that lands a hair inside a source
|
|
192
|
-
* triangle: the piece above the edge is then cut short at the triangle's own boundary, microns from the
|
|
193
|
-
* corner where the pieces below it start - close enough that the T-junction resolver dismisses the
|
|
194
|
-
* corner as that edge's endpoint, far enough that vertex welding leaves the two distinct.
|
|
195
|
-
*
|
|
196
|
-
* Splitting the cut edge at the footprint edge's own endpoints - inserted with their exact coordinates,
|
|
197
|
-
* so both sides of the seam name the same vertex - removes the T-junction at the source.
|
|
198
|
-
*
|
|
199
|
-
* @param {Float64Array} pts piece vertices (stride 2)
|
|
200
|
-
* @param {number} n piece vertex count
|
|
201
|
-
* @param {number} ex
|
|
202
|
-
* @param {number} ez the footprint edge's start
|
|
203
|
-
* @param {number} dx
|
|
204
|
-
* @param {number} dz the footprint edge's extent (end = start + extent)
|
|
205
|
-
* @param {Float64Array[]} out_pieces destination list
|
|
206
|
-
*/
|
|
207
|
-
function push_outside_piece(pts, n, ex, ez, dx, dz, out_pieces) {
|
|
208
|
-
// Distance to the cut line is measured in the clipper's own unnormalized (cross-product) units, so
|
|
209
|
-
// "on the line" here means exactly what the clip took it to mean.
|
|
210
|
-
const off_line = (k) => Math.abs(dx * (pts[k * 2 + 1] - ez) - dz * (pts[k * 2] - ex)) > POINT_EPS;
|
|
211
|
-
|
|
212
|
-
// the piece edge lying along the cut line - the seam
|
|
213
|
-
let seam = -1;
|
|
214
|
-
for (let k = 0; k < n; k++) {
|
|
215
|
-
if (!off_line(k) && !off_line((k + 1) % n)) { seam = k; break; }
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
if (seam < 0) {
|
|
219
|
-
// the clip did not cut this piece (it already lay wholly outside), so there is no seam to conform
|
|
220
|
-
out_pieces.push(pts.slice(0, n * 2));
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
// The fan triangulation downstream runs from vertex 0, and a seam vertex inserted below is collinear
|
|
225
|
-
// with the seam's ends - so with vertex 0 on the seam line its fan triangle is degenerate and gets
|
|
226
|
-
// dropped, restoring the T-junction. Emit the piece starting from a vertex off the line instead; the
|
|
227
|
-
// caller only pushes pieces of non-zero area, so one exists.
|
|
228
|
-
let start = 0;
|
|
229
|
-
for (let k = 0; k < n; k++) {
|
|
230
|
-
if (off_line(k)) { start = k; break; }
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
// which of the footprint edge's endpoints fall strictly inside the seam
|
|
234
|
-
const a_u = pts[seam * 2], a_v = pts[seam * 2 + 1];
|
|
235
|
-
const b = (seam + 1) % n;
|
|
236
|
-
const eu = pts[b * 2] - a_u, ev = pts[b * 2 + 1] - a_v;
|
|
237
|
-
const seam_sq = eu * eu + ev * ev;
|
|
238
|
-
|
|
239
|
-
// `along` projects onto the seam scaled by its length, so both endpoint tests compare squared
|
|
240
|
-
// distances against POINT_EPS without a square root
|
|
241
|
-
const along_start = (ex - a_u) * eu + (ez - a_v) * ev;
|
|
242
|
-
const along_end = along_start + dx * eu + dz * ev;
|
|
243
|
-
const inside = (along) => along > 0 && along < seam_sq
|
|
244
|
-
&& along * along > POINT_EPS * POINT_EPS * seam_sq
|
|
245
|
-
&& (seam_sq - along) * (seam_sq - along) > POINT_EPS * POINT_EPS * seam_sq;
|
|
246
|
-
|
|
247
|
-
const take_start = inside(along_start);
|
|
248
|
-
const take_end = inside(along_end);
|
|
249
|
-
|
|
250
|
-
// seam and footprint edge are the same line, so which endpoint comes first along the seam is just
|
|
251
|
-
// whether the two run the same way
|
|
252
|
-
const forward = dx * eu + dz * ev > 0;
|
|
253
|
-
const first_u = forward ? ex : ex + dx, first_v = forward ? ez : ez + dz;
|
|
254
|
-
const last_u = forward ? ex + dx : ex, last_v = forward ? ez + dz : ez;
|
|
255
|
-
const take_first = forward ? take_start : take_end;
|
|
256
|
-
const take_last = forward ? take_end : take_start;
|
|
257
|
-
|
|
258
|
-
const out = new Float64Array((n + (take_first ? 1 : 0) + (take_last ? 1 : 0)) * 2);
|
|
259
|
-
let w = 0;
|
|
260
|
-
for (let k = 0; k < n; k++) {
|
|
261
|
-
const v = (start + k) % n;
|
|
262
|
-
out[w++] = pts[v * 2];
|
|
263
|
-
out[w++] = pts[v * 2 + 1];
|
|
264
|
-
|
|
265
|
-
if (v !== seam) continue;
|
|
266
|
-
|
|
267
|
-
if (take_first) { out[w++] = first_u; out[w++] = first_v; }
|
|
268
|
-
if (take_last) { out[w++] = last_u; out[w++] = last_v; }
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
out_pieces.push(out);
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/**
|
|
275
|
-
* Subtract convex footprint `fp` from a single convex polygon, appending the convex, disjoint pieces of
|
|
276
|
-
* (polygon \ fp) to `out_pieces` as right-sized `Float64Array`s. `fp` must be CCW (interior on the left
|
|
277
|
-
* of each edge). The polygon's interior remainder (the part inside `fp`) is discarded.
|
|
278
|
-
*
|
|
279
|
-
* @param {Float64Array} poly polygon vertices (stride 2)
|
|
280
|
-
* @param {number} poly_n polygon vertex count
|
|
281
|
-
* @param {Float64Array} fp footprint vertices (stride 2, CCW)
|
|
282
|
-
* @param {number} fp_n footprint vertex count
|
|
283
|
-
* @param {Float64Array[]} out_pieces destination list; surviving outside pieces are pushed
|
|
284
|
-
*/
|
|
285
|
-
function subtract_footprint(poly, poly_n, fp, fp_n, out_pieces) {
|
|
286
|
-
// current = the running intersection with the inside half-planes processed so far
|
|
287
|
-
_cur = ensure_capacity(_cur, poly_n + fp_n);
|
|
288
|
-
_tmp = ensure_capacity(_tmp, poly_n + fp_n);
|
|
289
|
-
_side = ensure_capacity(_side, poly_n + fp_n);
|
|
290
|
-
|
|
291
|
-
let cur = _cur;
|
|
292
|
-
let tmp = _tmp;
|
|
293
|
-
for (let i = 0; i < poly_n * 2; i++) cur[i] = poly[i];
|
|
294
|
-
let cur_n = poly_n;
|
|
295
|
-
|
|
296
|
-
for (let i = 0; i < fp_n; i++) {
|
|
297
|
-
if (cur_n < 3) return; // fully consumed - nothing outside remains
|
|
298
|
-
|
|
299
|
-
const j = (i + 1) % fp_n;
|
|
300
|
-
const ex = fp[i * 2], ez = fp[i * 2 + 1];
|
|
301
|
-
const dx = fp[j * 2] - ex;
|
|
302
|
-
const dz = fp[j * 2 + 1] - ez;
|
|
303
|
-
if (Math.abs(dx) < POINT_EPS && Math.abs(dz) < POINT_EPS) continue; // degenerate edge
|
|
304
|
-
|
|
305
|
-
// piece outside this edge (and inside all earlier edges) leaves the footprint here -> it survives
|
|
306
|
-
const side_n = polygon2_clip_halfplane(cur, cur_n, _side, ex, ez, dx, dz, false);
|
|
307
|
-
if (side_n >= 3 && Math.abs(
|
|
308
|
-
push_outside_piece(_side, side_n, ex, ez, dx, dz, out_pieces);
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
// keep marching with the part still inside this edge
|
|
312
|
-
cur_n = polygon2_clip_halfplane(cur, cur_n, tmp, ex, ez, dx, dz, true);
|
|
313
|
-
const swap = cur; cur = tmp; tmp = swap;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
/**
|
|
318
|
-
* @param {number[]} soup flat XYZ triangle soup (9 floats per triangle)
|
|
319
|
-
* @param {number} triangle_count
|
|
320
|
-
* @param {BinaryTopology} source source mesh (face normals must be populated)
|
|
321
|
-
* @param {number} agent_height
|
|
322
|
-
* @param {number} agent_radius dilation applied to each footprint
|
|
323
|
-
* @param {Vector3} up
|
|
324
|
-
* @returns {number[]} new soup with (dilated) obstacle footprints removed
|
|
325
|
-
*/
|
|
326
|
-
export function clip_soup_against_overhangs(soup, triangle_count, source, agent_height, agent_radius, up) {
|
|
327
|
-
let upx = up.x, upy = up.y, upz = up.z;
|
|
328
|
-
const ul = Math.hypot(upx, upy, upz);
|
|
329
|
-
if (ul === 0) return soup.slice(0, triangle_count * 9);
|
|
330
|
-
upx /= ul; upy /= ul; upz /= ul;
|
|
331
|
-
|
|
332
|
-
// orthonormal basis: rows 0,1 span the plane perpendicular to up (our u,v axes), row 2 is up itself
|
|
333
|
-
const basis = new Float64Array(9);
|
|
334
|
-
v3_orthonormal_matrix_from_normal(basis, 0, upx, upy, upz);
|
|
335
|
-
const u_x = basis[0], u_y = basis[1], u_z = basis[2];
|
|
336
|
-
const v_x = basis[3], v_y = basis[4], v_z = basis[5];
|
|
337
|
-
|
|
338
|
-
// collect downward-facing (overhead) source triangles as flat (u,v) triples plus their mean height
|
|
339
|
-
const overhead_uv = []; // stride 6: u0,v0,u1,v1,u2,v2
|
|
340
|
-
const overhead_h = [];
|
|
341
|
-
const fn = new Float32Array(3);
|
|
342
|
-
const fc = new Float32Array(3);
|
|
343
|
-
const face_count = source.faces.size;
|
|
344
|
-
for (let f = 0; f < face_count; f++) {
|
|
345
|
-
if (!source.faces.is_allocated(f)) continue;
|
|
346
|
-
source.face_read_normal(fn, 0, f);
|
|
347
|
-
if (fn[0] * upx + fn[1] * upy + fn[2] * upz >= -HEIGHT_EPS) continue; // not downward-facing
|
|
348
|
-
|
|
349
|
-
let l = source.face_read_loop(f);
|
|
350
|
-
let hsum = 0;
|
|
351
|
-
for (let k = 0; k < 3; k++) {
|
|
352
|
-
source.vertex_read_coordinate(fc, 0, source.loop_read_vertex(l));
|
|
353
|
-
const x = fc[0], y = fc[1], z = fc[2];
|
|
354
|
-
overhead_uv.push(v3_dot(x, y, z, u_x, u_y, u_z), v3_dot(x, y, z, v_x, v_y, v_z));
|
|
355
|
-
hsum += v3_dot(x, y, z, upx, upy, upz);
|
|
356
|
-
l = source.loop_read_next(l);
|
|
357
|
-
}
|
|
358
|
-
overhead_h.push(hsum / 3);
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
const overhead_count = overhead_h.length;
|
|
362
|
-
if (overhead_count === 0) return soup.slice(0, triangle_count * 9);
|
|
363
|
-
|
|
364
|
-
// Group overhead triangles that share a (coincident) vertex into one obstacle. Each obstacle's
|
|
365
|
-
// footprint is the convex hull of its vertices, dilated by the agent radius. Treating the obstacle
|
|
366
|
-
// as one polygon (rather than per-triangle) avoids self-touching/pinched union boundaries.
|
|
367
|
-
const parent = new Int32Array(overhead_count);
|
|
368
|
-
for (let i = 0; i < overhead_count; i++) parent[i] = i;
|
|
369
|
-
const find = (a) => { while (parent[a] !== a) { parent[a] = parent[parent[a]]; a = parent[a]; } return a; };
|
|
370
|
-
|
|
371
|
-
const key_to_tri = new Map();
|
|
372
|
-
for (let i = 0; i < overhead_count; i++) {
|
|
373
|
-
for (let k = 0; k < 3; k++) {
|
|
374
|
-
const ku = Math.round(overhead_uv[i * 6 + k * 2] * QUANTIZE);
|
|
375
|
-
const kv = Math.round(overhead_uv[i * 6 + k * 2 + 1] * QUANTIZE);
|
|
376
|
-
const key = (ku + KEY_BIAS) * KEY_STRIDE + (kv + KEY_BIAS);
|
|
377
|
-
const seen = key_to_tri.get(key);
|
|
378
|
-
if (seen !== undefined) parent[find(i)] = find(seen); else key_to_tri.set(key, i);
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
/** @type {Map<number, {pts: number[], members: number[], hsum: number}>} */
|
|
383
|
-
const groups = new Map();
|
|
384
|
-
for (let i = 0; i < overhead_count; i++) {
|
|
385
|
-
const root = find(i);
|
|
386
|
-
let g = groups.get(root);
|
|
387
|
-
if (g === undefined) { g = { pts: [], members: [], hsum: 0 }; groups.set(root, g); }
|
|
388
|
-
for (let k = 0; k < 6; k++) g.pts.push(overhead_uv[i * 6 + k]);
|
|
389
|
-
g.members.push(i);
|
|
390
|
-
g.hsum += overhead_h[i];
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
// Each footprint: a CCW (dilated) convex polygon in (u,v) plus the height it carves from.
|
|
394
|
-
//
|
|
395
|
-
// A group's convex hull is its footprint only when the group's triangles TILE that hull. An L, a
|
|
396
|
-
// ring, or two obstacles that merely touch do not, and their hull spans ground nothing is above -
|
|
397
|
-
// carving it takes away walkable area no obstacle covers. A doorway frame is a ring, and hulling
|
|
398
|
-
// one fills in the doorway. Comparing the hull's area against the triangles' own tells the two
|
|
399
|
-
// cases apart: a tiling leaves no slack, and the hull is then used exactly as before.
|
|
400
|
-
//
|
|
401
|
-
// Matching areas is the safe direction to be wrong in. Any duplicated or overlapping overhead area
|
|
402
|
-
// pushes a group off the hull and onto the per-triangle route, which is correct either way. The one
|
|
403
|
-
// input that defeats it is duplicate area equal to the hull's slack to within the epsilon, and what
|
|
404
|
-
// that costs is the hull carve this has always done.
|
|
405
|
-
//
|
|
406
|
-
// Where they do not tile it, each triangle is carved on its own. That is exact, not merely safer:
|
|
407
|
-
// dilation by a disc distributes over union - (A u B) (+) D = (A (+) D) u (B (+) D) - so
|
|
408
|
-
// subtracting each triangle's own dilated footprint in turn removes precisely the dilated union,
|
|
409
|
-
// which is the true offset of an arbitrarily concave obstacle. The carve loop below subtracts
|
|
410
|
-
// footprints sequentially from a running set of pieces, so the result stays a partition of the
|
|
411
|
-
// soup triangle and the footprints never cut across one another.
|
|
412
|
-
/** @type {Float64Array[]} */
|
|
413
|
-
const footprint_poly = [];
|
|
414
|
-
const footprint_h = [];
|
|
415
|
-
for (const g of groups.values()) {
|
|
416
|
-
const member_count = g.members.length;
|
|
417
|
-
const hull = convex_hull_monotone_2d(g.pts, g.pts.length / 2);
|
|
418
|
-
|
|
419
|
-
if (hull.length >= 3) {
|
|
420
|
-
const hull_poly = new Float64Array(hull.length * 2);
|
|
421
|
-
for (let i = 0; i < hull.length; i++) {
|
|
422
|
-
hull_poly[i * 2] = g.pts[hull[i] * 2];
|
|
423
|
-
hull_poly[i * 2 + 1] = g.pts[hull[i] * 2 + 1];
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
const hull_area = Math.abs(
|
|
427
|
-
|
|
428
|
-
let member_area = 0;
|
|
429
|
-
for (let m = 0; m < member_count; m++) {
|
|
430
|
-
const b = g.members[m] * 6;
|
|
431
|
-
member_area += Math.abs(
|
|
432
|
-
(overhead_uv[b + 2] - overhead_uv[b]) * (overhead_uv[b + 5] - overhead_uv[b + 1])
|
|
433
|
-
- (overhead_uv[b + 4] - overhead_uv[b]) * (overhead_uv[b + 3] - overhead_uv[b + 1])
|
|
434
|
-
) * 0.5;
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
// `member_area` at zero means every triangle in the group is degenerate. The hull is then
|
|
438
|
-
// all there is to go on, and it is what this has always carved - leave that alone.
|
|
439
|
-
const tiles_hull = member_area <= AREA_EPS
|
|
440
|
-
|| Math.abs(hull_area - member_area) <= Math.max(AREA_EPS, hull_area * HULL_TILING_RELATIVE_EPS);
|
|
441
|
-
|
|
442
|
-
if (tiles_hull) {
|
|
443
|
-
push_footprint(
|
|
444
|
-
hull_poly, hull.length, g.hsum / member_count,
|
|
445
|
-
agent_radius, footprint_poly, footprint_h
|
|
446
|
-
);
|
|
447
|
-
|
|
448
|
-
continue;
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
for (let m = 0; m < member_count; m++) {
|
|
453
|
-
const i = g.members[m];
|
|
454
|
-
const b = i * 6;
|
|
455
|
-
|
|
456
|
-
push_footprint(
|
|
457
|
-
Float64Array.of(
|
|
458
|
-
overhead_uv[b], overhead_uv[b + 1],
|
|
459
|
-
overhead_uv[b + 2], overhead_uv[b + 3],
|
|
460
|
-
overhead_uv[b + 4], overhead_uv[b + 5]
|
|
461
|
-
),
|
|
462
|
-
3, overhead_h[i],
|
|
463
|
-
agent_radius, footprint_poly, footprint_h
|
|
464
|
-
);
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
const footprint_count = footprint_poly.length;
|
|
469
|
-
if (footprint_count === 0) return soup.slice(0, triangle_count * 9);
|
|
470
|
-
|
|
471
|
-
// Broad-phase index: one leaf per footprint, in (u, v, height) space. The first two axes are the
|
|
472
|
-
// dilated footprint's (u,v) extent; the third is the band of soup heights it can carve - a triangle
|
|
473
|
-
// at mean height `th` is carved by an obstacle at height `h` iff 0 < h - th <= agent_height. A soup
|
|
474
|
-
// triangle then queries this BVH with its own (u,v) extent at `th` to get just the candidate
|
|
475
|
-
// obstacles, instead of scanning all of them.
|
|
476
|
-
const footprint_bvh = new BVH();
|
|
477
|
-
footprint_bvh.release_all();
|
|
478
|
-
for (let fi = 0; fi < footprint_count; fi++) {
|
|
479
|
-
const poly = footprint_poly[fi];
|
|
480
|
-
let min_u = Infinity, min_v = Infinity, max_u = -Infinity, max_v = -Infinity;
|
|
481
|
-
for (let i = 0; i < poly.length; i += 2) {
|
|
482
|
-
const u = poly[i], v = poly[i + 1];
|
|
483
|
-
if (u < min_u) min_u = u;
|
|
484
|
-
if (u > max_u) max_u = u;
|
|
485
|
-
if (v < min_v) min_v = v;
|
|
486
|
-
if (v > max_v) max_v = v;
|
|
487
|
-
}
|
|
488
|
-
const h = footprint_h[fi];
|
|
489
|
-
const node = footprint_bvh.allocate_node();
|
|
490
|
-
footprint_bvh.node_set_user_data(node, fi);
|
|
491
|
-
footprint_bvh.node_set_aabb_primitive(
|
|
492
|
-
node,
|
|
493
|
-
min_u, min_v, h - agent_height - HEIGHT_EPS,
|
|
494
|
-
max_u, max_v, h - HEIGHT_EPS
|
|
495
|
-
);
|
|
496
|
-
footprint_bvh.insert_leaf(node);
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
const out = [];
|
|
500
|
-
|
|
501
|
-
// per-triangle reusable storage
|
|
502
|
-
const tri_uv = new Float64Array(6); // u0,v0,u1,v1,u2,v2 of the source triangle
|
|
503
|
-
const px = new Float64Array(3), py = new Float64Array(3), pz = new Float64Array(3);
|
|
504
|
-
const query_aabb = new Float64Array(6);
|
|
505
|
-
const query_hits = new Int32Array(footprint_count);
|
|
506
|
-
/** @type {Float64Array[]} */
|
|
507
|
-
let pieces = [];
|
|
508
|
-
/** @type {Float64Array[]} */
|
|
509
|
-
let next_pieces = [];
|
|
510
|
-
|
|
511
|
-
for (let t = 0; t < triangle_count; t++) {
|
|
512
|
-
const o = t * 9;
|
|
513
|
-
|
|
514
|
-
let th = 0;
|
|
515
|
-
for (let k = 0; k < 3; k++) {
|
|
516
|
-
const x = soup[o + k * 3], y = soup[o + k * 3 + 1], z = soup[o + k * 3 + 2];
|
|
517
|
-
px[k] = x; py[k] = y; pz[k] = z;
|
|
518
|
-
tri_uv[k * 2] = v3_dot(x, y, z, u_x, u_y, u_z);
|
|
519
|
-
tri_uv[k * 2 + 1] = v3_dot(x, y, z, v_x, v_y, v_z);
|
|
520
|
-
th += v3_dot(x, y, z, upx, upy, upz);
|
|
521
|
-
}
|
|
522
|
-
th /= 3;
|
|
523
|
-
|
|
524
|
-
// barycentric denominator (twice the signed uv area of the triangle)
|
|
525
|
-
const e1u = tri_uv[2] - tri_uv[0], e1v = tri_uv[3] - tri_uv[1];
|
|
526
|
-
const e2u = tri_uv[4] - tri_uv[0], e2v = tri_uv[5] - tri_uv[1];
|
|
527
|
-
const det = e1u * e2v - e2u * e1v;
|
|
528
|
-
|
|
529
|
-
if (Math.abs(det) <= AREA_EPS) {
|
|
530
|
-
// degenerate in (u,v) (a near-vertical triangle): cannot carve meaningfully, pass through
|
|
531
|
-
for (let i = 0; i < 9; i++) out.push(soup[o + i]);
|
|
532
|
-
continue;
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
// broad-phase: only the obstacles whose (u,v) extent and height band overlap this triangle
|
|
536
|
-
let min_u = tri_uv[0], max_u = tri_uv[0], min_v = tri_uv[1], max_v = tri_uv[1];
|
|
537
|
-
for (let k = 1; k < 3; k++) {
|
|
538
|
-
const u = tri_uv[k * 2], v = tri_uv[k * 2 + 1];
|
|
539
|
-
if (u < min_u) min_u = u;
|
|
540
|
-
if (u > max_u) max_u = u;
|
|
541
|
-
if (v < min_v) min_v = v;
|
|
542
|
-
if (v > max_v) max_v = v;
|
|
543
|
-
}
|
|
544
|
-
query_aabb[0] = min_u; query_aabb[1] = min_v; query_aabb[2] = th;
|
|
545
|
-
query_aabb[3] = max_u; query_aabb[4] = max_v; query_aabb[5] = th;
|
|
546
|
-
|
|
547
|
-
const hit_count = bvh_query_user_data_intersects_aabb(query_hits, 0, footprint_bvh, query_aabb);
|
|
548
|
-
if (hit_count === 0) {
|
|
549
|
-
// no obstacle overlaps here - copy straight through
|
|
550
|
-
for (let i = 0; i < 9; i++) out.push(soup[o + i]);
|
|
551
|
-
continue;
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
// start with the whole triangle as one piece, then subtract each overlapping footprint
|
|
555
|
-
pieces.length = 0;
|
|
556
|
-
pieces.push(Float64Array.of(tri_uv[0], tri_uv[1], tri_uv[2], tri_uv[3], tri_uv[4], tri_uv[5]));
|
|
557
|
-
|
|
558
|
-
for (let qi = 0; qi < hit_count; qi++) {
|
|
559
|
-
const fi = query_hits[qi];
|
|
560
|
-
const dh = footprint_h[fi] - th;
|
|
561
|
-
if (dh <= HEIGHT_EPS || dh > agent_height + HEIGHT_EPS) continue; // exact band test
|
|
562
|
-
|
|
563
|
-
const fp = footprint_poly[fi];
|
|
564
|
-
const fp_n = fp.length / 2;
|
|
565
|
-
|
|
566
|
-
next_pieces.length = 0;
|
|
567
|
-
for (let pi = 0; pi < pieces.length; pi++) {
|
|
568
|
-
subtract_footprint(pieces[pi], pieces[pi].length / 2, fp, fp_n, next_pieces);
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
const swap = pieces; pieces = next_pieces; next_pieces = swap;
|
|
572
|
-
if (pieces.length === 0) break;
|
|
573
|
-
}
|
|
574
|
-
|
|
575
|
-
const inv_det = 1 / det;
|
|
576
|
-
for (let pi = 0; pi < pieces.length; pi++) {
|
|
577
|
-
const poly = pieces[pi];
|
|
578
|
-
const poly_n = poly.length / 2;
|
|
579
|
-
|
|
580
|
-
// fan-triangulate the surviving piece and reconstruct world XYZ per vertex
|
|
581
|
-
for (let i = 1; i + 1 < poly_n; i++) {
|
|
582
|
-
const u0 = poly[0], v0 = poly[1];
|
|
583
|
-
const u1 = poly[i * 2], v1 = poly[i * 2 + 1];
|
|
584
|
-
const u2 = poly[(i + 1) * 2], v2 = poly[(i + 1) * 2 + 1];
|
|
585
|
-
|
|
586
|
-
const area2 = Math.abs((u1 - u0) * (v2 - v0) - (u2 - u0) * (v1 - v0));
|
|
587
|
-
if (area2 < 2 * AREA_EPS) continue;
|
|
588
|
-
|
|
589
|
-
emit_xyz(out, u0, v0, tri_uv, px, py, pz, e1u, e1v, e2u, e2v, inv_det);
|
|
590
|
-
emit_xyz(out, u1, v1, tri_uv, px, py, pz, e1u, e1v, e2u, e2v, inv_det);
|
|
591
|
-
emit_xyz(out, u2, v2, tri_uv, px, py, pz, e1u, e1v, e2u, e2v, inv_det);
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
}
|
|
595
|
-
|
|
596
|
-
return out;
|
|
597
|
-
}
|
|
598
|
-
|
|
599
|
-
/**
|
|
600
|
-
* Reconstruct the world XYZ of a (u,v) point lying in a source triangle (barycentric on the triangle's
|
|
601
|
-
* planar uv coordinates) and append it to `out`.
|
|
602
|
-
*
|
|
603
|
-
* @param {number[]} out destination soup
|
|
604
|
-
* @param {number} u
|
|
605
|
-
* @param {number} v the point in (u,v)
|
|
606
|
-
* @param {Float64Array} tri_uv the triangle's uv corners (stride 2, vertex 0 is the origin)
|
|
607
|
-
* @param {Float64Array} px
|
|
608
|
-
* @param {Float64Array} py
|
|
609
|
-
* @param {Float64Array} pz the triangle's world corners
|
|
610
|
-
* @param {number} e1u
|
|
611
|
-
* @param {number} e1v edge (v1 - v0) in uv
|
|
612
|
-
* @param {number} e2u
|
|
613
|
-
* @param {number} e2v edge (v2 - v0) in uv
|
|
614
|
-
* @param {number} inv_det reciprocal of the uv area determinant
|
|
615
|
-
*/
|
|
616
|
-
function emit_xyz(out, u, v, tri_uv, px, py, pz, e1u, e1v, e2u, e2v, inv_det) {
|
|
617
|
-
const du = u - tri_uv[0];
|
|
618
|
-
const dv = v - tri_uv[1];
|
|
619
|
-
const w1 = (du * e2v - e2u * dv) * inv_det;
|
|
620
|
-
const w2 = (e1u * dv - du * e1v) * inv_det;
|
|
621
|
-
const w0 = 1 - w1 - w2;
|
|
622
|
-
|
|
623
|
-
out.push(
|
|
624
|
-
w0 * px[0] + w1 * px[1] + w2 * px[2],
|
|
625
|
-
w0 * py[0] + w1 * py[1] + w2 * py[2],
|
|
626
|
-
w0 * pz[0] + w1 * pz[1] + w2 * pz[2]
|
|
627
|
-
);
|
|
628
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Exact obstacle carving at the triangle-soup level, with a faithful agent-radius offset.
|
|
3
|
+
*
|
|
4
|
+
* Each overhead obstacle's footprint is DILATED by the agent radius (Minkowski sum with a disc: edges
|
|
5
|
+
* pushed out by r, convex corners replaced by a rounded arc), and that dilated polygon is subtracted
|
|
6
|
+
* from the walkable triangles. The resulting hole boundary is therefore the true offset of the
|
|
7
|
+
* obstacle - straight along edges, a clean arc at corners - rather than a wavy/mitred contour produced
|
|
8
|
+
* by sampling-then-eroding. (Run AFTER the outer boundary has been eroded by r, so the obstacle holes
|
|
9
|
+
* are not eroded a second time.)
|
|
10
|
+
*
|
|
11
|
+
* Overhead obstacles are the DOWNWARD-facing source faces; a face carves a walkable triangle only where
|
|
12
|
+
* it sits above it, within `agent_height`.
|
|
13
|
+
*
|
|
14
|
+
* An obstacle is a group of overhead faces that share a vertex. A group is carved as its convex hull
|
|
15
|
+
* when its triangles TILE that hull, and triangle by triangle when they do not - a concave or holed
|
|
16
|
+
* obstacle (an L, a doorway frame), or two obstacles that merely touch. Both routes carve the same
|
|
17
|
+
* ground wherever the hull is valid, because dilation by a disc distributes over union; the hull is
|
|
18
|
+
* kept only because it is the cheaper of the two.
|
|
19
|
+
*
|
|
20
|
+
* The subtraction uses the disjoint half-plane decomposition of a convex-polygon difference:
|
|
21
|
+
* T \ F = U_i ( T ∩ inside(e_0..e_{i-1}) ∩ outside(e_i) )
|
|
22
|
+
* each term convex, the terms disjoint, the union exactly T minus the convex (dilated) footprint F.
|
|
23
|
+
* Each term is cut against the LINE of e_i rather than the edge itself, so its cut edge overshoots that
|
|
24
|
+
* edge's endpoints; splitting it back at them (see {@link push_outside_piece}) keeps the pieces
|
|
25
|
+
* conforming, so the seams fuse into shared edges instead of leaving T-junctions.
|
|
26
|
+
*
|
|
27
|
+
* Everything is data-oriented: clipping happens in the 2D plane perpendicular to `up`, with polygons
|
|
28
|
+
* held as flat `Float64Array`s of (u,v) pairs and a small set of reused scratch buffers. World XYZ is
|
|
29
|
+
* recovered for each surviving vertex by barycentric reconstruction on its (planar) source triangle, so
|
|
30
|
+
* kept pieces stay exactly on the original - possibly tilted - walkable plane. Degenerate triangles are
|
|
31
|
+
* dropped, and triangles that no footprint overlaps are copied straight through without allocation.
|
|
32
|
+
*
|
|
33
|
+
* The footprints are indexed in a BVH (keyed by their (u,v) extent and carve height band), so each soup
|
|
34
|
+
* triangle only tests the footprints that can actually overlap it - O(m log k) rather than O(m k) for m
|
|
35
|
+
* soup triangles and k footprints.
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
import { BVH } from "../../../../core/bvh2/bvh3/BVH.js";
|
|
39
|
+
import { bvh_query_user_data_intersects_aabb } from "../../../../core/bvh2/bvh3/query/bvh_query_user_data_intersects_aabb.js";
|
|
40
|
+
import { v3_dot } from "../../../../core/geom/vec3/v3_dot.js";
|
|
41
|
+
import { v3_orthonormal_matrix_from_normal } from "../../../../core/geom/vec3/v3_orthonormal_matrix_from_normal.js";
|
|
42
|
+
import { convex_hull_monotone_2d } from "../../../../core/geom/2d/convex-hull/convex_hull_monotone_2d.js";
|
|
43
|
+
import { polygon2_signed_area } from "../../../../core/geom/2d/polygon/polygon2_signed_area.js";
|
|
44
|
+
import { polygon2_clip_halfplane } from "../../../../core/geom/2d/polygon/polygon2_clip_halfplane.js";
|
|
45
|
+
|
|
46
|
+
const POINT_EPS = 1e-9;
|
|
47
|
+
const AREA_EPS = 1e-9;
|
|
48
|
+
const HEIGHT_EPS = 1e-3;
|
|
49
|
+
const CORNER_SEGMENT_ANGLE = Math.PI / 6; // ~30 deg per rounded-corner segment
|
|
50
|
+
// How closely a group's triangles must add up to the area of their own convex hull before that hull
|
|
51
|
+
// is accepted as the group's footprint (see the footprint build). Relative, so it means the same thing
|
|
52
|
+
// at any obstacle size.
|
|
53
|
+
//
|
|
54
|
+
// Loose on purpose. The quantity it has to resolve is a real concavity - a notch, a ring's hole, the
|
|
55
|
+
// space between two obstacles that touch - which is a substantial fraction of the hull, never one part
|
|
56
|
+
// in a million of it. Meanwhile the shoelace sums it compares lose absolute precision as the geometry
|
|
57
|
+
// moves away from the origin (~1e-8 at 10,000 units), and a threshold down at that level would start
|
|
58
|
+
// reading noise as concavity. Erring loose only ever sends a group to the hull, which is what it
|
|
59
|
+
// always used; erring tight sends convex groups down the slower per-triangle route for nothing.
|
|
60
|
+
const HULL_TILING_RELATIVE_EPS = 1e-6;
|
|
61
|
+
|
|
62
|
+
// Vertex coincidence key. Quantize each projected coordinate to QUANTIZE (1mm) and pack the two integer
|
|
63
|
+
// coordinates into one safe-integer key: cheaper than a string and with no per-probe allocation. Each
|
|
64
|
+
// axis occupies a biased 26-bit field, so the key stays unique while |u|,|v| < 2^25 / QUANTIZE
|
|
65
|
+
// (~33,000 units). A 16-bit-per-axis pack would only reach ~3.3 units and silently collide - navmesh
|
|
66
|
+
// coordinates routinely exceed that (e.g. geometry built 10,000 units from the origin). Coincident
|
|
67
|
+
// vertices are the same source vertex projected identically, so they match at any quantization; the
|
|
68
|
+
// precision only needs to keep genuinely distinct obstacle corners apart (the smallest is ~0.3 units).
|
|
69
|
+
const QUANTIZE = 1e3;
|
|
70
|
+
const KEY_BIAS = 1 << 25; // 33,554,432
|
|
71
|
+
const KEY_STRIDE = 1 << 26; // 67,108,864
|
|
72
|
+
|
|
73
|
+
// Reused clip scratch (stride 2: u,v). Grown on demand so a single allocation serves the whole soup.
|
|
74
|
+
let _cur = new Float64Array(64);
|
|
75
|
+
let _tmp = new Float64Array(64);
|
|
76
|
+
let _side = new Float64Array(64);
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Ensure `buf` can hold `vertex_count` (u,v) pairs, returning a large-enough buffer (the same one when
|
|
80
|
+
* it already fits). Contents are not preserved - callers grow before writing.
|
|
81
|
+
*
|
|
82
|
+
* @param {Float64Array} buf
|
|
83
|
+
* @param {number} vertex_count
|
|
84
|
+
* @returns {Float64Array}
|
|
85
|
+
*/
|
|
86
|
+
function ensure_capacity(buf, vertex_count) {
|
|
87
|
+
const needed = vertex_count * 2;
|
|
88
|
+
if (buf.length >= needed) return buf;
|
|
89
|
+
let size = buf.length;
|
|
90
|
+
while (size < needed) size *= 2;
|
|
91
|
+
return new Float64Array(size);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Outward Minkowski-with-disc offset of a convex CCW polygon by `r`: each edge is pushed out by `r` and
|
|
96
|
+
* each convex corner is replaced by a rounded arc. Input/output are flat (u,v) pairs.
|
|
97
|
+
*
|
|
98
|
+
* @param {Float64Array} pts convex CCW polygon (stride 2)
|
|
99
|
+
* @param {number} n vertex count
|
|
100
|
+
* @param {number} r offset radius (> 0)
|
|
101
|
+
* @returns {Float64Array} the offset polygon (CCW, stride 2)
|
|
102
|
+
*/
|
|
103
|
+
function offset_convex_ccw(pts, n, r) {
|
|
104
|
+
// outward edge normals (right of each CCW edge)
|
|
105
|
+
const enx = new Float64Array(n);
|
|
106
|
+
const enz = new Float64Array(n);
|
|
107
|
+
for (let i = 0; i < n; i++) {
|
|
108
|
+
const j = (i + 1) % n;
|
|
109
|
+
let dx = pts[j * 2] - pts[i * 2];
|
|
110
|
+
let dz = pts[j * 2 + 1] - pts[i * 2 + 1];
|
|
111
|
+
const len = Math.hypot(dx, dz) || 1;
|
|
112
|
+
dx /= len; dz /= len;
|
|
113
|
+
enx[i] = dz; // (dir.v, -dir.u) = right/outward of a CCW edge
|
|
114
|
+
enz[i] = -dx;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const out = [];
|
|
118
|
+
for (let i = 0; i < n; i++) {
|
|
119
|
+
const prev_edge = (i - 1 + n) % n; // edge ending at vertex i
|
|
120
|
+
const next_edge = i; // edge starting at vertex i
|
|
121
|
+
const vu = pts[i * 2], vv = pts[i * 2 + 1];
|
|
122
|
+
|
|
123
|
+
const a1 = Math.atan2(enz[prev_edge], enx[prev_edge]);
|
|
124
|
+
const a2 = Math.atan2(enz[next_edge], enx[next_edge]);
|
|
125
|
+
let da = a2 - a1;
|
|
126
|
+
while (da < 0) da += 2 * Math.PI;
|
|
127
|
+
while (da > 2 * Math.PI) da -= 2 * Math.PI;
|
|
128
|
+
|
|
129
|
+
const steps = Math.max(1, Math.ceil(da / CORNER_SEGMENT_ANGLE));
|
|
130
|
+
for (let s = 0; s <= steps; s++) {
|
|
131
|
+
const a = a1 + da * (s / steps);
|
|
132
|
+
out.push(vu + r * Math.cos(a), vv + r * Math.sin(a));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return Float64Array.from(out);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Normalise `pts` to CCW, dilate it by `r`, and append it to the footprint lists.
|
|
141
|
+
*
|
|
142
|
+
* Footprints with no area are dropped: they carve nothing, and the subtraction needs a real polygon.
|
|
143
|
+
* `pts` is taken over rather than copied, so callers pass a buffer they will not reuse.
|
|
144
|
+
*
|
|
145
|
+
* @param {Float64Array} pts convex polygon (stride 2)
|
|
146
|
+
* @param {number} n vertex count
|
|
147
|
+
* @param {number} height the height this footprint carves from
|
|
148
|
+
* @param {number} r dilation radius
|
|
149
|
+
* @param {Float64Array[]} out_poly
|
|
150
|
+
* @param {number[]} out_h
|
|
151
|
+
*/
|
|
152
|
+
function push_footprint(pts, n, height, r, out_poly, out_h) {
|
|
153
|
+
const area = polygon2_signed_area(pts, n);
|
|
154
|
+
|
|
155
|
+
// A polygon with no area has no reliable winding either, and `offset_convex_ccw` turns a mis-wound
|
|
156
|
+
// one inside out - so these are dropped rather than dilated, even though a positive radius would
|
|
157
|
+
// otherwise give a degenerate footprint a real disc to carve. Only sub-AREA_EPS input reaches this:
|
|
158
|
+
// at 1e-9 that is an obstacle tens of micrometres across, which is not one.
|
|
159
|
+
if (Math.abs(area) <= AREA_EPS) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
let poly = pts;
|
|
164
|
+
|
|
165
|
+
// CCW - interior to the left of each edge - is what the subtraction expects
|
|
166
|
+
if (area < 0) {
|
|
167
|
+
poly = new Float64Array(n * 2);
|
|
168
|
+
|
|
169
|
+
for (let i = 0; i < n; i++) {
|
|
170
|
+
poly[i * 2] = pts[(n - 1 - i) * 2];
|
|
171
|
+
poly[i * 2 + 1] = pts[(n - 1 - i) * 2 + 1];
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if (r > 0) {
|
|
176
|
+
poly = offset_convex_ccw(poly, n, r);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
out_poly.push(poly);
|
|
180
|
+
out_h.push(height);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Append the piece that survives outside one footprint edge, made SEAM-CONFORMING with the pieces on
|
|
185
|
+
* the other side of that edge.
|
|
186
|
+
*
|
|
187
|
+
* Each piece is cut against the LINE of a footprint edge, so its cut edge runs the full width of the
|
|
188
|
+
* piece - past the edge's own endpoints. The other side of that line is subdivided AT those endpoints:
|
|
189
|
+
* the obstacle hole ends where the corner arc begins, and the next piece takes over from there. One
|
|
190
|
+
* edge meeting two is a T-junction, so the faces never fuse into a shared edge and the seam survives
|
|
191
|
+
* into the navmesh as a crack. It bites hardest at a footprint corner that lands a hair inside a source
|
|
192
|
+
* triangle: the piece above the edge is then cut short at the triangle's own boundary, microns from the
|
|
193
|
+
* corner where the pieces below it start - close enough that the T-junction resolver dismisses the
|
|
194
|
+
* corner as that edge's endpoint, far enough that vertex welding leaves the two distinct.
|
|
195
|
+
*
|
|
196
|
+
* Splitting the cut edge at the footprint edge's own endpoints - inserted with their exact coordinates,
|
|
197
|
+
* so both sides of the seam name the same vertex - removes the T-junction at the source.
|
|
198
|
+
*
|
|
199
|
+
* @param {Float64Array} pts piece vertices (stride 2)
|
|
200
|
+
* @param {number} n piece vertex count
|
|
201
|
+
* @param {number} ex
|
|
202
|
+
* @param {number} ez the footprint edge's start
|
|
203
|
+
* @param {number} dx
|
|
204
|
+
* @param {number} dz the footprint edge's extent (end = start + extent)
|
|
205
|
+
* @param {Float64Array[]} out_pieces destination list
|
|
206
|
+
*/
|
|
207
|
+
function push_outside_piece(pts, n, ex, ez, dx, dz, out_pieces) {
|
|
208
|
+
// Distance to the cut line is measured in the clipper's own unnormalized (cross-product) units, so
|
|
209
|
+
// "on the line" here means exactly what the clip took it to mean.
|
|
210
|
+
const off_line = (k) => Math.abs(dx * (pts[k * 2 + 1] - ez) - dz * (pts[k * 2] - ex)) > POINT_EPS;
|
|
211
|
+
|
|
212
|
+
// the piece edge lying along the cut line - the seam
|
|
213
|
+
let seam = -1;
|
|
214
|
+
for (let k = 0; k < n; k++) {
|
|
215
|
+
if (!off_line(k) && !off_line((k + 1) % n)) { seam = k; break; }
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
if (seam < 0) {
|
|
219
|
+
// the clip did not cut this piece (it already lay wholly outside), so there is no seam to conform
|
|
220
|
+
out_pieces.push(pts.slice(0, n * 2));
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// The fan triangulation downstream runs from vertex 0, and a seam vertex inserted below is collinear
|
|
225
|
+
// with the seam's ends - so with vertex 0 on the seam line its fan triangle is degenerate and gets
|
|
226
|
+
// dropped, restoring the T-junction. Emit the piece starting from a vertex off the line instead; the
|
|
227
|
+
// caller only pushes pieces of non-zero area, so one exists.
|
|
228
|
+
let start = 0;
|
|
229
|
+
for (let k = 0; k < n; k++) {
|
|
230
|
+
if (off_line(k)) { start = k; break; }
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// which of the footprint edge's endpoints fall strictly inside the seam
|
|
234
|
+
const a_u = pts[seam * 2], a_v = pts[seam * 2 + 1];
|
|
235
|
+
const b = (seam + 1) % n;
|
|
236
|
+
const eu = pts[b * 2] - a_u, ev = pts[b * 2 + 1] - a_v;
|
|
237
|
+
const seam_sq = eu * eu + ev * ev;
|
|
238
|
+
|
|
239
|
+
// `along` projects onto the seam scaled by its length, so both endpoint tests compare squared
|
|
240
|
+
// distances against POINT_EPS without a square root
|
|
241
|
+
const along_start = (ex - a_u) * eu + (ez - a_v) * ev;
|
|
242
|
+
const along_end = along_start + dx * eu + dz * ev;
|
|
243
|
+
const inside = (along) => along > 0 && along < seam_sq
|
|
244
|
+
&& along * along > POINT_EPS * POINT_EPS * seam_sq
|
|
245
|
+
&& (seam_sq - along) * (seam_sq - along) > POINT_EPS * POINT_EPS * seam_sq;
|
|
246
|
+
|
|
247
|
+
const take_start = inside(along_start);
|
|
248
|
+
const take_end = inside(along_end);
|
|
249
|
+
|
|
250
|
+
// seam and footprint edge are the same line, so which endpoint comes first along the seam is just
|
|
251
|
+
// whether the two run the same way
|
|
252
|
+
const forward = dx * eu + dz * ev > 0;
|
|
253
|
+
const first_u = forward ? ex : ex + dx, first_v = forward ? ez : ez + dz;
|
|
254
|
+
const last_u = forward ? ex + dx : ex, last_v = forward ? ez + dz : ez;
|
|
255
|
+
const take_first = forward ? take_start : take_end;
|
|
256
|
+
const take_last = forward ? take_end : take_start;
|
|
257
|
+
|
|
258
|
+
const out = new Float64Array((n + (take_first ? 1 : 0) + (take_last ? 1 : 0)) * 2);
|
|
259
|
+
let w = 0;
|
|
260
|
+
for (let k = 0; k < n; k++) {
|
|
261
|
+
const v = (start + k) % n;
|
|
262
|
+
out[w++] = pts[v * 2];
|
|
263
|
+
out[w++] = pts[v * 2 + 1];
|
|
264
|
+
|
|
265
|
+
if (v !== seam) continue;
|
|
266
|
+
|
|
267
|
+
if (take_first) { out[w++] = first_u; out[w++] = first_v; }
|
|
268
|
+
if (take_last) { out[w++] = last_u; out[w++] = last_v; }
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
out_pieces.push(out);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Subtract convex footprint `fp` from a single convex polygon, appending the convex, disjoint pieces of
|
|
276
|
+
* (polygon \ fp) to `out_pieces` as right-sized `Float64Array`s. `fp` must be CCW (interior on the left
|
|
277
|
+
* of each edge). The polygon's interior remainder (the part inside `fp`) is discarded.
|
|
278
|
+
*
|
|
279
|
+
* @param {Float64Array} poly polygon vertices (stride 2)
|
|
280
|
+
* @param {number} poly_n polygon vertex count
|
|
281
|
+
* @param {Float64Array} fp footprint vertices (stride 2, CCW)
|
|
282
|
+
* @param {number} fp_n footprint vertex count
|
|
283
|
+
* @param {Float64Array[]} out_pieces destination list; surviving outside pieces are pushed
|
|
284
|
+
*/
|
|
285
|
+
function subtract_footprint(poly, poly_n, fp, fp_n, out_pieces) {
|
|
286
|
+
// current = the running intersection with the inside half-planes processed so far
|
|
287
|
+
_cur = ensure_capacity(_cur, poly_n + fp_n);
|
|
288
|
+
_tmp = ensure_capacity(_tmp, poly_n + fp_n);
|
|
289
|
+
_side = ensure_capacity(_side, poly_n + fp_n);
|
|
290
|
+
|
|
291
|
+
let cur = _cur;
|
|
292
|
+
let tmp = _tmp;
|
|
293
|
+
for (let i = 0; i < poly_n * 2; i++) cur[i] = poly[i];
|
|
294
|
+
let cur_n = poly_n;
|
|
295
|
+
|
|
296
|
+
for (let i = 0; i < fp_n; i++) {
|
|
297
|
+
if (cur_n < 3) return; // fully consumed - nothing outside remains
|
|
298
|
+
|
|
299
|
+
const j = (i + 1) % fp_n;
|
|
300
|
+
const ex = fp[i * 2], ez = fp[i * 2 + 1];
|
|
301
|
+
const dx = fp[j * 2] - ex;
|
|
302
|
+
const dz = fp[j * 2 + 1] - ez;
|
|
303
|
+
if (Math.abs(dx) < POINT_EPS && Math.abs(dz) < POINT_EPS) continue; // degenerate edge
|
|
304
|
+
|
|
305
|
+
// piece outside this edge (and inside all earlier edges) leaves the footprint here -> it survives
|
|
306
|
+
const side_n = polygon2_clip_halfplane(cur, cur_n, _side, ex, ez, dx, dz, false);
|
|
307
|
+
if (side_n >= 3 && Math.abs(polygon2_signed_area(_side, side_n)) > AREA_EPS) {
|
|
308
|
+
push_outside_piece(_side, side_n, ex, ez, dx, dz, out_pieces);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// keep marching with the part still inside this edge
|
|
312
|
+
cur_n = polygon2_clip_halfplane(cur, cur_n, tmp, ex, ez, dx, dz, true);
|
|
313
|
+
const swap = cur; cur = tmp; tmp = swap;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* @param {number[]} soup flat XYZ triangle soup (9 floats per triangle)
|
|
319
|
+
* @param {number} triangle_count
|
|
320
|
+
* @param {BinaryTopology} source source mesh (face normals must be populated)
|
|
321
|
+
* @param {number} agent_height
|
|
322
|
+
* @param {number} agent_radius dilation applied to each footprint
|
|
323
|
+
* @param {Vector3} up
|
|
324
|
+
* @returns {number[]} new soup with (dilated) obstacle footprints removed
|
|
325
|
+
*/
|
|
326
|
+
export function clip_soup_against_overhangs(soup, triangle_count, source, agent_height, agent_radius, up) {
|
|
327
|
+
let upx = up.x, upy = up.y, upz = up.z;
|
|
328
|
+
const ul = Math.hypot(upx, upy, upz);
|
|
329
|
+
if (ul === 0) return soup.slice(0, triangle_count * 9);
|
|
330
|
+
upx /= ul; upy /= ul; upz /= ul;
|
|
331
|
+
|
|
332
|
+
// orthonormal basis: rows 0,1 span the plane perpendicular to up (our u,v axes), row 2 is up itself
|
|
333
|
+
const basis = new Float64Array(9);
|
|
334
|
+
v3_orthonormal_matrix_from_normal(basis, 0, upx, upy, upz);
|
|
335
|
+
const u_x = basis[0], u_y = basis[1], u_z = basis[2];
|
|
336
|
+
const v_x = basis[3], v_y = basis[4], v_z = basis[5];
|
|
337
|
+
|
|
338
|
+
// collect downward-facing (overhead) source triangles as flat (u,v) triples plus their mean height
|
|
339
|
+
const overhead_uv = []; // stride 6: u0,v0,u1,v1,u2,v2
|
|
340
|
+
const overhead_h = [];
|
|
341
|
+
const fn = new Float32Array(3);
|
|
342
|
+
const fc = new Float32Array(3);
|
|
343
|
+
const face_count = source.faces.size;
|
|
344
|
+
for (let f = 0; f < face_count; f++) {
|
|
345
|
+
if (!source.faces.is_allocated(f)) continue;
|
|
346
|
+
source.face_read_normal(fn, 0, f);
|
|
347
|
+
if (fn[0] * upx + fn[1] * upy + fn[2] * upz >= -HEIGHT_EPS) continue; // not downward-facing
|
|
348
|
+
|
|
349
|
+
let l = source.face_read_loop(f);
|
|
350
|
+
let hsum = 0;
|
|
351
|
+
for (let k = 0; k < 3; k++) {
|
|
352
|
+
source.vertex_read_coordinate(fc, 0, source.loop_read_vertex(l));
|
|
353
|
+
const x = fc[0], y = fc[1], z = fc[2];
|
|
354
|
+
overhead_uv.push(v3_dot(x, y, z, u_x, u_y, u_z), v3_dot(x, y, z, v_x, v_y, v_z));
|
|
355
|
+
hsum += v3_dot(x, y, z, upx, upy, upz);
|
|
356
|
+
l = source.loop_read_next(l);
|
|
357
|
+
}
|
|
358
|
+
overhead_h.push(hsum / 3);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
const overhead_count = overhead_h.length;
|
|
362
|
+
if (overhead_count === 0) return soup.slice(0, triangle_count * 9);
|
|
363
|
+
|
|
364
|
+
// Group overhead triangles that share a (coincident) vertex into one obstacle. Each obstacle's
|
|
365
|
+
// footprint is the convex hull of its vertices, dilated by the agent radius. Treating the obstacle
|
|
366
|
+
// as one polygon (rather than per-triangle) avoids self-touching/pinched union boundaries.
|
|
367
|
+
const parent = new Int32Array(overhead_count);
|
|
368
|
+
for (let i = 0; i < overhead_count; i++) parent[i] = i;
|
|
369
|
+
const find = (a) => { while (parent[a] !== a) { parent[a] = parent[parent[a]]; a = parent[a]; } return a; };
|
|
370
|
+
|
|
371
|
+
const key_to_tri = new Map();
|
|
372
|
+
for (let i = 0; i < overhead_count; i++) {
|
|
373
|
+
for (let k = 0; k < 3; k++) {
|
|
374
|
+
const ku = Math.round(overhead_uv[i * 6 + k * 2] * QUANTIZE);
|
|
375
|
+
const kv = Math.round(overhead_uv[i * 6 + k * 2 + 1] * QUANTIZE);
|
|
376
|
+
const key = (ku + KEY_BIAS) * KEY_STRIDE + (kv + KEY_BIAS);
|
|
377
|
+
const seen = key_to_tri.get(key);
|
|
378
|
+
if (seen !== undefined) parent[find(i)] = find(seen); else key_to_tri.set(key, i);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/** @type {Map<number, {pts: number[], members: number[], hsum: number}>} */
|
|
383
|
+
const groups = new Map();
|
|
384
|
+
for (let i = 0; i < overhead_count; i++) {
|
|
385
|
+
const root = find(i);
|
|
386
|
+
let g = groups.get(root);
|
|
387
|
+
if (g === undefined) { g = { pts: [], members: [], hsum: 0 }; groups.set(root, g); }
|
|
388
|
+
for (let k = 0; k < 6; k++) g.pts.push(overhead_uv[i * 6 + k]);
|
|
389
|
+
g.members.push(i);
|
|
390
|
+
g.hsum += overhead_h[i];
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// Each footprint: a CCW (dilated) convex polygon in (u,v) plus the height it carves from.
|
|
394
|
+
//
|
|
395
|
+
// A group's convex hull is its footprint only when the group's triangles TILE that hull. An L, a
|
|
396
|
+
// ring, or two obstacles that merely touch do not, and their hull spans ground nothing is above -
|
|
397
|
+
// carving it takes away walkable area no obstacle covers. A doorway frame is a ring, and hulling
|
|
398
|
+
// one fills in the doorway. Comparing the hull's area against the triangles' own tells the two
|
|
399
|
+
// cases apart: a tiling leaves no slack, and the hull is then used exactly as before.
|
|
400
|
+
//
|
|
401
|
+
// Matching areas is the safe direction to be wrong in. Any duplicated or overlapping overhead area
|
|
402
|
+
// pushes a group off the hull and onto the per-triangle route, which is correct either way. The one
|
|
403
|
+
// input that defeats it is duplicate area equal to the hull's slack to within the epsilon, and what
|
|
404
|
+
// that costs is the hull carve this has always done.
|
|
405
|
+
//
|
|
406
|
+
// Where they do not tile it, each triangle is carved on its own. That is exact, not merely safer:
|
|
407
|
+
// dilation by a disc distributes over union - (A u B) (+) D = (A (+) D) u (B (+) D) - so
|
|
408
|
+
// subtracting each triangle's own dilated footprint in turn removes precisely the dilated union,
|
|
409
|
+
// which is the true offset of an arbitrarily concave obstacle. The carve loop below subtracts
|
|
410
|
+
// footprints sequentially from a running set of pieces, so the result stays a partition of the
|
|
411
|
+
// soup triangle and the footprints never cut across one another.
|
|
412
|
+
/** @type {Float64Array[]} */
|
|
413
|
+
const footprint_poly = [];
|
|
414
|
+
const footprint_h = [];
|
|
415
|
+
for (const g of groups.values()) {
|
|
416
|
+
const member_count = g.members.length;
|
|
417
|
+
const hull = convex_hull_monotone_2d(g.pts, g.pts.length / 2);
|
|
418
|
+
|
|
419
|
+
if (hull.length >= 3) {
|
|
420
|
+
const hull_poly = new Float64Array(hull.length * 2);
|
|
421
|
+
for (let i = 0; i < hull.length; i++) {
|
|
422
|
+
hull_poly[i * 2] = g.pts[hull[i] * 2];
|
|
423
|
+
hull_poly[i * 2 + 1] = g.pts[hull[i] * 2 + 1];
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
const hull_area = Math.abs(polygon2_signed_area(hull_poly, hull.length));
|
|
427
|
+
|
|
428
|
+
let member_area = 0;
|
|
429
|
+
for (let m = 0; m < member_count; m++) {
|
|
430
|
+
const b = g.members[m] * 6;
|
|
431
|
+
member_area += Math.abs(
|
|
432
|
+
(overhead_uv[b + 2] - overhead_uv[b]) * (overhead_uv[b + 5] - overhead_uv[b + 1])
|
|
433
|
+
- (overhead_uv[b + 4] - overhead_uv[b]) * (overhead_uv[b + 3] - overhead_uv[b + 1])
|
|
434
|
+
) * 0.5;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
// `member_area` at zero means every triangle in the group is degenerate. The hull is then
|
|
438
|
+
// all there is to go on, and it is what this has always carved - leave that alone.
|
|
439
|
+
const tiles_hull = member_area <= AREA_EPS
|
|
440
|
+
|| Math.abs(hull_area - member_area) <= Math.max(AREA_EPS, hull_area * HULL_TILING_RELATIVE_EPS);
|
|
441
|
+
|
|
442
|
+
if (tiles_hull) {
|
|
443
|
+
push_footprint(
|
|
444
|
+
hull_poly, hull.length, g.hsum / member_count,
|
|
445
|
+
agent_radius, footprint_poly, footprint_h
|
|
446
|
+
);
|
|
447
|
+
|
|
448
|
+
continue;
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
for (let m = 0; m < member_count; m++) {
|
|
453
|
+
const i = g.members[m];
|
|
454
|
+
const b = i * 6;
|
|
455
|
+
|
|
456
|
+
push_footprint(
|
|
457
|
+
Float64Array.of(
|
|
458
|
+
overhead_uv[b], overhead_uv[b + 1],
|
|
459
|
+
overhead_uv[b + 2], overhead_uv[b + 3],
|
|
460
|
+
overhead_uv[b + 4], overhead_uv[b + 5]
|
|
461
|
+
),
|
|
462
|
+
3, overhead_h[i],
|
|
463
|
+
agent_radius, footprint_poly, footprint_h
|
|
464
|
+
);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
const footprint_count = footprint_poly.length;
|
|
469
|
+
if (footprint_count === 0) return soup.slice(0, triangle_count * 9);
|
|
470
|
+
|
|
471
|
+
// Broad-phase index: one leaf per footprint, in (u, v, height) space. The first two axes are the
|
|
472
|
+
// dilated footprint's (u,v) extent; the third is the band of soup heights it can carve - a triangle
|
|
473
|
+
// at mean height `th` is carved by an obstacle at height `h` iff 0 < h - th <= agent_height. A soup
|
|
474
|
+
// triangle then queries this BVH with its own (u,v) extent at `th` to get just the candidate
|
|
475
|
+
// obstacles, instead of scanning all of them.
|
|
476
|
+
const footprint_bvh = new BVH();
|
|
477
|
+
footprint_bvh.release_all();
|
|
478
|
+
for (let fi = 0; fi < footprint_count; fi++) {
|
|
479
|
+
const poly = footprint_poly[fi];
|
|
480
|
+
let min_u = Infinity, min_v = Infinity, max_u = -Infinity, max_v = -Infinity;
|
|
481
|
+
for (let i = 0; i < poly.length; i += 2) {
|
|
482
|
+
const u = poly[i], v = poly[i + 1];
|
|
483
|
+
if (u < min_u) min_u = u;
|
|
484
|
+
if (u > max_u) max_u = u;
|
|
485
|
+
if (v < min_v) min_v = v;
|
|
486
|
+
if (v > max_v) max_v = v;
|
|
487
|
+
}
|
|
488
|
+
const h = footprint_h[fi];
|
|
489
|
+
const node = footprint_bvh.allocate_node();
|
|
490
|
+
footprint_bvh.node_set_user_data(node, fi);
|
|
491
|
+
footprint_bvh.node_set_aabb_primitive(
|
|
492
|
+
node,
|
|
493
|
+
min_u, min_v, h - agent_height - HEIGHT_EPS,
|
|
494
|
+
max_u, max_v, h - HEIGHT_EPS
|
|
495
|
+
);
|
|
496
|
+
footprint_bvh.insert_leaf(node);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
const out = [];
|
|
500
|
+
|
|
501
|
+
// per-triangle reusable storage
|
|
502
|
+
const tri_uv = new Float64Array(6); // u0,v0,u1,v1,u2,v2 of the source triangle
|
|
503
|
+
const px = new Float64Array(3), py = new Float64Array(3), pz = new Float64Array(3);
|
|
504
|
+
const query_aabb = new Float64Array(6);
|
|
505
|
+
const query_hits = new Int32Array(footprint_count);
|
|
506
|
+
/** @type {Float64Array[]} */
|
|
507
|
+
let pieces = [];
|
|
508
|
+
/** @type {Float64Array[]} */
|
|
509
|
+
let next_pieces = [];
|
|
510
|
+
|
|
511
|
+
for (let t = 0; t < triangle_count; t++) {
|
|
512
|
+
const o = t * 9;
|
|
513
|
+
|
|
514
|
+
let th = 0;
|
|
515
|
+
for (let k = 0; k < 3; k++) {
|
|
516
|
+
const x = soup[o + k * 3], y = soup[o + k * 3 + 1], z = soup[o + k * 3 + 2];
|
|
517
|
+
px[k] = x; py[k] = y; pz[k] = z;
|
|
518
|
+
tri_uv[k * 2] = v3_dot(x, y, z, u_x, u_y, u_z);
|
|
519
|
+
tri_uv[k * 2 + 1] = v3_dot(x, y, z, v_x, v_y, v_z);
|
|
520
|
+
th += v3_dot(x, y, z, upx, upy, upz);
|
|
521
|
+
}
|
|
522
|
+
th /= 3;
|
|
523
|
+
|
|
524
|
+
// barycentric denominator (twice the signed uv area of the triangle)
|
|
525
|
+
const e1u = tri_uv[2] - tri_uv[0], e1v = tri_uv[3] - tri_uv[1];
|
|
526
|
+
const e2u = tri_uv[4] - tri_uv[0], e2v = tri_uv[5] - tri_uv[1];
|
|
527
|
+
const det = e1u * e2v - e2u * e1v;
|
|
528
|
+
|
|
529
|
+
if (Math.abs(det) <= AREA_EPS) {
|
|
530
|
+
// degenerate in (u,v) (a near-vertical triangle): cannot carve meaningfully, pass through
|
|
531
|
+
for (let i = 0; i < 9; i++) out.push(soup[o + i]);
|
|
532
|
+
continue;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
// broad-phase: only the obstacles whose (u,v) extent and height band overlap this triangle
|
|
536
|
+
let min_u = tri_uv[0], max_u = tri_uv[0], min_v = tri_uv[1], max_v = tri_uv[1];
|
|
537
|
+
for (let k = 1; k < 3; k++) {
|
|
538
|
+
const u = tri_uv[k * 2], v = tri_uv[k * 2 + 1];
|
|
539
|
+
if (u < min_u) min_u = u;
|
|
540
|
+
if (u > max_u) max_u = u;
|
|
541
|
+
if (v < min_v) min_v = v;
|
|
542
|
+
if (v > max_v) max_v = v;
|
|
543
|
+
}
|
|
544
|
+
query_aabb[0] = min_u; query_aabb[1] = min_v; query_aabb[2] = th;
|
|
545
|
+
query_aabb[3] = max_u; query_aabb[4] = max_v; query_aabb[5] = th;
|
|
546
|
+
|
|
547
|
+
const hit_count = bvh_query_user_data_intersects_aabb(query_hits, 0, footprint_bvh, query_aabb);
|
|
548
|
+
if (hit_count === 0) {
|
|
549
|
+
// no obstacle overlaps here - copy straight through
|
|
550
|
+
for (let i = 0; i < 9; i++) out.push(soup[o + i]);
|
|
551
|
+
continue;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
// start with the whole triangle as one piece, then subtract each overlapping footprint
|
|
555
|
+
pieces.length = 0;
|
|
556
|
+
pieces.push(Float64Array.of(tri_uv[0], tri_uv[1], tri_uv[2], tri_uv[3], tri_uv[4], tri_uv[5]));
|
|
557
|
+
|
|
558
|
+
for (let qi = 0; qi < hit_count; qi++) {
|
|
559
|
+
const fi = query_hits[qi];
|
|
560
|
+
const dh = footprint_h[fi] - th;
|
|
561
|
+
if (dh <= HEIGHT_EPS || dh > agent_height + HEIGHT_EPS) continue; // exact band test
|
|
562
|
+
|
|
563
|
+
const fp = footprint_poly[fi];
|
|
564
|
+
const fp_n = fp.length / 2;
|
|
565
|
+
|
|
566
|
+
next_pieces.length = 0;
|
|
567
|
+
for (let pi = 0; pi < pieces.length; pi++) {
|
|
568
|
+
subtract_footprint(pieces[pi], pieces[pi].length / 2, fp, fp_n, next_pieces);
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
const swap = pieces; pieces = next_pieces; next_pieces = swap;
|
|
572
|
+
if (pieces.length === 0) break;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
const inv_det = 1 / det;
|
|
576
|
+
for (let pi = 0; pi < pieces.length; pi++) {
|
|
577
|
+
const poly = pieces[pi];
|
|
578
|
+
const poly_n = poly.length / 2;
|
|
579
|
+
|
|
580
|
+
// fan-triangulate the surviving piece and reconstruct world XYZ per vertex
|
|
581
|
+
for (let i = 1; i + 1 < poly_n; i++) {
|
|
582
|
+
const u0 = poly[0], v0 = poly[1];
|
|
583
|
+
const u1 = poly[i * 2], v1 = poly[i * 2 + 1];
|
|
584
|
+
const u2 = poly[(i + 1) * 2], v2 = poly[(i + 1) * 2 + 1];
|
|
585
|
+
|
|
586
|
+
const area2 = Math.abs((u1 - u0) * (v2 - v0) - (u2 - u0) * (v1 - v0));
|
|
587
|
+
if (area2 < 2 * AREA_EPS) continue;
|
|
588
|
+
|
|
589
|
+
emit_xyz(out, u0, v0, tri_uv, px, py, pz, e1u, e1v, e2u, e2v, inv_det);
|
|
590
|
+
emit_xyz(out, u1, v1, tri_uv, px, py, pz, e1u, e1v, e2u, e2v, inv_det);
|
|
591
|
+
emit_xyz(out, u2, v2, tri_uv, px, py, pz, e1u, e1v, e2u, e2v, inv_det);
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
return out;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
/**
|
|
600
|
+
* Reconstruct the world XYZ of a (u,v) point lying in a source triangle (barycentric on the triangle's
|
|
601
|
+
* planar uv coordinates) and append it to `out`.
|
|
602
|
+
*
|
|
603
|
+
* @param {number[]} out destination soup
|
|
604
|
+
* @param {number} u
|
|
605
|
+
* @param {number} v the point in (u,v)
|
|
606
|
+
* @param {Float64Array} tri_uv the triangle's uv corners (stride 2, vertex 0 is the origin)
|
|
607
|
+
* @param {Float64Array} px
|
|
608
|
+
* @param {Float64Array} py
|
|
609
|
+
* @param {Float64Array} pz the triangle's world corners
|
|
610
|
+
* @param {number} e1u
|
|
611
|
+
* @param {number} e1v edge (v1 - v0) in uv
|
|
612
|
+
* @param {number} e2u
|
|
613
|
+
* @param {number} e2v edge (v2 - v0) in uv
|
|
614
|
+
* @param {number} inv_det reciprocal of the uv area determinant
|
|
615
|
+
*/
|
|
616
|
+
function emit_xyz(out, u, v, tri_uv, px, py, pz, e1u, e1v, e2u, e2v, inv_det) {
|
|
617
|
+
const du = u - tri_uv[0];
|
|
618
|
+
const dv = v - tri_uv[1];
|
|
619
|
+
const w1 = (du * e2v - e2u * dv) * inv_det;
|
|
620
|
+
const w2 = (e1u * dv - du * e1v) * inv_det;
|
|
621
|
+
const w0 = 1 - w1 - w2;
|
|
622
|
+
|
|
623
|
+
out.push(
|
|
624
|
+
w0 * px[0] + w1 * px[1] + w2 * px[2],
|
|
625
|
+
w0 * py[0] + w1 * py[1] + w2 * py[2],
|
|
626
|
+
w0 * pz[0] + w1 * pz[1] + w2 * pz[2]
|
|
627
|
+
);
|
|
628
|
+
}
|