Post Processing?Substance Painter Color Profile.

In this blog post, I’m going to talk about how to set up visualization uniformity for game engine between Substance Painter material results.

First of all, it is a very pity that the Substance Painter Workflow document has no mention at all.
Second, it is difficult to understand why Yesbis2, the external library of Substance Painter’s Post Processing, continues to exist.
It was written based on Unity’s Post Processing.
Looking at Unity’s Post Processing code, you can see that ACES 1.X is typically used or Piece-Wise Power Curve is used.
Imagine that the post processing part is still changing.
Aces 2.0 has recently been beta released, and the Piece-Wise Power Curve is referring to the contents of the ‘John Hable’.
In general, artists usually use the default values ​​when using Substance Painter.
If We use Arnold rendering or other rendering software for final image quality, Aces 2.0 is used recently, but game rendering is also very important.
If you look at the internal structure of ACES or similar Post Processing Tone-Mapping, you must recognize that ACES is being calculated after converting Linear Color Space to logC Color Space.
Rather than explaining this part in depth, we will check the inside of the Post Processing code and see how to accurately set up Tone-Mapping in Substance Painter.
Strictly, ACES should be processed as IDT in ACES format with Color Profile not sRGB.
For the latest version of Substance Designer, the Color Profile Encoding function for Albedo has already been applied.
It is also helpful to look at Unity’s Color.hlsl, ACES.hlsl and Common.hlsl.

Although mentioned in the UE4 official document, it is recommended to use ACES and perform screen calibration for White Point and Black Point if possible.
Use the other parts of Color Grading for the rest.

Let’s look at the code of the part that creating the LUT internally.
You can refer to well-organized documents for easy understanding.

The basic scene was set by using the basic environment settings of URP WITH DEFAULT ACES UNITY3D.

It should be noted that the AO operation structure of UPR is different from that of SP.

Let’s get removing of the Bloom effect.

All inactive except tone mapping.

Setting to Image based Lighting.

When setting up a scene in URP, use 100% image based lighting as the standard light source.
There is no directional lighting in SP.
The image based lighting material was referenced by ILM’s MaterialX project.
Later we will set up PBR Rendering and color space correction in Maya’s real-time Viewport 2.0.

Used Directional lighting in Unity3D.
Disabled Directional Lighting in Unity3D.

Typical SP settings except Input Transform conversion.


Input device transform(IDT) :This name was deprecated in version 1.0 and has been replaced by input conversion. The process of taking an image captured from the original material that can be collected and converting the content to ACES color space and encoding specifications. There are many IDTs that are unique to each class of capture equipment and appear to have been specified by the manufacturer using ACES guidelines. It is recommended to use a different IDT for tungsten versus daytime lighting conditions.

Input Transform : The current term name for Input Device Conversion (IDT) according to ACES version 1.0 or later.

First we’ll check.
Check out the result of removing Tone mapping in Unity3D.
In particular, remember the density changes in the glossy and dark areas and the color of the reflectors (green and orange).

Off of ACES

The color space is converted through ACES COLOR MATRIX, and LUT_HDR is finally generated in the post processing.

Substance painter post-processing settings.

You have to change two things in the settings.
Let’s change the Tone Mapping Function to Log.

The post-processing of the Substance painter uses external middleware. Unfortunately, it does not support ACES.
Therefore, when applying the color profile, let’s convert the log space.

ACEScc (ACES Color Correction Space): A color space definition slightly larger than the ITU Rec.2020 color space and log shipping properties for improved use within color correction and grading tools.

ACEScg (ACES Computer Graphics Space): A color space definition slightly larger than the ITU Rec.2020 color space, linearly encoded for improved use within computer graphics rendering and compositing tools.

Then, after activating the Active Color Profile, apply the prepared ACES LUT.
ACES LUT can be produced by simply creating a converter using the OPENCOLOR IO API.
Substance Painter provides the default sRGBf LUT file.
Convert this LUT to ACES LOG LUT.

You can find out these directory as sRGB Color profile lut.
C:\Program Files\Allegorithmic\Substance Painter\resources\shelf\allegorithmic\colorluts\Classic


Substance Painter sRGB Lut.

Converted sRGBf to ACES log Lut.

Additionally I recommend to read first How to creation to custom LUT using by OpenColorIO! simple command line here take a look seriously.

And Watching this video Christophe’s exiting video for custom LUT as Substance Painter like that.

Creating Color Profiles

Substance Painter will shift the viewport to Linear rendering when the “Activate Color Profile” is enabled. This means that when a LUT is applied, it needs to translate color from a Linear profile to the desired target.

Method 1 : Modifying the Identity LUT inside of Substance designer

Editing the identity LUT can be done in a software supporting 32bits floating textures, such as Substance Designer.
Download the attached identity LUT as a start point to make a new profile :  linear_to_linear.exr

Method 2 : Using OpenColorIO to generate a LUT Texture used ‘OpenColorIO’ API directly.(Recommending to use Linux operation system)

Need more help about installation of OpenColorIO inside Linux?
Reading here.

Install the OpenColor IO tools. Then download the Sample OCIO Configuration, available here :
From there, run the ociolutimage program with the following arguments :

I’ve setted name of Lut to Standard_Log.

Applied ACES standard log color profile.
Aces with Unity3D

Albedo’s color profile should also be entered as AcesCg, but the Color Profile option has not been added to the SP.

Substance Designer Color Profile through OpenColorIO API.
New version of Substance designer also integrated Color Profile.

When working with the final result in Substance designer, you can stick to the basic settings.

Substance designer cannot be applying Lut.

Aldedo can be output as ACES to ACEScg.

Piece-Wise Custom Curve LUT?

When working on a cartoon rendering project, we need a more sophisticated understanding of using ACES.
Or, rather than ACES, you need to create your own Tone mapping processing structure to suit your project needs.
For example, the GranTurismo project used their own output conversion (ODT + RRT).

Is the color of the cartoon rendering you are making intact in physically based rendering?
First we need to know that Albedo is not exactly a Diffuse.
Albedo doesn’t just define the color of the surface.
Because the material properties and diffuse are closely related, it is not necessary to perform LDR compression using HDR Tone-mapping, and it produces a look and other result required by the art director in PBS.

Should be read first Why they implementation to GT Tone-mapping system.

Anyway, let’s go back and assume that your team uses Piece-Wise Power Curve instead of ACES.
But I want to say. It is the latest URP this has been removed.

Unity3D Custom Tone Curve from Piece-Wise Power curve by John Hable.

But I am not make sure Maybe this method has deprecated recently version of URP like SRP 7.2.1

Compare color differences.

Custom tone Curve setup
Substance Painter Default setting.

Can you tell the difference between the two rendering results?
Obviously there is a difference.
Let’s look at the yellow part at the top left.

Creating your custom tone curve based LutHDR.

I create to custom lut for our desired lookdev used by photoshop curve function.
Result of creating and applying Piece Wise Tone Curve applied value as LUT.
Color difference is reduced.

Not yet SP Albedo is inaccurate.
SP is basically because there is no RRT + ODT process, and Unity’s post-processing is different because it processes RRT + ODT process in the final buffer internally.

ACEScg conversion process was added directly from SP.

The final color match is related to various values.
Now, I will explain in more detail what settings are used to match the final rendering values of the SP and the final rendering values of the game engine.

Adding AcesCg transform into Substance Painter Shader.

Related post

댓글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요: 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중