# `MapSlot`

> Contract 2.0.0 · package sha256 `a857eca95b35921109faf997094bb4192f12527d9d0fcd4be7e97f06425bad6e` · generated from `configurator-runtime.d.ts` by `services/onsite-scripter/scripts/build-contract-docs.mjs`; edit the source, not this file.

Type · `import type { MapSlot } from '@holostep-configurators/runtime-client/contract';` · stable · since 2.0.0 · section 8. Materials and textures

The map slots of a material (glTF and KHR names). 'orm' is one packed image: occlusion in red,
roughness in green, metallic in blue. A GLB fills 'occlusion' from its occlusionTexture and
'roughness' and 'metallic' from its metallicRoughnessTexture, even when they share one image, and
never fills 'orm'. In each of those three channels its own slot wins over 'orm' when it holds a
texture or 'none': `occlusion: 'none'` drops occlusion alone, whatever image carries it, and
roughness and metallic keep theirs. That holds within one layer (the GLB, the scene model's
MaterialNode, a rule; spec section 6.10, R1): an 'orm' texture fills each of the three
channels its own layer leaves empty, over the layers below, the GLB's own maps included, as
1.x binds a stored ORM map to every channel its node has no map for. `orm: 'none'` clears only
an 'orm' from below. The colour slots are 'baseColor', 'emissive', 'sheenColor' and
'specularColor', decoded as sRGB by default; every other slot holds data and decodes linear
([`TextureSpec.colorSpace`](TextureSpec.colorSpace.md)).
To drop every GLB map, wear a [`Material`](Material.md) or `{ ref }`, which replace what the part wears; a
[`MaterialSpec`](MaterialSpec.md) merges, so a slot it leaves out keeps the GLB's map ([`MaterialInput`](MaterialInput.md)).

## Declaration

```ts
export type MapSlot = 'baseColor' | 'normal' | 'metallic' | 'roughness' | 'occlusion' | 'orm' | 'emissive' | 'alpha' | 'clearcoat' | 'clearcoatRoughness' | 'clearcoatNormal' | 'sheenColor' | 'sheenRoughness' | 'specular' | 'specularColor';
```

## Generic-API test (spec 3.1)

| Rule | Result |
| --- | --- |
| 1. Neutral name | pass: `MapSlot` names no product |
| 2. A precedent | pass: [Blender Principled BSDF (Metallic, Roughness inputs)](https://docs.blender.org/manual/en/latest/render/shader_nodes/shader/principled.html) (row `K16`) |
| 3. Two apps, or labs | one app recorded: app-fc07850558 (spec 3.1 rule 3 asks for two, or labs) |
| 4. The cheaper fix first | decided per need in Appendix B: rows `K16` at tier stable (a member only where no rule, data, asset or app code serves the need) |
