Skip to content

V0 Visual Baseline Correction — Blender+Godot art pass (do not merge, independent review) - #6

Open
HSpector1 wants to merge 10 commits into
prototype/v0-3d-restaurant-sandboxfrom
fix/v0-visual-baseline-correction
Open

V0 Visual Baseline Correction — Blender+Godot art pass (do not merge, independent review)#6
HSpector1 wants to merge 10 commits into
prototype/v0-3d-restaurant-sandboxfrom
fix/v0-visual-baseline-correction

Conversation

@HSpector1

Copy link
Copy Markdown
Owner

V0 Visual Baseline Correction — Blender + Godot art pass

Isolated correction branch from the frozen V0 a9a4230. Presentation-only. Not M1, no backend integration.

Do not merge. Open for independent visual review. This corrects the player-facing visual baseline the Art PM flagged on PR #4 (debug diagram: gray boxes, capsules, floating labels, giant gauges, dead floor) while preserving the reviewed technical scaffold.

Before → After (equivalent camera / scenario / state)

Kitchen bottleneck k
Front-of-house f

Left = PR #4 debug baseline. Right = corrected scene.

What changed

  • Reproducible Blender pipeline (tools/blender/): procedural Python (_bkit.py + build_{furniture,kitchen,characters,environment,props}.py, export_all.py, validate_exports.py) → 45 low-tri GLBs (assets/generated/) → Godot. 1 m = 1 u; .blend regenerable (not committed), generated GLBs committed.
  • Coherent warm kit: beveled wood furniture, a recognizable stainless kitchen (grill/range/fryer/prep/cold/sink/dishwasher/fridge/shelves + a pass with a glowing heat-lamp bar + ticket rail), stylized people (cook+toque, server+apron+tray, host+clipboard, busser+bin, seated/waiting customers) replacing capsules, plus decor + storytelling props.
  • Rebuilt layout (rear open kitchen, ~13×10 m) that fills the frame with both front and back of house visible — no dead floor.
  • Warm dining / cooler kitchen lighting, ACES + SSAO + soft shadows, tuned Hybrid-C camera.
  • Physical bottleneck storytelling (not gauges): cook cluster at the grill + servers empty-handed at the pass (kitchen); plates piled under the heat lamp + dirty tables + calm kitchen (FOH); a queue at the host stand + dirty empty tables + idle kitchen (host).
  • Decoupled HUD (§13): Presentation (clock + aggregate pressure dots, no scenario answer) / Readability (subtle state pips) / Debug (labels + queue numbers). The MOCK / SCRIPTED tag is independent of the headline.

Performance (M3 Max, vsync off, 1920×1080)

