VFX Supervisor Field Guide · v1.0

MATRIX-STYLE
BULLET-TIME
FROM SCRATCH

Cooking Video · Camera Orbit · Full Walkthrough
DaVinci Resolve Free fSpy Blender
PHASE 01

Production — The Shoot

Everything is decided here. A bad shoot cannot be saved in post. Follow this exactly.

01

Lock your camera — absolutely fixed, no exceptions

Mount on a tripod. Tighten every joint until nothing moves. Turn off all stabilization: IBIS Off, OIS Off, Electronic Stabilization Off. Even image stabilization at rest introduces micro-drift that will make your clean plate mismatch.

02

Set exposure to full manual — no auto anything

Go fully manual: M mode on your camera. Lock these four things:

  • Shutter speed — set it, don't touch it again
  • Aperture (f-stop) — set it, don't touch it
  • ISO — fixed, not Auto-ISO
  • White Balance — pick Kelvin value (e.g. 5600K), not "Auto"

If any of these shift between the action shot and the clean plate, your composite will have visible lighting mismatches.

03

Record settings — use these exact values

SettingValueWhy
Frame Rate60fps or 120fpsMore frames = better freeze moment to choose
Resolution1920×1080 minimumHigher gives more room to reframe
CodecH.264 or ProRes if availableAvoid over-compressed formats
Shutter Speed1/125s or fasterFreeze the flour in mid-air cleanly
04

Shoot the action — multiple takes

Hit record. Let it roll for 5 seconds before the actor enters frame. Have the subject throw the flour. Let the camera roll 5 seconds after. Do at least 5 takes. You need one perfect freeze frame where the flour is spread dramatically mid-air. More takes = better selection.

Throw flour against a slightly dark background area for maximum contrast when masking.
05

Shoot the clean plate — the single most important element

Do NOT move the camera. Do NOT change exposure. Ask the subject to leave the frame completely. Record 10 seconds of the empty kitchen. This is your "clean plate" — the background without the person. You will use one still frame from this as your 3D projection texture.

Also shoot one high-quality still photo of the same frame with your camera's photo mode at maximum resolution for fSpy — the clean plate photo needs lens distortion to match your video frame.

Beginner Pitfall — Phase 1

Moving the camera after the action shoot. Even bumping the tripod slightly makes the clean plate useless — it will never align with the action shot. Physically tape the tripod feet to the floor if needed. Treat the tripod as sacred until all clean plate footage is recorded.

PHASE 02

Isolation — DaVinci Resolve Fusion

Extract a single perfect freeze-frame and cut the subject out with a polygon mask. Export as transparent PNG.

01

Import footage and find your freeze frame

Open DaVinci Resolve. Click New Project. In the Media page, drag your action footage clip into the Media Pool. Click the Edit tab at the bottom. Drag the clip from the Media Pool to the timeline.

Scrub through the timeline by dragging the playhead. Find the frame where the flour is most dramatically spread. Use the arrow keys to move one frame at a time for precision.

02

Freeze the frame — create a still in the timeline

With your playhead on the perfect frame: right-click on the clip in the timeline. Select Change Clip Speed. Check the box Freeze Frame. Click Change. The clip will now hold on that frame. Trim the clip to about 3–4 seconds duration by dragging the right edge of the clip.

Note the exact timecode of this frame — you'll need it later for compositing sync.
03

Enter Fusion — open the node graph

Make sure the playhead is on your freeze-frame clip. Click the Fusion tab at the very bottom of the screen (the icon looks like a molecular diagram). The Fusion compositor will open. You will see a node graph at the bottom with two nodes already connected: MediaIn1MediaOut1.

04

Add a Polygon mask node

Click once on the MediaIn1 node to select it (it should highlight yellow). Now press Shift + Space to open the tool search. Type Polygon and press Enter. A Polygon1 node appears.

Now connect it: click and drag from the output of Polygon1 to the mask input on MediaIn1. The mask input is the small triangle on the bottom of the node (not the main output arrow — the little triangle underneath). The connection is correct when the node border changes.

Alternatively: select MediaIn1, then hold Ctrl and click Polygon in the Effects Library to auto-connect it as a mask.
05

Draw the polygon rotoscope mask

Click the Polygon1 node to select it. Look at the viewer above — you should see your frozen frame. In the Inspector panel on the left, make sure Paint Mode is visible.

Now click point by point around the outline of your subject in the viewer to draw a polygon. Click around the person's silhouette: head, shoulders, arms, torso, and importantly trace around any flour particles you want to keep. Double-click the final point to close the shape.

  • To add more points: click on the polygon edge between two points
  • To move a point: click-drag any existing point
  • To delete a point: right-click it → Delete Point
  • Zoom into the viewer: Ctrl + Scroll Wheel
