Multi-channel fields
One field that carries several named layers at once — colour, roughness, metalness, normal — all sampled together at the same point.
What it is
Most fields answer a single question at every point: what colour?, how far?, which way? A multi-channel field answers several at once, neatly bundled.
Think of it as one field with named slots inside it. A material field, for example, carries an albedo colour, a roughness number, a metalness number, and a normal direction — all in a single thing on the wire. Ask it at a point and it hands back every channel for that point in one go.
Each slot is still an ordinary field underneath: the albedo slot is a colour field, the roughness slot a scalar field, the normal slot a vector field. The bundle just keeps them travelling together so they always line up.
Like every field, this is a formula, not stored data. Nothing is baked into a grid — each channel is computed wherever you ask, so the bundle stays crisp at any scale and costs no memory until sampled.
When to reach for it
Reach for a multi-channel field whenever several values belong together and should be sampled as a set:
Make a material into a field. This is the way a material becomes something you can paint across a surface — albedo, roughness, metalness, ao and emissive all flowing as one. See Materials.
Drive a simulation. A fluid bundle can carry velocity, density, pressure and temperature together so a sim reads the whole state at each point.
Pack your own set of layers. Group any related fields under names you choose — handy for passing a tidy bundle between parts of a graph instead of a tangle of separate wires.
If you only ever need one value per point, you don't need a bundle — a plain scalar, vector or colour field is simpler.
How to use it
Build one with field.channels. Pick a schema — a ready-made set of named slots — and the node shows one input per channel:
PBR — albedo, metallic, roughness, normal, ao, emissive (a material).
Fluid, Particle, Volumetric, Toon, Geometry — purpose-built sets for those jobs.
Custom — type your own comma-separated channel names and wire whatever you like into each lane.
Wire a field into each slot you care about. Any slot you leave empty falls back to a sensible default for that schema, so you only author the channels you want to change.
Pull a channel back out. Most of the time you don't have to — when you feed a bundle into something that wants a single channel (say, a colour input), DNA does the automatic conversion and picks the matching channel for you. To grab a specific one by name, see Automatic conversion.
Choosing a registered schema like PBR means typed consumers recognise the bundle instantly — the renderer knows which slot is roughness and which is normal. Reach for Custom only when no built-in set fits.
Gotcha
When two channels share the same kind of value (for example a depth and a mask that are both single numbers), the automatic conversion can't tell them apart by type alone. Extract the one you want by name so you get the right layer.
And remember every slot is independent — wiring a field into roughness changes only roughness. Leaving a slot empty doesn't break anything; it quietly uses the schema's default.