Docs/controls.md documented the 0.1.0 bindings only, so the camera toggle added with 0.2.0 was undocumented for the player-facing set and the review switches were undocumented everywhere. Adds the V row, a changes-since-0.1.0 note that first person stays the default, and a table for -thirdperson / -walk / -qaselftest with the note that the walking capture is driven per shot rather than by the switch. The in-game HUD line gains 'V view' so the packaged build documents it too.
369 lines
20 KiB
Markdown
369 lines
20 KiB
Markdown
# TODO.md
|
||
|
||
Actionable task list for this project. This file is the single, central place for planned work, claims, and progress marks. Milestone goals, scope, and release gates are in [ROADMAP.md](ROADMAP.md).
|
||
|
||
## Conventions
|
||
|
||
- Mark items **open** (`- [ ]`), **active/in progress** (`- [A]`, **deferred** `- [D]`), or **done** (`- [x]`). Keep the marks accurate.
|
||
- A level-three (`###`) section being worked on carries `- active - <sessionId>` (and optionally the branch name) in its heading. Remove the suffix when you stop.
|
||
- When all steps in a version section are done: write a `CHANGELOG.md` entry, then remove the version section from this file.
|
||
- Release gate: a version is tagged only on the owner's explicit go-ahead once its release checks pass, not automatically when the checkboxes close.
|
||
|
||
## 0.2.0 — MPFB player body, third-person camera, basic animation (weeks 7–9)
|
||
|
||
### Character setup - active - session-5598ce7e-27e3-4c64-bb49-c04a4a31ee58 (branch `anim-body-0.2.0`)
|
||
|
||
- [x] Generate MPFB human base mesh; export baked materials and deform skeleton. Done in bootstrap: idle-pose 19 158-vert human with a 137-bone standard rig, `Tools/mpfb_character_export.py` (now `--pose idle` + warm `make_diffuse`).
|
||
- [x] Import character into Unreal; validate skeleton, scale, and materials. Done: `/Game/Test/Character` — `SkeletalMesh` (138 bones), `Skeleton`, warm `M_Character_Export` material with baked `T_Character_Diffuse`.
|
||
- [x] Promote the character asset into a reusable NPC prefab (visible body, collision capsule, idle pose) ready for pedestrians (`0.5.0`) once the third-person body lands. Done 2026-11-07: `AGigLineNPCPerson` (see the 0.1.0 Character-development item); `0.5.0` reuses it as the pedestrian base.
|
||
- [x] Create basic idle/walk animation set. Done 2026-11-09: `Tools/character_anim_build.py` authors `GigLine_Idle` (60 f) and `GigLine_Walk` (30 f) at 30 fps from parametric cycles, and `Tools/ue_character_anim_import.py` imports them. Both AnimSequences verified in `/Game/Test/Character`: Idle 1.967 s, Walk 0.967 s. Limb axes were **measured** on the rig, not assumed — the probe rotated `upperleg01.L` 0.5 rad per axis and read `foot.L`, which showed X is the fore/aft swing (Y twists, Z abducts).
|
||
- [x] Verify animation plays correctly on the imported rig. **Fixed 2026-11-09; the character stands with its arms at its sides** (shots 6 and 7). Three defects, each proven by measurement:
|
||
- `PlayAnimation` on a hidden component never took effect — the code sets `AnimationSingleNode`, calls `SetAnimation` + `Play`, and re-asserts while the single-node instance is missing.
|
||
- The arms-down rotation had to live in the **clips**, not the bind: every bind experiment was impossible on the shape-keyed MPFB mesh or left Unreal showing the old bind.
|
||
- **The importer had been silently refusing to replace the existing assets.** Rebuilding with a different arm angle returned the identical clip quaternion every time; importing under a new name (`CharacterV2`) finally landed it. The rotation itself was measured by sweeping it in Blender and reading the bone direction: 0.55 rad gives arms down and clear of the body, 0.75 rad drives them into the torso. Remaining polish, for `0.2.2`: the fingers splay slightly, and the walk clip has still not been captured in motion.
|
||
- [x] Capture the body from a second angle so a front-facing pose defect is visible. `demo-third-person-front` added to the shot list and to `Screenshots/README.md`; the third-person shot alone only showed the pawn's back.
|
||
|
||
### Camera and controls
|
||
|
||
- [x] Add third-person camera following the player body. Done 2026-11-09: `USpringArmComponent` + camera on the capsule, boom 340 cm, lag 8, and the body is the animated skeletal mesh with the skin material. Review shot 5 (`demo-third-person`, `Screenshots/README.md`) shows the rig; the shipped default view stays first person.
|
||
- [x] Add first/third-person toggle. **V**, via `IA_ToggleCamera`; the toggle swaps the active camera and the body's visibility. `-thirdperson` on the command line starts in third person so the review is reproducible.
|
||
- [x] Add camera collision to prevent clipping through geometry. The spring arm's collision test (`bDoCollisionTest`, probe 12 cm on `ECC_Camera`) shortens the boom instead of letting the camera pass through a wall. **Not yet exercised against a wall in a shot** — the spawn point has open space behind it, so this is implemented but unproven.
|
||
- [x] Document any input changes. `Docs/controls.md` gains the **V** first/third-person toggle (first person stays the default), a "changes since 0.1.0" note, and a table of the review harness switches (`-thirdperson`, `-walk`, `-qaselftest`). The in-game HUD line now reads `WASD move · Mouse look · Space jump · V view · R reset · Esc pause`.
|
||
|
||
### Release checks
|
||
|
||
- [x] Third-person traversal works end-to-end in the demo area. **Walking is captured and verified 2026-11-09**: `demo-third-person-walk` shows the body mid-stride in profile (legs apart, arms counter-swinging), and the run logs `walk=1 speed=28 clip=GigLine_Walk`. Getting there needed two harness fixes, both found by probing rather than guessing: the camera must track the pawn (`ShotFollow`), and the call that enables walking had to move out of the sequencer's `BeginPlay` — it ran before the player pawn existed, so the cast silently found nothing and `speed` stayed 0 while the probe reported `clip=Idle` every frame.
|
||
- [ ] No blocking animation or rig defects.
|
||
- [ ] Performance target still met at 1440p.
|
||
- [ ] Tag `v0.2.0` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.2.1 — Rig fixes (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Fix skeletal/rigging defects reported after `0.2.0`.
|
||
- [ ] Tag `v0.2.1` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.2.2 — Skin and hair tuning (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Tune skin shading and hair materials on the player character.
|
||
- [ ] Tag `v0.2.2` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.2.3 — Camera clipping fixes (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Fix remaining camera clipping cases in `0.2.x`.
|
||
- [ ] Tag `v0.2.3` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.3.0 — Chaos vehicle, enter/exit, closed driving route (weeks 10–13)
|
||
|
||
### Vehicle production
|
||
|
||
- [ ] Model one vehicle in Blender with collision meshes; export to Unreal.
|
||
- [ ] Set up Chaos Vehicle with wheel and physics configuration.
|
||
- [ ] Implement enter/exit interaction.
|
||
- [ ] Build a closed driving route with boundaries.
|
||
- [ ] Tune basic handling to a drivable state.
|
||
|
||
### Release checks
|
||
|
||
- [ ] Player can enter, drive the closed route, and exit without defects.
|
||
- [ ] No blocking vehicle collision or packaging defects.
|
||
- [ ] Performance target still met at 1440p.
|
||
- [ ] Tag `v0.3.0` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.3.1 — Handling tuning (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Refine vehicle handling feel based on `0.3.0` feedback.
|
||
- [ ] Tag `v0.3.1` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.3.2 — Vehicle collision fixes (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Fix vehicle collision defects (mesh/physics mismatches).
|
||
- [ ] Tag `v0.3.2` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.3.3 — Input fixes (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Fix vehicle/character input issues in `0.3.x`.
|
||
- [ ] Tag `v0.3.3` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.4.0 — Small connected neighborhood and map streaming (weeks 14–17)
|
||
|
||
### World expansion
|
||
|
||
- [ ] Extend geo pipeline to a small connected neighborhood beyond the demo block.
|
||
- [ ] Produce modular buildings, sidewalks, and roads for the expanded area.
|
||
- [ ] Set up World Partition with streaming cells.
|
||
- [ ] Configure HLOD for distant buildings.
|
||
- [ ] Verify no seams or popping between streamed cells during traversal.
|
||
|
||
### Release checks
|
||
|
||
- [ ] Continuous walking (and driving) across the expanded area works.
|
||
- [ ] Streaming does not introduce blocking defects.
|
||
- [ ] Performance target re-validated at 1440p with streaming active.
|
||
- [ ] Tag `v0.4.0` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.4.1 — Seam fixes (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Fix visible seams between streamed cells.
|
||
- [ ] Tag `v0.4.1` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.4.2 — Streaming corrections (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Correct streaming/loading issues found in `0.4.x`.
|
||
- [ ] Tag `v0.4.2` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.4.3 — HLOD tuning (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Tune HLOD quality and distance settings.
|
||
- [ ] Tag `v0.4.3` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.5.0 — Pedestrians, crosswalk behavior, ambient traffic (weeks 18–21)
|
||
|
||
### Simulation
|
||
|
||
- [ ] Add pedestrian characters with navigation, using `AGigLineNPCPerson` (the reusable NPC prefab) as the base, driving it via AI/`AutoPossessAI`.
|
||
- [ ] Implement crosswalk behavior (pedestrians use the designated crossing).
|
||
- [ ] Add limited ambient traffic on the street network.
|
||
- [ ] Optimize simulation cost to stay within frame budget.
|
||
|
||
### Release checks
|
||
|
||
- [ ] Pedestrians and traffic behave without blocking defects.
|
||
- [ ] Performance target re-validated at 1440p.
|
||
- [ ] Tag `v0.5.0` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.5.1 — Navigation fixes (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Fix pedestrian navigation issues.
|
||
- [ ] Tag `v0.5.1` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.5.2 — Crossing fixes (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Fix crosswalk behavior defects.
|
||
- [ ] Tag `v0.5.2` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.5.3 — Simulation optimization (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Optimize pedestrian/traffic simulation cost.
|
||
- [ ] Tag `v0.5.3` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.6.0 — Visual/audio pass and evening lighting preset (weeks 22–24)
|
||
|
||
### Look and sound
|
||
|
||
- [ ] Create an evening lighting preset.
|
||
- [ ] Complete a visual polish pass across the neighborhood.
|
||
- [ ] Model the pavement between kerb and building line; today that strip is the terrain mesh, which reads as bare ground under the shopfronts (`Screenshots/README.md`). Carried over 2026-11-09.
|
||
- [ ] Add ambient audio (city ambience, traffic, basic SFX).
|
||
- [ ] Verify licenses for all added audio files.
|
||
|
||
### Release checks
|
||
|
||
- [ ] Both day and evening presets render without defects.
|
||
- [ ] Audio plays without gaps or licensing issues.
|
||
- [ ] Performance target re-validated at 1440p.
|
||
- [ ] Tag `v0.6.0` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.6.1 — Lighting fixes (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Fix lighting defects in day/evening presets.
|
||
- [ ] Tag `v0.6.1` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.6.2 — Material corrections (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Fix material errors found in `0.6.x`.
|
||
- [ ] Tag `v0.6.2` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.6.3 — Audio balancing (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Balance audio levels across the scene.
|
||
- [ ] Tag `v0.6.3` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.7.0 — Settings, control rebinding, save/load, accessibility (weeks 25–27)
|
||
|
||
### Systems
|
||
|
||
- [ ] Build settings menu (graphics and audio options).
|
||
- [ ] Implement control rebinding with persistence.
|
||
- [ ] Implement save/load for player state.
|
||
- [ ] Add accessibility basics (e.g. FOV, subtitle, colorblind options as applicable).
|
||
|
||
### Release checks
|
||
|
||
- [ ] Settings, rebinding, and save/load all persist across restarts.
|
||
- [ ] No blocking UI defects.
|
||
- [ ] Tag `v0.7.0` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.7.1 — Save fixes (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Fix save/load defects.
|
||
- [ ] Tag `v0.7.1` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.7.2 — UI fixes (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Fix UI issues in `0.7.x`.
|
||
- [ ] Tag `v0.7.2` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.7.3 — Input persistence fixes (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Fix rebinding persistence issues.
|
||
- [ ] Tag `v0.7.3` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.8.0 — Performance budgets and broader Linux hardware testing (weeks 28–30)
|
||
|
||
### Performance
|
||
|
||
- [ ] Define performance budgets (frame time, VRAM) and document them.
|
||
- [ ] Profile the full neighborhood; fix budget violations.
|
||
- [ ] Test on broader Linux hardware and VRAM configurations; document results.
|
||
- [ ] Re-validate the 1440p quality preset with upscaling state recorded.
|
||
|
||
### Release checks
|
||
|
||
- [ ] Performance budgets met on documented hardware matrix.
|
||
- [ ] No blocking compatibility defects.
|
||
- [ ] Tag `v0.8.0` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.8.1 — VRAM reductions (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Reduce VRAM usage where profiling shows excess.
|
||
- [ ] Tag `v0.8.1` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.8.2 — Frame-time fixes (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Fix frame-time spikes found in `0.8.x`.
|
||
- [ ] Tag `v0.8.2` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.8.3 — Compatibility fixes (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Fix compatibility issues from the hardware testing matrix.
|
||
- [ ] Tag `v0.8.3` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.9.0 — Realistic buildings (weeks 31–34)
|
||
|
||
Suggested blender skills: **archviz** (real-world scale, façade composition, elevation read), **references** (reference-image-match and visual-match checklists — every building is judged against its own photograph), **procedural-modeling** + **geometry-nodes** (the façades system: bay module, cornice and coping profiles, storefront types as reusable node groups), **materials** (measured albedo and roughness per surface type), **texture-workflow** (baked AO/curvature/normal, decals for painted lettering and signs), **uv-workflow** (texel density and modular UVs), **lod-pipeline** (LOD chain per building), **collision-proxy** (UCX proxies so detail geometry is not the collider), **lookdev** (screenshot comparison loop), **camera-cinematography** (reproducing each building's reference angle), **asset-optimization** + **unreal-export** (pre-export validation, `ue_metric_v1`), **qa-review** (the gate before every review shot).
|
||
|
||
### Façade system
|
||
|
||
- [ ] **Extend the module kit beyond one order.** Art Deco, neoclassical and streamline-moderne variants on the shared 4.96 m bay: alternate window proportions, spandrel and transom bands, and the way each order terminates at the roof.
|
||
- [ ] **Build a profile library** for cornices, copings, string courses, sills and storefront surrounds, so a building is assembled from named profiles rather than ad-hoc boxes.
|
||
- [ ] **Storefront types**: recessed entry, bulkhead and kickplate, mullion spacing, transom, awning/canopy brackets, and grille/shutter variants.
|
||
- [ ] **Signage and lettering as decals.** Painted wall lettering, blade signs and fascia panels become texture and decal work with a documented projection; `0.1.6` proved that lettering built as geometry plates cannot resolve at review distance.
|
||
- [ ] Document the system in `Art/blender/README.md` and the arc42 building block view.
|
||
|
||
### Per-building models
|
||
|
||
Each building needs its own reference set; where none exists the blockout stays and the item says so.
|
||
|
||
- [ ] Hero façade (6840): raise to this pass's detail level — capitals and fluting, window rhythm behind the colonnade, parapet motto band and medallions.
|
||
- [ ] Hero façade (6840), entrance: **doors at street level left and right of the central bay**, as the photographs show, and correct positioning of the central-bay elements (column bases, entrance stairs, set-back entrance, door frames, banners and signage). Nothing may stand in front of the façade that blocks it — no awning, no temporary structure. Carried over from `Screenshots/README.md`, 2026-11-09.
|
||
- [ ] El Capitan Theatre (6838): marquee, blade sign, entrance and the theatre's own elevation from its 18-frame set.
|
||
- [ ] 6800 Lee Drug and 6806–6820: second pass on the `0.1.6` trim. Moved here from that patch because geometry cannot close them: **wall lettering as a decal** (a plate at 0.10 m still vanishes at 40 m), a **moulded parapet profile** instead of a two-tier box, richer **corner-tower stepping**, and the portrait panels reworked as textures rather than framed plates.
|
||
- [ ] **Photography gap — 6822 Budget** (deferred out of `0.1.6`, blocked): no photograph exists; the single-storey 6.0 × 5.5 m volume cannot be read from the neighbour shot, so it stays a bare blockout until references are acquired. Record the sources checked in `Geo/`. Also re-shoot 6806–6820 and 6800 from the south sidewalk: the only reference is one oblique with a bus across Lee Drug's shopfront and a car across 6806's.
|
||
- [ ] 6902, 6922 and the remaining south frontage.
|
||
- [ ] North side: TCL Chinese Theatre and Madame Tussaud's façades from their reference sets.
|
||
- [ ] Reconcile every modelled height against `Geo/tools/block_height_report.py` and record the source per building.
|
||
|
||
### Materials, UVs and performance
|
||
|
||
- [ ] **Measured material library**, including the hero's stone, which currently renders pale because it is a procedural graph and a generated texture set rather than a measured surface: stucco, painted render, ashlar, brick, terrazzo, glazing, bronze and steel trim, with albedo and roughness taken from the photographs rather than guessed; one Unreal material instance per surface type.
|
||
- [ ] **Texel-density rule** per building class, applied through modular UVs; lightmap UVs where required.
|
||
- [ ] **LOD chain and collision proxies** per building: UCX proxies for blocking volume, detail geometry non-colliding.
|
||
- [ ] Re-validate the 60 FPS floor at 1440p once the detail lands, and record the cost of the pass.
|
||
|
||
### Release checks
|
||
|
||
- [ ] Every building with a photograph has a review shot measured against it, with silhouette and proportion deltas recorded in `Screenshots/README.md`.
|
||
- [ ] No building carries an unverified façade; blockouts without references are listed as such in `TODO.md`.
|
||
- [ ] Every building has a collision proxy and at least one LOD.
|
||
- [ ] No surface left on a placeholder material.
|
||
- [ ] `THIRD_PARTY_NOTICES.md` covers every photographic reference used in this pass.
|
||
- [ ] Performance target still met at 1440p.
|
||
- [ ] Tag `v0.9.0` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.10.0 — Feature freeze, public beta, license and build audit (weeks 35–38)
|
||
|
||
### Freeze and audit
|
||
|
||
- [ ] Freeze features; document the freeze in `CHANGELOG.md`.
|
||
- [ ] Produce a public beta build for testers.
|
||
- [ ] Complete license audit: `THIRD_PARTY_NOTICES.md`, all MPFB assets, textures, animations, vehicles, audio.
|
||
- [ ] Review Epic distribution requirements before publishing.
|
||
- [ ] Verify a fresh checkout builds and packages reproducibly.
|
||
|
||
### Release checks
|
||
|
||
- [ ] Beta feedback triaged; blockers logged for `0.10.x`.
|
||
- [ ] Tag `v0.10.0` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.10.1 — Blocker fixes (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Fix blockers reported during the public beta.
|
||
- [ ] Tag `v0.10.1` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.10.2 — Regression fixes (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Fix regressions introduced by `0.9.x` fixes.
|
||
- [ ] Tag `v0.10.2` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 0.10.3 — Documentation fixes (patch)
|
||
|
||
### Patch tasks
|
||
|
||
- [ ] Update all `Docs/` for accuracy before `1.0.0`.
|
||
- [ ] Tag `v0.10.3` and write `CHANGELOG.md` entry; then remove this section.
|
||
|
||
## 1.0.0 — Stable neighborhood-scale walking/driving release (weeks 35–40)
|
||
|
||
### Final release
|
||
|
||
- [ ] Complete final acceptance sweep across all `0.x` features.
|
||
- [ ] Confirm the stable, agreed game scope is met (neighborhood-scale walking and driving).
|
||
- [ ] Final build, documentation, and licensing verification.
|
||
- [ ] Tag `v1.0.0` and write `CHANGELOG.md` entry; then remove this section.
|