06

Invert the mask if needed and check the matte

Look at the result in the viewer. If the background is visible and the person is cut out (wrong), click the Polygon1 node. In the Inspector, find Invert and enable it. Now the person should be visible and the background transparent (shown as black in the viewer).

To see the alpha channel (transparency map): press A in the viewer. White = opaque (your subject). Black = transparent (background). Grey edges = soft transition. You want clean white on the person, clean black outside.

Use Soft Edge in the Polygon Inspector to feather the edge by 2–4 pixels for a natural blend.

07

Export as transparent PNG

In the node graph, make sure MediaIn1 is connected to MediaOut1. Now go to the Deliver tab (bottom bar, the rocket icon). In the render settings on the left:

  • Set Format to PNG
  • Set Codec to PNG
  • Enable Export Alpha checkbox — this is critical for transparency
  • Set Resolution to match your footage (e.g. 1920×1080)
  • In the timeline range, set In/Out to export only 1 frame (your freeze frame timecode)

Click Add to Render Queue, then click Render All. You will get a .png file with transparency. Name it subject_cutout.png.

Beginner Pitfall — Phase 2

Forgetting to enable "Export Alpha." Without this, your PNG exports as a flat image with a black or white background — no transparency. Every compositing step that follows depends on a real alpha channel. Double-check this before rendering. Also, connect the Polygon to the mask triangle input, not the image input, or Fusion will throw an error.

PHASE 03

Camera Matching — fSpy

Tell Blender exactly what lens and position the real camera was at by matching perspective lines in fSpy.

01

Prepare your reference image

Export one frame from your clean plate footage — use the same frozen frame time, but from the clean plate clip (no person). In DaVinci Resolve Deliver, export a single-frame PNG the same way as above but from the empty kitchen clip. Name it clean_plate_ref.png.

02

Open fSpy and load the image

Launch fSpy. Go to FileOpen Image. Select clean_plate_ref.png. The image fills the fSpy window. You will see two sets of colored lines: the red lines are for the X-axis vanishing point, the blue lines are for the Y-axis vanishing point (or Z depending on orientation).

03

Set the camera parameters

On the right panel in fSpy:

  • Focal Length: Enter your lens focal length (e.g. 24mm, 35mm). Check your camera's recording metadata or EXIF data. If unknown, use 35mm as a default guess.
  • Sensor Size: Set to match your camera sensor (e.g. APS-C = 23.5 × 15.6mm, Full Frame = 36 × 24mm)
  • Principal Point: Leave at center unless your lens has extreme distortion
04

Place the vanishing point lines — X axis (red)

Look at your kitchen image. Find two real-world horizontal parallel lines that recede into the distance. Good examples: the top edge of a counter, the bottom edge of a cabinet, a tile grout line on the floor, the top of the backsplash.

Drag the two red line endpoints so each red line lies exactly along one of these parallel horizontal features. The lines must follow real geometry — drag each endpoint handle to snap to the edge of the counter/cabinet.

Where these two red lines intersect (the vanishing point) is computed automatically. You'll see a dot appear — that is the X-axis vanishing point.

05

Place the vanishing point lines — Z axis (blue)

Find two more real-world parallel lines, but this time going in a different direction — typically lines running toward the far wall perpendicularly. Cabinet sides, drawer fronts, tile edges running toward the back. Drag the two blue line endpoints to lie along these edges.

The fSpy solver updates in real-time. Watch the 3D origin axis overlay in the corner — it should look like it's sitting flat on your kitchen floor/countertop, not floating or tilted weirdly.

06

Set the reference distance and origin

In the right panel, find Reference Distance. Enable it. Drag the two yellow reference line endpoints to span a known real-world distance — e.g. a 60cm wide cabinet door, a 90cm counter height. Enter the distance value in the Reference Distance field. This tells fSpy the scale of the scene.

Click Set Origin to place the world origin (the 0,0,0 point). Drag it to the corner where the floor meets the base of a cabinet. This becomes the anchor point for your 3D scene.

07

Export the fSpy project file

Go to FileSave. Save as kitchen_match.fspy. This file stores the camera data. You will import it directly into Blender in the next phase.

Beginner Pitfall — Phase 3

Using lines that are not truly parallel in real life. Perspective lines must come from edges that are actually parallel in 3D space — two edges of the same counter, two rows of the same tile pattern. Using lines from different objects at different heights or angles gives fSpy wrong data, and your 3D camera will be angled incorrectly in Blender. If the axis overlay looks tilted, redo the lines more carefully.

PHASE 04

3D World Building — Blender

Build a minimal 3D kitchen proxy and project the photo onto it. Animate the sweeping camera orbit.

