Compare commits
5
Commits
dbb177da6f
...
v0.2.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
12272d6b96 | ||
|
|
56e104f5f3 | ||
|
|
8e880ed09d | ||
|
|
9ce7011389 | ||
|
|
f5e7e66127 |
No files matched your search
@@ -8,6 +8,44 @@ Format: [Keep a Changelog](https://keepachangelog.com/) style, versions follow [
|
|||||||
|
|
||||||
Nothing yet.
|
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
|
## [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.
|
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
@@ -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.
|
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` | |
|
| Jump | `Space` | |
|
||||||
| Reset to start | `R` | Returns to the grounded spawn point |
|
| Reset to start | `R` | Returns to the grounded spawn point |
|
||||||
| Pause / release mouse | `Escape` | Second press resumes and recaptures the mouse |
|
| 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
|
## 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.
|
- 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`.
|
- 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
|
## 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.:
|
`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.
@@ -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
|
||||||
|
@@ -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` | 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` | 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.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` | 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)
|
## `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.
|
- `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".
|
- `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.**
|
**Verdict: PASS.**
|
||||||
@@ -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
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
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`).
|
|
||||||
@@ -34,7 +34,7 @@ public:
|
|||||||
* in-game"). Keep in sync with Docs/controls.md.
|
* in-game"). Keep in sync with Docs/controls.md.
|
||||||
*/
|
*/
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Controls")
|
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. */
|
/** Licence line, including where the licence can be read. */
|
||||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attribution")
|
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attribution")
|
||||||
|
|||||||
@@ -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
|
## 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).
|
- 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.
|
- 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
@@ -8,7 +8,7 @@ Development roadmap for this project: milestone goals, scope, decisions, and rel
|
|||||||
|
|
||||||
## Status at a glance — 2026-11-08 15:30
|
## 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 |
|
| Area | State |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
|
|||||||
@@ -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.
|
- 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.
|
- 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)
|
## 0.2.1 — Rig fixes (patch)
|
||||||
|
|
||||||
### Patch tasks
|
### Patch tasks
|
||||||
|
|||||||
Reference in new issue
Block a user