git:20260912.09b1a36 to git:20260912.a22b95e

18 added, 32 removed. Audit A to A.

---
name: camera-anti-clip
- description: >
- Engine-neutral camera collision. Sphere sweep from pivot to desired pose.
- Pick a rig column first. Use when the camera enters walls, sits on a thin
- ray hit, or collapses into the spine.
+ description: Keep the camera out of world geometry. Sphere sweep from pivot to desired pose. Use for third-person clip, wall suck-in, orbit collision. Ask the camera column first. Never start from SpringArm3D or Cinemachine.
---
# Camera anti-clip
- Ask the rig column first.
+ Ask the column:
- | Column | Rig | Collision |
+ | Column | Pivot | Occlusion |
|---|---|---|
- | orbit-third | yaw/pitch arm | always sweep |
- | over-shoulder | arm + socket offset | offset rotates with the arm |
- | sidescroll | plane, depth locked | clamp to room bounds |
- | lock-strafe | orbit while locked | lock is overlay, not a rail |
- | first-person | eye socket | capsule vs world |
-
- Two jobs: **decollision** (body not inside a wall, default on) vs **deocclusion** (keep subject visible, optional). Leaves and fences often fade. Do not yank to first-person.
-
- ## Per frame (after the subject moves)
-
- ```
- desired = pivot + orbit(yaw,pitch)*(0,0,-arm) + socket
- sweep sphere pivot → desired
- radius >= max(near_clip, 0.15..0.25)
- mask = World, ignore = Player
- if hit: desired = hit.point + hit.normal * radius
- damp: collide ~0.05s, release ~0.25s
- look at pivot
- ```
+ | orbit-third | chest | decollide; fade optional |
+ | over-shoulder | shoulder | decollide hard |
+ | sidescroll | plane lock | push on depth only |
+ | lock-strafe | lock point | keep both actors framed |
+ | first-person | eye | near-plane only |
- ## Iron rules
+ ## Rules
- - No single ray parked on the hit point.
- - Camera layer != player layer.
- - Do not parent the camera to a rolling animation root.
- - Shake is an offset applied AFTER the sweep.
- - Pitch is clamped.
+ 1. Sweep a sphere, not a single ray. Radius >= nearClip + skin.
+ 2. Hit this frame: pull in immediately. Clear: ease out (fast-in, slow-out).
+ 3. Ignore the player collider and the camera body.
+ 4. Decollision is default. Deocclusion (see through foliage) must not collapse to first-person.
+ 5. Solve after actor pose, before render. Do not parent to a rolling root bone.
+ 6. Shake and kick are offsets applied after the sweep.
## Accept
- Corner + 360 spin: no interior faces, no one-frame wall flash, release eases out.
+ - Back into a wall: lens never crosses the solid
+ - Thin pillar: no per-frame flicker
+ - Climb over a lip: camera sees the ledge, not the interior