Texture workflow using ACES LUTs in non-ACES package

I have recently been using Substance Painter to create textures to be used in an ACES workflow, however Painter does not currently have ACES texture support - colour textures are exported as sRGB “gamma(~2.2)”. However, I am using ACES LUTs in the render view, to match what I will get when I bring the textures into the production renderer. Therefore, to get a match to my Painter viewport, I am exporting the textures, then linearising them in Nuke using the “gamma(~2.2)” transform, and then finally saving as ACEScg - kind of emulating an ACES workflow.

This workflow gives me a perfect match in the production renderer to what I’m seeing in the Painter viewport, and allows me to work with the exact same colour values as I would in an ACES package such as Mari, which is great as it means I can switch between the two packages seamlessly.

My question; is there anything wrong with doing this? I.e is there some caveat that I’m missing? So far I haven’t bumped into any issues but I am curious as I understand this is probably not the correct way to do things.

HI Shane, I have post a bit about Substance in this post if you want to dig a bit.

To answer your question, if you are happy with your workflow, I guess you can go on with it. Even if you should be aware of a couple of things (that you probably already know).

As you know, Substance does not support any OCIO and the suggested workflow currently is to use a display LUT simulating the ACES look.
What surprises me a bit with your workflow is that you manually convert to linear in Nuke but write it as an ACEScg file…
Have you tried to load your texture in your renderer with the IDT “Utility - sRGB - texture” ? It should do the same thing but avoid the manual conversion in Nuke…

My tuppence,

Thanks for your response Christophe.

Utility - sRGB - Texture is what I was using previously but due to the shift in primaries it was giving a significantly different look when rendered to what I was getting in the Painter viewport. I guess because I am kind of simulating the final ACES look in Painter with the LUT using linear values, so when I write out from Painter - where the only option is to apply the standard sRGB (~2.2), I have to reverse it to get the same look in the production renderer.

This gives me a pretty much perfect match. E.g I put in a linear value of (0.1, 0.2, 0.3), Utility - sRGB - Texture gives me (0.144, 0.195, 0.286) and looks totally different in the production renderer, sRGB (~2.2) gives me (0.1, 0.2, 0.3) and looks the same in both viewports.

Shane, as Christophe said, if your roundtrip test proves the color roundtrip works (I’d try with at least 4 different colours, not just one), then the workflow is probably good.

Unfortunately, as Substance Painter is not an ACES logo’ed product, it’s difficult to know what its embedded color transforms do (apart from whatever is in their description), so even guessing what would be the right ACES Input / Output Transforms to use in other products of your workflow is challening.

But usually a roundtrip test, as long as it’s accurate enough and throughout your complete workflow, is a very good indication that your pipeline is reliable.

Thanks Walter, I have tried with a bunch of colours/maps and it seems consistent - just wanted to make sure I wasn’t missing something.

Now to just sit and wait until they implement ACES…

Thanks guys for your answers. :wink: I am glad we could figure your workflow a bit.
Hopefully, OCIO should be part of Substance this year. Fingers crossed.
Out of curiosity, are you using this display LUT for Substance ?

No not that one, I created my own color profile using the identity LUT here:

Just ran this through an OCIODisplay node in Nuke with input colorspace set to ACEScg (because I’m faking an ACES workflow), display device sRGB, and the view transform as ACES (or Arri Alexa, depending on the project).

Cool. Thanks for the link !

I now realise I have over-complicated this - the transform I am doing on my Painter textures is Utility - sRGB - Texture to Utility - Linear - sRGB. I thought SRGB (~2.2) had a different curve but it doesn’t.

Going from Utility - sRGB - Texture to ACEScg as I was doing before was giving the wrong look, I suppose because I was treating the linear values I was using in Painter as if they were in scene-linear in an ACES workflow already, so just applying the transform to sRGB linear gives me the values I want to use in a true ACES workflow.

I hope this makes sense, I am still slowly trying to understand this stuff :slight_smile:

Cool. I am glad you could work these things out.