Files
Project-M/Docs/Vault/01_Vision/Art_Direction_Lantern.md
kronic 89dd155f85 Docs: LANTERN Phase 0 — full pivot adoption + all-doc sweep
Adopt LANTERN as the operative direction (co-op action-RPG, light-as-territory),
superseding the Awakening Engine fiction + the Co-op Hades iteration. Existing
code becomes salvage quarry; the mechanical pillars hold.

Phase 0 deliverables (doc portions):
- DR-048 adoption decision record (0.1)
- Lantern_Strip_Mothball_Inventory — system-by-system keep/rework/mothball (0.2)
- Lantern_World_Model_Spike — pocket-graph + seed-pinning BRIEF, review-first (0.3)
- Art_Direction_Lantern — style bible + material decision + A0 gate (0.4)

Docs/skills sweep: Pillars pointers + LANTERN locked decisions; superseded
banners on Identity, Iteration_CoopHades, Path_to_Fun, Milestones, Backlog,
End_Of_Month (all redirect to the LANTERN roadmap); Home MoC + current-direction
callout (and stale serena line fixed); Systems_Index era note; CLAUDE.md
core-loop line -> LANTERN direction pointer (verbose co-op-Hades invariants
archived to the gotchas archive, net-neutral under the 40 KB budget); dots-dev
validation-harness expedition-run recipe flagged era-specific.

Two Phase-0 gate items remain OPEN (not doc work): the 0.3 world-model design
review and the 0.4 in-engine style-proof scene.

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

