Home · Lab · FX Elements: fire, smoke, explosions

FE3 Interactive light

Multiply the light by the plate, then plus it; never add light straight on

FX Elements: fire, smoke, explosions · ~8 min · Free

1 The idea

Firelight on the ground and the robot isn’t orange added on top. Real surfaces reflect light by their own brightness, so interactive light multiplies the light by the plate first, then plusses that product back: darks stay dark and texture shows. In the light pass the sand beside the fire gets about 0.64, about 5.0× that sand in the plate.

Step through the fake-light modes, tune reach and strength, and drag the wipe to compare with the light pass rendered in Blender. Watch the error, the light landing on the far hills and sky, and how much the darkest 1% brightens. Press ▶ Play to see the light pulse with the flame.

relight: plate + plate × light · light ∝ 1 / (1 + (r/reach)²) × depth gate

2 Hands-on

Task: fake the fire’s light on the ground and the robot so it matches the light pass. It must follow the surfaces, never lift the blacks, and stay off the far hills.

If the darkest 1% brightens a lot, or the far hills and sky pick up light, the recipe is still wrong. Once both stay put, tune reach and strength with the wipe over the sand by the fire and the robot’s fire side.

SkyVFX Lab · FE3interactive · 1001

3 Deep dive

Why plussing light straight on is wrong

Plussing an orange glow onto the plate adds light without regard to how bright each surface is, bright sand or deep shadow alike. Shadows go grey, and the distant sky catches firelight the fire could never reach.

Real surfaces reflect in proportion to their own brightness. In the light pass the sand next to the fire gets about 0.64, and the robot as a whole averages about 0.09. The fake has to land near those values without touching anything else.

RecipeBlacksFar hills and skyReads as
noneUnchangedUnchangedNo firelight at all
plus a radial glowLifted to greyLit tooAn orange filter
radial × plateStay darkStill lit where they sit inside the radial on screenLight on surfaces, but reaching too far
radial × plate × depthStay darkNot litLight from the fire

Build the receptivity, then multiply

Start with plate → Saturation 0 → Grade gain: a black-and-white image of how much light each spot can take. Multiply in the fire’s light (the fire alpha with a big blur, or a Radial). The blur size is how far the light reaches; the gain before the multiply is the strength.

Use gain, not offset or lift: gain keeps the material response. Black 0.1 × 2 = 0.2, while bright or shiny areas jump a lot. If adding light greys the shadows, add contrast to the plate (crush the haze lift) before the multiply.

Don’t multiply a new light onto a plate already lit by a strong key without checking: the bright areas over-react. Where you can, flatten the object first, then add each light’s contribution.

  1. 1Plate
  2. 2Saturation 0
  3. 3Grade gain
  4. 4× fire light
  5. 5Plus onto comp

Light falls off with distance, not screen space

Firelight follows the inverse-square law: near surfaces get a lot, far ones almost nothing. Don’t blur the fire and throw it over the whole frame.

A Radial measures distance on screen and knows nothing about depth, so the far hills right behind the fire on screen catch its light. The fire here is about 7.9 m from camera; a depth gate uses the depth channel to keep the light on things whose depth is close to the fire’s. A light pass from 3D does the job too, if you have one.

Check the far hills and sky first: if they brighten when the light goes on, nothing is gating by distance yet.

Flicker with the flame, sit under the holdout

Interactive light must start, stop and flicker with the fire, within about 2 frames, with the brightest light on the brightest flame frame. A steady light under a flickering flame gives itself away at once.

Comp order: the fire first, then its interactive light, then the smoke. Every light add, glow or emissive, goes under the holdout of anything in front; plus it after the holdout and the light lands on whatever should block it.

If the light really should fall on something in front, give it its own interactive light rather than letting the glow spill onto it.

  1. 1Fire
  2. 2Interactive light
  3. 3Smoke

4 In real work

In Nuke

  1. Saturation (0) on the plate → Grade (gain) for a black-and-white receptivity image.
  2. Light: a Radial, or the fire alpha → a large Blur → Grade for colour and strength.
  3. Shuffle the depth channel out as a mask and remap it into a gate: 1 at the fire’s depth, falling to 0 away from it (for example an Expression for a band around the fire’s depth, or a Grade with white clamp on for a simple near-to-far ramp).
  4. Merge (multiply) light × receptivity × gate.
  5. Merge (plus) onto the comp, under the holdout of anything in front, with output set to rgb.
  6. Drive the light’s gain from the flame’s brightness, for example a CurveTool average of the fire linked into the Grade.

Common mistakes → the fix

  • ✗ Plussing a big orange glow over everything✓ Multiply the light by the desaturated plate first, then plus the product.
  • ✗ Ignoring depth, so the far hills behind the fire on screen light up✓ Add a depth gate, or use a light pass from 3D.
  • ✗ A steady light under a flickering flame, or a light lagging by frames✓ Tie the light’s strength to the flame’s brightness, within about 2 frames.
  • ✗ Multiplying a new light onto an already strongly lit plate without checking✓ Check the bright areas for over-reaction; where you can, flatten the object before adding light.
  • ✗ Light landing on a foreground that should block it✓ Move the light add under the holdout of anything in front.

Before you send the shot

  • The darkest plate pixel rises in proportion, not by a constant, and the blacks don’t go grey.
  • The far hills and sky don’t brighten when the light is on.
  • The light starts, stops and flickers with the fire, within about 2 frames.
  • The brightest light falls on the brightest flame frame.
  • Anything in front that blocks the fire gets no added light.
  • With viewer gain pushed, the bright areas don’t over-react.

5 Check yourself

One question to check yourself

Why multiply the light by the plate before plussing it?

What you learned

🔒 Answer the question above and this card opens

More questions

1. With radial × plate on, the far hills behind the fire on screen brighten. What’s the fix?

2. The flame flickers, but the light on the ground peaks several frames after the flame. What do you do?

Where the numbers come from: The reference light pass is our own Cycles render of the desert scene and robot with the sun and sky off and one point light at the flame centre, coloured like a roughly 1,900 K blackbody (our choice) and set strong. The fake is a teaching version: radial falloff × plate brightness × depth gate. The pass threshold is computed live from the same pictures, halfway between the best error of radial × plate and that of the full recipe, so a fairly rough match passes. Every element is our own: Mantaflow sims in Blender 5.2, rendered in Cycles through the plate’s camera (EmberGen could not export headless on this machine). No stock elements.