Home · Lab · Lens Artifacts (Advanced)

LA5 Rolling shutter

Rows read one at a time: fast pans skew, vibration wobbles

Lens Artifacts (Advanced) · ~6 min · Free

1 The idea

Most CMOS sensors don’t read the whole frame at once; they read it row by row, top to bottom, so the bottom row is recorded later than the top by the readout time. In a fast pan each row sees the world at a slightly different moment, and straight poles lean.

If the camera vibrates fast, on a car or a drone, the picture wobbles in waves, often called jello. CG rendered all at one instant won’t lean with it. Change the pan speed: the lean grows with speed, but the right readout stays the same, because it belongs to the camera.

skew (px) = image speed (px/s) × readout time (s)

2 Hands-on

Task: set the CG readout time so the CG poles lean exactly like the plate’s poles

You can measure it from the plate: readout = skew over the full frame height ÷ pan speed

SkyVFX Lab · LA5interactive · 1001

3 Deep dive

Reading one row at a time

A global shutter reads every pixel at once. A rolling shutter reads the top row first and works down to the bottom; the time from the first row to the last is the readout time. Row y is recorded (y ÷ height) × readout after the top row.

If nothing moves you’ll see nothing wrong. The trouble starts when the image moves during the read, so the distortion depends on the image’s speed on the sensor times the readout.

MotionSymptom
Fast horizontal panVerticals lean (skew)
High-frequency vibrationThe picture wobbles (jello)
Fast spinning objects (propellers)Bent, warped shapes
A flash shorter than the readoutOnly a band of the frame lights up

Measuring the readout from the plate

Find a vertical in the scene (a pole, a building edge) during a fast pan. Measure how many pixels it leans from top to bottom, scale that to the full frame height, and divide by the image speed in pixels per second (from a track between frames). That’s the readout. Example: 27 px of skew over the full frame at 1500 px/s = 18 ms.

The result should be close to the camera’s spec for the mode it shot in. The same camera can have different readouts at different resolutions and frame rates, so note the camera mode too.

  1. 1Find a vertical in a pan
  2. 2Skew over full height (px)
  3. 3Speed from a track (px/s)
  4. 4readout = skew ÷ speed

Fix the plate, or add it to the CG

There are two ways. One: correct the plate before tracking, moving each row back to a common time with motion vectors, then track and comp. Two: leave the plate alone and make the CG lean with it, shifting each row by the motion times that row’s time, or render with a camera that has a rolling-shutter option (some renderers do).

Tracking a rolling-shutter plate as-is often gives a jittery camera or a solve that won’t settle. Some matchmove tools have a rolling-shutter setting; switch on one unknown at a time (focal, distortion, rolling shutter) and check the result, not everything at once.

If spinning things in the plate are warped, spinning CG must warp the same way

4 In real work

In Nuke

  1. RollingShutter (NukeX) estimates motion with vectors and shifts each row to compensate; tune its correction until verticals in the fastest-pan frames stand straight again.
  2. By hand for CG: a vertical Ramp (0 top → 1 bottom) times the motion vectors (pixels per frame) × the readout in frames (readout in seconds × fps, e.g. 0.018 × 24 ≈ 0.43), driving an IDistort on the CG. If it leans the wrong way, flip the sign.
  3. For a simple straight pan, one Transform skew X is close enough. Skew X is a shear factor, not pixels, so set skew X = (speed × readout) ÷ frame height (e.g. 27 px ÷ 1080 ≈ 0.025), with the centre on the top edge of frame so the top row stays put.
  4. Check: line the CG up with a vertical in the plate and wipe on the fastest frames.

Common mistakes → the fix

  • ✗ One fixed skew for the whole shot✓ Skew follows each frame’s speed; the readout is constant, the speed is not.
  • ✗ Tracking a jello plate as-is and wondering why it won’t solve✓ Correct the rolling shutter before tracking, or use the matchmove tool’s compensation.
  • ✗ Guessing the readout from another camera✓ Use the spec for the actual camera and mode, or measure it from the plate.

Before you send the shot

  • CG verticals lean like the plate’s on the fastest frames
  • CG stands straight when the camera is still
  • The readout you used has a source (spec or measurement)
  • Flashes or strobes in CG match any lit bands in the plate

5 Check yourself

One question to check yourself

Same camera, but the pan is twice as fast. What changes?

What you learned

🔒 Answer the question above and this card opens

More questions

1. Poles skew 12 px over the full frame height while the image moves at 800 px/s. What’s the readout?

2. A global-shutter camera pans very fast. What happens to the poles?

Where the numbers come from: Row-by-row readout and skew = speed × readout are the physics of rolling-shutter sensors (KB 157 and Sky’s camera and lens book). The 18 ms readout in the task is our own value; real cameras vary a lot, so check the spec or measure the plate. The scene is built in code and simplified: horizontal camera motion only, no motion blur, evenly timed rows.