Home · Lab · Comp Foundations

F3 Light adds up: plus vs screen

Why screen makes sparks look flat

Comp Foundations · ~7 min · Free

1 The idea

These sparks are a light element: the cores reach about 62 (far above 1) and alpha is 0, like a real fire element. Light in the real world adds up, so plus keeps all of it.

Nuke’s screen uses A + B − AB only while values stay between 0 and 1. Above 1 it returns max(A, B), so the brightest light is not added to the plate. Probe the soft edge of a spark, around the core.

plus: A + B · screen (Nuke): A + B − AB if A, B in 0–1, else max(A, B)

2 Hands-on in the mini compositor

Task: change the operation so the light adds onto the plate in full

Drop the Viewer gain to about 0.1 to see where light goes missing

SkyVFX mini compositor · F3640×360 · float · 1001

3 Deep dive

Light only adds

Two lamps on one wall give the sum of both. Sparks, fire, glows, flares and CG light groups therefore use plus = A + B, which keeps all of the light energy.

Plus does not care about order: A + B = B + A. Stack several light elements in any order and you get the same result.

What screen does to HDR values

The numbers below were measured in Nuke. Once either input passes 1, screen just returns the larger one, and the plate’s light under the spark is thrown away.

A (light)B (plate)plusscreen
0.80.61.40.92
2.00.52.52.0
1.51.22.71.5

Overlay, soft-light and color-dodge also break above 1; keep them away from linear images

Dialling a light element

Too strong? Turn it down on its own branch before the merge with a Grade multiply, which can also tint it. Or use the Merge mix knob: out = B + mix·(op − B), so plus at mix 0.5 gives B + 0.5·A.

Do not tame light by switching to screen: it does not just reduce, it throws energy away.

  1. 1Read sparks
  2. 2Grade (multiply, tint)
  3. 3Merge plus (A)
  4. 4Plate (B)

Light or matter

Before merging, ask: does this element give off light or block it? Light goes on with plus. Things that block light, such as smoke, dust or snow, go over with a real alpha.

ElementMergeWhy
Sparks, glowplusPure light
CG light groupsplusThey sum back to the beauty
Smoke, dustoverBlocks the background
SnowoverSolid flakes, not light

4 In real work

In Nuke

  1. Read sparks (EXR, linear, alpha 0) → Grade (multiply for strength and tint)
  2. Merge, operation plus: sparks into A, plate into B
  3. Several lights: chain Merge plus nodes; the order does not matter
  4. Reduce strength with the Grade multiply or the Merge mix, not with screen
  5. Check with the Viewer gain near 0.1: the cores must still read brighter than the plate

Common mistakes → the fix

  • ✗ Using screen for HDR sparks✓ Above 1 it returns max(A, B) and light goes missing. Use plus.
  • ✗ Saving a light element as an 8-bit PNG/JPG✓ 8-bit files clip at 1 and the cores go flat. Keep it as float EXR.
  • ✗ Plussing smoke onto the plate✓ The smoke glows like light. Put it over with its alpha.
  • ✗ Turning on (un)premult by in a Grade on sparks with alpha 0✓ In Nuke, alpha-0 pixels come out 0 in every channel, so the sparks vanish. Leave it off (see F4).

Before you send the shot

  • Every light element goes in with plus
  • No screen, overlay or soft-light on values above 1
  • Light elements are float, not clipped at 1
  • With the Viewer gain down, the cores still hold

5 Check yourself

One question to check yourself

A fire/spark element with alpha = 0 merged with over gives the same result as…

What you learned

🔒 Answer the question above and this card opens

More questions

1. In Nuke, screen with A = 2.0 and B = 0.5 gives…

2. The sparks are too strong. Where do you fix it?

Where the numbers come from: Merge, Grade, Premult and Unpremult here match Nuke 17.0v2 in all 109 test cases (numbers sampled from real Nuke). Blur and Transform are simplified: close, not identical to Nuke. All images are Blender renders of our own scene: a code-built layout with hills made as Gaea 2.3 terrains (Community edition, built headless), a Poly Haven CC0 HDRI sky, Poly Haven (CC0) rocks and dry grass, Quixel sand and cliff textures, and a robot on a Mixamo rig (Quixel and Mixamo are used in the renders only; no source files ship).