01

Install the fSpy Blender add-on

Download the fSpy Blender add-on from fspy.io — it is a .zip file. Open Blender. Go to EditPreferencesAdd-ons tab. Click Install. Browse to the downloaded .zip, select it, click Install Add-on. Check the checkbox next to Import-Export: fSpy importer to enable it.

02

Start a clean Blender scene

Open Blender. In the default scene, press A to select everything. Press X → click Delete to delete all default objects (cube, lamp, camera). You now have a clean scene.

03

Import the fSpy file

Go to FileImportfSpy (.fspy). Browse to kitchen_match.fspy and click Import fSpy Project.

Two things will appear: a Camera that matches your real lens, and a Background Image that shows your clean plate photo locked to the camera view. Press Numpad 0 to enter Camera View — you should see your kitchen photo exactly as your camera saw it.

04

Set render resolution to match footage

In the Properties panel (right side), click the Camera icon (Scene Properties). Under Output Properties (printer icon), set:

  • Resolution X: 1920
  • Resolution Y: 1080
  • Frame Rate: match your footage (e.g. 60 fps)
05

Build the floor plane

Press Shift + AMeshPlane. A plane appears at origin. Press S then type 3 then Enter to scale it to 3× size. Press GZ → type a small value (e.g. 0) to ensure it sits at floor level (Z = 0). This plane represents your kitchen floor.

06

Build proxy shapes for counters and walls

Add more primitives for key geometry. For each new object: Shift + AMeshCube.

  • Counter: Add a cube. Press SZ0.15 to flatten it. Press GZ0.45 to lift it to counter height (~90cm ÷ 2 = 45 Blender units if your reference is 1m). Press SX2 to stretch along the counter direction.
  • Back wall: Add a plane. Rotate it 90°: RX90Enter. Move it back: GY → move to back wall position.
  • Side wall (if visible): Same as back wall but RY90Enter

You don't need perfection. These are projection surfaces — rough shapes that approximate the real geometry are sufficient.

Press Numpad 0 frequently to check your proxy shapes against the background photo for alignment.
07

Set up the camera projection material — shader setup

This projects the clean plate photo onto all geometry from the camera's point of view, creating a photorealistic-looking fake 3D kitchen.

Select all your proxy objects: A to select all, then click the fSpy-imported camera to deselect it (hold Shift + click). With all mesh objects selected:

Open the Shader Editor: click the Editor Type dropdown in any panel corner → Shader Editor. Click New to create a new material. Delete the default Principled BSDF. Press Shift + AInputCamera Data. Also add: Shift + ATextureImage Texture. Load your clean_plate_ref.png in the Image Texture node. Also add: Shift + AVectorMapping. Connect: Camera Data Window output → Mapping Vector input → Image Texture Vector input → Material Output Surface.

Then in the Mapping node set Type to Point. This creates a camera-locked UV projection where every surface shows the kitchen photo exactly as the camera sees it.

08

Animate the sweeping camera orbit

First, set your timeline range. In the Timeline at the bottom, set End Frame to 120 (2 seconds at 60fps = full orbit arc).

Create an Empty as the orbit pivot: press Shift + AEmptyPlain Axes. Move this Empty to the position where your subject stands — roughly center of kitchen, at head height: GZ1.6.

Parent the camera to the Empty: Click the camera. Then Shift + click the Empty (Empty selected last). Press Ctrl + PObject (Keep Transform).

Keyframe the orbit:

  • Go to frame 1 in the timeline. Click the Empty. Press IRotation to set a rotation keyframe at the start position.
  • Go to frame 120. Press RZ → type -100Enter (a 100° sweep). Press IRotation to keyframe it.

Press Space to play back — the camera now orbits 100 degrees around the subject's position over 2 seconds.

Add camera shake: select the camera, go to the Graph Editor, select the location curves, press Shift+A to add a Noise modifier to each axis. Set Scale to 0.3, Strength to 0.02 for subtle organic movement.
09

Configure render settings and render

Click the Camera icon in Properties → Render Properties:

  • Render Engine: EEVEE (fastest for this type of shot)
  • Samples: 32 (sufficient for a photo-projection shot)
  • FilmTransparent: Enable this checkbox — renders background as transparent alpha

Click Output Properties (printer icon):

  • Output Path: Set a folder, e.g. /render/kitchen_
  • File Format: PNG
  • Color: RGBA (the A = alpha)

Go to RenderRender Animation. Blender renders all 120 frames as PNG sequence with transparency. This is your 3D background orbit.

Beginner Pitfall — Phase 4

