camera-anti-clip · git:20260912.09b1a36 · 2026-09-12 · sha256 2752044d6df5b179

camera-anti-clip git:20260912.09b1a36A

Immutable. This exact content never changes and is served at /api/v1/blob/2752044d6df5b179.

---
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.
---

# Camera anti-clip

Ask the rig column first.

| Column | Rig | Collision |
|---|---|---|
| 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
```

## Iron 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.

## Accept

Corner + 360 spin: no interior faces, no one-frame wall flash, release eases out.