Files
zwitschi 33f8139cb2 feat(hero): stepped medallion relief, seated on the parapet face
The medallions were not just flat - they were buried. seat_on_front put
Hero_Medallion at offset 0.08 (front Y -0.42) while the 1.2 m-deep parapet stands
at Y -0.15, so both discs sat inside the parapet and never rendered. The motto
band and surround have the same burial (offset 0.06) and are a separate follow-up.

- Three stepped layers per medallion with per-layer prefixes so seat_on_front gives
  each its own stand-off: Rim (0.55 m, dark, offset 0.36 -> Y -0.14), Field
  (0.38 m, light, offset 0.43 -> Y -0.07), Boss (0.15 m, dark, offset 0.50 -> Y 0.00).
  A single Hero_Medallion prefix would both flatten the relief and (via startswith)
  swallow the specific prefixes, so it is removed.
- Moved from +/-6.2 (inside the inscription text, which spans +/-6.87) to +/-9.8.
- Fixed Tools/review/hero_iterate.sh, which still had the pre-tools-move
  'cd dirname/..' and landed in Tools/ instead of the repo root.

Rendered and judged; the advisory two-model judge (no, 0.93) no longer flags the
medallions. Owner review pending.
2026-11-10 15:04:48 +01:00

60 lines
3.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# Full hero-facade iteration: build -> import -> render -> judge -> comparison plate.
#
# bash Tools/review/hero_iterate.sh [shot]
#
# `shot` defaults to review-hero-facade-front. Every step writes to /tmp/gigline/ so a failure can be
# read back: Unreal commandlets swallow print().
#
# Why a script and not four remembered commands: the loop is run once per modelling change, and the
# 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
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}"
UPROJECT="$(pwd)/Game/GigLine/GigLine.uproject"
SHOT="${1:-review-hero-facade-front}"
REFERENCE="${REFERENCE:-Art/reference/hero-masonic/02-masonictemple01.jpg}"
step() { printf '\n== %s\n' "$1"; }
step "1/6 blender files writable"
find Art -name '*.blend*' -exec chmod u+w {} \;
step "2/6 build the facade"
LD_LIBRARY_PATH="$BLENDER_FILES/blender/lib" "$BLENDER_FILES/blender/blender" -b --factory-startup \
--python Tools/blender/hero_facade_build.py -- \
--out /tmp/gigline/hero-facade.fbx \
--save-blend Art/blender/hero/hero-facade-2026-11-07.blend \
--report Art/blender/hero/hero-facade-2026-11-07.json \
> /tmp/gigline/hero-build.log 2>&1 || { echo "build failed - see /tmp/gigline/hero-build.log"; exit 1; }
grep -E 'exported FBX' /tmp/gigline/hero-build.log || { echo "no FBX written"; exit 1; }
step "3/6 import into Unreal"
"$ENGINE/Engine/Binaries/Linux/UnrealEditor-Cmd" "$UPROJECT" -run=pythonscript \
-script="$(pwd)/Tools/unreal/ue_hero_facade_import.py" -nullrhi -unattended -nopause -stdout \
> /tmp/gigline/hero-import.log 2>&1
grep -q 'save_map' /tmp/gigline/hero-facade-import.txt || { echo "import failed - see /tmp/gigline/hero-facade-import.txt"; exit 1; }
step "4/6 rebuild DemoMap (materials live in the map builder)"
"$ENGINE/Engine/Binaries/Linux/UnrealEditor-Cmd" "$UPROJECT" -run=pythonscript \
-script="$(pwd)/Tools/unreal/ue_build_demo_map.py" -nullrhi -unattended -nopause -stdout \
> /tmp/gigline/hero-demomap.log 2>&1
grep -q 'save_map' /tmp/gigline/demo-map.txt || { echo "demo map rebuild failed - see /tmp/gigline/demo-map.txt"; exit 1; }
step "5/6 render the capture set"
bash Tools/review/render_screenshots.sh > /tmp/gigline/hero-render.log 2>&1 || { echo "render failed - see /tmp/gigline/hero-render.log"; exit 1; }
step "6/6 judge and compare"
python3 Tools/review/judge_screenshot.py --image "Screenshots/review/${SHOT}.png" \
--expect "A neoclassical Masonic temple facade: warm yellow-grey sandstone with horizontal ashlar courses, six giant fluted Ionic columns on square pedestals, three tall red vertical banners reading JIMMY KIMMEL LIVE hanging between the columns, dark lattice metal grilles in the window bays behind the colonnade, three recessed dark entrance doorways with steps, above the columns a carved inscription band flanked by two round medallions, topped by a crested parapet." \
| tee /tmp/gigline/hero-judge.txt | tail -2
python3 Tools/review/hero_compare.py --reference "$REFERENCE" \
--render "Screenshots/review/${SHOT}.png" \
--out "Screenshots/review/hero-compare-${SHOT#review-hero-}.png"
echo
echo "plate: Screenshots/review/hero-compare-${SHOT#review-hero-}.png"