5. Understanding Gamut with ACES and Blender

Introduction

The topic gamut is becoming more and more important as new standards like UHD, Rec.2020 and HDR emerge. On the acquisition side digital cameras record in whatever camera “wide” gamut and displays can have or support a lot of different gamuts nowadays.

I found a very good and playful blog entry about the topic gamut here. It is a long but well written article. https://ciechanow.ski/color-spaces/

On this page I am going to focus on:

  • Blender and its new default render settings. (sRGB & Filmic)
  • Comparing the “old” render setting sRGB to ACEScg.
  • RGB values and what they mean in two gamuts.

Note: All the EXR renders are done in Blender 2.8Beta with Cycles , white balance and conversion to JPG in Nuke NON-Commercial and the Hamburg-Hafencity HDRI is from INFECTED.digital.

Preparation

A very high quality HDRI that is being used to light the scene in Blender.
The “calibrated” color charts for linear sRGB/Rec.709 and ACEScg. So no matter in which colorspace you render, the color chart looks the same can can be used to color balance the shot.

Different Tone Mapping methods and two gamuts

The following renderings are coming from the same Blender scene. The only thing that is different ist the tone mapping curve. In the ACES scene also happens a gamut mapping from ACEScg to Rec.709.

The sRGB & Filmic tone mapping curve (with optional Base Contrast) is the new default in Blender 2.8 Beta. It has a very soft highlight roll off, but the color chart patches are quite desaturated and the white patch is not looking white anymore. The Filmic tone mapping curve is not a standard and therefore not available in all tools or at least not easy accessible.

Note: Although the Filmic tone mapping curve is the new Default in Blender, from here on I will ignore this mode and focus on the standard sRGB/Rec.709 vs. ACEScg gamut.

Standard sRGB – a standard created for CRT monitors

The sRGB tone mapping curve is clipping at values of 1.0. Check the unnatural halo around the specular highlights. This is the Default Tone Mapping in Blender 2.79, Nuke, After Effects, Flame, Resolve and even DSLR cameras (JPG).

This is at least for me how I worked for the last 15 years. Add a highlight soft clip to avoid the burning highlights especially around the red and green spheres and the render looks “fine”.

Note for all the following images:

  • The text left-down in each image shows in which setup it was rendered and displayed.
  • “linear sRGB” is the standard gamut.
  • “sRGB” is the tone mapping curve.
  • “ACEScg” means it was rendered in the bigger ACEScg gamut.
  • “Rec.709” is the ACES RRT and ODT (tone and gamut mapping).

ACEScg – support for wide gamut and HDR

The ACEScg render viewed over the RRT & Rec.709 ODT is far more saturated in the red, green and blue objects. The color chart is calibrated to ACEScg, therefore it looks the same as in the other images.
A soft highlight roll off creates a lot better result on the specular highlights.

ACEScg has a lot bigger gamut than sRGB/Rec.709, but the RGB values were not converted from one gamut to the other. The values in ACEScg get mapped and compressed to fit into the gamut of sRGB/Rec.709, therefore the result is far more saturated.

A comparison diagram of Rec.709 (sRGB has the same primaries) and ACEScg gamut.

Additional note & new segment on the 21st of April `19:
With the help from ACES-Central (thanks to N. Shaw) I was able to plot RGB color values on a diagram that are outside the gamut boundary of Rec.709 but inside the bigger gamut of ACEScg.
But I was giving a hint that I have to clarify what I want to show with it.
For this I added for the two following diagrams Rec.2020 next to Rec.709 and ACEScg. Rec.2020 is the “upcoming” standard for UHD displays and an output referred colorspace (same as Rec.709) whereas ACEScg is a scene referred colorspace.

A plot of the RGB value [0.5, 0.03, 0.03] falls outside of the gamut of Rec.709 but is still inside the Rec.2020 gamut and the still slightly bigger working space ACEScg.
ACEScg is the working colorspace in Blender (or Foundry Nuke/Autodesk Flame/)when using ACES/OCIO.

Although I am working in the bigger colorspace of ACEScg now in Blender, I am not going to see these scene referred RGB values. What I am seeing are the colors after the RRT and (in my case Rec.709) ODT. So the output of the red color plot RGB value [0.5, 0.03, 0.03] viewed through the RRT&ODT will be inside the Rec.709 gamut.


Take a step back and compare the RGB values

The shader for the cubes and spheres have always the same RGB values in all the Blender scenes. 0.5/0.0/0.0 for the red objects, 0.0/0.5/0.0 for the green objects and 0.0/0.0/0.5 for the blue objects. The grey floor has a value of 0.5/0.5/0.5.

A simplified the scene without the spheres and the HDRI to light the scene. A standard sun is used instead.

This is the ACEScg scene rendered and viewed over the RRT&Rec.709 ODT.

A combination of both renders viewed in ACEScg over the RRT&Rec.709 ODT.

This is a combination of the ACEScg render and the linear sRGB/Rec.709 render imported and converted into ACEScg. From the split line up you can see how different the gamut between ACEScg and sRGB/Rec.709 is. Especially on the red, less on the green and very little on the blue.

Looking from two angles – same but different

Import sRGB/Rec.709 values into ACEScg:
The first image shows how much bigger the gamut of ACEScg is against sRGB/Rec.709. A sRGB value of 0.5 in red is only about 0.3 in ACEScg.

Import ACEScg values into sRGB/Rec.709:
The second image shows how intense the red value of 0.5 in ACEScg becomes when viewed in sRGB/Rec.709. The negative values show that the ACEScg values are out of gamut in sRGB/Rec.709.

Use converted RGB values to get the same “look” of standard RGB but in ACEScg.

ACEScg render – Shader Red = 0.5 / 0.0 / 0.0
ACEScg render – Shader Red = 0.307 / 0.035 / 0.010
Linear sRGB render imported into ACEScg – A shader red of 0.5 becomes 0.307.

Conclusion

Working in a wide gamut color space like ACEScg needs some attention when setting shader values, especially when you are used to work in linear sRGB/Rec.709 for years without even knowing it.