Squashed from work; the fine-grained history is under tag archive/work-2026-08-26: - fab: a 3D creation shell and the viewer built on it - raytrace: the traced pane starts coarse and doubles to native, with the raster underneath - fab: a colour picker, a material's textures, and dials that move the scene while they drag - texcomp: the block codec and the container every texture will travel in - fab: FAB_PROBE_MAT — per-material triangle counts, texture presence and uv spread in the roof probe |
||
|---|---|---|
| .. | ||
| src | ||
| Cargo.toml | ||
| README.md | ||
Fab glTF loader
The in-tree reference loader builds an editable Fab Document from glTF or GLB.
Architectural metadata uses this minimal open vocabulary:
{
"node.extras": {
"arch": {
"kind": "wall|slab|roof|window|door|stair|column|beam|site|...",
"level": 0,
"level_name": "Ground Floor",
"id": "stable source id",
"material_class": "glass|wood|metal|concrete|plaster|..."
},
"props": {}
},
"scene.extras": {
"arch": {
"units": "m",
"levels": [{ "index": 0, "name": "Ground Floor", "elevation": 0.0 }]
}
}
}
arch.kind is an open lower-case set. Scene metadata may also carry
arch.north_deg and arch.site; readers accept the older elevation_m level
field for compatibility, but writers use elevation.
Node extras use { "arch": { "kind", "priority", "level", "level_name", "id", "material_class", "area_m2", "volume_m3" }, "props": { ... } }; scene extras
carry arch.units, north_deg, site, and indexed levels with elevations. The
loader maps arch.kind to the element class and retains numeric arch.priority
as the render-order hint used only to resolve measured coplanar overlaps (higher
values win); geometry, picking, and measurement remain unchanged.
For architectural depth ties, node arch.coplanar_priority is a stable integer and the higher value wins only when faces are coplanar. Material extras may carry arch.material_class (including glass), alongside standard KHR_materials_transmission and KHR_materials_ior; site additionally accepts city, timezone_min, summer_time, date_local (YYYY-MM-DDTHH:MM when a full local calendar date exists), or the source-exact day_of_year and minute_of_day when no year was authored.
The optional arch.site object uses lat, lon, and elevation_m, plus date (YYYY-MM-DD),
time (HH:MM local civil time), utc_offset_hours (standard hours east of UTC),
and dst (adds one hour); the converter may also write city, timezone_min,
summer_time, date_local, day_of_year and minute_of_day, and the loader keeps
every present key as arch.site.* Fab document metadata while project north remains arch.north_deg.