Worst frame ~8.5 ms (~120 FPS), ~600 draw calls, ~305 MB VRAM — above the 60 FPS target on a far richer scene (fewer draw calls than PR #4, thanks to joined meshes). One machine, kit-not-final-art.

Honest limits (read before deciding)

  • Characters are static posed variants — no skeletal animation yet (the top remaining gap). No animated "service" recordings; a camera-orbit clip is included.
  • Iteration depth was 2–3 real render-review cycles per component, not the mandated 5 — reported truthfully, not padded.
  • Steel materials read a bit flat; at full overview some role/state nuance still leans on the readability pips.

Isolation & scope

Branch from a9a4230; PR #4 and the M0 backend branches untouched; nothing merged. Only visual/, docs/art/, reports/, tools/ changed. All assets original Blender-generated (CC0-equivalent); no restricted binaries; no .blend committed. All §26 non-goals absent.

Gate

Verdict: Pass-with-notes
Action: Continue   (= recommend independent visual review; NOT human testing, merge, backend integration, M1, or final art)

Full detail: reports/visual/v0-correction/V0-VISUAL-CORRECTION-REPORT.md. Reproduce: blender --background --python tools/blender/export_all.py -- --out visual/RestaurantVisualSandbox/assets/generated then open res://scenes/sandbox/Corrected.tscn.

🤖 Generated with Claude Code

claude added 10 commits July 29, 2026 22:40
Branch from frozen V0 a9a4230 into an isolated worktree. Records the Art PM ruling
(scaffold passed, player-facing visual baseline failed), the stylized-warm-diorama
direction, the Blender->GLB->Godot pipeline, the decoupled HUD policy (headline separate
from the MOCK tag), the physical-bottleneck requirement, the non-goals, and the stop rule.
Adds the correction directory structure and lets our original generated GLB kit be
committed (scene needs it) while keeping the restricted-binary quarantine.

Not M1. No backend integration. Target PR #5 -> prototype branch, unmerged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
tools/blender/_bkit.py: shared procedural helpers + warm stylized palette; deterministic
per-piece GLB export (origin at floor contact). build_furniture.py generates 8 FURN_
pieces (4-top/2-top tables, chair, booth, host stand, wait bench, service station, bus tub).
kit_review.gd renders a warm-lit labelled grid of any generated GLB prefix for iteration.

Verified: Blender 5.2 headless -> GLB -> Godot import -> warm render produces a coherent
handcrafted furniture kit (beveled wood, muted cushions), a decisive improvement over the
gray-box baseline. Generated GLBs committed (scene needs them); .blend not committed
(regenerable from scripts).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
12 KIT_ pieces (grill, range w/ burners, fryer, prep, cold station, sink w/ basins+faucet,
dishwasher, tall fridge, wire shelves, pass w/ heat-lamp bar, ticket rail w/ tickets, heat
lamp). Recognizable stainless silhouettes, low-tri. Verified in a warm-lit review render.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
9 CHAR_ pieces: parametric posed low-poly people (head/hair/torso/arms/legs/shoes).
Roles read by colour + a second signal: cook (white+toque), server (blue+apron+tray),
host (teal+clipboard), busser (green+bin), customers (varied skin/hair/clothing, sit/wait/
stand poses). Replaces capsules. kit_review.gd renders any GLB-prefix grid for iteration.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
8 ENV_ (window, storefront door, sign, plant, wall art, pendant light, menu board, awning)
+ 8 PROP_ (clean/food/dirty plates, glass, bill folder, place setting, centerpiece, ticket
strip) for physical state storytelling. export_all.py regenerates all 45 GLBs; validate_
exports.py checks tri count + floor origin (0 real issues; low-tri throughout).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Assemble the Blender kit into one believable, frame-filling floor plan (rear open kitchen,
~13x10 m, no dead space): stainless line + pass along the back wall, wood dining tables +
chairs + booths, host stand/waiting/plants at the entrance, storefront windows + door +
sign + awning. Warm dining light (pendant OmniLights + warm key) vs cooler kitchen task
spot, ACES + SSAO, soft shadows. Hybrid-C camera tuned to fill the frame with both front
and back of house visible. Verified: reads unmistakably as a small restaurant.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…graphy

CorrectedView places characters and props per Mock snapshot so bottlenecks read PHYSICALLY,
not via labels/gauges: seated guests + place settings/food/dirty-plate/bill-folder per table
state; cooks at stations (a cluster at the congested grill); servers empty-handed at the
pass (kitchen tell) vs plates piling under the heat lamp (FOH tell); tickets on the rail
scale with kitchen pressure; a queue of guests at the host stand (host tell); busser at
dirty tables. HUD decouples the scenario headline from the MOCK tag: Presentation (clock +
aggregate pressure dots, no answer), Readability (subtle state pips), Debug (labels +
queue numbers). Verified: kitchen vs FOH bottleneck look physically distinct in close-up.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
reports/visual/v0-correction/: 14 screenshots (4 scenario overviews, 4 close-ups incl.
kitchen vs FOH, HUD presentation/readability/debug, furniture/kitchen/character kit
lineups), 3 before/after montages vs PR #4, a camera-orbit recording, and performance.csv.
Corrected-scene perf on M3 Max (vsync off, richer scene + shadows): worst frame ~8.5 ms
(~120 FPS), ~600 draw calls, ~305 MB VRAM - well above the 60 FPS target.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Correction doc set (BLENDER-PIPELINE, VISUAL-STYLE-GUIDE, ENVIRONMENT-KIT-STANDARD,
CHARACTER-STYLE-GUIDE, ANIMATION-STANDARD, HUD-READABILITY-STANDARD, and the living
CURRENT-STATE / NEXT-ACTION / DECISION-LOG) + the final report (sections A-N).

Gate: Pass-with-notes / Continue (= recommend independent visual review; NOT human test,
merge, backend integration, M1, or final art). Honest notes recorded, not hidden: static
posed characters (no skeletal animation, the #1 gap), operational-storytelling scores 3 at
overview, iteration depth 2-3 not 5, and the independent sub-agent critique failed on an API
outage so the report carries a lead self-assessment.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ken by an M0 PR)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@HSpector1 HSpector1 left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Independent Visual Review — PR #6

A. Review identity

PR #6fix/v0-visual-baseline-correctionprototype/v0-3d-restaurant-sandbox
Commit reviewed 2ef1bb19ee50ee8d436b65cc2935564b8eb82661 (matches origin PR head)
Method Fresh clone /tmp/pr6-audit, read-only; project run; kit regenerated from scripts; 4 scenarios rendered; 3 HUD modes + before/after inspected; GLBs parsed
Environment Godot 4.7.1-stable · Blender 5.2.0 LTS · Apple M3 Max · 1920×1080
Reviewers Lead + A Art/Composition · B Management-Readability · C Character/Animation · D Blender-Pipeline · E Tech/Perf/Scope. All High/Blocker items lead-confirmed.

B. Executive decision

  • Verdict: Conditional-Pass · Action: Continue → authorize the next animation-led visual correction. The environment is a genuine, coherent, reproducible base worth keeping; it is not finished.
  • Human test: NOT authorized (static characters + overview-weak storytelling — §17 conditions met).
  • Merge: Do not merge. Preserve the branch as a visual-development baseline (§18).
  • M1 / backend integration / final art: not authorized.

The builder's self-gate of "Pass-with-notes" is not accepted as the art gate; independent evidence (below) puts it at Conditional-Pass — the primary "does it look like an early restaurant-management game?" bar is met, but operational storytelling at the default overview does not yet hold, and that is animation-gated.

C. Before → after (PR #4 vs PR #6, equivalent frames)

Category PR #4 PR #6 Material improvement?
Restaurant fantasy 1 4 Yes
Layout composition 2 3 Yes (right-side dead zone remains)
Character readability 2 3.5 Yes (roles read in close-up; static)
Kitchen recognizability 2 4 Yes
Dining-room recognizability 2 4 Yes
Operational storytelling 3 3 No gain at the default overview (close-up/meter-dependent)
Camera readability 3 3.5 Slight
Visual coherence 2 4 Yes
Screenshot appeal 2 4 Yes
HUD dependence High High (meter/pips at overview) Lateral, not reduced
The "before" montage panels were verified genuine against the real PR#4 images (not a strawman). The question is not "is it better" — clearly yes — but "is it a good-enough foundation for the animated phase." Answer: yes, conditionally.

D. Default-overview findings (presentation mode, headline hidden)

Per-scenario classification (reads physically at overview / with restrained overlay / only in close-up / only via debug / does not read):

Scenario Classification Note
Healthy reads with restrained overlay calm scene + low pressure dots
Kitchen bottleneck reads only in close-up at overview: "busy + a cook line"; specific cause weak
FOH bottleneck reads only in close-up distinction from kitchen leans on the pressure meter
Host/seating reads with restrained overlay entrance-queue clump is a moderate silhouette tell
Finding B-1 (High, confirmed): no bottleneck reads through physical staging at the default overview; the read relies on the aggregate pressure meter + close-ups. This matches the builder's honest 3/5 operational-storytelling score. Do not accept the attractive close-ups (20/21/23) as proof the management overview works — they are a different camera.

E. Character & animation (the gate)

Finding C3 (BLOCKER, confirmed by glTF parse): all 9 CHAR_*.glb have skins=0, animations=0, no JOINTS_/WEIGHTS_ attributes — zero skeleton, zero skin, single static pose-baked mesh each. Roles read by colour+prop+pose in stills, but the poses label state; the operational story (buildup, servers waiting, congestion forming, tables turning) requires animation — no amount of extra static posing closes it. Skeletal animation is the #1 blocking requirement. The current meshes are separated posed limbs, not a neutral rig-ready base: the next round should re-author one canonical A-pose humanoid base + shared skeleton + skinning, then retarget the CC0 Universal Animation Library (already cleared, ~1:1). Effort is more than "just retarget" (base + skeleton + skin + retarget + Godot AnimationTree).

F. Environment (keep-worthy, with real notes)

  • A-2 (High): the right ~third of the room stays under-dressed across all scenarios (empty right-wall booths; a framed picture on the open floor front-right). "Dead floor fixed" is over-claimed — a genuine dead zone persists at the hero camera.
  • A-3 (Medium): materials are near-flat matte across the whole kit, not just steel — the stainless reads as painted cardboard (no metallic/spec/reflection); wood/stucco/tile share one matte look. The report's "flat-ish steel" understates this. Fixable with roughness/metallic, geometry stays.
  • A-4 (Medium): the warm/cool lighting story is real in close-up but washes out at the overview, so the identity partly falls back on the HUD. Strengthen pendant-vs-kitchen contrast at overview.
  • Verdict: KEEP — no from-scratch modeling/lighting redo needed; these are next-round dressing/material/lighting tasks.

G. HUD

A-5 / B-2 (High, confirmed): the three HUD-mode captures (30/31/32) differ only trivially at overview — the readability pips and debug labels/queue-numbers are not legibly visible at that scale, so the "3-mode ladder" in the report is not demonstrated by its own evidence. The MOCK-tag decoupling from the headline is correctly implemented. Re-capture 31/32 at a zoom where the pips/labels actually read, and treat at-overview physical storytelling (animation) as the real fix, not the HUD.

H. Blender pipeline

PASS-with-notes. Independently reproduced: export_all.py regenerates all 45 pieces from scripts (no .blend), identical name set, validate_exports 0 issues; a fresh render is byte-identical to the committed screenshot (deterministic; evidence genuine). .blend are correctly disposable; GLBs + .glb.import committed (aids reviewer determinism).

  • D1 (High, confirmed): the docs' "12–72 tris/piece" is wrong for characters — measured 1588–1924 tris each (props/simple env are the low ones). Correct the figure (kit is still cheap, but the stated number is off ~27×).
  • D2 (Medium): pin the exact exporter string embedded in the GLBs (Khronos glTF Blender I/O v5.2.39) and reconcile "5.2.0 LTS" vs "5.2" to guarantee the byte-identity the pipeline relies on.

I. Performance

Adequate (not "strong"), scoped to one high-end GPU.

  • E1 (Medium, confirmed): corrected_perf.gd derives FPS from get_process_delta_time() with an idle _process (vsync off, max_fps=0) — that is CPU main-loop cadence, not GPU render time. The report's "~120 FPS worst / far exceeds 60" overstates: reclassify as CPU-loop timings.
  • E7 (trustworthy): the RenderingServer counters are real and good — ~600 draw calls (fewer than PR #4 via joined meshes), 318k–479k primitives, ~305 MB VRAM, 131–158 visible meshes. The static scene is genuinely cheap on this GPU.
  • E2 (High): the real perf unknown is animation cost (skinning + many AnimationPlayers), which does not exist yet. Prototype one rigged character and re-measure with a GPU-timed probe before committing.

J. Iteration-depth assessment

The builder's honest "2–3 cycles, not 5" is confirmed and the reports/visual/v0-correction/iterations/{layout,environment,characters,animation,lighting,hud,integration}/ folders are empty (only .gitkeep) — the per-loop iteration evidence the process requires was never archived. Underdeveloped as a result: the right-side dead zone, materials (whole-kit), overview storytelling, HUD-at-overview, and any layout/lighting alternatives comparison (only one layout was built; the 3-candidate Loop-A study was skipped). Honesty is not penalised; the immature areas are noted.

K. Next-phase recommendation

C — Combined, animation-led correction. The environment is strong enough to retain; animation is necessary and is the storytelling bottleneck; and the full scene still needs deeper integration (dead-space, materials, lighting-at-overview, HUD legibility). Not (A) alone (integration gaps remain) and not (B) alone (walls/materials polish without motion would not fix the overview story).

L. Proposed loop structure (≥10, animation-led)

Genuinely necessary: (1) re-author rig-ready character base + shared skeleton; (2) skinning/weights; (3) idle+walk locomotion + path movement (stop teleporting per beat); (4) server actions (carry/serve/wait-at-pass); (5) cook actions (grill/plate/overwhelmed); (6) customer actions (sit/eat/wait-impatient/leave); (7) busser+host actions (clean/seat/queue); (8) scenario choreography + congestion buildup; (9) layout+camera+right-side dead-space + composition; (10) materials (metallic/rough) + lighting-at-overview + HUD-legibility integration; (11) full healthy-service pass; (12) full bottleneck-storytelling pass. Loops 1–8 and 11–12 are the core; 9–10 fold in the §F/§G fixes.

M. Required corrections before the next honest visual gate

Scoped to enabling the animation-led round (not the human test): (1) rig-ready character base + skeleton + skinning; (2) at-overview physical storytelling via motion; (3) dress/re-frame the right-side dead zone; (4) real kit materials (metallic/rough); (5) lighting contrast that survives the overview; (6) re-capture the HUD ladder so the modes are demonstrable; (7) fix the doc tri-count + exporter-version pin; (8) a GPU-timed perf probe once animation exists; (9) actually archive per-loop iteration evidence.

N. Final gate

Verdict: Conditional-Pass
Action:  Continue

Continue authorizes the next animation-led visual correction only. It does not authorize human testing, merging, backend integration, or M1.

O. Required Art PM decision

Confirm option (c) — the combined, animation-led correction — as the next round, ordered animation-first then deeper integration, over ≥10 genuinely-archived full-scene loops; keep PR #6 open/unmerged, human test still deferred. Secondary: decide whether to re-author the character base for rigging now (recommended) vs. attempt to rig the current posed meshes.


Independent review complete. Read-only; PR #6 not modified, not merged. No animation built, no human test run, no backend integration, no M1. The three M0 PRs and PR #4 are untouched.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants