1 The idea
Render passes (AOVs) split the light into parts. In Blender: diffuse = (direct + indirect) × colour, glossy the same way, plus emission. Plus them all back and you get the beauty (here the average difference is only 0.0002).
The point: you can grade one part, e.g. lower the spec without touching the diffuse. Here the alpha rides on the diffuse pass so plussing doesn’t stack alphas.
2 Hands-on in the mini compositor
Task: connect the emission into the second Merge to complete the beauty
Drag from the bottom dot of "Read emission" to the A dot of "Merge plus 2"
3 Deep dive
Light adds, texture multiplies
The beauty is the sum of every part of the light. Direct and indirect light of the same kind are added, then multiplied by the material colour (albedo, or Col), and every kind is added together with emission.
Blender Cycles gives the smallest pieces: Diff = DiffCol × (DiffDir + DiffInd) and Gloss = GlossCol × (GlossDir + GlossInd), then beauty ≈ Diff + Gloss + Trans + Emit + Env (+ Volume if present).
- 1Shuffle each pass
- 2Dir + Ind
- 3× Col
- 4Plus all kinds
- 5Compare to beauty
Prove rebuild = beauty first
Before grading anything, Merge the sum against the beauty with difference and push the viewer gain: it must be black everywhere. If not, a pass is missing, such as emission or a light that isn’t in any group.
Anything missing can go into a leftover = beauty − sum, plussed back so it matches 1:1. Be careful with passes denoised one by one: the sum of separately denoised passes is not the denoised beauty, so the leftover turns into blotches.
Feed only ungraded passes into the difference check.
Grade one pass like a lighter
Unpremult all channels before grading, then copy the original alpha back and premult at the end (some renderers, Blender among them, may store light passes differently from colour passes, so merge the rebuild over mid-grey and check the edges first). Grade mainly with multiplies, in stops: gain = 2^stops (+1 stop = ×2, −1 stop = ×0.5). Multiplies can be reordered and undone, so the values can go back to lighting.
Don’t put a lift or offset on each pass: when N passes are summed, that lift stacks N times. If blacks need lifting, do it once after the rebuild. And don’t darken with a negative lift: it crushes the darks (to 0 with black_clamp on, its default, or negative with it off), and because lift pivots at 1, it pushes values above 1 up.
- 1Unpremult (all)
- 2Multiply / stops
- 3Copy alpha
- 4Premult
Divide down from the biggest pass you trust
Divide to separate, change, multiply to put back: raw = diffuse ÷ albedo. Changing the albedo changes the material; changing the raw changes the light. Sometimes the small pieces multiplied together don’t match the big pass, so start from one you trust, such as diffuse = beauty − everything that isn’t diffuse, and divide and multiply against that so it cancels exactly.
Nuke’s Merge divide is safe (tested): where the divisor is 0 or negative it returns A unchanged, never NaN. Catch: in the ratio setup, where the beauty is 0 or negative the result is AOVcomp itself, not 1, so check black areas before multiplying it into the light-group comp. A hand-written Expression r/0 gives inf, -inf or NaN (0/0), so guard it with a condition.
Light groups, and using them with AOVs
Each light group is a mini beauty for that light, and plussing every group also gives the beauty. Never add light groups to material AOVs: each set already sums to the beauty on its own.
If you edit both sets, carry the AOV edits across as a ratio: final = LGcomp × (AOVcomp ÷ beauty). Never transfer by subtraction: if both sets darken, the same light is removed twice and goes negative. And denoise only the noisy passes (indirect, SSS, transmission); direct passes are usually clean already.
| Transfer by | Result |
|---|---|
| Ratio (divide, then multiply) | Never negative, order doesn’t matter |
| Subtract, then add | Double darkening, negatives, broken colour |
4 In real work
In Nuke
- Unpremult (channels: all) at the top, then Shuffle out each pass.
- Merge (plus) Dir + Ind → Merge (multiply) with Col per kind → Merge (plus) all kinds with Emit/Env.
- Merge (difference) against the beauty and push the viewer gain: it must be black.
- Grade or Exposure (stops mode) on one pass, mostly multiply/gain.
- Copy the original alpha back → Premult.
- Both sets: Merge (divide) with A = AOV comp, B = beauty, then Merge (multiply) into the light-group comp.
Common mistakes → the fix
- ✗ Grading before checking that the rebuild equals the beauty✓ Get the difference black first, then touch colour.
- ✗ Adding light groups to material AOVs✓ Each set sums to the beauty; use one, or link them with a ratio.
- ✗ A lift on every pass✓ Grade passes with multiplies; lift blacks once after the rebuild.
- ✗ Unpremulting rgb only, then grading AOVs✓ Set Unpremult to all, or the AOVs stay premultiplied and the edges go wrong.
- ✗ Transferring AOV edits to light groups by subtraction✓ Use LGcomp × (AOVcomp ÷ beauty).
Before you send the shot
- Rebuild vs beauty difference is black before any grade.
- Each pass is graded with multiplies, in stops.
- Unpremult is set to all, and premult happens once at the end.
- No negatives or NaNs after the rebuild.
- If light groups and AOVs are both used, edits travel as a ratio.
5 Check yourself
Where do you lower only the robot’s spec?
🔒 Answer the question above and this card opens
1. The difference between the summed passes and the beauty isn’t black. What first?
2. You edited both the light-group set and the material-AOV set. How do you combine them?
Where the numbers come from: Computed in your browser. Saturation, Multiply, Clamp, Invert, Keymix, Copy and Grade match Nuke 17.0v2 (checked). Blur, Defocus, Glow, Sharpen, ChromaticAberration, Vignette, LensDistort, Grain, Erode, Toe, the Keyer and Despill are teaching versions, not identical to Nuke’s nodes. Transform here is also a teaching version: bilinear filtering, no concatenation, cropped at the frame edge. Images are our own Blender renders (the green screen is fully code-built; the desert scene uses Gaea 2.3 hills, a Poly Haven CC0 HDRI sky, Poly Haven CC0 rocks and grass, Quixel sand and cliff textures and a Mixamo rig for the robot, with Quixel and Mixamo used in the renders only).