@woosh/meep-engine 3.37.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 +6 -0
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.d.ts +11 -0
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.d.ts.map +1 -0
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.js +10 -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/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +16 -0
- package/src/engine/graphics/ecs/water/Water.d.ts +26 -34
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +42 -36
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +38 -62
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts +6 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.js +27 -0
- 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 +58 -6
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +423 -293
- 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 +26 -14
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/ClothColliderIndex.js +221 -52
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts +30 -0
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +117 -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/ClothColliderFlags.js +2 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +10 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +36 -14
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +15 -2
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +17 -2
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +78 -53
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts +18 -20
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +185 -128
- 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 +810 -96
- 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 +158 -0
- package/src/shade/playground/water_refraction/index.html +40 -0
- package/src/shade/playground/water_refraction/main.d.ts +2 -0
- package/src/shade/playground/water_refraction/main.d.ts.map +1 -0
- package/src/shade/playground/water_refraction/main.js +202 -0
- package/src/shade/playground/water_refraction/world.d.ts +39 -0
- package/src/shade/playground/water_refraction/world.d.ts.map +1 -0
- package/src/shade/playground/water_refraction/world.js +141 -0
- 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 +27 -0
- package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts +2 -3
- package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
- 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/chunk_roughness_to_mip_ratio.d.ts +8 -0
- package/src/shade/renderer/light/environment/chunk_roughness_to_mip_ratio.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/chunk_sphere_probe_roughness_to_lod.d.ts +0 -6
- package/src/shade/renderer/light/environment/chunk_sphere_probe_roughness_to_lod.d.ts.map +1 -1
- 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/bounds/chunk_particle_bounds.d.ts +1 -1
- package/src/shade/renderer/particles/bounds/chunk_particle_bounds.d.ts.map +1 -1
- 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 +28 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +17 -1
- 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_renormalization.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_renormalization.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_renormalization.js +11 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.js +19 -0
- 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_splat_slice.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.js +5 -3
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.js +8 -0
- 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 +1 -1
- 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 +23 -2
- 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/rasterize/native/avboit/shader_avboit_resolve.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.js +4 -8
- 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/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
- 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/atomic/chunk_atomic_add_f32_storage.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_add_f32_storage.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_max_f32_storage.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_max_f32_storage.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_min_f32_storage.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_min_f32_storage.d.ts.map +1 -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/plane/{plane_ray_raycast.d.ts → chunk_plane_ray_raycast.d.ts} +2 -2
- package/src/shade/renderer/shader/chunk/geometry/plane/chunk_plane_ray_raycast.d.ts.map +1 -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 +4 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.js +135 -0
- 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 +72 -27
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +275 -138
- 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 +7 -0
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -0
- package/src/shade/renderer/water/chunk_water_transport.js +105 -0
- 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 +15 -26
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +373 -213
- package/src/shade/renderer/water/shader_water_avboit.d.ts +12 -0
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -0
- package/src/shade/renderer/water/shader_water_avboit.js +268 -0
- 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 +61 -6
- package/src/shade/renderer/animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.d.ts +0 -29
- package/src/shade/renderer/animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/geometry/plane/plane_ray_raycast.d.ts.map +0 -1
- 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
|
@@ -0,0 +1,949 @@
|
|
|
1
|
+
import { line3_compute_segment_segment_closest_points } from "../../../core/geom/3d/line/line3_compute_segment_segment_closest_points.js";
|
|
2
|
+
import { v3_quaternion_apply } from "../../../core/geom/vec3/v3_quaternion_apply.js";
|
|
3
|
+
import { v3_quaternion_apply_inverse } from "../../../core/geom/vec3/v3_quaternion_apply_inverse.js";
|
|
4
|
+
import { clip_poly } from "./convex_convex_manifold.js";
|
|
5
|
+
import { reduce_manifold_contacts } from "./reduce_manifold_contacts.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Contact points for a convex pair the narrowphase has an axis and a depth for (GJK + EPA) but no
|
|
9
|
+
* dedicated routine: a cylinder against anything, a capsule against a hull, a hull or a cylinder
|
|
10
|
+
* against a mesh triangle, a scaled TransformedShape3D.
|
|
11
|
+
*
|
|
12
|
+
* Each side contributes its SUPPORTING FEATURE along the axis — the face, edge or point of it that
|
|
13
|
+
* faces the other body — and the two are clipped against each other, as Jolt's
|
|
14
|
+
* `ManifoldBetweenTwoFaces` and Box3D's capsule/hull face contact do: a cylinder standing on its cap
|
|
15
|
+
* gets the cap's rim, clipped to the floor face, and stands; a capsule lying on a hull face gets
|
|
16
|
+
* both ends of its segment. Where the features do not face each other squarely there is one contact,
|
|
17
|
+
* on the smaller feature, projected along the axis onto the other body — never at a body's origin,
|
|
18
|
+
* which is what this path used to report, putting the push metres from where the bodies touch.
|
|
19
|
+
*
|
|
20
|
+
* Features:
|
|
21
|
+
* - box, convex hull (any `{vertices, face_offsets, face_loops}` polytope), triangle: the face whose
|
|
22
|
+
* outward normal is within {@link FACE_ALIGNMENT} of the direction; otherwise the vertices tied
|
|
23
|
+
* at the extreme (an edge, or a vertex);
|
|
24
|
+
* - cylinder: the cap, as {@link CYLINDER_CAP_POINTS} rim points, within FACE_ALIGNMENT of its
|
|
25
|
+
* axis; the side line, within the same angle of perpendicular; otherwise the support point;
|
|
26
|
+
* - capsule: its segment's two hemisphere support points, within that angle of perpendicular;
|
|
27
|
+
* otherwise the support point;
|
|
28
|
+
* - TransformedShape3D (one that scales; rigid ones are collided as their subject): the subject's
|
|
29
|
+
* feature along the direction mapped into it, carried through the matrix;
|
|
30
|
+
* - anything else: the support point.
|
|
31
|
+
*
|
|
32
|
+
* @author Alex Goldring
|
|
33
|
+
* @copyright Company Named Limited (c) 2026
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
/** @type {number} */
|
|
37
|
+
export const FEATURE_POINT = 1;
|
|
38
|
+
/** @type {number} */
|
|
39
|
+
export const FEATURE_SEGMENT = 2;
|
|
40
|
+
/** @type {number} */
|
|
41
|
+
export const FEATURE_POLYGON = 3;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* A face is the supporting feature when its outward normal is within this cosine of the direction —
|
|
45
|
+
* Box3D's `kTolerance` for clipping a capsule against a hull face (about 3.6°).
|
|
46
|
+
* @type {number}
|
|
47
|
+
*/
|
|
48
|
+
const FACE_ALIGNMENT = 0.998;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* A segment (a capsule's, or a cylinder's side line) is the supporting feature when the direction is
|
|
52
|
+
* within the same angle of perpendicular to it.
|
|
53
|
+
* @type {number}
|
|
54
|
+
*/
|
|
55
|
+
const SEGMENT_ALIGNMENT = Math.sqrt(1 - FACE_ALIGNMENT * FACE_ALIGNMENT);
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Points on the rim standing in for a cylinder's circular cap. They lie ON the rim, so a clipped
|
|
59
|
+
* point's depth is exact; of eight, the manifold's reduction to four keeps a square inscribed in the
|
|
60
|
+
* cap for a cylinder standing square on a face, and the deepest of them when it leans.
|
|
61
|
+
* @type {number}
|
|
62
|
+
*/
|
|
63
|
+
const CYLINDER_CAP_POINTS = 8;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Vertices within this fraction of a polytope's extent along the direction of the extreme one tie as
|
|
67
|
+
* one feature (an edge lying across the direction is two vertices, not one).
|
|
68
|
+
* @type {number}
|
|
69
|
+
*/
|
|
70
|
+
const SUPPORT_TIE_REL = 1e-3;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* The part of a convex shape that faces a direction, in world space.
|
|
74
|
+
*/
|
|
75
|
+
export class SupportFeature {
|
|
76
|
+
/**
|
|
77
|
+
* World points, flat `(x, y, z)`. A POLYGON's are in loop order.
|
|
78
|
+
* @type {Float64Array}
|
|
79
|
+
*/
|
|
80
|
+
points = new Float64Array(16 * 3);
|
|
81
|
+
|
|
82
|
+
/** @type {number} */
|
|
83
|
+
count = 0;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* {@link FEATURE_POINT}, {@link FEATURE_SEGMENT} or {@link FEATURE_POLYGON}.
|
|
87
|
+
* @type {number}
|
|
88
|
+
*/
|
|
89
|
+
kind = FEATURE_POINT;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Unit outward normal of a POLYGON feature, world.
|
|
93
|
+
*/
|
|
94
|
+
nx = 0;
|
|
95
|
+
ny = 0;
|
|
96
|
+
nz = 0;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* The shape's furthest projection on the direction, `max(p · d)`: its support plane along it.
|
|
100
|
+
* @type {number}
|
|
101
|
+
*/
|
|
102
|
+
extreme = 0;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @param {number} n points about to be written
|
|
106
|
+
*/
|
|
107
|
+
reserve(n) {
|
|
108
|
+
if (this.points.length < n * 3) {
|
|
109
|
+
this.points = new Float64Array(n * 3 * 2);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const scratch_local = new Float64Array(3);
|
|
115
|
+
const scratch_world = new Float64Array(3);
|
|
116
|
+
const scratch_st = new Float64Array(2);
|
|
117
|
+
|
|
118
|
+
/** The local direction a shape's generic support is asked along. */
|
|
119
|
+
const scratch_direction = new Float64Array(3);
|
|
120
|
+
|
|
121
|
+
/*
|
|
122
|
+
The feature builders below all work in the shape's own frame and write local points;
|
|
123
|
+
support_feature carries the finished feature into the world in one pass. (They used to carry each
|
|
124
|
+
point as they wrote it, through a helper taking the pose's seven numbers: when V8 declined to inline
|
|
125
|
+
it, every one of those numbers was boxed on the heap, per point.)
|
|
126
|
+
*/
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Append one point to a feature.
|
|
130
|
+
*/
|
|
131
|
+
function put(f, x, y, z) {
|
|
132
|
+
const o = f.count * 3;
|
|
133
|
+
f.points[o] = x;
|
|
134
|
+
f.points[o + 1] = y;
|
|
135
|
+
f.points[o + 2] = z;
|
|
136
|
+
f.count++;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Make a feature a POLYGON with this outward normal.
|
|
141
|
+
*/
|
|
142
|
+
function set_polygon(f, nx, ny, nz) {
|
|
143
|
+
f.kind = FEATURE_POLYGON;
|
|
144
|
+
f.nx = nx;
|
|
145
|
+
f.ny = ny;
|
|
146
|
+
f.nz = nz;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* The vertices tied at the extreme of a point set along `(dx, dy, dz)`: a POINT, or a SEGMENT for two.
|
|
151
|
+
* More than two tie only for a face lying across the direction, which the callers have already taken
|
|
152
|
+
* as a POLYGON when it is within FACE_ALIGNMENT; past that, their centroid is a POINT.
|
|
153
|
+
*/
|
|
154
|
+
function tied_vertices(f, v, n, dx, dy, dz) {
|
|
155
|
+
let hi = -Infinity, lo = Infinity;
|
|
156
|
+
|
|
157
|
+
for (let i = 0; i < n; i++) {
|
|
158
|
+
const d = v[i * 3] * dx + v[i * 3 + 1] * dy + v[i * 3 + 2] * dz;
|
|
159
|
+
if (d > hi) hi = d;
|
|
160
|
+
if (d < lo) lo = d;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const floor = hi - (hi - lo) * SUPPORT_TIE_REL;
|
|
164
|
+
|
|
165
|
+
let tied = 0, cx = 0, cy = 0, cz = 0;
|
|
166
|
+
f.count = 0;
|
|
167
|
+
f.kind = FEATURE_POINT;
|
|
168
|
+
|
|
169
|
+
for (let i = 0; i < n; i++) {
|
|
170
|
+
const x = v[i * 3], y = v[i * 3 + 1], z = v[i * 3 + 2];
|
|
171
|
+
if (x * dx + y * dy + z * dz < floor) continue;
|
|
172
|
+
|
|
173
|
+
if (tied < 2) {
|
|
174
|
+
put(f, x, y, z);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
cx += x; cy += y; cz += z;
|
|
178
|
+
tied++;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (tied === 2) {
|
|
182
|
+
f.kind = FEATURE_SEGMENT;
|
|
183
|
+
} else if (tied > 2) {
|
|
184
|
+
f.count = 0;
|
|
185
|
+
put(f, cx / tied, cy / tied, cz / tied);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return hi;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/** The eight corners of a box, local, for the tied-vertex search. */
|
|
192
|
+
const box_corners = new Float64Array(24);
|
|
193
|
+
|
|
194
|
+
/** Half-extents, a face corner, and a face normal of a box by axis index. */
|
|
195
|
+
const box_half = new Float64Array(3);
|
|
196
|
+
const box_local = new Float64Array(3);
|
|
197
|
+
const box_normal = new Float64Array(3);
|
|
198
|
+
|
|
199
|
+
function box_feature(f, h, dx, dy, dz) {
|
|
200
|
+
const hx = h.x, hy = h.y, hz = h.z;
|
|
201
|
+
const ax = Math.abs(dx), ay = Math.abs(dy), az = Math.abs(dz);
|
|
202
|
+
|
|
203
|
+
// the face axis k most aligned with d, and the other two (u, w) cyclically after it
|
|
204
|
+
let k = 0;
|
|
205
|
+
if (ay > ax && ay >= az) k = 1;
|
|
206
|
+
else if (az > ax && az > ay) k = 2;
|
|
207
|
+
|
|
208
|
+
const dk = k === 0 ? dx : (k === 1 ? dy : dz);
|
|
209
|
+
|
|
210
|
+
if (Math.abs(dk) >= FACE_ALIGNMENT) {
|
|
211
|
+
const s = dk >= 0 ? 1 : -1;
|
|
212
|
+
const u = (k + 1) % 3, w = (k + 2) % 3;
|
|
213
|
+
|
|
214
|
+
box_half[0] = hx; box_half[1] = hy; box_half[2] = hz;
|
|
215
|
+
|
|
216
|
+
f.count = 0;
|
|
217
|
+
f.reserve(4);
|
|
218
|
+
|
|
219
|
+
for (let i = 0; i < 4; i++) {
|
|
220
|
+
box_local[k] = s * box_half[k];
|
|
221
|
+
box_local[u] = (i === 1 || i === 2 ? 1 : -1) * box_half[u];
|
|
222
|
+
box_local[w] = (i >= 2 ? 1 : -1) * box_half[w];
|
|
223
|
+
put(f, box_local[0], box_local[1], box_local[2]);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
box_normal[0] = 0; box_normal[1] = 0; box_normal[2] = 0;
|
|
227
|
+
box_normal[k] = s;
|
|
228
|
+
set_polygon(f, box_normal[0], box_normal[1], box_normal[2]);
|
|
229
|
+
|
|
230
|
+
return hx * ax + hy * ay + hz * az;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
for (let i = 0; i < 8; i++) {
|
|
234
|
+
box_corners[i * 3] = (i & 1) ? hx : -hx;
|
|
235
|
+
box_corners[i * 3 + 1] = (i & 2) ? hy : -hy;
|
|
236
|
+
box_corners[i * 3 + 2] = (i & 4) ? hz : -hz;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
f.reserve(2);
|
|
240
|
+
return tied_vertices(f, box_corners, 8, dx, dy, dz);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
function polytope_feature(f, shape, dx, dy, dz) {
|
|
244
|
+
const v = shape.vertices;
|
|
245
|
+
const fo = shape.face_offsets;
|
|
246
|
+
const fl = shape.face_loops;
|
|
247
|
+
const face_count = fo.length - 1;
|
|
248
|
+
|
|
249
|
+
// the face most aligned with d
|
|
250
|
+
let best = -Infinity, best_face = -1, bnx = 0, bny = 0, bnz = 0;
|
|
251
|
+
|
|
252
|
+
const planes = shape.face_loop_planes;
|
|
253
|
+
|
|
254
|
+
if (planes !== undefined) {
|
|
255
|
+
// stored, one per side (ConvexHullShape3D); a face with no area has a zero plane
|
|
256
|
+
for (let face = 0; face < face_count; face++) {
|
|
257
|
+
const o = face * 4;
|
|
258
|
+
const nx = planes[o], ny = planes[o + 1], nz = planes[o + 2];
|
|
259
|
+
|
|
260
|
+
if (nx * nx + ny * ny + nz * nz < 0.5) continue;
|
|
261
|
+
|
|
262
|
+
const align = nx * dx + ny * dy + nz * dz;
|
|
263
|
+
|
|
264
|
+
if (align > best) {
|
|
265
|
+
best = align;
|
|
266
|
+
best_face = face;
|
|
267
|
+
bnx = nx; bny = ny; bnz = nz;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
} else {
|
|
271
|
+
// any other face-loop polytope: the Newell normal of each loop
|
|
272
|
+
for (let face = 0; face < face_count; face++) {
|
|
273
|
+
const s = fo[face], e = fo[face + 1];
|
|
274
|
+
let nx = 0, ny = 0, nz = 0;
|
|
275
|
+
|
|
276
|
+
for (let i = s; i < e; i++) {
|
|
277
|
+
const a = fl[i] * 3, b = fl[i + 1 < e ? i + 1 : s] * 3;
|
|
278
|
+
nx += (v[a + 1] - v[b + 1]) * (v[a + 2] + v[b + 2]);
|
|
279
|
+
ny += (v[a + 2] - v[b + 2]) * (v[a] + v[b]);
|
|
280
|
+
nz += (v[a] - v[b]) * (v[a + 1] + v[b + 1]);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
const l = Math.sqrt(nx * nx + ny * ny + nz * nz);
|
|
284
|
+
if (l === 0) continue;
|
|
285
|
+
|
|
286
|
+
const align = (nx * dx + ny * dy + nz * dz) / l;
|
|
287
|
+
|
|
288
|
+
if (align > best) {
|
|
289
|
+
best = align;
|
|
290
|
+
best_face = face;
|
|
291
|
+
bnx = nx / l; bny = ny / l; bnz = nz / l;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
const n = v.length / 3;
|
|
297
|
+
|
|
298
|
+
if (best >= FACE_ALIGNMENT) {
|
|
299
|
+
const s = fo[best_face], e = fo[best_face + 1];
|
|
300
|
+
|
|
301
|
+
f.count = 0;
|
|
302
|
+
f.reserve(e - s);
|
|
303
|
+
|
|
304
|
+
for (let i = s; i < e; i++) {
|
|
305
|
+
const a = fl[i] * 3;
|
|
306
|
+
put(f, v[a], v[a + 1], v[a + 2]);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
set_polygon(f, bnx, bny, bnz);
|
|
310
|
+
|
|
311
|
+
let hi = -Infinity;
|
|
312
|
+
for (let i = 0; i < n; i++) {
|
|
313
|
+
const d = v[i * 3] * dx + v[i * 3 + 1] * dy + v[i * 3 + 2] * dz;
|
|
314
|
+
if (d > hi) hi = d;
|
|
315
|
+
}
|
|
316
|
+
return hi;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
f.reserve(2);
|
|
320
|
+
return tied_vertices(f, v, n, dx, dy, dz);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/** The cap's rim points, as angles round the axis. */
|
|
324
|
+
const cap_cos = new Float64Array(CYLINDER_CAP_POINTS);
|
|
325
|
+
const cap_sin = new Float64Array(CYLINDER_CAP_POINTS);
|
|
326
|
+
|
|
327
|
+
for (let i = 0; i < CYLINDER_CAP_POINTS; i++) {
|
|
328
|
+
const a = (i / CYLINDER_CAP_POINTS) * Math.PI * 2;
|
|
329
|
+
cap_cos[i] = Math.cos(a);
|
|
330
|
+
cap_sin[i] = Math.sin(a);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
function cylinder_feature(f, r, h, dx, dy, dz) {
|
|
334
|
+
const rl = Math.sqrt(dx * dx + dz * dz);
|
|
335
|
+
const ay = Math.abs(dy);
|
|
336
|
+
|
|
337
|
+
f.count = 0;
|
|
338
|
+
|
|
339
|
+
if (ay >= FACE_ALIGNMENT) {
|
|
340
|
+
const cap = dy >= 0 ? h : -h;
|
|
341
|
+
|
|
342
|
+
f.reserve(CYLINDER_CAP_POINTS);
|
|
343
|
+
|
|
344
|
+
for (let i = 0; i < CYLINDER_CAP_POINTS; i++) {
|
|
345
|
+
put(f, cap_cos[i] * r, cap, cap_sin[i] * r);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
set_polygon(f, 0, dy >= 0 ? 1 : -1, 0);
|
|
349
|
+
} else {
|
|
350
|
+
const ux = dx / rl, uz = dz / rl;
|
|
351
|
+
|
|
352
|
+
f.reserve(2);
|
|
353
|
+
|
|
354
|
+
if (ay <= SEGMENT_ALIGNMENT) {
|
|
355
|
+
put(f, ux * r, -h, uz * r);
|
|
356
|
+
put(f, ux * r, h, uz * r);
|
|
357
|
+
f.kind = FEATURE_SEGMENT;
|
|
358
|
+
} else {
|
|
359
|
+
put(f, ux * r, dy >= 0 ? h : -h, uz * r);
|
|
360
|
+
f.kind = FEATURE_POINT;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
return ay * h + rl * r;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
function capsule_feature(f, r, h, dx, dy, dz) {
|
|
368
|
+
f.count = 0;
|
|
369
|
+
f.reserve(2);
|
|
370
|
+
|
|
371
|
+
if (Math.abs(dy) <= SEGMENT_ALIGNMENT) {
|
|
372
|
+
put(f, dx * r, -h + dy * r, dz * r);
|
|
373
|
+
put(f, dx * r, h + dy * r, dz * r);
|
|
374
|
+
f.kind = FEATURE_SEGMENT;
|
|
375
|
+
} else {
|
|
376
|
+
put(f, dx * r, (dy >= 0 ? h : -h) + dy * r, dz * r);
|
|
377
|
+
f.kind = FEATURE_POINT;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
return Math.abs(dy) * h + r;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* The feature of a {@link TransformedShape3D} — a subject under an affine matrix `M = [L | t]`, which
|
|
385
|
+
* may scale it: the subject's own feature along `normalise(Lᵀ·d)`, its points carried by `M`. That is
|
|
386
|
+
* the support mapping of an affine image — the support of `M(S)` along `d` is `M` applied to the
|
|
387
|
+
* support of `S` along `Lᵀ·d` — so a stretched box's long face is still a face, and its feature still
|
|
388
|
+
* four corners; a polygon's normal maps by `(L⁻¹)ᵀ`, which keeps it perpendicular to the face.
|
|
389
|
+
*
|
|
390
|
+
* Rigid wrappers never get here (the narrowphase collides them as their subject); one that scales
|
|
391
|
+
* used to be a single support point, and a stretched box rocked on it and never slept.
|
|
392
|
+
*
|
|
393
|
+
* @returns {number} the wrapper-local extreme along `(dx, dy, dz)`
|
|
394
|
+
*/
|
|
395
|
+
function transformed_feature(f, shape, dx, dy, dz) {
|
|
396
|
+
const m = shape.transform;
|
|
397
|
+
|
|
398
|
+
// the subject's direction, Lᵀ·d
|
|
399
|
+
let sx = m[0] * dx + m[1] * dy + m[2] * dz;
|
|
400
|
+
let sy = m[4] * dx + m[5] * dy + m[6] * dz;
|
|
401
|
+
let sz = m[8] * dx + m[9] * dy + m[10] * dz;
|
|
402
|
+
|
|
403
|
+
const sl = Math.sqrt(sx * sx + sy * sy + sz * sz);
|
|
404
|
+
if (sl > 0) {
|
|
405
|
+
sx /= sl; sy /= sl; sz /= sl;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
// the subject's feature, in its own frame
|
|
409
|
+
local_feature(f, shape.subject, sx, sy, sz);
|
|
410
|
+
|
|
411
|
+
// carried through M, into the wrapper's frame
|
|
412
|
+
const p = f.points;
|
|
413
|
+
let extreme = -Infinity;
|
|
414
|
+
|
|
415
|
+
for (let i = 0; i < f.count; i++) {
|
|
416
|
+
const o = i * 3;
|
|
417
|
+
const x = p[o], y = p[o + 1], z = p[o + 2];
|
|
418
|
+
|
|
419
|
+
const wx = m[0] * x + m[4] * y + m[8] * z + m[12];
|
|
420
|
+
const wy = m[1] * x + m[5] * y + m[9] * z + m[13];
|
|
421
|
+
const wz = m[2] * x + m[6] * y + m[10] * z + m[14];
|
|
422
|
+
|
|
423
|
+
const e = wx * dx + wy * dy + wz * dz;
|
|
424
|
+
if (e > extreme) extreme = e;
|
|
425
|
+
|
|
426
|
+
p[o] = wx;
|
|
427
|
+
p[o + 1] = wy;
|
|
428
|
+
p[o + 2] = wz;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
if (f.kind === FEATURE_POLYGON) {
|
|
432
|
+
// normal by the inverse transpose: n'ᵢ = Σⱼ (M⁻¹)ⱼᵢ nⱼ
|
|
433
|
+
const inv = shape.inverse_transform;
|
|
434
|
+
const nx = f.nx, ny = f.ny, nz = f.nz;
|
|
435
|
+
|
|
436
|
+
const wx = inv[0] * nx + inv[1] * ny + inv[2] * nz;
|
|
437
|
+
const wy = inv[4] * nx + inv[5] * ny + inv[6] * nz;
|
|
438
|
+
const wz = inv[8] * nx + inv[9] * ny + inv[10] * nz;
|
|
439
|
+
|
|
440
|
+
const wl = Math.sqrt(wx * wx + wy * wy + wz * wz);
|
|
441
|
+
|
|
442
|
+
f.nx = wx / wl;
|
|
443
|
+
f.ny = wy / wl;
|
|
444
|
+
f.nz = wz / wl;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
return extreme;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* The supporting feature of a shape along a direction, both in the shape's own frame.
|
|
452
|
+
*
|
|
453
|
+
* @returns {number} the shape's extreme projection on the direction
|
|
454
|
+
*/
|
|
455
|
+
function local_feature(f, shape, lx, ly, lz) {
|
|
456
|
+
if (shape.isBoxShape3D === true) {
|
|
457
|
+
return box_feature(f, shape.half_extents, lx, ly, lz);
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
if (shape.face_loops !== undefined && shape.face_offsets !== undefined) {
|
|
461
|
+
return polytope_feature(f, shape, lx, ly, lz);
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
if (shape.isCylinderShape3D === true) {
|
|
465
|
+
return cylinder_feature(f, shape.radius, shape.height * 0.5, lx, ly, lz);
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
if (shape.isCapsuleShape3D === true) {
|
|
469
|
+
return capsule_feature(f, shape.radius, shape.height * 0.5, lx, ly, lz);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
if (shape.isTransformedShape3D === true && shape.subject !== null) {
|
|
473
|
+
return transformed_feature(f, shape, lx, ly, lz);
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
scratch_direction[0] = lx;
|
|
477
|
+
scratch_direction[1] = ly;
|
|
478
|
+
scratch_direction[2] = lz;
|
|
479
|
+
shape.support(scratch_local, 0, scratch_direction, 0);
|
|
480
|
+
const sx = scratch_local[0], sy = scratch_local[1], sz = scratch_local[2];
|
|
481
|
+
|
|
482
|
+
f.count = 0;
|
|
483
|
+
f.kind = FEATURE_POINT;
|
|
484
|
+
put(f, sx, sy, sz);
|
|
485
|
+
|
|
486
|
+
return sx * lx + sy * ly + sz * lz;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* The supporting feature of a posed convex shape along a world direction — see the module notes.
|
|
491
|
+
*
|
|
492
|
+
* @param {SupportFeature} f receives the feature
|
|
493
|
+
* @param {AbstractShape3D|{vertices, face_offsets, face_loops, support}} shape
|
|
494
|
+
* @param {number} px shape position x
|
|
495
|
+
* @param {number} py
|
|
496
|
+
* @param {number} pz
|
|
497
|
+
* @param {number} qx shape rotation quaternion x
|
|
498
|
+
* @param {number} qy
|
|
499
|
+
* @param {number} qz
|
|
500
|
+
* @param {number} qw
|
|
501
|
+
* @param {number} dx unit world direction, toward the other body
|
|
502
|
+
* @param {number} dy
|
|
503
|
+
* @param {number} dz
|
|
504
|
+
*/
|
|
505
|
+
export function support_feature(f, shape, px, py, pz, qx, qy, qz, qw, dx, dy, dz) {
|
|
506
|
+
v3_quaternion_apply_inverse(scratch_local, 0, dx, dy, dz, qx, qy, qz, qw);
|
|
507
|
+
const lx = scratch_local[0], ly = scratch_local[1], lz = scratch_local[2];
|
|
508
|
+
|
|
509
|
+
const extreme = local_feature(f, shape, lx, ly, lz);
|
|
510
|
+
|
|
511
|
+
// into the world: p_world = q · p · q* + position (v3_quaternion_apply, written out)
|
|
512
|
+
const p = f.points;
|
|
513
|
+
|
|
514
|
+
for (let i = 0; i < f.count; i++) {
|
|
515
|
+
const o = i * 3;
|
|
516
|
+
const vx = p[o], vy = p[o + 1], vz = p[o + 2];
|
|
517
|
+
|
|
518
|
+
const tx = qw * vx + qy * vz - qz * vy;
|
|
519
|
+
const ty = qw * vy + qz * vx - qx * vz;
|
|
520
|
+
const tz = qw * vz + qx * vy - qy * vx;
|
|
521
|
+
const tw = -qx * vx - qy * vy - qz * vz;
|
|
522
|
+
|
|
523
|
+
p[o] = tx * qw - tw * qx - ty * qz + tz * qy + px;
|
|
524
|
+
p[o + 1] = ty * qw - tw * qy - tz * qx + tx * qz + py;
|
|
525
|
+
p[o + 2] = tz * qw - tw * qz - tx * qy + ty * qx + pz;
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
if (f.kind === FEATURE_POLYGON) {
|
|
529
|
+
v3_quaternion_apply(scratch_world, 0, f.nx, f.ny, f.nz, qx, qy, qz, qw);
|
|
530
|
+
f.nx = scratch_world[0];
|
|
531
|
+
f.ny = scratch_world[1];
|
|
532
|
+
f.nz = scratch_world[2];
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
// local extreme to world: (q·v + p) · d = v · (q*·d) + p · d
|
|
536
|
+
f.extreme = extreme + px * dx + py * dy + pz * dz;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
/**
|
|
540
|
+
* The supporting feature of a world triangle along a direction: the triangle itself when its outward
|
|
541
|
+
* normal is within {@link FACE_ALIGNMENT} of the direction, else the vertices tied at the extreme.
|
|
542
|
+
*
|
|
543
|
+
* @param {SupportFeature} f
|
|
544
|
+
* @param {number} ax
|
|
545
|
+
* @param {number} ay
|
|
546
|
+
* @param {number} az
|
|
547
|
+
* @param {number} bx
|
|
548
|
+
* @param {number} by
|
|
549
|
+
* @param {number} bz
|
|
550
|
+
* @param {number} cx
|
|
551
|
+
* @param {number} cy
|
|
552
|
+
* @param {number} cz
|
|
553
|
+
* @param {number} nx unit outward normal of the triangle
|
|
554
|
+
* @param {number} ny
|
|
555
|
+
* @param {number} nz
|
|
556
|
+
* @param {number} dx unit direction, toward the other body
|
|
557
|
+
* @param {number} dy
|
|
558
|
+
* @param {number} dz
|
|
559
|
+
*/
|
|
560
|
+
export function triangle_feature(f, ax, ay, az, bx, by, bz, cx, cy, cz, nx, ny, nz, dx, dy, dz) {
|
|
561
|
+
f.reserve(3);
|
|
562
|
+
|
|
563
|
+
triangle_vertices[0] = ax; triangle_vertices[1] = ay; triangle_vertices[2] = az;
|
|
564
|
+
triangle_vertices[3] = bx; triangle_vertices[4] = by; triangle_vertices[5] = bz;
|
|
565
|
+
triangle_vertices[6] = cx; triangle_vertices[7] = cy; triangle_vertices[8] = cz;
|
|
566
|
+
|
|
567
|
+
if (nx * dx + ny * dy + nz * dz >= FACE_ALIGNMENT) {
|
|
568
|
+
f.count = 3;
|
|
569
|
+
f.points.set(triangle_vertices);
|
|
570
|
+
f.kind = FEATURE_POLYGON;
|
|
571
|
+
f.nx = nx; f.ny = ny; f.nz = nz;
|
|
572
|
+
|
|
573
|
+
f.extreme = Math.max(
|
|
574
|
+
ax * dx + ay * dy + az * dz,
|
|
575
|
+
bx * dx + by * dy + bz * dz,
|
|
576
|
+
cx * dx + cy * dy + cz * dz
|
|
577
|
+
);
|
|
578
|
+
return;
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
// the triangle is given in the world already
|
|
582
|
+
f.extreme = tied_vertices(f, triangle_vertices, 3, dx, dy, dz);
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
const triangle_vertices = new Float64Array(9);
|
|
586
|
+
|
|
587
|
+
/** Clip scratch, grown to fit. */
|
|
588
|
+
let clip_a = new Float64Array(32 * 3);
|
|
589
|
+
let clip_b = new Float64Array(32 * 3);
|
|
590
|
+
let candidates = new Float64Array(32 * 4);
|
|
591
|
+
|
|
592
|
+
/** Centroid and largest squared distance from it of a feature's points: `[cx, cy, cz, spread²]`. */
|
|
593
|
+
const centroid_a = new Float64Array(4);
|
|
594
|
+
const centroid_b = new Float64Array(4);
|
|
595
|
+
|
|
596
|
+
function feature_centroid(out, f) {
|
|
597
|
+
const p = f.points, n = f.count;
|
|
598
|
+
let cx = 0, cy = 0, cz = 0;
|
|
599
|
+
|
|
600
|
+
for (let i = 0; i < n; i++) {
|
|
601
|
+
cx += p[i * 3]; cy += p[i * 3 + 1]; cz += p[i * 3 + 2];
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
cx /= n; cy /= n; cz /= n;
|
|
605
|
+
|
|
606
|
+
let spread = 0;
|
|
607
|
+
|
|
608
|
+
for (let i = 0; i < n; i++) {
|
|
609
|
+
const ex = p[i * 3] - cx, ey = p[i * 3 + 1] - cy, ez = p[i * 3 + 2] - cz;
|
|
610
|
+
const s = ex * ex + ey * ey + ez * ez;
|
|
611
|
+
if (s > spread) spread = s;
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
out[0] = cx; out[1] = cy; out[2] = cz; out[3] = spread;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
/**
|
|
618
|
+
* Clip the incident feature to the reference polygon's prism and keep the points that reach behind
|
|
619
|
+
* its plane. Writes `(x, y, z, depth)` candidates; returns their count.
|
|
620
|
+
*/
|
|
621
|
+
function clip_to_reference(ref, inc) {
|
|
622
|
+
const rp = ref.points, rn = ref.count;
|
|
623
|
+
const nx = ref.nx, ny = ref.ny, nz = ref.nz;
|
|
624
|
+
|
|
625
|
+
const cap = inc.count + rn + 2;
|
|
626
|
+
if (clip_a.length < cap * 3) {
|
|
627
|
+
clip_a = new Float64Array(cap * 3);
|
|
628
|
+
clip_b = new Float64Array(cap * 3);
|
|
629
|
+
candidates = new Float64Array(cap * 4);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
// reference centroid: orients each side plane outward
|
|
633
|
+
let rcx = 0, rcy = 0, rcz = 0;
|
|
634
|
+
for (let i = 0; i < rn; i++) {
|
|
635
|
+
rcx += rp[i * 3]; rcy += rp[i * 3 + 1]; rcz += rp[i * 3 + 2];
|
|
636
|
+
}
|
|
637
|
+
rcx /= rn; rcy /= rn; rcz /= rn;
|
|
638
|
+
|
|
639
|
+
let src = clip_a, dst = clip_b;
|
|
640
|
+
let n = inc.count;
|
|
641
|
+
|
|
642
|
+
const ip = inc.points;
|
|
643
|
+
for (let i = 0; i < n * 3; i++) {
|
|
644
|
+
src[i] = ip[i];
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
// a segment clips as a parametric interval, so it never sprouts duplicate crossings
|
|
648
|
+
let t0 = 0, t1 = 1;
|
|
649
|
+
const segment = inc.kind === FEATURE_SEGMENT;
|
|
650
|
+
|
|
651
|
+
for (let e = 0; e < rn && n > 0; e++) {
|
|
652
|
+
const a = e * 3, b = ((e + 1) % rn) * 3;
|
|
653
|
+
const ex = rp[b] - rp[a], ey = rp[b + 1] - rp[a + 1], ez = rp[b + 2] - rp[a + 2];
|
|
654
|
+
|
|
655
|
+
// side plane through the edge, normal pointing out of the polygon
|
|
656
|
+
let sx = ey * nz - ez * ny, sy = ez * nx - ex * nz, sz = ex * ny - ey * nx;
|
|
657
|
+
if ((rcx - rp[a]) * sx + (rcy - rp[a + 1]) * sy + (rcz - rp[a + 2]) * sz > 0) {
|
|
658
|
+
sx = -sx; sy = -sy; sz = -sz;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
if (segment) {
|
|
662
|
+
const d0 = (src[0] - rp[a]) * sx + (src[1] - rp[a + 1]) * sy + (src[2] - rp[a + 2]) * sz;
|
|
663
|
+
const d1 = (src[3] - rp[a]) * sx + (src[4] - rp[a + 1]) * sy + (src[5] - rp[a + 2]) * sz;
|
|
664
|
+
|
|
665
|
+
if (d0 > 0 && d1 > 0) {
|
|
666
|
+
n = 0;
|
|
667
|
+
} else if (d0 > 0) {
|
|
668
|
+
t0 = Math.max(t0, d0 / (d0 - d1));
|
|
669
|
+
} else if (d1 > 0) {
|
|
670
|
+
t1 = Math.min(t1, d0 / (d0 - d1));
|
|
671
|
+
}
|
|
672
|
+
} else {
|
|
673
|
+
n = clip_poly(src, n, dst, sx, sy, sz, rp[a], rp[a + 1], rp[a + 2]);
|
|
674
|
+
const t = src; src = dst; dst = t;
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
if (segment && n > 0) {
|
|
679
|
+
if (t0 > t1) {
|
|
680
|
+
n = 0;
|
|
681
|
+
} else {
|
|
682
|
+
const x0 = src[0], y0 = src[1], z0 = src[2];
|
|
683
|
+
const lx = src[3] - x0, ly = src[4] - y0, lz = src[5] - z0;
|
|
684
|
+
|
|
685
|
+
dst[0] = x0 + lx * t0; dst[1] = y0 + ly * t0; dst[2] = z0 + lz * t0;
|
|
686
|
+
dst[3] = x0 + lx * t1; dst[4] = y0 + ly * t1; dst[5] = z0 + lz * t1;
|
|
687
|
+
n = t1 > t0 ? 2 : 1;
|
|
688
|
+
|
|
689
|
+
const t = src; src = dst; dst = t;
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
let kept = 0;
|
|
694
|
+
|
|
695
|
+
for (let i = 0; i < n; i++) {
|
|
696
|
+
const x = src[i * 3], y = src[i * 3 + 1], z = src[i * 3 + 2];
|
|
697
|
+
const depth = -((x - rp[0]) * nx + (y - rp[1]) * ny + (z - rp[2]) * nz);
|
|
698
|
+
|
|
699
|
+
if (depth < 0) continue;
|
|
700
|
+
|
|
701
|
+
candidates[kept * 4] = x;
|
|
702
|
+
candidates[kept * 4 + 1] = y;
|
|
703
|
+
candidates[kept * 4 + 2] = z;
|
|
704
|
+
candidates[kept * 4 + 3] = depth;
|
|
705
|
+
kept++;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
return kept;
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
/**
|
|
712
|
+
* Squared sine of the angle below which two segment features count as parallel — the threshold
|
|
713
|
+
* `capsule_capsule_multi_contacts` uses for capsule axes (about 2.6°).
|
|
714
|
+
* @type {number}
|
|
715
|
+
*/
|
|
716
|
+
const SEGMENT_PARALLEL_SIN_SQR = 0.002;
|
|
717
|
+
|
|
718
|
+
/**
|
|
719
|
+
* Two parallel segment features — two logs lying along each other, a capsule along a cylinder's side —
|
|
720
|
+
* touch along the stretch of line they share, and one point of it is a pivot the upper body pitches
|
|
721
|
+
* and rolls about: a pile of cylinders sank 15 cm into its groove and never slept. Writes a contact at
|
|
722
|
+
* each end of the shared stretch, at the depth along `n` it reaches there.
|
|
723
|
+
*
|
|
724
|
+
* @returns {boolean} false when the segments are not parallel, share no stretch, or neither end of
|
|
725
|
+
* it reaches the other segment; the caller then takes the closest points
|
|
726
|
+
*/
|
|
727
|
+
function parallel_segments(out, fa, fb, nx, ny, nz) {
|
|
728
|
+
const pa = fa.points, pb = fb.points;
|
|
729
|
+
|
|
730
|
+
const d1x = pa[3] - pa[0], d1y = pa[4] - pa[1], d1z = pa[5] - pa[2];
|
|
731
|
+
const d2x = pb[3] - pb[0], d2y = pb[4] - pb[1], d2z = pb[5] - pb[2];
|
|
732
|
+
|
|
733
|
+
const len1_sqr = d1x * d1x + d1y * d1y + d1z * d1z;
|
|
734
|
+
const len2_sqr = d2x * d2x + d2y * d2y + d2z * d2z;
|
|
735
|
+
|
|
736
|
+
if (!(len1_sqr > 0) || !(len2_sqr > 0)) return false;
|
|
737
|
+
|
|
738
|
+
const cx = d1y * d2z - d1z * d2y, cy = d1z * d2x - d1x * d2z, cz = d1x * d2y - d1y * d2x;
|
|
739
|
+
|
|
740
|
+
if (cx * cx + cy * cy + cz * cz >= SEGMENT_PARALLEL_SIN_SQR * len1_sqr * len2_sqr) return false;
|
|
741
|
+
|
|
742
|
+
// B's ends along A's line, from A's first end
|
|
743
|
+
const len1 = Math.sqrt(len1_sqr);
|
|
744
|
+
const ux = d1x / len1, uy = d1y / len1, uz = d1z / len1;
|
|
745
|
+
|
|
746
|
+
const t0 = (pb[0] - pa[0]) * ux + (pb[1] - pa[1]) * uy + (pb[2] - pa[2]) * uz;
|
|
747
|
+
const t1 = (pb[3] - pa[0]) * ux + (pb[4] - pa[1]) * uy + (pb[5] - pa[2]) * uz;
|
|
748
|
+
|
|
749
|
+
const lo = Math.max(0, Math.min(t0, t1));
|
|
750
|
+
const hi = Math.min(len1, Math.max(t0, t1));
|
|
751
|
+
|
|
752
|
+
if (!(hi > lo)) return false;
|
|
753
|
+
|
|
754
|
+
let count = 0;
|
|
755
|
+
|
|
756
|
+
for (let e = 0; e < 2; e++) {
|
|
757
|
+
const s = e === 0 ? lo : hi;
|
|
758
|
+
const ax = pa[0] + ux * s, ay = pa[1] + uy * s, az = pa[2] + uz * s;
|
|
759
|
+
|
|
760
|
+
// the closest point of B's segment
|
|
761
|
+
let t = ((ax - pb[0]) * d2x + (ay - pb[1]) * d2y + (az - pb[2]) * d2z) / len2_sqr;
|
|
762
|
+
t = t < 0 ? 0 : (t > 1 ? 1 : t);
|
|
763
|
+
const bx = pb[0] + d2x * t, by = pb[1] + d2y * t, bz = pb[2] + d2z * t;
|
|
764
|
+
|
|
765
|
+
// A is on the +n side: B's point past A's along n is penetration
|
|
766
|
+
const depth = (bx - ax) * nx + (by - ay) * ny + (bz - az) * nz;
|
|
767
|
+
|
|
768
|
+
if (depth < 0) continue;
|
|
769
|
+
|
|
770
|
+
const o = 4 + count * 7;
|
|
771
|
+
out[o] = ax; out[o + 1] = ay; out[o + 2] = az;
|
|
772
|
+
out[o + 3] = bx; out[o + 4] = by; out[o + 5] = bz;
|
|
773
|
+
out[o + 6] = depth;
|
|
774
|
+
count++;
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
if (count === 0) return false;
|
|
778
|
+
|
|
779
|
+
out[0] = nx;
|
|
780
|
+
out[1] = ny;
|
|
781
|
+
out[2] = nz;
|
|
782
|
+
out[3] = count;
|
|
783
|
+
|
|
784
|
+
return true;
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
/**
|
|
788
|
+
* How far two features overlap along an axis `m` pointing from B toward A: B's furthest point along it
|
|
789
|
+
* less A's nearest.
|
|
790
|
+
*/
|
|
791
|
+
function feature_overlap(fa, fb, mx, my, mz) {
|
|
792
|
+
let b_max = -Infinity;
|
|
793
|
+
for (let i = 0; i < fb.count; i++) {
|
|
794
|
+
const o = i * 3;
|
|
795
|
+
const d = fb.points[o] * mx + fb.points[o + 1] * my + fb.points[o + 2] * mz;
|
|
796
|
+
if (d > b_max) b_max = d;
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
let a_min = Infinity;
|
|
800
|
+
for (let i = 0; i < fa.count; i++) {
|
|
801
|
+
const o = i * 3;
|
|
802
|
+
const d = fa.points[o] * mx + fa.points[o + 1] * my + fa.points[o + 2] * mz;
|
|
803
|
+
if (d < a_min) a_min = d;
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
return b_max - a_min;
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
/**
|
|
810
|
+
* Output length of {@link feature_manifold}: `[nx, ny, nz, count, (ax, ay, az, bx, by, bz, depth) × 4]`.
|
|
811
|
+
* @type {number}
|
|
812
|
+
*/
|
|
813
|
+
export const FEATURE_MANIFOLD_OUT_LENGTH = 4 + 4 * 7;
|
|
814
|
+
|
|
815
|
+
/**
|
|
816
|
+
* Contacts between two supporting features, along the axis `n` (unit, from B toward A) the pair
|
|
817
|
+
* penetrates along by `depth`. A's feature must face B (taken along −n), B's face A (along +n).
|
|
818
|
+
*
|
|
819
|
+
* When either feature is a face, the other is clipped to that face's prism and every point that
|
|
820
|
+
* reaches behind it is a contact, at the depth it reaches, with the face's own normal — the exact
|
|
821
|
+
* normal of a face-on-face contact, however rough the axis it was found along. Otherwise, or when
|
|
822
|
+
* the clip leaves nothing, one contact: two segments meet at their closest points; anything else on
|
|
823
|
+
* the smaller feature's centroid, projected along `n` onto the other side's support plane, at
|
|
824
|
+
* `depth`.
|
|
825
|
+
*
|
|
826
|
+
* Layout matches {@link convex_hull_clip}: `out[0..2]` the normal (B→A), `out[3]` the count, then
|
|
827
|
+
* per contact the point on A, the point on B and the depth.
|
|
828
|
+
*
|
|
829
|
+
* @param {Float64Array} out length ≥ {@link FEATURE_MANIFOLD_OUT_LENGTH}
|
|
830
|
+
* @param {SupportFeature} fa
|
|
831
|
+
* @param {SupportFeature} fb
|
|
832
|
+
* @param {number} nx
|
|
833
|
+
* @param {number} ny
|
|
834
|
+
* @param {number} nz
|
|
835
|
+
* @param {number} depth
|
|
836
|
+
*/
|
|
837
|
+
export function feature_manifold(out, fa, fb, nx, ny, nz, depth) {
|
|
838
|
+
let ref = null, inc = null, ref_is_a = false;
|
|
839
|
+
|
|
840
|
+
if (fa.kind === FEATURE_POLYGON && fb.kind === FEATURE_POLYGON) {
|
|
841
|
+
// SAT over the two faces' normals: the reference is the face whose normal the features overlap
|
|
842
|
+
// least along — for a cap leaning on a floor, the floor, whose normal the rim only just reaches
|
|
843
|
+
// past, not the cap, along whose tilted normal the floor's far corners stand proud. The axis
|
|
844
|
+
// the pair was found along cannot decide it: off a triangle's degenerate support it leans
|
|
845
|
+
// toward either. Faces parallel to each other overlap equally along both; then the one that
|
|
846
|
+
// meets the axis more squarely.
|
|
847
|
+
const along_a = feature_overlap(fa, fb, -fa.nx, -fa.ny, -fa.nz);
|
|
848
|
+
const along_b = feature_overlap(fa, fb, fb.nx, fb.ny, fb.nz);
|
|
849
|
+
const tie = 1e-9 * (1 + Math.max(Math.abs(along_a), Math.abs(along_b)));
|
|
850
|
+
|
|
851
|
+
if (along_a < along_b - tie) {
|
|
852
|
+
ref_is_a = true;
|
|
853
|
+
} else if (along_b < along_a - tie) {
|
|
854
|
+
ref_is_a = false;
|
|
855
|
+
} else {
|
|
856
|
+
ref_is_a = -(fa.nx * nx + fa.ny * ny + fa.nz * nz) >= fb.nx * nx + fb.ny * ny + fb.nz * nz;
|
|
857
|
+
}
|
|
858
|
+
} else if (fa.kind === FEATURE_POLYGON) {
|
|
859
|
+
ref_is_a = true;
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
if (fa.kind === FEATURE_POLYGON || fb.kind === FEATURE_POLYGON) {
|
|
863
|
+
ref = ref_is_a ? fa : fb;
|
|
864
|
+
inc = ref_is_a ? fb : fa;
|
|
865
|
+
|
|
866
|
+
const kept = clip_to_reference(ref, inc);
|
|
867
|
+
|
|
868
|
+
if (kept > 0) {
|
|
869
|
+
const count = reduce_manifold_contacts(candidates, kept, 4, 4, 3);
|
|
870
|
+
const rnx = ref.nx, rny = ref.ny, rnz = ref.nz;
|
|
871
|
+
const rp = ref.points;
|
|
872
|
+
|
|
873
|
+
// the reference face's outward normal points at the other body: B→A if it is B's
|
|
874
|
+
out[0] = ref_is_a ? -rnx : rnx;
|
|
875
|
+
out[1] = ref_is_a ? -rny : rny;
|
|
876
|
+
out[2] = ref_is_a ? -rnz : rnz;
|
|
877
|
+
out[3] = count;
|
|
878
|
+
|
|
879
|
+
for (let k = 0; k < count; k++) {
|
|
880
|
+
const x = candidates[k * 4], y = candidates[k * 4 + 1], z = candidates[k * 4 + 2];
|
|
881
|
+
const d = candidates[k * 4 + 3];
|
|
882
|
+
|
|
883
|
+
// onto the reference plane
|
|
884
|
+
const sep = (x - rp[0]) * rnx + (y - rp[1]) * rny + (z - rp[2]) * rnz;
|
|
885
|
+
const qx = x - rnx * sep, qy = y - rny * sep, qz = z - rnz * sep;
|
|
886
|
+
|
|
887
|
+
const o = 4 + k * 7;
|
|
888
|
+
if (ref_is_a) {
|
|
889
|
+
out[o] = qx; out[o + 1] = qy; out[o + 2] = qz;
|
|
890
|
+
out[o + 3] = x; out[o + 4] = y; out[o + 5] = z;
|
|
891
|
+
} else {
|
|
892
|
+
out[o] = x; out[o + 1] = y; out[o + 2] = z;
|
|
893
|
+
out[o + 3] = qx; out[o + 4] = qy; out[o + 5] = qz;
|
|
894
|
+
}
|
|
895
|
+
out[o + 6] = d;
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
return;
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
out[0] = nx;
|
|
903
|
+
out[1] = ny;
|
|
904
|
+
out[2] = nz;
|
|
905
|
+
out[3] = 1;
|
|
906
|
+
out[10] = depth;
|
|
907
|
+
|
|
908
|
+
if (fa.kind === FEATURE_SEGMENT && fb.kind === FEATURE_SEGMENT) {
|
|
909
|
+
if (parallel_segments(out, fa, fb, nx, ny, nz)) {
|
|
910
|
+
return;
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
const pa = fa.points, pb = fb.points;
|
|
914
|
+
|
|
915
|
+
line3_compute_segment_segment_closest_points(
|
|
916
|
+
scratch_st,
|
|
917
|
+
pa[0], pa[1], pa[2], pa[3], pa[4], pa[5],
|
|
918
|
+
pb[0], pb[1], pb[2], pb[3], pb[4], pb[5]
|
|
919
|
+
);
|
|
920
|
+
|
|
921
|
+
const s = scratch_st[0], t = scratch_st[1];
|
|
922
|
+
|
|
923
|
+
out[4] = pa[0] + (pa[3] - pa[0]) * s;
|
|
924
|
+
out[5] = pa[1] + (pa[4] - pa[1]) * s;
|
|
925
|
+
out[6] = pa[2] + (pa[5] - pa[2]) * s;
|
|
926
|
+
out[7] = pb[0] + (pb[3] - pb[0]) * t;
|
|
927
|
+
out[8] = pb[1] + (pb[4] - pb[1]) * t;
|
|
928
|
+
out[9] = pb[2] + (pb[5] - pb[2]) * t;
|
|
929
|
+
return;
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
feature_centroid(centroid_a, fa);
|
|
933
|
+
feature_centroid(centroid_b, fb);
|
|
934
|
+
|
|
935
|
+
// n · x is −fa.extreme on A's support plane (A's was taken along −n), fb.extreme on B's
|
|
936
|
+
if (centroid_a[3] <= centroid_b[3]) {
|
|
937
|
+
const cx = centroid_a[0], cy = centroid_a[1], cz = centroid_a[2];
|
|
938
|
+
const k = fb.extreme - (nx * cx + ny * cy + nz * cz);
|
|
939
|
+
|
|
940
|
+
out[4] = cx; out[5] = cy; out[6] = cz;
|
|
941
|
+
out[7] = cx + nx * k; out[8] = cy + ny * k; out[9] = cz + nz * k;
|
|
942
|
+
} else {
|
|
943
|
+
const cx = centroid_b[0], cy = centroid_b[1], cz = centroid_b[2];
|
|
944
|
+
const k = -fa.extreme - (nx * cx + ny * cy + nz * cz);
|
|
945
|
+
|
|
946
|
+
out[4] = cx + nx * k; out[5] = cy + ny * k; out[6] = cz + nz * k;
|
|
947
|
+
out[7] = cx; out[8] = cy; out[9] = cz;
|
|
948
|
+
}
|
|
949
|
+
}
|