Tonemapping Order/Behaviour

Hi guys

Getting some funky results with various tonemapping combinations.

The effect of the Tone Curve operator appears to inverse depending on whether it’s above or below the ACES OT Operator.

We’ve been advised to keep ACES OT at the bottom, so let’s assume Tone Curve being above ACES OT is the correct way to go.

However, when I have it in that order, the settings appear to do the reverse of what I’d expect. i.e. changing Highlights to 1.0 makes the highlights duller. Changing them to -1.0 makes them brighter.

It’s also have a strange effect on the bright spots in the HDRI. The bright spots on the HDRI appear to adjust inversely to the bright walls.

So when I adjust the highlights to -1.0 the walls get bright, but the HDRI bright spots get dull. When I adjust the highlights to 1.0, the walls get dull but the HDRI bright spots get brighter.

In the attachment, the very bottom image is the one that appears to be working as I’d expect it to, but that has the tone curve placed below ACES OT.

Confused …

Hi,

I am unable to reproduce the 1st 2 behavior you have shown in your Image in which the sky and walls are getting affected inversely. I was able to reproduce 3rd and 4th. However, the correct way to use tone mapping is to use it above Aces OT. As per my investigation, when tone mapping was above aces OT and I set the highlight value to -1 then both Sky and bright wall highlights went dull and when I set the highlight value to 1, they were both boosted.

I have checked this with default settings, Corona Sun and sky, and using a day HDRI from Cosmos. In both ways, I got the same behavior.

Hmm I’m wondering now then if it’s related to the Curves bug I posted about. I’m pretty sure this scene originally had Curves in the Tonemapping stack which I’ve since deleted and assumed the stack was working fine again https://forum.corona-renderer.com/ VFB Slowdown

Could you try adding Curves in various combinations, doing some processes, renders, deleting curves and see if your Tonemapping stack still works as expected.

Maybe repeate the processes described in that thread, save a scene, continue working in it etc etc

ACES OT is tone mapping. No reason to do it twice.

Each to their own. Personally I find ACES OT too aggressive on the highlights. So I like to tweak to taste with the Tone Curve. Creative license and all …

Tone Curve in Corona isn’t really tonemapper, it’s mostly parametric Curve and somehow weirdly behaving, I played with it a bit and it’s just odd. Right now the whole stack is mostly a mishmash of modifiers working either in SDR or HDR with no designation. I personally avoid using Tone Curve completely. Or most modifiers in fact.

The reason while stacks in Lightroom/ACR or Unreal 5 work so well is because everything is hardcoded to work in intended space and order of operations. Tone Curve in Lightroom is automatically working in linear space when Raw File is opened, and just like regular curve when SDR file like jpeg is opened. Result is always what you expect there.

And while ACES OT in full-scale ACES Workflow is meant as output at the end of stack, the workflow requires everything to work that way (in HDR space). Whereas in Corona, ACES OT is just singular tonemapper modifier to be used however you want. And most of the combinations with other modifiers just don’t work…

Either way, I’m just trying to find out why, in that specific instance, it wasn’t working as ‘sold’. It wasn’t intended to start a debate about tonemapping :smiley:

Yeah sorry for the unintended tangent, not sure why I even wrote all that lol.

I actually wanted to write but somehow got lost, that imho the behavior is working as intended, it’s just visually it is “wrong”. It can’t account for what ACES OT will do afterwards, and ACES OT really doesn’t work with majority of current modifiers before it.
I had mentioned this quite a lot in chat with devs but correcting it would probably require rebuilding this pipeline without the legacy behavior and compatibility.

It’s all good. I strongly think the other thread I linked to has something to do with it. Especially if Avi wasn’t able to replicate it.

if highlights need to be adjusted do that with simple Curves operator before ACES OT.
Tone Curve op seems to be intended to be applied after tone mapping.
comparison of Tone Curve highlights -1 with ACES OT within 0-1 range:

This would correlate with the example I felt was working ‘as intended’, but as I say, I questioned it because I’ve seen the Corona devs mention multiple times in these forums that ACES OT should come last.

and my bad - in my first post I confused Tone Curve with Filmic which does exactly what is on the tin:

not necessarily as long as you keep in mind you are adjusting already adjusted colors. and last element in the stack is still before final view transform applied by CIE and not accessible through UI.

Yeah Tone Curve here is just name for parametric control of normal Curves, it’s just what Lightroom (and few other Raw editors) calls it.
The devs should perhaps just added those controls to normal Curves modifier and it would at least visually show what is it doing each time.

Sorry, I made a typo mistake, I meant Tone Curve not Mapping.

and @dj_buckley, I tried the repro steps as you posted but I still cannot repro the same behaviour as you are pointing out. Can you perhaps share your file with me and some repro steps so I can try that and see if that is happening with me.

Hopefully this is an easy way to explain what is going on and hopefully I got it right. :smiley:

first strip is RGB 0 to 1
second one is 0 to 100
third one is 0 to 500 000

If we only consider the ACES OT operator:

  1. When it’s disabled, you get a full HDR image. RGB values can exceed 1 and go super high.
  2. When it’s enabled, nothing can be brighter than RGB 1

If you move the Tone Curve (or pretty much any) operator above or below the ACES OT operator, you are basically applying the same operator to a different image.


Ok we get that bit, but which is the ‘correct’ way. Everything I read says keep ACES OT as the bottom of the stack. But in that particular scene my Tone Curve operator was behaving in complete opposite ways depending on whether it was above or below. Surely that’s not right despite them being different images.

Are all of the operators designed to be used above ACES OT in the stack?

I’ll reproduce it and send the scene.

Either way I strongly suspect it was the dodgy curves operator that screwed that scene up

I’ve just created a support ticket with a scene file attached.

And here’s a screen recording

to quickly visualise what operators do to colours use 32 bit gradient (0 - 2 float is probably enough to see the important parts) processed with CIE and displace modifier in 3ds max on a plane: