fix(hero): seat the motto band and surround on the parapet face

The motto band and moulded surround had the same burial as the medallions: offset
0.06 left their front face at Y -0.44, inside the 1.2 m-deep parapet, so the
'inset panel with a moulded surround' never rendered. Only the inscription (moved
to 0.40 in the previous commit) read.

- Band recessed at offset 0.34 (Y -0.16), surround proud at 0.43 (Y -0.07),
  inscription stays 0.40 (Y -0.10).
- Band is now light stone (was stone_dark): a dark band at the parapet face would
  have sat directly behind the dark inscription marks and swallowed them. The
  reference is dark incised lettering on a pale band.
- Removed the dead duplicate 'Hero_MottoBand 0.40' entry - the earlier 0.06 match
  won, so the 0.40 was silently ignored.

Rendered and judged; the advisory judge no longer flags the band.
This commit is contained in:
zwitschi committed 2026-11-10 15:11:52 +01:00
1 parent 33f8139cb2
commit bc9fed8e11
20 files changed
+46 -29

No files matched your search

Binary file not shown.
Binary file not shown.
Binary file not shown.
+12
View File
@@ -668,3 +668,15 @@ A visual change needs **build → import → render**, never just a render: `ren
- **Medallion fix:** stepped relief with per-layer prefixes so `seat_on_front` gives each its own stand-off — `MedallionRim` 0.36, `MedallionField` 0.43, `MedallionBoss` 0.50. One shared prefix (`Hero_Medallion`) would seat every disc at the same offset and flatten the relief, and it also matched the more specific prefixes via `startswith`, so it had to be removed entirely.
- **Medallions were also at ±6.2, inside the inscription text (spans ±6.87).** Moved to ±9.8.
- **`Tools/review/hero_iterate.sh` still had the pre-move `cd "$(dirname "$0")/.."`** from the tools restructure — it landed in `Tools/` and failed `find Art` with "no such file". Fixed to `../..`, matching `render_screenshots.sh`.
## 2026-11-10 — Hero motto band + surround: same burial, plus dark-on-dark
- The motto band and moulded surround shared the medallion burial (offset 0.06 → front
Y −0.44, inside the parapet). Fixed the same way: band recessed at 0.34 (Y −0.16),
surround proud at 0.43 (Y −0.07), inscription stays 0.40 (Y −0.10).
- **The band had to go light (`stone`, was `stone_dark`) at the same time.** A dark
band at the parapet face would have sat directly behind the dark inscription marks and
swallowed them; the reference is dark incised lettering on a pale stone band.
- **The `seat_on_front` table had a dead duplicate** — `Hero_MottoBand` appeared at both
0.06 and 0.40, and the first match (0.06) won, so the 0.40 was silently ignored. That
is why "the band is buried" looked fixed in the table while the build kept burying it.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
View File
@@ -224,6 +224,7 @@ Open:
- [x] **Make the generated ashlar albedo render.** Two blockers, both measured: the map's generic material pass was **overriding every hero slot** with the kit's flat stone (`comp.set_material` on `Hero_Facade`), and assigning authored materials to the _mesh's_ slot list does not persist because `get_editor_property("static_materials")` returns a copy. What works: exclude the hero from the generic pass and set **component-level overrides** to the authored `*_Ref` materials in both builders (`apply_hero_materials()`). The elevation now shows coursed, grainy limestone.
- [x] Carved inscription: `inscription()` in `Tools/blender/hero_facade_build.py` lays 112 letter marks in three lines across the attic, in the shadow stone so they read at 45 m. They had to be **seated on the parapet face** (`FRONT_Y + 0.40`): the parapet is 1.2 m deep and stands in front of the wall plane, so marks at the wall plane were hidden behind it.
- [x] Medallion relief that reads at 45 m. **Measured first, then fixed:** the discs were not just flat - they were **buried**. `seat_on_front` put `Hero_Medallion` at offset 0.08 → front face Y −0.42, while the parapet (1.2 m deep) stands at Y −0.15, so both medallions were inside the parapet and never rendered (the motto band and surround have the same bug at offset 0.06). Fixed: three stepped layers per medallion — `Hero_MedallionRim` (0.55 m, dark, offset 0.36 → Y −0.14), `Hero_MedallionField` (0.38 m, light, offset 0.43 → Y −0.07), `Hero_MedallionBoss` (0.15 m, dark, offset 0.50 → Y 0.00) — a 7 cm step each way so the rim/field/boss read as relief. Moved from ±6.2 (inside the inscription text, ±6.87) to ±9.8. Rendered and judged; the two-model judge is advisory-pessimistic (`no` 0.93) and does not flag medallions any more. Owner review pending.
- [x] Motto band and surround — same burial bug (offset 0.06 → front Y −0.44). The band is now **light stone** (was `stone_dark`, which would have swallowed the dark lettering once visible), recessed at offset 0.34 (Y −0.16), with the moulded surround proud at offset 0.43 (Y −0.07) and the inscription at 0.40 (Y −0.10); the dead duplicate `Hero_MottoBand 0.40` entry is removed. Rendered and judged; the judge (`no` 0.93) no longer flags the band, only the stone warmth/column fluting the owner has already directed lighter. Owner review pending.
- [ ] Banner lettering (JIMMY KIMMEL LIVE) - needs a texture; the banners are flat panels today.
- [ ] Crimson banner tone and the JIMMY KIMMEL LIVE lettering.
- [ ] Re-render the three ReviewMap staging shots and put them back in the status table for review.
+11 -7
View File
@@ -264,9 +264,11 @@ def build():
for z_off in (-0.575, 0.575):
cube(f"Hero_MottoSurround_h{int(z_off > 0)}", 0.0, -1.13, motto_z + z_off,
motto_w + 0.64, 0.26, 0.32, stone)
cube("Hero_MottoBand", 0.0, -1.06, motto_z, motto_w, 0.10, 0.85, stone_dark)
# Dark marks, not stone-on-stone: at 45 m a same-colour relief disappears, and the reference letters read
# as dark incisions against the pale wall.
# Light stone band, not the dark panel the blockout used: the reference letters are
# dark incisions against a pale band, so a dark band would swallow the dark lettering.
# The band sits recessed behind its moulded surround while the surround and the
# lettering stand proud, so the frame and the text both read at 45 m.
cube("Hero_MottoBand", 0.0, -1.06, motto_z, motto_w, 0.10, 0.85, stone)
inscription(motto_w - 0.6, motto_z, stone_dark)
note("Hero_MottoBand", (motto_w, 0.10, 0.85),
"photographs: motto panel above the colonnade, now an inset panel with a "
@@ -411,14 +413,16 @@ def build():
# front face is behind the wall plane are moved until it sits at FRONT_Y + offset.
seat_on_front((
("Hero_Architrave", 0.05), ("Hero_Cornice", 0.05), ("Hero_Dentil", 0.05),
("Hero_Entablature", 0.03), ("Hero_MottoBand", 0.06), ("Hero_MottoSurround", 0.06),
("Hero_Entablature", 0.03), ("Hero_MottoBand", 0.34), ("Hero_MottoSurround", 0.43),
("Hero_MedallionRim", 0.36), ("Hero_MedallionField", 0.43), ("Hero_MedallionBoss", 0.50),
("Hero_Banner", 0.08), ("Hero_Window", 0.03),
("Hero_Portal", 0.05), ("Hero_PortalJamb", 0.08), ("Hero_PortalLintel", 0.08),
("Hero_PortalMullion", 0.04), ("Hero_PortalSign", 0.10),
# The parapet is 1.2 m deep and stands in front of the wall plane, so the inscription has to sit on
# ITS face, not on FRONT_Y - otherwise the parapet hides the letters entirely.
("Hero_Inscription", 0.40), ("Hero_MottoBand", 0.40),
# The parapet is 1.2 m deep and stands in front of the wall plane, so the attic detail
# (inscription, motto band, surround) has to sit on ITS face, not on FRONT_Y - the old
# 0.06/0.08 offsets left the band and surround buried inside the parapet. The band is
# recessed (0.34) behind the proud surround (0.43) and the lettering (0.40).
("Hero_Inscription", 0.40),
))
return parts, lines