acdream/docs/plans
Erik ec414d60cd docs(render): Campaign V slice V3 - clip-space and sRGB audit
V3 exists to verify the assumptions the whole Vulkan design rests on, before
V6 builds on them. The central claim held. One plan assumption did not, and
catching it here is the slice paying for itself.

Confirmed: every projection reaching a shader is built by
Matrix4x4.CreatePerspectiveFieldOfView, so NDC z is already [0,1] - Vulkan's
own convention - and no projection rework is needed. There are no orthographic
projections in production at all; the retained UI converts pixel coordinates
straight to NDC with a constant z, so V4a has no matrix to convert. Phase U.3's
clip planes are derived and compared entirely in clip space with plane.z always
zero, making them insensitive to both the depth convention and the viewport Y
flip. SkyProjection.WithDepthRange is the only hand-written matrix edit and it
re-derives the same D3D-convention mapping rather than a GL-style depth scale.

Corrected: the plan specified a B8G8R8A8_SRGB swapchain "matching the GL
FramebufferSrgb contract." That contract does not exist. FramebufferSrgb is
enabled only inside the throwaway capability probe and disabled immediately,
never on the real backbuffer; no texture uses an sRGB internal format; no
shader converts gamma. The renderer is UNORM end to end, so the correct
swapchain format is B8G8R8A8_UNORM. Shipping _SRGB would have applied an encode
to already-display-space values - a global brightening on every frame that
nothing before V7 would have caught.

Two acceptance items carried forward to V6/V7: the Vulkan encoder must flip
scissor rectangles itself, because vkCmdSetScissor is top-left-origin and the
negative viewport height does not affect it; and the V7 differential must
launch both backends with ACDREAM_MSAA_SAMPLES=0, since MSAA is fixed at window
creation and cannot be toggled mid-session.

Filed #248 for FrustumCuller's near-plane extraction, which uses the GL
[-1,1] Gribb-Hartmann formula against [0,1] matrices. It is provably
over-inclusive rather than over-culling, and it is pure CPU math untouched by
the backend swap, so it is tracked rather than fixed inside this campaign.

