Author Topic: Time to ditch sRGB/Linear as default (?)  (Read 39593 times)

2017-02-24, 16:41:14
Reply #75

Juraj Talcik

  • Active Users
  • **
  • Posts: 3763
  • Tinkering away
    • View Profile
    • studio website
What a discussion :- )

For anyone interested why the confused (and wrong) Blender video keeps mentioning "sRGB" as culprit instead of what actually is ( lack of tonemapping ), is that sRGB is both color space... and gamma encoded color space. sRGB curve roughly matches (like 99perc.) to gamma 2.2 curve.
So when in CGI sRGB is mentioned, it's usually just linear x 2.2 gamma multiply, our regular displayed viewport/framebuffer.

sRGB has of course nothing to do with tonemapping (it doesn't do any, it just applies gamma curve), or dynamic range at all.

sRGB is still shit, but because of its limited color gamut, it's old color space and 3dsMax is making users with quality display devices suffer because it lacks color management. But nothing to do with tonemapping or photorealism.


The implemented version of ACES in blender is imho not ideal, and I wouldn't consider it as ultimate solution as it relies on presets. Either full version of ACES filmic makes sense, like Unreal 4 did, but it's sadly quite complicated as it has lot of parameters that are not very intuitive for average person used to single highlight compression value. Although it can still keep default look.
The issue with presets is like Romullus write above...they are situational and already quite defined looks. Not starting point for any post-production.

But still I do agree with this thread, nice tonemapped look (but not post-processed) should be starting point in modern renderer. It's like .raw vs jpeg from DSLR, even .raw by default is interpreted as quite non-linear in most packages (although you totally can extract fully flat or linear look through dcraw), just lacking the agressive s-curve and HSL mods done by each manufacturer as their preferred tonal curve.

Some practical idea: Ditch the current filmic, it's just not working at all. It's very weirdly behaving, the shoulder is not very pleasing and the shadows are somehow oddly exposure dependent.
The current Reinhard could be improved a lot, it flattens the mids too much but worst it just washes the blacks away completely.

And let's fix the white balance first :- ) No one asked for tint to be additive overlay. Without it every image other than 6500K in Corona suffers from green or purple tint.
talcikdemovicova.com  Website and blog
be.net/jurajtalcik   Our studio Behance portfolio
Instagram   Our studio Instagram, managed by Veronika

2017-02-24, 17:04:30
Reply #76

hybaj

  • Active Users
  • **
  • Posts: 5
    • View Profile
Some practical idea: Ditch the current filmic, it's just not working at all. It's very weirdly behaving, the shoulder is not very pleasing and the shadows are somehow oddly exposure dependent.
So what should be the replacement?

My idea would be if you could basically modify all of the curves Photoshop style (by adding/subtracting points on the curve and adjusting the bezier handles)  that filmic uses for it's color voodoo + having the abbility to save this as LUT (when maybe playing around with colors in Davinci Resolve, Nuke or etc) or just some preset for later re-use.


2017-02-24, 17:09:41
Reply #77

romullus

  • Global Moderator
  • Active Users
  • ****
  • Posts: 6086
  • Let's move this topic, shall we?
    • View Profile
    • My Models
[..]

I thought it was a silver bullet :] Will use it with caution then.
All that colour stuff is way too complicated for me, i guess i'll stick to what's worked for me before :]
I'm not Corona Team member. Everything i say, is my personal opinion only.

2017-02-24, 17:47:21
Reply #78

pokoy

  • Active Users
  • **
  • Posts: 1446
    • View Profile
Ditch the current filmic, it's just not working at all.
I agree that Filmic highlights are weird and very unpleasant. Filmic Shadows, however, are great and really help, I'd miss them a lot as they manage to look way better than when using Contrast alone, there's really no alternative (yet).

2017-02-24, 20:58:47
Reply #79

DeadClown

  • Global Moderator
  • Active Users
  • ****
  • Posts: 1439
    • View Profile
    • racoon-artworks
more or less on topic: I've made an aces Filmic tonemapping tool for fusion in case someone wants to try it (and figure out what each of the 5 parameters does... I have no idea :D ).
Any sufficiently advanced bug is indistinguishable from a feature.

2017-02-25, 02:26:50
Reply #80

mraw

  • Active Users
  • **
  • Posts: 151
    • View Profile
..oh, that's sounds interesting. I would give it a try....

2017-02-25, 16:30:03
Reply #81

