research(render): Phase U.4c — CONVERGED root cause (eye-rooted grace-stale root)
Live ACDREAM_PROBE_FLAP moving capture: flap frames are uniformly res=Grace eyeInRoot=n terrain=Skip; good frames eyeInRoot=Y terrain=Planes. The 3rd-person camera EYE drifts out of the player's cell -> FindCameraCell returns the stale cell for 3 grace frames -> from that stale root the doorway portal is behind the eye (D=+1.26 CULL) -> exit cell drops -> terrain+shells Skip. Clip math is fine (clip=5 when eye inside). Fix: (1) root visibility at the PLAYER's cell (retail CellManager::ChangePosition tracks curr_cell by player; acdream already does this for lighting at GameWindow:7152); (2) keep a player-reachable cell + exit when the threshold eye-projection degenerates. Supersedes H2 and the earlier idle-frame 'stale root refuted' note. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
fde169970f
commit
f47895cc73
1 changed files with 20 additions and 0 deletions
|
|
@ -1,5 +1,25 @@
|
|||
# U.4c flap characterization — real-dat evidence (Task U.4c-1)
|
||||
|
||||
> **✅ CONVERGED ROOT CAUSE (2026-05-31, live ACDREAM_PROBE_FLAP moving capture) — read this first.**
|
||||
> The flap is the **visibility root being driven by the 3rd-person camera EYE instead of the
|
||||
> player.** Live data (`u4c-flap2.log`): every flap frame is `res=Grace eyeInRoot=n terrain=Skip`;
|
||||
> every good frame is `eyeInRoot=Y terrain=Planes`. When the chase eye drifts out of the player's
|
||||
> cell (through a wall into an adjacent cell / an AABB gap), `CellVisibility.FindCameraCell(camPos)`
|
||||
> finds no cell and returns the **stale previous cell for 3 grace frames**; from that stale root the
|
||||
> doorway portal is behind the eye (`p0->0x0170 D=+1.26 CULL`) → the exit cell `0170` drops →
|
||||
> `outPolys=0` → terrain + shells Skip. Pose where it works: eye genuinely inside (`D=-0.97 TRV
|
||||
> proj=4 clip=5 → outPolys=1`). The clip math is NOT broken (clip=5 when the eye is inside); the
|
||||
> ROOT is wrong. At the exact threshold the eye-projection of the doorway also degenerates
|
||||
> (`proj=0`) even when the player would reach it — so the fix has two parts:
|
||||
> **(1) root visibility at the PLAYER's cell, not the eye** (retail `CellManager::ChangePosition`
|
||||
> tracks `curr_cell` by the player; acdream already does this for lighting at GameWindow.cs:7152);
|
||||
> **(2) a player-reachable cell + its exit render even when the per-frame eye-projection
|
||||
> degenerates** (the spec's "set stable, clip refines WHERE not WHICH" principle, correctly rooted).
|
||||
> This supersedes BOTH the H2 (side-test) conclusion below AND the earlier "stale root refuted"
|
||||
> note (which was judged from a single idle frame; the moving capture proves the eye does leave the
|
||||
> cell). Apparatus: `RenderingDiagnostics.ProbeFlapEnabled` ([flap]/[flap-cam] lines), commits
|
||||
> `b5f2bf2`/`8941d1e` + the probe commits.
|
||||
|
||||
> **⚠️ CORRECTION (2026-05-31, later same day) — the H2 conclusion below is WRONG.**
|
||||
> Two follow-on evidence steps overturned the "port the side test (H2)" conclusion this note reaches:
|
||||
> 1. **PortalSide swap is a no-op** (`docs/research/2026-05-31-u4c-initcell-pseudocode.md`): the
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue