Hi folks,
I’m a graphics engineer learning about ACES for the first time. I’ve started working on an Unreal project, after they moved to the ACES tonemapper.
When we started developing a look for our game, we found that the textures we were creating in Substance Painter seemed ‘washed out’ when we brought them into Unreal. Specifically, certain yellow and grey hues ended up near the same, and saturation as a whole seemed decreased. After setting up a matching HDRI scene in Unreal and a bit of digging, we found that this was due to the ACES tonemapping step; Post Tonemap HDR Color (which seems to actually skip the actual tonemap) matched the look in Substance, but the final image did not.
We then found https://share.substance3d.com/libraries/4450 to match substance to Unreal, though upon closer inspection it looks to be using the simplified fit from: https://knarkowicz.wordpress.com/2016/01/06/aces-filmic-tone-mapping-curve/ which doesn’t include some of UE4’s tweaks. It’s close enough that we were able to start getting consistent looks between Substance and Unreal. I’ve since stumbled across https://www.artstation.com/artwork/mrqd8 from @bleleux and https://www.artstation.com/artwork/2xkEbY from @Dogway.
My concern is that we may be texturing to meet UE’s default tonemapping and then find later on if we adjust it or as we color grade that we find our values are off. I’ve read through https://chrisbrejon.com/cg-cinematography/chapter-1-5-academy-color-encoding-system-aces/ and am familiar with Seb Lagarde’s albedo charts which give a good general guideline for base colour. First I have some assumptions I want to validate:
- UE4 uses ACES 1.0.3 and not 1.1?
- UE4 uses sRGB linear (given you’re feeding it sRGB colour) throughout the pipeline up to the tonemapping step, at which point it uses RRT -> ODT to output the final tonemapped image?
- At this point, it seems prohibitive to move all textures to be pre-converted to ACEScg
- UE4 has a fix for blue intensity applied to ACES similar to High light fix and premature desaturate?
- The other tweak is a gain of ~1.4, which I believe I read was to limit the amount of texture rework and still use sRGB.
- My understanding is that actually ends up having an effect similar to increasing exposure
- As intensity increases, the ACES tonemapper ends up desaturating colours
- ACES 1.1 solves some of the hue shifts issues from ACES 1.0.3 (possibly removing the blue fix in Unreal)
And now my questions:
- Why is the ACES tonemap applied on linear sRGB instead of using an IDT to transform from sRGB -> ACEScg? Or is there an IDT applied there and I missed it?
- From Substance to Unreal, which is the more ‘correct’ workflow?
- No changes to materials, and using @bleleux’s ACES LUT?
- Is it correct to say that this has baked the entire IDT -> ACES -> RRT -> ODT transform into one lookup?
-
@Dogway’s filters + LUT, where for display in Substance both the PBR_SmartFit and ACEScg conversion are applied
- For export since we’re still using sRGB in Unreal, we would export the result from the PBR_SmartFit filter?
- The discussion on @Dogway’s posts and @Thomas_Mansencal’s responses seems to indicate there’s disagreement over the usage of PBR_SmartFit to remap albedo colours?
- The ACES per material shader we found (but possibly expanded to include UE4’s tweaks to ACES)?
- No changes to materials, and using @bleleux’s ACES LUT?
- When should we (or do you) adjust the tonemapping curve to ensure our textures are supporting the result we want?
- How do you help ensure your albedo textures are ‘base truth’ and not compensating for the tonemap apart from having a physically based reference for all material types?
- Of course the albedo charts help here
- How do you help ensure your albedo textures are ‘base truth’ and not compensating for the tonemap apart from having a physically based reference for all material types?
- Are we shooting ourselves in the foot matching to UE’s implementation of ACES tonemapping with its tweaks, particularly the gain? Would we be better served by replacing it with ACES 1.1 and then using the adjustments provided by Unreal (i.e. global, highlights, shadows settings)?
And for anyone else who ends up coming across this thread and wants more reading:
- https://developer.nvidia.com/sites/default/files/akamai/gameworks/hdr/UHDColorForGames.pdf
- New filters for rendering ACES in Substance Painter
- https://www.slideshare.net/DICEStudio/high-dynamic-range-color-grading-and-display-in-frostbite - pre-ACES, but still useful to help understand hue shift
- http://c0de517e.blogspot.com/2017/02/tonemapping-on-hdr-displays-aces-to.html
- https://32ipi028l5q82yhj72224m8j-wpengine.netdna-ssl.com/wp-content/uploads/2016/03/GdcVdrLottes.pdf