99 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags: [vision, art-direction, lantern, style-bible, workstream-a]
status: draft-binding
updated: 2026-07-13
permalink: gamevault/01-vision/art-direction-lantern
---
# LANTERN — Art Direction Lock (Workstream A0)
> The binding one-page style bible for [[Roadmap_Lantern_Slice]]'s art track (Workstream A0, runs inside
> Phase 0). Adopted under [[DR-048_Lantern_Adoption_Full_Pivot]]. This is the **written** half of A0; the
> gate is the **in-engine style-proof scene** (below), which is **not yet built** — Phase 0 does not exit
> until it is approved. The readability law is lifted verbatim from [[Identity_Lantern#Art, audio & the
> readability law|the identity]] and applies to every asset from day one.
>
> **Why this matters more than usual:** one developer, learning Blender, shipping custom creatures. This
> direction lives or dies on a **repeatable factory**, not on any single beautiful asset. Every rule here is
> chosen so that creature N+1 is a routine sitting, not a research project.
## Style bible (binding)
- **Stylized low-poly, RoR2-lineage.** Silhouette-first; faceted geometry; flat / near-flat shading. Mood is
carried by **dynamic light in murk**, never by texture detail. A readable blob with a great light beats a
detailed model nobody can see in the dark.
- **Poly budgets (hard):** props **≤ ~800 tris** · creatures **≤ ~3k** · hero / boss / suit-frames **≤ ~6k**.
- **The palette is the ontology** (the fiction rule made visible): **warm gold/amber = light (ours, true) ·
cold corpse-green/blue = gloam (the deep's counterfeit) · lure-red = bait · white-hot = conversion.**
- **The readability law (binding, from the three reviews):**
1. **Value first, hue second.** Every warm/cold distinction is *also* carried by luminance value, shape
language, and **flicker-cadence** (steady = true, flicker = false — the load-bearing channel; hue is the
garnish). This is the colorblind answer (gold-vs-green is a worst-case red-green pair).
2. **Design the dark floor for the video encoder, not the OLED.** Bioluminescent ground-clutter density is
the streamability dial; dark scenes must survive 68 Mbps without macroblocking. A separate **capture /
photo grade** (lifted, saturated profile) ships for clips and screenshots.
3. **Screenshot discipline.** Every promotional frame reads at **200 px** with a warm focal light AND a
legible silhouette.
## The material decision (the solo-dev keystone)
**No per-asset texturing, ever.** This is the single most important production rule in the project.
- **One shared palette / gradient atlas** — Imphenzia-style: a single small texture of colour bands. UVs are
*placed onto bands*, not unwrapped. Zero texture-painting skill required; perfect style coherence; batches
hard.
- **Vertex-colour accents** for per-asset variation on top of the atlas.
- **Three master shaders — the whole rendering surface of the game:**
1. **`Lit-Palette`** — statics (props, dressing, environment, station).
2. **`Emissive-Gloam`** — parameterized warm/cold/lure emissive. **One shader is the entire palette rule:**
its parameters (hue, **flicker-cadence**, intensity) are *both* the look *and* gameplay information
(true-vs-false light). Every glow in the game is this shader.
3. **`Skinned-Palette`** — deformation-aware (the Rukhanka-skinned creatures/suits). Replaces the current
`AnimatedLitShader` role as the palette-atlas creature material.
**Every asset in the game shares ~3 materials.** Coherence, batching, and no per-asset UV/texture work — that
is the amortization that makes a one-person creature factory possible.
> ⚠ **Carry-over gotcha ([[material-property-body-flash-rukhanka]]):** a per-instance `URPMaterialPropertyBaseColor`
> tint only renders if the shader declares `_BaseColor` **Hybrid-Per-Instance** (ShaderGraph
> `overrideHLSLDeclaration:true` + `hlslDeclarationOverride:2`). The three master shaders must be authored
> Hybrid-Per-Instance if we want per-instance gloam-tint variants (a free variant axis — see A2 variant policy).
## Reference board
- **RoR2** — shape language, faceted low-poly, dynamic-light-first in dark ambient.
- **Dredge** — water mood, dread, the sea-as-atmosphere.
- **Hollow Knight** — value control in darkness (how to stay legible with almost no light).
- **Below** — the **cautionary** case: solo dread + screenshot-illegible darkness killed it. The readability
law exists specifically against this failure.
## The style-proof scene — THE GATE (not yet built)
**One prop + one creature + one suit**, in-engine, under murk + dynamic lights, on the capture grade. Judged
three ways, all of which must pass:
1. **Full-size** — reads as *this game and no other*.
2. **At 200 px** — silhouette + warm focal light legible (screenshot-discipline rule).
3. **In grayscale** — value-first / flicker-cadence carries the true-vs-false read with hue removed.
**Locked before any mass production.** This gate + [[DR-048_Lantern_Adoption_Full_Pivot]] + the world-model
review ([[Lantern_World_Model_Spike]]) together are Phase 0's exit. Until this scene is approved, Workstream A
stays in A0 (no A1 pipeline proof, no A2 factory).
## Handoff to the deeper pass (A1 recipes)
The concrete recipe documents are **A1 work** (Phase 1), not A0: the **statics recipe** (Blender → export
units/scale → collider policy → entity baking → palette material) and the **skinned recipe** (rig → per-action
clips, Key All Bones, bake-to-pose → FBX → Rukhanka ingest → `Skinned-Palette` → prefab). Both build on the
project's proven animation pipeline ([[DR-022_Animation_Pipeline_Rukhanka_Synty]] / [[DR-023_Enemy_Animation_MonsterMash]]
+ the machine-local Blender recipe) and the **three rig families** (Drifter / Crawler / Strider). This doc is
the constitution; the recipes are the operating manuals.
## Related
- [[Identity_Lantern]] — the fiction the palette encodes (the readability law lives there too)
- [[Roadmap_Lantern_Slice]] — Workstream A (A0 → A1 → A2 → A3) gates
- [[DR-048_Lantern_Adoption_Full_Pivot]] — the adoption
- [[Synty_Asset_Inventory]] — placeholder quarry until custom assets land
- [[DR-022_Animation_Pipeline_Rukhanka_Synty]] — the skinned-material lineage `Skinned-Palette` inherits