Iterated the loop five times against Art/reference/hero-masonic/. What took the iterations was the material, not the geometry: - M_FacadeStone in /Game/Hollywood/Site is the KIT stone; the hero does not use it, so warming it changed nothing. - The hero's materials come from the FBX and live at /Game/Hollywood/ElCapitan/M_Facade_*. Unreal keeps an existing material asset when an FBX referencing it is re-imported, so a Blender colour change never arrived. - Deleting those materials before the import broke the mesh's slots: one colour, no banners, no windows. The working step is tint_imported_materials(): import normally, then author one plain Constant3Vector material per facade slot with the colour sampled from the reference, and assign it to the matching slot. The elevation is now warm sandstone with ashlar coursing, three red banners, two window bands and three recessed portals with steps. Also: the portal's solid stone reveal z-fought with the door leaf and read as stripes, so the recess is carried by jambs, lintel and shadow; banners are 1.35 x 6.2 m hung from 7.2 m instead of 1.55 x 5.4. Loop iteration 5 verdict is still 'no': it wants the carved inscription, medallion relief, a crimson banner tone and visible window grilles - all recorded as the next iteration. Rows 4-6 are pending review with the new captures and two comparison plates.
60 lines
3.4 KiB
Bash
Executable File
60 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Full hero-facade iteration: build -> import -> render -> judge -> comparison plate.
|
|
#
|
|
# bash Tools/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/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/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/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/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/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/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"
|