DeadClown

  • Global Moderator
  • Active Users
  • ****
  • Posts: 1439
    • View Profile
    • racoon-artworks
Here you go, just copy and paste it into your graph. Let me know what you think :) I used the function described here: http://forums.odforce.net/topic/25019-hable-and-aces-tonemapping/#comment-145839 . With some fooling around you can make it less contrasty but I used the values as described in the thread as default.

Code: [Select]
{
Tools = ordered() {
ACES_FilmicTonemapping = Custom {
CtrlWZoom = false,
NameSet = true,
CustomData = {
Settings = {
[1] = {
Tools = ordered() {
ACES_FilmicTonemapping = Custom {
Inputs = {
NameforNumber2 = Input { Value = "tB", },
LUTIn4 = Input {
SourceOp = "ACES_FilmicTonemappingLUTIn4",
Source = "Value",
},
ShowPoint2 = Input { Value = 0, },
ShowLUT1 = Input { Value = 0, },
ShowPoint1 = Input { Value = 0, },
RedExpression = Input { Value = " (c1*(n1*c1+n2) ) / (c1*(n3*c1+n4)+n5)", },
Image1 = Input {
SourceOp = "PipeRouter1",
Source = "Output",
},
LUTControls = Input { Value = 1, },
LUTIn2 = Input {
SourceOp = "ACES_FilmicTonemappingLUTIn2",
Source = "Value",
},
ShowNumber8 = Input { Value = 0, },
NumberIn1 = Input { Value = 2.51, },
ShowLUT3 = Input { Value = 0, },
ShowLUT2 = Input { Value = 0, },
NameforNumber1 = Input { Value = "tA", },
NumberControls = Input { Value = 1, },
LUTIn3 = Input {
SourceOp = "ACES_FilmicTonemappingLUTIn3",
Source = "Value",
},
NumberIn2 = Input { Value = 0.03, },
ShowNumber6 = Input { Value = 0, },
NumberIn4 = Input { Value = 0.59, },
NumberIn3 = Input { Value = 2.43, },
ShowPoint4 = Input { Value = 0, },
ShowLUT4 = Input { Value = 0, },
GreenExpression = Input { Value = " (c1*(n1*c1+n2) ) / (c1*(n3*c1+n4)+n5)", },
ShowPoint3 = Input { Value = 0, },
LUTIn1 = Input {
SourceOp = "ACES_FilmicTonemappingLUTIn1",
Source = "Value",
},
BlueExpression = Input { Value = " (c1*(n1*c1+n2) ) / (c1*(n3*c1+n4)+n5)", },
NameforNumber5 = Input { Value = "tE", },
NameforNumber4 = Input { Value = "tD", },
NameforNumber3 = Input { Value = "tC", },
ShowNumber7 = Input { Value = 0, },
NumberIn5 = Input { Value = 0.14, },
},
CtrlWZoom = false,
NameSet = true,
ViewInfo = OperatorInfo { Pos = { 1100, 412.5, }, },
CustomData = {
},
Name = "ACES_FilmicTonemapping",
},
ACES_FilmicTonemappingLUTIn1 = LUTBezier {
SplineColor = { Green = 0, Blue = 0, Red = 204, },
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333, }, Flags = { Linear = true, }, },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667, }, Flags = { Linear = true, }, },
},
},
NameSet = true,
Name = "ACES_FilmicTonemappingLUTIn1",
},
ACES_FilmicTonemappingLUTIn2 = LUTBezier {
SplineColor = { Green = 204, Blue = 0, Red = 0, },
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333, }, Flags = { Linear = true, }, },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667, }, Flags = { Linear = true, }, },
},
},
NameSet = true,
Name = "ACES_FilmicTonemappingLUTIn2",
},
ACES_FilmicTonemappingLUTIn3 = LUTBezier {
SplineColor = { Green = 0, Blue = 204, Red = 0, },
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333, }, Flags = { Linear = true, }, },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667, }, Flags = { Linear = true, }, },
},
},
NameSet = true,
Name = "ACES_FilmicTonemappingLUTIn3",
},
ACES_FilmicTonemappingLUTIn4 = LUTBezier {
SplineColor = { Green = 204, Blue = 204, Red = 204, },
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333, }, Flags = { Linear = true, }, },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667, }, Flags = { Linear = true, }, },
},
},
NameSet = true,
Name = "ACES_FilmicTonemappingLUTIn4",
},
},
},
},
},
Inputs = {
NumberIn1 = Input { Value = 2.51, },
NumberIn2 = Input { Value = 0.03, },
NumberIn3 = Input { Value = 2.43, },
NumberIn4 = Input { Value = 0.59, },
NumberIn5 = Input { Value = 0.14, },
LUTIn1 = Input {
SourceOp = "ACES_FilmicTonemappingLUTIn1",
Source = "Value",
},
LUTIn2 = Input {
SourceOp = "ACES_FilmicTonemappingLUTIn2",
Source = "Value",
},
LUTIn3 = Input {
SourceOp = "ACES_FilmicTonemappingLUTIn3",
Source = "Value",
},
LUTIn4 = Input {
SourceOp = "ACES_FilmicTonemappingLUTIn4",
Source = "Value",
},
RedExpression = Input { Value = " (c1*(n1*c1+n2) ) / (c1*(n3*c1+n4)+n5)", },
GreenExpression = Input { Value = " (c1*(n1*c1+n2) ) / (c1*(n3*c1+n4)+n5)", },
BlueExpression = Input { Value = " (c1*(n1*c1+n2) ) / (c1*(n3*c1+n4)+n5)", },
NumberControls = Input { Value = 1, },
NameforNumber1 = Input { Value = "tA", },
NameforNumber2 = Input { Value = "tB", },
NameforNumber3 = Input { Value = "tC", },
NameforNumber4 = Input { Value = "tD", },
NameforNumber5 = Input { Value = "tE", },
ShowNumber6 = Input { Value = 0, },
ShowNumber7 = Input { Value = 0, },
ShowNumber8 = Input { Value = 0, },
ShowPoint1 = Input { Value = 0, },
ShowPoint2 = Input { Value = 0, },
ShowPoint3 = Input { Value = 0, },
ShowPoint4 = Input { Value = 0, },
LUTControls = Input { Value = 1, },
ShowLUT1 = Input { Value = 0, },
ShowLUT2 = Input { Value = 0, },
ShowLUT3 = Input { Value = 0, },
ShowLUT4 = Input { Value = 0, },
},
ViewInfo = OperatorInfo { Pos = { 1100, 412.5, }, },
},
ACES_FilmicTonemappingLUTIn1 = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333, }, Flags = { Linear = true, }, },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667, }, Flags = { Linear = true, }, },
},
},
SplineColor = { Red = 204, Green = 0, Blue = 0, },
NameSet = true,
},
ACES_FilmicTonemappingLUTIn2 = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333, }, Flags = { Linear = true, }, },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667, }, Flags = { Linear = true, }, },
},
},
SplineColor = { Red = 0, Green = 204, Blue = 0, },
NameSet = true,
},
ACES_FilmicTonemappingLUTIn3 = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333, }, Flags = { Linear = true, }, },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667, }, Flags = { Linear = true, }, },
},
},
SplineColor = { Red = 0, Green = 0, Blue = 204, },
NameSet = true,
},
ACES_FilmicTonemappingLUTIn4 = LUTBezier {
KeyColorSplines = {
[0] = {
[0] = { 0, RH = { 0.333333333333333, 0.333333333333333, }, Flags = { Linear = true, }, },
[1] = { 1, LH = { 0.666666666666667, 0.666666666666667, }, Flags = { Linear = true, }, },
},
},
SplineColor = { Red = 204, Green = 204, Blue = 204, },
NameSet = true,
},
},
ActiveTool = "ACES_FilmicTonemapping",
}
Any sufficiently advanced bug is indistinguishable from a feature.

