Materials

A material decides how a surface reacts to light — its colour, its shine, whether it looks like metal, plastic, ink, or smoke.

In DNA you bind a material to geometry and the built-in renderer takes it from there. The same material works everywhere it's used, so a shape you authored in 2D and lifted into 3D keeps its look.

The three looks

Every material picks one shading mode:

Start in PBR and treat roughness as your main expressive dial. Sweeping roughness from 0 to 1 takes a surface from mirror-sharp to soft and matte without touching anything else.

Beyond the basics

PBR materials carry more than the three core dials:

Any of these channels can be a flat value, a procedural look driven by a Fields, or — if you want full control — an The Expression language.

Volumes are their own thing

A Volume isn't a surface, it's participating media — smoke, fog, fire, clouds. Instead of base colour and roughness you work with density, colour, and how light scatters through it. Volumes are shaded and rendered along their own path; see Volumes and volume.render for the details.

Per-element materials

Materials live on a Collections just like positions and colours. That means you can give every element its own look without splitting the graph.

The simplest version is the @Cd colour attribute: write a per-row colour with sop.scatter, an The Expression language, or a Fields, and each element renders in its own colour. An authored @Cd wins over the material's base colour, so you can bind one material and then tint individual elements on top.

For richer variation you can bind a full material per element, so some rows are glass while others are metal — all in one collection, one render.

Only a colour you deliberately write counts as "authored". The default white that elements start with won't override a material you've bound, so binding a fill just works.

See also