@woosh/meep-engine 3.38.0 → 3.40.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/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +17 -4
- package/src/engine/asset/loaders/image/avif/threaded_image_encoder.js +1 -1
- 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 +8 -0
- package/src/engine/ecs/transform/Transform64.d.ts +4 -2
- package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform64.js +10 -16
- package/src/engine/graphics/ecs/water/Water.d.ts +31 -72
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +59 -84
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +11 -49
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.js +27 -18
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.d.ts +12 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.js +45 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.d.ts +6 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.js +10 -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/graphics/texture/sampler/sampler2d_to_avif.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_to_avif.js +8 -5
- package/src/engine/graphics3/WaterSystem.d.ts +31 -48
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +177 -261
- package/src/engine/interpolation/BinaryInterpolationAdapter.d.ts +10 -4
- package/src/engine/interpolation/BinaryInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/BinaryInterpolationAdapter.js +11 -5
- package/src/engine/interpolation/InterpolationLog.d.ts +11 -5
- package/src/engine/interpolation/InterpolationLog.d.ts.map +1 -1
- package/src/engine/interpolation/InterpolationLog.js +12 -6
- package/src/engine/interpolation/InterpolationSystem.d.ts.map +1 -1
- package/src/engine/interpolation/InterpolationSystem.js +39 -8
- package/src/engine/interpolation/PoseInterpolationAdapter.d.ts +1 -1
- package/src/engine/interpolation/PoseInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/PoseInterpolationAdapter.js +51 -22
- package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/TransformPoseSerializationAdapter.js +18 -23
- package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts +1 -1
- package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/QuaternionInterpolationAdapter.js +3 -1
- package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts +1 -1
- package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/TransformInterpolationAdapter.js +3 -1
- package/src/engine/network/adapters/Vector3InterpolationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/Vector3InterpolationAdapter.js +5 -2
- package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
- package/src/engine/physics/body/SolverBodyState.js +4 -5
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +12 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +28 -3
- package/src/engine/physics/ccd/linear_sweep.d.ts +42 -12
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +1131 -97
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +13 -0
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/ClothColliderIndex.js +90 -22
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +84 -24
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts +46 -3
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +116 -68
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +59 -47
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +62 -55
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +46 -39
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +41 -36
- package/src/engine/physics/cloth/playground/garment_build.js +6 -6
- package/src/engine/physics/cloth/playground/garment_main.js +18 -14
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.js +8 -5
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.js +8 -5
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +15 -15
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.d.ts +5 -0
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.js +32 -9
- package/src/engine/physics/constraint/solve_constraints.d.ts +50 -8
- package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
- package/src/engine/physics/constraint/solve_constraints.js +703 -429
- package/src/engine/physics/contact/ManifoldStore.d.ts +12 -0
- package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
- package/src/engine/physics/contact/ManifoldStore.js +32 -0
- package/src/engine/physics/ecs/BodyKind.d.ts +16 -8
- package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -1
- package/src/engine/physics/ecs/BodyKind.js +16 -8
- package/src/engine/physics/ecs/Collider.d.ts +7 -2
- package/src/engine/physics/ecs/Collider.d.ts.map +1 -1
- package/src/engine/physics/ecs/Collider.js +7 -2
- package/src/engine/physics/ecs/PhysicsEvents.d.ts +13 -0
- package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsEvents.js +13 -0
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +320 -36
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +779 -81
- package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidField.js +5 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +11 -9
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +7 -5
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.js +9 -7
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +3 -4
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +9 -7
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.js +65 -43
- package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.d.ts +23 -0
- package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.d.ts.map +1 -0
- package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.js +22 -0
- package/src/engine/physics/inertia/convex_hull_mass_properties.d.ts +29 -0
- package/src/engine/physics/inertia/convex_hull_mass_properties.d.ts.map +1 -0
- package/src/engine/physics/inertia/convex_hull_mass_properties.js +117 -0
- package/src/engine/physics/inertia/mass_properties_accumulate.d.ts +24 -0
- package/src/engine/physics/inertia/mass_properties_accumulate.d.ts.map +1 -0
- package/src/engine/physics/inertia/mass_properties_accumulate.js +93 -0
- package/src/engine/physics/inertia/primitive_mass_properties.d.ts +46 -0
- package/src/engine/physics/inertia/primitive_mass_properties.d.ts.map +1 -0
- package/src/engine/physics/inertia/primitive_mass_properties.js +118 -0
- package/src/engine/physics/inertia/rigid_body_set_mass_properties.d.ts +27 -0
- package/src/engine/physics/inertia/rigid_body_set_mass_properties.d.ts.map +1 -0
- package/src/engine/physics/inertia/rigid_body_set_mass_properties.js +62 -0
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts +67 -25
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -1
- package/src/engine/physics/inertia/world_inverse_inertia.js +149 -26
- package/src/engine/physics/integration/integrate_position.d.ts +18 -19
- package/src/engine/physics/integration/integrate_position.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_position.js +40 -37
- package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_velocity.js +13 -4
- package/src/engine/physics/island/IslandBuilder.d.ts +124 -6
- package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
- package/src/engine/physics/island/IslandBuilder.js +322 -19
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts +13 -0
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_box_manifold.js +95 -39
- package/src/engine/physics/narrowphase/box_triangle_contact.d.ts +40 -0
- package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_triangle_contact.js +415 -120
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts +63 -0
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_contacts.js +234 -46
- package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts +13 -0
- package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_triangle_contact.js +141 -93
- package/src/engine/physics/narrowphase/compute_penetration.d.ts +29 -11
- package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/compute_penetration.js +157 -34
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts +76 -0
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/convex_convex_manifold.js +243 -48
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts +13 -0
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.js +28 -12
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts +13 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.js +27 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.d.ts +42 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.js +250 -0
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts +27 -11
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +291 -12
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts +7 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.js +7 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.d.ts +35 -0
- package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.js +61 -0
- package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts +54 -0
- package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/hull_sphere_contact.js +244 -0
- package/src/engine/physics/narrowphase/mesh_convex_hull.js +5 -1
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts +2 -0
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +56 -31
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts +6 -5
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +2185 -483
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts +56 -5
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.js +546 -5
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts +29 -2
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_concave.js +628 -75
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts +3 -2
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_hit.js +3 -2
- package/src/engine/physics/narrowphase/rigid_subject_pose.d.ts +27 -0
- package/src/engine/physics/narrowphase/rigid_subject_pose.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/rigid_subject_pose.js +96 -0
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +14 -0
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_box_contact.js +51 -5
- package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +12 -0
- package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_sphere_contact.js +30 -0
- package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts +12 -0
- package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_triangle_contact.js +37 -8
- package/src/engine/physics/narrowphase/support_feature_manifold.d.ts +139 -0
- package/src/engine/physics/narrowphase/support_feature_manifold.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/support_feature_manifold.js +949 -0
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +32 -13
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -1
- package/src/engine/physics/queries/PhysicsSurfacePoint.js +36 -13
- package/src/engine/physics/queries/convex_overlaps_shape.d.ts +27 -0
- package/src/engine/physics/queries/convex_overlaps_shape.d.ts.map +1 -0
- package/src/engine/physics/queries/convex_overlaps_shape.js +169 -0
- package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
- package/src/engine/physics/queries/overlap_shape.js +57 -79
- package/src/engine/physics/queries/raycast.d.ts +10 -4
- package/src/engine/physics/queries/raycast.d.ts.map +1 -1
- package/src/engine/physics/queries/raycast.js +133 -9
- package/src/engine/physics/queries/shape_cast.d.ts +55 -24
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.js +2061 -245
- package/src/engine/physics/solver/apply_impulse_to_body.d.ts +32 -10
- package/src/engine/physics/solver/apply_impulse_to_body.d.ts.map +1 -1
- package/src/engine/physics/solver/apply_impulse_to_body.js +69 -28
- package/src/engine/physics/solver/solve_contacts.d.ts +65 -18
- package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
- package/src/engine/physics/solver/solve_contacts.js +458 -234
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
- package/src/engine/physics/vehicle/RaycastVehicle.js +5 -6
- package/src/format/image/avif/api/convert_to_rgba.d.ts +2 -2
- package/src/format/image/avif/api/convert_to_rgba.d.ts.map +1 -1
- package/src/format/image/avif/api/convert_to_rgba.js +10 -9
- package/src/format/image/avif/api/decode_avif.d.ts +2 -2
- package/src/format/image/avif/api/decode_avif.d.ts.map +1 -1
- package/src/format/image/avif/api/decode_avif.js +1 -1
- 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/ssr_reprojection/README.md +111 -103
- package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.js +68 -68
- package/src/shade/playground/ssr_reprojection/index.html +80 -79
- package/src/shade/playground/ssr_reprojection/main.js +256 -247
- package/src/shade/playground/ssr_variance/capture.js +96 -96
- package/src/shade/playground/ssr_variance/reference.js +78 -78
- package/src/shade/playground/vsm/README.md +96 -0
- package/src/shade/playground/vsm/VSMDebugOverlay.d.ts +49 -0
- package/src/shade/playground/vsm/VSMDebugOverlay.d.ts.map +1 -0
- package/src/shade/playground/vsm/VSMDebugOverlay.js +351 -0
- package/src/shade/playground/vsm/clipmap_panel.d.ts +8 -0
- package/src/shade/playground/vsm/clipmap_panel.d.ts.map +1 -0
- package/src/shade/playground/vsm/clipmap_panel.js +138 -0
- package/src/shade/playground/vsm/index.html +170 -0
- package/src/shade/playground/vsm/main.d.ts +2 -0
- package/src/shade/playground/vsm/main.d.ts.map +1 -0
- package/src/shade/playground/vsm/main.js +389 -0
- package/src/shade/playground/vsm/scenes.d.ts +52 -0
- package/src/shade/playground/vsm/scenes.d.ts.map +1 -0
- package/src/shade/playground/vsm/scenes.js +320 -0
- package/src/shade/playground/vsm/verify_vsm.d.ts +38 -0
- package/src/shade/playground/vsm/verify_vsm.d.ts.map +1 -0
- package/src/shade/playground/vsm/verify_vsm.js +305 -0
- package/src/shade/playground/water_refraction/README.md +76 -19
- package/src/shade/playground/water_refraction/index.html +6 -8
- package/src/shade/playground/water_refraction/main.js +22 -12
- package/src/shade/playground/water_refraction/world.d.ts +3 -0
- package/src/shade/playground/water_refraction/world.d.ts.map +1 -1
- package/src/shade/playground/water_refraction/world.js +19 -5
- package/src/shade/renderer/Renderer.d.ts +21 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +95 -1
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +8 -0
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +18 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +7 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +11 -0
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts +3 -1
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +10 -1
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.js +28 -0
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.js +31 -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/MeshletGeometry.d.ts +3 -0
- package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/MeshletGeometry.js +1 -0
- 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 +79 -11
- 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/rgbe/parse_rgbe.d.ts +1 -1
- package/src/shade/renderer/light/environment/rgbe/parse_rgbe.js +2 -2
- package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.d.ts +2 -2
- package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.js +6 -14
- 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 +57 -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 +111 -0
- package/src/shade/renderer/medium/ParticipatingMedium.d.ts.map +1 -0
- package/src/shade/renderer/medium/ParticipatingMedium.js +211 -0
- package/src/shade/renderer/medium/chunk_medium_lobe_phase.d.ts +13 -0
- package/src/shade/renderer/medium/chunk_medium_lobe_phase.d.ts.map +1 -0
- package/src/shade/renderer/medium/chunk_medium_lobe_phase.js +33 -0
- package/src/shade/renderer/medium/participating_medium_serialization.d.ts +32 -0
- package/src/shade/renderer/medium/participating_medium_serialization.d.ts.map +1 -0
- package/src/shade/renderer/medium/participating_medium_serialization.js +181 -0
- package/src/shade/renderer/medium/phase/MediumPhaseFunction.d.ts +48 -0
- package/src/shade/renderer/medium/phase/MediumPhaseFunction.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/MediumPhaseFunction.js +42 -0
- package/src/shade/renderer/medium/phase/PhaseCornetteShanks.d.ts +23 -0
- package/src/shade/renderer/medium/phase/PhaseCornetteShanks.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseCornetteShanks.js +45 -0
- package/src/shade/renderer/medium/phase/PhaseDraine.d.ts +30 -0
- package/src/shade/renderer/medium/phase/PhaseDraine.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseDraine.js +58 -0
- package/src/shade/renderer/medium/phase/PhaseFournierForand.d.ts +24 -0
- package/src/shade/renderer/medium/phase/PhaseFournierForand.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseFournierForand.js +53 -0
- package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.d.ts +21 -0
- package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.js +43 -0
- package/src/shade/renderer/medium/phase/PhaseJendersieDeon.d.ts +25 -0
- package/src/shade/renderer/medium/phase/PhaseJendersieDeon.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseJendersieDeon.js +66 -0
- package/src/shade/renderer/medium/phase/PhaseRayleigh.d.ts +9 -0
- package/src/shade/renderer/medium/phase/PhaseRayleigh.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseRayleigh.js +21 -0
- package/src/shade/renderer/medium/phase/PhaseWaterMolecular.d.ts +28 -0
- package/src/shade/renderer/medium/phase/PhaseWaterMolecular.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseWaterMolecular.js +49 -0
- package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.d.ts +10 -0
- package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.js +25 -0
- package/src/shade/renderer/medium/water/water_iop_from_appearance.d.ts +47 -0
- package/src/shade/renderer/medium/water/water_iop_from_appearance.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_iop_from_appearance.js +174 -0
- package/src/shade/renderer/medium/water/water_iop_from_constituents.d.ts +57 -0
- package/src/shade/renderer/medium/water/water_iop_from_constituents.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_iop_from_constituents.js +242 -0
- package/src/shade/renderer/medium/water/water_iop_jerlov.d.ts +41 -0
- package/src/shade/renderer/medium/water/water_iop_jerlov.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_iop_jerlov.js +231 -0
- package/src/shade/renderer/medium/water/water_iop_spectral_reference.d.ts +66 -0
- package/src/shade/renderer/medium/water/water_iop_spectral_reference.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_iop_spectral_reference.js +223 -0
- package/src/shade/renderer/medium/water/water_medium_from_iop.d.ts +96 -0
- package/src/shade/renderer/medium/water/water_medium_from_iop.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_medium_from_iop.js +145 -0
- package/src/shade/renderer/medium/water/water_presets.d.ts +69 -0
- package/src/shade/renderer/medium/water/water_presets.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_presets.js +119 -0
- package/src/shade/renderer/medium/water/water_rgb_from_spectral.d.ts +69 -0
- package/src/shade/renderer/medium/water/water_rgb_from_spectral.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_rgb_from_spectral.js +341 -0
- package/src/shade/renderer/particles/DESIGN.md +4 -2
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.d.ts +26 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.js +71 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +16 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +6 -13
- package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +520 -0
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -0
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +2 -0
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +188 -185
- package/src/shade/renderer/path_tracer/shader/STANDARD_MATERIAL_DATA_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/STANDARD_MATERIAL_DATA_STRUCT.js +4 -1
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts +13 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.js +29 -0
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts +79 -0
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +360 -70
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +4 -3
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.d.ts +24 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.js +99 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.d.ts +68 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.js +263 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.d.ts +55 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.js +148 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.d.ts +17 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.js +41 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.d.ts +20 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.js +105 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.d.ts +28 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.js +97 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.d.ts +12 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.js +46 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.d.ts +25 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.js +75 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.d.ts +54 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.js +245 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.d.ts +42 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.js +236 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.d.ts +24 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.js +97 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.d.ts +57 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.js +222 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.d.ts +88 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.js +304 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.d.ts +35 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.js +137 -0
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.js +5 -35
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts +12 -4
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.js +36 -8
- package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.d.ts +3 -0
- package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.js +2 -0
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.d.ts +8 -0
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.js +40 -0
- 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/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +150 -137
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.d.ts +3 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.js +44 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.d.ts +5 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.js +35 -0
- package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.d.ts +26 -0
- package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.js +42 -0
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts +1 -0
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +113 -105
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts +2 -0
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +177 -167
- package/src/shade/renderer/rasterize/DEPTH_STENCIL_STATE_SHADOW.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/DEPTH_STENCIL_STATE_SHADOW.js +10 -0
- package/src/shade/renderer/rasterize/RasterizationJob.d.ts +1 -2
- package/src/shade/renderer/rasterize/RasterizationJob.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/RasterizationJob.js +1 -2
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts +5 -6
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +5 -6
- 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 +14 -4
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +13 -4
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts +13 -7
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +13 -7
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +309 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +54 -9
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +9 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.d.ts +33 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.js +45 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.js +6 -2
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.js +4 -2
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.d.ts +14 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.js +28 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.js +18 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.d.ts +19 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.js +44 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.js +17 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +3 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.js +163 -64
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +4 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +16 -0
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts +12 -1
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.js +22 -3
- package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.js +31 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.d.ts +43 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.js +153 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.js +57 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.d.ts +45 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.js +109 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.js +4 -5
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_phase_draine.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_phase_draine.js +6 -3
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.js +49 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.js +18 -0
- package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.d.ts +3 -0
- package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.js +3 -0
- package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.js +1 -5
- package/src/shade/renderer/shader/chunk/brdf/dfg/shader_split_sum_dgf_lut.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/dfg/shader_split_sum_dgf_lut.js +3 -1
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.js +53 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.d.ts +7 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.js +12 -60
- package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.d.ts +26 -6
- package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.js +30 -20
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_directional.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_directional.js +3 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_point.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_point.js +3 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_spot.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_spot.js +3 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.js +25 -0
- package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.d.ts +9 -2
- package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.js +33 -10
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.d.ts +30 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.js +54 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.js +71 -37
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.js +30 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.d.ts +19 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.js +73 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.d.ts +19 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.js +25 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.js +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.d.ts +26 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.js +55 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.d.ts +52 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.js +65 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.js +229 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.js +278 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.js +58 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.js +75 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.js +70 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.js +95 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.js +89 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.js +118 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.js +111 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.js +144 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.js +136 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.js +173 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.js +164 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.js +205 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.js +195 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.js +240 -0
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts +0 -6
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.js +46 -1
- package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.js +3 -2
- 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/DIRECTIONAL_SHADOWMAP_STRUCT.d.ts +19 -0
- package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.js +27 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +43 -10
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +108 -48
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +74 -4
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +681 -77
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts +3 -1
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/Shadowmap.js +3 -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/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_sample_shadowmap_atlas_for_light.d.ts +8 -0
- package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.js +34 -3
- 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 +5 -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 +27 -7
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.js +137 -133
- 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/DEFAULT_VSM_FIRST_TEXEL_SIZE.d.ts +15 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.js +14 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.d.ts +16 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.js +15 -0
- package/src/shade/renderer/shadow/vsm/PLAN.md +440 -0
- package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +43 -0
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +42 -0
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.js +153 -0
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts +327 -0
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSMPageManager.js +1408 -0
- package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.d.ts +14 -0
- package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.js +13 -0
- package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.d.ts +63 -0
- package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.js +70 -0
- package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.d.ts +11 -0
- package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.js +10 -0
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +54 -0
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.js +75 -0
- package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.d.ts +23 -0
- package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.js +85 -0
- package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.d.ts +16 -0
- package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.js +29 -0
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts +136 -25
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +280 -100
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts +39 -0
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.js +289 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.d.ts +18 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.js +65 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.d.ts +17 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.js +75 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +14 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.js +45 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.d.ts +17 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.js +100 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.d.ts +15 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.js +47 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.d.ts +26 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.js +156 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.d.ts +13 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.js +65 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +30 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.js +184 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +23 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.js +109 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.d.ts +56 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.js +211 -0
- package/src/shade/renderer/texture/format/decode_typed_gpu_data.d.ts +1 -1
- package/src/shade/renderer/texture/format/decode_typed_gpu_data.d.ts.map +1 -1
- package/src/shade/renderer/texture/format/decode_typed_gpu_data.js +3 -13
- package/src/shade/renderer/texture/format/infer_format_from_parameters.d.ts.map +1 -1
- package/src/shade/renderer/texture/format/infer_format_from_parameters.js +2 -3
- package/src/shade/renderer/texture/texture_write_to_gpu.d.ts.map +1 -1
- package/src/shade/renderer/texture/texture_write_to_gpu.js +16 -16
- 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/texture/virtual/VTPhysicalCache.d.ts +4 -90
- package/src/shade/renderer/texture/virtual/VTPhysicalCache.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/VTPhysicalCache.js +6 -210
- package/src/shade/renderer/texture/virtual/VTPhysicalSlots.d.ts +119 -0
- package/src/shade/renderer/texture/virtual/VTPhysicalSlots.d.ts.map +1 -0
- package/src/shade/renderer/texture/virtual/VTPhysicalSlots.js +245 -0
- package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.d.ts +1 -1
- package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.js +3 -19
- package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.d.ts +13 -0
- package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.d.ts.map +1 -0
- package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.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 +20 -3
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +84 -35
- package/src/shade/renderer/water/chunk_water_gi.d.ts +14 -0
- package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -0
- package/src/shade/renderer/water/chunk_water_gi.js +56 -0
- package/src/shade/renderer/water/chunk_water_transport.d.ts +2 -0
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_transport.js +52 -41
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +15 -0
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +64 -0
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts +4 -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 +10 -0
- package/src/shade/renderer/water/medium/chunk_water_bodies.d.ts +3 -0
- package/src/shade/renderer/water/medium/chunk_water_bodies.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/chunk_water_bodies.js +3 -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 +4 -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 +32 -0
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +4 -0
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/shader_water_meshlets.js +69 -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 +124 -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 +75 -0
- package/src/shade/renderer/water/shader_water.d.ts +11 -5
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +262 -156
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water_avboit.js +19 -9
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +25 -0
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +128 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +6 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +23 -0
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +9 -0
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/chunk_water_tessellation.js +144 -0
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +13 -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 +40 -0
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +14 -0
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +34 -0
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +4 -0
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_tiles.js +123 -0
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +6 -0
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_wave_batch.js +85 -0
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +6 -0
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_wave_domain.js +83 -0
- package/src/shade/renderer/water/water_height_texture_from_sampler.d.ts.map +1 -1
- package/src/shade/renderer/water/water_height_texture_from_sampler.js +4 -3
- package/src/shade/renderer/water/water_missing_receiver_path.d.ts +17 -0
- package/src/shade/renderer/water/water_missing_receiver_path.d.ts.map +1 -0
- package/src/shade/renderer/water/water_missing_receiver_path.js +40 -0
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +247 -23
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts +18 -14
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +48 -6
- package/src/engine/graphics/ecs/water/WATER_SIZE.d.ts +0 -2
- package/src/engine/graphics/ecs/water/WATER_SIZE.d.ts.map +0 -1
- package/src/engine/graphics/ecs/water/WATER_SIZE.js +0 -1
- package/src/shade/renderer/light/GPUViewLightContext.d.ts +0 -22
- package/src/shade/renderer/light/GPUViewLightContext.d.ts.map +0 -1
- package/src/shade/renderer/light/GPUViewLightContext.js +0 -62
- 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
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts +0 -27
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +0 -125
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts +0 -7
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.js +0 -41
- package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.d.ts +0 -2
- package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.js +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts +0 -3
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.js +0 -7
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts +0 -24
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.js +0 -103
- package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.d.ts +0 -8
- package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.js +0 -34
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.d.ts +0 -10
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.js +0 -64
- package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts +0 -11
- package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/decode_tile_address.js +0 -34
- package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.d.ts +0 -2
- package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.js +0 -11
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts +0 -20
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.js +0 -187
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts +0 -25
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.js +0 -220
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts +0 -19
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.js +0 -115
- package/src/shade/renderer/texture/encode/ENCODE_NOTES_2026_09_02.md +0 -462
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { apply_impulse_to_body_oriented } from "./apply_impulse_to_body.js";
|
|
2
2
|
import { v3_quaternion_apply } from "../../../core/geom/vec3/v3_quaternion_apply.js";
|
|
3
|
-
import {
|
|
3
|
+
import { v3_quaternion_apply_inverse_array } from "../../../core/geom/vec3/v3_quaternion_apply_inverse.js";
|
|
4
4
|
import { body_id_index } from "../body/BodyStorage.js";
|
|
5
5
|
import {
|
|
6
6
|
SBS_AV_X,
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
import { CONTACT_FLAG_SENSOR, CONTACT_FLAGS_OFFSET, CONTACT_STRIDE } from "../contact/ManifoldStore.js";
|
|
23
23
|
import { BodyKind } from "../ecs/BodyKind.js";
|
|
24
24
|
import { body_is_wholly_sensor } from "../ecs/is_sensor.js";
|
|
25
|
-
import {
|
|
25
|
+
import { angular_effective_mass_array, world_inverse_inertia_apply_array } from "../inertia/world_inverse_inertia.js";
|
|
26
26
|
import { redetect_pair_geometry } from "../narrowphase/narrowphase_step.js";
|
|
27
27
|
import { friction_cone_clamp } from "./friction_cone.js";
|
|
28
28
|
|
|
@@ -43,7 +43,7 @@ import { friction_cone_clamp } from "./friction_cone.js";
|
|
|
43
43
|
* solve_velocity(manifolds, system, iters) // non-penetration + friction
|
|
44
44
|
* solve_position(manifolds, system, pos_iters)
|
|
45
45
|
* (system integrates position by h, folding pseudo-velocity)
|
|
46
|
-
* apply_restitution(manifolds, system)
|
|
46
|
+
* apply_restitution(manifolds, system, passes) // after the loop
|
|
47
47
|
*
|
|
48
48
|
* The three concerns are fully decoupled (Phases 1–2) and substepping
|
|
49
49
|
* (Phase 3) re-runs only the velocity + position solve per substep —
|
|
@@ -53,6 +53,23 @@ import { friction_cone_clamp } from "./friction_cone.js";
|
|
|
53
53
|
* adapts as the stack settles (the mechanism behind TGS stack stability)
|
|
54
54
|
* without paying for narrowphase N times.
|
|
55
55
|
*
|
|
56
|
+
* Only the penetration moves. The rest of a row — its lever arms, and the
|
|
57
|
+
* orientation each body's world inverse inertia is evaluated at — is fixed
|
|
58
|
+
* at prepare for the whole outer step, because the row's effective mass is
|
|
59
|
+
* computed from exactly those once, at prepare. Every pass (warm start,
|
|
60
|
+
* biased solve, relax, restitution, position) applies its impulse through
|
|
61
|
+
* the same Jacobian and inertia the mass was built from. Let either drift
|
|
62
|
+
* under a fixed mass and each Gauss-Seidel update over-corrects by
|
|
63
|
+
* K_applied / K_prepared; past 2 the iteration diverges — a box knocked out
|
|
64
|
+
* from under a stack (levers following the contact metres past both bodies)
|
|
65
|
+
* or a long body spinning flat (world inertia turning over within the step)
|
|
66
|
+
* gained energy by factors of 1e11 and more. Box3D does the same: "fixed
|
|
67
|
+
* anchor points for applying impulses" (`cp->rA`, `cp->rB`) and the
|
|
68
|
+
* prepare-time `invInertiaWorld` (contact_solver.c). Concave pairs re-detect
|
|
69
|
+
* their levers every substep, and take the orientations at that same pose and
|
|
70
|
+
* recompute their masses from both: the row is re-prepared, whole, at the
|
|
71
|
+
* substep, and fixed from there to the next re-detect.
|
|
72
|
+
*
|
|
56
73
|
* Why staged module functions sharing module scratch, rather than one call:
|
|
57
74
|
* the substep loop interleaves solver stages with whole-body integration
|
|
58
75
|
* that lives in the system. The stages communicate through module-scoped
|
|
@@ -114,7 +131,7 @@ const DEFAULT_POSITION_ITERATIONS = 2;
|
|
|
114
131
|
* micro-jitter at near-zero overlap.
|
|
115
132
|
* @type {number}
|
|
116
133
|
*/
|
|
117
|
-
const PENETRATION_SLOP = 0.005;
|
|
134
|
+
export const PENETRATION_SLOP = 0.005;
|
|
118
135
|
|
|
119
136
|
/**
|
|
120
137
|
* SPOOK contact stiffness `k`. Effectively infinite for rigid-body
|
|
@@ -144,11 +161,12 @@ const CONTACT_RELAXATION = 4.75;
|
|
|
144
161
|
const MAX_POSITION_BIAS = 3;
|
|
145
162
|
|
|
146
163
|
/**
|
|
147
|
-
*
|
|
148
|
-
* resting stacks)
|
|
164
|
+
* Default approach speed, m/s, below which restitution is suppressed (no
|
|
165
|
+
* micro-bounce buzz on resting stacks) — the default of
|
|
166
|
+
* `PhysicsSystem.restitutionThreshold`, which is what the solver reads.
|
|
149
167
|
* @type {number}
|
|
150
168
|
*/
|
|
151
|
-
const RESTITUTION_VELOCITY_THRESHOLD = 1.0;
|
|
169
|
+
export const RESTITUTION_VELOCITY_THRESHOLD = 1.0;
|
|
152
170
|
|
|
153
171
|
/**
|
|
154
172
|
* Box2D-v3 soft-constraint scales (`b2MakeSoft`) for a damped spring of
|
|
@@ -196,11 +214,12 @@ const g_soft_dyn = new Float64Array([1, 0, 0]);
|
|
|
196
214
|
const g_soft_static = new Float64Array([1, 0, 0]);
|
|
197
215
|
|
|
198
216
|
/**
|
|
199
|
-
* Per-contact pre-step scratch stride:
|
|
217
|
+
* Per-contact pre-step scratch stride: 34 doubles.
|
|
200
218
|
* 0..2 : localWA (A's contact witness, in A's LOCAL frame — constant)
|
|
201
219
|
* 3..5 : localWB (B's contact witness, in B's LOCAL frame — constant)
|
|
202
|
-
* 6..8 : rA (lever from A's COM to the contact midpoint —
|
|
203
|
-
*
|
|
220
|
+
* 6..8 : rA (lever from A's COM to the contact midpoint — fixed at prepare;
|
|
221
|
+
* concave contacts re-detect it each substep)
|
|
222
|
+
* 9..11: rB (lever from B's COM to the contact midpoint — likewise)
|
|
204
223
|
* 12..14: t1 (tangent 1, unit, world — constant)
|
|
205
224
|
* 15..17: t2 (tangent 2, unit, world — constant)
|
|
206
225
|
* 18 : m_eff_n
|
|
@@ -211,16 +230,29 @@ const g_soft_static = new Float64Array([1, 0, 0]);
|
|
|
211
230
|
* 23 : soft_mass_scale (soft-contact velocity scale — 1 when hard)
|
|
212
231
|
* 24 : soft_imp_scale (soft-contact impulse-decay scale — 0 when hard)
|
|
213
232
|
* 25 : soft_bias_rate (penetration-bias rate — 0 when hard)
|
|
233
|
+
* 26..29: qA (A's orientation at prepare — what A's world inverse inertia
|
|
234
|
+
* is evaluated at for the whole step; concave contacts
|
|
235
|
+
* re-take it each substep with their levers)
|
|
236
|
+
* 30..33: qB (B's, likewise)
|
|
214
237
|
*
|
|
215
238
|
* `localWA` / `localWB` are the per-body contact witnesses expressed in body
|
|
216
239
|
* local frames at prepare time. Each substep, `refresh_contacts` rotates
|
|
217
240
|
* them back to world by the body's current pose to recover the moved contact
|
|
218
|
-
* points
|
|
219
|
-
* prepare-time depth via a delta, so it's sign-robust)
|
|
220
|
-
*
|
|
241
|
+
* points and re-derives the current penetration depth (anchored on the trusted
|
|
242
|
+
* prepare-time depth via a delta, so it's sign-robust) and the position bias.
|
|
243
|
+
* The levers, the orientations and the effective masses built from them stay
|
|
244
|
+
* as prepared (see the file header).
|
|
221
245
|
* @type {number}
|
|
222
246
|
*/
|
|
223
|
-
const PRE_STRIDE =
|
|
247
|
+
const PRE_STRIDE = 34;
|
|
248
|
+
|
|
249
|
+
/** Offset of `qA` within a contact's pre span; `qB` follows at +4. */
|
|
250
|
+
const PRE_QA = 26;
|
|
251
|
+
const PRE_QB = 30;
|
|
252
|
+
|
|
253
|
+
/** Offset of the lever `rA` within a contact's pre span; `rB` follows at +3. */
|
|
254
|
+
const PRE_RA = 6;
|
|
255
|
+
const PRE_RB = 9;
|
|
224
256
|
|
|
225
257
|
/** Per-contact index list — 4 uint32 per contact: slot, idx, idxA, idxB. */
|
|
226
258
|
const INDEX_STRIDE = 4;
|
|
@@ -239,21 +271,46 @@ let scratch_mu = new Float64Array(64);
|
|
|
239
271
|
let scratch_pos_jn = new Float64Array(64);
|
|
240
272
|
|
|
241
273
|
/**
|
|
242
|
-
* Per-contact
|
|
243
|
-
*
|
|
244
|
-
*
|
|
245
|
-
* {@link apply_restitution}.
|
|
274
|
+
* Per-contact total normal impulse over the outer step (Box3D
|
|
275
|
+
* `totalNormalImpulse`): the normal impulse the contact delivered, then grown
|
|
276
|
+
* by every restitution pass's impulse. Reset in {@link prepare_contacts},
|
|
277
|
+
* summed in {@link solve_velocity} and {@link apply_restitution}.
|
|
246
278
|
*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
*
|
|
252
|
-
*
|
|
253
|
-
*
|
|
279
|
+
* A substep warm-starts the contact with its accumulated impulse and the
|
|
280
|
+
* velocity solve adjusts it, so the impulse the contact delivers in a substep
|
|
281
|
+
* is the accumulated value the substep ends on: {@link solve_velocity} adds
|
|
282
|
+
* that once per substep, at the end of the relax pass (soft contacts) or of
|
|
283
|
+
* the solve (hard). Box3D adds the value after its solve AND after its relax,
|
|
284
|
+
* about twice the delivered impulse, and a cap built on that rarely binds:
|
|
285
|
+
* counted that way here, it bound in 0 of 814 armed checks over ten
|
|
286
|
+
* restitution scenes at 2 passes, and a tumbling cube striking frictionless
|
|
287
|
+
* ground at e = 1 in zero gravity with one pass left with up to 7.0% more
|
|
288
|
+
* kinetic energy than it struck with (13 of 300 strikes gaining over 0.5%).
|
|
289
|
+
* Counted once per substep, it binds where a pass overshoots and the worst
|
|
290
|
+
* strike gains 0.2%. (Under gravity a landing's depth correction adds energy
|
|
291
|
+
* the cap does not see; see `PhysicsSystem.restitutionIterations`.)
|
|
292
|
+
*
|
|
293
|
+
* It is also the restitution gate: a contact bounces only if it *was*
|
|
294
|
+
* compressive at some point in the step, even if its accumulated impulse later
|
|
295
|
+
* relaxed back to ~0 — a transient collision (ball bouncing, head-on hit)
|
|
296
|
+
* under per-substep warm-start ends the loop with `j_n ≈ 0` because there's
|
|
297
|
+
* no sustained load to hold the impulse up. (The peak accumulated impulse, an
|
|
298
|
+
* earlier measure, understated the compression: capped on it, a cube dropped
|
|
299
|
+
* flat onto a cube resting on the floor at e = 0.8 rebounded at 3.32 m/s of
|
|
300
|
+
* the 3.53 m/s it is owed, however many passes ran.)
|
|
301
|
+
* @type {Float64Array}
|
|
302
|
+
*/
|
|
303
|
+
let scratch_total_jn = new Float64Array(64);
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Per-contact restitution impulse (Box3D `restitutionImpulse`): the part of
|
|
307
|
+
* {@link apply_restitution}'s impulse that went past stopping what was left of
|
|
308
|
+
* the approach, i.e. into sending the bodies apart. `total − restitution` is
|
|
309
|
+
* the compression impulse a bounce may return `e` times of, and no more.
|
|
310
|
+
* Reset at the start of {@link apply_restitution}.
|
|
254
311
|
* @type {Float64Array}
|
|
255
312
|
*/
|
|
256
|
-
let
|
|
313
|
+
let scratch_rest_jn = new Float64Array(64);
|
|
257
314
|
|
|
258
315
|
/**
|
|
259
316
|
* Per-contact flag: 1 if the contact's pair involves a concave body, else 0.
|
|
@@ -265,6 +322,22 @@ let scratch_max_jn = new Float64Array(64);
|
|
|
265
322
|
*/
|
|
266
323
|
let scratch_concave = new Uint8Array(64);
|
|
267
324
|
|
|
325
|
+
/**
|
|
326
|
+
* Per-contact: which side of the pair the solver cannot move (zero inverse mass — static,
|
|
327
|
+
* kinematic, or a sleeping neighbour) while the other side it can: {@link IMMOVABLE_NONE},
|
|
328
|
+
* {@link IMMOVABLE_A} or {@link IMMOVABLE_B}. Filled by {@link prepare_contacts}; read by
|
|
329
|
+
* {@link refresh_contacts}, which lets that side's lever follow the movable side (see there).
|
|
330
|
+
* @type {Uint8Array}
|
|
331
|
+
*/
|
|
332
|
+
let scratch_immovable = new Uint8Array(64);
|
|
333
|
+
|
|
334
|
+
/** Both sides move, or neither does. */
|
|
335
|
+
const IMMOVABLE_NONE = 0;
|
|
336
|
+
/** Body A has zero inverse mass, body B does not. */
|
|
337
|
+
const IMMOVABLE_A = 1;
|
|
338
|
+
/** Body B has zero inverse mass, body A does not. */
|
|
339
|
+
const IMMOVABLE_B = 2;
|
|
340
|
+
|
|
268
341
|
/**
|
|
269
342
|
* Distinct concave-involved manifold slots touched this step, with the body
|
|
270
343
|
* indices needed to fetch their collider lists for re-detection. Parallel
|
|
@@ -288,6 +361,9 @@ let g_spook_eps = 0;
|
|
|
288
361
|
/** Scratch for re-deriving contact world points in {@link refresh_contacts}. */
|
|
289
362
|
const scratch_cp = new Float64Array(6);
|
|
290
363
|
|
|
364
|
+
/** A contact pair's two orientations, A's then B's, for the witness anchors in {@link prepare_contacts}. */
|
|
365
|
+
const scratch_orientations = new Float64Array(8);
|
|
366
|
+
|
|
291
367
|
function ensure_capacity(n) {
|
|
292
368
|
if (scratch_pre.length < n * PRE_STRIDE) {
|
|
293
369
|
scratch_pre = new Float64Array(n * PRE_STRIDE * 2);
|
|
@@ -301,11 +377,13 @@ function ensure_capacity(n) {
|
|
|
301
377
|
if (scratch_pos_jn.length < n) {
|
|
302
378
|
scratch_pos_jn = new Float64Array(n * 2);
|
|
303
379
|
}
|
|
304
|
-
if (
|
|
305
|
-
|
|
380
|
+
if (scratch_total_jn.length < n) {
|
|
381
|
+
scratch_total_jn = new Float64Array(n * 2);
|
|
382
|
+
scratch_rest_jn = new Float64Array(n * 2);
|
|
306
383
|
}
|
|
307
384
|
if (scratch_concave.length < n) {
|
|
308
385
|
scratch_concave = new Uint8Array(n * 2);
|
|
386
|
+
scratch_immovable = new Uint8Array(n * 2);
|
|
309
387
|
}
|
|
310
388
|
}
|
|
311
389
|
|
|
@@ -334,13 +412,19 @@ function ensure_concave_slot_capacity(n) {
|
|
|
334
412
|
/**
|
|
335
413
|
* Build an orthonormal tangent basis perpendicular to a unit normal.
|
|
336
414
|
*
|
|
415
|
+
* The normal is read from an array: this is not inlined into its callers, and
|
|
416
|
+
* a call that is not inlined boxes every number passed to it.
|
|
417
|
+
*
|
|
337
418
|
* @param {Float64Array} out 6 floats: t1.xyz then t2.xyz
|
|
338
419
|
* @param {number} off
|
|
339
|
-
* @param {
|
|
340
|
-
* @param {number}
|
|
341
|
-
* @param {number} nz
|
|
420
|
+
* @param {Float64Array} normal
|
|
421
|
+
* @param {number} normal_offset where in `normal` its x is, y and z following
|
|
342
422
|
*/
|
|
343
|
-
function build_tangents(out, off,
|
|
423
|
+
function build_tangents(out, off, normal, normal_offset) {
|
|
424
|
+
const nx = normal[normal_offset];
|
|
425
|
+
const ny = normal[normal_offset + 1];
|
|
426
|
+
const nz = normal[normal_offset + 2];
|
|
427
|
+
|
|
344
428
|
const ax = nx < 0 ? -nx : nx;
|
|
345
429
|
const ay = ny < 0 ? -ny : ny;
|
|
346
430
|
const az = nz < 0 ? -nz : nz;
|
|
@@ -394,57 +478,73 @@ const scratch_clamp = new Float64Array(2);
|
|
|
394
478
|
const scratch_inertia_a = new Float64Array(3);
|
|
395
479
|
const scratch_inertia_b = new Float64Array(3);
|
|
396
480
|
|
|
481
|
+
/**
|
|
482
|
+
* The impulse a row applies to both of its bodies, handed to {@link apply_impulse_to_body_oriented} in
|
|
483
|
+
* an array: a call it is not inlined into would box three loose numbers per body.
|
|
484
|
+
*/
|
|
485
|
+
const scratch_impulse = new Float64Array(3);
|
|
486
|
+
|
|
397
487
|
|
|
398
488
|
/**
|
|
399
489
|
* Apply a position-pass impulse `P` at body-relative offset `r` to the
|
|
400
490
|
* body's pseudo-velocity (linear + angular) in the `pseudo_velocity` flat
|
|
401
|
-
* buffer. Mirrors {@link
|
|
402
|
-
* by `integrate_position` the same substep and never persists.
|
|
403
|
-
* inertia
|
|
491
|
+
* buffer. Mirrors {@link apply_impulse_to_body_oriented} but the result is
|
|
492
|
+
* consumed by `integrate_position` the same substep and never persists. The
|
|
493
|
+
* inverse mass and inverse-inertia diagonal are read from the body's
|
|
494
|
+
* {@link SolverBodyState} span, the orientation it is evaluated at is the
|
|
495
|
+
* contact's prepared one. Lever and impulse come in arrays, for the reason
|
|
496
|
+
* {@link apply_impulse_to_body_oriented} gives.
|
|
404
497
|
*
|
|
405
498
|
* @param {Float64Array} pseudo_velocity stride = {@link PSEUDO_STRIDE}
|
|
406
499
|
* @param {number} pbase offset = `body_index * PSEUDO_STRIDE`
|
|
407
500
|
* @param {Float64Array} ss solver-body-state data array
|
|
408
501
|
* @param {number} sbase `body_index * SBS_STRIDE`
|
|
409
|
-
* @param {
|
|
410
|
-
* @param {number}
|
|
411
|
-
* @param {
|
|
412
|
-
* @param {number}
|
|
413
|
-
* @param {
|
|
414
|
-
* @param {number}
|
|
415
|
-
* @param {number} Pz
|
|
502
|
+
* @param {Float64Array} rotation holds the orientation at prepare, a unit quaternion
|
|
503
|
+
* @param {number} rotation_offset
|
|
504
|
+
* @param {Float64Array} lever
|
|
505
|
+
* @param {number} lever_offset
|
|
506
|
+
* @param {Float64Array} impulse
|
|
507
|
+
* @param {number} impulse_offset
|
|
416
508
|
* @param {number} sign +1 for body A, -1 for body B
|
|
417
509
|
* @param {Float64Array} scratch_inertia
|
|
418
510
|
*/
|
|
419
511
|
function apply_impulse_to_pseudo(
|
|
420
512
|
pseudo_velocity, pbase,
|
|
421
|
-
ss, sbase,
|
|
422
|
-
|
|
423
|
-
|
|
513
|
+
ss, sbase,
|
|
514
|
+
rotation, rotation_offset,
|
|
515
|
+
lever, lever_offset,
|
|
516
|
+
impulse, impulse_offset,
|
|
424
517
|
sign,
|
|
425
518
|
scratch_inertia
|
|
426
519
|
) {
|
|
520
|
+
const invM = ss[sbase + SBS_INV_MASS];
|
|
521
|
+
|
|
427
522
|
if (invM === 0) {
|
|
428
523
|
return;
|
|
429
524
|
}
|
|
430
525
|
|
|
431
|
-
const sPx = sign *
|
|
432
|
-
const sPy = sign *
|
|
433
|
-
const sPz = sign *
|
|
526
|
+
const sPx = sign * impulse[impulse_offset];
|
|
527
|
+
const sPy = sign * impulse[impulse_offset + 1];
|
|
528
|
+
const sPz = sign * impulse[impulse_offset + 2];
|
|
434
529
|
|
|
435
530
|
pseudo_velocity[pbase] += sPx * invM;
|
|
436
531
|
pseudo_velocity[pbase + 1] += sPy * invM;
|
|
437
532
|
pseudo_velocity[pbase + 2] += sPz * invM;
|
|
438
533
|
|
|
439
|
-
const
|
|
440
|
-
const
|
|
441
|
-
const
|
|
534
|
+
const rx = lever[lever_offset];
|
|
535
|
+
const ry = lever[lever_offset + 1];
|
|
536
|
+
const rz = lever[lever_offset + 2];
|
|
537
|
+
|
|
538
|
+
// the torque r x P, transformed in place by the world inverse inertia
|
|
539
|
+
scratch_inertia[0] = ry * sPz - rz * sPy;
|
|
540
|
+
scratch_inertia[1] = rz * sPx - rx * sPz;
|
|
541
|
+
scratch_inertia[2] = rx * sPy - ry * sPx;
|
|
442
542
|
|
|
443
|
-
|
|
543
|
+
world_inverse_inertia_apply_array(
|
|
444
544
|
scratch_inertia, 0,
|
|
445
|
-
ss
|
|
446
|
-
|
|
447
|
-
|
|
545
|
+
ss, sbase + SBS_INV_I_X,
|
|
546
|
+
rotation, rotation_offset,
|
|
547
|
+
scratch_inertia, 0
|
|
448
548
|
);
|
|
449
549
|
|
|
450
550
|
pseudo_velocity[pbase + 3] += scratch_inertia[0];
|
|
@@ -454,45 +554,94 @@ function apply_impulse_to_pseudo(
|
|
|
454
554
|
|
|
455
555
|
/**
|
|
456
556
|
* Quadratic-form contribution of one body to the constraint effective mass
|
|
457
|
-
* along a unit axis: `(r × axis)^T · I⁻¹_world · (r × axis)
|
|
458
|
-
*
|
|
459
|
-
*
|
|
460
|
-
*
|
|
557
|
+
* along a unit axis: `(r × axis)^T · I⁻¹_world · (r × axis)`, with `I⁻¹_world`
|
|
558
|
+
* evaluated at orientation `q` — the contact's prepared one, the same the
|
|
559
|
+
* row's impulses are applied through. Reads the body's inverse-inertia
|
|
560
|
+
* diagonal from its {@link SolverBodyState} span. Non-dynamic bodies carry a
|
|
561
|
+
* zero inverse-inertia diagonal there, so the zero-guard gives 0 for them —
|
|
562
|
+
* matching the object path's `kind` guard.
|
|
461
563
|
*
|
|
564
|
+
* Inputs come in arrays and the contribution goes out through `result`: six
|
|
565
|
+
* of these run per contact, more than V8 will inline into one function, and a
|
|
566
|
+
* call that is not inlined boxes every number passed to it or returned.
|
|
567
|
+
*
|
|
568
|
+
* @param {Float64Array} result receives the contribution at `result_offset`
|
|
569
|
+
* @param {number} result_offset
|
|
462
570
|
* @param {Float64Array} ss solver-body-state data array
|
|
463
571
|
* @param {number} base `body_index * SBS_STRIDE`
|
|
464
|
-
* @param {
|
|
465
|
-
* @param {number}
|
|
466
|
-
* @param {
|
|
467
|
-
* @param {number}
|
|
468
|
-
* @param {
|
|
469
|
-
* @param {number}
|
|
572
|
+
* @param {Float64Array} rotation holds the orientation at prepare, a unit quaternion
|
|
573
|
+
* @param {number} rotation_offset
|
|
574
|
+
* @param {Float64Array} lever
|
|
575
|
+
* @param {number} lever_offset
|
|
576
|
+
* @param {Float64Array} axis
|
|
577
|
+
* @param {number} axis_offset
|
|
470
578
|
* @param {Float64Array} scratch_inertia
|
|
471
|
-
* @returns {number}
|
|
472
579
|
*/
|
|
473
580
|
function angular_jacobian_contribution(
|
|
581
|
+
result, result_offset,
|
|
474
582
|
ss, base,
|
|
475
|
-
|
|
476
|
-
|
|
583
|
+
rotation, rotation_offset,
|
|
584
|
+
lever, lever_offset,
|
|
585
|
+
axis, axis_offset,
|
|
477
586
|
scratch_inertia
|
|
478
587
|
) {
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
if (iix === 0 && iiy === 0 && iiz === 0) {
|
|
484
|
-
return 0;
|
|
588
|
+
if (ss[base + SBS_INV_I_X] === 0 && ss[base + SBS_INV_I_Y] === 0 && ss[base + SBS_INV_I_Z] === 0) {
|
|
589
|
+
result[result_offset] = 0;
|
|
590
|
+
return;
|
|
485
591
|
}
|
|
486
592
|
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
ss
|
|
490
|
-
|
|
491
|
-
|
|
593
|
+
angular_effective_mass_array(
|
|
594
|
+
result, result_offset,
|
|
595
|
+
ss, base + SBS_INV_I_X,
|
|
596
|
+
rotation, rotation_offset,
|
|
597
|
+
lever, lever_offset,
|
|
598
|
+
axis, axis_offset,
|
|
492
599
|
scratch_inertia
|
|
493
600
|
);
|
|
494
601
|
}
|
|
495
602
|
|
|
603
|
+
/**
|
|
604
|
+
* Effective-mass contributions of one contact's two bodies, written by
|
|
605
|
+
* {@link prepare_row_masses}: A·n, B·n, A·t1, B·t1, A·t2, B·t2.
|
|
606
|
+
*/
|
|
607
|
+
const scratch_row_mass = new Float64Array(6);
|
|
608
|
+
|
|
609
|
+
/**
|
|
610
|
+
* The three effective masses of a contact's rows (normal, tangent 1, tangent 2)
|
|
611
|
+
* from its prepared levers, orientations and tangents and its normal, into the
|
|
612
|
+
* pre span (lanes 18..20). The normal row is softened by the SPOOK `eps`.
|
|
613
|
+
*
|
|
614
|
+
* @param {Float64Array} pre
|
|
615
|
+
* @param {number} pre_off
|
|
616
|
+
* @param {Float64Array} ss solver-body-state data array
|
|
617
|
+
* @param {number} baseA
|
|
618
|
+
* @param {number} baseB
|
|
619
|
+
* @param {Float64Array} data the manifold store's buffer, holding the normal
|
|
620
|
+
* @param {number} normal_offset where in `data` the contact normal's x is
|
|
621
|
+
*/
|
|
622
|
+
function prepare_row_masses(pre, pre_off, ss, baseA, baseB, data, normal_offset) {
|
|
623
|
+
const mass = scratch_row_mass;
|
|
624
|
+
|
|
625
|
+
angular_jacobian_contribution(mass, 0, ss, baseA, pre, pre_off + PRE_QA, pre, pre_off + PRE_RA, data, normal_offset, scratch_inertia_a);
|
|
626
|
+
angular_jacobian_contribution(mass, 1, ss, baseB, pre, pre_off + PRE_QB, pre, pre_off + PRE_RB, data, normal_offset, scratch_inertia_b);
|
|
627
|
+
angular_jacobian_contribution(mass, 2, ss, baseA, pre, pre_off + PRE_QA, pre, pre_off + PRE_RA, pre, pre_off + 12, scratch_inertia_a);
|
|
628
|
+
angular_jacobian_contribution(mass, 3, ss, baseB, pre, pre_off + PRE_QB, pre, pre_off + PRE_RB, pre, pre_off + 12, scratch_inertia_b);
|
|
629
|
+
angular_jacobian_contribution(mass, 4, ss, baseA, pre, pre_off + PRE_QA, pre, pre_off + PRE_RA, pre, pre_off + 15, scratch_inertia_a);
|
|
630
|
+
angular_jacobian_contribution(mass, 5, ss, baseB, pre, pre_off + PRE_QB, pre, pre_off + PRE_RB, pre, pre_off + 15, scratch_inertia_b);
|
|
631
|
+
|
|
632
|
+
const invMA = ss[baseA + SBS_INV_MASS];
|
|
633
|
+
const invMB = ss[baseB + SBS_INV_MASS];
|
|
634
|
+
|
|
635
|
+
const k_n = invMA + invMB + mass[0] + mass[1];
|
|
636
|
+
const k_t1 = invMA + invMB + mass[2] + mass[3];
|
|
637
|
+
const k_t2 = invMA + invMB + mass[4] + mass[5];
|
|
638
|
+
|
|
639
|
+
const k_n_eff = k_n + g_spook_eps;
|
|
640
|
+
pre[pre_off + 18] = k_n_eff > 0 ? 1 / k_n_eff : 0;
|
|
641
|
+
pre[pre_off + 19] = k_t1 > 0 ? 1 / k_t1 : 0;
|
|
642
|
+
pre[pre_off + 20] = k_t2 > 0 ? 1 / k_t2 : 0;
|
|
643
|
+
}
|
|
644
|
+
|
|
496
645
|
/**
|
|
497
646
|
* Flat count of all touched contacts across every island, plus the slot
|
|
498
647
|
* list to iterate. Islands are concatenated densely in `contact_data`;
|
|
@@ -642,7 +791,14 @@ export function prepare_contacts(manifolds, system, dt_sub) {
|
|
|
642
791
|
|
|
643
792
|
const pAx = trA.translation_x, pAy = trA.translation_y, pAz = trA.translation_z;
|
|
644
793
|
const pBx = trB.translation_x, pBy = trB.translation_y, pBz = trB.translation_z;
|
|
645
|
-
|
|
794
|
+
|
|
795
|
+
// The two orientations the witnesses are taken into the bodies' frames by, in an array (see
|
|
796
|
+
// the witness anchors below).
|
|
797
|
+
const orientations = scratch_orientations;
|
|
798
|
+
orientations[0] = trA.rotation_x; orientations[1] = trA.rotation_y;
|
|
799
|
+
orientations[2] = trA.rotation_z; orientations[3] = trA.rotation_w;
|
|
800
|
+
orientations[4] = trB.rotation_x; orientations[5] = trB.rotation_y;
|
|
801
|
+
orientations[6] = trB.rotation_z; orientations[7] = trB.rotation_w;
|
|
646
802
|
|
|
647
803
|
for (let k = 0; k < cc; k++) {
|
|
648
804
|
const off = slot_off + k * CONTACT_STRIDE;
|
|
@@ -676,12 +832,18 @@ export function prepare_contacts(manifolds, system, dt_sub) {
|
|
|
676
832
|
const pre_off = c * PRE_STRIDE;
|
|
677
833
|
|
|
678
834
|
// Per-body witness anchors in LOCAL frame (constant across the
|
|
679
|
-
// outer step). localW = R⁻¹ · (witness − COM).
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
//
|
|
684
|
-
|
|
835
|
+
// outer step). localW = R⁻¹ · (witness − COM). The offsets are
|
|
836
|
+
// staged in the pre span itself and rotated in place, through
|
|
837
|
+
// the array form: this function's inlining budget is spent, and
|
|
838
|
+
// the scalar form, not inlined, boxed its seven numbers twice
|
|
839
|
+
// per contact.
|
|
840
|
+
pre[pre_off] = wax - pAx; pre[pre_off + 1] = way - pAy; pre[pre_off + 2] = waz - pAz;
|
|
841
|
+
pre[pre_off + 3] = wbx - pBx; pre[pre_off + 4] = wby - pBy; pre[pre_off + 5] = wbz - pBz;
|
|
842
|
+
v3_quaternion_apply_inverse_array(pre, pre_off, pre, pre_off, orientations, 0);
|
|
843
|
+
v3_quaternion_apply_inverse_array(pre, pre_off + 3, pre, pre_off + 3, orientations, 4);
|
|
844
|
+
|
|
845
|
+
// Lever arms from COM to the contact midpoint, fixed for the step
|
|
846
|
+
// (concave contacts re-detect theirs each substep).
|
|
685
847
|
pre[pre_off + 6] = rax;
|
|
686
848
|
pre[pre_off + 7] = ray;
|
|
687
849
|
pre[pre_off + 8] = raz;
|
|
@@ -689,24 +851,22 @@ export function prepare_contacts(manifolds, system, dt_sub) {
|
|
|
689
851
|
pre[pre_off + 10] = rby;
|
|
690
852
|
pre[pre_off + 11] = rbz;
|
|
691
853
|
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
const
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
pre
|
|
708
|
-
pre[pre_off + 19] = k_t1 > 0 ? 1 / k_t1 : 0;
|
|
709
|
-
pre[pre_off + 20] = k_t2 > 0 ? 1 / k_t2 : 0;
|
|
854
|
+
// Orientations each body's world inverse inertia is evaluated at for
|
|
855
|
+
// the whole step: by the masses below and by every impulse this row
|
|
856
|
+
// applies, whatever the substeps do to the pose meanwhile.
|
|
857
|
+
const qAx = ss[baseA + SBS_QX], qAy = ss[baseA + SBS_QY], qAz = ss[baseA + SBS_QZ], qAw = ss[baseA + SBS_QW];
|
|
858
|
+
const qBx = ss[baseB + SBS_QX], qBy = ss[baseB + SBS_QY], qBz = ss[baseB + SBS_QZ], qBw = ss[baseB + SBS_QW];
|
|
859
|
+
pre[pre_off + PRE_QA] = qAx;
|
|
860
|
+
pre[pre_off + PRE_QA + 1] = qAy;
|
|
861
|
+
pre[pre_off + PRE_QA + 2] = qAz;
|
|
862
|
+
pre[pre_off + PRE_QA + 3] = qAw;
|
|
863
|
+
pre[pre_off + PRE_QB] = qBx;
|
|
864
|
+
pre[pre_off + PRE_QB + 1] = qBy;
|
|
865
|
+
pre[pre_off + PRE_QB + 2] = qBz;
|
|
866
|
+
pre[pre_off + PRE_QB + 3] = qBw;
|
|
867
|
+
|
|
868
|
+
build_tangents(pre, pre_off + 12, data, off + 6);
|
|
869
|
+
prepare_row_masses(pre, pre_off, ss, baseA, baseB, data, off + 6);
|
|
710
870
|
|
|
711
871
|
// Restitution approach velocity (captured once, this is the
|
|
712
872
|
// closing speed entering the step). n is B → A; vn < 0 closing.
|
|
@@ -721,7 +881,7 @@ export function prepare_contacts(manifolds, system, dt_sub) {
|
|
|
721
881
|
const vn_pre = (vAx_at - vBx_at) * nx + (vAy_at - vBy_at) * ny + (vAz_at - vBz_at) * nz;
|
|
722
882
|
|
|
723
883
|
let rest_bias = 0;
|
|
724
|
-
if (vn_pre < -
|
|
884
|
+
if (vn_pre < -system.restitutionThreshold) {
|
|
725
885
|
rest_bias = restitution_combined * vn_pre;
|
|
726
886
|
}
|
|
727
887
|
pre[pre_off + 21] = rest_bias;
|
|
@@ -738,8 +898,11 @@ export function prepare_contacts(manifolds, system, dt_sub) {
|
|
|
738
898
|
|
|
739
899
|
mus[c] = friction_combined;
|
|
740
900
|
pos_jn[c] = 0;
|
|
741
|
-
|
|
901
|
+
scratch_total_jn[c] = 0;
|
|
742
902
|
scratch_concave[c] = slot_concave ? 1 : 0;
|
|
903
|
+
scratch_immovable[c] = invMA === 0
|
|
904
|
+
? (invMB === 0 ? IMMOVABLE_NONE : IMMOVABLE_A)
|
|
905
|
+
: (invMB === 0 ? IMMOVABLE_B : IMMOVABLE_NONE);
|
|
743
906
|
|
|
744
907
|
idx[c * INDEX_STRIDE] = slot;
|
|
745
908
|
idx[c * INDEX_STRIDE + 1] = k;
|
|
@@ -763,8 +926,8 @@ export function prepare_contacts(manifolds, system, dt_sub) {
|
|
|
763
926
|
|
|
764
927
|
/**
|
|
765
928
|
* Stage 1b (per substep) — warm-start: replay the cached accumulated
|
|
766
|
-
* impulses `(j_n, j_t1, j_t2)` onto persistent velocity
|
|
767
|
-
*
|
|
929
|
+
* impulses `(j_n, j_t1, j_t2)` onto persistent velocity through the row's
|
|
930
|
+
* lever arms, tangents and prepared orientations. Run once per substep, after
|
|
768
931
|
* {@link refresh_contacts} and before {@link solve_velocity}.
|
|
769
932
|
*
|
|
770
933
|
* Per-substep warm-start is the crux of stable TGS: the stored impulse is a
|
|
@@ -785,6 +948,7 @@ export function warm_start_contacts(manifolds, system) {
|
|
|
785
948
|
const pre = scratch_pre;
|
|
786
949
|
const idx = scratch_idx;
|
|
787
950
|
const ss = system.__solver_state.data;
|
|
951
|
+
const impulse = scratch_impulse;
|
|
788
952
|
|
|
789
953
|
for (let ci = 0; ci < count; ci++) {
|
|
790
954
|
const slot = idx[ci * INDEX_STRIDE];
|
|
@@ -793,14 +957,8 @@ export function warm_start_contacts(manifolds, system) {
|
|
|
793
957
|
const baseA = idx[ci * INDEX_STRIDE + 2] * SBS_STRIDE;
|
|
794
958
|
const baseB = idx[ci * INDEX_STRIDE + 3] * SBS_STRIDE;
|
|
795
959
|
|
|
796
|
-
const invMA = ss[baseA + SBS_INV_MASS];
|
|
797
|
-
const invMB = ss[baseB + SBS_INV_MASS];
|
|
798
|
-
|
|
799
960
|
const pre_off = ci * PRE_STRIDE;
|
|
800
961
|
|
|
801
|
-
const rax = pre[pre_off + 6], ray = pre[pre_off + 7], raz = pre[pre_off + 8];
|
|
802
|
-
const rbx = pre[pre_off + 9], rby = pre[pre_off + 10], rbz = pre[pre_off + 11];
|
|
803
|
-
|
|
804
962
|
const t1x = pre[pre_off + 12], t1y = pre[pre_off + 13], t1z = pre[pre_off + 14];
|
|
805
963
|
const t2x = pre[pre_off + 15], t2y = pre[pre_off + 16], t2z = pre[pre_off + 17];
|
|
806
964
|
|
|
@@ -812,12 +970,12 @@ export function warm_start_contacts(manifolds, system) {
|
|
|
812
970
|
const j_t1 = data[off + 11];
|
|
813
971
|
const j_t2 = data[off + 12];
|
|
814
972
|
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
973
|
+
impulse[0] = nx * j_n + t1x * j_t1 + t2x * j_t2;
|
|
974
|
+
impulse[1] = ny * j_n + t1y * j_t1 + t2y * j_t2;
|
|
975
|
+
impulse[2] = nz * j_n + t1z * j_t1 + t2z * j_t2;
|
|
818
976
|
|
|
819
|
-
|
|
820
|
-
|
|
977
|
+
apply_impulse_to_body_oriented(ss, baseA, pre, pre_off + PRE_QA, pre, pre_off + PRE_RA, impulse, 0, +1, scratch_inertia_a);
|
|
978
|
+
apply_impulse_to_body_oriented(ss, baseB, pre, pre_off + PRE_QB, pre, pre_off + PRE_RB, impulse, 0, -1, scratch_inertia_b);
|
|
821
979
|
}
|
|
822
980
|
}
|
|
823
981
|
|
|
@@ -832,11 +990,23 @@ export function warm_start_contacts(manifolds, system) {
|
|
|
832
990
|
* `Δseparation = (cpA − wA − (cpB − wB)) · n` is the change since prepare.
|
|
833
991
|
* Anchoring on the trusted prepare-time depth makes the sign convention
|
|
834
992
|
* irrelevant — only the analytic delta uses the anchors;
|
|
835
|
-
* - rebuild the impulse levers `rA`/`rB` from the moved midpoint;
|
|
836
993
|
* - recompute the position-correction bias from `depth_now`.
|
|
837
994
|
*
|
|
838
995
|
* The contact normal and tangents are held fixed for the outer step (valid
|
|
839
|
-
* for the small per-step rotation), so they are not recomputed here.
|
|
996
|
+
* for the small per-step rotation), so they are not recomputed here. Nor are
|
|
997
|
+
* the impulse levers `rA` / `rB`: the row's effective mass was built from the
|
|
998
|
+
* prepared ones, and the levers must stay inside the bodies — the midpoint of
|
|
999
|
+
* the moved witnesses travels at half the slip speed, so a box sliding out
|
|
1000
|
+
* from under another at 150 m/s carried it a metre past both within the step.
|
|
1001
|
+
*
|
|
1002
|
+
* Except a side with zero inverse mass (static, kinematic, asleep): its lever
|
|
1003
|
+
* enters no mass, so it is moved to where the other side's contact point now
|
|
1004
|
+
* is (that side's fixed lever from its current centre). Held at the prepared
|
|
1005
|
+
* point, a kinematic turntable's surface velocity was read along the tangent
|
|
1006
|
+
* of where the rider had been at the start of the step, for the whole step:
|
|
1007
|
+
* a box gripped at 3 m on a table at 1 rad/s crept outward 0.33 m in 10 s,
|
|
1008
|
+
* whatever the substep count. Two movable bodies keep both levers fixed, as
|
|
1009
|
+
* Box3D does for every pair; a box on a free spinning disc creeps as that did.
|
|
840
1010
|
*
|
|
841
1011
|
* @param {ManifoldStore} manifolds
|
|
842
1012
|
* @param {Transform64[]} transforms
|
|
@@ -889,12 +1059,14 @@ export function refresh_contacts(manifolds, transforms) {
|
|
|
889
1059
|
const pBy = trB.translation_y;
|
|
890
1060
|
const pBz = trB.translation_z;
|
|
891
1061
|
|
|
892
|
-
|
|
893
|
-
|
|
1062
|
+
// Read as scalars: a Transform64's `rotation` getter makes a new view on every read, and
|
|
1063
|
+
// this runs for every contact every substep.
|
|
1064
|
+
const qAx = trA.rotation_x, qAy = trA.rotation_y, qAz = trA.rotation_z, qAw = trA.rotation_w;
|
|
1065
|
+
const qBx = trB.rotation_x, qBy = trB.rotation_y, qBz = trB.rotation_z, qBw = trB.rotation_w;
|
|
894
1066
|
|
|
895
1067
|
// Current world contact points: COM + R · localWitness.
|
|
896
|
-
v3_quaternion_apply(cp, 0, pre[pre_off], pre[pre_off + 1], pre[pre_off + 2],
|
|
897
|
-
v3_quaternion_apply(cp, 3, pre[pre_off + 3], pre[pre_off + 4], pre[pre_off + 5],
|
|
1068
|
+
v3_quaternion_apply(cp, 0, pre[pre_off], pre[pre_off + 1], pre[pre_off + 2], qAx, qAy, qAz, qAw);
|
|
1069
|
+
v3_quaternion_apply(cp, 3, pre[pre_off + 3], pre[pre_off + 4], pre[pre_off + 5], qBx, qBy, qBz, qBw);
|
|
898
1070
|
|
|
899
1071
|
const cpAx = pAx + cp[0], cpAy = pAy + cp[1], cpAz = pAz + cp[2];
|
|
900
1072
|
const cpBx = pBx + cp[3], cpBy = pBy + cp[4], cpBz = pBz + cp[5];
|
|
@@ -907,17 +1079,19 @@ export function refresh_contacts(manifolds, transforms) {
|
|
|
907
1079
|
|
|
908
1080
|
const depth_now = depth0 - dsep;
|
|
909
1081
|
|
|
910
|
-
//
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
const
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
1082
|
+
// A side the solver cannot move adds nothing to the row's mass, so its lever is free: it
|
|
1083
|
+
// follows the movable side's contact point - that side's fixed lever from where its centre
|
|
1084
|
+
// is now - so a turning or moving kinematic surface is read at its velocity under the body.
|
|
1085
|
+
const immovable = scratch_immovable[ci];
|
|
1086
|
+
if (immovable === IMMOVABLE_B) {
|
|
1087
|
+
pre[pre_off + 9] = pAx + pre[pre_off + 6] - pBx;
|
|
1088
|
+
pre[pre_off + 10] = pAy + pre[pre_off + 7] - pBy;
|
|
1089
|
+
pre[pre_off + 11] = pAz + pre[pre_off + 8] - pBz;
|
|
1090
|
+
} else if (immovable === IMMOVABLE_A) {
|
|
1091
|
+
pre[pre_off + 6] = pBx + pre[pre_off + 9] - pAx;
|
|
1092
|
+
pre[pre_off + 7] = pBy + pre[pre_off + 10] - pAy;
|
|
1093
|
+
pre[pre_off + 8] = pBz + pre[pre_off + 11] - pAz;
|
|
1094
|
+
}
|
|
921
1095
|
|
|
922
1096
|
let bias_position = 0;
|
|
923
1097
|
|
|
@@ -946,8 +1120,8 @@ export function refresh_contacts(manifolds, transforms) {
|
|
|
946
1120
|
* For each concave-involved slot, re-runs the narrowphase geometry at the
|
|
947
1121
|
* current substep pose ({@link redetect_pair_geometry}, which rewrites the
|
|
948
1122
|
* manifold's witness / normal / depth in place), then re-derives the solver
|
|
949
|
-
* scratch (lever arms, tangent basis, effective masses, position
|
|
950
|
-
* that slot's contacts from the fresh geometry. This is the whole point of
|
|
1123
|
+
* scratch (lever arms, orientations, tangent basis, effective masses, position
|
|
1124
|
+
* bias) for that slot's contacts from the fresh geometry. This is the whole point of
|
|
951
1125
|
* the concave path: a body rocking on a mesh changes which triangle (and
|
|
952
1126
|
* normal) it rests on within a single outer step, and freezing that — as the
|
|
953
1127
|
* convex analytic refresh does — pumps energy in. Re-detecting gives a
|
|
@@ -961,7 +1135,7 @@ export function refresh_contacts(manifolds, transforms) {
|
|
|
961
1135
|
* with prepare.
|
|
962
1136
|
*
|
|
963
1137
|
* Must run before {@link refresh_contacts} / {@link warm_start_contacts} each
|
|
964
|
-
* substep. `rest_bias` (captured at prepare) and the `
|
|
1138
|
+
* substep. `rest_bias` (captured at prepare) and the `scratch_total_jn`
|
|
965
1139
|
* restitution gate are preserved.
|
|
966
1140
|
*
|
|
967
1141
|
* @param {ManifoldStore} manifolds
|
|
@@ -993,7 +1167,6 @@ export function redetect_concave_contacts(manifolds, system) {
|
|
|
993
1167
|
const pre = scratch_pre;
|
|
994
1168
|
const idx = scratch_idx;
|
|
995
1169
|
const spook_a = g_spook_a;
|
|
996
|
-
const spook_eps = g_spook_eps;
|
|
997
1170
|
const ss = system.__solver_state.data;
|
|
998
1171
|
|
|
999
1172
|
for (let ci = 0; ci < count; ci++) {
|
|
@@ -1012,15 +1185,11 @@ export function redetect_concave_contacts(manifolds, system) {
|
|
|
1012
1185
|
const trA = system.__transforms[idxA];
|
|
1013
1186
|
const trB = system.__transforms[idxB];
|
|
1014
1187
|
|
|
1015
|
-
const invMA = ss[baseA + SBS_INV_MASS];
|
|
1016
|
-
const invMB = ss[baseB + SBS_INV_MASS];
|
|
1017
|
-
|
|
1018
1188
|
const slot_off = manifolds.slot_data_offset(slot);
|
|
1019
1189
|
const off = slot_off + cidx * CONTACT_STRIDE;
|
|
1020
1190
|
|
|
1021
1191
|
const wax = data[off], way = data[off + 1], waz = data[off + 2];
|
|
1022
1192
|
const wbx = data[off + 3], wby = data[off + 4], wbz = data[off + 5];
|
|
1023
|
-
const nx = data[off + 6], ny = data[off + 7], nz = data[off + 8];
|
|
1024
1193
|
const depth = data[off + 9];
|
|
1025
1194
|
|
|
1026
1195
|
const px = (wax + wbx) * 0.5;
|
|
@@ -1038,24 +1207,26 @@ export function redetect_concave_contacts(manifolds, system) {
|
|
|
1038
1207
|
pre[pre_off + 10] = rby;
|
|
1039
1208
|
pre[pre_off + 11] = rbz;
|
|
1040
1209
|
|
|
1041
|
-
build_tangents(pre, pre_off + 12,
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
pre[pre_off +
|
|
1057
|
-
pre[pre_off +
|
|
1058
|
-
pre[pre_off +
|
|
1210
|
+
build_tangents(pre, pre_off + 12, data, off + 6);
|
|
1211
|
+
|
|
1212
|
+
// The levers were just detected at the substep's pose, so the row's
|
|
1213
|
+
// orientations are taken at that pose too: the mass and every impulse
|
|
1214
|
+
// until the next re-detect go through the configuration the levers
|
|
1215
|
+
// belong to. Fresh levers at the step's prepared orientation pair a
|
|
1216
|
+
// contact point with an inertia frame the body no longer has, and that
|
|
1217
|
+
// gained energy (a plank spinning flat on a mesh floor, 8 % at 60 rad/s).
|
|
1218
|
+
const qAx = ss[baseA + SBS_QX], qAy = ss[baseA + SBS_QY], qAz = ss[baseA + SBS_QZ], qAw = ss[baseA + SBS_QW];
|
|
1219
|
+
const qBx = ss[baseB + SBS_QX], qBy = ss[baseB + SBS_QY], qBz = ss[baseB + SBS_QZ], qBw = ss[baseB + SBS_QW];
|
|
1220
|
+
pre[pre_off + PRE_QA] = qAx;
|
|
1221
|
+
pre[pre_off + PRE_QA + 1] = qAy;
|
|
1222
|
+
pre[pre_off + PRE_QA + 2] = qAz;
|
|
1223
|
+
pre[pre_off + PRE_QA + 3] = qAw;
|
|
1224
|
+
pre[pre_off + PRE_QB] = qBx;
|
|
1225
|
+
pre[pre_off + PRE_QB + 1] = qBy;
|
|
1226
|
+
pre[pre_off + PRE_QB + 2] = qBz;
|
|
1227
|
+
pre[pre_off + PRE_QB + 3] = qBw;
|
|
1228
|
+
|
|
1229
|
+
prepare_row_masses(pre, pre_off, ss, baseA, baseB, data, off + 6);
|
|
1059
1230
|
|
|
1060
1231
|
if (g_contacts_soft) {
|
|
1061
1232
|
// Soft mode: lane 22 carries separation (see refresh_contacts).
|
|
@@ -1080,7 +1251,7 @@ export function redetect_concave_contacts(manifolds, system) {
|
|
|
1080
1251
|
/**
|
|
1081
1252
|
* Stage 3 (per substep) — velocity iterations enforcing pure
|
|
1082
1253
|
* non-penetration (`vn → 0`) plus Coulomb-disk friction. No bias: depth
|
|
1083
|
-
* correction is the position pass, restitution is
|
|
1254
|
+
* correction is the position pass, restitution is {@link apply_restitution}'s.
|
|
1084
1255
|
*
|
|
1085
1256
|
* @param {ManifoldStore} manifolds
|
|
1086
1257
|
* @param {PhysicsSystem} system
|
|
@@ -1095,6 +1266,14 @@ export function solve_velocity(manifolds, system, iters, use_bias = true) {
|
|
|
1095
1266
|
const idx = scratch_idx;
|
|
1096
1267
|
const mus = scratch_mu;
|
|
1097
1268
|
const ss = system.__solver_state.data;
|
|
1269
|
+
const impulse = scratch_impulse;
|
|
1270
|
+
|
|
1271
|
+
// The restitution compression measure takes the impulse each substep ends
|
|
1272
|
+
// on, once: at the last iteration of the call that closes the substep's
|
|
1273
|
+
// velocity work — the relax pass when contacts are soft, this solve when
|
|
1274
|
+
// they are hard (see scratch_total_jn).
|
|
1275
|
+
const counts_compression = !use_bias || !g_contacts_soft;
|
|
1276
|
+
const last_iter = iters - 1;
|
|
1098
1277
|
|
|
1099
1278
|
for (let iter = 0; iter < iters; iter++) {
|
|
1100
1279
|
for (let ci = 0; ci < contact_count; ci++) {
|
|
@@ -1105,9 +1284,6 @@ export function solve_velocity(manifolds, system, iters, use_bias = true) {
|
|
|
1105
1284
|
const baseA = idx[ci * INDEX_STRIDE + 2] * SBS_STRIDE;
|
|
1106
1285
|
const baseB = idx[ci * INDEX_STRIDE + 3] * SBS_STRIDE;
|
|
1107
1286
|
|
|
1108
|
-
const invMA = ss[baseA + SBS_INV_MASS];
|
|
1109
|
-
const invMB = ss[baseB + SBS_INV_MASS];
|
|
1110
|
-
|
|
1111
1287
|
const pre_off = ci * PRE_STRIDE;
|
|
1112
1288
|
|
|
1113
1289
|
const rax = pre[pre_off + 6], ray = pre[pre_off + 7], raz = pre[pre_off + 8];
|
|
@@ -1171,17 +1347,17 @@ export function solve_velocity(manifolds, system, iters, use_bias = true) {
|
|
|
1171
1347
|
const delta_j_n = new_j_n - j_n_accum;
|
|
1172
1348
|
data[off + 10] = new_j_n;
|
|
1173
1349
|
|
|
1174
|
-
if (
|
|
1175
|
-
|
|
1350
|
+
if (counts_compression && iter === last_iter) {
|
|
1351
|
+
scratch_total_jn[ci] += new_j_n;
|
|
1176
1352
|
}
|
|
1177
1353
|
|
|
1178
1354
|
if (delta_j_n !== 0) {
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1355
|
+
impulse[0] = nx * delta_j_n;
|
|
1356
|
+
impulse[1] = ny * delta_j_n;
|
|
1357
|
+
impulse[2] = nz * delta_j_n;
|
|
1182
1358
|
|
|
1183
|
-
|
|
1184
|
-
|
|
1359
|
+
apply_impulse_to_body_oriented(ss, baseA, pre, pre_off + PRE_QA, pre, pre_off + PRE_RA, impulse, 0, +1, scratch_inertia_a);
|
|
1360
|
+
apply_impulse_to_body_oriented(ss, baseB, pre, pre_off + PRE_QB, pre, pre_off + PRE_RB, impulse, 0, -1, scratch_inertia_b);
|
|
1185
1361
|
}
|
|
1186
1362
|
|
|
1187
1363
|
// --- Friction impulse (Coulomb disk in tangent plane) ---
|
|
@@ -1226,12 +1402,12 @@ export function solve_velocity(manifolds, system, iters, use_bias = true) {
|
|
|
1226
1402
|
|
|
1227
1403
|
if (delta_t1 !== 0 || delta_t2 !== 0) {
|
|
1228
1404
|
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1405
|
+
impulse[0] = t1x * delta_t1 + t2x * delta_t2;
|
|
1406
|
+
impulse[1] = t1y * delta_t1 + t2y * delta_t2;
|
|
1407
|
+
impulse[2] = t1z * delta_t1 + t2z * delta_t2;
|
|
1232
1408
|
|
|
1233
|
-
|
|
1234
|
-
|
|
1409
|
+
apply_impulse_to_body_oriented(ss, baseA, pre, pre_off + PRE_QA, pre, pre_off + PRE_RA, impulse, 0, +1, scratch_inertia_a);
|
|
1410
|
+
apply_impulse_to_body_oriented(ss, baseB, pre, pre_off + PRE_QB, pre, pre_off + PRE_RB, impulse, 0, -1, scratch_inertia_b);
|
|
1235
1411
|
|
|
1236
1412
|
}
|
|
1237
1413
|
}
|
|
@@ -1239,18 +1415,36 @@ export function solve_velocity(manifolds, system, iters, use_bias = true) {
|
|
|
1239
1415
|
}
|
|
1240
1416
|
|
|
1241
1417
|
/**
|
|
1242
|
-
* Stage 4 (
|
|
1243
|
-
*
|
|
1244
|
-
*
|
|
1245
|
-
*
|
|
1246
|
-
*
|
|
1247
|
-
*
|
|
1248
|
-
*
|
|
1418
|
+
* Stage 4 (after the substep loop) — restitution (Box3D `b3ApplyRestitution`,
|
|
1419
|
+
* Catto). `iterations` Gauss-Seidel passes over every contact whose combined
|
|
1420
|
+
* restitution is non-zero, each driving an ARMED contact's normal velocity
|
|
1421
|
+
* toward `-e · vn_approach` and holding the rest of those contacts to plain
|
|
1422
|
+
* non-penetration, so a bounce at one point does not drive another into the
|
|
1423
|
+
* ground. A contact is armed when (a) it was closing faster than
|
|
1424
|
+
* `system.restitutionThreshold` at prepare and (b) it pressed with a compressive
|
|
1425
|
+
* normal impulse during the velocity solve. The impulses accumulate into the
|
|
1426
|
+
* same normal-impulse slot so they compose with warm-start next frame.
|
|
1427
|
+
*
|
|
1428
|
+
* Why passes: a body striking at several points at once — a cube landing flat
|
|
1429
|
+
* — is a coupled problem, and one sweep leaves it unconverged. The row solved
|
|
1430
|
+
* first takes more than its share of the bounce, through the body's rotation
|
|
1431
|
+
* as well as its translation, and the body leaves the ground spinning: a cube
|
|
1432
|
+
* dropped flat on frictionless ground at e = 0.8 left at 5.2 rad/s, rebounding
|
|
1433
|
+
* at 0.77 of its impact speed.
|
|
1434
|
+
*
|
|
1435
|
+
* Why the cap: a pass that has not converged overshoots — the row solved first
|
|
1436
|
+
* sends its contact apart faster than `e` times its approach, and the body
|
|
1437
|
+
* leaves with more energy than it struck with. So each contact may return at
|
|
1438
|
+
* most `e` times the impulse it pressed with (Poisson's kinetic restitution),
|
|
1439
|
+
* measured by {@link scratch_total_jn} as the impulse it delivered. Ported
|
|
1440
|
+
* from Box3D's contact_solver.c (MIT, Erin Catto), which counts that impulse
|
|
1441
|
+
* twice per substep; see there for why this counts it once.
|
|
1249
1442
|
*
|
|
1250
1443
|
* @param {ManifoldStore} manifolds
|
|
1251
1444
|
* @param {PhysicsSystem} system
|
|
1445
|
+
* @param {number} iterations passes over the contacts; 0 applies no restitution
|
|
1252
1446
|
*/
|
|
1253
|
-
export function apply_restitution(manifolds, system) {
|
|
1447
|
+
export function apply_restitution(manifolds, system, iterations) {
|
|
1254
1448
|
const contact_count = g_contact_count;
|
|
1255
1449
|
if (contact_count === 0) return;
|
|
1256
1450
|
|
|
@@ -1258,51 +1452,77 @@ export function apply_restitution(manifolds, system) {
|
|
|
1258
1452
|
const pre = scratch_pre;
|
|
1259
1453
|
const idx = scratch_idx;
|
|
1260
1454
|
const ss = system.__solver_state.data;
|
|
1455
|
+
const total_jn = scratch_total_jn;
|
|
1456
|
+
const rest_jn = scratch_rest_jn;
|
|
1261
1457
|
|
|
1262
1458
|
for (let ci = 0; ci < contact_count; ci++) {
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
if (rest_bias === 0) continue;
|
|
1459
|
+
rest_jn[ci] = 0;
|
|
1460
|
+
}
|
|
1266
1461
|
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
// warm-start, but it WAS compressive, so it should still bounce.
|
|
1272
|
-
if (scratch_max_jn[ci] <= 0) continue;
|
|
1462
|
+
for (let pass = 0; pass < iterations; pass++) {
|
|
1463
|
+
for (let ci = 0; ci < contact_count; ci++) {
|
|
1464
|
+
const slot = idx[ci * INDEX_STRIDE];
|
|
1465
|
+
const cidx = idx[ci * INDEX_STRIDE + 1];
|
|
1273
1466
|
|
|
1274
|
-
|
|
1275
|
-
|
|
1467
|
+
const slot_off = manifolds.slot_data_offset(slot);
|
|
1468
|
+
const off = slot_off + cidx * CONTACT_STRIDE;
|
|
1276
1469
|
|
|
1277
|
-
|
|
1470
|
+
const restitution = data[off + 15];
|
|
1471
|
+
if (restitution === 0) continue;
|
|
1278
1472
|
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
const invMA = ss[baseA + SBS_INV_MASS];
|
|
1282
|
-
const invMB = ss[baseB + SBS_INV_MASS];
|
|
1473
|
+
const pre_off = ci * PRE_STRIDE;
|
|
1474
|
+
const rest_bias = pre[pre_off + 21];
|
|
1283
1475
|
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1476
|
+
// Armed only if the contact pressed at some point in the step, not
|
|
1477
|
+
// by its end-of-loop impulse: a transient collision relaxes back to
|
|
1478
|
+
// j_n ≈ 0 under per-substep warm-start, but it WAS compressive.
|
|
1479
|
+
const compression = total_jn[ci] - rest_jn[ci];
|
|
1480
|
+
const armed = rest_bias !== 0 && compression > 0;
|
|
1481
|
+
|
|
1482
|
+
const baseA = idx[ci * INDEX_STRIDE + 2] * SBS_STRIDE;
|
|
1483
|
+
const baseB = idx[ci * INDEX_STRIDE + 3] * SBS_STRIDE;
|
|
1484
|
+
|
|
1485
|
+
const rax = pre[pre_off + 6], ray = pre[pre_off + 7], raz = pre[pre_off + 8];
|
|
1486
|
+
const rbx = pre[pre_off + 9], rby = pre[pre_off + 10], rbz = pre[pre_off + 11];
|
|
1487
|
+
const m_eff_n = pre[pre_off + 18];
|
|
1488
|
+
const nx = data[off + 6], ny = data[off + 7], nz = data[off + 8];
|
|
1288
1489
|
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
const
|
|
1304
|
-
|
|
1305
|
-
|
|
1490
|
+
const vAx_at = ss[baseA + SBS_LV_X] + ss[baseA + SBS_AV_Y] * raz - ss[baseA + SBS_AV_Z] * ray;
|
|
1491
|
+
const vAy_at = ss[baseA + SBS_LV_Y] + ss[baseA + SBS_AV_Z] * rax - ss[baseA + SBS_AV_X] * raz;
|
|
1492
|
+
const vAz_at = ss[baseA + SBS_LV_Z] + ss[baseA + SBS_AV_X] * ray - ss[baseA + SBS_AV_Y] * rax;
|
|
1493
|
+
const vBx_at = ss[baseB + SBS_LV_X] + ss[baseB + SBS_AV_Y] * rbz - ss[baseB + SBS_AV_Z] * rby;
|
|
1494
|
+
const vBy_at = ss[baseB + SBS_LV_Y] + ss[baseB + SBS_AV_Z] * rbx - ss[baseB + SBS_AV_X] * rbz;
|
|
1495
|
+
const vBz_at = ss[baseB + SBS_LV_Z] + ss[baseB + SBS_AV_X] * rby - ss[baseB + SBS_AV_Y] * rbx;
|
|
1496
|
+
const vn = (vAx_at - vBx_at) * nx + (vAy_at - vBy_at) * ny + (vAz_at - vBz_at) * nz;
|
|
1497
|
+
|
|
1498
|
+
const j_n_accum = data[off + 10];
|
|
1499
|
+
const lambda = -m_eff_n * (vn + (armed ? rest_bias : 0));
|
|
1500
|
+
const new_j_n = (j_n_accum + lambda) > 0 ? (j_n_accum + lambda) : 0;
|
|
1501
|
+
let delta = new_j_n - j_n_accum;
|
|
1502
|
+
|
|
1503
|
+
// The part of this impulse that only stops what is left of the approach.
|
|
1504
|
+
const stop = -m_eff_n * vn;
|
|
1505
|
+
const approach = Math.min(stop > 0 ? stop : 0, delta > 0 ? delta : 0);
|
|
1506
|
+
|
|
1507
|
+
if (armed) {
|
|
1508
|
+
// Poisson: what goes past stopping may total at most e times the compression.
|
|
1509
|
+
const allowance = restitution * (compression + approach) - rest_jn[ci];
|
|
1510
|
+
const cap = approach + (allowance > 0 ? allowance : 0);
|
|
1511
|
+
if (delta > cap) delta = cap;
|
|
1512
|
+
}
|
|
1513
|
+
|
|
1514
|
+
data[off + 10] = j_n_accum + delta;
|
|
1515
|
+
rest_jn[ci] += delta - approach;
|
|
1516
|
+
total_jn[ci] += delta;
|
|
1517
|
+
|
|
1518
|
+
if (delta !== 0) {
|
|
1519
|
+
const impulse = scratch_impulse;
|
|
1520
|
+
impulse[0] = nx * delta;
|
|
1521
|
+
impulse[1] = ny * delta;
|
|
1522
|
+
impulse[2] = nz * delta;
|
|
1523
|
+
apply_impulse_to_body_oriented(ss, baseA, pre, pre_off + PRE_QA, pre, pre_off + PRE_RA, impulse, 0, +1, scratch_inertia_a);
|
|
1524
|
+
apply_impulse_to_body_oriented(ss, baseB, pre, pre_off + PRE_QB, pre, pre_off + PRE_RB, impulse, 0, -1, scratch_inertia_b);
|
|
1525
|
+
}
|
|
1306
1526
|
}
|
|
1307
1527
|
}
|
|
1308
1528
|
}
|
|
@@ -1348,8 +1568,6 @@ export function solve_position(manifolds, system, pos_iters) {
|
|
|
1348
1568
|
const idxB = idx[ci * INDEX_STRIDE + 3];
|
|
1349
1569
|
const sbaseA = idxA * SBS_STRIDE;
|
|
1350
1570
|
const sbaseB = idxB * SBS_STRIDE;
|
|
1351
|
-
const invMA = ss[sbaseA + SBS_INV_MASS];
|
|
1352
|
-
const invMB = ss[sbaseB + SBS_INV_MASS];
|
|
1353
1571
|
|
|
1354
1572
|
const rax = pre[pre_off + 6], ray = pre[pre_off + 7], raz = pre[pre_off + 8];
|
|
1355
1573
|
const rbx = pre[pre_off + 9], rby = pre[pre_off + 10], rbz = pre[pre_off + 11];
|
|
@@ -1387,11 +1605,12 @@ export function solve_position(manifolds, system, pos_iters) {
|
|
|
1387
1605
|
pos_jn[ci] = new_jn;
|
|
1388
1606
|
|
|
1389
1607
|
if (delta !== 0) {
|
|
1390
|
-
const
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
apply_impulse_to_pseudo(pseudoVel,
|
|
1608
|
+
const impulse = scratch_impulse;
|
|
1609
|
+
impulse[0] = nx * delta;
|
|
1610
|
+
impulse[1] = ny * delta;
|
|
1611
|
+
impulse[2] = nz * delta;
|
|
1612
|
+
apply_impulse_to_pseudo(pseudoVel, baseA, ss, sbaseA, pre, pre_off + PRE_QA, pre, pre_off + PRE_RA, impulse, 0, +1, scratch_inertia_a);
|
|
1613
|
+
apply_impulse_to_pseudo(pseudoVel, baseB, ss, sbaseB, pre, pre_off + PRE_QB, pre, pre_off + PRE_RB, impulse, 0, -1, scratch_inertia_b);
|
|
1395
1614
|
}
|
|
1396
1615
|
}
|
|
1397
1616
|
}
|
|
@@ -1415,8 +1634,12 @@ export function solve_position(manifolds, system, pos_iters) {
|
|
|
1415
1634
|
* pseudo-velocity, restitution writes real velocity — so the order is
|
|
1416
1635
|
* consistency, not behaviour.)
|
|
1417
1636
|
*
|
|
1418
|
-
*
|
|
1419
|
-
*
|
|
1637
|
+
* With hard contacts the position pass writes `system.__pseudo_velocity`, a
|
|
1638
|
+
* correction for the caller to fold into the pose or drop. It accumulates onto
|
|
1639
|
+
* the buffer, which must hold zeros where the pass writes: it does after a
|
|
1640
|
+
* soft-contact `fixedUpdate`, or after `system.__reset_pseudo_velocity()`.
|
|
1641
|
+
* The driver marks the buffer written, so the system's next step zeroes it
|
|
1642
|
+
* before it integrates rather than applying the correction again.
|
|
1420
1643
|
*
|
|
1421
1644
|
* @param {ManifoldStore} manifolds
|
|
1422
1645
|
* @param {PhysicsSystem} system
|
|
@@ -1467,8 +1690,9 @@ export function solve_contacts(manifolds, system, dt,
|
|
|
1467
1690
|
solve_velocity(manifolds, system, 1, false);
|
|
1468
1691
|
} else {
|
|
1469
1692
|
solve_position(manifolds, system, pos_iters);
|
|
1693
|
+
system.__pseudo_velocity_dirty = system.storage.high_water_mark * PSEUDO_STRIDE;
|
|
1470
1694
|
}
|
|
1471
|
-
apply_restitution(manifolds, system);
|
|
1695
|
+
apply_restitution(manifolds, system, system.restitutionIterations);
|
|
1472
1696
|
}
|
|
1473
1697
|
|
|
1474
1698
|
solver_state.scatter(bodies);
|