spec(rendering): Phase N WorldBuilder migration design + N.1 scenery
Adds two design docs and a roadmap entry for the strategic shift from "port retail rendering algorithms ourselves" to "depend on a fork of Chorizite/WorldBuilder for rendering + dat-handling." - docs/superpowers/specs/2026-05-08-phase-n-worldbuilder-migration-design.md — parent design: integration model (fork + submodule), 10 sub-phases (N.0 setup through N.10 GL consolidation), strangler-fig phasing with per-phase feature flags, retail-decomp boundary clarified for what WB does NOT cover (network, physics, animation, motion, UI, plugin, audio, chat). - docs/superpowers/specs/2026-05-08-phase-n1-scenery-via-wb-helpers-design.md — N.1 detailed design: replace IsOnRoad / DisplaceObject / slope-normal calc / rotation / scale inside SceneryGenerator.Generate() with calls to WB's SceneryHelpers + TerrainUtils. Keep data flow, ScenerySpawn shape, and renderer integration. Add small LandBlock → TerrainEntry[] adapter. Feature flag ACDREAM_USE_WB_SCENERY=1. - docs/plans/2026-04-11-roadmap.md — Phase N entry added between Phase M and Phase J. Lists all 10 sub-phases with effort estimates. Fork already created at https://github.com/eriknihlen/WorldBuilder. N.0 setup (replace references/WorldBuilder/ snapshot with submodule, add project references, build green) is the next implementation step. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
9b210be126
commit
8a06fce7a5
3 changed files with 501 additions and 0 deletions
|
|
@ -498,6 +498,93 @@ before porting.
|
|||
|
||||
---
|
||||
|
||||
### Phase N — WorldBuilder Rendering Migration
|
||||
|
||||
**Goal:** Stop re-porting AC-specific rendering / dat-handling
|
||||
algorithms. Depend on a fork of `Chorizite/WorldBuilder` (MIT) for
|
||||
terrain, scenery, static objects, EnvCells, portals, sky, particles,
|
||||
texture decoding, mesh extraction, and visibility. Acdream keeps its
|
||||
own network, physics, animation, motion, UI, plugin, audio, chat
|
||||
layers (those aren't in WB).
|
||||
|
||||
**Why now (2026-05-08):** the scenery edge-vertex bug at landblock
|
||||
`0xA9B1` was the third subtle porting bug in a quarter (after the
|
||||
triangle-Z bug and the hover-over-terrain bug). Even when our code
|
||||
looked byte-identical to WB's, our output diverged. WB renders the
|
||||
world correctly; the cost of "we re-port retail algorithms" is now
|
||||
higher than "we depend on WB's tested port."
|
||||
|
||||
**Design + inventory:**
|
||||
|
||||
- `docs/architecture/worldbuilder-inventory.md` — full taxonomy of
|
||||
what WB has and what we keep porting ourselves.
|
||||
- `docs/superpowers/specs/2026-05-08-phase-n-worldbuilder-migration-design.md` —
|
||||
parent design doc.
|
||||
- `docs/superpowers/specs/2026-05-08-phase-n1-scenery-via-wb-helpers-design.md` —
|
||||
N.1 detailed design.
|
||||
|
||||
**Integration model:** fork at
|
||||
`https://github.com/eriknihlen/WorldBuilder` (already created), git
|
||||
submodule replacing `references/WorldBuilder/` snapshot, project
|
||||
references in our solution. Long-lived `acdream` branch in the fork
|
||||
for our deletions/additions; merge upstream `master` periodically.
|
||||
|
||||
**Sub-phases (strangler-fig with feature flags):**
|
||||
|
||||
- **N.0 — Setup.** Submodule + project references + build green. ~1-2 hrs.
|
||||
- **N.1 — Scenery algorithm calls.** Replace `IsOnRoad` /
|
||||
`DisplaceObject` / slope-normal calc / rotation / scale inside
|
||||
`SceneryGenerator.Generate()` with calls to WB's `SceneryHelpers` +
|
||||
`TerrainUtils`. Tiny adapter `LandBlock → TerrainEntry[]`. Keeps our
|
||||
data flow + `ScenerySpawn` shape. Feature flag
|
||||
`ACDREAM_USE_WB_SCENERY=1`. ~1-2 days.
|
||||
- **N.2 — Terrain math helpers.** Refactor `TerrainSurface.SampleZ` /
|
||||
`SampleNormal` / `SampleSurface` to call WB's `TerrainUtils.GetHeight`
|
||||
/ `GetNormal` internally. ~1-2 days.
|
||||
- **N.3 — Texture decoding.** Replace `TextureCache` decode pipeline
|
||||
with WB's `TextureHelpers`. ~2-3 days.
|
||||
- **N.4 — Object meshing.** Replace `SetupMesh.cs` + `GfxObjMesh.cs`
|
||||
with calls to WB's `ObjectMeshManager`. Character-appearance
|
||||
behaviors (CreaturePalette / GfxObjRemapping / HiddenParts) remain
|
||||
ours — ACME is the secondary oracle. ~1 week.
|
||||
- **N.5 — Terrain rendering.** Replace `TerrainChunkRenderer` +
|
||||
`TerrainAtlas` + `TerrainBlending` with WB's `TerrainRenderManager` +
|
||||
`LandSurfaceManager` + `TerrainGeometryGenerator`. ~2 weeks.
|
||||
- **N.6 — Static objects rendering.** Replace `StaticMeshRenderer` +
|
||||
`InstancedMeshRenderer` with WB's `StaticObjectRenderManager`.
|
||||
~2 weeks.
|
||||
- **N.7 — EnvCells / dungeons.** Replace EnvCell rendering with WB's
|
||||
`EnvCellRenderManager` + `PortalRenderManager`. ~2 weeks.
|
||||
- **N.8 — Sky + particles.** Replace sky rendering + particle pipeline
|
||||
(#36 / C.1 work) with WB's `SkyboxRenderManager` +
|
||||
`ParticleEmitterRenderer`. ~1 week.
|
||||
- **N.9 — Visibility / culling.** Replace `CellVisibility` +
|
||||
`FrustumCuller` with WB's `VisibilityManager`. ~3-5 days.
|
||||
- **N.10 — GL infrastructure consolidation (optional).** Replace our
|
||||
`Shader` / `TextureCache` / `SamplerCache` plumbing with WB's
|
||||
`ManagedGL*` wrappers + `OpenGLGraphicsDevice`. ~1 week.
|
||||
|
||||
**Estimated calendar:** 2-3 months. Engineering effort: 6-8 weeks.
|
||||
|
||||
**Each sub-phase:**
|
||||
- Ships behind `ACDREAM_USE_WB_<NAME>=1` flag.
|
||||
- Has its own conformance test (side-by-side against existing path).
|
||||
- Visual verification before flag becomes default-on.
|
||||
- Old code deleted after default-on lands cleanly.
|
||||
|
||||
**N.2-N.10 detailed specs are NOT yet written** — each gets its own
|
||||
brainstorm + spec when we reach it.
|
||||
|
||||
**Acceptance:**
|
||||
- All 10 sub-phases shipped, feature flags removed, old rendering code
|
||||
paths deleted.
|
||||
- Visual verification at Holtburg + Foundry statue + a representative
|
||||
dungeon shows no regression vs Phase C.1.
|
||||
- WB upstream merges into our `acdream` branch are clean (or have
|
||||
documented conflict-resolution patterns).
|
||||
|
||||
---
|
||||
|
||||
### Phase J — Long-tail (deferred / low-priority)
|
||||
|
||||
Not detailed here; each gets its own brainstorm when it becomes relevant.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue