Detail the NPC avatars and finish the realism follow-ups
Full build / Import + headless tests (push) Successful in 38s
Full build / Full desktop build + optional release (push) Skipped

Blender library
- Rebuild the face: sclera, iris and upper lid per eye, brow ridge, cheekbones,
  nose bridge and tip, ears with lobes, split upper/lower lips.
- Give each hand four fingers plus a thumb and end every sleeve in a cuff ring.
- Raise CHAR_MAX_VERTS 4000 -> 5000 (16 avatars still cost ~6.9 ms of a 50 ms
  frame), decimate the body to 26 %; characters are now 3,974-5,026 tris and
  3,744-4,807 verts. Rebuild all 8 variants and re-bake their AO maps.

Capture tooling
- Add a `portrait` stage to capture_realism.gd: freeze one NPC, park the crowd
  out of frame, stand the subject on open sidewalk, turn it into the camera and
  put the guard on the sunlit side. New --portrait-type=N picks the role.
- Add the npc_portrait_day concept and map the shot to it, so avatar detail is
  scored against a portrait instead of a wide street frame.

Flashlight
- Drop the fake additive beam (Materials.light_beam + the cone mesh): on GL
  Compatibility a first-person camera inside the cone renders it as a filled
  disc with a bright far ring. Keep the tight spot (14 deg, 20 m, energy 4.2)
  and its headless test; the visible shaft is now planned behind a Forward+
  preset.

Docs and task tracking
- Move the finished realism follow-ups (ground exposure, flashlight, NPC detail,
  judge re-check) to DONE.md and expand TODO.md with step-by-step plans for NPC
  gear fit, venue geometry plus the committed gallery, and the Forward+ preset.
- Record the decisions, gotchas and portrait recipe in MEMORY.md; update the
  Blender contract, the concept README and the capture section of README.md.
- Refresh the gallery captures affected by the avatar rebuild.

Checks: headless 228/228, Python 86/86, blender_assets audit exit 0,
scene_concepts audit all GOOD, screen_designs compare 11 good / 0 bad,
smoke_npc_budget OK, boot clean (only the known headless mesh warning).
This commit is contained in:
zwitschi committed 2026-11-01 17:46:25 +01:00
1 parent 2624b54b23
commit 1ee32215b0
53 files changed
+1853 -151

No files matched your search

+34 -26
View File
@@ -453,7 +453,7 @@
"max": [
0.321,
1.824,
0.186
0.185
],
"min": [
-0.321,
@@ -467,6 +467,7 @@
"skin",
"cloth",
"pants",
"eye_white",
"accessory",
"hair",
"rubber"
@@ -486,18 +487,18 @@
"accessory",
"hair"
],
"triangles": 3788,
"vertices": 3107
"triangles": 3974,
"vertices": 3744
},
"npc_coat": {
"bounds_godot": {
"max": [
0.327,
0.332,
1.824,
0.186
0.185
],
"min": [
-0.327,
-0.332,
0,
-0.18
]
@@ -508,6 +509,7 @@
"skin",
"cloth",
"pants",
"eye_white",
"accessory",
"hair",
"rubber"
@@ -526,8 +528,8 @@
"accessory",
"hair"
],
"triangles": 4640,
"vertices": 3974
"triangles": 5026,
"vertices": 4807
},
"npc_dress": {
"bounds_godot": {
@@ -548,6 +550,7 @@
"skin",
"cloth",
"pants",
"eye_white",
"accessory",
"hair",
"rubber"
@@ -564,8 +567,8 @@
"accessory",
"hair"
],
"triangles": 4226,
"vertices": 3474
"triangles": 4428,
"vertices": 4026
},
"npc_firefighter": {
"bounds_godot": {
@@ -586,6 +589,7 @@
"skin",
"cloth",
"pants",
"eye_white",
"accessory",
"hair",
"hivis",
@@ -604,15 +608,15 @@
"accessory",
"hair"
],
"triangles": 4382,
"vertices": 3919
"triangles": 4848,
"vertices": 4735
},
"npc_guard": {
"bounds_godot": {
"max": [
0.361,
1.819,
0.186
0.185
],
"min": [
-0.361,
@@ -626,6 +630,7 @@
"skin",
"cloth",
"pants",
"eye_white",
"accessory",
"hair",
"rubber",
@@ -647,15 +652,15 @@
"accessory",
"hair"
],
"triangles": 4154,
"vertices": 3838
"triangles": 4560,
"vertices": 4529
},
"npc_hoodie": {
"bounds_godot": {
"max": [
0.326,
1.856,
0.186
0.185
],
"min": [
-0.326,
@@ -669,6 +674,7 @@
"skin",
"cloth",
"pants",
"eye_white",
"accessory",
"hair",
"rubber"
@@ -687,18 +693,18 @@
"accessory",
"hair"
],
"triangles": 4640,
"vertices": 3954
"triangles": 4826,
"vertices": 4504
},
"npc_jacket": {
"bounds_godot": {
"max": [
0.326,
0.332,
1.824,
0.186
0.185
],
"min": [
-0.326,
-0.332,
0,
-0.178
]
@@ -709,6 +715,7 @@
"skin",
"cloth",
"pants",
"eye_white",
"accessory",
"hair",
"rubber"
@@ -727,15 +734,15 @@
"accessory",
"hair"
],
"triangles": 4016,
"vertices": 3415
"triangles": 4394,
"vertices": 4175
},
"npc_vest": {
"bounds_godot": {
"max": [
0.321,
1.819,
0.186
0.185
],
"min": [
-0.321,
@@ -749,6 +756,7 @@
"skin",
"cloth",
"pants",
"eye_white",
"accessory",
"hair",
"rubber",
@@ -767,8 +775,8 @@
"accessory",
"hair"
],
"triangles": 4284,
"vertices": 3784
"triangles": 4474,
"vertices": 4340
},
"palm_tree": {
"bounds_godot": {
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.