Hello all, I made a LUT to match UE5 in Substance Painter and I post it here as both use ACES and I saw people running into this viewport matching trouble, you can get it for free : here UE5 LUT for Substance Painter
No need for additional post-processing, you just put the exr as colorlut in Substance Painter !
I also wrote a Medium article about it that explains how to get to that resultat and that talks about colorspaces, gamma, exposure, etc… So that people can understand how it works and how to make their own LUTs.
Thank you @Thomas_Mansencal for the welcome and the resource !
I’m going to check in Substance the config you shared, it’s a shame most of the links especially the one for the UE engine are dead.
I tried with the LUT to make it easy for the users that want the current viewport of Unreal in Substance (more game-oriented than animation) and I know that using an OCIO config in Unreal would disable the tone curve that they currently use. Also I try to make all the modifications to be only on substance side so that UE is the “truth”.
EDIT : I found the link to the current repo that was private for UE source code so I can check now
The spaces I sent for OCIO should work, we are using them daily at work (a Display P3 variant to be exact), it is really the sRGB ODT with a gain. To get a good match in UE you would need to disable the Blue Highlight Fix and Expand Gamut “LMT”.
I couldn’t find the 1.45 gain and the thing is I didn’t find yet how the LUTs for the ACES sRGB ODT modify the colors to know if it matches
EDIT : But from what I see it just seems that it first maps the values between 0 and 1 and then transforms into sRGB but with no particular look transform
2nd EDIT : Turns out the gain has changed to 2.22 and I found it in the function “ACESOutputTransformsRGBD65”
3rd EDIT : I’m not sure but I think the gain is applied at the end since the functions returns sRGB and the input is ACES, the film tonemapper returns in ACES
Sorry to bother you with all this and thanks to have taken the time so far to answer
EDIT : To get the Blue correct, I would just need to apply this as a MatrixTransform inside the config and use the inverse after applying the tone curve
I guess Added Glow, Red modifier and Desaturate would be done by RRT ? (But I can’t find doc on the RRTs so I don’t know which one is the good one if there is a one)
Then it applies a piecewise power curve before desaturating again then it multiplies by 2.22 and turn the result to sRGB but this function is private. (Seems like there is a transfer function in this function because they say that’s why they do the 2.22 gain)
// chosen such that outputTransform(0.18 * Gain) / UE_ACES_SDR_Y_MAX = 0.18
The 1.45 exposure compensation gain is built into the tone curve parameters, it is not explicit but was added to the ACES reference before the tone curve was fitted so that to match a bit better the previous UE tonemapper.
The problem with the Blue Light Artifact Fix is that it is not correctly applied in Unreal Engine, so you won’t be able to emulate it with an ACES config. The Gamut Expansion is certainly doable.