diff --git a/.gitignore b/.gitignore index f8ea7bf..060ed2c 100644 --- a/.gitignore +++ b/.gitignore @@ -69,3 +69,5 @@ Thumbs.db # Unreal per-project build artefacts (FileOpenOrder logs and the like) Build/ +dsh-session-* +tmp/ diff --git a/Art/blender/hero/hero-facade-2026-11-07.blend b/Art/blender/hero/hero-facade-2026-11-07.blend index 6517d8f..99368a8 100644 --- a/Art/blender/hero/hero-facade-2026-11-07.blend +++ b/Art/blender/hero/hero-facade-2026-11-07.blend @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e23a4b6588831778725dcf06963a0c0c658ccb11de7f3484eabf7233b5ee2a3 -size 316545 +oid sha256:0020a5a5bc39b3ab4d1baeedc9f7cbcd40ee76303934788f9d414318dbfe848c +size 319961 diff --git a/Art/blender/hero/hero-facade-2026-11-07.json b/Art/blender/hero/hero-facade-2026-11-07.json index 8268b2a..090f8cc 100644 --- a/Art/blender/hero/hero-facade-2026-11-07.json +++ b/Art/blender/hero/hero-facade-2026-11-07.json @@ -122,10 +122,10 @@ "object": "Hero_Medallion_x2", "dims_m": [ 1.1, - 0.04, + 0.2, 1.1 ], - "evidence": "photographs: two stone discs beside the motto, mounted on the parapet face" + "evidence": "photographs: two round reliefs beside the motto - dark rim, raised light field, dark boss" }, { "object": "Hero_Stylobate", diff --git a/Game/GigLine/Content/Hollywood/DemoMap.umap b/Game/GigLine/Content/Hollywood/DemoMap.umap index 6fd91a6..bf39c6a 100644 --- a/Game/GigLine/Content/Hollywood/DemoMap.umap +++ b/Game/GigLine/Content/Hollywood/DemoMap.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d85a507d091bd007283df2aa12456b7382550c473c6fdda6ec8a8f3d5efa805 +oid sha256:0c8c3d27fdbd4319e7b22fd94cb0f4d546575b65cb6bb1419b58689aab667e4a size 614603 diff --git a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Banner.uasset b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Banner.uasset index 2d9ee42..272ed95 100644 --- a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Banner.uasset +++ b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Banner.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4ecb7ecf04c5ceb2935429e798673ec22662f8a629dcd1261bbc4ecf2bdfcc30 +oid sha256:b5a40b0011ee5d8324a9230211cc747551a21a92273b8bdb919978126025d3b7 size 56660 diff --git a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Banner_Ref.uasset b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Banner_Ref.uasset index 26fca31..b238b7b 100644 --- a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Banner_Ref.uasset +++ b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Banner_Ref.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09e1e70290ed54e1ffc33f3a742e8b42c5add5d2f0302d0dcc149f63e3aa13e0 +oid sha256:31c3df2749c45296200bbd7bbcd62fbca5e08c27dc0bce41acdb6f0dfa1fb97f size 4791 diff --git a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_GlassDark.uasset b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_GlassDark.uasset index f2a772e..acee787 100644 --- a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_GlassDark.uasset +++ b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_GlassDark.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d9da2e67c55b93dfc3712d6f70de752161072120c07d0b0951301e9b273c88d +oid sha256:1a01313cac24111631b087efa4df562dab709d7c59b70f1e875a4344b5c94a0a size 56708 diff --git a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_GlassDark_Ref.uasset b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_GlassDark_Ref.uasset index ebb384b..cb82ebc 100644 --- a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_GlassDark_Ref.uasset +++ b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_GlassDark_Ref.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:581bec88fb1fdbe3ac8334712495e8c0ef3b8afd29d321b17a472109f68899dd +oid sha256:d6659d68bf71ea0b6a8c531a02da7c581ca33c00e224e75c6a8694742fba5632 size 4806 diff --git a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Grille.uasset b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Grille.uasset index 8ba7304..62f74b3 100644 --- a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Grille.uasset +++ b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Grille.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63dc24349c6e497c2da47f6d210d8023e1f36ea9ff9889e574437dadbc45efb8 +oid sha256:6310393bfadeaa87472620da51c48121425a17a7bba00bbd74312f4abbc8b09a size 56660 diff --git a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Grille_Ref.uasset b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Grille_Ref.uasset index 0c55eaf..bf460d2 100644 --- a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Grille_Ref.uasset +++ b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Grille_Ref.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:87ffc56537b39f147d090320cc656b71453b272dc692f5bccf6b68b8c4125f89 +oid sha256:fe4be8642f1a486980f559ff2a0587c7730ce546655ada10833a60fd3b38ac7f size 4791 diff --git a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Stone.uasset b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Stone.uasset index d481146..40cab24 100644 --- a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Stone.uasset +++ b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Stone.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e279a5f0f5255b133c4a5664341f857ebd5825b3eb86cbbd6e141ea482a39fa6 +oid sha256:cd7009b8ca4ca843d3c3b07f02fa018367f98953c28fee77feb9a1c50b722cae size 56644 diff --git a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_StoneShadow.uasset b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_StoneShadow.uasset index 1accf64..33d9b04 100644 --- a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_StoneShadow.uasset +++ b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_StoneShadow.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:329bdff464e0ba89387029e0367e7e26fa6d5285c122848c108ffb5d1b438092 +oid sha256:f6c361e951b28fd658aa3a7183fe70e12e82471d9587892c4a889e0287776656 size 56740 diff --git a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_StoneShadow_Ref.uasset b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_StoneShadow_Ref.uasset index 976b451..ae4b45f 100644 --- a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_StoneShadow_Ref.uasset +++ b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_StoneShadow_Ref.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6808f6a2908f0cb70b5fd3fb4a5716bb95843c1c1d7a57c09131b3a8288fb71c +oid sha256:ae5e7c2802615a6df9a2ff84d949add91b38c1c638008569f7c67138a29bdd00 size 6981 diff --git a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Stone_Ref.uasset b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Stone_Ref.uasset index ca023c8..406c708 100644 --- a/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Stone_Ref.uasset +++ b/Game/GigLine/Content/Hollywood/ElCapitan/M_Facade_Stone_Ref.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:390768683985ea94004af5114e914b800db7a33037251aae984dafa1325b0d57 +oid sha256:3b0c081dce73326a41962646b5f827e6f5d6821426a157875a6aa3fd053eead6 size 6945 diff --git a/Game/GigLine/Content/Hollywood/ElCapitan/SM_HeroFacade.uasset b/Game/GigLine/Content/Hollywood/ElCapitan/SM_HeroFacade.uasset index c6d3926..88e171e 100644 --- a/Game/GigLine/Content/Hollywood/ElCapitan/SM_HeroFacade.uasset +++ b/Game/GigLine/Content/Hollywood/ElCapitan/SM_HeroFacade.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63ee3617c2c2ff38facff1525313910d41ea1577b996a7937d91dc1b7efc028b -size 251274 +oid sha256:f8badb656ce53af71a8469c9549db6bd496801cdbe658997e2e64445e3664d7c +size 208117 diff --git a/Game/GigLine/Content/Test/ReviewMap.umap b/Game/GigLine/Content/Test/ReviewMap.umap index 241cd3e..dbe9fb8 100644 --- a/Game/GigLine/Content/Test/ReviewMap.umap +++ b/Game/GigLine/Content/Test/ReviewMap.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a1f233ac4a5e263067b0de767b98fa1c4c89f47846b37d97432b13c686cf9ab +oid sha256:2062d8123e48b1731d5f6436d587ade4c6cfe710d1c626b9e2085d9c5ec43125 size 39252 diff --git a/MEMORY.md b/MEMORY.md index 714fa2a..1daa831 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -661,3 +661,10 @@ The related lesson: a prefix-based clear (`clear(("Demo_", "PlayerStart", ...))` ## 2026-11-10 — Render-to-import chain, in one order A visual change needs **build → import → render**, never just a render: `render_screenshots.sh` renders the imported Unreal assets. `Tools/review/e2e_asset_check.py` runs the whole thing (Blender renders → empty maps → both builds → captures → two-model judge → README) and is the command to use instead of remembering four. + +## 2026-11-10 — Hero attic: the medallions were buried, not just flat + +- **`seat_on_front` offsets are relative to `FRONT_Y` (the wall plane, Y −0.5), not to the parapet face.** The parapet is 1.2 m deep with its front at Y −0.15, so any applied detail with offset < 0.35 sits *inside* the parapet and never renders. The medallions (offset 0.08 → front −0.42) and the motto band + surround (offset 0.06 → front −0.44) were all buried; only the inscription (moved to 0.40 → front −0.10 in the previous commit) read. +- **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`. diff --git a/Screenshots/review/hero-compare-facade-front.png b/Screenshots/review/hero-compare-facade-front.png index 417412a..2c7cfd4 100644 --- a/Screenshots/review/hero-compare-facade-front.png +++ b/Screenshots/review/hero-compare-facade-front.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:48db79350ba4275b86a480dff4a488abf1f59be655ee4a08f613514cf307cb75 -size 2876975 +oid sha256:58a8faf4031b0202f0b5673aa57e5b9ac2e306b4ea0df8666f4e755324ec2c6e +size 3023151 diff --git a/Screenshots/review/review-hero-facade-front.png b/Screenshots/review/review-hero-facade-front.png index 3d28e6a..da1d502 100644 --- a/Screenshots/review/review-hero-facade-front.png +++ b/Screenshots/review/review-hero-facade-front.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89a229db5d71b3f6363ae665fc2874d87266a369ac2750db9f38330e05d21267 -size 2380013 +oid sha256:ad26ad1421a66826af53085afe22a2f54b86fe4c11d08bcfbd8e774e3da94ede +size 2379767 diff --git a/Screenshots/review/review-hero-facade-oblique.png b/Screenshots/review/review-hero-facade-oblique.png index 38d2534..b12a091 100644 --- a/Screenshots/review/review-hero-facade-oblique.png +++ b/Screenshots/review/review-hero-facade-oblique.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8032ae86b509dc9141f7983e669193364457b5f43ba050a173edc264c4a687d0 -size 2012172 +oid sha256:b3aed8af088ca1b7cc357c13a23fa797c76a29103bd91eca1777fe0651237c61 +size 2005966 diff --git a/TODO.md b/TODO.md index 5947002..4b35138 100644 --- a/TODO.md +++ b/TODO.md @@ -223,7 +223,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. -- [ ] Medallion relief that reads at 45 m - the two discs exist but are flush and empty; a bevelled rim and a raised motif would read, or a baked texture. +- [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. - [ ] 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. diff --git a/Tools/blender/hero_facade_build.py b/Tools/blender/hero_facade_build.py index c698414..916fe9e 100644 --- a/Tools/blender/hero_facade_build.py +++ b/Tools/blender/hero_facade_build.py @@ -272,13 +272,22 @@ def build(): "photographs: motto panel above the colonnade, now an inset panel with a " "moulded surround rather than a flat stripe") - # Medallions either side of the inscription: discs on the parapet face, not - # pancakes on the coping (see disc_on_wall). - for i, x in enumerate((-6.2, 6.2), start=1): - disc_on_wall(f"Hero_Medallion_{i}", x, -1.30, HEIGHT - PARAPET_H / 2.0, - 0.55, 0.04, stone_dark, vertices=20) - note("Hero_Medallion_x2", (1.1, 0.04, 1.1), - "photographs: two stone discs beside the motto, mounted on the parapet face") + # Medallions either side of the inscription: stepped round reliefs (dark rim, raised + # light field, dark central boss) so they read as round medallions at 45 m instead of + # flat, empty discs. Each layer has its own prefix so `seat_on_front` gives it its own + # stand-off; one shared prefix would seat every disc at the same offset and flatten the + # relief. They sit OUTSIDE the inscription text (which spans ~±6.9 m) on the parapet + # face, which is 0.35 m proud of FRONT_Y - at the old 0.08 offset they were buried + # inside the 1.2 m-deep parapet and never rendered. + for i, x in enumerate((-9.8, 9.8), start=1): + disc_on_wall(f"Hero_MedallionRim_{i}", x, -1.30, HEIGHT - PARAPET_H / 2.0, + 0.55, 0.10, stone_dark, vertices=28) + disc_on_wall(f"Hero_MedallionField_{i}", x, -1.30, HEIGHT - PARAPET_H / 2.0, + 0.38, 0.16, stone, vertices=28) + disc_on_wall(f"Hero_MedallionBoss_{i}", x, -1.30, HEIGHT - PARAPET_H / 2.0, + 0.15, 0.20, stone_dark, vertices=20) + note("Hero_Medallion_x2", (1.1, 0.20, 1.1), + "photographs: two round reliefs beside the motto - dark rim, raised light field, dark boss") # --- entrances --------------------------------------------------------- # Three portals between column pairs, each with its own short flight. The @@ -403,7 +412,8 @@ def build(): 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_Medallion", 0.08), ("Hero_Banner", 0.08), ("Hero_Window", 0.03), + ("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 diff --git a/Tools/review/hero_iterate.sh b/Tools/review/hero_iterate.sh index ed4f2ce..092ae33 100755 --- a/Tools/review/hero_iterate.sh +++ b/Tools/review/hero_iterate.sh @@ -10,7 +10,7 @@ # order is load-bearing. The Blender save happens BEFORE the FBX export, so a read-only .blend makes # the build look successful while the old FBX is reused silently - hence the chmod at the top. set -uo pipefail -cd "$(dirname "$0")/.." || exit 1 +cd "$(dirname "$0")/../.." || exit 1 ENGINE="${ENGINE:-/run/media/system/DATA/Engines/UE_5.8.4}" BLENDER_FILES="${BLENDER_FILES:-/var/lib/flatpak/app/org.blender.Blender/x86_64/stable/active/files}" diff --git a/tmp b/tmp new file mode 120000 index 0000000..2958ad3 --- /dev/null +++ b/tmp @@ -0,0 +1 @@ +/tmp/gigline \ No newline at end of file