Difference between Virtual and Real Color Primaries

The reason for unreal primaries is that they are necessary in order to code all colours within the CIE “horseshoe” using only positive values. The AP0 primaries form the smallest possible triangle which contains all the real colours. This has the knock-on effect that a significant proportion of code values are “wasted” on unreal colours.

The AP1 primaries are a compromise which code most (not all – see other threads here on artefacts caused by negative values) colours likely to occur in images from real cameras using positive values. Because even the most saturated ACEScc/ACEScct/ACEScg colours are still real, this means that the maths of grading operations works in a way which “feels” better to colourists.

It may also be worth noting that the CIExy plot is not perceptually uniform, so the amount of green “left out” of ACEScg is not as significant as it might appear. A CIE u’v’ plot gives a different impression.

CIE plots generated using Colour Science for Python

3 Likes