Definitions

# Digital compositing

Digital compositing is the process of digitally assembling multiple images to make a final image, typically for print, motion pictures or screen display. It is the evolution into the digital realm of optical film compositing.

## Mathematics

The basic operation used is known as 'alpha blending', where an opacity value, 'α' is used to control the proportions of two input pixel values that end up a single output pixel.

Consider three pixels;

• a foreground pixel, f
• a background pixel, b
• a composited pixel, c

and

• α, the opacity value of the foreground pixel. (α=1 for opaque foreground, α=0 for a completely transparent foreground). A monochrome raster image where the pixel values are to be interpreted as alpha values is known as a matte.

Then, considering all three colour channels, and assuming that the colour channels are expressed in a γ=1 colour space (that is to say, the measured values are proportional to light intensity), we have:

cr = α fr + (1 - α) br
cg = α fg + (1 - α) bg
cb = α fb + (1 - α) bb

Note that if the operations are performed in a colour space where γ is not equal to 1 then the operation will lead to non-linear effects which can potentially be seen as aliasing artifacts (or 'jaggies') along sharp edges in the matte. More generally, nonlinear compositing can have effects such as "halos" around composited objects, because the influence of the alpha channel is non-linear. It is possible for a compositing artist to compensate for the effects of compositing in non-linear space.

Performing alpha blending is an expensive operation if performed on an entire image or 3D scene. If this operation has to be done in real time video games there is an easy trick to boost performance.

cout = α fin + (1 - α) bin
cout = α fin + bin - α bin
cout = bin + α (fin - bin)

By simply rewriting the mathematical expression one can save 50% of the multiplications required.

### Algebraic properties

When many partially transparent layers need to be composited together, it is worthwhile to consider the algebraic properties of compositing operators used. Specifically, the associativity and commutativity determine when repeated calculation can or cannot be avoided.

Consider the case when we have four layers to blend to produce the final image: F=A*(B*(C*D)) where A, B, C, D are partially transparent image layers and "*" denotes a compositing operator (with the left layer on top of the right layer). If only layer C changes, we should find a way to avoid re-blending all of the layers when computing F. Without any special considerations, four full-image blends would need to occur. For compositing operators that are commutative, such as additive blending, it is safe to re-order the blending operations. In this case, we might compute T=A*(B*D) only once and simply blend T*C to produce F, a single operation. Unfortunately, most operators are not commutative. However, many are associative, suggesting it is safe to re-group operations without changing their order. In this case we may compute S=A*B once and save this result. To form F with an associative operator, we need only do two additional compositing operations to integrate the new layer C: F=S*(C*D). Note that this expression indicates compositing C with all of the layers below it in one step and then blending all of the layers on top of it with the previous result to produce the final image in the second step.

If all layers of an image change regularly but a large number of layer still need to be composited (such as in distributed rendering), the commutativity of a compositing operator can still be exploited to speed up computation through parallelism even when there is no gain from pre-computation. Again, consider the image F=A*(B*(C*D)). Each compositing operation in this expression depends on the next, leading to serial computation. However, commutativity can allow us to rewrite F=(A*B)*(C*D) where there are clearly two operations that do not depend on each other that may be executed in parallel. In general, we can build a tree of pair-wise compositing operations with a height that is logarithmic in the number of layers.

## Software

The most historically significant nonlinear compositing system was the Cineon, which operated in a logarithmic color space, which more closely mimics the natural light response of film emulsions (the Cineon system, made by Kodak, is no longer in production). Due to the limitations of processing speed and memory, compositing artists did not usually have the luxury of having the system make intermediate conversions to linear space for the compositing steps. Over time, the limitations have become much less significant, and now most compositing is done in a linear color space, even in cases where the source imagery is in a logarithmic color space.

Compositing often also includes scaling, retouching and colour correction of images.

### Node-based and layer-based compositing

There are two radically different digital compositing workflows: node-based compositing and layer-based compositing.

Node-based compositing represents an entire composite as a tree graph, linking media objects and effects in a procedural map, intuitively laying out the progression from source input to final output, and is in fact the way all compositing applications internally handle composites. This type of compositing interface allows great flexibility, including the ability to modify the parameters of an earlier image processing step "in context" (while viewing the final composite). Node-based compositing packages can often handle keyframing and time effects poorly, as their workflow does not stem directly from a timeline, as do layer-based compositing packages. An example of a node-based compositor is Apple Shake.

Layer-based compositing represents each media object in a composite as a separate layer within a timeline, each with its own time bounds, effects, and keyframes. All the layers are stacked, one above the next, in any desired order; and the bottom layer is rendered first, progressively moving upward until all layers have been rendered into the final composite. Layer-based compositing is very well suited for motion graphics and relatively simple compositing projects, but becomes awkward for more complex composites, often entailing a large number of layers as well as numerous "pre-composites" that together will produce the final composite. An example of a layer-based compositor is Adobe After Effects.