1 The idea
Whenever an image moves by part of a pixel or rotates, it must be resampled, averaging neighbouring pixels, so it softens. Stack several and it softens more. Here we rotate +10° then −10°: back in place, but softer than the source.
In Nuke, Transforms connected back to back are merged into one calculation (concatenation). Put another node like a Grade between them and that chain breaks. This lesson’s engine never concatenates, so you can see the cost.
2 Hands-on in the mini compositor
3 Deep dive
Why half a pixel makes it soft
A frame only has whole pixels. When an image moves by part of a pixel, or rotates, each new pixel has to be averaged from the old ones around it. That is resampling.
Example: a 1 px white line at 1.0 on black, moved 0.5 px with bilinear averaging (what this lab uses), becomes a 2 px line at 0.5 each. The same total light, but the sharpness is gone.
- 11 px line = 1.0
- 2Move 0.5 px
- 32 px line = 0.5, 0.5
Concatenation: let Nuke resample once
In Nuke, when Transform, CornerPin2D or Reformat nodes sit back to back, Nuke combines all the moves into one calculation: one filter pass, and motion blur from the net motion. A Dot in between doesn’t break it.
A pixel-changing node in between, such as a Grade, breaks the chain and each part resamples on its own. The extreme case: scale 0.1, a Grade, then scale 10 turns the picture to mush. With nothing in between, almost nothing is lost.
- 1Transform
- 2Transform
- 3Grade (breaks it)
- 4Transform
Grade before or after the whole Transform chain, never in the middle
Choosing a filter
The filter knob decides how pixels are averaged. None is best for every job; each trades sharpness against a different problem.
| filter | Result | Use when |
|---|---|---|
| impulse | No filtering, nearest pixel; jagged if rotated or scaled | Whole-pixel moves only |
| cubic | The default; a little soft | General work |
| Lanczos / sinc | Sharper, but can ring into dark halos or negatives near bright edges | Detail matters and you have checked the edges |
This lab deliberately doesn’t concatenate
This lab’s engine resamples every Transform separately with bilinear, so +10° then −10° lands back in place but softer than the source checker. In Nuke, the same pair back to back cancels into zero movement and loses no sharpness.
So the lab shows what happens in Nuke when the chain is broken, for example by a Grade or a precomp between two moves. Unlike Nuke, the lab also crops at the frame edge, so the corners come back black; in Nuke the bbox keeps that data. Judge the softness in the middle of the frame.
4 In real work
In Nuke
- Keep Transform, CornerPin2D and Reformat nodes together; only Dots in between.
- Put Grades and other colour nodes before or after the whole transform chain.
- filter: start with cubic; use impulse only for whole-pixel moves.
- A concatenated Reformat doesn’t crop; data outside the frame survives. Add a Crop after it when you need a hard frame edge.
- Check: a Merge (difference) between the source and the moved-and-moved-back result shows how much edge detail was lost.
Common mistakes → the fix
- ✗ A Grade between two Transforms✓ The chain breaks and the image resamples twice. Move the Grade before or after the chain.
- ✗ Sharpening after every Transform to compensate✓ You get halos, not the lost detail back. Fix the cause: fewer resamples.
- ✗ Using impulse on a rotation✓ Impulse doesn’t filter, so edges stair-step. Keep it for whole-pixel moves.
- ✗ Using a very sharp filter without checking bright edges✓ Lanczos or sinc can cause dark rings and negatives. Push the Viewer gain and look around highlights.
Before you send the shot
- All transforms on one element sit back to back
- No Grade or colour node inside the transform chain
- The filter was chosen on purpose
- No dark rings or negatives on bright edges
5 Check yourself
How do you keep sharpness with several Transforms in Nuke?
🔒 Answer the question above and this card opens
1. A 1 px white line at 1.0 is moved 0.5 px with bilinear. What do you get?
2. Which of these breaks concatenation in Nuke?
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).