docs: record remaining USD architecture decisions (questions 2-4)

- Q2: seam/sharp encoding → index-space primvars (not world-space KD-tree)
- Q3: preview GLB → co-author from tessellation pass (not USD->GLB round-trip)
- Q4: layer strategy → Option B (canonical + override layer), flatten via
  UsdUtils.FlattenLayerStack() to preserve instanceable prims for future
  bearing ball instancing optimization

All 5 open questions now decided. Priority 2 coding can start after Priority 1.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-11 15:16:09 +01:00
parent cbffcfbf8b
commit c1e1184c51
@@ -10,7 +10,9 @@
- [ ] Priority 1 complete (step_tasks.py decomposed, blender_render.py decomposed) - [ ] Priority 1 complete (step_tasks.py decomposed, blender_render.py decomposed)
- [x] Decision: USD authoring library → **`usd-core` (pip)** — provides `pxr` module, no GPU tools needed, pip-installable in render-worker - [x] Decision: USD authoring library → **`usd-core` (pip)** — provides `pxr` module, no GPU tools needed, pip-installable in render-worker
- [ ] Decision: seam/sharp payload encoding (primvars vs. JSON sidecar) - [x] Decision: seam/sharp payload encoding **index-space primvars** (`primvars:schaeffler:seamEdgeVertexPairs`, `primvars:schaeffler:sharpEdgeVertexPairs`) — survives transforms, no KD-tree needed
- [x] Decision: preview GLB derivation → **co-author from same tessellation pass** during migration (avoid round-trip loss from USD→GLB export)
- [x] Decision: single-file vs override layers → **Option B: canonical geometry layer + material override layer, flattened via `UsdUtils.FlattenLayerStack()` for delivery** — preserves hierarchy AND allows instancing later (`FlattenLayerStack` keeps `instanceable` prims; `UsdStage.Flatten` would expand them). Note: Phase 1 uses no instancing (matching current GLB pipeline), but the delivery path is already instancing-safe.
--- ---
@@ -320,9 +322,9 @@ Clicking an unassigned part in the viewer auto-focuses it in the MaterialPanel.
| # | Question | Options | Default recommendation | | # | Question | Options | Default recommendation |
|---|---|---|---| |---|---|---|---|
| 1 | USD authoring library | ~~`pxr` full / `usda` text / `usd-core` pip~~ | ✅ **`usd-core` pip** — `pip install usd-core` in render-worker Dockerfile | | 1 | USD authoring library | ~~`pxr` full / `usda` text / `usd-core` pip~~ | ✅ **`usd-core` pip** — `pip install usd-core` in render-worker Dockerfile |
| 2 | Seam/sharp payload encoding | Custom primvars on mesh prim / separate JSON sidecar / GLB extras (current) | Index-space primvars — cleaner, survives transforms | | 2 | Seam/sharp payload encoding | ~~primvars / JSON sidecar / GLB extras~~ | ✅ **index-space primvars** on mesh prim |
| 3 | Preview GLB derivation | USD → GLB export pass / co-author from same tessellation pass | Co-author during migration (avoid round-trip loss) | | 3 | Preview GLB derivation | ~~USD→GLB export / co-author from tessellation pass~~ | ✅ **co-author from same tessellation pass** during migration |
| 4 | Single-file USD or override layers | Flat single file / canonical + overlay layers (flattened for delivery) | RFC recommends Option B (overlay layers, flatten for delivery) | | 4 | Single-file USD or override layers | ~~flat single file / canonical + overlay layers~~ | ✅ **Option B: override layers + `UsdUtils.FlattenLayerStack()` for delivery** — hierarchy preserved, instancing-safe |
--- ---