From 82d44cf483adf7d17f9fe7b19a729aaee5de052e Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Sun, 26 Jul 2026 13:03:55 +0200 Subject: [PATCH] docs(assets): codify the authored-footprint rule (araminta ruling, PR #214) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit footprint_tiles is an authored value, never derived from normalized mesh geometry — [1,1] defaults only for plausibly-single-tile classes; ordinarily-multi-tile classes require an explicitly stated footprint at promotion. Her exact wording in furniture-props.md §3; conventions.md §4 gains the authored-not-derived sentence pointing at the full rule (and a pre-existing 'Single Sunday-tile' typo fixed in passing). The [1,1] values shipped for the four promoted items stand as ruled. Co-Authored-By: Claude Fable 5 --- docs/assets/briefs/furniture-props.md | 11 +++++++++++ docs/assets/visual/conventions.md | 8 ++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/docs/assets/briefs/furniture-props.md b/docs/assets/briefs/furniture-props.md index 34f81d4cd..2d13a2788 100644 --- a/docs/assets/briefs/furniture-props.md +++ b/docs/assets/briefs/furniture-props.md @@ -76,6 +76,17 @@ manifest for any furniture with a real multi-tile footprint (a table spanning `[2, 1]`); most `props`-category items, including `lion_statue`, omit the field or set `[1, 1]`. +**Footprint for normalized assets** (araminta ruling, PR #214). +Blender-normalized GLBs (`target-width=1.0` postprocess, the spike default) +lose real-world scale — footprint cannot be derived from geometry after +normalization. `footprint_tiles` is therefore an **authored** value, not a +measured one: default `[1, 1]` only holds when the object's real-world class +is plausibly single-tile (chairs, stools, small props, compact desks). Any +item whose class is ordinarily multi-tile (dining tables seating 4+, couches, +beds, wardrobes) needs the promoting author to state an intended real-world +footprint explicitly (in the promotion commit/PR, or a per-item scale note in +the brief) — never left to infer from the normalized mesh. + ## 4. Generation Path Two paths, depending on whether the spike asset is being promoted or a new diff --git a/docs/assets/visual/conventions.md b/docs/assets/visual/conventions.md index ec697a7bb..2d2233b22 100644 --- a/docs/assets/visual/conventions.md +++ b/docs/assets/visual/conventions.md @@ -131,8 +131,12 @@ sprite-era assumption); it is a `manifest.json` field: "footprint_tiles": [2, 1] ``` -`[width, height]` in whole tiles (1 tile = 1m, D-243's voxel unit). Single -Sunday-tile props omit the field or set it to `[1, 1]`. See +`[width, height]` in whole tiles (1 tile = 1m, D-243's voxel unit). Single-tile +props omit the field or set it to `[1, 1]`. For Blender-normalized assets, +this value is **authored at promotion time, not derived from mesh geometry** — +normalization erases real-world scale (araminta ruling, PR #214; the full rule +with the single-tile-class default lives in +`docs/assets/briefs/furniture-props.md` §3). See `client/assets/models/manifest.json`'s `_fields` block for the authoritative field definition alongside the rest of the per-asset schema.