Files
settled-reach/docs/assets/visual
jpmschweitzerandClaude Opus 5.5 26cc8de7f3 refactor(tooling): T-1290 — the character domain, and six payloads the map misfiled
`reach character {logo, strip-glb, qa, qa-analyze}` replaces make_logo.py,
glb_strip_utility_nodes.py, analyze_captures.py and the run-garment-qa bash
driver. The QA configs and method doc move beside the domain (qa_configs/,
GARMENT_QA.md), and `qa` takes a config name (`reach character qa hoodie_modern`)
or a path.

Parity, from baselines taken before anything moved:

- the logo PNG is byte-identical
- a synthetic GLB with three real utility nodes strips to identical bytes
  (the committed bodies strip 0 nodes, so they proved nothing)
- re-analyzing a cached capture set gives a byte-identical report.json and
  summary

run-garment-qa is rewritten, not wrapped (D-263). Its decisions — which config,
which Godot ($GODOT, then ~/bin/godot4, then PATH), and whether xvfb-run is
needed — are capture_plan(), pinned by tooling/test_character.py without
launching Godot. The bash exit codes are kept: 2 for a missing config, 3 for
no Godot.

The T-1271 domain map was wrong about this domain. Six of its ten files import
bpy: convert_outfit, inspect_glb, check_hair_symmetry, check_icosphere,
render_quaternius_test and test_quaternius_raw. They are Blender payloads and
joined the carve-out as blender_* (41 payloads now). The 22 existing payloads'
docstrings still cited tooling/garment-fit/ from before T-1273; fixed.

Archived, with reasons in tooling/archive/README.md:

- setup_clothing_metadata.py wrote coverage data for five garments that no
  longer exist in the 24-garment wardrobe
- wipe-bodies.sh ran raw DELETEs on systems.db

segment_reference_distribution.md moved to docs/assets/visual/.

Behaviour changes:

- The QA analyzer exited 0 whatever it found, though its own README says
  clip-through "is the real defect and it gates". qa and qa-analyze now exit 1
  on clip-through, and the remedy names --min-pixels (Wave 1/2 were accepted
  at 150). The cached peasant set has 33 failures at the default 8 px.
- glb strip re-reported the same nodes as stripped on every re-run and
  rewrote an unchanged file: it left them as orphans and then found them
  again. Only nodes still linked into the graph count now, and a first pass
  writes the same bytes as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 19:55:46 +02:00
..

title, description, type, status
title description type status
Visual Asset Pipeline Visual pipeline index — 3D models, textures, and flat 2D artwork (D-244) design active

Visual Asset Pipeline

Status: Active — catalog structure instantiated (T-1050); first models promoted (T-1204); textures/artwork/effects production still pending.

Per D-244: the in-world view renders 3D objects directly. The only flattened 2D content is textures (PBR maps on 3D surfaces) and flat 2D artwork (paintings, flags, billboards, signage) applied as textures/decals on flat surfaces within the 3D world. There is no per-object sprite layer — game objects are not pre-rendered to sprites.

Categories

Category File Count Description
Models models.md 4 3D objects/props (.glb) via Trellis (/glb-gen), promoted per [D-241]
Characters — — 3D meshes composited at runtime via CharacterVisualDescriptor — see character-asset-organization.md
Textures textures.md 0 PBR surface maps (BaseColor / Normal / Roughness) for 3D models
Artwork artwork.md 0 Flat 2D art — paintings, flags, billboards, signage, screen content — applied as textures/decals (via the /sprite-gen 2D-artwork generator)
Icons icons.md 13 UI icons, status indicators (2D, UI layer only) — as-built inventory of client/assets/icons/
Effects effects.md 0 Shaders, particles, overlays

Naming, mask-sidecar, D-235-keyed texture, and multi-tile footprint conventions: conventions.md.

Per-Class Briefs

Each asset class entering production is gated on a one-page brief — ../briefs/ — covering scope, visual reference, naming, generation path, and acceptance (template: ../_templates/asset-brief.md). Briefed this batch (T-1049): station walls, rural walls, doors, floors, furniture/props. Formally deferred (not briefed): lamp posts, TVs, billboards, barns, cars — see ../briefs/deferred.md.

Palette

See palette.md for art direction: camera (D-148 gameplay / D-019 offline-render), the toon-vs-PBR rendering treatment for environment props, the D-235 ObjectTag color/material register, and entity colour relationships (D-033).

Pipeline

  • 3D objects / props: concept image (/image-gen) → Trellis image→3D (/glb-gen) → .glb → promoted to client/assets/models/.
  • Characters: Quaternius source meshes, segmented + rigged, composited at runtime from slots (CharacterVisualDescriptor); see the character-asset doc.
  • Textures: PBR maps authored/generated for 3D surfaces.
  • 2D artwork (paintings / flags / billboards / signage): the /sprite-gen 2D-artwork generator → flat PNG → applied as a texture/decal on a flat surface in the 3D world.

Decision References

  • D-244: 3D objects in-world; 2D limited to textures + flat artwork.
  • D-159–D-164: character 3D pipeline. D-241: asset promotion.
  • D-019: top-down camera, "the angle". D-033: entity colour = relationship to player. D-045: environmental neutrality.