table_baroque, chair_modernist, desk_scifi (furniture, with mask sidecars) and lion_statue (props, non-tintable) enter client/assets/models/ under the category-first convention, byte- identical to the spike sources (MD5-verified; spikes/ untouched, vw_beetle excluded per the Q-067 deferral). Postprocess verified already-applied by Blender node-graph inspection (mat_primary, roughness=1.0/specular=0.0 shader inputs — the convenience properties read stale defaults, the graph is authoritative), so not re-run. All four registered in manifest.json at 'planned' with footprint_tiles [1,1] (a flagged judgment call — normalized spike geometry erases real-world scale; the brief ruling goes to araminta in review). In-engine proof: clean headless import + ResourceLoader load + instantiate for all four. Discovery documented in conventions.md §2 + glb-gen SKILL.md: Godot externalizes the GLB's embedded texture as a <model>_Image_0.png sidecar referenced by binary UID — it must be committed or loading breaks with an undiscoverable dependency error. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
62 lines
3.7 KiB
Markdown
62 lines
3.7 KiB
Markdown
---
|
|
title: "Models — Visual Assets"
|
|
description: "3D object/furniture/prop asset catalog — status table for the Trellis glb-gen pipeline"
|
|
type: design
|
|
status: active
|
|
---
|
|
|
|
# Models — Visual Assets
|
|
|
|
3D objects and furniture/props rendered directly in-world as `.glb` meshes
|
|
(D-244 — no per-object sprite layer). Produced via the Trellis image→3D
|
|
pipeline (`/glb-gen`), promoted per D-241 into `client/assets/models/`.
|
|
|
|
## Generation Approach
|
|
|
|
- **Concept image:** `/image-gen` produces a concept PNG (square, plain dark
|
|
background, single object centered, 3/4 front view — see
|
|
`.claude/skills/glb-gen/SKILL.md` "Input Requirements").
|
|
- **Image → 3D:** Trellis (`tower-of-joy:11510`) converts the concept image
|
|
to a raw `.glb` (`/glb-gen`).
|
|
- **Post-process:** Blender normalizes scale, centers the mesh, generates the
|
|
recolor mask sidecar, and sets up materials for toon rendering
|
|
(`.claude/skills/glb-gen/scripts/postprocess_glb.py`).
|
|
- **Promotion:** the finished `.glb` (+ mask, if tintable) lands in
|
|
`client/assets/models/{furniture,props}/` and is registered in
|
|
`client/assets/models/manifest.json` — that registration + placement act
|
|
**is** the promotion (D-241); it does not stay a "promoted" spike artifact.
|
|
|
|
Naming, mask-sidecar, and multi-tile footprint conventions:
|
|
[conventions.md](conventions.md).
|
|
|
|
## Assets
|
|
|
|
| ID | Filename | Status | Category | Footprint | Notes | Sprint/Ticket |
|
|
|----|----------|--------|----------|-----------|-------|---------------|
|
|
| table_baroque | `furniture/table_baroque.glb` | planned | furniture | [1, 1] | Promoted from spike (`baroque_table.glb`, renamed category-first); mask sidecar present; spike README flags the mask as "too aggressive — tints the whole model bright white", not yet re-tuned | T-1204 |
|
|
| chair_modernist | `furniture/chair_modernist.glb` | planned | furniture | [1, 1] | Promoted from spike (`modernist_chair.glb`, renamed category-first); mask sidecar present | T-1204 |
|
|
| desk_scifi | `furniture/desk_scifi.glb` | planned | furniture | [1, 1] | Promoted from spike (`scifi_desk.glb`, renamed category-first); mask sidecar present | T-1204 |
|
|
| lion_statue | `props/lion_statue.glb` | planned | props | [1, 1] | Promoted from spike as-is (no rename); "fixed" mode, non-tintable — no mask sidecar per brief §3 | T-1204 |
|
|
|
|
These four rows are the first promoted assets (T-1204, `furniture-props.md`
|
|
brief's first acceptance) — the 3 in-scope spike furniture GLBs plus
|
|
`lion_statue`, already Blender-postprocessed (`mat_primary`,
|
|
roughness=1.0/specular=0.0 confirmed via Blender headless inspection) in the
|
|
spike, so no re-run of `postprocess_glb.py` was needed at promotion time.
|
|
`vw_beetle.glb` stays excluded (Q-067 car deferral). Footprint is `[1, 1]`
|
|
for all four — the spike GLBs are Blender-normalized to `target-width=1.0`
|
|
(max dimension ≤ 1m on every axis after normalization), so none of the actual
|
|
promoted meshes has real-world geometry spanning more than one tile; the
|
|
brief's `[2, 1]` table example is illustrative of the convention, not a
|
|
derived value for these specific assets. Further rows are added as new
|
|
assets are promoted/generated; keep this table's `Status` column in sync with
|
|
the manifest's `status` field (shared vocab: planned / in-progress /
|
|
placeholder / final, `docs/assets/README.md`).
|
|
|
|
## Cross-References
|
|
|
|
- [conventions.md](conventions.md) — naming, mask sidecars, footprint metadata
|
|
- `client/assets/models/manifest.json` — the machine-readable per-asset registry
|
|
- `.claude/skills/glb-gen/SKILL.md` — production pipeline
|
|
- [D-244](../../../governance/decisions/architecture.md#d-244-asset-rendering--3d-objects-in-world-2d-limited-to-textures--flat-artwork), [D-241](../../../governance/decisions/process.md#d-241-spike-binary-artifacts-are-local-only--gitignored-never-tracked)
|