No code changed, so the pixel gate is trivially satisfied.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-27 16:20:34 +02:00
..
2026-04-10-phase-1-terrain-and-plugin-scaffold.md docs: phase 1 implementation plan 2026-04-10 09:17:49 +02:00
2026-04-10-phase-2-static-meshes-design.md docs(phase-2): refine design after DatReaderWriter spike 2026-04-10 17:18:43 +02:00
2026-04-10-phase-2-static-meshes-plan.md docs: phase 2 implementation plan (tasks 1-10 full, 11-18 sketch) 2026-04-10 17:27:53 +02:00
2026-04-10-phase-2b-design.md docs: phase 2b design — atlas textures, neighbors, dual cameras, plugin api 2026-04-10 20:00:23 +02:00
2026-04-10-phase-2b-plan.md docs: phase 2b implementation plan (9 tasks) 2026-04-10 20:13:03 +02:00
2026-04-10-phase-3c-terrain-blending-plan.md docs(plan): Phase 3c terrain blending plan 2026-04-10 23:43:04 +02:00
2026-04-10-phase-4-networking-design.md docs(plan): Phase 4 networking design 2026-04-10 22:31:26 +02:00
2026-04-10-plugin-architecture-design.md docs: plugin architecture design 2026-04-10 09:11:52 +02:00
2026-04-11-roadmap.md feat(render): Campaign V slice V0 — pin the Vulkan-shaped RHI contract 2026-07-27 14:26:26 +02:00
2026-04-13-rendering-rebuild.md fix(movement): jump works locally (airborne velocity preserved) 2026-04-14 00:12:11 +02:00
2026-04-23-sky-weather-lightning-port.md docs(sky): port plan for PhysicsScript/fog/lightning/crossfade 2026-04-24 10:53:46 +02:00
2026-04-24-ui-framework.md docs(ui): align architecture with retained runtime 2026-07-10 16:57:44 +02:00
2026-04-27-phase-c1-pes-particles.md feat(vfx): Phase C.1 — PES particle renderer + post-review fixes 2026-04-28 22:47:11 +02:00
2026-04-29-movement-collision-conformance.md docs(phys L.2g): slice 1 shipped handoff + B.4 gap discovery + plan-of-record 2026-05-12 23:17:05 +02:00
2026-04-30-sky-pes-port.md docs(plans): #36 sky-PES dispatch port plan + .gitignore for retail-debugger scratch 2026-04-30 23:00:46 +02:00
2026-05-08-phase-n5-perf-baseline.md phase(N.5): retirement amendment — InstancedMeshRenderer + StaticMeshRenderer + WbFoundationFlag deleted 2026-05-08 22:01:36 +02:00
2026-05-09-phase-n5b-perf-baseline.md docs(N.5b T10): roadmap + ISSUES + CLAUDE.md + perf baseline updates 2026-05-09 13:03:14 +02:00
2026-05-10-perf-tiers-2-3-roadmap.md docs(perf): roadmap for Tier 2 + Tier 3 entity-dispatcher optimizations 2026-05-10 09:38:38 +02:00
2026-05-11-phase-n6-perf-baseline.md docs(perf #N6.1): apply final-review fixes — spec, baseline doc, issue #55 2026-05-11 12:51:10 +02:00
2026-05-12-milestones.md docs: reconcile project state and refresh README 2026-07-27 12:53:31 +02:00
2026-05-12-phase-c1.5b-handoff.md docs(vfx #C.1.5b): handoff for next slice (issue #56 + EnvCell statics) 2026-05-11 18:22:01 +02:00
2026-06-11-building-render-port-plan.md docs: T5 comprehensive gate verdict - PARTIAL PASS; #108/#109/#97 closed, #117-#120 filed 2026-06-11 15:46:30 +02:00
2026-07-02-retail-motion-animation-rewrite.md fix(motion): restore retail object manager order 2026-07-19 21:40:14 +02:00
2026-07-20-automated-world-lifecycle-gate.md docs(runtime): close deterministic world lifecycle gate 2026-07-21 00:00:31 +02:00
2026-07-21-gamewindow-slice-1-selection-interaction.md docs(architecture): close selection extraction slice 2026-07-21 09:04:31 +02:00
2026-07-21-gamewindow-slice-2-live-animation-presentation.md docs(architecture): close live animation slice 2026-07-21 10:03:20 +02:00
2026-07-21-gamewindow-slice-3-live-session.md docs(architecture): close live-session ownership slice 2026-07-21 12:44:48 +02:00
2026-07-21-gamewindow-slice-4-live-entity-integration.md docs(plan): complete GameWindow slice 4 2026-07-21 19:29:04 +02:00
2026-07-21-gamewindow-slice-5-landblock-presentation.md docs(architecture): close GameWindow slice 5 2026-07-21 23:45:45 +02:00
2026-07-21-gamewindow-slice-6-update-frame-orchestration.md docs(architecture): close GameWindow slice 6 2026-07-22 03:54:11 +02:00
2026-07-22-gamewindow-slice-7-render-frame-orchestration.md docs(architecture): close GameWindow render slice 2026-07-22 08:40:52 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-g-runtime-settings.md refactor(settings): own two-phase runtime settings 2026-07-22 13:30:22 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-h-resource-ownership.md refactor(lifetime): own render resource prefixes 2026-07-22 14:42:14 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-i-ordered-composition.md refactor(app): close ordered startup composition 2026-07-22 19:20:20 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-i6-ui-live-presentation.md refactor(app): compose live presentation startup 2026-07-22 17:55:15 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-i7-session-player.md refactor(app): compose session and player startup 2026-07-22 18:28:32 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-i8-frame-roots-session-start.md refactor(app): make session start terminal 2026-07-22 19:06:00 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-j-lifetime-shutdown.md refactor(app): extract focused window lifetime 2026-07-22 19:43:52 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-k-canonical-soak.md docs(architecture): record GameWindow automated closeout 2026-07-22 20:52:25 +02:00
2026-07-22-gamewindow-slice-8-checkpoint-l-closeout.md docs(architecture): record GameWindow automated closeout 2026-07-22 20:52:25 +02:00
2026-07-22-gamewindow-slice-8-composition-lifecycle.md docs(architecture): record GameWindow automated closeout 2026-07-22 20:52:25 +02:00
2026-07-23-world-interaction-completion.md docs: reconcile project state and refresh README 2026-07-27 12:53:31 +02:00
2026-07-24-modern-runtime-architecture.md docs: reconcile project state and refresh README 2026-07-27 12:53:31 +02:00
2026-07-24-modern-runtime-slice-b-envcell-dedup.md docs(perf): close Slice B with full-bake evidence 2026-07-24 14:10:50 +02:00
2026-07-24-modern-runtime-slice-c-prepared-assets.md perf(content): close prepared asset cutover 2026-07-24 15:49:24 +02:00
2026-07-24-modern-runtime-slice-d-unified-residency.md docs(render): close unified residency slice 2026-07-24 17:06:17 +02:00
2026-07-24-modern-runtime-slice-e-cost-budgeted-streaming.md fix(streaming): preserve portal destination ownership 2026-07-25 08:35:12 +02:00
2026-07-24-modern-runtime-slices-f-g-render-scene.md docs(rendering): close retained-scene G5 2026-07-25 13:55:38 +02:00
2026-07-25-modern-runtime-slice-h.md fix(streaming): preserve portal destination ownership 2026-07-25 08:35:12 +02:00
2026-07-25-modern-runtime-slice-i.md fix(physics): traverse prepared indoor portal topology 2026-07-27 00:02:44 +02:00
2026-07-25-modern-runtime-slice-j.md docs(runtime): close Slice J and activate Slice K 2026-07-27 01:01:41 +02:00
2026-07-25-modern-runtime-slice-j2.md docs(runtime): close J2 session lifetime gate 2026-07-25 19:46:47 +02:00
2026-07-25-modern-runtime-slice-j3-object-table.md docs(runtime): close J3.4 and plan J3.5 2026-07-26 06:09:28 +02:00
2026-07-25-modern-runtime-slice-j3-projection-store.md docs(runtime): close J3.3 and hand off J3.4 2026-07-25 22:29:34 +02:00
2026-07-25-modern-runtime-slice-j3.md docs(runtime): close canonical entity object lifetime 2026-07-26 07:35:42 +02:00
2026-07-26-modern-runtime-slice-j3-delta-stream.md docs(runtime): close J3.5 and plan J3.6 2026-07-26 06:54:47 +02:00
2026-07-26-modern-runtime-slice-j3-hardening.md docs(runtime): close canonical entity object lifetime 2026-07-26 07:35:42 +02:00
2026-07-26-modern-runtime-slice-j4.md docs(runtime): close gameplay-state ownership 2026-07-26 10:17:39 +02:00
2026-07-26-modern-runtime-slice-j5.md docs(runtime): close simulation ownership 2026-07-26 16:29:28 +02:00
2026-07-26-modern-runtime-slice-j6.md docs(runtime): close exact world host ownership 2026-07-26 18:41:24 +02:00
2026-07-26-modern-runtime-slice-j7.md docs(runtime): close the accepted J7 visual gate 2026-07-27 00:12:26 +02:00
2026-07-26-modern-runtime-slice-j8.md docs(runtime): close Slice J and activate Slice K 2026-07-27 01:01:41 +02:00
2026-07-26-modern-runtime-slice-k.md docs(headless): close modern runtime slice K 2026-07-27 11:31:19 +02:00
2026-07-26-modern-runtime-slice-l.md docs(linux): park Slice L at L1 checkpoint 2026-07-27 12:35:47 +02:00
2026-07-27-vulkan-campaign.md docs(render): Campaign V slice V3 - clip-space and sRGB audit 2026-07-27 16:20:34 +02:00
animation-system-audit.md docs(anim): Phase L.1a animation system audit 2026-04-28 10:38:58 +02:00