acdream/docs/plans
Erik 462f9d6377 docs(perf): roadmap for Tier 2 + Tier 3 entity-dispatcher optimizations
Captured 2026-05-10 during Phase A.5 polish discussion. User asked why
the 9070 XT @ 1440p doesn't hit Unreal-level FPS for an old game like
AC. Answer: architectural — we rebuild the entire draw plan from
scratch every frame instead of caching pre-baked static-world data.

Tier 1 (entity-classification cache) lands as A.5 polish (separate
commit). Tiers 2 + 3 documented here for future scheduling:

- Tier 2 — Static/dynamic split with persistent groups
  ~2-week phase. Static entities (~95% of world) get permanent GPU-
  resident matrix slots, populated at spawn, dirty-tracked for delta
  upload. Per-frame CPU cost for static = LB-cull + dirty-flag check
  only. Estimated entity dispatcher: 3.5ms → 0.5-1ms median.
  400-600 FPS at standstill, radius=12.

- Tier 3 — GPU-side culling (compute pre-pass)
  ~1-month phase. Per-instance frustum cull moves to GPU compute
  shader. Compute writes draw-indirect buffer; rasterizer reads it.
  Estimated CPU dispatcher: ~0.05ms (essentially free).
  600-1000+ FPS at standstill, radius=12.

Doc captures effort estimates, sub-decisions, risks, mitigations, and
scheduling triggers for each tier. Also notes the architectural
ceiling (~800-1500 FPS for a C# + GL client; reaching native engine
performance requires becoming a different engine).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 09:38:38 +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 docs(N.5b T10): roadmap + ISSUES + CLAUDE.md + perf baseline updates 2026-05-09 13:03:14 +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 feat(ui): Phase D.2a — VitalsPanel wired into GameWindow + backend pivot 2026-04-25 00:43:46 +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 fix(physics): L.4 — steep airborne hits slide-tangent (interim, deviates from retail) 2026-04-30 13:22:07 +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
animation-system-audit.md docs(anim): Phase L.1a animation system audit 2026-04-28 10:38:58 +02:00