2017-02-26, 15:06:39
Reply #82

mraw

  • Active Users
  • **
  • Posts: 151
    • View Profile
Thanks a million for that. I'm very sorry if I gave the impression of being very familiar with tonemapping in general and specifically with the ACES-stuff.
But in a nutshell: The controls(tA,tB...) where can I read a description of what they do?

2017-02-27, 11:04:40
Reply #83

disoranno94

  • Active Users
  • **
  • Posts: 17
    • View Profile
Really great thread, thanks for sharing guys:)

2017-02-27, 13:49:20
Reply #84

Benjamin_F

  • Active Users
  • **
  • Posts: 50
    • View Profile

2017-02-27, 14:27:30
Reply #85

Juraj Talcik

  • Active Users
  • **
  • Posts: 3763
  • Tinkering away
    • View Profile
    • studio website
Here's how that can look on scene: (test done by Dubcat in fusion, macro by Deadclown, scene from my current project )

The default might not be ideal for every situation, but it is far superior solution even as base. It does not need to be ignored that the full solution (with 5 parameters) let's you tweak this look to your liking (like overall contrast, overall brightness, HL compression or black crush), but that might be too complicated for regular user.



None of these quite match the intended look which I attach as illustration, though the filmic gets very close to what I would use as base for post-production. It just gets perfect brightness and black levels.



