Proper Texturing Workflow for Unreal Engine

Correct although for LDR (non-HDR) output it does not really matter as the LDR ODT is the same and you would need to grade specifically for HDR.

Also correct, UE4 working space is implicitly assumed to be sRGB.

Yes but it is not implemented as per the book and cannot be matched in a standard ACES worfklow. There is also a Gamut Expansion LMT in UE4, if you have UDN access, this is super relevant: https://udn.unrealengine.com/questions/543111/view.html

Correct, it is exactly 1.45.

No, for practical purposes, ACES 1.1 and ACES 1.0.3 are the same for the LDR path.

IDTs are technically for input devices, e.g. a camera and they convert from that input device to ACES2065-1 (AP0). UE4, internally converts directly from sRGB to ACEScg (AP1) as required for tonemapping purposes.

Yes, however, the conversion is more like sRGB —> ACES2065-1 —> RRT —> ODT.

No please don’t do that, it is a landmine field and it will throw you off a cliff one day or the other. I wish that thread was never referenced again.

We did that at some point but it is much easier to use a LUT, even one that clips highlights. Keep in mind OCIO is coming to Substance Painter and it will make all the three methods above obsolete.

Never! :slight_smile: By adopting a fixed View/Display Rendering Transfom (DRT), you ensure that all your assets are authored in a consistent way which makes them easy to share across shows/games. The other side of the coin is that if they are authored while respecting PBR common sense, they should look good no matter the DRT.

Ideally, you have everything under control and processed the photographic source images linearly, with reference colour rendition charts, etc… Now it is important to keep in mind that “base ground truth” is somehow vague: albedo in the first place is a measure bound to solar irradiance which encompasses both the diffuse and specular components of the reflection when it is measured. Textures are pretty much never shot in direct sunlight :wink: Ground truth would be more about spectrally measure not only the BTF (Bidirectional Texture Function) of the surface but also measure its Polarimetric Reflectance: a Spatially Varying Polarimetric BRDF (Bidirectional Reflectance Distribution Function). And then there is fluorescence, etc… :slight_smile:

ACES 1.1 will not change anything and we are at 1.2 btw :slight_smile: The easiest way, for now, is to use the following OCIO colourspaces and disable the Gamut Expansion and Blue Light Artifact Fix as indicated in the UDN Question:

   - !<ColorSpace>
     name: ACES sRGB ODT
     family: View
     equalitygroup: ""
     bitdepth: 32f
     isdata: false
     allocation: uniform
     allocationvars: [0, 1]
     to_reference: !<GroupTransform>
       children:
         - !<FileTransform> {src: InvRRT.sRGB.Log2_48_nits_Shaper.spi3d, interpolation: tetrahedral}
         - !<FileTransform> {src: Log2_48_nits_Shaper_to_linear.spi1d, interpolation: linear}
         - !<ColorSpaceTransform> {src: Colourspace - ACES 2065-1, dst: Model - Reference}
     from_reference: !<GroupTransform>
       children:
         - !<ColorSpaceTransform> {src: Model - Reference, dst: Colourspace - ACES 2065-1}
         - !<FileTransform> {src: Log2_48_nits_Shaper_to_linear.spi1d, interpolation: linear, direction: inverse}
         - !<FileTransform> {src: Log2_48_nits_Shaper.RRT.sRGB.spi3d, interpolation: tetrahedral}
 
   - !<ColorSpace>
     name: UE4
     family: View
     equalitygroup: ""
     bitdepth: 32f
     isdata: false
     allocation: uniform
     allocationvars: [0, 1]
     to_reference: !<GroupTransform>
       children:
         - !<ColorSpaceTransform> {src: ACES sRGB ODT, dst: Model - Reference}
         - !<CDLTransform> {slope: [1.45, 1.45, 1.45], direction: inverse}
     from_reference: !<GroupTransform>
       children:
         - !<CDLTransform> {slope: [1.45, 1.45, 1.45]}
         - !<ColorSpaceTransform> {src: Model - Reference, dst: ACES sRGB ODT}

Should use the ACES Config with that new ColorSpace and it will match UE4.

Cheers,

Thomas