Lesson 204: Fab ORM Metallic Import Receipt Before Godot Fest Scene Load (2026)
Direct answer: When Fab ORM node groups change mid-sprint, hero props import into Godot 4.5 as flat plastic—not because Fab failed, but because channel swizzles and sRGB ORM diverged from your locked legend. This lesson ships orm_metallic_flat_receipt_v1.json with A1–A6 gates before you load the fest scene—after Lesson 203 FMOD WebGL snapshots.

Why this matters now (July 2026 Fab node-group swaps)
July 2026 micro-studios already passed 0.01 scale proof and some finished the seven-day ORM proof sphere challenge. A Fab_ORM_Pack_v3 fork still flattens metallic on the hero sword the week before Next Fest. The Fab ORM flat recovery blog documents A1–A6; ORM packing help fixes channel routing—this lesson is the course milestone wiring receipts into BUILD_RECEIPT (Help #9 flat-metallic fix queued separately).
Beginner path (40-minute proof)
| Step | Action | Success check |
|---|---|---|
| 1 | Pin orm_channel_legend_v1.json version |
A1 pass |
| 2 | Diff Fab node group vs locked template | A2 pass |
| 3 | Export ORM as non-color data | A3 pass |
| 4 | Run glTF validator on hero GLB | A4 pass |
| 5 | Import proof sphere + hero A/B in Godot | Metal ≠ plastic |
| 6 | Write orm_metallic_flat_receipt_v1.json |
promotion_allowed: true |
| 7 | Patch BUILD_RECEIPT fab_pipeline row |
orm_metallic_flat: verified |
Time: ~40 minutes smoke; full lesson 65 minutes with kit re-export + Thursday row review.
Developer path (gates A1–A6)
| Gate | Check | Fail when |
|---|---|---|
| A1 | Legend version pinned in repo | Ad-hoc swizzle in one .blend |
| A2 | Node group matches locked template | Fork without changelog |
| A3 | ORM texture non-color on export | sRGB ORM blowout |
| A4 | glTF validator clean on hero GLB | Metallic factor warnings |
| A5 | Godot slots: B=metallic, G=roughness, R=AO | Wrong Texture Channel |
| A6 | Receipt + tolerance table | ±0.08 metal / ≤0.02 plastic metallic |
orm_channel_legend_v1.json (pin)
{
"schema": "orm_channel_legend_v1",
"version": 2,
"channels": { "R": "occlusion", "G": "roughness", "B": "metallic" },
"blender_separate_color": ["R", "G", "B"],
"godot_standard_material": { "ao": "R", "roughness": "G", "metallic": "B" },
"color_space": "Non-Color"
}
orm_metallic_flat_receipt_v1.json
{
"schema": "orm_metallic_flat_receipt_v1",
"build_label": "nextfest-oct-2026-rc5",
"orm_legend_version": 2,
"node_group_incident": "Fab_ORM_Pack_v3_copy reverted 2026-05-25",
"proof_sphere_pass": true,
"hero_prop_ab": "hero_sword_01",
"gltf_validator_pass": true,
"godot_version": "4.5.stable",
"gates": {
"A1_legend_pin": "pass",
"A2_node_group_diff": "pass",
"A3_non_color_export": "pass",
"A4_gltf_metallic": "pass",
"A5_godot_slots": "pass",
"A6_receipt": "pass"
},
"metallic_flat_resolved": true,
"promotion_allowed": true
}
Store under release-evidence/blender/ORM_METALLIC_FLAT_RECEIPT.json. Pair with fab_pipeline_receipt_v1.json ORM row.
Proof sphere smoke (Godot)
| Material | Expected metallic read | Fail signal |
|---|---|---|
| Polished metal sphere | 0.85–1.0 | Reads like plastic |
| Matte plastic sphere | ≤0.02 | Chrome highlight |
| Hero sword A/B | Matches reference capture | Flat gray metal |
Run under neutral DirectionalLight3D—not emissive fest VFX lighting.
Publish gate
ALTER TABLE release_publish_gate ADD COLUMN IF NOT EXISTS
orm_metallic_flat_blocked BOOLEAN NOT NULL DEFAULT false;
CI verify_orm_metallic_flat_v1 sets blocked false only when promotion_allowed is true and proof sphere + hero GLB hashes match manifest.
Prerequisites
- Lesson 203 — audio receipt chain
- Fab ORM flat blog
- ORM packing help
- 12 Free Fab→Godot scale tools — run before ORM if kit is tiny
Common mistakes
- Fixing metallic before scale proof passes.
- Skipping proof sphere because “hero looked fine in Blender viewport.”
- Re-exporting entire Fab kit instead of affected GLBs only.
- Confusing this receipt with 8K ORM editor hang (VRAM, not metallic response).
Troubleshooting
| Symptom | Fix |
|---|---|
| Chrome everywhere | A5 slot map + A3 non-color |
| Muddy plastic | Swizzle R/G/B per legend |
| Validator warns metallicFactor | A4 glTF fix-up |
| Scale OK, metal flat | This lesson—node group diff |
Mini exercise (55 minutes)
- Break A2 on purpose (swap G/B in Separate Color); confirm Godot fail.
- Restore legend; pass proof sphere trio.
- Re-import hero sword; capture A/B screenshot.
- Commit receipt; extend BUILD_RECEIPT template.
- Cross-link from Fab ORM blog.
Continuity
- Previous: Lesson 203 — FMOD WebGL snapshot probe
- Next: Lesson 205 — Deck
gpu_idle_smoke_pass - Guides (planned): Blender Fab ORM preflight (Guide queue #5)
FAQ
Does this replace the seven-day challenge?
No—challenge owns G1–G7 calendar; this lesson owns live-ops receipt after a mid-sprint node edit.
Unity project too?
Use color space help—receipt schema still documents ORM legend version for producers.
Help #9 not published?
Use ORM packing help until blender-fab-orm-metallic-flat-godot-4-5-after-node-group-change-fix ships.
Scale proof first, ORM legend second, fest scene last—or your hero prop ships as plastic under fest lighting.