Phase 3 updates

Phase 3 · Slice 1 ·

3D physics

  • Backend: NVIDIA PhysX 5.1 through physx-sys (Unity uses PhysX 4.1, so contacts and the solver behave alike). The bindings are archived upstream; we build the bundled PhysX source (about 2 minutes once, then cached) and own any fixes.
  • tassix_physics: a scene mirroring components by handle: Rigidbodies as dynamic actors, colliders on the nearest Rigidbody up the hierarchy or on a static actor, geometry scaled by lossy scale, Unity's defaults (contact offset 0.01, solver 6/1, max angular velocity 50, bounce threshold 2, sweep-and-prune). A filter shader implements the layer collision matrix and Unity's trigger and kinematic rules; events carry pre-step relative velocities and contacts. Transforms sync both ways (script edits teleport, moved bodies write back). Convex and triangle mesh cooking for MeshColliders.
  • Scripting API: Rigidbody (forces in all ForceModes, velocities, MovePosition/MoveRotation, constraints, sleep, CCD modes; Unity 6 and older property names), Box/Sphere/Capsule/MeshCollider, PhysicsMaterial, Physics (gravity, layer matrix, Raycast/RaycastAll/RaycastNonAlloc/Linecast, SphereCast/BoxCast/CapsuleCast, OverlapSphere/Box/Capsule, Check*), Collision/ContactPoint/RaycastHit, GameObject.layer, GameObject.Find, GetComponentInParent/InChildren. Physics steps after FixedUpdate; OnTrigger* then OnCollision* go to both objects (and their Rigidbody's object), including disabled scripts.
  • Conformance: physics_basic (219 checks recorded in Unity: defaults, free fall, landing frames and contacts, trigger order around FixedUpdate, layers, kinematic bodies, queries) passes, with resting positions well inside 1e-3.
  • Sample: dotnet/samples/scenes/physics.json: a ball spawner, ramp, kinematic paddle and collectible triggers; about 0.3 allocations per frame including spawning.