Tutorial: OCIO & 3D LUTs - Applying 3D LUTs when using OCIO

OpenColorIO (OCIO) color profiles can be used to transform the color space of any Texture or Composure Element directly within the Unreal Engine. This can help you keep the colors of your video and computer generated elements consistent from initial capture, through compositing, to final output.

Depending on the version of Unreal you are using, this plugin option should be on automatically.

We will be exploring OCIO usage as well as how to create a 3D LUT.

https://dev.epicgames.com/community/learning/tutorials/34xz/unreal-engine-ocio-3d-luts-applying-3d-luts-when-using-ocio

I am using UE5.2’s ACES color space for animation film production. I tried your solution and found it to be very effective. But if the movie render queue is used for sequence rendering, there is a problem. For example, if I use MRQ to render the EXR format of the ACES color space, I find that some parts of the character have strange color changes. And if I use MRQ to render the PNG format of the sRGB color space, the color display is exactly the same as in the viewport. may I know what is the reason? If using your solution, is there any setting I need to adjust if I want to render to EXR format in ACES color space?

Hi hefeihong,

The difference in color you are seeing when rendering out an EXR vs PNG is likely due to the Tone Curve.

I recommend taking a look at the following to get a better understainding of what you need to do for an ACES color pipeline when rendering out of the engine:

Thank you very much for providing the tutorial. Let me give it a try first

When create a LUT (3D LUT) in Nuke or DaVinci Resolve and use it in Unreal Engine, the two results are different.
OCIO Display is in use and changed from Linear-sRGB to Output-sRGB.
What’s the reason?

I want to match the two viewports, is there anything missing?

Hi sw.sho,

It is difficult to say what is at issue without having a little more information of your setup. Are you using the default working color space? Are you disabling the tone mapper, blue correction and expand gamut in a PostProcessVolume? What is the output display/monitor you are viewing on (sRGB, HDR, etc.?).

If you want to upload your 3DLut, and I can take a look on my end.

Thank you for your answer.
I’m sorry I didn’t tell you the detailed settings.

Unreal Engine 5.2.1
Working Color Space : Default (sRGB/rec.709)
PostProcess Volume : Blue Correction 0 / Expand Gamut 0 / Tone Curve Amount 0
OCIO Display : Utility - Linear - sRGB / Output - sRGB

and
Movie Redner Queue
Color Output : Utility - Linear - sRGB / ACES - ACEScg

I’m working on the project settings as above.
I want to make the Unreal Engine viewport the same as the screen, color Graded on Nuke or DaVinci Resolve.

Is there a node that needs to be set up separately from the project setup in Nuke?

Thanks sw.sho,

Thanks for the info. On the Nuke/DaVinci Resolve side you will also need to apply an OCIO Display lut as well.

You can grab the latest ACES OpenColorIO configs from the link below:

In the Nuke preferences there is a Color Management section. Point it to the config.ocio file and press the “Reload Config” button.

https://learn.foundry.com/nuke/content/comp_environment/configuring_nuke/using_ocio_config_files.html

You should get something like this:

Then you can select a display lut in the viewport:

In Nuke, generally you want to do your normal comp operations in linear float space - ACEScg is generally fine for this.

However, some compositing operations (log space, etc.) may require conversion to ACEScc or ACEScct colorspace to get better grading control. ACEScc is a pure log function, but ACEScct has a “toe” near black , to simulate the minimum density of photographic negative film, and the legacy DPX or Cineon log curve. This can be done with OCIOLookTransform a pair of nodes.

For the final output out of Nuke, you will need to decide what the final output lut will be. Common ones are ACES 2065-1 ( archival and interchange), ACEScg or sRGB depending upon your delivery specs. You can specify the delivery output LUT directly in Nuke’s Write nodes with the “output transform”

Hi, I’m using this workflow as well and everything is translating correctly into Resolve, but its not including the separate LUT on my camera. It comes out identical to what my editor looks like with it turned off. Any ideas??

Hi Michael,
Really appreciate your series of turorial about OCIO in unreal.
That helps a lot.

Now I am trying the unreal to nuke workflow. I generated 3D Luts in nuke, but once I apply it in unreal through the method you introduced, I found the result was different between nuke and unreal viewport.

The most obvious problem was that in nuke I can saw the highlight was compressed naturally, which was totally over-exposed in unreal.

I also did a simple test. If I just apply the original 3D lut file( created by the expression you provided,), the result would keep same. However, if I added a Grade node and set the multiply to 2 in nuke. Then generate lut. The result in unreal would be totally different if I apply the 3D lut.

Could you pls help me with that?

Probably quite a noobish question but it seems a lot of your articles tackle MRQ outputs or ACES workflows that are not using the default Rec709 settings and are more for cinematic/movie production than games?

What I am trying to do is to just grade in DaVinci and then export the cube files into Unreal for a game I am working on. Would something like this be possible with those workflows?

I guess the struggle will always be if the final output is supposed to be in SDR or HDR?

Hello

I am trying to get my bearings in color space land in UE 5.5 and have been following all the various color tutorials and documents but it seems like things have fallen off over the last year in terms of updated best practices. My primary issue is that I am exploring whether to use a working space of the default rec709 or acescg and then alllow for custom creative grading LUTs via the technique described in the tutorial at the top of this topic ( https://dev.epicgames.com/community/learning/tutorials/34xz/unreal-engine-ocio-3d-luts-applying-3d-color-grading-luts-when-using-ocio )

It has been difficult to find a proper way to create this source volume texture ( i have created what i believe is a proper “identity” LUT image and then applied grading in davinci, gotten a cube file and applied the cube transform in touchdesigner to generate the new lut image exr but my viewports are wildly different right now between resolve and ue, though they match when i turn off that extra “creative” grade). So i assume my incoming volume texture is somehow at fault, or the post process material nodes are out of date since that tutorial.

I’m curious if anyone can point to an updated workflow for this including a good way to generate a proper 33x33x33 volume texture based on a custom creative grade that can be looked up by the post process material as described in the tutorial while still utilizing overall OCIO colorspace tools for final rendering.

Many thanks
P