5 Commits
Author SHA1 Message Date
zwitschi 12272d6b96 release: v0.2.0 — third-person body, animation, stride capture
Writes the 0.2.0 changelog entry with the measured numbers, removes the completed
section from TODO.md (its goal stays in ROADMAP.md) and updates the roadmap status.

Release checks: 8/8 shots verify with 6, 7 and 8 approved; 1440p at 2.64 ms average
(379 fps); -qaselftest passes walk, reset, pause, transect, wall and facade probes;
82 tool tests pass. Known limitations are listed rather than hidden: splayed fingers,
a swept base rotation and unproven camera collision, all marked for later patches.
2026-11-09 12:30:49 +01:00
zwitschi 56e104f5f3 todo: close the 0.2.0 animation check, leaving only the tag
Both clips play and advance (idle proved by the single-node instance's asset time,
walk by shot 8), the body carries its skin material and the QA self-test passes.
The two cosmetic defects — splayed fingers and a base rotation that was swept rather
than derived — stay open as 0.2.2 items and are named in the check.
2026-11-09 12:30:00 +01:00
zwitschi 8e880ed09d perf: 0.2.0 re-measured at 1440p — 379 fps average, 6.3x the floor
-qaselftest at 2560x1440, TSR on, VSync off, no frame generation: 759 frames,
avg 2.64 ms (379 fps), p50 2.54, p95 3.39, p99 3.76, max 4.05 ms. The body, skin
material and animation add about 2 % over 0.1.5's 2.61 ms.

The same run passed every QA check: walk, reset 0 cm from spawn, pause/unpause,
transect 1456 samples with 0 holes, wall probe 0/35, facade probe 0/9.

Series committed as Docs/perf/0.2.0-walk-frametimes.csv and the result recorded in
the release-checks table next to the 0.1.0 and 0.1.5 numbers.
2026-11-09 12:29:46 +01:00
zwitschi 9ce7011389 docs(input): the V toggle, the harness switches, and the HUD line
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.
2026-11-09 12:21:11 +01:00
zwitschi f5e7e66127 docs: remove the 0.1.4 review record and the 0.1.0 packaged capture
Both were owner-requested removals. Nothing else referenced the review file except a
MEMORY entry, which now says the per-shot Approved column of Screenshots/README.md is
the only and authoritative record; release-checks keeps the 0.1.0 packaged-build
measurement as numbers and notes that its capture is no longer in the repository.
2026-11-09 12:20:36 +01:00
10 changed files with 822 additions and 117 deletions

No files matched your search