Not enabling "Transparent" in Film settings before rendering. Without it, Blender fills the background with a solid grey/black. Your PNG sequence won't have an alpha channel and you can't composite through it. Also: after the camera orbit begins, the camera projection "slides" slightly because the texture is camera-locked — this is the desired parallax effect, but don't be alarmed when the kitchen photo appears to slightly swim as the camera moves. That is correct and realistic.

PHASE 05

Compositing — DaVinci Resolve

Stack the layers, sync timing, then add polish — motion blur, lens flash, and camera shake.

01

Import all assets into the Media Pool

Open DaVinci Resolve. In the Media page, import all three asset groups:

  • Your original action footage clip (the video with the flour throw)
  • subject_cutout.png (your transparent subject)
  • The Blender render sequence — click FileImport Media, navigate to the render folder, select the first PNG in the sequence, and enable the Image Sequence checkbox in the import dialog. Resolve will treat all 120 PNGs as one clip.
02

Build the timeline — layer order

In the Edit page, build three video tracks. Right-click in the timeline panel → Add TrackVideo twice, so you have V1, V2, V3.

  • V1 (bottom): Drag the Blender render PNG sequence here. This is your 3D orbiting background.
  • V2 (middle): Drag the original action footage here. Trim it to just before the freeze point. This is for the live action "run-up".
  • V3 (top): Drag subject_cutout.png here. This is the frozen, masked subject that floats over the 3D background.
03

Sync the freeze moment with the Blender animation start

Your edit should flow like this:

  • Frames 1 → X: Normal speed action footage on V2. Subject enters, throws flour.
  • Frame X: The cut point. Action footage ends. Blender sequence begins on V1. Subject cutout PNG begins on V3.
  • Frames X → X+120: Blender 3D kitchen orbits. Frozen subject on top.

Trim V2 so it ends exactly at frame X. Start V1 and V3 exactly at frame X. The subject on V3 should be scaled and positioned to match where the person was standing in the live footage — use Alt + F (Fit to Frame) and then nudge position with the Transform controls in the Inspector.

04

Match color between the subject cutout and the 3D background

Go to the Color page. Click the subject_cutout.png clip node. Add a Color Wheels node. Use the Lift and Gain wheels to adjust shadow and highlight tonality to match the Blender render's brightness. The Blender render may be slightly more flat — bring up its contrast by clicking the Blender sequence node and adding a slight S-curve via Custom Curves.

05

Add motion blur to the Blender sequence in Fusion

Click the Blender render sequence on V1. Hit the Fusion tab. In the node graph: select MediaIn1, press Shift + Space, type Motion Blur → add a MotionBlur node between MediaIn1 and MediaOut1.

  • In the Inspector: Quality = 4, Shutter Angle = 180

This smears the background slightly as the camera orbits, matching the motion blur look of real handheld camera moves.

06

Add a lens flare / lighting flash at the freeze moment

In the Edit page, add a 4th video track: V4. Create a new Color Matte clip: drag a Color generator from the Generators panel in Effects. Place it on V4 starting exactly at frame X (the freeze point), lasting 6–10 frames.

Set the color to pure white (#FFFFFF). In the clip Inspector, set the composite mode to Add. Now keyframe the opacity: at frame X set opacity to 80. At frame X+3 set opacity to 0. This creates a fast white flash that sells the "freeze" transition as if the camera just fired a strobe.

07

Add a subtle camera shake to the entire composite

Create a new Compound Clip from all your tracks: select all clips, right-click → New Compound Clip. Name it Final_Composite.

Click this compound clip. Go to Fusion. In the node graph: add a Transform node between MediaIn1 and MediaOut1. Right-click the Center X parameter → Animate. Manually keyframe it: offset by +0.003 at frame 1, -0.002 at frame 3, +0.001 at frame 5, and so on in a random pattern. Keep values under 0.005 for subtlety. Repeat for Center Y. This adds organic handheld camera feel.

Alternatively: in the Color page, apply the "Camera Shake" OpenFX plugin (under ResolveFX Transform) to the compound clip with Shake Intensity set to 0.3.
08

Final export

Go to Deliver. Select Custom Export preset:

  • Format: MP4
  • Codec: H.264
  • Resolution: 1920×1080
  • Quality: Automatic or manual bitrate 20,000 kbps
  • Frame Rate: match source

Click Add to Render QueueRender All. Your bullet-time cooking shot is complete.

Beginner Pitfall — Phase 5

Forgetting to match the subject's position and scale. The frozen subject PNG was exported at full 1920×1080 resolution — it is already the right size and position. Do not scale it unless you are correcting a slight offset. The most common error is accidentally scaling the subject PNG and then the person appears floating above the floor in the 3D kitchen. Check at multiple points during the orbit that the subject's feet align with the projected floor surface.