# `ViewerDocumentJson.materials`

> 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.

Property of [`ViewerDocumentJson`](ViewerDocumentJson.md) · stable · since 2.0.0 · called as `session.document.materials`

```ts
materials?: {
  fadeMs?: number;
};
```

The page's material defaults.

**Default:** the platform and account defaults

## Fields

<a id="fadems"></a>
### `fadeMs`

```ts
fadeMs?: number;
```

The crossfade of a selection change ([`select`](Writer.select.md), undo, redo, [`setSceneModel`](Writer.setSceneModel.md)), ms, as 1.x's
`viewer.transition`: the outgoing and incoming base colours (`baseColor` times its map, or
`baseColor` alone without one) blend in linear colour space, and so do the roughness maps,
`metallic`, `roughness`, `normalScale` and the environment intensity, each map sampled at its
own placement (`uv`, `scale` or `sizeM`, `offset`, `rotationDeg`); other fields switch at the
swap. Each changed part fades from what it drew, and a part outside the change keeps its look,
also when it already wears the incoming material. A part's
first material and a part the same commit loads never fade. [`select`](Writer.select.md) still resolves at its
commit point; [`idle()`](Session.idle.md) waits for the fade, and a capture draws its target (spec section 6.8);
through a `tx` it starts when the commit is shown. 0 swaps in one frame. Counts as 0 under
reduced motion (spec section 6.2). A change during the fade takes over as
[`PartWriteOptions.fadeMs`](PartWriteOptions.fadeMs.md) says (spec section 6.3).

**Default:** the lower layers', else 420

## Generic-API test (spec 3.1)

| Rule | Result |
| --- | --- |
| 1. Neutral name | pass: `materials` names no product |
| 2. A precedent | pass (through its owner [`ViewerDocumentJson`](ViewerDocumentJson.md)): a correctness rule (rows `G48`) |
| 3. Two apps, or labs | pass: 28 apps (ledger: app-04c2774145, app-0c773a4ee3, app-37356bf09f, app-378d190f1b, app-4762caacdc, app-4f16d2f6da, app-4fd23bc869, app-510d750508 and 20 more; fleet cross-check: app-04c2774145, app-0c773a4ee3, app-37356bf09f, app-378d190f1b, app-4762caacdc, app-4f16d2f6da, app-4fd23bc869, app-510d750508 and 20 more) |
| 4. The cheaper fix first | decided per need in Appendix B: rows `G48` (through its owner [`ViewerDocumentJson`](ViewerDocumentJson.md)) at tier fix, stable (a member only where no rule, data, asset or app code serves the need) |