+38
View File
@@ -8,6 +8,44 @@ Format: [Keep a Changelog](https://keepachangelog.com/) style, versions follow [
Nothing yet.
## [0.2.0] — 2026-11-09
Third-person body. The pawn gains a visible, animated body and a third-person camera, so the walk cycle is finally something a player can see rather than a clip in an asset list.
### Added
- **`Tools/character_anim_build.py`**: `GigLine_Idle` (60 frames) and `GigLine_Walk` (30 frames) at 30 fps, authored as parametric cycles so the loop closes by construction. Limb axes were **measured** on the rig — a probe rotated `upperleg01.L` by 0.5 rad on each axis and read `foot.L`, which showed X swings the limb fore/aft while Y twists and Z abducts.
- **Third-person rig** (`ADR-9`): a visible skeletal body, a `USpringArmComponent` with collision testing, and a **V** toggle. One pawn carries both rigs; first person stays the shipped default.
- **Walk capture harness**: a per-shot `ShotFollow` mode that re-places the review camera every frame in the pawn's frame, plus `SetReviewWalk` / `ReturnToStartForReview`, so a stride is captured deterministically and the fixed-camera shots still find the pawn at spawn.
- **Review shots 6, 7 and 8** — third-person back, front and mid-stride — embedded in `Screenshots/README.md`.
### Changed
- Character export preset now **bakes animation** (`bake_anim`, all actions). Without it the exporter wrote a static bind pose and Unreal imported a mesh with no clips and no error.
- `Docs/controls.md` documents the V toggle and the review switches; the in-game HUD line reads `WASD move · Mouse look · Space jump · V view · R reset · Esc pause`.
### Fixed
- **`PlayAnimation` on a hidden component never took effect.** The body is hidden at construction and only unhidden by the toggle, so the first call could land before the component was ready; the code now sets `AnimationSingleNode`, calls `SetAnimation` + `Play`, and re-asserts while the instance is missing.
- **The animation switch restarted the clip every frame**, freezing the body on frame 0.
- **The importer silently refused to replace the existing assets.** Changing the arm rotation and rebuilding returned the identical bone quaternion every time; `replace_existing` and `delete_asset` both failed because the pawn's constructor hard-references the clips. Importing under a new name (`CharacterV2`) finally landed the change — that is what unblocked the pose after a dozen failed rebuilds.
- **The review runner copied stale screenshots** from `Saved/`, so a shot retired from the camera list reappeared with byte-identical content from an older run. The folder is cleared before each capture.
- **Walking was never enabled for the stride shot**: the call sat in the shot sequencer's `BeginPlay`, which runs before the player pawn exists, so the cast silently found nothing and `speed` stayed at 0.
### Verified
- **8 review shots verify**; shots 6, 7 and 8 approved by the owner.
- **1440p, no frame generation, VSync off**: 759 frames, avg **2.64 ms (379 fps)**, p50 2.54, p95 3.39, p99 3.76, max 4.05 ms — about 2 % over `0.1.5` and 6.3× the 60 fps floor. Series: `Docs/perf/0.2.0-walk-frametimes.csv`.
- `-qaselftest`: walk, reset 0 cm from spawn, pause/unpause, transect 1456 samples / 0 holes, wall probe 0/35, façade probe 0/9 — all PASS.
- 82 tool tests pass.
### Known limitations
- **The fingers splay** — the bind's finger spread carries into the pose. Deferred to `0.2.2`.
- **The arms-down rotation was found by sweeping**, not derived: 0.55 rad puts the arms at the sides, 0.65 against the hip, 0.75 into the torso. A derived pose is a `0.2.2` job.
- **Camera collision is implemented but unproven** — the spawn point has open space behind it, so no shot exercises the boom shortening.
- The third-person body has no head or hand IK and no turn-in-place; it is a first playable, not a finished character.
## [0.1.6] — 2026-11-09
Retail frontage. The two retail buildings beside the hero are modelled from their own photograph instead of the generic kit, and the photograph is treated as evidence: an analysis is written before any geometry, and every dimension the image does not resolve is carried into the part report as an assumption.
+18 -1
View File
@@ -1,4 +1,4 @@
# Controls (`0.1.0` walkable demo)
# Controls
Keyboard and mouse. The same list is shown in-game, bottom-right of the frame (`AGigLineHUD`), and the packaged Linux build ships with these bindings.
@@ -12,6 +12,7 @@ Keyboard and mouse. The same list is shown in-game, bottom-right of the frame (`
| Jump | `Space` | |
| Reset to start | `R` | Returns to the grounded spawn point |
| Pause / release mouse | `Escape` | Second press resumes and recaptures the mouse |
| Swap first / third person | `V` | First person is the default; the body is hidden in that view |
## Notes
@@ -19,6 +20,22 @@ Keyboard and mouse. The same list is shown in-game, bottom-right of the frame (`
- The mouse is captured on launch, so looking works without clicking first. `Escape` toggles the capture as part of pause.
- Bindings are Enhanced Input actions in `/Game/Input` built by `Tools/ue_create_input_assets.py`; the mapping context is `IMC_Default`.
## Changes since `0.1.0`
- **`V` swaps first and third person** (`0.2.0`, `IA_ToggleCamera`). The shipped default view is still first person, as the owner decided for `0.1.0`; third person adds a collision-tested spring-arm camera and a visible, animated body. `Escape` still pauses and releases the mouse in either view.
## Review and harness switches
These are command-line switches for the screenshot pipeline and QA runs, not player controls. They exist so a capture is reproducible rather than dependent on a human pressing keys at the right moment.
| Switch | Effect |
| --- | --- |
| `-thirdperson` | Starts the pawn in the third-person rig, so a capture shows the body without anyone pressing `V` |
| `-walk` | Holds forward input from the first frame — what makes the stride shot possible |
| `-qaselftest` | Runs the scripted walk / reset / pause / transect checks and quits |
The walking shot is driven per shot rather than by the switch: the shot actor enables the walk only while a tracking (`ShotFollow`) camera is being captured, and returns the pawn to spawn afterwards, so the fixed-camera shots still find it in place.
## Testing input without a physical keyboard
`Tools/input_test.py` injects OS-level keyboard/mouse events through a virtual `/dev/uinput` device (see `Tools/input_emulation.py`), e.g.:
Binary file not shown.
+760
View File
@@ -0,0 +1,760 @@
frame,ms
0,2.428
1,2.633
2,2.238
3,3.606
4,2.431
5,2.649
6,4.050
7,2.011
8,2.735
9,3.390
10,2.901
11,2.237
12,2.686
13,2.383
14,2.451
15,3.412
16,2.458
17,2.474
18,2.588
19,2.556
20,2.478
21,3.150
22,2.667
23,2.349
24,2.568
25,2.580
26,2.393
27,2.575
28,3.132
29,2.536
30,2.508
31,2.710
32,2.348
33,2.537
34,2.820
35,3.162
36,2.163
37,2.562
38,2.619
39,2.323
40,2.628
41,3.075
42,2.512
43,2.448
44,2.505
45,2.454
46,2.607
47,3.128
48,2.476
49,2.562
50,2.434
51,3.385
52,2.076
53,3.435
54,2.672
55,2.550
56,1.998
57,2.583
58,2.518
59,2.777
60,3.920
61,2.934
62,2.675
63,2.320
64,2.309
65,2.520
66,3.947
67,2.596
68,2.708
69,2.291
70,2.404
71,2.551
72,3.715
73,2.100
74,2.539
75,2.682
76,2.273
77,2.442
78,3.952
79,2.233
80,2.374
81,2.686
82,2.407
83,2.654
84,3.613
85,2.320
86,2.685
87,2.744
88,2.357
89,2.565
90,3.756
91,2.672
92,2.128
93,2.583
94,2.546
95,2.391
96,2.935
97,3.624
98,1.934
99,2.509
100,2.603
101,2.449
102,2.802
103,3.678
104,2.336
105,2.509
106,2.551
107,2.576
108,2.997
109,3.208
110,2.301
111,2.359
112,2.484
113,2.646
114,2.801
115,3.226
116,2.635
117,2.325
118,2.501
119,2.602
120,2.564
121,3.151
122,3.149
123,2.235
124,2.596
125,2.432
126,2.665
127,2.648
128,3.884
129,2.087
130,2.375
131,2.586
132,2.734
133,2.338
134,3.617
135,2.418
136,2.350
137,2.713
138,2.758
139,2.239
140,3.585
141,2.565
142,2.787
143,2.115
144,2.435
145,2.489
146,3.062
147,2.958
148,2.402
149,2.425
150,2.516
151,2.505
152,2.543
153,3.690
154,2.060
155,2.510
156,2.428
157,2.603
158,2.491
159,3.178
160,2.496
161,2.424
162,2.495
163,2.667
164,2.434
165,3.040
166,2.949
167,2.094
168,2.510
169,2.586
170,2.395
171,3.004
172,3.009
173,2.288
174,2.548
175,2.337
176,2.598
177,2.498
178,3.526
179,2.533
180,2.134
181,2.560
182,2.541
183,2.436
184,2.635
185,3.361
186,2.261
187,2.566
188,2.383
189,2.529
190,2.645
191,3.190
192,2.523
193,2.523
194,2.346
195,2.865
196,2.348
197,2.879
198,3.657
199,1.824
200,2.551
201,2.449
202,2.607
203,3.085
204,3.163
205,2.404
206,2.327
207,2.553
208,2.576
209,2.544
210,3.193
211,2.647
212,2.332
213,2.544
214,2.767
215,2.429
216,3.103
217,2.861
218,2.318
219,2.552
220,2.587
221,2.352
222,3.128
223,2.621
224,2.461
225,2.422
226,2.601
227,2.748
228,2.545
229,3.224
230,2.206
231,2.459
232,2.530
233,2.461
234,2.570
235,3.271
236,2.405
237,2.424
238,2.671
239,2.450
240,2.644
241,2.510
242,3.023
243,2.461
244,2.618
245,2.350
246,2.551
247,2.472
248,3.642
249,2.576
250,2.548
251,3.599
252,1.992
253,2.424
254,3.752
255,2.241
256,2.360
257,2.522
258,2.584
259,2.653
260,2.871
261,2.827
262,2.369
263,2.482
264,2.599
265,2.294
266,2.686
267,3.428
268,2.240
269,2.435
270,2.468
271,2.619
272,2.519
273,3.247
274,2.539
275,2.442
276,2.518
277,2.489
278,2.463
279,2.839
280,2.907
281,2.786
282,2.211
283,2.615
284,2.378
285,2.671
286,3.219
287,2.435
288,2.509
289,2.323
290,2.502
291,2.526
292,3.292
293,2.468
294,2.526
295,2.500
296,2.431
297,2.481
298,2.921
299,3.009
300,2.415
301,2.600
302,2.344
303,2.533
304,2.618
305,3.458
306,2.455
307,2.469
308,2.495
309,2.568
310,2.473
311,3.179
312,2.694
313,2.503
314,2.587
315,2.317
316,2.609
317,2.590
318,3.211
319,2.392
320,2.490
321,2.515
322,2.496
323,2.483
324,3.157
325,2.540
326,2.422
327,2.574
328,2.468
329,2.547
330,2.788
331,3.075
332,2.231
333,2.537
334,2.577
335,2.584
336,2.473
337,3.415
338,2.126
339,2.506
340,2.374
341,2.721
342,2.418
343,3.259
344,2.509
345,2.519
346,2.436
347,2.472
348,2.504
349,2.858
350,3.250
351,2.161
352,2.586
353,2.376
354,2.651
355,2.504
356,3.399
357,2.353
358,2.381
359,2.513
360,2.633
361,2.566
362,3.615
363,2.593
364,2.084
365,2.411
366,2.653
367,2.521
368,2.825
369,2.891
370,2.576
371,2.302
372,2.582
373,2.513
374,2.598
375,3.790
376,2.352
377,2.306
378,2.434
379,2.514
380,2.708
381,2.978
382,2.813
383,2.327
384,2.502
385,2.446
386,2.605
387,3.033
388,3.091
389,2.206
390,2.648
391,2.732
392,2.296
393,3.406
394,2.490
395,2.424
396,2.443
397,2.601
398,2.628
399,2.477
400,3.241
401,2.573
402,2.422
403,2.384
404,2.505
405,2.575
406,2.909
407,2.897
408,2.486
409,2.431
410,2.691
411,2.342
412,2.733
413,3.518
414,2.391
415,2.160
416,2.671
417,2.505
418,2.241
419,3.355
420,2.775
421,2.395
422,2.864
423,2.290
424,2.469
425,2.977
426,2.759
427,2.460
428,2.456
429,2.497
430,2.362
431,2.874
432,2.812
433,2.559
434,2.283
435,2.670
436,2.482
437,2.495
438,3.118
439,3.018
440,2.252
441,3.222
442,2.483
443,2.436
444,3.209
445,3.169
446,2.455
447,2.432
448,2.464
449,2.500
450,2.967
451,2.958
452,2.390
453,2.494
454,2.523
455,2.473
456,2.516
457,3.527
458,2.262
459,2.377
460,2.840
461,2.135
462,2.520
463,3.285
464,2.940
465,2.256
466,2.496
467,2.705
468,2.395
469,3.031
470,3.104
471,2.411
472,2.630
473,2.468
474,2.416
475,2.559
476,2.732
477,2.441
478,2.624
479,2.536
480,2.458
481,2.516
482,2.507
483,2.606
484,2.616
485,2.881
486,2.358
487,2.469
488,2.513
489,3.250
490,2.606
491,2.545
492,2.407
493,2.437
494,2.663
495,3.346
496,2.349
497,2.481
498,2.613
499,2.483
500,2.417
501,2.923
502,3.059
503,2.483
504,2.373
505,2.525
506,2.530
507,2.431
508,2.917
509,2.559
510,2.623
511,3.172
512,2.304
513,2.331
514,3.287
515,2.544
516,2.429
517,2.690
518,2.464
519,2.406
520,2.804
521,2.899
522,2.461
523,2.536
524,2.414
525,2.380
526,2.616
527,3.236
528,2.499
529,2.558
530,2.584
531,2.309
532,2.447
533,3.039
534,3.133
535,2.170
536,2.583
537,2.505
538,2.666
539,2.567
540,3.307
541,2.177
542,2.495
543,2.441
544,2.638
545,2.521
546,3.527
547,2.460
548,2.362
549,2.520
550,2.439
551,2.572
552,3.087
553,2.707
554,2.475
555,2.283
556,2.604
557,2.529
558,3.094
559,3.051
560,2.085
561,2.365
562,2.711
563,2.351
564,2.572
565,2.979
566,2.805
567,2.373
568,2.744
569,2.340
570,2.285
571,2.791
572,3.447
573,2.208
574,2.518
575,2.448
576,3.917
577,1.540
578,2.923
579,2.632
580,2.404
581,2.582
582,2.508
583,2.413
584,3.602
585,2.342
586,2.482
587,2.584
588,3.062
589,2.070
590,2.726
591,2.937
592,2.385
593,2.734
594,2.188
595,2.582
596,2.487
597,3.339
598,2.535
599,2.414
600,2.459
601,2.510
602,2.547
603,3.414
604,2.314
605,2.399
606,2.550
607,2.541
608,2.355
609,2.709
610,3.067
611,2.502
612,2.467
613,2.899
614,2.177
615,2.719
616,3.049
617,2.673
618,2.259
619,2.566
620,2.383
621,2.420
622,3.318
623,2.807
624,2.348
625,2.595
626,2.433
627,2.569
628,2.620
629,2.652
630,3.140
631,2.945
632,2.571
633,2.546
634,2.428
635,3.436
636,2.393
637,2.491
638,2.511
639,2.485
640,2.603
641,3.363
642,2.442
643,2.344
644,2.462
645,2.508
646,2.617
647,2.909
648,2.824
649,2.528
650,2.424
651,2.511
652,2.517
653,2.583
654,3.331
655,2.436
656,2.455
657,2.380
658,2.570
659,2.582
660,2.789
661,2.917
662,2.526
663,2.538
664,2.447
665,2.423
666,2.695
667,3.143
668,2.616
669,2.126
670,2.596
671,2.464
672,3.092
673,2.681
674,2.641
675,2.311
676,2.551
677,2.551
678,2.837
679,2.532
680,3.006
681,2.289
682,2.521
683,2.556
684,2.593
685,2.552
686,3.173
687,2.415
688,2.429
689,2.733
690,2.286
691,2.476
692,3.256
693,2.897
694,2.528
695,2.377
696,2.518
697,2.504
698,3.074
699,2.814
700,2.433
701,2.338
702,2.476
703,2.458
704,3.141
705,2.551
706,2.717
707,2.300
708,2.527
709,2.446
710,2.469
711,2.866
712,2.776
713,2.507
714,2.457
715,2.520
716,2.450
717,2.568
718,3.192
719,2.471
720,2.790
721,2.337
722,2.548
723,2.435
724,3.313
725,2.274
726,2.461
727,2.451
728,2.556
729,2.546
730,2.869
731,3.308
732,2.293
733,2.428
734,2.686
735,2.562
736,2.523
737,3.309
738,2.311
739,2.498
740,2.485
741,2.568
742,2.392
743,3.260
744,2.534
745,2.550
746,2.355
747,2.768
748,2.319
749,3.039
750,2.721
751,2.490
752,2.378
753,2.539
754,2.823
755,2.480
756,3.533
757,2.285
758,2.365
1 frame ms
2 0 2.428
3 1 2.633
4 2 2.238
5 3 3.606
6 4 2.431
7 5 2.649
8 6 4.050
9 7 2.011
10 8 2.735
11 9 3.390
12 10 2.901
13 11 2.237
14 12 2.686
15 13 2.383
16 14 2.451
17 15 3.412
18 16 2.458
19 17 2.474
20 18 2.588
21 19 2.556
22 20 2.478
23 21 3.150
24 22 2.667
25 23 2.349
26 24 2.568
27 25 2.580
28 26 2.393
29 27 2.575
30 28 3.132
31 29 2.536
32 30 2.508
33 31 2.710
34 32 2.348
35 33 2.537
36 34 2.820
37 35 3.162
38 36 2.163
39 37 2.562
40 38 2.619
41 39 2.323
42 40 2.628
43 41 3.075
44 42 2.512
45 43 2.448
46 44 2.505
47 45 2.454
48 46 2.607
49 47 3.128
50 48 2.476
51 49 2.562
52 50 2.434
53 51 3.385
54 52 2.076
55 53 3.435
56 54 2.672
57 55 2.550
58 56 1.998
59 57 2.583
60 58 2.518
61 59 2.777
62 60 3.920
63 61 2.934
64 62 2.675
65 63 2.320
66 64 2.309
67 65 2.520
68 66 3.947
69 67 2.596
70 68 2.708
71 69 2.291
72 70 2.404
73 71 2.551
74 72 3.715
75 73 2.100
76 74 2.539
77 75 2.682
78 76 2.273
79 77 2.442
80 78 3.952
81 79 2.233
82 80 2.374
83 81 2.686
84 82 2.407
85 83 2.654
86 84 3.613
87 85 2.320
88 86 2.685
89 87 2.744
90 88 2.357
91 89 2.565
92 90 3.756
93 91 2.672
94 92 2.128
95 93 2.583
96 94 2.546
97 95 2.391
98 96 2.935
99 97 3.624
100 98 1.934
101 99 2.509
102 100 2.603
103 101 2.449
104 102 2.802
105 103 3.678
106 104 2.336
107 105 2.509
108 106 2.551
109 107 2.576
110 108 2.997
111 109 3.208
112 110 2.301
113 111 2.359
114 112 2.484
115 113 2.646
116 114 2.801
117 115 3.226
118 116 2.635
119 117 2.325
120 118 2.501
121 119 2.602
122 120 2.564
123 121 3.151
124 122 3.149
125 123 2.235
126 124 2.596
127 125 2.432
128 126 2.665
129 127 2.648
130 128 3.884
131 129 2.087
132 130 2.375
133 131 2.586
134 132 2.734
135 133 2.338
136 134 3.617
137 135 2.418
138 136 2.350
139 137 2.713
140 138 2.758
141 139 2.239
142 140 3.585
143 141 2.565
144 142 2.787
145 143 2.115
146 144 2.435
147 145 2.489
148 146 3.062
149 147 2.958
150 148 2.402
151 149 2.425
152 150 2.516
153 151 2.505
154 152 2.543
155 153 3.690
156 154 2.060
157 155 2.510
158 156 2.428
159 157 2.603
160 158 2.491
161 159 3.178
162 160 2.496
163 161 2.424
164 162 2.495
165 163 2.667
166 164 2.434
167 165 3.040
168 166 2.949
169 167 2.094
170 168 2.510
171 169 2.586
172 170 2.395
173 171 3.004
174 172 3.009
175 173 2.288
176 174 2.548
177 175 2.337
178 176 2.598
179 177 2.498
180 178 3.526
181 179 2.533
182 180 2.134
183 181 2.560
184 182 2.541
185 183 2.436
186 184 2.635
187 185 3.361
188 186 2.261
189 187 2.566
190 188 2.383
191 189 2.529
192 190 2.645
193 191 3.190
194 192 2.523
195 193 2.523
196 194 2.346
197 195 2.865
198 196 2.348
199 197 2.879
200 198 3.657
201 199 1.824
202 200 2.551
203 201 2.449
204 202 2.607
205 203 3.085
206 204 3.163
207 205 2.404
208 206 2.327
209 207 2.553
210 208 2.576
211 209 2.544
212 210 3.193
213 211 2.647
214 212 2.332
215 213 2.544
216 214 2.767
217 215 2.429
218 216 3.103
219 217 2.861
220 218 2.318
221 219 2.552
222 220 2.587
223 221 2.352
224 222 3.128
225 223 2.621
226 224 2.461
227 225 2.422
228 226 2.601
229 227 2.748
230 228 2.545
231 229 3.224
232 230 2.206
233 231 2.459
234 232 2.530
235 233 2.461
236 234 2.570
237 235 3.271
238 236 2.405
239 237 2.424
240 238 2.671
241 239 2.450
242 240 2.644
243 241 2.510
244 242 3.023
245 243 2.461
246 244 2.618
247 245 2.350
248 246 2.551
249 247 2.472
250 248 3.642
251 249 2.576
252 250 2.548
253 251 3.599
254 252 1.992
255 253 2.424
256 254 3.752
257 255 2.241
258 256 2.360
259 257 2.522
260 258 2.584
261 259 2.653
262 260 2.871
263 261 2.827
264 262 2.369
265 263 2.482
266 264 2.599
267 265 2.294
268 266 2.686
269 267 3.428
270 268 2.240
271 269 2.435
272 270 2.468
273 271 2.619
274 272 2.519
275 273 3.247
276 274 2.539
277 275 2.442
278 276 2.518
279 277 2.489
280 278 2.463
281 279 2.839
282 280 2.907
283 281 2.786
284 282 2.211
285 283 2.615
286 284 2.378
287 285 2.671
288 286 3.219
289 287 2.435
290 288 2.509
291 289 2.323
292 290 2.502
293 291 2.526
294 292 3.292
295 293 2.468
296 294 2.526
297 295 2.500
298 296 2.431
299 297 2.481
300 298 2.921
301 299 3.009
302 300 2.415
303 301 2.600
304 302 2.344
305 303 2.533
306 304 2.618
307 305 3.458
308 306 2.455
309 307 2.469
310 308 2.495
311 309 2.568
312 310 2.473
313 311 3.179
314 312 2.694
315 313 2.503
316 314 2.587
317 315 2.317
318 316 2.609
319 317 2.590
320 318 3.211
321 319 2.392
322 320 2.490
323 321 2.515
324 322 2.496
325 323 2.483
326 324 3.157
327 325 2.540
328 326 2.422
329 327 2.574
330 328 2.468
331 329 2.547
332 330 2.788
333 331 3.075
334 332 2.231
335 333 2.537
336 334 2.577
337 335 2.584
338 336 2.473
339 337 3.415
340 338 2.126
341 339 2.506
342 340 2.374
343 341 2.721
344 342 2.418
345 343 3.259
346 344 2.509
347 345 2.519
348 346 2.436
349 347 2.472
350 348 2.504
351 349 2.858
352 350 3.250
353 351 2.161
354 352 2.586
355 353 2.376
356 354 2.651
357 355 2.504
358 356 3.399
359 357 2.353
360 358 2.381
361 359 2.513
362 360 2.633
363 361 2.566
364 362 3.615
365 363 2.593
366 364 2.084
367 365 2.411
368 366 2.653
369 367 2.521
370 368 2.825
371 369 2.891
372 370 2.576
373 371 2.302
374 372 2.582
375 373 2.513
376 374 2.598
377 375 3.790
378 376 2.352
379 377 2.306
380 378 2.434
381 379 2.514
382 380 2.708
383 381 2.978
384 382 2.813
385 383 2.327
386 384 2.502
387 385 2.446
388 386 2.605
389 387 3.033
390 388 3.091
391 389 2.206
392 390 2.648
393 391 2.732
394 392 2.296
395 393 3.406
396 394 2.490
397 395 2.424
398 396 2.443
399 397 2.601
400 398 2.628
401 399 2.477
402 400 3.241
403 401 2.573
404 402 2.422
405 403 2.384
406 404 2.505
407 405 2.575
408 406 2.909
409 407 2.897
410 408 2.486
411 409 2.431
412 410 2.691
413 411 2.342
414 412 2.733
415 413 3.518
416 414 2.391
417 415 2.160
418 416 2.671
419 417 2.505
420 418 2.241
421 419 3.355
422 420 2.775
423 421 2.395
424 422 2.864
425 423 2.290
426 424 2.469
427 425 2.977
428 426 2.759
429 427 2.460
430 428 2.456
431 429 2.497
432 430 2.362
433 431 2.874
434 432 2.812
435 433 2.559
436 434 2.283
437 435 2.670
438 436 2.482
439 437 2.495
440 438 3.118
441 439 3.018
442 440 2.252
443 441 3.222
444 442 2.483
445 443 2.436
446 444 3.209
447 445 3.169
448 446 2.455
449 447 2.432
450 448 2.464
451 449 2.500
452 450 2.967
453 451 2.958
454 452 2.390
455 453 2.494
456 454 2.523
457 455 2.473
458 456 2.516
459 457 3.527
460 458 2.262
461 459 2.377
462 460 2.840
463 461 2.135
464 462 2.520
465 463 3.285
466 464 2.940
467 465 2.256
468 466 2.496
469 467 2.705
470 468 2.395
471 469 3.031
472 470 3.104
473 471 2.411
474 472 2.630
475 473 2.468
476 474 2.416
477 475 2.559
478 476 2.732
479 477 2.441
480 478 2.624
481 479 2.536
482 480 2.458
483 481 2.516
484 482 2.507
485 483 2.606
486 484 2.616
487 485 2.881
488 486 2.358
489 487 2.469
490 488 2.513
491 489 3.250
492 490 2.606
493 491 2.545
494 492 2.407
495 493 2.437
496 494 2.663
497 495 3.346
498 496 2.349
499 497 2.481
500 498 2.613
501 499 2.483
502 500 2.417
503 501 2.923
504 502 3.059
505 503 2.483
506 504 2.373
507 505 2.525
508 506 2.530
509 507 2.431
510 508 2.917
511 509 2.559
512 510 2.623
513 511 3.172
514 512 2.304
515 513 2.331
516 514 3.287
517 515 2.544
518 516 2.429
519 517 2.690
520 518 2.464
521 519 2.406
522 520 2.804
523 521 2.899
524 522 2.461
525 523 2.536
526 524 2.414
527 525 2.380
528 526 2.616
529 527 3.236
530 528 2.499
531 529 2.558
532 530 2.584
533 531 2.309
534 532 2.447
535 533 3.039
536 534 3.133
537 535 2.170
538 536 2.583
539 537 2.505
540 538 2.666
541 539 2.567
542 540 3.307
543 541 2.177
544 542 2.495
545 543 2.441
546 544 2.638
547 545 2.521
548 546 3.527
549 547 2.460
550 548 2.362
551 549 2.520
552 550 2.439
553 551 2.572
554 552 3.087
555 553 2.707
556 554 2.475
557 555 2.283
558 556 2.604
559 557 2.529
560 558 3.094
561 559 3.051
562 560 2.085
563 561 2.365
564 562 2.711
565 563 2.351
566 564 2.572
567 565 2.979
568 566 2.805
569 567 2.373
570 568 2.744
571 569 2.340
572 570 2.285
573 571 2.791
574 572 3.447
575 573 2.208
576 574 2.518
577 575 2.448
578 576 3.917
579 577 1.540
580 578 2.923
581 579 2.632
582 580 2.404
583 581 2.582
584 582 2.508
585 583 2.413
586 584 3.602
587 585 2.342
588 586 2.482
589 587 2.584
590 588 3.062
591 589 2.070
592 590 2.726
593 591 2.937
594 592 2.385
595 593 2.734
596 594 2.188
597 595 2.582
598 596 2.487
599 597 3.339
600 598 2.535
601 599 2.414
602 600 2.459
603 601 2.510
604 602 2.547
605 603 3.414
606 604 2.314
607 605 2.399
608 606 2.550
609 607 2.541
610 608 2.355
611 609 2.709
612 610 3.067
613 611 2.502
614 612 2.467
615 613 2.899
616 614 2.177
617 615 2.719
618 616 3.049
619 617 2.673
620 618 2.259
621 619 2.566
622 620 2.383
623 621 2.420
624 622 3.318
625 623 2.807
626 624 2.348
627 625 2.595
628 626 2.433
629 627 2.569
630 628 2.620
631 629 2.652
632 630 3.140
633 631 2.945
634 632 2.571
635 633 2.546
636 634 2.428
637 635 3.436
638 636 2.393
639 637 2.491
640 638 2.511
641 639 2.485
642 640 2.603
643 641 3.363
644 642 2.442
645 643 2.344
646 644 2.462
647 645 2.508
648 646 2.617
649 647 2.909
650 648 2.824
651 649 2.528
652 650 2.424
653 651 2.511
654 652 2.517
655 653 2.583
656 654 3.331
657 655 2.436
658 656 2.455
659 657 2.380
660 658 2.570
661 659 2.582
662 660 2.789
663 661 2.917
664 662 2.526
665 663 2.538
666 664 2.447
667 665 2.423
668 666 2.695
669 667 3.143
670 668 2.616
671 669 2.126
672 670 2.596
673 671 2.464
674 672 3.092
675 673 2.681
676 674 2.641
677 675 2.311
678 676 2.551
679 677 2.551
680 678 2.837
681 679 2.532
682 680 3.006
683 681 2.289
684 682 2.521
685 683 2.556
686 684 2.593
687 685 2.552
688 686 3.173
689 687 2.415
690 688 2.429
691 689 2.733
692 690 2.286
693 691 2.476
694 692 3.256
695 693 2.897
696 694 2.528
697 695 2.377
698 696 2.518
699 697 2.504
700 698 3.074
701 699 2.814
702 700 2.433
703 701 2.338
704 702 2.476
705 703 2.458
706 704 3.141
707 705 2.551
708 706 2.717
709 707 2.300
710 708 2.527
711 709 2.446
712 710 2.469
713 711 2.866
714 712 2.776
715 713 2.507
716 714 2.457
717 715 2.520
718 716 2.450
719 717 2.568
720 718 3.192
721 719 2.471
722 720 2.790
723 721 2.337
724 722 2.548
725 723 2.435
726 724 3.313
727 725 2.274
728 726 2.461
729 727 2.451
730 728 2.556
731 729 2.546
732 730 2.869
733 731 3.308
734 732 2.293
735 733 2.428
736 734 2.686
737 735 2.562
738 736 2.523
739 737 3.309
740 738 2.311
741 739 2.498
742 740 2.485
743 741 2.568
744 742 2.392
745 743 3.260
746 744 2.534
747 745 2.550
748 746 2.355
749 747 2.768
750 748 2.319
751 749 3.039
752 750 2.721
753 751 2.490
754 752 2.378
755 753 2.539
756 754 2.823
757 755 2.480
758 756 3.533
759 757 2.285
760 758 2.365
+3 -2
View File
@@ -42,8 +42,9 @@ Measured at 1440p on the development workstation: Bazzite, Ryzen 7 7700X, 64 GB
| `0.1.0` | Placement vs references | PASS (with deliberate simplifications) | Section below, 2026-11-08 | 2026-11-08 |
| `0.1.0` | Collision and packaging | PASS — no blocking collision, no invisible walls, no seam gaps (see audit note) | `-qaselftest` on the packaged build, 2026-11-08 | 2026-11-08 |
| `0.1.0` | 60 FPS at 1440p | PASS — 2.42 ms avg (414 fps), p99 3.01 ms at 2560×1440, TSR on, VSync off, no FG | `-qaselftest` perf capture, `Docs/perf/0.1.0-walk-frametimes.csv` | 2026-11-08 |
| `0.2.0` | 60 FPS at 1440p | PASS — 2.64 ms avg (379 fps), p50 2.54, p95 3.39, p99 3.76, max 4.05 ms at 2560×1440, TSR on, VSync off, no FG | `-qaselftest` perf capture, `Docs/perf/0.2.0-walk-frametimes.csv` | 2026-11-09 |
| `0.1.0` | Fresh checkout build | PASS — clean clone of `main` (`4bc41e9`), `git lfs pull` + `check-lfs.sh` OK (130 LFS files), both `GigLineEditor` and `GigLine` targets built with the documented engine | `/tmp/fresh-check`, 2026-11-08 | 2026-11-08 |
| `0.1.0` | Packaged Linux build | PASS — packaged Development build launches straight into DemoMap, no missing-asset/linker errors; controls shown in-game and in `Docs/controls.md` | `Docs/perf/0.1.0-packaged-hud-controls.png`, 2026-11-08 | 2026-11-08 |
| `0.1.0` | Packaged Linux build | PASS — packaged Development build launches straight into DemoMap, no missing-asset/linker errors; controls shown in-game and in `Docs/controls.md` | measurement recorded 2026-11-08; the capture was removed from the repository 2026-11-09 | 2026-11-08 |
## `0.1.0` — Placement vs references — record (2026-11-08)
@@ -175,6 +176,6 @@ Engine/Build/BatchFiles/Linux/Build.sh GigLine Linux Development \
- `Docs/controls.md` — full binding table (WASD, mouse look, Space, R, Esc) plus how to test input headlessly.
- `AGigLineHUD` now draws a control legend bottom-right every frame: "WASD move · Mouse look · Space jump · R reset · Esc pause".
- Verified in the packaged capture: the bottom-right text bbox is 426×12 px (a single right-aligned line), attributed text bottom-left. Screenshot: `Docs/perf/0.1.0-packaged-hud-controls.png`.
- Measured in the packaged build on 2026-11-08: the bottom-right text bbox was 426×12 px (a single right-aligned line), attributed text bottom-left. The capture has since been removed from the repository, so the numbers stand as the record.
**Verdict: PASS.**
-80
View File
@@ -1,80 +0,0 @@
# `0.1.4` façade review — signoff
Four demo-map captures from the `facades-0.1.4` branch, after the module kit, the textured materials and the theatre marquee went in. **All seven items signed off 2026-11-09** (owner review of the local renders).
Reference photographs to compare against: `Art/reference/hollywood/` and `Art/reference/el-capitan-*` (local, not committed). Regenerate the set with `Tools/render_screenshots.sh --verify`; measure it with `python3 Tools/visual_loop.py --compare --iteration 5`.
## Signoff
- [x] **1. Block from the north sidewalk** — hero between its neighbours, sidewalk and road read correctly
- [x] **2. Street level** — colonnade, shopfronts and window rhythm hold up at eye height
- [x] **3. Crossing** — zebra bars, kerb line and the frontage behind
- [x] **4. North buildings** — TCL and Tussaud's framed across the boulevard
- [x] **5. Materials** — stone reads as coursed stone, glazing as glass, not flat colour
- [x] **6. Theatre trim** — marquee and blade sign proportions believable at street level
- [x] **7. Approve** `v0.1.4` (kit + materials + theatre trim); remaining geometry moves to the next version
## 1. Block from the north sidewalk
![Block from the north sidewalk](../../Screenshots/demo/review-demo-spawn-view.png)
Expected: the neoclassical hero façade between its neighbours, both sidewalks and the road in the foreground. _Metric: 0.68 similarity, edges 0.28× reference._
## 2. Street level
![Street level](../../Screenshots/demo/review-demo-street-level.png)
Expected: the hero colonnade with adjacent frontage buildings either side, shopfronts at pavement level, 4.96 m bay rhythm. _Metric: 0.33, edges 0.27×._
## 3. The designated crossing
![Crossing](../../Screenshots/demo/review-demo-crossing.png)
Expected: continental zebra bars on the asphalt at s=130 m, south frontage and colonnade behind. _Metric: 0.42, edges 0.34×._
## 4. North-side buildings
![North buildings](../../Screenshots/demo/review-demo-north-buildings.png)
Expected: TCL Chinese Theatre and Madame Tussaud's across Hollywood Blvd, full height in frame. _Metric: 0.34, edges 0.14×._
---
## Appendix — what was checked, and what was broken
### Verified
- **Behaviour**, packaged build, `-qaselftest`: walk 761 cm in 2 s (Z steady 456), reset 0 cm, pause/unpause, seam transect 1456 samples / **0 holes**, wall probe **0/35**, façade occlusion probe **0/9** — all PASS. Run twice: the harness is time-based and one loaded run reported a false failure (`walk 246 cm`, `pause FAIL`), an immediate re-run passed — re-run before believing a single FAIL.
- **Placement**, probed from the live map against `Geo/verification/2026-11-06-el-capitan-block.md`: 6922 −24276…−17700, 6902 −17749…−14591, **hero −14644…−12028 between them**, theatre −12082…−8210, 6822 / 6806 / 6800 −7854…−1437, TCL −22889…−18442, Tussaud's −27071…−22799. Blockout affine residual **0.0 cm**.
- **Budgets**: hero 148 parts / 3 044 tris · kit 16 meshes × 12 tris · 625 kit actors ≈ 7 500 tris · 8 × 512² textures (196 KB) · 67 tool tests pass.
- **Topology**: every kit piece manifold, no loose geometry.
### Defects found this cycle
Every one of these rendered convincingly; the placement ones were caught by coordinate probes, not by looking.
| Sev | Defect | Root cause |
| --- | --- | --- |
| Blocker | Frontage shifted ≈119 m X / 2.4 m Y, hero outside its gap | Blockout regenerated without `--origin` |
| Blocker | Kit placed ~12 km from its buildings | Used mesh-local bbox; actors carry the offset |
| Blocker | Marquee on the far side of the boulevard | Blender +Y is Unreal −Y |
| Major | Marquee canopy 5 cm above the pavement | Absolute Z; pavement is 4.56 m above datum |
| Major | Window bays invisible, inside the solid wall | Piece modelled entirely at +Y |
| Major | Glazing wasn't glass | Grey `M_Kit_*` from the FBX import, never overridden |
| Major | Hero windows floated 1.44 m in front of the wall | Wrong Y in the builder |
| Major | Parapet medallions were discs on the coping | Built with the Z-axis cylinder helper |
| Major | Hero had no usable collision | Complex-only; traces use simple |
| Minor | "No smoothing group information" on every import | `mesh_smooth_type="OFF"` in six exporters |
| Minor | `save_map()` returned False silently | LFS `.umap` read-only, importer never chmod'd |
| Minor | North-buildings import silently no-op | Missing `import sys` |
| Minor | Kit folder held 24 assets (8 orphan materials) | No stale-asset sweep |
| Minor | Edge-density metric counted PIL's border ring | `FIND_EDGES` leaves a 128 ring |
| Minor | QA wall probe grazed the theatre wall | Scan row 1 cm from the building line |
### Limitations worth knowing
- Kit pieces are boxes; dentil spacing, abacus and plinth dimensions are recorded assumptions, not measurements.
- Textures are generated, not authored — no decals, signage text or weathering.
- The vision pre-check stays advisory: it has rejected shots the owner approved.
- The low edge ratios in the metrics are partly structural — a wide block view against a tight façade crop always scores low. Weigh the images, not the scores.
- Performance has not been re-measured since `0.1.0`; the 625 kit actors are unmeasured (tracked in `TODO.md` under `0.1.5`).
+1 -1
View File
@@ -34,7 +34,7 @@ public:
* in-game"). Keep in sync with Docs/controls.md.
*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Controls")
FString ControlsLine = TEXT("WASD move \u00B7 Mouse look \u00B7 Space jump \u00B7 R reset \u00B7 Esc pause");
FString ControlsLine = TEXT("WASD move \u00B7 Mouse look \u00B7 Space jump \u00B7 V view \u00B7 R reset \u00B7 Esc pause");
/** Licence line, including where the licence can be read. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attribution")
+1 -1
View File
@@ -417,7 +417,7 @@ Scope: facts and traps that cost time to establish. Planned work lives in [TODO.
## 2026-11-09 — 0.1.4 signed off; 0.1.5 created for the carried geometry
- Owner reviewed the four demo captures locally and approved the set. Signoff recorded in `Docs/reviews/0.1.4-review.md` (7/7 items) and in the per-shot `Approved` column of `Screenshots/README.md`.
- Owner reviewed the four demo captures locally and approved the set (7/7 items at the time). The signoff lived in `Docs/reviews/0.1.4-review.md`, which was removed on 2026-11-09; the per-shot `Approved` column of `Screenshots/README.md` is now the only record and is authoritative.
- The three geometry items that `0.1.4` did not finish — retail neighbours from their own references, hero fluting/motto band, blockout cleaning — move to a new **`0.1.5` Façade finishing** patch rather than growing this one, plus a much-needed **1440p performance re-measure** (625 kit actors have never been measured; `0.1.0` measured 414 fps).
- Decision recorded because it sets a precedent: finish and sign off a version when its _stated_ scope is done, and carry leftover scope into the next patch — do not let a patch accumulate unmeasured geometry.
+1 -1
View File
@@ -8,7 +8,7 @@ Development roadmap for this project: milestone goals, scope, decisions, and rel
## Status at a glance — 2026-11-08 15:30
Workstation, geo pipeline, and engine validation are done. The art pipeline has a first blockout, terrain, and street in metres, in one shared coordinate frame. **Project bootstrap is complete**: `Game/GigLine` builds, packages, and both content-acceptance tests (static-mesh scale, MPFB skeletal character) pass. **`v0.1.0` released 2026-11-08**: the walkable demo, hero façade, verified block frontage, first-person controls, ODbL attribution, and every release check pass (traversal, placement, collision, 60 fps at 1440p, fresh-checkout build, packaged build with controls). Next: the `0.1.1`–`0.1.4` patch series (collision detail, scale/façade corrections, packaging fixes, real building façades), **`v0.1.6` released 2026-11-09**: retail frontage for 6800 Lee Drug and 6806–6820 modelled from their own photograph; 6822 Budget deferred (no reference) and the lettering/parapet detail moved to `0.9.0`. **Next:** `0.2.0` (player body, third-person camera, animation).
Workstation, geo pipeline, and engine validation are done. The art pipeline has a first blockout, terrain, and street in metres, in one shared coordinate frame. **Project bootstrap is complete**: `Game/GigLine` builds, packages, and both content-acceptance tests (static-mesh scale, MPFB skeletal character) pass. **`v0.1.0` released 2026-11-08**: the walkable demo, hero façade, verified block frontage, first-person controls, ODbL attribution, and every release check pass (traversal, placement, collision, 60 fps at 1440p, fresh-checkout build, packaged build with controls). Next: the `0.1.1`–`0.1.4` patch series (collision detail, scale/façade corrections, packaging fixes, real building façades), **`v0.1.6` released 2026-11-09**: retail frontage for 6800 Lee Drug and 6806–6820 modelled from their own photograph; 6822 Budget deferred (no reference) and the lettering/parapet detail moved to `0.9.0`. **`v0.2.0` released 2026-11-09**: visible animated body, third-person camera with a V toggle, idle and walk clips, and a deterministic stride capture. Two cosmetic character defects (splayed fingers, a swept-not-derived base rotation) are deferred to `0.2.2`. **Next:** `0.3.0` (Chaos vehicle, enter/exit, closed driving route).
| Area | State |
| --- | --- |
-28
View File
@@ -9,34 +9,6 @@ Actionable task list for this project. This file is the single, central place fo
- 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.
- [ ] Document any input changes.
### 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