« Last Edit: 2017-02-27, 14:37:44 by Juraj_Talcik »
talcikdemovicova.com  Website and blog
be.net/jurajtalcik   Our studio Behance portfolio
Instagram   Our studio Instagram, managed by Veronika

2017-02-27, 14:42:59
Reply #86

DeadClown

  • Global Moderator
  • Active Users
  • ****
  • Posts: 1439
    • View Profile
    • racoon-artworks
Thanks a million for that. I'm very sorry if I gave the impression of being very familiar with tonemapping in general and specifically with the ACES-stuff.
But in a nutshell: The controls(tA,tB...) where can I read a description of what they do?

As written above ;) ...
in case someone wants to try it (and figure out what each of the 5 parameters does... I have no idea :D ).

I haven't spent too much time trying it out myself though. Might give it a closer investigation. Maybe dubcat can shed some light on it? :)
Any sufficiently advanced bug is indistinguishable from a feature.

2017-02-27, 18:51:14
Reply #87

mferster

  • Active Users
  • **
  • Posts: 401
    • View Profile
Kinda related.  I've been done some tests comparing the curves controls in the 1.6 daily builds and seeing how it compares to a curves adjustment in after effects. I found some interesting results that may line up with some of the tone mapping issues brought up in this thread.

method breakdown:


1.) Rendered a simple image in linear format (no changes to tone mapping controls in vfb), exported it as a 32bit exr to be loaded into After effects.

2.) Next, I applied a curves adjustment in corona vfb to brighten the image , saved the curves .acv file

3.) Loaded up the 32 bit exr file in After Effects (Photoshop can't apply curves adjustments on 32 bit images, unlike compositing programs) applied the curve file saved from corona.

4.) saved both images from corona vfb and after effects with the same curve adjustment. (see attachments)

5.) When I compared the two images, I strongly preferred the output from after effects.

Things I noticed:

It seems like Corona is pushing highlights and shadows towards more middle values creating a more washed-out grey look.
(can be seen on the rear wall next to the opening & with the immediate shadows of the red box)

The reflected light from the box takes a hit in vibrancy and variation, as can be seen on the right wall and on the floor to the right of the box. Warm vibrant tones from the red box get flattened

I've attached the images for you guys to take a look and compare(I recommend opening them both in separate browser tabs so you can toggle back and forth easily). What do you guys think on how they look? Maybe I missed something in my process.

« Last Edit: 2017-02-27, 19:00:17 by mferster »

2017-02-27, 20:24:04
Reply #88

Fluss

  • Active Users
  • **
  • Posts: 437
    • View Profile
To me, the best option is to have the ability to save both raw (32 bits exr) and processed render in one go as i would like to save a raw version of my render, just in case. But it's not possible through network rendering and that sucks. It's absolutely a nonsense to clamp data as you have to rerender to retreive lost information. Can be usefull in tight deadlines as i'm pretty sure most of us does not have a renderfarm.

That said, this is a really interesting thread

It does not need to be ignored that the full solution (with 5 parameters) let's you tweak this look to your liking (like overall contrast, overall brightness, HL compression or black crush), but that might be too complicated for regular user.

As always, this is the cruel dilemma. I'd go for the complicated one. Make things easy and effective is great but some concept need to be assimilated to get full control. 5 controls won't kill anybody. But that's obviously a matter of personal taste.

2017-02-27, 23:02:49
Reply #89

agentdark45

  • Active Users
  • **
  • Posts: 479
    • View Profile
Here's how that can look on scene: (test done by Dubcat in fusion, macro by Deadclown, scene from my current project )

The default might not be ideal for every situation, but it is far superior solution even as base. It does not need to be ignored that the full solution (with 5 parameters) let's you tweak this look to your liking (like overall contrast, overall brightness, HL compression or black crush), but that might be too complicated for regular user.



None of these quite match the intended look which I attach as illustration, though the filmic gets very close to what I would use as base for post-production. It just gets perfect brightness and black levels.



Damn what a difference between the first two images. The first one suffers from the "murky greys" that I experience when using Corona's highlight compression and the 2nd has those nice ethereal highlights with controlled natural burnouts.

Is the 3rd image a post processed version of the linear image?
Vray who?