# Spec for delivering GLB models to the Schirmmacher 3D designer

## Where to upload

Upload your `.glb` to **https://3dassets.schirmmacher.com**, into the `models/` folder, named `<art_nummer>.glb` (e.g. `9719.glb`).

On upload, the portal runs an automatic validator against everything in this spec — name conventions, scale, origin, UV layout — and shows a live 3D preview with a color picker and a UV-debug overlay. **If the validator reports an error, the upload is blocked**; fix and re-drop. Warnings can be overridden if you're confident.

You can re-validate any already-uploaded `.glb` from the file list (the small clipboard-check icon in the row).

## File format

- **glTF 2.0 binary (`.glb`)** — Blender → File → Export → glTF 2.0 → `.glb` Binary
- Embed textures inside the GLB (the exporter's default). No external image files.

## Scale & units

- Export at **Blender default: 1 unit = 1 meter**. Do not apply extra scale.
- A typical pocket umbrella should be ~1 m diameter; a parasol ~3 m. Real-world sizes.
- The designer auto-scales 100× on load. If your export is wildly off-scale, the validator and the browser console will warn ("bounding diagonal outside the 0.3–5 m range") — that's the cue to recheck units / unapplied transforms in Blender.

## Origin & orientation

- **Origin at the umbrella's geometric center** — symmetric around (0, 0, 0).
  - Canopy points along **+Y** (up).
  - Handle hangs along **−Y** (down).
- **+Y is up, −Z is forward** (Blender default — don't change axis settings on export).

## Required mesh names

These exact names (lowercase, underscores, **no typos** — the validator catches `umbrella_bleck` → `umbrella_black`).

| Mesh name | Purpose |
|---|---|
| `umbrella_fabric` | Canopy panels (one mesh covering all 8 panels), UV-mapped to the octagonal layout described below |
| `umbrella_fabric_label` | A second skin sitting just on top of `umbrella_fabric`, **identical geometry and UVs**, transparent material. The customer's printed motif renders onto this mesh. **Required** — without it, no logo / motif can appear on the umbrella. |
| `umbrella_handle` | The grip the customer holds |

## Optional mesh names (only if the product has them)

Use these exact names if applicable; otherwise give the mesh any free-form name and the designer leaves your authored material untouched.

| Mesh name | Purpose |
|---|---|
| `umbrella_handle_button` | Press button on auto-open models |
| `umbrella_fabric_dark` | Inside-facing canopy layer — renders as a darker shade of the chosen colour |
| `umbrella_fabric_black` | Dedicated all-black canopy variant |
| `umbrella_plastic` | Black plastic connecting joints (rib hubs etc.) — renders as `#222222` |
| `umbrella_metal` / `umbrella_chrome` | Chrome frame parts — renders as bright chrome |
| `umbrella_metal_white` / `umbrella_plastic_white` | White-finish variants |

Anything not named `umbrella_*` keeps the material you authored in Blender, untouched.

## UV layout — critical for motif printing

The canopy must be UV-unwrapped to an **octagonal fan**: each of the 8 fabric panels mapped to one wedge of the octagon, all radiating from a single center point. That's the layout the customer interacts with in the designer's "Design Vorlage" panel — any logo they drop onto a wedge corresponds 1:1 to the matching panel on the 3D umbrella.

`umbrella_fabric_label` must reuse the **same** UV layout as `umbrella_fabric` (share the UV accessor or duplicate the same coordinates).

**Reference target** — open any of these existing UV maps in Blender for visual comparison; all use the same octagonal fan:

- https://schirmmacher.de/3d-designer-2021/assets/uvmaps/uvmap-9121.svg
- https://schirmmacher.de/3d-designer-2021/assets/uvmaps/uvmap-9707.svg
- https://schirmmacher.de/3d-designer-2021/assets/uvmaps/uvmap-9706.svg

To visually verify your UVs are correct, after uploading hit **UV-debug texture** in the preview. A correctly-unwrapped canopy shows each panel as a coloured wedge of the gradient; a collapsed or flat-stripped UV shows a single flat colour or stripe across the entire canopy.

## Materials

Material names are cosmetic — the loader ignores them. Pick names that keep your `.blend` file readable (`fabric`, `metal`, `plastic`, `handle_base`).

Use Blender's default Principled BSDF. The designer overrides colour / roughness / metalness on `umbrella_*` meshes at runtime; for any mesh with a non-`umbrella_*` name the material you authored is preserved exactly.

## Self-check before submission

The portal at https://3dassets.schirmmacher.com runs all of these checks automatically on upload, but a quick mental pass first speeds up the loop:

- [ ] File is `.glb` (binary), exported from Blender's glTF 2.0 exporter.
- [ ] Umbrella body is roughly 1 m tall/wide.
- [ ] Origin at (0, 0, 0); umbrella symmetric around it; canopy points +Y, handle points −Y.
- [ ] `umbrella_fabric`, `umbrella_fabric_label`, and `umbrella_handle` are present, named exactly (lowercase, underscore).
- [ ] `umbrella_fabric` is UV-unwrapped to the octagonal fan — open it in Blender's UV editor and compare against one of the reference `uvmap-*.svg` files above.
- [ ] `umbrella_fabric_label` has identical UVs to `umbrella_fabric`.
