@woosh/meep-engine 3.38.0 → 3.39.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-image-decoder.js +1 -1
- package/build/bundle-worker-terrain.js +1 -1
- package/package.json +1 -1
- package/src/core/binary/BinaryBuffer.d.ts +11 -0
- package/src/core/binary/BinaryBuffer.d.ts.map +1 -1
- package/src/core/binary/BinaryBuffer.js +30 -0
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_aabb.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_aabb.js +28 -7
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts +15 -0
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +41 -0
- package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts +12 -0
- package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.js +27 -0
- package/src/core/geom/3d/gjk/gjk.js +3 -3
- package/src/core/geom/3d/gjk/gjk_distance.d.ts +94 -0
- package/src/core/geom/3d/gjk/gjk_distance.d.ts.map +1 -0
- package/src/core/geom/3d/gjk/gjk_distance.js +782 -0
- package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts +5 -4
- package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -1
- package/src/core/geom/3d/gjk/gjk_epa_penetration.js +14 -9
- package/src/core/geom/3d/gjk/minkowski_support.d.ts +11 -7
- package/src/core/geom/3d/gjk/minkowski_support.d.ts.map +1 -1
- package/src/core/geom/3d/gjk/minkowski_support.js +33 -9
- package/src/core/geom/3d/gjk/mpr.d.ts.map +1 -1
- package/src/core/geom/3d/gjk/mpr.js +26 -5
- package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.d.ts +15 -0
- package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.d.ts.map +1 -1
- package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.js +106 -33
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale.d.ts +2 -1
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale.js +4 -8
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_array.d.ts +32 -0
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_array.d.ts.map +1 -0
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_array.js +85 -0
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_scalar.d.ts +3 -3
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_scalar.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_scalar.js +24 -34
- package/src/core/geom/3d/quaternion/quat3_integrate.d.ts +17 -0
- package/src/core/geom/3d/quaternion/quat3_integrate.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_integrate.js +45 -4
- package/src/core/geom/3d/quaternion/quat3_multiply.d.ts +16 -0
- package/src/core/geom/3d/quaternion/quat3_multiply.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_multiply.js +25 -0
- package/src/core/geom/3d/quaternion/quat3_nlerp.d.ts +18 -0
- package/src/core/geom/3d/quaternion/quat3_nlerp.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_nlerp.js +45 -0
- package/src/core/geom/3d/quaternion/quat3_shortest_arc.d.ts +17 -0
- package/src/core/geom/3d/quaternion/quat3_shortest_arc.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_shortest_arc.js +155 -94
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts +12 -0
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.js +31 -0
- package/src/core/geom/3d/shape/AbstractShape3D.d.ts +20 -6
- package/src/core/geom/3d/shape/AbstractShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/AbstractShape3D.js +20 -6
- package/src/core/geom/3d/shape/BoxShape3D.d.ts +1 -1
- package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/BoxShape3D.js +5 -1
- package/src/core/geom/3d/shape/CapsuleShape3D.d.ts +1 -1
- package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/CapsuleShape3D.js +5 -1
- package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts +25 -11
- package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/ConvexHullShape3D.js +392 -22
- package/src/core/geom/3d/shape/CylinderShape3D.d.ts +8 -7
- package/src/core/geom/3d/shape/CylinderShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/CylinderShape3D.js +12 -7
- package/src/core/geom/3d/shape/HeightMapShape3D.d.ts +51 -8
- package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/HeightMapShape3D.js +260 -14
- package/src/core/geom/3d/shape/MeshShape3D.d.ts +61 -7
- package/src/core/geom/3d/shape/MeshShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/MeshShape3D.js +111 -20
- package/src/core/geom/3d/shape/PointShape3D.d.ts +1 -1
- package/src/core/geom/3d/shape/PointShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/PointShape3D.js +1 -1
- package/src/core/geom/3d/shape/PosedShape3D.d.ts +9 -0
- package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/PosedShape3D.js +36 -6
- package/src/core/geom/3d/shape/SphereShape3D.d.ts +1 -1
- package/src/core/geom/3d/shape/SphereShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/SphereShape3D.js +5 -1
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts +12 -10
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/TransformedShape3D.js +53 -19
- package/src/core/geom/3d/shape/Triangle3D.d.ts +1 -1
- package/src/core/geom/3d/shape/Triangle3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/Triangle3D.js +5 -1
- package/src/core/geom/3d/shape/UnionShape3D.d.ts +1 -1
- package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnionShape3D.js +19 -2
- package/src/core/geom/3d/shape/sdf/sdf3_box.d.ts +14 -0
- package/src/core/geom/3d/shape/sdf/sdf3_box.d.ts.map +1 -1
- package/src/core/geom/3d/shape/sdf/sdf3_box.js +67 -5
- package/src/core/geom/3d/shape/sdf/sdf3_capsule.d.ts +14 -0
- package/src/core/geom/3d/shape/sdf/sdf3_capsule.d.ts.map +1 -1
- package/src/core/geom/3d/shape/sdf/sdf3_capsule.js +61 -3
- package/src/core/geom/3d/shape/sdf/sdf3_cylinder.d.ts +14 -0
- package/src/core/geom/3d/shape/sdf/sdf3_cylinder.d.ts.map +1 -1
- package/src/core/geom/3d/shape/sdf/sdf3_cylinder.js +63 -4
- package/src/core/geom/3d/shape/sdf/sdf3_plane.d.ts +15 -0
- package/src/core/geom/3d/shape/sdf/sdf3_plane.d.ts.map +1 -1
- package/src/core/geom/3d/shape/sdf/sdf3_plane.js +64 -2
- package/src/core/geom/3d/shape/sdf/sdf3_sphere.d.ts +21 -0
- package/src/core/geom/3d/shape/sdf/sdf3_sphere.d.ts.map +1 -1
- package/src/core/geom/3d/shape/sdf/sdf3_sphere.js +66 -3
- package/src/core/geom/3d/shape/shape3_mesh_from_geometry.d.ts +2 -0
- package/src/core/geom/3d/shape/shape3_mesh_from_geometry.d.ts.map +1 -1
- package/src/core/geom/3d/shape/shape3_mesh_from_geometry.js +7 -0
- package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.d.ts +41 -0
- package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.d.ts.map +1 -0
- package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.js +538 -0
- package/src/core/geom/3d/sphere/harmonics/sh_basis_at.d.ts +31 -0
- package/src/core/geom/3d/sphere/harmonics/sh_basis_at.d.ts.map +1 -0
- package/src/core/geom/3d/sphere/harmonics/sh_basis_at.js +85 -0
- package/src/core/geom/3d/sphere/harmonics/sh_vmf_window.d.ts +18 -0
- package/src/core/geom/3d/sphere/harmonics/sh_vmf_window.d.ts.map +1 -0
- package/src/core/geom/3d/sphere/harmonics/sh_vmf_window.js +19 -0
- package/src/core/geom/3d/triangle/TriangleEdgeFlags.d.ts +49 -0
- package/src/core/geom/3d/triangle/TriangleEdgeFlags.d.ts.map +1 -0
- package/src/core/geom/3d/triangle/TriangleEdgeFlags.js +55 -0
- package/src/core/geom/3d/triangle/tri3_classify_shared_edge.d.ts +42 -0
- package/src/core/geom/3d/triangle/tri3_classify_shared_edge.d.ts.map +1 -0
- package/src/core/geom/3d/triangle/tri3_classify_shared_edge.js +85 -0
- package/src/core/geom/3d/triangle/tri3_closest_point.d.ts +13 -0
- package/src/core/geom/3d/triangle/tri3_closest_point.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_closest_point.js +36 -1
- package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.d.ts +14 -0
- package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.js +40 -0
- package/src/core/geom/vec3/v3_quaternion_apply.d.ts +19 -0
- package/src/core/geom/vec3/v3_quaternion_apply.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_quaternion_apply.js +32 -0
- package/src/core/geom/vec3/v3_quaternion_apply_inverse.d.ts +19 -0
- package/src/core/geom/vec3/v3_quaternion_apply_inverse.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_quaternion_apply_inverse.js +32 -0
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +135 -10
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +338 -105
- package/src/engine/control/first-person/abilities/Ability.d.ts +14 -5
- package/src/engine/control/first-person/abilities/Ability.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/Ability.js +14 -5
- package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/LedgeGrab.js +16 -12
- package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/Mantle.js +5 -1
- package/src/engine/control/first-person/abilities/Slide.js +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.d.ts +92 -14
- package/src/engine/control/first-person/collision/KinematicMover.d.ts.map +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.js +218 -37
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +5 -0
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +17 -10
- package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
- package/src/engine/ecs/EntityComponentDataset.js +27 -13
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +4 -0
- package/src/engine/ecs/transform/Transform64.d.ts +4 -2
- package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform64.js +10 -16
- package/src/engine/graphics/ecs/water/Water.d.ts +25 -63
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +110 -125
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +38 -74
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.js +27 -18
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.d.ts +12 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.js +45 -0
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts +33 -0
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterWaves.js +46 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts +17 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.js +26 -0
- package/src/engine/graphics/texture/3d/scs3d_sample_linear.d.ts +22 -0
- package/src/engine/graphics/texture/3d/scs3d_sample_linear.d.ts.map +1 -1
- package/src/engine/graphics/texture/3d/scs3d_sample_linear.js +43 -1
- package/src/engine/graphics/texture/sampler/Sampler2D.d.ts +29 -3
- package/src/engine/graphics/texture/sampler/Sampler2D.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/Sampler2D.js +102 -14
- package/src/engine/graphics3/WaterSystem.d.ts +39 -3
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +134 -25
- package/src/engine/interpolation/BinaryInterpolationAdapter.d.ts +10 -4
- package/src/engine/interpolation/BinaryInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/BinaryInterpolationAdapter.js +11 -5
- package/src/engine/interpolation/InterpolationLog.d.ts +11 -5
- package/src/engine/interpolation/InterpolationLog.d.ts.map +1 -1
- package/src/engine/interpolation/InterpolationLog.js +12 -6
- package/src/engine/interpolation/InterpolationSystem.d.ts.map +1 -1
- package/src/engine/interpolation/InterpolationSystem.js +39 -8
- package/src/engine/interpolation/PoseInterpolationAdapter.d.ts +1 -1
- package/src/engine/interpolation/PoseInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/PoseInterpolationAdapter.js +51 -22
- package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/TransformPoseSerializationAdapter.js +18 -23
- package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts +1 -1
- package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/QuaternionInterpolationAdapter.js +3 -1
- package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts +1 -1
- package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/TransformInterpolationAdapter.js +3 -1
- package/src/engine/network/adapters/Vector3InterpolationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/Vector3InterpolationAdapter.js +5 -2
- package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
- package/src/engine/physics/body/SolverBodyState.js +4 -5
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +12 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +28 -3
- package/src/engine/physics/ccd/linear_sweep.d.ts +42 -12
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +1131 -97
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +13 -0
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/ClothColliderIndex.js +90 -22
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +84 -24
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts +46 -3
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +116 -68
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +59 -47
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +62 -55
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +46 -39
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +41 -36
- package/src/engine/physics/cloth/playground/garment_build.js +6 -6
- package/src/engine/physics/cloth/playground/garment_main.js +18 -14
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.js +8 -5
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.js +8 -5
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +15 -15
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.d.ts +5 -0
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.js +32 -9
- package/src/engine/physics/constraint/solve_constraints.d.ts +50 -8
- package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
- package/src/engine/physics/constraint/solve_constraints.js +703 -429
- package/src/engine/physics/contact/ManifoldStore.d.ts +12 -0
- package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
- package/src/engine/physics/contact/ManifoldStore.js +32 -0
- package/src/engine/physics/ecs/BodyKind.d.ts +16 -8
- package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -1
- package/src/engine/physics/ecs/BodyKind.js +16 -8
- package/src/engine/physics/ecs/Collider.d.ts +7 -2
- package/src/engine/physics/ecs/Collider.d.ts.map +1 -1
- package/src/engine/physics/ecs/Collider.js +7 -2
- package/src/engine/physics/ecs/PhysicsEvents.d.ts +13 -0
- package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsEvents.js +13 -0
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +320 -36
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +779 -81
- package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidField.js +5 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +11 -9
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +7 -5
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.js +9 -7
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +3 -4
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +9 -7
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.js +65 -43
- package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.d.ts +23 -0
- package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.d.ts.map +1 -0
- package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.js +22 -0
- package/src/engine/physics/inertia/convex_hull_mass_properties.d.ts +29 -0
- package/src/engine/physics/inertia/convex_hull_mass_properties.d.ts.map +1 -0
- package/src/engine/physics/inertia/convex_hull_mass_properties.js +117 -0
- package/src/engine/physics/inertia/mass_properties_accumulate.d.ts +24 -0
- package/src/engine/physics/inertia/mass_properties_accumulate.d.ts.map +1 -0
- package/src/engine/physics/inertia/mass_properties_accumulate.js +93 -0
- package/src/engine/physics/inertia/primitive_mass_properties.d.ts +46 -0
- package/src/engine/physics/inertia/primitive_mass_properties.d.ts.map +1 -0
- package/src/engine/physics/inertia/primitive_mass_properties.js +118 -0
- package/src/engine/physics/inertia/rigid_body_set_mass_properties.d.ts +27 -0
- package/src/engine/physics/inertia/rigid_body_set_mass_properties.d.ts.map +1 -0
- package/src/engine/physics/inertia/rigid_body_set_mass_properties.js +62 -0
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts +67 -25
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -1
- package/src/engine/physics/inertia/world_inverse_inertia.js +149 -26
- package/src/engine/physics/integration/integrate_position.d.ts +18 -19
- package/src/engine/physics/integration/integrate_position.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_position.js +40 -37
- package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_velocity.js +13 -4
- package/src/engine/physics/island/IslandBuilder.d.ts +124 -6
- package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
- package/src/engine/physics/island/IslandBuilder.js +322 -19
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts +13 -0
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_box_manifold.js +95 -39
- package/src/engine/physics/narrowphase/box_triangle_contact.d.ts +40 -0
- package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_triangle_contact.js +415 -120
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts +63 -0
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_contacts.js +234 -46
- package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts +13 -0
- package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_triangle_contact.js +141 -93
- package/src/engine/physics/narrowphase/compute_penetration.d.ts +29 -11
- package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/compute_penetration.js +157 -34
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts +76 -0
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/convex_convex_manifold.js +243 -48
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts +13 -0
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.js +28 -12
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts +13 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.js +27 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.d.ts +42 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.js +250 -0
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts +27 -11
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +291 -12
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts +7 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.js +7 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.d.ts +35 -0
- package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.js +61 -0
- package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts +54 -0
- package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/hull_sphere_contact.js +244 -0
- package/src/engine/physics/narrowphase/mesh_convex_hull.js +5 -1
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts +2 -0
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +56 -31
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts +6 -5
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +2185 -483
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts +56 -5
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.js +546 -5
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts +29 -2
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_concave.js +628 -75
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts +3 -2
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_hit.js +3 -2
- package/src/engine/physics/narrowphase/rigid_subject_pose.d.ts +27 -0
- package/src/engine/physics/narrowphase/rigid_subject_pose.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/rigid_subject_pose.js +96 -0
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +14 -0
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_box_contact.js +51 -5
- package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +12 -0
- package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_sphere_contact.js +30 -0
- package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts +12 -0
- package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_triangle_contact.js +37 -8
- package/src/engine/physics/narrowphase/support_feature_manifold.d.ts +139 -0
- package/src/engine/physics/narrowphase/support_feature_manifold.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/support_feature_manifold.js +949 -0
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +32 -13
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -1
- package/src/engine/physics/queries/PhysicsSurfacePoint.js +36 -13
- package/src/engine/physics/queries/convex_overlaps_shape.d.ts +27 -0
- package/src/engine/physics/queries/convex_overlaps_shape.d.ts.map +1 -0
- package/src/engine/physics/queries/convex_overlaps_shape.js +169 -0
- package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
- package/src/engine/physics/queries/overlap_shape.js +57 -79
- package/src/engine/physics/queries/raycast.d.ts +10 -4
- package/src/engine/physics/queries/raycast.d.ts.map +1 -1
- package/src/engine/physics/queries/raycast.js +133 -9
- package/src/engine/physics/queries/shape_cast.d.ts +55 -24
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.js +2061 -245
- package/src/engine/physics/solver/apply_impulse_to_body.d.ts +32 -10
- package/src/engine/physics/solver/apply_impulse_to_body.d.ts.map +1 -1
- package/src/engine/physics/solver/apply_impulse_to_body.js +69 -28
- package/src/engine/physics/solver/solve_contacts.d.ts +65 -18
- package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
- package/src/engine/physics/solver/solve_contacts.js +458 -234
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
- package/src/engine/physics/vehicle/RaycastVehicle.js +5 -6
- package/src/shade/assets/textures/split_sum.bin +0 -0
- package/src/shade/device/mock/SoftwareGPUQueue.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUQueue.js +2 -1
- package/src/shade/playground/path_traced_media/README.md +78 -0
- package/src/shade/playground/path_traced_media/capture_radiance.d.ts +33 -0
- package/src/shade/playground/path_traced_media/capture_radiance.d.ts.map +1 -0
- package/src/shade/playground/path_traced_media/capture_radiance.js +174 -0
- package/src/shade/playground/path_traced_media/checks.d.ts +160 -0
- package/src/shade/playground/path_traced_media/checks.d.ts.map +1 -0
- package/src/shade/playground/path_traced_media/checks.js +921 -0
- package/src/shade/playground/path_traced_media/index.html +71 -0
- package/src/shade/playground/path_traced_media/main.d.ts +2 -0
- package/src/shade/playground/path_traced_media/main.d.ts.map +1 -0
- package/src/shade/playground/path_traced_media/main.js +440 -0
- package/src/shade/playground/path_traced_media/make_wave_pool_geometry.d.ts +26 -0
- package/src/shade/playground/path_traced_media/make_wave_pool_geometry.d.ts.map +1 -0
- package/src/shade/playground/path_traced_media/make_wave_pool_geometry.js +117 -0
- package/src/shade/playground/path_traced_media/views.d.ts +21 -0
- package/src/shade/playground/path_traced_media/views.d.ts.map +1 -0
- package/src/shade/playground/path_traced_media/views.js +161 -0
- package/src/shade/playground/sh_exponential/README.md +43 -0
- package/src/shade/playground/sh_exponential/index.html +59 -0
- package/src/shade/playground/sh_exponential/main.d.ts +2 -0
- package/src/shade/playground/sh_exponential/main.d.ts.map +1 -0
- package/src/shade/playground/sh_exponential/main.js +571 -0
- package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts +46 -0
- package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts.map +1 -0
- package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.js +270 -0
- package/src/shade/playground/water_refraction/README.md +24 -15
- package/src/shade/playground/water_refraction/index.html +6 -8
- package/src/shade/playground/water_refraction/main.js +12 -11
- package/src/shade/playground/water_refraction/world.d.ts +2 -0
- package/src/shade/playground/water_refraction/world.d.ts.map +1 -1
- package/src/shade/playground/water_refraction/world.js +8 -4
- package/src/shade/renderer/Renderer.d.ts +2 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +23 -0
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +9 -1
- package/src/shade/renderer/geometry/sdf/chunk_scene_point_query_volume_sign.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/chunk_scene_point_query_volume_sign.js +6 -4
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -0
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_rand1.d.ts +7 -0
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_rand1.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_rand1.js +12 -12
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_spherical.d.ts +4 -0
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_spherical.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_spherical.js +13 -9
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +2 -0
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +3 -0
- package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.js +4 -9
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +20 -10
- package/src/shade/renderer/light/environment/rgbe/load_environment_map.d.ts +2 -1
- package/src/shade/renderer/light/environment/rgbe/load_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/rgbe/load_environment_map.js +2 -1
- package/src/shade/renderer/light/environment/sh_exponential/README.md +171 -0
- package/src/shade/renderer/light/environment/sh_exponential/SHExpEncoder.d.ts +170 -0
- package/src/shade/renderer/light/environment/sh_exponential/SHExpEncoder.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/SHExpEncoder.js +377 -0
- package/src/shade/renderer/light/environment/sh_exponential/SH_EXP_ENCODE_PARAMETERS_STRUCT.d.ts +16 -0
- package/src/shade/renderer/light/environment/sh_exponential/SH_EXP_ENCODE_PARAMETERS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/SH_EXP_ENCODE_PARAMETERS_STRUCT.js +27 -0
- package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts +21 -0
- package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.js +53 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_design_row.d.ts +33 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_design_row.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_design_row.js +90 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_fit_samples.d.ts +28 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_fit_samples.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_fit_samples.js +92 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_layout.d.ts +39 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_layout.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_layout.js +44 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_solve_matrix.d.ts +42 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_solve_matrix.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_solve_matrix.js +123 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts +30 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.js +147 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.d.ts +24 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.js +79 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.d.ts +17 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.js +99 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.d.ts +24 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.js +104 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.d.ts +12 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.js +93 -0
- package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/GPULightMap.js +1 -0
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +4 -0
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +4 -0
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/PIXEL_TEXTURE_ORM.d.ts +1 -1
- package/src/shade/renderer/material/PIXEL_TEXTURE_ORM.d.ts.map +1 -1
- package/src/shade/renderer/material/StandardShadeMaterial.d.ts +15 -0
- package/src/shade/renderer/material/StandardShadeMaterial.d.ts.map +1 -1
- package/src/shade/renderer/material/StandardShadeMaterial.js +17 -0
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +36 -2
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +218 -18
- package/src/shade/renderer/material/resident/INDIRECT_MATERIAL_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/INDIRECT_MATERIAL_STRUCT.js +10 -0
- package/src/shade/renderer/medium/MEDIA_TABLE_STRUCT.d.ts +17 -0
- package/src/shade/renderer/medium/MEDIA_TABLE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/medium/MEDIA_TABLE_STRUCT.js +24 -0
- package/src/shade/renderer/medium/MEDIUM_PHASE_LOBE_KIND.d.ts +24 -0
- package/src/shade/renderer/medium/MEDIUM_PHASE_LOBE_KIND.d.ts.map +1 -0
- package/src/shade/renderer/medium/MEDIUM_PHASE_LOBE_KIND.js +18 -0
- package/src/shade/renderer/medium/MEDIUM_STRUCT.d.ts +20 -0
- package/src/shade/renderer/medium/MEDIUM_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/medium/MEDIUM_STRUCT.js +43 -0
- package/src/shade/renderer/medium/ParticipatingMedium.d.ts +108 -0
- package/src/shade/renderer/medium/ParticipatingMedium.d.ts.map +1 -0
- package/src/shade/renderer/medium/ParticipatingMedium.js +204 -0
- package/src/shade/renderer/medium/chunk_medium_lobe_phase.d.ts +13 -0
- package/src/shade/renderer/medium/chunk_medium_lobe_phase.d.ts.map +1 -0
- package/src/shade/renderer/medium/chunk_medium_lobe_phase.js +33 -0
- package/src/shade/renderer/medium/participating_medium_serialization.d.ts +32 -0
- package/src/shade/renderer/medium/participating_medium_serialization.d.ts.map +1 -0
- package/src/shade/renderer/medium/participating_medium_serialization.js +181 -0
- package/src/shade/renderer/medium/phase/MediumPhaseFunction.d.ts +48 -0
- package/src/shade/renderer/medium/phase/MediumPhaseFunction.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/MediumPhaseFunction.js +42 -0
- package/src/shade/renderer/medium/phase/PhaseCornetteShanks.d.ts +23 -0
- package/src/shade/renderer/medium/phase/PhaseCornetteShanks.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseCornetteShanks.js +45 -0
- package/src/shade/renderer/medium/phase/PhaseDraine.d.ts +30 -0
- package/src/shade/renderer/medium/phase/PhaseDraine.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseDraine.js +58 -0
- package/src/shade/renderer/medium/phase/PhaseFournierForand.d.ts +24 -0
- package/src/shade/renderer/medium/phase/PhaseFournierForand.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseFournierForand.js +53 -0
- package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.d.ts +21 -0
- package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.js +43 -0
- package/src/shade/renderer/medium/phase/PhaseJendersieDeon.d.ts +25 -0
- package/src/shade/renderer/medium/phase/PhaseJendersieDeon.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseJendersieDeon.js +66 -0
- package/src/shade/renderer/medium/phase/PhaseRayleigh.d.ts +9 -0
- package/src/shade/renderer/medium/phase/PhaseRayleigh.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseRayleigh.js +21 -0
- package/src/shade/renderer/medium/phase/PhaseWaterMolecular.d.ts +28 -0
- package/src/shade/renderer/medium/phase/PhaseWaterMolecular.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseWaterMolecular.js +49 -0
- package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.d.ts +10 -0
- package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.js +25 -0
- package/src/shade/renderer/medium/water/water_iop_from_appearance.d.ts +47 -0
- package/src/shade/renderer/medium/water/water_iop_from_appearance.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_iop_from_appearance.js +174 -0
- package/src/shade/renderer/medium/water/water_iop_from_constituents.d.ts +57 -0
- package/src/shade/renderer/medium/water/water_iop_from_constituents.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_iop_from_constituents.js +242 -0
- package/src/shade/renderer/medium/water/water_iop_jerlov.d.ts +41 -0
- package/src/shade/renderer/medium/water/water_iop_jerlov.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_iop_jerlov.js +231 -0
- package/src/shade/renderer/medium/water/water_iop_spectral_reference.d.ts +66 -0
- package/src/shade/renderer/medium/water/water_iop_spectral_reference.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_iop_spectral_reference.js +223 -0
- package/src/shade/renderer/medium/water/water_medium_from_iop.d.ts +96 -0
- package/src/shade/renderer/medium/water/water_medium_from_iop.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_medium_from_iop.js +145 -0
- package/src/shade/renderer/medium/water/water_presets.d.ts +69 -0
- package/src/shade/renderer/medium/water/water_presets.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_presets.js +119 -0
- package/src/shade/renderer/medium/water/water_rgb_from_spectral.d.ts +69 -0
- package/src/shade/renderer/medium/water/water_rgb_from_spectral.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_rgb_from_spectral.js +341 -0
- package/src/shade/renderer/particles/DESIGN.md +4 -2
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.d.ts +26 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.js +71 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +16 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +6 -13
- package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +520 -0
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -0
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +2 -0
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +188 -185
- package/src/shade/renderer/path_tracer/shader/STANDARD_MATERIAL_DATA_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/STANDARD_MATERIAL_DATA_STRUCT.js +4 -1
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts +13 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.js +29 -0
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts +79 -0
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +360 -70
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +4 -3
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.d.ts +24 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.js +99 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.d.ts +68 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.js +263 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.d.ts +55 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.js +148 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.d.ts +17 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.js +41 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.d.ts +20 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.js +105 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.d.ts +28 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.js +97 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.d.ts +12 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.js +46 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.d.ts +25 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.js +75 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.d.ts +54 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.js +245 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.d.ts +42 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.js +236 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.d.ts +24 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.js +97 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.d.ts +57 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.js +222 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.d.ts +88 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.js +304 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.d.ts +35 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.js +137 -0
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.js +85 -84
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts +8 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.js +9 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +12 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +12 -3
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts +13 -7
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +13 -7
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +309 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +54 -9
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +9 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.d.ts +33 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.js +45 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.js +6 -2
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.js +4 -2
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.d.ts +14 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.js +28 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.js +18 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.d.ts +19 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.js +44 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.js +17 -0
- 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 +3 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.js +163 -64
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +4 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +5 -0
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts +12 -1
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.js +22 -3
- package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.js +31 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.d.ts +43 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.js +153 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.js +57 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.d.ts +45 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.js +109 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_phase_draine.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_phase_draine.js +6 -3
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.js +49 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.js +18 -0
- package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.d.ts +3 -0
- package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.js +3 -0
- package/src/shade/renderer/shader/chunk/brdf/dfg/shader_split_sum_dgf_lut.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/dfg/shader_split_sum_dgf_lut.js +3 -1
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.js +53 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.d.ts +7 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.js +12 -60
- package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.d.ts +26 -6
- package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.js +30 -20
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_directional.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_directional.js +3 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_point.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_point.js +3 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_spot.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_spot.js +3 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.js +25 -0
- package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.d.ts +9 -2
- package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.js +33 -10
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.js +71 -37
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.js +30 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.d.ts +19 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.js +73 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.d.ts +19 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.js +25 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.js +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.d.ts +26 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.js +55 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.d.ts +52 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.js +65 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.js +229 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.js +278 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.js +58 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.js +75 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.js +70 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.js +95 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.js +89 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.js +118 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.js +111 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.js +144 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.js +136 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.js +173 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.js +164 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.js +205 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.js +195 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.js +240 -0
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts +0 -6
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.js +46 -1
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.d.ts +7 -7
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.js +7 -7
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +42 -10
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +104 -48
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +20 -4
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +186 -74
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts +2 -1
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/Shadowmap.js +2 -1
- package/src/shade/renderer/shadow/map/csm/CSM_CASCADE_STRUCT.d.ts +30 -0
- package/src/shade/renderer/shadow/map/csm/CSM_CASCADE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/CSM_CASCADE_STRUCT.js +52 -0
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts +14 -0
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.js +20 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT.d.ts +8 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT.js +7 -0
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts +8 -6
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +28 -34
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_csm_compute_cascade_blended.d.ts +3 -2
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_csm_compute_cascade_blended.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_csm_compute_cascade_blended.js +19 -14
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts +4 -3
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.js +12 -7
- package/src/shade/renderer/shadow/map/shadowmap_budget_carry_over.d.ts +4 -4
- package/src/shade/renderer/shadow/map/shadowmap_budget_carry_over.js +4 -4
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +39 -17
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.js +5 -36
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.js +3 -2
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +49 -35
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts +4 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.js +8 -9
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.js +2 -2
- package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/decode_tile_address.js +15 -23
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.js +6 -9
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.js +19 -9
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.js +18 -6
- package/src/shade/renderer/texture/util/BLACK_PIXEL_TEXTURE.d.ts +1 -1
- package/src/shade/renderer/texture/util/BLACK_PIXEL_TEXTURE.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/PIXEL_TEXTURE_NORMAL.d.ts +18 -1
- package/src/shade/renderer/texture/util/PIXEL_TEXTURE_NORMAL.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/PIXEL_TEXTURE_NORMAL.js +24 -3
- package/src/shade/renderer/texture/util/WHITE_PIXEL_TEXTURE.d.ts +1 -1
- package/src/shade/renderer/texture/util/WHITE_PIXEL_TEXTURE.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/get_single_pixel_texture.d.ts +0 -1
- package/src/shade/renderer/texture/util/get_single_pixel_texture.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/get_single_pixel_texture.js +2 -23
- package/src/shade/renderer/texture/util/single_pixel_texture_from_sampler.d.ts +11 -0
- package/src/shade/renderer/texture/util/single_pixel_texture_from_sampler.d.ts.map +1 -0
- package/src/shade/renderer/texture/util/single_pixel_texture_from_sampler.js +34 -0
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts +17 -8
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +35 -64
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts +21 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.js +70 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volumes_iterate.d.ts +31 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volumes_iterate.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volumes_iterate.js +86 -0
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -4
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +6 -7
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +7 -7
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +13 -1
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +74 -25
- package/src/shade/renderer/water/chunk_water_gi.d.ts +14 -0
- package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -0
- package/src/shade/renderer/water/chunk_water_gi.js +56 -0
- package/src/shade/renderer/water/chunk_water_transport.d.ts +2 -0
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_transport.js +51 -40
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +29 -0
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +116 -0
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts +23 -0
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.js +42 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_derived.d.ts +9 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_derived.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_derived.js +55 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_scattering.d.ts +8 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_scattering.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_scattering.js +17 -0
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +8 -0
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +30 -0
- package/src/shade/renderer/water/optics/chunk_water_inscatter.d.ts +28 -0
- package/src/shade/renderer/water/optics/chunk_water_inscatter.d.ts.map +1 -0
- package/src/shade/renderer/water/optics/chunk_water_inscatter.js +123 -0
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts +23 -0
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts.map +1 -0
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts +18 -0
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts.map +1 -0
- package/src/shade/renderer/water/optics/chunk_water_optics.d.ts +12 -0
- package/src/shade/renderer/water/optics/chunk_water_optics.d.ts.map +1 -0
- package/src/shade/renderer/water/optics/chunk_water_optics.js +75 -0
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts +27 -0
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts.map +1 -0
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.js +74 -0
- package/src/shade/renderer/water/shader_water.d.ts +10 -4
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +406 -384
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water_avboit.js +19 -9
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +98 -0
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +408 -0
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts +12 -0
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.js +27 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts +14 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.js +49 -0
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +15 -0
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/chunk_water_wave.js +48 -0
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts +9 -0
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.js +47 -0
- package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts +10 -0
- package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_surface_write.js +51 -0
- package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts +12 -0
- package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_wave_step.js +54 -0
- package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts +13 -0
- package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/water_surface_grid_indices.js +39 -0
- package/src/shade/renderer/water/water_missing_receiver_path.d.ts +17 -0
- package/src/shade/renderer/water/water_missing_receiver_path.d.ts.map +1 -0
- package/src/shade/renderer/water/water_missing_receiver_path.js +40 -0
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +247 -23
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts +18 -14
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +48 -6
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts +0 -29
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.js +0 -43
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASCADE_COUNT.d.ts +0 -7
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASCADE_COUNT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASCADE_COUNT.js +0 -6
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { line3_compute_segment_segment_closest_points } from "../../../core/geom/3d/line/line3_compute_segment_segment_closest_points.js";
|
|
2
|
-
import {
|
|
2
|
+
import { quat3_to_matrix3_array } from "../../../core/geom/3d/quaternion/quat3_to_matrix3.js";
|
|
3
3
|
import { polygon2_clip_axis_halfplane } from "../../../core/geom/2d/polygon/polygon2_clip_axis_halfplane.js";
|
|
4
4
|
import { reduce_manifold_contacts } from "./reduce_manifold_contacts.js";
|
|
5
5
|
import { box3_projected_half_extent } from "../../../core/geom/3d/box/box3_projected_half_extent.js";
|
|
@@ -51,6 +51,10 @@ import { box3_projected_half_extent } from "../../../core/geom/3d/box/box3_proje
|
|
|
51
51
|
* out[4 + k*7 + 0..2] : world contact on triangle surface
|
|
52
52
|
* out[4 + k*7 + 3..5] : world contact on box surface
|
|
53
53
|
* out[4 + k*7 + 6] : penetration depth (positive)
|
|
54
|
+
* out[BOX_TRIANGLE_AXIS_OFFSET] : which kind of axis won —
|
|
55
|
+
* {@link BOX_TRIANGLE_AXIS_BOX_FACE},
|
|
56
|
+
* {@link BOX_TRIANGLE_AXIS_TRIANGLE_FACE} or
|
|
57
|
+
* {@link BOX_TRIANGLE_AXIS_EDGES}
|
|
54
58
|
*
|
|
55
59
|
* @author Alex Goldring
|
|
56
60
|
* @copyright Company Named Limited (c) 2026
|
|
@@ -75,11 +79,60 @@ const PARALLEL_EPS_SQR = 1e-8;
|
|
|
75
79
|
*/
|
|
76
80
|
const PARALLEL_COS_EPS = 1e-4;
|
|
77
81
|
|
|
82
|
+
/**
|
|
83
|
+
* How far to the outside of the reference plane a recovered point may lie and still be taken as on it.
|
|
84
|
+
* A point on the plane is a contact, at no depth: a box set down exactly on a triangle touches it with
|
|
85
|
+
* its whole base, as a box floor holds it at the base's four corners. Taken for none, every such point
|
|
86
|
+
* went to the single-contact fallback, and a 0.2 m box set down on a triangulated floor came to rest
|
|
87
|
+
* tipped up to 10 mrad, where on a box floor it stays within 0.03 mrad. Rounding puts a point lying on
|
|
88
|
+
* the plane a hair to either side of it.
|
|
89
|
+
* @type {number}
|
|
90
|
+
*/
|
|
91
|
+
const ON_PLANE_EPS = 1e-9;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Index in `out` of the kind of axis the contact was built on (written on overlap only).
|
|
95
|
+
*
|
|
96
|
+
* The kind is the axis's, not the SAT test's that found it: an edge pair whose cross product lies
|
|
97
|
+
* within {@link AXIS_FACE_ALIGNMENT} of a face normal is that face's axis met a second time — a box
|
|
98
|
+
* edge lying in the plane of a triangle crossed with a triangle edge is the triangle's normal — and
|
|
99
|
+
* which copy wins is rounding. The contacts are then that face's too: its clipped manifold, on its
|
|
100
|
+
* normal.
|
|
101
|
+
* @type {number}
|
|
102
|
+
*/
|
|
103
|
+
export const BOX_TRIANGLE_AXIS_OFFSET = 4 + MAX_CONTACTS * CONTACT_STRIDE;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* A face of the box is the axis.
|
|
107
|
+
* @type {number}
|
|
108
|
+
*/
|
|
109
|
+
export const BOX_TRIANGLE_AXIS_BOX_FACE = 0;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* The triangle's face is the axis.
|
|
113
|
+
* @type {number}
|
|
114
|
+
*/
|
|
115
|
+
export const BOX_TRIANGLE_AXIS_TRIANGLE_FACE = 1;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* An edge of the box crossed with an edge of the triangle, along no face's normal, is the axis: one
|
|
119
|
+
* contact, between the two edges.
|
|
120
|
+
* @type {number}
|
|
121
|
+
*/
|
|
122
|
+
export const BOX_TRIANGLE_AXIS_EDGES = 2;
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Cosine within which an edge-pair axis counts as a face's: about 3.6°, the face alignment the support
|
|
126
|
+
* features use (support_feature_manifold.js).
|
|
127
|
+
* @type {number}
|
|
128
|
+
*/
|
|
129
|
+
const AXIS_FACE_ALIGNMENT = 0.998;
|
|
130
|
+
|
|
78
131
|
/**
|
|
79
132
|
* Length of `out` required by {@link box_triangle_contact}.
|
|
80
133
|
* @type {number}
|
|
81
134
|
*/
|
|
82
|
-
export const BOX_TRIANGLE_OUT_LENGTH =
|
|
135
|
+
export const BOX_TRIANGLE_OUT_LENGTH = BOX_TRIANGLE_AXIS_OFFSET + 1;
|
|
83
136
|
|
|
84
137
|
// --- scratch storage (allocation-free across calls) ----------------------------
|
|
85
138
|
|
|
@@ -90,6 +143,10 @@ const scratch_axes = new Float64Array(9);
|
|
|
90
143
|
const tri_uv_in = new Float64Array(8 * 2);
|
|
91
144
|
const tri_uv_out = new Float64Array(8 * 2);
|
|
92
145
|
|
|
146
|
+
// The same, with each point's depth past the face as a third coordinate: (u, v, w).
|
|
147
|
+
const tri_uvw_in = new Float64Array(8 * 3);
|
|
148
|
+
const tri_uvw_out = new Float64Array(8 * 3);
|
|
149
|
+
|
|
93
150
|
// Box face corners (for the triangle-axis-winner branch).
|
|
94
151
|
const box_face_corners_uv_in = new Float64Array(8 * 2);
|
|
95
152
|
const box_face_corners_uv_out = new Float64Array(8 * 2);
|
|
@@ -143,6 +200,53 @@ function clip_against_half_plane_uv(points_in, point_count, points_out, line_ox,
|
|
|
143
200
|
return out_count;
|
|
144
201
|
}
|
|
145
202
|
|
|
203
|
+
/**
|
|
204
|
+
* {@link polygon2_clip_axis_halfplane} over points of three coordinates (u, v, w), the third carried
|
|
205
|
+
* along: clipped against `coord_idx ≤ bound` (`≥` when `keep_below` is false), `coord_idx` 0 or 1. The u
|
|
206
|
+
* and v of every point are computed as that function computes them, so the same points survive.
|
|
207
|
+
*
|
|
208
|
+
* @param {Float64Array} points_in stride 3
|
|
209
|
+
* @param {number} point_count
|
|
210
|
+
* @param {Float64Array} points_out stride 3
|
|
211
|
+
* @param {number} coord_idx 0 = u, 1 = v
|
|
212
|
+
* @param {number} bound
|
|
213
|
+
* @param {boolean} keep_below
|
|
214
|
+
* @returns {number} surviving point count
|
|
215
|
+
*/
|
|
216
|
+
function clip_uvw_axis_halfplane(points_in, point_count, points_out, coord_idx, bound, keep_below) {
|
|
217
|
+
let out_count = 0;
|
|
218
|
+
|
|
219
|
+
for (let i = 0; i < point_count; i++) {
|
|
220
|
+
const a = i * 3;
|
|
221
|
+
const b = ((i + 1) % point_count) * 3;
|
|
222
|
+
|
|
223
|
+
const av = points_in[a + coord_idx];
|
|
224
|
+
const bv = points_in[b + coord_idx];
|
|
225
|
+
|
|
226
|
+
const a_inside = keep_below ? (av <= bound) : (av >= bound);
|
|
227
|
+
const b_inside = keep_below ? (bv <= bound) : (bv >= bound);
|
|
228
|
+
|
|
229
|
+
if (a_inside) {
|
|
230
|
+
const o = out_count * 3;
|
|
231
|
+
points_out[o] = points_in[a];
|
|
232
|
+
points_out[o + 1] = points_in[a + 1];
|
|
233
|
+
points_out[o + 2] = points_in[a + 2];
|
|
234
|
+
out_count++;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
if (a_inside !== b_inside) {
|
|
238
|
+
const t = (bound - av) / (bv - av);
|
|
239
|
+
const o = out_count * 3;
|
|
240
|
+
points_out[o] = points_in[a] + (points_in[b] - points_in[a]) * t;
|
|
241
|
+
points_out[o + 1] = points_in[a + 1] + (points_in[b + 1] - points_in[a + 1]) * t;
|
|
242
|
+
points_out[o + 2] = points_in[a + 2] + (points_in[b + 2] - points_in[a + 2]) * t;
|
|
243
|
+
out_count++;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return out_count;
|
|
248
|
+
}
|
|
249
|
+
|
|
146
250
|
/**
|
|
147
251
|
* In-place reduction of `candidates` (stride 7: x, y, z on triangle,
|
|
148
252
|
* x, y, z on box, depth) to at most {@link MAX_CONTACTS} entries.
|
|
@@ -163,48 +267,70 @@ function reduce_contacts(n) {
|
|
|
163
267
|
// `test_axis` used to be a per-call closure — allocated for every
|
|
164
268
|
// box-triangle candidate because it captures and MUTATES the running
|
|
165
269
|
// best-axis accumulator. Hoisted to module scope; the per-call inputs are
|
|
166
|
-
// staged in
|
|
167
|
-
//
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
let
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
270
|
+
// staged in `bt` (written once per call, read by all 13 axis tests). Same
|
|
271
|
+
// arithmetic, same order — bit-identical results.
|
|
272
|
+
//
|
|
273
|
+
// Staged in a Float64Array, not in module `let`s: a number written to a module
|
|
274
|
+
// `let` is boxed into a new heap object on every write, 21 of them per call.
|
|
275
|
+
// The manifold builders read the same staging, rather than being passed two
|
|
276
|
+
// dozen numbers each: none of them is inlined, and a call that is not inlined
|
|
277
|
+
// boxes every number passed to it.
|
|
278
|
+
|
|
279
|
+
const BT_BOX_CENTRE = 0; // x, y, z (world)
|
|
280
|
+
const BT_BOX_HALF = 3; // x, y, z (body frame)
|
|
281
|
+
const BT_TRI_A = 6; // x, y, z (world)
|
|
282
|
+
const BT_TRI_B = 9;
|
|
283
|
+
const BT_TRI_C = 12;
|
|
284
|
+
const BT_D_T2B = 15; // triangle centroid → box centre
|
|
285
|
+
const BT_TRI_NORMAL = 18; // unit
|
|
286
|
+
const BT_BEST_OVERLAP = 21;
|
|
287
|
+
const BT_BEST_NORMAL = 24; // unit, triangle → box
|
|
288
|
+
const BT_EDGE_AXIS = 27; // an edge-pair candidate axis for test_axis
|
|
289
|
+
const BT_FACE_NORMAL = 30; // the manifold builders' normal, triangle → box
|
|
290
|
+
const BT_FACE_OVERLAP = 33; // and the overlap along it
|
|
291
|
+
const BT_LENGTH = 34;
|
|
292
|
+
|
|
293
|
+
const bt = new Float64Array(BT_LENGTH);
|
|
294
|
+
|
|
177
295
|
let g_bt_best_source = -1;
|
|
178
296
|
let g_bt_best_box_edge_idx = -1;
|
|
179
297
|
let g_bt_best_tri_edge_idx = -1;
|
|
180
298
|
|
|
181
299
|
/**
|
|
182
|
-
* Test a candidate separating axis `
|
|
300
|
+
* Test a candidate separating axis, `axis[axis_offset ..+2]` (need not be unit-length).
|
|
183
301
|
* Returns true if a separating axis is found (overlap < 0); otherwise
|
|
184
|
-
* updates the
|
|
302
|
+
* updates the best-axis slots if this axis has the smallest overlap so far.
|
|
185
303
|
*
|
|
186
304
|
* Source:
|
|
187
305
|
* 0..2 : box face normal (axis index 0..2)
|
|
188
306
|
* 3 : triangle face normal
|
|
189
307
|
* 4..12 : edge-cross (box_edge_idx * 3 + tri_edge_idx, offset +4)
|
|
308
|
+
*
|
|
309
|
+
* @param {Float64Array} axis
|
|
310
|
+
* @param {number} axis_offset
|
|
311
|
+
* @param {number} source
|
|
312
|
+
* @param {number} box_e_idx
|
|
313
|
+
* @param {number} tri_e_idx
|
|
314
|
+
* @returns {boolean}
|
|
190
315
|
*/
|
|
191
|
-
function test_axis(
|
|
316
|
+
function test_axis(axis, axis_offset, source, box_e_idx, tri_e_idx) {
|
|
317
|
+
const lx = axis[axis_offset], ly = axis[axis_offset + 1], lz = axis[axis_offset + 2];
|
|
192
318
|
const len_sqr = lx * lx + ly * ly + lz * lz;
|
|
193
319
|
if (len_sqr <= PARALLEL_EPS_SQR) return false;
|
|
194
320
|
const inv_len = 1 / Math.sqrt(len_sqr);
|
|
195
321
|
const ux = lx * inv_len, uy = ly * inv_len, uz = lz * inv_len;
|
|
196
322
|
|
|
197
323
|
// Box projection.
|
|
198
|
-
const box_centre_proj = ux *
|
|
199
|
-
const r_box = box3_projected_half_extent(scratch_axes, 0,
|
|
324
|
+
const box_centre_proj = ux * bt[BT_BOX_CENTRE] + uy * bt[BT_BOX_CENTRE + 1] + uz * bt[BT_BOX_CENTRE + 2];
|
|
325
|
+
const r_box = box3_projected_half_extent(scratch_axes, 0, bt[BT_BOX_HALF], bt[BT_BOX_HALF + 1], bt[BT_BOX_HALF + 2], ux, uy, uz);
|
|
200
326
|
const bmin = box_centre_proj - r_box;
|
|
201
327
|
const bmax = box_centre_proj + r_box;
|
|
202
328
|
|
|
203
329
|
// Triangle projection — NOT symmetric around centroid, so we take
|
|
204
330
|
// the per-vertex extreme values.
|
|
205
|
-
const da = ux *
|
|
206
|
-
const db = ux *
|
|
207
|
-
const dc = ux *
|
|
331
|
+
const da = ux * bt[BT_TRI_A] + uy * bt[BT_TRI_A + 1] + uz * bt[BT_TRI_A + 2];
|
|
332
|
+
const db = ux * bt[BT_TRI_B] + uy * bt[BT_TRI_B + 1] + uz * bt[BT_TRI_B + 2];
|
|
333
|
+
const dc = ux * bt[BT_TRI_C] + uy * bt[BT_TRI_C + 1] + uz * bt[BT_TRI_C + 2];
|
|
208
334
|
const tmin = da < db ? (da < dc ? da : dc) : (db < dc ? db : dc);
|
|
209
335
|
const tmax = da > db ? (da > dc ? da : dc) : (db > dc ? db : dc);
|
|
210
336
|
|
|
@@ -219,16 +345,16 @@ function test_axis(lx, ly, lz, source, box_e_idx, tri_e_idx) {
|
|
|
219
345
|
const push_neg = tmax - bmin;
|
|
220
346
|
const overlap = push_pos < push_neg ? push_pos : push_neg;
|
|
221
347
|
|
|
222
|
-
if (overlap <
|
|
223
|
-
|
|
348
|
+
if (overlap < bt[BT_BEST_OVERLAP]) {
|
|
349
|
+
bt[BT_BEST_OVERLAP] = overlap;
|
|
224
350
|
// Canonical normal direction: triangle -> box. Use the
|
|
225
351
|
// box-centre-vs-triangle-centroid sign as the tiebreaker so
|
|
226
352
|
// the SAT axis is canonically oriented before we negate.
|
|
227
|
-
const center_dot =
|
|
353
|
+
const center_dot = bt[BT_D_T2B] * ux + bt[BT_D_T2B + 1] * uy + bt[BT_D_T2B + 2] * uz;
|
|
228
354
|
const sign = center_dot >= 0 ? 1 : -1;
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
355
|
+
bt[BT_BEST_NORMAL] = ux * sign;
|
|
356
|
+
bt[BT_BEST_NORMAL + 1] = uy * sign;
|
|
357
|
+
bt[BT_BEST_NORMAL + 2] = uz * sign;
|
|
232
358
|
g_bt_best_source = source;
|
|
233
359
|
g_bt_best_box_edge_idx = box_e_idx;
|
|
234
360
|
g_bt_best_tri_edge_idx = tri_e_idx;
|
|
@@ -264,7 +390,45 @@ export function box_triangle_contact(
|
|
|
264
390
|
bcx, bcy, bcz, bqx, bqy, bqz, bqw, bhx, bhy, bhz,
|
|
265
391
|
ax, ay, az, bx, by, bz, cx, cy, cz
|
|
266
392
|
) {
|
|
267
|
-
|
|
393
|
+
const box = scratch_box;
|
|
394
|
+
const triangle = scratch_triangle;
|
|
395
|
+
|
|
396
|
+
box[0] = bcx; box[1] = bcy; box[2] = bcz;
|
|
397
|
+
box[3] = bqx; box[4] = bqy; box[5] = bqz; box[6] = bqw;
|
|
398
|
+
box[7] = bhx; box[8] = bhy; box[9] = bhz;
|
|
399
|
+
|
|
400
|
+
triangle[0] = ax; triangle[1] = ay; triangle[2] = az;
|
|
401
|
+
triangle[3] = bx; triangle[4] = by; triangle[5] = bz;
|
|
402
|
+
triangle[6] = cx; triangle[7] = cy; triangle[8] = cz;
|
|
403
|
+
|
|
404
|
+
return box_triangle_contact_array(out, box, 0, triangle, 0);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/** Where {@link box_triangle_contact} packs its box and its triangle. */
|
|
408
|
+
const scratch_box = new Float64Array(10);
|
|
409
|
+
const scratch_triangle = new Float64Array(9);
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* {@link box_triangle_contact} with the box and the triangle read from arrays: a call V8 does not
|
|
413
|
+
* inline boxes each number passed to it, nineteen here, once per triangle under a box.
|
|
414
|
+
*
|
|
415
|
+
* @param {number[]|Float64Array} out length >= {@link BOX_TRIANGLE_OUT_LENGTH}
|
|
416
|
+
* @param {Float64Array} box the box: centre (world), orientation (unit quaternion), half-extents (body
|
|
417
|
+
* frame) — ten numbers
|
|
418
|
+
* @param {number} box_offset
|
|
419
|
+
* @param {Float64Array} triangle vertices A, B, C (world) — nine numbers
|
|
420
|
+
* @param {number} triangle_offset
|
|
421
|
+
* @returns {boolean} true if box and triangle overlap
|
|
422
|
+
*/
|
|
423
|
+
export function box_triangle_contact_array(out, box, box_offset, triangle, triangle_offset) {
|
|
424
|
+
const bcx = box[box_offset], bcy = box[box_offset + 1], bcz = box[box_offset + 2];
|
|
425
|
+
const bhx = box[box_offset + 7], bhy = box[box_offset + 8], bhz = box[box_offset + 9];
|
|
426
|
+
|
|
427
|
+
const ax = triangle[triangle_offset], ay = triangle[triangle_offset + 1], az = triangle[triangle_offset + 2];
|
|
428
|
+
const bx = triangle[triangle_offset + 3], by = triangle[triangle_offset + 4], bz = triangle[triangle_offset + 5];
|
|
429
|
+
const cx = triangle[triangle_offset + 6], cy = triangle[triangle_offset + 7], cz = triangle[triangle_offset + 8];
|
|
430
|
+
|
|
431
|
+
quat3_to_matrix3_array(scratch_axes, 0, box, box_offset + 3);
|
|
268
432
|
const axes = scratch_axes;
|
|
269
433
|
|
|
270
434
|
// Triangle edges in world.
|
|
@@ -300,25 +464,26 @@ export function box_triangle_contact(
|
|
|
300
464
|
|
|
301
465
|
// Stage the per-call inputs + reset the best-axis accumulator for the
|
|
302
466
|
// hoisted test_axis (see the D3 note above it).
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
467
|
+
bt[BT_BOX_CENTRE] = bcx; bt[BT_BOX_CENTRE + 1] = bcy; bt[BT_BOX_CENTRE + 2] = bcz;
|
|
468
|
+
bt[BT_BOX_HALF] = bhx; bt[BT_BOX_HALF + 1] = bhy; bt[BT_BOX_HALF + 2] = bhz;
|
|
469
|
+
bt[BT_TRI_A] = ax; bt[BT_TRI_A + 1] = ay; bt[BT_TRI_A + 2] = az;
|
|
470
|
+
bt[BT_TRI_B] = bx; bt[BT_TRI_B + 1] = by; bt[BT_TRI_B + 2] = bz;
|
|
471
|
+
bt[BT_TRI_C] = cx; bt[BT_TRI_C + 1] = cy; bt[BT_TRI_C + 2] = cz;
|
|
472
|
+
bt[BT_D_T2B] = d_t2b_x; bt[BT_D_T2B + 1] = d_t2b_y; bt[BT_D_T2B + 2] = d_t2b_z;
|
|
473
|
+
bt[BT_TRI_NORMAL] = tnx; bt[BT_TRI_NORMAL + 1] = tny; bt[BT_TRI_NORMAL + 2] = tnz;
|
|
474
|
+
bt[BT_BEST_OVERLAP] = Infinity;
|
|
475
|
+
bt[BT_BEST_NORMAL] = 0; bt[BT_BEST_NORMAL + 1] = 0; bt[BT_BEST_NORMAL + 2] = 0;
|
|
311
476
|
g_bt_best_source = -1;
|
|
312
477
|
g_bt_best_box_edge_idx = -1;
|
|
313
478
|
g_bt_best_tri_edge_idx = -1;
|
|
314
479
|
|
|
315
480
|
// 1. Box face normals (3 axes).
|
|
316
|
-
if (test_axis(axes
|
|
317
|
-
if (test_axis(axes
|
|
318
|
-
if (test_axis(axes
|
|
481
|
+
if (test_axis(axes, 0, 0, -1, -1)) { out[3] = 0; return false; }
|
|
482
|
+
if (test_axis(axes, 3, 1, -1, -1)) { out[3] = 0; return false; }
|
|
483
|
+
if (test_axis(axes, 6, 2, -1, -1)) { out[3] = 0; return false; }
|
|
319
484
|
|
|
320
485
|
// 2. Triangle face normal (1 axis).
|
|
321
|
-
if (test_axis(
|
|
486
|
+
if (test_axis(bt, BT_TRI_NORMAL, 3, -1, -1)) { out[3] = 0; return false; }
|
|
322
487
|
|
|
323
488
|
// 3. Edge-edge cross products (9 axes).
|
|
324
489
|
for (let i = 0; i < 3; i++) {
|
|
@@ -328,38 +493,129 @@ export function box_triangle_contact(
|
|
|
328
493
|
if (j === 0) { ex = ab_x; ey = ab_y; ez = ab_z; }
|
|
329
494
|
else if (j === 1) { ex = bc_x; ey = bc_y; ez = bc_z; }
|
|
330
495
|
else { ex = ca_x; ey = ca_y; ez = ca_z; }
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
if (test_axis(
|
|
496
|
+
bt[BT_EDGE_AXIS] = aiy * ez - aiz * ey;
|
|
497
|
+
bt[BT_EDGE_AXIS + 1] = aiz * ex - aix * ez;
|
|
498
|
+
bt[BT_EDGE_AXIS + 2] = aix * ey - aiy * ex;
|
|
499
|
+
if (test_axis(bt, BT_EDGE_AXIS, 4 + i * 3 + j, i, j)) { out[3] = 0; return false; }
|
|
335
500
|
}
|
|
336
501
|
}
|
|
337
502
|
|
|
338
503
|
// We have overlap. Output the contact normal (triangle → box).
|
|
339
|
-
const best_overlap =
|
|
504
|
+
const best_overlap = bt[BT_BEST_OVERLAP];
|
|
340
505
|
const best_source = g_bt_best_source;
|
|
341
506
|
const best_box_edge_idx = g_bt_best_box_edge_idx;
|
|
342
507
|
const best_tri_edge_idx = g_bt_best_tri_edge_idx;
|
|
343
|
-
const nx =
|
|
508
|
+
const nx = bt[BT_BEST_NORMAL], ny = bt[BT_BEST_NORMAL + 1], nz = bt[BT_BEST_NORMAL + 2];
|
|
344
509
|
out[0] = nx; out[1] = ny; out[2] = nz;
|
|
345
510
|
|
|
511
|
+
// Built on the face the axis is, whichever copy of it won: an edge pair that is a face's axis
|
|
512
|
+
// again comes out a hair shallower by rounding (or within the alignment), and its two edges'
|
|
513
|
+
// closest points need not be anywhere near the overlap — a long box's short edge and the
|
|
514
|
+
// triangle's far edge, metres apart, made one contact that bounced and spun the box.
|
|
515
|
+
const manifold_source = face_source(best_source, axes);
|
|
516
|
+
|
|
517
|
+
out[BOX_TRIANGLE_AXIS_OFFSET] = axis_kind(manifold_source);
|
|
518
|
+
|
|
346
519
|
// --- Contact manifold construction ---
|
|
347
520
|
|
|
348
|
-
if (
|
|
349
|
-
//
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
521
|
+
if (manifold_source < 4) {
|
|
522
|
+
// On that face's own normal, turned toward the box, and with its own overlap: an edge pair
|
|
523
|
+
// standing in for it has a normal up to 3.6° off the face's, and a box resting or sliding on a
|
|
524
|
+
// flat triangulated floor kept landing on that copy — tilted contacts that rocked and kicked it.
|
|
525
|
+
if (manifold_source !== best_source) {
|
|
526
|
+
const ux = manifold_source === 3 ? tnx : axes[manifold_source * 3];
|
|
527
|
+
const uy = manifold_source === 3 ? tny : axes[manifold_source * 3 + 1];
|
|
528
|
+
const uz = manifold_source === 3 ? tnz : axes[manifold_source * 3 + 2];
|
|
529
|
+
const s = d_t2b_x * ux + d_t2b_y * uy + d_t2b_z * uz >= 0 ? 1 : -1;
|
|
530
|
+
|
|
531
|
+
const fx = ux * s, fy = uy * s, fz = uz * s;
|
|
532
|
+
|
|
533
|
+
bt[BT_FACE_NORMAL] = fx; bt[BT_FACE_NORMAL + 1] = fy; bt[BT_FACE_NORMAL + 2] = fz;
|
|
534
|
+
stage_face_overlap();
|
|
535
|
+
|
|
536
|
+
out[0] = fx; out[1] = fy; out[2] = fz;
|
|
537
|
+
} else {
|
|
538
|
+
bt[BT_FACE_NORMAL] = nx; bt[BT_FACE_NORMAL + 1] = ny; bt[BT_FACE_NORMAL + 2] = nz;
|
|
539
|
+
bt[BT_FACE_OVERLAP] = best_overlap;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
if (manifold_source < 3) {
|
|
543
|
+
// Box face axis winner: reference = box face, incident = triangle.
|
|
544
|
+
return emit_box_face_manifold(out, manifold_source, axes);
|
|
545
|
+
}
|
|
546
|
+
|
|
353
547
|
// Triangle face axis winner: reference = triangle, incident = box face.
|
|
354
|
-
return emit_triangle_face_manifold(out, axes
|
|
355
|
-
ax, ay, az, bx, by, bz, cx, cy, cz, tnx, tny, tnz, nx, ny, nz, best_overlap);
|
|
548
|
+
return emit_triangle_face_manifold(out, axes);
|
|
356
549
|
} else {
|
|
357
550
|
// Edge-cross winner: single contact at closest pair on the two edges.
|
|
358
|
-
return emit_edge_cross_contact(out, axes,
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
551
|
+
return emit_edge_cross_contact(out, axes, best_box_edge_idx, best_tri_edge_idx);
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
* Overlap of the staged box and triangle along the unit axis staged at BT_FACE_NORMAL — the amount
|
|
557
|
+
* {@link test_axis} measures, without touching the running best — written to BT_FACE_OVERLAP. Read
|
|
558
|
+
* and written there rather than passed and returned: the call is not inlined, and the three numbers
|
|
559
|
+
* passed and the one returned were each boxed into a new heap object.
|
|
560
|
+
*/
|
|
561
|
+
function stage_face_overlap() {
|
|
562
|
+
const ux = bt[BT_FACE_NORMAL], uy = bt[BT_FACE_NORMAL + 1], uz = bt[BT_FACE_NORMAL + 2];
|
|
563
|
+
const box_centre_proj = ux * bt[BT_BOX_CENTRE] + uy * bt[BT_BOX_CENTRE + 1] + uz * bt[BT_BOX_CENTRE + 2];
|
|
564
|
+
const r_box = box3_projected_half_extent(scratch_axes, 0, bt[BT_BOX_HALF], bt[BT_BOX_HALF + 1], bt[BT_BOX_HALF + 2], ux, uy, uz);
|
|
565
|
+
|
|
566
|
+
const da = ux * bt[BT_TRI_A] + uy * bt[BT_TRI_A + 1] + uz * bt[BT_TRI_A + 2];
|
|
567
|
+
const db = ux * bt[BT_TRI_B] + uy * bt[BT_TRI_B + 1] + uz * bt[BT_TRI_B + 2];
|
|
568
|
+
const dc = ux * bt[BT_TRI_C] + uy * bt[BT_TRI_C + 1] + uz * bt[BT_TRI_C + 2];
|
|
569
|
+
const tmin = da < db ? (da < dc ? da : dc) : (db < dc ? db : dc);
|
|
570
|
+
const tmax = da > db ? (da > dc ? da : dc) : (db > dc ? db : dc);
|
|
571
|
+
|
|
572
|
+
const push_pos = box_centre_proj + r_box - tmin;
|
|
573
|
+
const push_neg = tmax - (box_centre_proj - r_box);
|
|
574
|
+
|
|
575
|
+
bt[BT_FACE_OVERLAP] = push_pos < push_neg ? push_pos : push_neg;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
/**
|
|
579
|
+
* Kind of the winning axis, for {@link BOX_TRIANGLE_AXIS_OFFSET}, from the face it is ({@link face_source}).
|
|
580
|
+
*
|
|
581
|
+
* @param {number} face SAT source the winning axis really is: 0..2 box face, 3 triangle face, 4..12 edge pair
|
|
582
|
+
* @returns {number}
|
|
583
|
+
*/
|
|
584
|
+
function axis_kind(face) {
|
|
585
|
+
if (face < 3) return BOX_TRIANGLE_AXIS_BOX_FACE;
|
|
586
|
+
if (face === 3) return BOX_TRIANGLE_AXIS_TRIANGLE_FACE;
|
|
587
|
+
|
|
588
|
+
return BOX_TRIANGLE_AXIS_EDGES;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
/**
|
|
592
|
+
* The SAT source the winning axis really is. An edge pair (sources 4..12) whose cross product lies
|
|
593
|
+
* within {@link AXIS_FACE_ALIGNMENT} of the triangle's normal or of a box face's is that face's axis
|
|
594
|
+
* met a second time: source 3, or the box axis 0..2. Any other source is returned as it is.
|
|
595
|
+
*
|
|
596
|
+
* The winning axis and the triangle's normal are the staged ones (`bt`).
|
|
597
|
+
*
|
|
598
|
+
* @param {number} source SAT source: 0..2 box face, 3 triangle face, 4..12 edge pair
|
|
599
|
+
* @param {Float64Array} axes the box's axes, rows
|
|
600
|
+
* @returns {number}
|
|
601
|
+
*/
|
|
602
|
+
function face_source(source, axes) {
|
|
603
|
+
if (source < 4) return source;
|
|
604
|
+
|
|
605
|
+
const nx = bt[BT_BEST_NORMAL], ny = bt[BT_BEST_NORMAL + 1], nz = bt[BT_BEST_NORMAL + 2];
|
|
606
|
+
const tnx = bt[BT_TRI_NORMAL], tny = bt[BT_TRI_NORMAL + 1], tnz = bt[BT_TRI_NORMAL + 2];
|
|
607
|
+
|
|
608
|
+
if (Math.abs(nx * tnx + ny * tny + nz * tnz) >= AXIS_FACE_ALIGNMENT) {
|
|
609
|
+
return 3;
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
for (let k = 0; k < 3; k++) {
|
|
613
|
+
if (Math.abs(nx * axes[k * 3] + ny * axes[k * 3 + 1] + nz * axes[k * 3 + 2]) >= AXIS_FACE_ALIGNMENT) {
|
|
614
|
+
return k;
|
|
615
|
+
}
|
|
362
616
|
}
|
|
617
|
+
|
|
618
|
+
return source;
|
|
363
619
|
}
|
|
364
620
|
|
|
365
621
|
// --- Manifold builders ------------------------------------------------------
|
|
@@ -368,15 +624,19 @@ export function box_triangle_contact(
|
|
|
368
624
|
* Box-face SAT winner: clip the triangle against the box's reference face
|
|
369
625
|
* rectangle, then for each surviving (u, v) recover the world contact on
|
|
370
626
|
* the triangle plane.
|
|
627
|
+
*
|
|
628
|
+
* Box, triangle, triangle normal, and the face's normal and overlap are the staged ones (`bt`).
|
|
371
629
|
*/
|
|
372
|
-
function emit_box_face_manifold(
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
ax, ay
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
630
|
+
function emit_box_face_manifold(out, ref_axis_idx, axes) {
|
|
631
|
+
const bcx = bt[BT_BOX_CENTRE], bcy = bt[BT_BOX_CENTRE + 1], bcz = bt[BT_BOX_CENTRE + 2];
|
|
632
|
+
const bhx = bt[BT_BOX_HALF], bhy = bt[BT_BOX_HALF + 1], bhz = bt[BT_BOX_HALF + 2];
|
|
633
|
+
const ax = bt[BT_TRI_A], ay = bt[BT_TRI_A + 1], az = bt[BT_TRI_A + 2];
|
|
634
|
+
const bx = bt[BT_TRI_B], by = bt[BT_TRI_B + 1], bz = bt[BT_TRI_B + 2];
|
|
635
|
+
const cx = bt[BT_TRI_C], cy = bt[BT_TRI_C + 1], cz = bt[BT_TRI_C + 2];
|
|
636
|
+
const tnx = bt[BT_TRI_NORMAL], tny = bt[BT_TRI_NORMAL + 1], tnz = bt[BT_TRI_NORMAL + 2];
|
|
637
|
+
const nx = bt[BT_FACE_NORMAL], ny = bt[BT_FACE_NORMAL + 1], nz = bt[BT_FACE_NORMAL + 2];
|
|
638
|
+
const best_overlap = bt[BT_FACE_OVERLAP];
|
|
639
|
+
|
|
380
640
|
// The contact normal `n` points triangle → box. The box's outward
|
|
381
641
|
// face normal at the reference face points box → triangle = -n.
|
|
382
642
|
const face_out_nx = -nx;
|
|
@@ -441,17 +701,16 @@ function emit_box_face_manifold(
|
|
|
441
701
|
// along the WINNING SAT axis no contact can be deeper than the SAT
|
|
442
702
|
// overlap itself, so candidates past that cap are rejected, and a
|
|
443
703
|
// near-parallel plane (or an emptied candidate set) falls back to the
|
|
444
|
-
// deepest
|
|
445
|
-
//
|
|
704
|
+
// deepest point of the triangle over the face - a SAT-proven overlap
|
|
705
|
+
// must never be dropped.
|
|
446
706
|
const depth_cap = best_overlap * 1.0001 + 1e-9;
|
|
447
707
|
const denom = face_out_nx * tnx + face_out_ny * tny + face_out_nz * tnz;
|
|
448
708
|
if (Math.abs(denom) < PARALLEL_COS_EPS) {
|
|
449
|
-
return
|
|
709
|
+
return emit_box_face_deepest_point(out,
|
|
450
710
|
ref_face_ox, ref_face_oy, ref_face_oz,
|
|
451
711
|
face_out_nx, face_out_ny, face_out_nz,
|
|
452
712
|
ux, uy, uz, vx, vy, vz, half_u, half_v,
|
|
453
|
-
ax, ay, az, bx, by, bz, cx, cy, cz
|
|
454
|
-
best_overlap);
|
|
713
|
+
ax, ay, az, bx, by, bz, cx, cy, cz);
|
|
455
714
|
}
|
|
456
715
|
const clipped_uv = tri_uv_in;
|
|
457
716
|
|
|
@@ -468,7 +727,7 @@ function emit_box_face_manifold(
|
|
|
468
727
|
const world_tri_y = xpy + face_out_ny * t;
|
|
469
728
|
const world_tri_z = xpz + face_out_nz * t;
|
|
470
729
|
const depth = -t;
|
|
471
|
-
if (depth
|
|
730
|
+
if (depth < -ON_PLANE_EPS || depth > depth_cap) continue;
|
|
472
731
|
|
|
473
732
|
const off = cand_count * 7;
|
|
474
733
|
candidates[off] = world_tri_x;
|
|
@@ -478,17 +737,16 @@ function emit_box_face_manifold(
|
|
|
478
737
|
candidates[off + 3] = xpx;
|
|
479
738
|
candidates[off + 4] = xpy;
|
|
480
739
|
candidates[off + 5] = xpz;
|
|
481
|
-
candidates[off + 6] = depth;
|
|
740
|
+
candidates[off + 6] = depth > 0 ? depth : 0;
|
|
482
741
|
cand_count++;
|
|
483
742
|
}
|
|
484
743
|
|
|
485
744
|
if (cand_count === 0) {
|
|
486
|
-
return
|
|
745
|
+
return emit_box_face_deepest_point(out,
|
|
487
746
|
ref_face_ox, ref_face_oy, ref_face_oz,
|
|
488
747
|
face_out_nx, face_out_ny, face_out_nz,
|
|
489
748
|
ux, uy, uz, vx, vy, vz, half_u, half_v,
|
|
490
|
-
ax, ay, az, bx, by, bz, cx, cy, cz
|
|
491
|
-
best_overlap);
|
|
749
|
+
ax, ay, az, bx, by, bz, cx, cy, cz);
|
|
492
750
|
}
|
|
493
751
|
const kept = reduce_contacts(cand_count);
|
|
494
752
|
out[3] = kept;
|
|
@@ -507,41 +765,72 @@ function emit_box_face_manifold(
|
|
|
507
765
|
}
|
|
508
766
|
|
|
509
767
|
/**
|
|
510
|
-
* Box-face fallback for configurations the plane recovery cannot serve (the
|
|
511
|
-
*
|
|
512
|
-
*
|
|
513
|
-
*
|
|
514
|
-
* the
|
|
768
|
+
* Box-face fallback for configurations the plane recovery cannot serve (the triangle plane near-parallel
|
|
769
|
+
* to the projection direction, or every clipped candidate rejected): one contact, at the deepest point
|
|
770
|
+
* of the triangle over the reference face — the triangle clipped to the face's rectangle as the caller
|
|
771
|
+
* clipped it, each point carrying its depth past the face — and the point of the face under it. The
|
|
772
|
+
* depth is that point's, at least 0: the SAT has found the two overlapping, so some point of the
|
|
773
|
+
* triangle over the face lies on the box's side of it.
|
|
774
|
+
*
|
|
775
|
+
* The deepest vertex of the whole triangle can lie anywhere past the rectangle: on a floor triangle
|
|
776
|
+
* metres long, metres from the box. Clamped into the rectangle, the box's witness then sat that far
|
|
777
|
+
* from the triangle's, which the manifold took for one contact.
|
|
778
|
+
*
|
|
779
|
+
* Only after the caller's clip of the same triangle to the same rectangle kept a point: the clip here
|
|
780
|
+
* computes u and v as that one does, so it keeps one too.
|
|
515
781
|
*/
|
|
516
|
-
function
|
|
782
|
+
function emit_box_face_deepest_point(
|
|
517
783
|
out,
|
|
518
784
|
ref_face_ox, ref_face_oy, ref_face_oz,
|
|
519
785
|
face_out_nx, face_out_ny, face_out_nz,
|
|
520
786
|
ux, uy, uz, vx, vy, vz, half_u, half_v,
|
|
521
|
-
ax, ay, az, bx, by, bz, cx, cy, cz
|
|
522
|
-
best_overlap
|
|
787
|
+
ax, ay, az, bx, by, bz, cx, cy, cz
|
|
523
788
|
) {
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
const
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
789
|
+
// each corner over the face, (u, v), and its depth past it, w = (face origin - corner) · face_out
|
|
790
|
+
const da_x = ax - ref_face_ox, da_y = ay - ref_face_oy, da_z = az - ref_face_oz;
|
|
791
|
+
const db_x = bx - ref_face_ox, db_y = by - ref_face_oy, db_z = bz - ref_face_oz;
|
|
792
|
+
const dc_x = cx - ref_face_ox, dc_y = cy - ref_face_oy, dc_z = cz - ref_face_oz;
|
|
793
|
+
tri_uvw_in[0] = da_x * ux + da_y * uy + da_z * uz;
|
|
794
|
+
tri_uvw_in[1] = da_x * vx + da_y * vy + da_z * vz;
|
|
795
|
+
tri_uvw_in[2] = -(da_x * face_out_nx + da_y * face_out_ny + da_z * face_out_nz);
|
|
796
|
+
tri_uvw_in[3] = db_x * ux + db_y * uy + db_z * uz;
|
|
797
|
+
tri_uvw_in[4] = db_x * vx + db_y * vy + db_z * vz;
|
|
798
|
+
tri_uvw_in[5] = -(db_x * face_out_nx + db_y * face_out_ny + db_z * face_out_nz);
|
|
799
|
+
tri_uvw_in[6] = dc_x * ux + dc_y * uy + dc_z * uz;
|
|
800
|
+
tri_uvw_in[7] = dc_x * vx + dc_y * vy + dc_z * vz;
|
|
801
|
+
tri_uvw_in[8] = -(dc_x * face_out_nx + dc_y * face_out_ny + dc_z * face_out_nz);
|
|
802
|
+
|
|
803
|
+
let n = 3;
|
|
804
|
+
n = clip_uvw_axis_halfplane(tri_uvw_in, n, tri_uvw_out, 0, half_u, true);
|
|
805
|
+
n = clip_uvw_axis_halfplane(tri_uvw_out, n, tri_uvw_in, 0, -half_u, false);
|
|
806
|
+
n = clip_uvw_axis_halfplane(tri_uvw_in, n, tri_uvw_out, 1, half_v, true);
|
|
807
|
+
n = clip_uvw_axis_halfplane(tri_uvw_out, n, tri_uvw_in, 1, -half_v, false);
|
|
808
|
+
|
|
809
|
+
let deepest = 0;
|
|
810
|
+
|
|
811
|
+
for (let i = 1; i < n; i++) {
|
|
812
|
+
if (tri_uvw_in[i * 3 + 2] > tri_uvw_in[deepest * 3 + 2]) {
|
|
813
|
+
deepest = i;
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
const u = tri_uvw_in[deepest * 3];
|
|
818
|
+
const v = tri_uvw_in[deepest * 3 + 1];
|
|
819
|
+
const w = tri_uvw_in[deepest * 3 + 2];
|
|
820
|
+
|
|
821
|
+
// the face's point, and the triangle's: w past it, along the face's outward normal
|
|
822
|
+
const fx = ref_face_ox + u * ux + v * vx;
|
|
823
|
+
const fy = ref_face_oy + u * uy + v * vy;
|
|
824
|
+
const fz = ref_face_oz + u * uz + v * vz;
|
|
536
825
|
|
|
537
826
|
out[3] = 1;
|
|
538
|
-
out[4] =
|
|
539
|
-
out[5] =
|
|
540
|
-
out[6] =
|
|
541
|
-
out[7] =
|
|
542
|
-
out[8] =
|
|
543
|
-
out[9] =
|
|
544
|
-
out[10] =
|
|
827
|
+
out[4] = fx - face_out_nx * w;
|
|
828
|
+
out[5] = fy - face_out_ny * w;
|
|
829
|
+
out[6] = fz - face_out_nz * w;
|
|
830
|
+
out[7] = fx;
|
|
831
|
+
out[8] = fy;
|
|
832
|
+
out[9] = fz;
|
|
833
|
+
out[10] = w > 0 ? w : 0;
|
|
545
834
|
return true;
|
|
546
835
|
}
|
|
547
836
|
|
|
@@ -549,15 +838,19 @@ function emit_box_face_deepest_vertex(
|
|
|
549
838
|
* Triangle-face SAT winner: reference = triangle, incident = the box face
|
|
550
839
|
* most antiparallel to the contact normal. Clip the box face quad against
|
|
551
840
|
* the triangle's 3 edges, then recover world contacts on the box face plane.
|
|
841
|
+
*
|
|
842
|
+
* Box, triangle, triangle normal, and the face's normal and overlap are the staged ones (`bt`).
|
|
552
843
|
*/
|
|
553
|
-
function emit_triangle_face_manifold(
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
ax, ay
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
844
|
+
function emit_triangle_face_manifold(out, axes) {
|
|
845
|
+
const bcx = bt[BT_BOX_CENTRE], bcy = bt[BT_BOX_CENTRE + 1], bcz = bt[BT_BOX_CENTRE + 2];
|
|
846
|
+
const bhx = bt[BT_BOX_HALF], bhy = bt[BT_BOX_HALF + 1], bhz = bt[BT_BOX_HALF + 2];
|
|
847
|
+
const ax = bt[BT_TRI_A], ay = bt[BT_TRI_A + 1], az = bt[BT_TRI_A + 2];
|
|
848
|
+
const bx = bt[BT_TRI_B], by = bt[BT_TRI_B + 1], bz = bt[BT_TRI_B + 2];
|
|
849
|
+
const cx = bt[BT_TRI_C], cy = bt[BT_TRI_C + 1], cz = bt[BT_TRI_C + 2];
|
|
850
|
+
const tnx = bt[BT_TRI_NORMAL], tny = bt[BT_TRI_NORMAL + 1], tnz = bt[BT_TRI_NORMAL + 2];
|
|
851
|
+
const nx = bt[BT_FACE_NORMAL], ny = bt[BT_FACE_NORMAL + 1], nz = bt[BT_FACE_NORMAL + 2];
|
|
852
|
+
const best_overlap = bt[BT_FACE_OVERLAP];
|
|
853
|
+
|
|
561
854
|
// Reference = triangle. Its outward face normal points from the triangle
|
|
562
855
|
// surface toward the box — i.e. the contact normal `n` (triangle → box),
|
|
563
856
|
// which the SAT already sign-canonicalised. The incident box face is then
|
|
@@ -725,7 +1018,7 @@ function emit_triangle_face_manifold(
|
|
|
725
1018
|
// Depth: how far the box face has penetrated past the triangle
|
|
726
1019
|
// plane, measured along ref_out. depth = -t.
|
|
727
1020
|
const depth = -t;
|
|
728
|
-
if (depth
|
|
1021
|
+
if (depth < -ON_PLANE_EPS || depth > depth_cap) continue;
|
|
729
1022
|
|
|
730
1023
|
const off = cand_count * 7;
|
|
731
1024
|
// Triangle-side contact: the clipped (u, v) point on the
|
|
@@ -736,7 +1029,7 @@ function emit_triangle_face_manifold(
|
|
|
736
1029
|
candidates[off + 3] = world_box_x;
|
|
737
1030
|
candidates[off + 4] = world_box_y;
|
|
738
1031
|
candidates[off + 5] = world_box_z;
|
|
739
|
-
candidates[off + 6] = depth;
|
|
1032
|
+
candidates[off + 6] = depth > 0 ? depth : 0;
|
|
740
1033
|
cand_count++;
|
|
741
1034
|
}
|
|
742
1035
|
|
|
@@ -824,14 +1117,16 @@ function emit_triangle_face_deepest_corner(
|
|
|
824
1117
|
return true;
|
|
825
1118
|
}
|
|
826
1119
|
|
|
827
|
-
function emit_edge_cross_contact(
|
|
828
|
-
|
|
829
|
-
bcx, bcy, bcz
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
1120
|
+
function emit_edge_cross_contact(out, axes, box_edge_idx, tri_edge_idx) {
|
|
1121
|
+
// box, triangle, and the winning normal and overlap: the staged ones
|
|
1122
|
+
const bcx = bt[BT_BOX_CENTRE], bcy = bt[BT_BOX_CENTRE + 1], bcz = bt[BT_BOX_CENTRE + 2];
|
|
1123
|
+
const bhx = bt[BT_BOX_HALF], bhy = bt[BT_BOX_HALF + 1], bhz = bt[BT_BOX_HALF + 2];
|
|
1124
|
+
const ax = bt[BT_TRI_A], ay = bt[BT_TRI_A + 1], az = bt[BT_TRI_A + 2];
|
|
1125
|
+
const bx = bt[BT_TRI_B], by = bt[BT_TRI_B + 1], bz = bt[BT_TRI_B + 2];
|
|
1126
|
+
const cx = bt[BT_TRI_C], cy = bt[BT_TRI_C + 1], cz = bt[BT_TRI_C + 2];
|
|
1127
|
+
const nx = bt[BT_BEST_NORMAL], ny = bt[BT_BEST_NORMAL + 1], nz = bt[BT_BEST_NORMAL + 2];
|
|
1128
|
+
const overlap = bt[BT_BEST_OVERLAP];
|
|
1129
|
+
|
|
835
1130
|
// Box edge direction: axis index `box_edge_idx`.
|
|
836
1131
|
const edx = axes[box_edge_idx * 3];
|
|
837
1132
|
const edy = axes[box_edge_idx * 3 + 1];
|