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:
PBR — the realistic, physically-based look. You dial in base colour, metallic, and roughness, and the renderer handles the lighting realistically. Low metallic + high roughness is chalky plastic; high metallic + low roughness is a polished mirror. This is the default and the one you'll reach for most.
Toon — flat, cel-shaded bands instead of smooth falloff. Great for illustrative, graphic, or hand-drawn looks.
Unlit — the colour shows exactly as authored, ignoring lights entirely. Use it for UI-style flats, glowing emissive accents, or anything you want to control directly.
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:
Emissive — makes a surface glow on its own (neon, screens, embers). Emissive surfaces light up Post effects like bloom.
Glass / transmission — see-through surfaces with an index of refraction and coloured absorption, so thick glass tints what's behind it.
Ambient occlusion — deepens contact shadows in creases and cavities.
Texture maps — feed an image into base colour, normal, metallic/roughness, AO, or emissive. Normal maps add fine surface detail without extra geometry. See Importing media for loading images.
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.