diff --git a/ROADMAP.md b/ROADMAP.md index df0c268..8679e6d 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -79,17 +79,15 @@ Owner: this session. Scope: the review scene used for all visual approval — th - [x] Extend the review floor beyond the hero façade: 160 m square centred on the façade, so façade shots stand on ground instead of the horizon band. - [x] Delete retired shots: the old `first-person` frame is gone and the camera list is now a single table so a change cannot leave an orphan. -### Character development - active - 01a1b26b-3c94-707f-9665-2f6b4a79b564 +### Character development — decision: 0.1.0 is first-person only; NPCs planned later -Follow-on work on the player avatar, after the review scene passes. None of it is `0.1.0` scope unless a release check requires it. Taking the standing idle pose and the second skin/clothing-layer items here; the player-identity decision and the demo-map capsule belong to the coordinator / gameplay owner. +Coordinator decision 2026-11-07: **`0.1.0` ships first-person only** — a capsule with a camera, no visible player body. It is **not** a player-avatar blocker for `0.1.0`. -- [x] Standing idle pose: `Tools/mpfb_character_export.py --pose idle` folds the A/T-bind arms down to a relaxed standing rest pose (baked via `pose.armature_apply` before export). Verified: `upperarm01.L` rest z −0.71 → −1.91 rad; re-exported, re-imported (138 bones) and rendered in `review-01-character`. -- [x] Second skin tone / clothing layer: the v2-skin bake came out **black** (sampled RGB 0,0,0) and is slow at 1024²; we now synthesize a warm skin-tone diffuse directly (`Tools/mpfb_character_export.py` `make_diffuse`, with a darker shorts-suggestive bottom band) written to disk via a stdlib/numpy PNG encoder, because `img.save()` writes black for an in-memory image. Character now reads warm, not grey. Screenshot review pending (`Screenshots/review-01-character` re-pended). +The MPFB character asset (idle pose + warm skin, done below) is planned as the template for **NPCs** in later milestones (`0.2.0` adds the body/camera toggle; `0.5.0` adds pedestrians). Keep it as a standalone character/prefab rather than wiring it into the `AGigLineCharacter` pawn. Everything here is future/NPC work, not `0.1.0` scope. -- [ ] Decide what the `0.1.0` player is: first-person-only, or a body that is visible in third person. The `0.2.0` milestone adds the MPFB body and camera toggle; `0.1.0` currently ships a capsule with a camera and no visible body. -- [ ] Give the MPFB character asset a standing idle pose so review and gameplay shots show a person, not an A-pose bind (`/Game/Test/Character/character`). -- [ ] Bake a second skin tone or clothing layer, so the character does not read as a grey mannequin in shots. -- [ ] Add the character's collision capsule in the demo map and confirm the camera does not clip the head at the 1.60 m eye height. +- [x] Give the MPFB character asset a standing idle pose so review and NPC shots show a person, not an A-pose bind. Done: `Tools/mpfb_character_export.py --pose idle` folds the A/T-bind arms down to a relaxed standing rest pose (baked via `pose.armature_apply` before export; `upperarm01.L` rest z −0.71 → −1.91 rad), re-exported, re-imported (138 bones), rendered in `review-01-character`. +- [x] Bake a second skin tone or clothing layer, so the character does not read as a grey mannequin in shots. Done: the v2-skin bake came out **black** and slow at 1024², so we synthesize a warm skin-tone diffuse directly (`Tools/mpfb_character_export.py` `make_diffuse`, with a darker shorts-suggestive bottom band) via a stdlib/numpy PNG writer. Character reads warm, not grey. Screenshot review pending (`Screenshots/review-01-character` re-pended). +- [ ] (open) Keep the character as a reusable NPC prefab: a visible body, a collision capsule, and a head-height check that the camera does not clip at 1.60 m — for when NPCs/pedestrians are wired in (`0.2.0+`), not the `0.1.0` player. ### Asset production @@ -182,8 +180,9 @@ Planned explicitly so the shipped blockouts are not mistaken for finished archit ### Character setup -- [ ] Generate MPFB human base mesh; export baked materials and deform skeleton. -- [ ] Import character into Unreal; validate skeleton, scale, and materials. +- [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`. +- [ ] 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. - [ ] Create basic idle/walk animation set. - [ ] Verify animation plays correctly on the imported rig. @@ -302,7 +301,7 @@ Planned explicitly so the shipped blockouts are not mistaken for finished archit ### Simulation -- [ ] Add pedestrian characters with navigation. +- [ ] Add pedestrian characters with navigation, reusing the idle-pose character asset as the NPC prefab (`/Game/Test/Character`). - [ ] Implement crosswalk behavior (pedestrians use the designated crossing). - [ ] Add limited ambient traffic on the street network. - [ ] Optimize simulation cost to stay within frame budget.