Color Management Improvements #68926

Open
opened 2019-08-20 21:39:51 +02:00 by Dalai Felinto · 162 comments

Original source: https://wiki.blender.org/wiki/Source/Render/ColorManagement

Blender integrates OpenColorIO, but still misses some functionality to make it fully possible to use for example the ACES configuration.

Shader Nodes

Cycles and Eevee shader nodes need to support arbitrary working color space:

  • Blackbody
  • Wavelength
  • Sky Texture
  • OSL

Color Picker

  • The HSV colors should always be linear rather than display space, the current relation with RGB is confusing. The hex value can remain sRGB. (#69562)

Compositing & Output

  • Render file output and file saving needs to have a configurable color space to write to. By default it would use the scene display and view transform. This should then be changed to a color space, or a display + view transform + look. (D14402)
  • Compositor node output nodes also needs a configurable color space, and option to use view transform or not. (#83842) (D14402)
  • The compositor should get a compositor node to convert between two color spaces defined in the OpenColorIO configuration. (6beaa29791)
  • Control over color space in image saving (5baa3ec)

OpenColorIO Config

  • Add latest ACES RTT view transform the existing config
  • Add new ACES config based on https://github.com/AcademySoftwareFoundation/OpenColorIO-Config-ACES
  • Add UI option to switch between configs easily
  • Convert between .blend files saved with a different config
    • Save information about scene linear color space in .blend
    • Auto convert all colors on link/append
    • Option to convert when loading .blend with different config than it was saved as
  • Python API to convert scene linear to/from Rec709, ACES, ACEScg for add-ons (D14989)

Display

  • Support <USE_DISPLAY_NAME>
  • Support using ICC profile associated with system monitors.
  • Support 10 bit wide gamut monitors, Blender drawing code needs to be improved to output 10 bit instead of 8 bit when displaying the 3D viewport and images/renders.
  • Support more displays like Apple P3 and native display transform from the OS. Could be done using the new built-in transforms in 2.0.

UI

  • Support menu categories for long lists of color space
  • Rename "Save As Render" option to something better

*File I/O

  • Save images with color profile matching display (#112345)
Original source: https://wiki.blender.org/wiki/Source/Render/ColorManagement Blender integrates OpenColorIO, but still misses some functionality to make it fully possible to use for example the ACES configuration. **Shader Nodes** Cycles and Eevee shader nodes need to support arbitrary working color space: - [x] Blackbody - [x] Wavelength - [x] Sky Texture - [ ] OSL **Color Picker** - [x] The HSV colors should always be linear rather than display space, the current relation with RGB is confusing. The hex value can remain sRGB. (#69562) **Compositing & Output** - [x] Render file output and file saving needs to have a configurable color space to write to. By default it would use the scene display and view transform. This should then be changed to a color space, or a display + view transform + look. ([D14402](https://archive.blender.org/developer/D14402)) - [x] Compositor node output nodes also needs a configurable color space, and option to use view transform or not. (#83842) ([D14402](https://archive.blender.org/developer/D14402)) - [x] The compositor should get a compositor node to convert between two color spaces defined in the OpenColorIO configuration. (6beaa29791) - [x] Control over color space in image saving (5baa3ec) **OpenColorIO Config** - [ ] Add latest ACES RTT view transform the existing config - [ ] Add new ACES config based on https://github.com/AcademySoftwareFoundation/OpenColorIO-Config-ACES - [ ] Add UI option to switch between configs easily - [ ] Convert between .blend files saved with a different config - [ ] Save information about scene linear color space in .blend - [ ] Auto convert all colors on link/append - [ ] Option to convert when loading .blend with different config than it was saved as - [x] Python API to convert scene linear to/from Rec709, ACES, ACEScg for add-ons ([D14989](https://archive.blender.org/developer/D14989)) **Display** - [x] Support `<USE_DISPLAY_NAME>` - [ ] Support using ICC profile associated with system monitors. - [ ] Support 10 bit wide gamut monitors, Blender drawing code needs to be improved to output 10 bit instead of 8 bit when displaying the 3D viewport and images/renders. - [ ] Support more displays like Apple [P3](https://archive.blender.org/developer/P3.txt) and native display transform from the OS. Could be done using the new built-in transforms in 2.0. **UI** - [ ] Support menu categories for long lists of color space - [ ] Rename "Save As Render" option to something better **File I/O* * [ ] Save images with color profile matching display (#112345)
Author
Owner

Added subscriber: @dfelinto

Added subscriber: @dfelinto

#96421 was marked as duplicate of this issue

#96421 was marked as duplicate of this issue

Added subscriber: @MaciejJutrzenka

Added subscriber: @MaciejJutrzenka
Member

Added subscribers: @frameshift, @Mets

Added subscribers: @frameshift, @Mets
Member

I think @frameshift will appreciate this.

I think @frameshift will appreciate this.

Added subscribers: @Jeroen-Bakker, @troy_s, @brecht

Added subscribers: @Jeroen-Bakker, @troy_s, @brecht

Great to see that the wiki document made it into a task. I would like to suggest this task to be made a parent task of all other open tasks regarding the subject. It's great that this task is finally here - it would be even better if we make it an overview of everything else - stuff like #46860, #34684, #68242, #67832, etc. Then at least we have a bird's eye view on the scope of what needs to be done.

If I can share some input, I've been doing some research over the past few months, about the state of things in Blender and how other software generally tackles the subject. The following is a result of that + feedback from @troy_s and @brecht.

Input / Output

OpenEXR reading and writing should use chromaticity metadata to determine the color space of the image, and convert it to and from the working color space.

I would suggest a different approach. Other software generally uses a set of input rules for the user to determine, but with default settings originating in the roles determined in the OCIO config. I've been taking a look with @Jeroen-Bakker at how Blender reads those roles, and there's still a bit of hardcoding there.

Render file output and file saving needs to have a configurable color space to write to.

Maybe this is the right spot to finally get rid of the confusing View as Render flag, and expand the Save as Render checkbox to the more granular UI that users actually need.

This includes leaving the Display out of the file encoding. See #58805.

I've been thinking about an improved UI to expose all this to the artist. Generally, it's essential for the Color Management properties panel to be subdivided into Output and View panels. The following is heavily inspired by Maya and Nuke, and again, with defaults set by the Roles in the OCIO config.

cm.png

Display

Add support for the latest ACES view transform, the current one is outdated. To add support for ACEScg as working space out of the box, a second configuration would need to be added that can be chosen per project. Such a configuration requires materials and lights to be set up with different values, and so is not compatible with most existing .blend files. Projects using such a configuration need to use it from the start so all assets can be created to work with it.

The ACES view transform was designed for the ACES ecosystem, and it shouldn't be used in a differently managed workflow. It's like throwing Filmic on an Adobe RGB image.
To be honest, ACES itself is outside the scope of Blender's responsibility. What the software is responsible for, is allowing any OCIO config, including ACES, to be used as intended.

Color management on UI controls

Troy posted an article on the old wiki about a problem with curves. The general issue is that every context requires a different transform on the UI to make sure the linear data we are manipulating is mapped correctly. For example sRGB for albedos (display linear energy), Filmic for renders (if that’s the transform we view them through), Z-depth (linear from some range to another) etc. It needs to be selectable by the user.

ASC-CDL, for example, can work on linear and log, but the UI responds totally differently depending on the encoding. Slope on scene linear data is exposure. Slope on log encoded data is a power function. Offset on log is a multiply, hence exposure.

I suppose this is the right spot to mention that in a colour picker when using the ACES config, the RGB sliders are the only reliable way to pick your colour. Both HSV and the colour wheel make the coordinates go bananas.

Compositor

What I'm aware of:

  • Remove all Adobe PDF blending modes from the Mix node - or adapt them to scene referred data, similar to Nuke. This also goes for the MixRGB node in Cycles/Eevee shaders.
  • Remove Lift/Gamma/Gain from the Color Balance node. It simply has no use in a linear workflow, which is what a compositing package should employ anyway.
  • More Color Balance node fixes:
    • Fix the order of the ASC-CDL controls (Slope, Offset, Power).
    • Allow for negative values in the Offset control.
    • Add an optional pivot point to permit say, contrast (power) around a particular value without moving it.

The compositor should get a compositor node to convert between two color spaces defined in the OpenColorIO configuration.

Yes. This.

Great to see that the wiki document made it into a task. I would like to suggest this task to be made a parent task of all other open tasks regarding the subject. It's great that this task is finally here - it would be even better if we make it an overview of everything else - stuff like #46860, #34684, #68242, #67832, etc. Then at least we have a bird's eye view on the scope of what needs to be done. If I can share some input, I've been doing some research over the past few months, about the state of things in Blender and how other software generally tackles the subject. The following is a result of that + feedback from @troy_s and @brecht. **Input / Output** > OpenEXR reading and writing should use chromaticity metadata to determine the color space of the image, and convert it to and from the working color space. I would suggest a different approach. Other software generally uses a set of input rules for the user to determine, but with default settings originating in the roles determined in the OCIO config. I've been taking a look with @Jeroen-Bakker at how Blender reads those roles, and there's still a bit of hardcoding there. > Render file output and file saving needs to have a configurable color space to write to. Maybe this is the right spot to finally get rid of the confusing View as Render flag, and expand the Save as Render checkbox to the more granular UI that users actually need. This includes leaving the Display out of the file encoding. See #58805. I've been thinking about an improved UI to expose all this to the artist. Generally, it's essential for the Color Management properties panel to be subdivided into Output and View panels. The following is heavily inspired by Maya and Nuke, and again, with defaults set by the Roles in the OCIO config. ![cm.png](https://archive.blender.org/developer/F7681694/cm.png) **Display** > Add support for the latest ACES view transform, the current one is outdated. To add support for ACEScg as working space out of the box, a second configuration would need to be added that can be chosen per project. Such a configuration requires materials and lights to be set up with different values, and so is not compatible with most existing .blend files. Projects using such a configuration need to use it from the start so all assets can be created to work with it. The ACES view transform was designed for the ACES ecosystem, and it shouldn't be used in a differently managed workflow. It's like throwing Filmic on an Adobe RGB image. To be honest, ACES itself is outside the scope of Blender's responsibility. What the software **is** responsible for, is *allowing* any OCIO config, including ACES, to be used as intended. **Color management on UI controls** [Troy posted an article on the old wiki ](https://archive.blender.org/wiki/index.php/User:Sobotka/Color_Management/Bent_Curves/) about a problem with curves. The general issue is that every context requires a different transform on the UI to make sure the linear data we are manipulating is mapped correctly. For example sRGB for albedos (display linear energy), Filmic for renders (if that’s the transform we view them through), Z-depth (linear from some range to another) etc. It needs to be selectable by the user. ASC-CDL, for example, can work on linear and log, but the UI responds totally differently depending on the encoding. Slope on scene linear data is exposure. Slope on log encoded data is a power function. Offset on log is a multiply, hence exposure. I suppose this is the right spot to mention that in a colour picker when using the ACES config, the RGB sliders are the only reliable way to pick your colour. Both HSV and the colour wheel make the coordinates go bananas. **Compositor** What I'm aware of: - Remove all Adobe PDF blending modes from the Mix node - or adapt them to scene referred data, similar to Nuke. This also goes for the MixRGB node in Cycles/Eevee shaders. - Remove Lift/Gamma/Gain from the Color Balance node. It simply has no use in a linear workflow, which is what a compositing package should employ anyway. - More Color Balance node fixes: - Fix the order of the ASC-CDL controls (Slope, Offset, Power). - Allow for negative values in the Offset control. - Add an optional pivot point to permit say, contrast (power) around a particular value without moving it. > The compositor should get a compositor node to convert between two color spaces defined in the OpenColorIO configuration. Yes. This.

OpenEXR reading and writing should use chromaticity metadata to determine the color space of the image, and convert it to and from the working color space.

Rarely present if ever. Would need to remain configurable per buffer.

The compositor should get a compositor node to convert between two color spaces defined in the OpenColorIO configuration.

Immensely useful immediately.

Add support for the latest ACES view transform, the current one is outdated.

Bad idea. ACES is ACES and should remain an external configuration. Doing so would be a mountain of work and confuse everyone into thinking “they are doing ACES” as we have seen in the past.

To add support for ACEScg as working space out of the box, a second configuration would need to be added that can be chosen per project.

See above. Woefully bad idea.

To support 10 bit wide gamut monitors, Blender drawing code needs to be improved to output 10 bit instead of 8 bit when displaying the 3D viewport and images/renders.

Beneficial to all Apple hardware as well as the climb towards HDR10 / Dolby Vision. Minimum should be 12 bit, downgraded as required. Dolby Vision is a 12 bit representation.

Maybe this is the right spot to finally get rid of the confusing View as Render flag, and expand the Save as Render checkbox to the more granular UI that users actually need.

+?

Other than that, most of Sam’s comment is pretty spot on.

I would add that for the “exports” it is critical, and an “Advanced” makes sense here so, for example, you could render out entire shots subject to a particular look, and change the look for another shot. That is, think a stackable series of transforms ala the Texture stack. Simple to implement, and powerful. With a sane default as per Sam’s offering.

Regarding UI, that’s a huge one. Given software cannot know what a pixel pusher is trying to achieve, it is a fundamentally impossible task to properly display the arbitrary data. Is it an alpha? An albedo? A scene referred emission? A normal? A depth? Each of those would require potentially different transforms applied for interacting with the data, as well as unique display approaches via views etc.

Sam’s comment about fundamental ground truth assumptions for data is also prudent. That is, by default, the sane output of a path tracing engine such as Cycles should be assumed for all nodes. Display referred manipulations are fine, but they must not be the default. Same as with alpha encoding state.

Grease Pencil needs therapy. Also it would help if garbage unmanaged code from other sloppy crap software ceased being blindly grafted onto Blender. See D3638.

>OpenEXR reading and writing should use chromaticity metadata to determine the color space of the image, and convert it to and from the working color space. Rarely present if ever. Would need to remain configurable per buffer. > The compositor should get a compositor node to convert between two color spaces defined in the OpenColorIO configuration. Immensely useful immediately. >Add support for the latest ACES view transform, the current one is outdated. Bad idea. ACES is ACES and should remain an external configuration. Doing so would be a mountain of work and confuse everyone into thinking “they are doing ACES” as we have seen in the past. >To add support for ACEScg as working space out of the box, a second configuration would need to be added that can be chosen per project. See above. Woefully bad idea. >To support 10 bit wide gamut monitors, Blender drawing code needs to be improved to output 10 bit instead of 8 bit when displaying the 3D viewport and images/renders. Beneficial to all Apple hardware as well as the climb towards HDR10 / Dolby Vision. Minimum should be 12 bit, downgraded as required. Dolby Vision is a 12 bit representation. >Maybe this is the right spot to finally get rid of the confusing View as Render flag, and expand the Save as Render checkbox to the more granular UI that users actually need. +? Other than that, most of Sam’s comment is pretty spot on. I would add that for the “exports” it is critical, and an “Advanced” makes sense here so, for example, you could render out entire shots subject to a particular look, and change the look for another shot. That is, think a stackable series of transforms ala the Texture stack. Simple to implement, and powerful. With a sane default as per Sam’s offering. Regarding UI, that’s a huge one. Given software cannot know what a pixel pusher is trying to achieve, it is a fundamentally impossible task to properly display the arbitrary data. Is it an alpha? An albedo? A scene referred emission? A normal? A depth? Each of those would require potentially different transforms applied for interacting with the data, as well as unique display approaches via views etc. Sam’s comment about fundamental ground truth assumptions for data is also prudent. That is, by default, the sane output of a path tracing engine such as Cycles should be assumed for all nodes. Display referred manipulations are fine, but they *must not* be the default. Same as with alpha encoding state. Grease Pencil needs therapy. Also it would help if garbage unmanaged code from other sloppy crap software ceased being blindly grafted onto Blender. See [D3638](https://archive.blender.org/developer/D3638).
Member

Added subscriber: @lichtwerk

Added subscriber: @lichtwerk

Added subscriber: @item412

Added subscriber: @item412

Found a few more related tasks that might be worth listing here.
Some of them are quite old, but the fact that they are still marked as open, at least warrants a check for whether they should be. Especially the ones containing lengthy discussions that I'm not sure how valid they are today.

Found a few more related tasks that might be worth listing here. Some of them are quite old, but the fact that they are still marked as open, at least warrants a check for whether they should be. Especially the ones containing lengthy discussions that I'm not sure how valid they are today. - #68239 - #66682 - #56703 - #62375 - #64437 - #66645 - #54697 - #51231 - #55422 - #54554 - #43025 - #41287 - #62218 - #60221

Added subscriber: @Dogway

Added subscriber: @Dogway

I subscribe most things noted here but I write some observations below.

In the Transform Preferences, Rendering Space should be labeled as Working Space as involving also the Compositor and Sequencer.

The Image Editor needs a Viewing Transform option clearly visible since going back and forth to the Color Management panel is counterproductive.
LiftGammaGain should stay since many videos are composited, edited and graded in Rec.709, and many workflows involve this space but Lift should be fixed, it behaves as Lift+Power.
Also LOG based controls should be included like a Contrast with a Pivot option (add Pivot to the contrast node?)
Shadow/Midtone/Highlight control wheels should be included for LOG based secondaries.
A LUT node to apply different luts not only for artistic but also technical transforms, tonemappers, etc.
(link )

I subscribe most things noted here but I write some observations below. In the Transform Preferences, Rendering Space should be labeled as Working Space as involving also the Compositor and Sequencer. The Image Editor needs a Viewing Transform option clearly visible since going back and forth to the Color Management panel is counterproductive. LiftGammaGain should stay since many videos are composited, edited and graded in Rec.709, and many workflows involve this space but Lift should be fixed, it behaves as Lift+Power. Also LOG based controls should be included like a Contrast with a Pivot option (add Pivot to the contrast node?) Shadow/Midtone/Highlight control wheels should be included for LOG based secondaries. A LUT node to apply different luts not only for artistic but also technical transforms, tonemappers, etc. ([link ](http://www.peachpit.com/articles/article.aspx?p=2161673&seqNum=5))

Added subscriber: @McSwiff

Added subscriber: @McSwiff

In the Transform Preferences, Rendering Space should be labeled as Working Space as involving also the Compositor and Sequencer.

Correct.

The Image Editor needs a Viewing Transform option clearly visible since going back and forth to the Color Management panel is counterproductive.

Also correct. Just like the Save as Render flag, View as Render should make way for a more granular UI (Color Space is already there, but View Transform is not).
Note that the settings inside the Color Management panel don't even influence the view inside the Image Editor, as they only pertain to rendering and output.
View as Render is not only useless and badly named, it's also incorrect to use it. An image used as input should not have a transform used for viewing output slapped onto it. The checkbox should be replaced by a View Transform enum, also stored per image datablock.

LiftGammaGain should stay since many videos are composited, edited and graded in Rec.709, and many workflows involve this space but Lift should be fixed, it behaves as Lift+Power.

Just because your input material is Rec. 709, doesn't mean that it is display referred. On the contrary - the Blender compositor operates linearly, which is where Lift/Gamma/Gain breaks. The algorithm works on shadows, midtones and highlights, which are impossible to separate when using scene referred data.

Also LOG based controls should be included like a Contrast with a Pivot option (add Pivot to the contrast node?)
Shadow/Midtone/Highlight control wheels should be included for LOG based secondaries.

Again, compositing is a linear affair. The log controls you mention (including a shadows/midtones/highlights separation) are geared towards a grading workflow. Which should not happen on linear data, unless the tools use a log shaper if both input and output are stored linearly, like in an ACES workflow. But I digress.
It's beyond the scope of this task, but @troy_s did suggest a dedicated Grading Editor with correct controls for a log-based workflow. This editor would for example allow the colourist to work on NodeTrees linked to VSE strips, which is similar to e.g. DaVinci Resolve.
That Pivot option, however, is something that could very well be added to colour manipulation nodes already present in Blender, like Brightness/Contrast, but also Slope/Offset/Power.

A LUT node to apply different luts not only for artistic but also technical transforms, tonemappers, etc.

LUT nodes, enums for every node, .. all ways to prep data more adequately for the nodes they're about to go through.

> In the Transform Preferences, Rendering Space should be labeled as Working Space as involving also the Compositor and Sequencer. Correct. > The Image Editor needs a Viewing Transform option clearly visible since going back and forth to the Color Management panel is counterproductive. Also correct. Just like the *Save as Render* flag, *View as Render* should make way for a more granular UI (Color Space is already there, but View Transform is not). Note that the settings inside the Color Management panel don't even influence the view inside the Image Editor, as they only pertain to rendering and output. *View as Render* is not only useless and badly named, it's also incorrect to use it. An image used as input should not have a transform used for viewing output slapped onto it. The checkbox should be replaced by a View Transform enum, also stored per image datablock. > LiftGammaGain should stay since many videos are composited, edited and graded in Rec.709, and many workflows involve this space but Lift should be fixed, it behaves as Lift+Power. Just because your input material is Rec. 709, doesn't mean that it is display referred. On the contrary - the Blender compositor operates linearly, which is where Lift/Gamma/Gain breaks. The algorithm works on shadows, midtones and highlights, which are impossible to separate when using scene referred data. > Also LOG based controls should be included like a Contrast with a Pivot option (add Pivot to the contrast node?) > Shadow/Midtone/Highlight control wheels should be included for LOG based secondaries. Again, compositing is a linear affair. The log controls you mention (including a shadows/midtones/highlights separation) are geared towards a grading workflow. Which should not happen on linear data, unless the tools use a log shaper if both input and output are stored linearly, like in an ACES workflow. But I digress. It's beyond the scope of this task, but @troy_s did suggest a dedicated Grading Editor with correct controls for a log-based workflow. This editor would for example allow the colourist to work on NodeTrees linked to VSE strips, which is similar to e.g. DaVinci Resolve. That Pivot option, however, is something that could very well be added to colour manipulation nodes already present in Blender, like Brightness/Contrast, but also Slope/Offset/Power. > A LUT node to apply different luts not only for artistic but also technical transforms, tonemappers, etc. LUT nodes, enums for every node, .. all ways to prep data more adequately for the nodes they're about to go through.

Added subscriber: @MD.FahadHassan

Added subscriber: @MD.FahadHassan
Member

Just want to mention #69562 here as well

Just want to mention #69562 here as well

In case someone interested in Natron/Nuke merge node math.
These are the implementation papers. I was able to create some mix nodes preserving luminance for production following these math. Hope it helps.
edit: [Not Valid]

In case someone interested in Natron/Nuke merge node math. These are the implementation papers. I was able to create some mix nodes preserving luminance for production following these math. Hope it helps. edit: [Not Valid]

In #68926#788688, @MD.FahadHassan wrote:
In case someone interested in Natron/Nuke merge node math.
These are the implementation papers. I was able to create some mix nodes preserving luminance for production following these math. Hope it helps.

Most of those are display referred and don’t work @cgvirus. Those are the same broken formulas in the Mix node. Luminance based formulas are an entirely other matter.

Natron has a completely broken colour pipeline and is not exemplary in this regard.

> In #68926#788688, @MD.FahadHassan wrote: > In case someone interested in Natron/Nuke merge node math. > These are the implementation papers. I was able to create some mix nodes preserving luminance for production following these math. Hope it helps. Most of those are display referred and don’t work @cgvirus. Those are the same broken formulas in the Mix node. Luminance based formulas are an entirely other matter. Natron has a completely broken colour pipeline and is not exemplary in this regard.

Hi, @troy_s thanks for the reply. Which app/s could be taken as a reference point for scene referred pipeline? I am interested to experiment it in deep. Thanks.

Hi, @troy_s thanks for the reply. Which app/s could be taken as a reference point for scene referred pipeline? I am interested to experiment it in deep. Thanks.

@MD.FahadHassan The Nuke Merge nodes by default assume scene referred and will only change to the display referred versions with the horribly titled “Video Colorspace” check box toggled to on. OpenImageIO has the same swapped out formulas that Nuke uses. You will notice that things like Screen etc. will work with scene referred emissions, but is completely different from the A+B - (A*B) for example.

@MD.FahadHassan The Nuke Merge nodes by default assume scene referred and will only change to the display referred versions with the horribly titled “Video Colorspace” check box toggled to on. OpenImageIO has the same swapped out formulas that Nuke uses. You will notice that things like Screen etc. will work with scene referred emissions, but is completely different from the `A+B - (A*B)` for example.

@troy_s Thanks for the hints! Yes, I noticed a huge f-stop difference with some shots lately.
I think I am getting this scene referred conundrum now. Should we explore ACES as well? If you could kindly provide us some papers to read that would be great! Thanks.

@troy_s Thanks for the hints! Yes, I noticed a huge f-stop difference with some shots lately. I think I am getting this scene referred conundrum now. Should we explore ACES as well? If you could kindly provide us some papers to read that would be great! Thanks.

ACES is really tangential; it’s just a simple series of transfer functions and a reference working space that is more or less BT.2020 for use with CGI / rendering / compositing.

If one focuses on the three classes of buffers being display referred emissions, scene referred emissions, and non-color data, the rest is vastly easier to understand.

ACES is really tangential; it’s just a simple series of transfer functions and a reference working space that is more or less BT.2020 for use with CGI / rendering / compositing. If one focuses on the three classes of buffers being *display referred emissions*, *scene referred emissions*, and *non-color data*, the rest is vastly easier to understand.

Thanks for all the hints! Going to dig it deep. I will eventually disturb you annoyingly in forums :) @troy_s

Thanks for all the hints! Going to dig it deep. I will eventually disturb you annoyingly in forums :) @troy_s

Also linking D2547 here. In my opinion not absolutely essential, but the discussion is lengthy and should not be disregarded.

Also linking [D2547](https://archive.blender.org/developer/D2547) here. In my opinion not absolutely essential, but the discussion is lengthy and should not be disregarded.

Added subscriber: @RainerTrummer

Added subscriber: @RainerTrummer

Added subscriber: @DaveStromberger

Added subscriber: @DaveStromberger
Member

Added subscriber: @Stefan_Werner

Added subscriber: @Stefan_Werner

Added subscriber: @PeterBaintner

Added subscriber: @PeterBaintner

#71357 was made yesterday by @Jeroen-Bakker and would resolve a huge amount of the current problems.
#71389 is a small thing, but relevant to the issue.

#71357 was made yesterday by @Jeroen-Bakker and would resolve a huge amount of the current problems. #71389 is a small thing, but relevant to the issue.

Added subscriber: @Memento

Added subscriber: @Memento

Added subscriber: @BintangPratama

Added subscriber: @BintangPratama

Added subscriber: @AndreaMonzini

Added subscriber: @AndreaMonzini

Just a reminder for #71705 to also be CM aware.

Just a reminder for #71705 to also be CM aware.

In #68926#818575, @Dogway wrote:
Just a reminder for #71705 to also be CM aware.

Yep. That’s sRGB unmanaged hell dumpster from what I can see.

> In #68926#818575, @Dogway wrote: > Just a reminder for #71705 to also be CM aware. Yep. That’s sRGB unmanaged hell dumpster from what I can see.

Added subscriber: @Pipeliner

Added subscriber: @Pipeliner

Added subscriber: @BSannholm

Added subscriber: @BSannholm

Added subscriber: @JasonClarke

Added subscriber: @JasonClarke

Added subscriber: @CobraA

Added subscriber: @CobraA

Hey Guys.
I made a thread on the devtalk about [[
https://devtalk.blender.org/t/color-management-in-the-viewport-solid-mode/12830| Color Management in the Viewport (Solid Mode)
]], to be honest i don't understand why it doesn't get color managed or can use the workbench's rendered mode in a way, because the materials & textures look washed out and if you do a viewport render then they're different from what you see in the viewport...

this has happened to many people especially those who are using the grease pencil & doing renders which i believe you guys had to switch the view transform to standard & will probably cause more problems down the round ( after seeing the difference i can't unsee it anymore).

I think it can be simplified to not have to switch to the workbench engine rendered mode in the first place, especially that the workbench engine doesn't offer anything big besides being able to do color management ,hit 12 which is the same as the viewport render option , maybe compositing but it doesn't use any shading nodes....

It would be better if the solid mode in both Cycles & Eevee can use color management, like a checkbox to enable the workbench's rendered mode from there or something clever.

Hey Guys. I made a thread on the devtalk about [[ https://devtalk.blender.org/t/color-management-in-the-viewport-solid-mode/12830| Color Management in the Viewport (Solid Mode) ]], to be honest i don't understand why it doesn't get color managed or can use the workbench's rendered mode in a way, because the materials & textures look washed out and if you do a viewport render then they're different from what you see in the viewport... this has happened to many people especially those who are using the grease pencil & doing renders which i believe you guys had to switch the view transform to standard & will probably cause more problems down the round ( after seeing the difference i can't unsee it anymore). I think it can be simplified to not have to switch to the workbench engine rendered mode in the first place, especially that the workbench engine doesn't offer anything big besides being able to do color management ,hit 12 which is the same as the viewport render option , maybe compositing but it doesn't use any shading nodes.... It would be better if the solid mode in both Cycles & Eevee can use color management, like a checkbox to enable the workbench's rendered mode from there or something clever.

Solid mode always uses the Standard transform, which by default has more contrast that Filmic. It's unclear to me what kind of setup you are using to get low contrast in solid mode.

There must be a separate view transform, since the view transform is tied to lighting and can include artistic effects that get in the way of viewing and editing the scene in solid mode. Workbench as a render engine has many uses cases outside of color management.

Solid mode always uses the Standard transform, which by default has more contrast that Filmic. It's unclear to me what kind of setup you are using to get low contrast in solid mode. There must be a separate view transform, since the view transform is tied to lighting and can include artistic effects that get in the way of viewing and editing the scene in solid mode. Workbench as a render engine has many uses cases outside of color management.

In #68926#919045, @brecht wrote:
Solid mode always uses the Standard transform, which by default has more contrast that Filmic. It's unclear to me what kind of setup you are using to get low contrast in solid mode.

It's the same setup for both excpet for small changes for the rendered mode to get better colors & higher contrast.

There must be a separate view transform, since the view transform is tied to lighting and can include artistic effects that get in the way of viewing and editing the scene in solid mode. Workbench as a render engine has many uses cases outside of color management.

That's true. but how? since we can't control solid's mode "look" in anyway.

> In #68926#919045, @brecht wrote: > Solid mode always uses the Standard transform, which by default has more contrast that Filmic. It's unclear to me what kind of setup you are using to get low contrast in solid mode. > It's the same setup for both excpet for small changes for the rendered mode to get better colors & higher contrast. > There must be a separate view transform, since the view transform is tied to lighting and can include artistic effects that get in the way of viewing and editing the scene in solid mode. Workbench as a render engine has many uses cases outside of color management. That's true. but how? since we can't control solid's mode "look" in anyway.

A fixed transform to sRGB’s display linear output also breaks with any device with difference colourimetry to sRGB, including Display P3 devices.

There’s no assumption that display linear is “more or less contrast”; it is literally just a canvas for output.

If the goal is to have a higher contrast output, it makes sense to work that into an aesthetic transform that has augmented contrast?

A fixed transform to sRGB’s display linear output also breaks with any device with difference colourimetry to sRGB, including Display [P3](https://archive.blender.org/developer/P3.txt) devices. There’s no assumption that display linear is “more or less contrast”; it is literally just a canvas for output. If the goal is to have a higher contrast output, it makes sense to work that into an aesthetic transform that has augmented contrast?

If you've set up the colors to be this dull with the Standard transform with the default Blender configuration, then I think you've picked the wrong colors in the material and are trying to compensate for them in the wrong place. Or there is some kind of bug or configuration issue.

If you've set up the colors to be this dull with the Standard transform with the default Blender configuration, then I think you've picked the wrong colors in the material and are trying to compensate for them in the wrong place. Or there is some kind of bug or configuration issue.

In #68926#919371, @brecht wrote:
If you've set up the colors to be this dull with the Standard transform with the default Blender configuration, then I think you've picked the wrong colors in the material and are trying to compensate for them in the wrong place. Or there is some kind of bug or configuration issue.

Colors can be altered but you can't change the textures and you can't control the display viewport settings, it's only through the rendered mode that you can alter the standard transform to be more contrasty &pop out for both the viewport and renders

> In #68926#919371, @brecht wrote: > If you've set up the colors to be this dull with the Standard transform with the default Blender configuration, then I think you've picked the wrong colors in the material and are trying to compensate for them in the wrong place. Or there is some kind of bug or configuration issue. Colors can be altered but you can't change the textures and you can't control the display viewport settings, it's only through the rendered mode that you can alter the standard transform to be more contrasty &pop out for both the viewport and renders

You can change textures. If you want lighting, blend modes and compositing to work well then the colors used for them need to make sense, trying to fix them afterwards in the view transform will not work well and is not a use case we should support.

You can change textures. If you want lighting, blend modes and compositing to work well then the colors used for them need to make sense, trying to fix them afterwards in the view transform will not work well and is not a use case we should support.

Mentioning #72420 here. It's a design task, so it's a solution rather than a problem!

Mentioning #72420 here. It's a design task, so it's a solution rather than a problem!

Added subscriber: @ClinToch

Added subscriber: @ClinToch

Added subscriber: @mrlemonyfresh

Added subscriber: @mrlemonyfresh

Added subscriber: @slowburn

Added subscriber: @slowburn

Added subscriber: @Blackx

Added subscriber: @Blackx

Added subscriber: @Linuz

Added subscriber: @Linuz

for me - acescg is working quite good, and blender support is needed.
Where it works, kind of, by replacing the colormanagement folder the downside is picking colorspaces for the assets textures and super nasty: changing colors in all rgb fields is nearly unusable ;)
so if anyone has time, would be great to have aces inside

for me - acescg is working quite good, and blender support is needed. Where it works, kind of, by replacing the colormanagement folder the downside is picking colorspaces for the assets textures and super nasty: changing colors in all rgb fields is nearly unusable ;) so if anyone has time, would be great to have aces inside

In #68926#1017217, @Linuz wrote:
for me - acescg is working quite good, and blender support is needed.
Where it works, kind of, by replacing the colormanagement folder the downside is picking colorspaces for the assets textures and super nasty: changing colors in all rgb fields is nearly unusable ;)
so if anyone has time, would be great to have aces inside

ACES itself is outside of Blender's scope, as is any other colour pipeline. OpenColorIO is what Blender should support and implement 100% correctly, which is where the majority of issues are. Once those are fixed, your ACES OCIO config will work.

> In #68926#1017217, @Linuz wrote: > for me - acescg is working quite good, and blender support is needed. > Where it works, kind of, by replacing the colormanagement folder the downside is picking colorspaces for the assets textures and super nasty: changing colors in all rgb fields is nearly unusable ;) > so if anyone has time, would be great to have aces inside ACES itself is outside of Blender's scope, as is any other colour pipeline. OpenColorIO is what Blender should support and implement 100% correctly, which is where the majority of issues are. Once those are fixed, your ACES OCIO config will work.

Added subscriber: @tintwotin

Added subscriber: @tintwotin

Timeline for OpenColorIO v2
{F8891657, size=full}

A talk about OCIO v2: https://youtu.be/7e0SSka8Ar8?t=1754

Timeline for OpenColorIO v2 {[F8891657](https://archive.blender.org/developer/F8891657/image.png), size=full} A talk about OCIO v2: https://youtu.be/7e0SSka8Ar8?t=1754

Added subscriber: @Russ1642

Added subscriber: @Russ1642

Added subscriber: @ionarn

Added subscriber: @ionarn

Added subscriber: @Gehrig

Added subscriber: @Gehrig

Added subscriber: @Slowwkidd

Added subscriber: @Slowwkidd

Added subscriber: @mmdanggg2

Added subscriber: @mmdanggg2

Added subscriber: @YegorSmirnov

Added subscriber: @YegorSmirnov

Added subscriber: @SamGreen

Added subscriber: @SamGreen

Added subscriber: @Stat_Headcrabed

Added subscriber: @Stat_Headcrabed

Added subscriber: @clayhands

Added subscriber: @clayhands

Added subscriber: @RobertWesseling

Added subscriber: @RobertWesseling

Added subscriber: @LaurynasKel

Added subscriber: @LaurynasKel

This issue was referenced by f193b1afb3

This issue was referenced by f193b1afb313bcb937a396f09da2b9903a0d2fc3

This issue was referenced by b10d8e330e

This issue was referenced by b10d8e330e529abb1cb017312b46a33ede24a8d0
Member

Added subscriber: @Blendify

Added subscriber: @Blendify

This issue was referenced by 27b78c9c94

This issue was referenced by 27b78c9c94baf6fa43268e851de58da96f7d7123

Added subscriber: @baoyu

Added subscriber: @baoyu

And here goes the OCIO v2.0.0-rc1! The official release is coming ; )
https://github.com/AcademySoftwareFoundation/OpenColorIO/releases

And here goes the OCIO v2.0.0-rc1! The official release is coming ; ) https://github.com/AcademySoftwareFoundation/OpenColorIO/releases

Added subscriber: @wenna666

Added subscriber: @wenna666

Added subscriber: @EAW

Added subscriber: @EAW

@EAW, please leave updating tasks to Render module members.

Remove hard coded "config.ocio" config naming requirement.

There is no requirement for the config to be named config.ocio, that's just the name of the config we ship.

Update Blender to read all of the new OCIOv2 config variables.

Unclear what this means.

Upstream patch so that OCIO can read non-ASCII paths on Windows. See upstream bug report for reference.

We do not have an OpenColorIO patch, only a workaround in the Blender code that makes no sense to contribute.

@EAW, please leave updating tasks to Render module members. > Remove hard coded "config.ocio" config naming requirement. There is no requirement for the config to be named `config.ocio`, that's just the name of the config we ship. > Update Blender to read all of the new OCIOv2 config variables. Unclear what this means. > Upstream patch so that OCIO can read non-ASCII paths on Windows. See [upstream bug report](https://github.com/AcademySoftwareFoundation/OpenColorIO/issues/406) for reference. We do not have an OpenColorIO patch, only a workaround in the Blender code that makes no sense to contribute.

Just hoping ACES support. And BTW, when it's implemented how to deal with the relatively huge file size increasing because of the huge ACES library files?

Just hoping ACES support. And BTW, when it's implemented how to deal with the relatively huge file size increasing because of the huge ACES library files?

ACES works fine in Blender now if you want to use it, aside from the stuff listed in "Shader Nodes" above. (and lookdev mode, which doesn't have a way to set input color space for the backgrounds, they're assumed to always be in the rendering space).

ACES works fine in Blender now if you want to use it, aside from the stuff listed in "Shader Nodes" above. (and lookdev mode, which doesn't have a way to set input color space for the backgrounds, they're assumed to always be in the rendering space).

@brecht could you take a look at the many suggestions that have been posted here, and consider updating the task description with them? They have been made a long time ago.
While it's unlikely that major changes happen soon, said suggestions are well-intended, yet on the verge of being completely forgotten underneath a task description that still lacks important stuff while addressing non-essential targets.

@brecht could you take a look at the many suggestions that have been posted here, and consider updating the task description with them? They have been made a long time ago. While it's unlikely that major changes happen soon, said suggestions are well-intended, yet on the verge of being completely forgotten underneath a task description that still lacks important stuff while addressing non-essential targets.

In #68926#1122758, @JasonClarke wrote:
ACES works fine in Blender now if you want to use it, aside from the stuff listed in "Shader Nodes" above. (and lookdev mode, which doesn't have a way to set input color space for the backgrounds, they're assumed to always be in the rendering space).

As the "aside from"s you said, just makes it unusable.
And what's more I found that the 3D viewport and image viewer of blender just simply don't respect the ACES ocio config.
To prove it, just import a srgb image and set it's IDT to Utility-sRGB-texture and compare it with the results with another software that supports ACES.

> In #68926#1122758, @JasonClarke wrote: > ACES works fine in Blender now if you want to use it, aside from the stuff listed in "Shader Nodes" above. (and lookdev mode, which doesn't have a way to set input color space for the backgrounds, they're assumed to always be in the rendering space). As the "aside from"s you said, just makes it unusable. And what's more I found that the 3D viewport and image viewer of blender just simply don't respect the ACES ocio config. To prove it, just import a srgb image and set it's IDT to Utility-sRGB-texture and compare it with the results with another software that supports ACES.

In #68926#1122759, @frameshift wrote:
@brecht could you take a look at the many suggestions that have been posted here, and consider updating the task description with them? They have been made a long time ago.
While it's unlikely that major changes happen soon, said suggestions are well-intended, yet on the verge of being completely forgotten underneath a task description that still lacks important stuff while addressing non-essential targets.

It will be looked at when actual work starts on this. The tasks lists things that I am sure we should support and how, some of the suggestions I don't think are the proper solution.

> In #68926#1122759, @frameshift wrote: > @brecht could you take a look at the many suggestions that have been posted here, and consider updating the task description with them? They have been made a long time ago. > While it's unlikely that major changes happen soon, said suggestions are well-intended, yet on the verge of being completely forgotten underneath a task description that still lacks important stuff while addressing non-essential targets. It will be looked at when actual work starts on this. The tasks lists things that I am sure we should support and how, some of the suggestions I don't think are the proper solution.

In #68926#1123269, @brecht wrote:
It will be looked at when actual work starts on this. The tasks lists things that I am sure we should support and how, some of the suggestions I don't think are the proper solution.

Sounds good. I hope we can have a constructive discussion about those when the time comes.

> In #68926#1123269, @brecht wrote: > It will be looked at when actual work starts on this. The tasks lists things that I am sure we should support and how, some of the suggestions I don't think are the proper solution. Sounds good. I hope we can have a constructive discussion about those when the time comes.

Added subscriber: @pauanyu_blender

Added subscriber: @pauanyu_blender

Added subscriber: @STEP-ANI-MOTION

Added subscriber: @STEP-ANI-MOTION

Added subscriber: @Aeraglyx

Added subscriber: @Aeraglyx

Added subscriber: @fldbots

Added subscriber: @fldbots

I found that the standard color management preset do not fit for direct tasks that need receive good shot without Photoshop and manipulations with EXR. I thrown out 'EXR' from my pipeline and I use 16 Bit Tiff (EXR do not apply 'Color Management' Setting) with follow color preset: Display devise: sRGB; View Transform: Raw; Look: High Contrast and there is the important detail - curves (1st point x: 0.00, y: 0.00; +1st (optional): x: 0:015, y: 0.25; 2nd point: x: 0.25, y: 0.76; 3th point: x: 0.7, y: 0.98; 4th point: x: 1.00, y: 1.00.).img.JPG

I recommend to use it as standard when you try to fit scene lightings and materials. The settings Standard, Filmic and Filmic Log show this scene unpredictable.

I found that the standard color management preset do not fit for direct tasks that need receive good shot without Photoshop and manipulations with EXR. I thrown out 'EXR' from my pipeline and I use 16 Bit Tiff (EXR do not apply 'Color Management' Setting) with follow color preset: Display devise: sRGB; View Transform: Raw; Look: High Contrast and there is the important detail - curves (1st point x: 0.00, y: 0.00; +1st (optional): x: 0:015, y: 0.25; 2nd point: x: 0.25, y: 0.76; 3th point: x: 0.7, y: 0.98; 4th point: x: 1.00, y: 1.00.).![img.JPG](https://archive.blender.org/developer/F10051700/img.JPG) I recommend to use it as standard when you try to fit scene lightings and materials. The settings Standard, Filmic and Filmic Log show this scene unpredictable.

Removed subscriber: @tintwotin

Removed subscriber: @tintwotin

I find that your advice might be appreciated over at the colour science circles at maybe ILM, Filmlight, or Method Studios. Maybe you should take your random and poorly informed opinions over there and figure out how they receive them.

Here's the job board over at Apple too...
https://jobs.apple.com/en-ca/details/200242182/color-imaging-scientist

I find that your advice might be appreciated over at the colour science circles at maybe ILM, Filmlight, or Method Studios. Maybe you should take your random and poorly informed opinions over there and figure out how they receive them. Here's the job board over at Apple too... https://jobs.apple.com/en-ca/details/200242182/color-imaging-scientist

Added subscriber: @rsgnz

Added subscriber: @rsgnz

Added subscriber: @frances-murphy

Added subscriber: @frances-murphy

Added subscriber: @GeorgiaPacific

Added subscriber: @GeorgiaPacific

this should get more love,please, the current Blender color management is lame, and makes professionals walks away from Cycles.

this should get more love,please, the current Blender color management is lame, and makes professionals walks away from Cycles.

Added subscriber: @DarkKnight

Added subscriber: @DarkKnight

I am not an expert in this area but aces makes it easier to export images to other programs. Can this be considered in the near future planning after cycles x rewrite?

I am not an expert in this area but aces makes it easier to export images to other programs. Can this be considered in the near future planning after cycles x rewrite?

Added subscriber: @Accelero

Added subscriber: @Accelero

I have sat down and wrote an OCIO config with the new built in transforms. I sticked to the conversion system OCIO has setup with it's new built in transforms.

Texture Color Space -> Reference Space (ACES2065-1) -> RRT to CIE-XYZ D65 as Display Reference Color Space -> ODT to Display Color Space

Here is the config and a blend file with a simple color checker to test it out:
config.ocio ColorCheck.blend
The HDR Transforms are obviously not displayed correctly even if u have a capable monitor, since blender cannot output the necessary meta data to display HDR (drawing code / file output needs to be improved).
Some of the View Transforms like the HDR transforms for "P3 Gamma 2.6" and Rec.2020 with Rec.1886 transfer function don't make sense i think, because HDR capable Displays use either PQ or HLG tranfer functions anyway. But I left it in for testing purposes. This config could be used as a starting point or example on how to implement better ACES support and works already as is for SDR content.

Some things I've noticed while writing the config:

  • Blender uses the first View Transform specified for a display in the config for the image viewer (un-tone-mapped in this case, which produces correct results when viewing images)
  • The ACES built in transforms handle some difficult lighting situations better than blender's default filmic view transform (probably because it doesn't rely on Luts and instead uses arithmetically more accurate (built in) matrix transforms)
  • There are still problems in some difficult overbright scenarios with blue color shifting, but there is a "blue light fix" look transform to fix this built in OCIO and it's also in the config (check the Looks)
  • The ACES tonemapping obviously differs from blender's default filmic
  • The color picker behaves not entirely as expected. It's set to sRGB in this config and even with an sRGB display it looks darker than in default blender, which should not be the case since sRGB images use the same color space and are correctly displayed.

Another thing I wasn't able to verify is whether the values of the PQ and HLG transforms are correct. I would have to do more research on how exactly the PQ works, but at first glance the values seem to make sense. When the PQ is designed for up to 10000nits and ranges between 0..1 bright values got larger when switching from SDR view transform to HDR and higher nits transforms. All the transforms in the config are built in transforms from OCIO.

I hope this helps in making blender HDR and ACES compatible. If this is the wrong place for that, please point me to the right place, thank you.

I have sat down and wrote an OCIO config with the new built in transforms. I sticked to the conversion system OCIO has setup with it's new built in transforms. Texture Color Space -> Reference Space (ACES2065-1) -> RRT to CIE-XYZ [D65](https://archive.blender.org/developer/D65) as Display Reference Color Space -> ODT to Display Color Space Here is the config and a blend file with a simple color checker to test it out: [config.ocio](https://archive.blender.org/developer/F12224720/config.ocio) [ColorCheck.blend](https://archive.blender.org/developer/F12224813/ColorCheck.blend) The HDR Transforms are obviously not displayed correctly even if u have a capable monitor, since blender cannot output the necessary meta data to display HDR (drawing code / file output needs to be improved). Some of the View Transforms like the HDR transforms for "[P3](https://archive.blender.org/developer/P3.txt) Gamma 2.6" and Rec.2020 with Rec.1886 transfer function don't make sense i think, because HDR capable Displays use either PQ or HLG tranfer functions anyway. But I left it in for testing purposes. This config could be used as a starting point or example on how to implement better ACES support and works already as is for SDR content. Some things I've noticed while writing the config: - Blender uses the first View Transform specified for a display in the config for the image viewer (un-tone-mapped in this case, which produces correct results when viewing images) - The ACES built in transforms handle some difficult lighting situations better than blender's default filmic view transform (probably because it doesn't rely on Luts and instead uses arithmetically more accurate (built in) matrix transforms) - There are still problems in some difficult overbright scenarios with blue color shifting, but there is a "blue light fix" look transform to fix this built in OCIO and it's also in the config (check the Looks) - The ACES tonemapping obviously differs from blender's default filmic - The color picker behaves not entirely as expected. It's set to sRGB in this config and even with an sRGB display it looks darker than in default blender, which should not be the case since sRGB images use the same color space and are correctly displayed. Another thing I wasn't able to verify is whether the values of the PQ and HLG transforms are correct. I would have to do more research on how exactly the PQ works, but at first glance the values seem to make sense. When the PQ is designed for up to 10000nits and ranges between 0..1 bright values got larger when switching from SDR view transform to HDR and higher nits transforms. All the transforms in the config are built in transforms from OCIO. I hope this helps in making blender HDR and ACES compatible. If this is the wrong place for that, please point me to the right place, thank you.

There are still problems in some difficult overbright scenarios with blue color shifting, but there is a "blue light fix" look transform to fix this built in OCIO and it's also in the config (check the Looks)

This has nothing to do with the rubbish “gamut” solution, and everything to do with the broken fundamentals within ACES. There is no fixing it.

> There are still problems in some difficult overbright scenarios with blue color shifting, but there is a "blue light fix" look transform to fix this built in OCIO and it's also in the config (check the Looks) This has nothing to do with the rubbish “gamut” solution, and everything to do with the broken fundamentals within ACES. There is no fixing it.

I did some quick improvements on the config.

  • Switched Scene Linear and Render color space to ACEScg (this is afaik best practice since AP1 primaries tend to have more traditional values than AP0 and are less "imaginary"). I couldn't spot a visual change, only the scene linear values are now different as expected.
  • I've setup a separate sRGB color picker space with clamped input values between 0..1, because the color picker can pick up values slightly above 1 somehow (maybe an issue with its implementation)

be aware: RGB and HSV values in the color picker are scene linear (ACEScg) not sRGB. Only the color picker is sRGB. If you want to use Rec.709 scene linear primaries like default blender just change the scene linear color space to "Rec.709 Linear" at the beginning of the config.

The color picker is now displayed correctly for me. Not sure what the issue was.

In a production ready solution it would be nice to set the color space specifically for each color socket or have it in scene linear values like now but perhabs automatically change the color picker to display color space.

config.ocio

I did some quick improvements on the config. - Switched Scene Linear and Render color space to ACEScg (this is afaik best practice since AP1 primaries tend to have more traditional values than AP0 and are less "imaginary"). I couldn't spot a visual change, only the scene linear values are now different as expected. - I've setup a separate sRGB color picker space with clamped input values between 0..1, because the color picker can pick up values slightly above 1 somehow (maybe an issue with its implementation) be aware: RGB and HSV values in the color picker are scene linear (ACEScg) not sRGB. Only the color picker is sRGB. If you want to use Rec.709 scene linear primaries like default blender just change the scene linear color space to "Rec.709 Linear" at the beginning of the config. The color picker is now displayed correctly for me. Not sure what the issue was. In a production ready solution it would be nice to set the color space specifically for each color socket or have it in scene linear values like now but perhabs automatically change the color picker to display color space. [config.ocio](https://archive.blender.org/developer/F12243446/config.ocio)

I’m not sure renaming the standard ACES “Utility - sRGB Texture” to “sRGB Color Picker” is a good idea, that will make Blender non-standard from other ACES implementations for no good reason. Isn’t it also missing the XYZ role, which is necessary for textures such as the Sky Texture node to be correctly in the render space? Also, should P3D65 be gamma 2.6? IIRC it is gamma 2.2 in the standard ACES config, as using D65 with P3 primaries typically goes hand-in-hand with gamma 2.2 as well (aka, the “Apple Display P3” space)

In general, I’m struggling to see the advantages of this config over the standard ACES config, aside from maybe less clutter(which can be achieved by removing/commenting out IDTs) and having a Filmic Blender option left on (which was never designed to work properly with ACEScg renders anyway)

I’m not sure renaming the standard ACES “Utility - sRGB Texture” to “sRGB Color Picker” is a good idea, that will make Blender non-standard from other ACES implementations for no good reason. Isn’t it also missing the XYZ role, which is necessary for textures such as the Sky Texture node to be correctly in the render space? Also, should P3D65 be gamma 2.6? IIRC it is gamma 2.2 in the standard ACES config, as using [D65](https://archive.blender.org/developer/D65) with [P3](https://archive.blender.org/developer/P3.txt) primaries typically goes hand-in-hand with gamma 2.2 as well (aka, the “Apple Display [P3](https://archive.blender.org/developer/P3.txt)” space) In general, I’m struggling to see the advantages of this config over the standard ACES config, aside from maybe less clutter(which can be achieved by removing/commenting out IDTs) and having a Filmic Blender option left on (which was never designed to work properly with ACEScg renders anyway)

I’m not sure renaming the standard ACES “Utility - sRGB Texture” to “sRGB Color Picker” is a good idea, that will make Blender non-standard from other ACES implementations for no good reason.

I quickly added the color picker space specifically for the color picking purpose to clamp inputs. I just forgot to hide it, it's not meant to be seen. I fixed this. For textures there is the "sRGB" space like default blender.

Isn’t it also missing the XYZ role, which is necessary for textures such as the Sky Texture node to be correctly in the render space?

The sky texture looks wrong, but it appears to rely on Rec.709 Primaries for the scene linear space to work correctly. It is not color managed, but hard coded for Rec.709, I guess.

Also, should P3D65 be gamma 2.6? IIRC it is gamma 2.2 in the standard ACES config, as using D65 with P3 primaries typically goes hand-in-hand with gamma 2.2 as well (aka, the “Apple Display P3” space)

After a quick research I found the following: officially P3 is gamma 2.6, but Apple Display P3 uses gamma 2.2, so in practice P3 D65 is often used with gamma 2.2. I checked the source code and the built in transform in OCIO has gamma 2.6 for P3 D65. I quickly added a P3 D65 gamma 2.2 display space by gamma correcting 2.6 to 2.2.

In general, I’m struggling to see the advantages of this config over the standard ACES config, aside from maybe less clutter(which can be achieved by removing/commenting out IDTs) and having a Filmic Blender option left on (which was never designed to work properly with ACEScg renders anyway)

The standard ACES config is barely usable with blenders UI, since there are too many color spaces, as you mentioned. The point was also to create a config with the new built in transforms from OCIO v2, which should be more accurate than Luts. I think it's also desirable to have a more streamlined/thinned config. Many color spaces in the standard ACES config will only ever be used by professionals, that would use their own config anyway. Having a user friendly config that could be shipped with an HDR/ACES compatible blender is necessary in my opinion. I'm not saying this is ideal, but it is a start. Right now there is a color management section in the render tab, but the only display to choose from is sRGB. This functionality should be expanded if blender is run on HDR or wider gamut displays, which are getting more and more available. To ensure good usability, the wording has to be precise, minimalist and conform with blender standards (e.g. I just kept the term Filmic, because I think it's easy to understand and people are used to it). The standard ACES config is a mess, thinning it is an option, but so are built in transforms which are afaik not yet implemented in the standard ACES config.
config.ocio

> I’m not sure renaming the standard ACES “Utility - sRGB Texture” to “sRGB Color Picker” is a good idea, that will make Blender non-standard from other ACES implementations for no good reason. I quickly added the color picker space specifically for the color picking purpose to clamp inputs. I just forgot to hide it, it's not meant to be seen. I fixed this. For textures there is the "sRGB" space like default blender. >Isn’t it also missing the XYZ role, which is necessary for textures such as the Sky Texture node to be correctly in the render space? The sky texture looks wrong, but it appears to rely on Rec.709 Primaries for the scene linear space to work correctly. It is not color managed, but hard coded for Rec.709, I guess. >Also, should P3D65 be gamma 2.6? IIRC it is gamma 2.2 in the standard ACES config, as using [D65](https://archive.blender.org/developer/D65) with [P3](https://archive.blender.org/developer/P3.txt) primaries typically goes hand-in-hand with gamma 2.2 as well (aka, the “Apple Display [P3](https://archive.blender.org/developer/P3.txt)” space) After a quick research I found the following: officially [P3](https://archive.blender.org/developer/P3.txt) is gamma 2.6, but Apple Display [P3](https://archive.blender.org/developer/P3.txt) uses gamma 2.2, so in practice [P3](https://archive.blender.org/developer/P3.txt) [D65](https://archive.blender.org/developer/D65) is often used with gamma 2.2. I checked the source code and the built in transform in OCIO has gamma 2.6 for [P3](https://archive.blender.org/developer/P3.txt) [D65](https://archive.blender.org/developer/D65). I quickly added a [P3](https://archive.blender.org/developer/P3.txt) [D65](https://archive.blender.org/developer/D65) gamma 2.2 display space by gamma correcting 2.6 to 2.2. > In general, I’m struggling to see the advantages of this config over the standard ACES config, aside from maybe less clutter(which can be achieved by removing/commenting out IDTs) and having a Filmic Blender option left on (which was never designed to work properly with ACEScg renders anyway) The standard ACES config is barely usable with blenders UI, since there are too many color spaces, as you mentioned. The point was also to create a config with the new built in transforms from OCIO v2, which should be more accurate than Luts. I think it's also desirable to have a more streamlined/thinned config. Many color spaces in the standard ACES config will only ever be used by professionals, that would use their own config anyway. Having a user friendly config that could be shipped with an HDR/ACES compatible blender is necessary in my opinion. I'm not saying this is ideal, but it is a start. Right now there is a color management section in the render tab, but the only display to choose from is sRGB. This functionality should be expanded if blender is run on HDR or wider gamut displays, which are getting more and more available. To ensure good usability, the wording has to be precise, minimalist and conform with blender standards (e.g. I just kept the term Filmic, because I think it's easy to understand and people are used to it). The standard ACES config is a mess, thinning it is an option, but so are built in transforms which are afaik not yet implemented in the standard ACES config. [config.ocio](https://archive.blender.org/developer/F12268904/config.ocio)

Hi, @Accelero, thank you for doing this.
Having user-friendly config is really helpful and ACES is a huge improvement over standard Filmic luts, especially with very bright saturated lights. Now rendering sunset with Nishita sky doesn't look like a toxic apocalypse anymore :) Also most image textures get correct color space assigned automatically, so there's no hassle opening and converting old scenes. Except for HDR images, where color space dropdown is just empty. Is this just a visual bug? Which transform should I use for HDRIs?
Also I noticed that the image gets quite a bit darker in the shadows when using Filmic transform with this config, compared to standard Blender. Is this intentional?

Hi, @Accelero, thank you for doing this. Having user-friendly config is really helpful and ACES is a huge improvement over standard Filmic luts, especially with very bright saturated lights. Now rendering sunset with Nishita sky doesn't look like a toxic apocalypse anymore :) Also most image textures get correct color space assigned automatically, so there's no hassle opening and converting old scenes. Except for HDR images, where color space dropdown is just empty. Is this just a visual bug? Which transform should I use for HDRIs? Also I noticed that the image gets quite a bit darker in the shadows when using Filmic transform with this config, compared to standard Blender. Is this intentional?

@slowburn Yes, the "Filmic" (ACES 1.1 SDR video RRT) tonemapping curve from ACES looks darker, that's just the way it is. The Sky Texture seems to need "Rec.709 Linear" as scene linear space set in the config to work correctly. I don't know what causes the environment texture to miss the drop down, but If u select a texture file, it appears. The correct setting depends on the color space of the HDRI but this is most likely "Rec.709 Linear" which is the same as "Linear" in default blender. Default blender works with Rec.709 Primaries.

Edit: The default color space for float textures wasn't updated. I set it to Rec.709 Linear.

Update: config.ocio

@slowburn Yes, the "Filmic" (ACES 1.1 SDR video RRT) tonemapping curve from ACES looks darker, that's just the way it is. The Sky Texture seems to need "Rec.709 Linear" as scene linear space set in the config to work correctly. I don't know what causes the environment texture to miss the drop down, but If u select a texture file, it appears. The correct setting depends on the color space of the HDRI but this is most likely "Rec.709 Linear" which is the same as "Linear" in default blender. Default blender works with Rec.709 Primaries. Edit: The default color space for float textures wasn't updated. I set it to Rec.709 Linear. Update: [config.ocio](https://archive.blender.org/developer/F12345624/config.ocio)

Currently the description of color spaces does not work for "Color Management" in the "Render" tab. For selection of color spaces in the texture node it pops up.
It would be nice to have a consistent support of OCIO config descriptions.
tooltip.png

Currently the description of color spaces does not work for "Color Management" in the "Render" tab. For selection of color spaces in the texture node it pops up. It would be nice to have a consistent support of OCIO config descriptions. ![tooltip.png](https://archive.blender.org/developer/F12599110/tooltip.png)

Removed subscriber: @troy_s

Removed subscriber: @troy_s

Render file output and file saving needs to have a configurable color space to write to. By default it would use the scene display and view transform. This should then be changed to a color space, or a display + view transform + look.

I made a quick mockup of how this could look like. But maybe someone from the industry could give some feedback, whether this is what is needed, or how it could be better implemented. The naming (Scene, Display) is of course just a placeholder. I just didn't come up with better, concise terms.

Draft.png

> Render file output and file saving needs to have a configurable color space to write to. By default it would use the scene display and view transform. This should then be changed to a color space, or a display + view transform + look. I made a quick mockup of how this could look like. But maybe someone from the industry could give some feedback, whether this is what is needed, or how it could be better implemented. The naming (Scene, Display) is of course just a placeholder. I just didn't come up with better, concise terms. ![Draft.png](https://archive.blender.org/developer/F12666893/Draft.png)

The “Scene” section is probably unnecessary, OpenEXR really shouldn’t have output CM applied to it, the standard of the format is to “dump the render buffer” so it should always keep the scene render space. If for whatever reason the rendering space is not the comp space, that should be harmonized on the comp side, IMO. And any other image format you probably want to perform a scene>display conversion. The display section looks good, but a “use view transform” checkbox that overrides the rest of it with the main scene CM settings would be good, and probably should be on by default, to ensure the render view is WYSIWYG for the output file.

Btw, the Sky texture DOES support color management, it relies on the OCIO “xyz” role to tell it how to convert from XYZ to the OCIO config’s reference space, from which it can then find its way to the space defined for the “rendering” role.

The “Scene” section is probably unnecessary, OpenEXR really shouldn’t have output CM applied to it, the standard of the format is to “dump the render buffer” so it should always keep the scene render space. If for whatever reason the rendering space is not the comp space, that should be harmonized on the comp side, IMO. And any other image format you probably want to perform a scene>display conversion. The display section looks good, but a “use view transform” checkbox that overrides the rest of it with the main scene CM settings would be good, and probably should be on by default, to ensure the render view is WYSIWYG for the output file. Btw, the Sky texture DOES support color management, it relies on the OCIO “xyz” role to tell it how to convert from XYZ to the OCIO config’s reference space, from which it can then find its way to the space defined for the “rendering” role.

The “Scene” section is probably unnecessary, OpenEXR really shouldn’t have output CM applied to it

So Log space (e.g. ACEScct, Cineon) exports isn't a thing? Of course one can always get the log from the scene linear later.
In the case of OpenEXR it might be uncommon to have anything else than scene linear, but being able to convert primaries (AP0, AP1, Rec.709) might be useful on export. For other formats like saving textures, choosing color space might be useful and if the file saving is modified to run a color conversion before encoding the image file, it doesn't matter what file type. It would mean no additional work to have the dialog also for OpenEXR, but of course it can become a cause of error, if unknowingly changed.

And any other image format you probably want to perform a scene>display conversion

Are there textures, where someone wants to convert different color spaces (AP0, AP1, Rec.709)? Having the color conversion on file saving in general possible, could solve many color space issues, but in the end it's a question of design philosophy. Do you want to give users the option, or does it create more confusion than benefit.

The display section looks good, but a “use view transform” checkbox that overrides the rest of it with the main scene CM settings would be good, and probably should be on by default, to ensure the render view is WYSIWYG for the output file.

This or the dialog always opens with the main scene CM settings preselected. So if nothing is manually changed WYSIWYG. Same goes for the color-space-drop-down list, where the color space of the image-data-block or scene linear for Renders (e.g. OpenEXR) or as fallback, should be preselected. Your idea with the checkbox is safer, but it's an extra click.

Btw, the Sky texture DOES support color management, it relies on the OCIO “xyz” role to tell it how to convert from XYZ to the OCIO config’s reference space, from which it can then find its way to the space defined for the “rendering” role.

I tried to get that to work, but I wasn't successful yet. The "XYZ"-role gets ignored in my case (I'm currently on blender 3.0 beta). Here is the config I am testing with. config.ocio
Display: sRGB, View Transform: Un-tone-mapped should look the same as default blender: sRGB, Standard. Scene linear space is ACEScg. The blackbody node just outputs its Rec.709 colors directly into ACEScg scene linear, ignoring the "XYZ"-role. Sky Texture doesn't work as expected even with Rec.709 scene linear space. I haven't figured out what the problem with the Sky Texture is either.

> The “Scene” section is probably unnecessary, OpenEXR really shouldn’t have output CM applied to it So Log space (e.g. ACEScct, Cineon) exports isn't a thing? Of course one can always get the log from the scene linear later. In the case of OpenEXR it might be uncommon to have anything else than scene linear, but being able to convert primaries (AP0, AP1, Rec.709) might be useful on export. For other formats like saving textures, choosing color space might be useful and if the file saving is modified to run a color conversion before encoding the image file, it doesn't matter what file type. It would mean no additional work to have the dialog also for OpenEXR, but of course it can become a cause of error, if unknowingly changed. > And any other image format you probably want to perform a scene>display conversion Are there textures, where someone wants to convert different color spaces (AP0, AP1, Rec.709)? Having the color conversion on file saving in general possible, could solve many color space issues, but in the end it's a question of design philosophy. Do you want to give users the option, or does it create more confusion than benefit. > The display section looks good, but a “use view transform” checkbox that overrides the rest of it with the main scene CM settings would be good, and probably should be on by default, to ensure the render view is WYSIWYG for the output file. This or the dialog always opens with the main scene CM settings preselected. So if nothing is manually changed WYSIWYG. Same goes for the color-space-drop-down list, where the color space of the image-data-block or scene linear for Renders (e.g. OpenEXR) or as fallback, should be preselected. Your idea with the checkbox is safer, but it's an extra click. > Btw, the Sky texture DOES support color management, it relies on the OCIO “xyz” role to tell it how to convert from XYZ to the OCIO config’s reference space, from which it can then find its way to the space defined for the “rendering” role. I tried to get that to work, but I wasn't successful yet. The "XYZ"-role gets ignored in my case (I'm currently on blender 3.0 beta). Here is the config I am testing with. [config.ocio](https://archive.blender.org/developer/F12667646/config.ocio) Display: sRGB, View Transform: Un-tone-mapped should look the same as default blender: sRGB, Standard. Scene linear space is ACEScg. The blackbody node just outputs its Rec.709 colors directly into ACEScg scene linear, ignoring the "XYZ"-role. Sky Texture doesn't work as expected even with Rec.709 scene linear space. I haven't figured out what the problem with the Sky Texture is either.

One useful option when saving linear EXR images would be to apply scene exposure. That would save one extra step of having to match exposure in external compositor. Full Exposure and Gamma sliders are probably an overkill, just a checkbox would be enough.

One useful option when saving linear EXR images would be to apply scene exposure. That would save one extra step of having to match exposure in external compositor. Full Exposure and Gamma sliders are probably an overkill, just a checkbox would be enough.
Member

Removed subscriber: @Mets

Removed subscriber: @Mets

Removed subscriber: @BintangPratama

Removed subscriber: @BintangPratama

Added subscriber: @chelaru

Added subscriber: @chelaru

Added subscriber: @Nurb2Kea

Added subscriber: @Nurb2Kea

Added subscriber: @AlexeyAdamitsky

Added subscriber: @AlexeyAdamitsky

This issue was referenced by 2b80bfe9d0

This issue was referenced by 2b80bfe9d0e94ba5fae1dccf6eee702fc64df049

This issue was referenced by 33f5e8f239

This issue was referenced by 33f5e8f2391944acf8c6cc56bcc352bc10af016c

I finally found out why the sky texture is not working correctly with other configs. The aces_interchange role overrides the xyz role as shown in this [commit ]] or directly in source. This is nowhere mentioned in the [ https:*docs.blender.org/manual/en/latest/render/color_management.html | manual and the reason why the xyz role never had an impact in my config since the aces_interchange is defined.
Furthermore there appears to be an error in the blender code, which causes aces 2065-1 to be interpreted in a wrong way by Blender and causes a color shift in the sky texture. However the sky texture renders correctly with the default config, because it does the same error like in the Blender code, which cancel each other out. I descriped and reported the bug here: #95368.

I finally found out why the sky texture is not working correctly with other configs. The aces_interchange role overrides the xyz role as shown in this [commit ]] or directly in source. This is nowhere mentioned in the [[ https:*docs.blender.org/manual/en/latest/render/color_management.html | manual ](https:*developer.blender.org/rCad4b6c40f1fa584f425937838b8aaf66f9ad1168) and the reason why the xyz role never had an impact in my config since the aces_interchange is defined. Furthermore there appears to be an error in the blender code, which causes aces 2065-1 to be interpreted in a wrong way by Blender and causes a color shift in the sky texture. However the sky texture renders correctly with the default config, because it does the same error like in the Blender code, which cancel each other out. I descriped and reported the bug here: #95368.

Removed subscriber: @item412

Removed subscriber: @item412

Added subscriber: @ssh4

Added subscriber: @ssh4

Let me add some more issues that make ACES unusable in Blender.

At first current internal Blender ACES config completely lack of ACES color spaces, so no one even know that Blender use Ocio internally and have support for this.
In config only defined Classic Blender color spaces and look transforms.
And anyone who need use ACES color spaces usually follow variable web guides to download OCIO 1.2 config and set OCIO environment variable to downloaded ocio 1.2 config. For example original https://github.com/colour-science/OpenColorIO-Configs/tree/feature/aces-1.2-config
This immediately make available all ACES as well as hundreds of un-needed color profiles for Arri, Canon, Panasonic, RED and other cams. And immediately catch https://developer.blender.org/T72093 UX/UI bug with unusable for big lists color space selection menus.
After some cleanup of default OCIO config, and in some latest 3.2 builds this lists become usable but user found that old projects with sRGB, Filmic, etc. Open completely unusable, because all textures now open as ACES-AP0. Every new texture need manually switched to sRGB or Linear sRGB that make this step extremely slow on 8-16K 16bit textures that looks like Blender re read every time when user switch color space for texture.
And later, when user want to model something, him will find that Matcaps made in sRGB or Linear sRGB show totally wrong.
FLnG8dKUYAAuUnz.jpg
And no way to adjust Color Settings to make matcaps looks as they are designed.

I tried merge ocio and blender ocio configs, and this definitely possible. But i stick with "defaults". Blender expect default Linear (Utility) sRGB, Ocio expecting default ACES or ACEScg.

Probably solution in correct use of aliases, but not really sure who can do this. Blender devs or ACESdevs or this required work for both teams together.

Let me add some more issues that make ACES unusable in Blender. At first current internal Blender ACES config completely lack of ACES color spaces, so no one even know that Blender use Ocio internally and have support for this. In config only defined Classic Blender color spaces and look transforms. And anyone who need use ACES color spaces usually follow variable web guides to download OCIO 1.2 config and set OCIO environment variable to downloaded ocio 1.2 config. For example original https://github.com/colour-science/OpenColorIO-Configs/tree/feature/aces-1.2-config This immediately make available all ACES as well as hundreds of un-needed color profiles for Arri, Canon, Panasonic, RED and other cams. And immediately catch https://developer.blender.org/T72093 UX/UI bug with unusable for big lists color space selection menus. After some cleanup of default OCIO config, and in some latest 3.2 builds this lists become usable but user found that old projects with sRGB, Filmic, etc. Open completely unusable, because all textures now open as ACES-AP0. Every new texture need manually switched to sRGB or Linear sRGB that make this step extremely slow on 8-16K 16bit textures that looks like Blender re read every time when user switch color space for texture. And later, when user want to model something, him will find that Matcaps made in sRGB or Linear sRGB show totally wrong. ![FLnG8dKUYAAuUnz.jpg](https://archive.blender.org/developer/F12867942/FLnG8dKUYAAuUnz.jpg) And no way to adjust Color Settings to make matcaps looks as they are designed. I tried merge ocio and blender ocio configs, and this definitely possible. But i stick with "defaults". Blender expect default Linear (Utility) sRGB, Ocio expecting default ACES or ACEScg. Probably solution in correct use of aliases, but not really sure who can do this. Blender devs or ACESdevs or this required work for both teams together.

Added subscriber: @renderart

Added subscriber: @renderart

Added subscriber: @Steven-6

Added subscriber: @Steven-6

This issue was referenced by 7aab508e32

This issue was referenced by 7aab508e3273ae1762ae815bbecc8842938f0926
Member

Added subscribers: @Eary, @dgsantana

Added subscribers: @Eary, @dgsantana

Removed subscriber: @Steven-6

Removed subscriber: @Steven-6

Added subscriber: @Harvester

Added subscriber: @Harvester

I just noticed the updates on the task and wanted to float the suggestion of giving the user the choice of packing the config and luts into the blend file. So full portability even with custom configs within one blend file is retained.

The implementation could work something like this:

  • Add a checkbox to the File>External data menu to pack the OCIO config and it's dependencies into blend file

  • On File opening: look for packed config first, and fallback to application default config

  • Display a Warning when there was a mismatch (e.g. in name) of the scene linear color space the scene was saved in and the one used in the config used on opening it

Something else to consider:

  • Internally, save all colors in the color space with aces_interchange role if defined, to make colors config agnostic and allow for automatic transformation on opening the blend file with a different config, that has aces_interchange correctly defined
I just noticed the updates on the task and wanted to float the suggestion of giving the user the choice of packing the config and luts into the blend file. So full portability even with custom configs within one blend file is retained. The implementation could work something like this: - Add a checkbox to the `File>External` data menu to pack the OCIO config and it's dependencies into blend file - On File opening: look for packed config first, and fallback to application default config - Display a Warning when there was a mismatch (e.g. in name) of the scene linear color space the scene was saved in and the one used in the config used on opening it Something else to consider: - Internally, save all colors in the color space with `aces_interchange` role if defined, to make colors config agnostic and allow for automatic transformation on opening the blend file with a different config, that has `aces_interchange` correctly defined

I followed this thread 'Color Management Improvements', for a long time.
Now, I got an e-mail notification about ICC Profile and ACES.
Unfortunately, I am not a color scientist (We had one in the thread), but as I experienced ACES, this is going wrong. It has some of the strange kinds of hue shift bands we see also in the default view.
And I thought ICC profile is not applicable for Blender?

I followed this thread 'Color Management Improvements', for a long time. Now, I got an e-mail notification about ICC Profile and ACES. Unfortunately, I am not a color scientist (We had one in the thread), but as I experienced ACES, this is going wrong. It has some of the strange kinds of hue shift bands we see also in the default view. And I thought ICC profile is not applicable for Blender?

In #68926#1342913, @RobertWesseling wrote:
I followed this thread 'Color Management Improvements', for a long time.
Now, I got an e-mail notification about ICC Profile and ACES.
Unfortunately, I am not a color scientist (We had one in the thread), but as I experienced ACES, this is going wrong. It has some of the strange kinds of hue shift bands we see also in the default view.
And I thought ICC profile is not applicable for Blender?

True. Everybody's hopped on the Aces train despite the fact that it's far from ideal. I think Blender should be Aces or Filmic agnostic, but behave correctly as much as possible in majority on scenarios.
In the meantime look at this nasty test
filmic_aces_exp7.png

> In #68926#1342913, @RobertWesseling wrote: > I followed this thread 'Color Management Improvements', for a long time. > Now, I got an e-mail notification about ICC Profile and ACES. > Unfortunately, I am not a color scientist (We had one in the thread), but as I experienced ACES, this is going wrong. It has some of the strange kinds of hue shift bands we see also in the default view. > And I thought ICC profile is not applicable for Blender? True. Everybody's hopped on the Aces train despite the fact that it's far from ideal. I think Blender should be Aces or Filmic agnostic, but behave correctly as much as possible in majority on scenarios. In the meantime look at this nasty test ![filmic_aces_exp7.png](https://archive.blender.org/developer/F13009299/filmic_aces_exp7.png)

Let's keep this task focused on development planning, and leave the discussion for relevant devtalk topics. Please note:

  • There are two distinct parts to ACES, the linear color spaces and the view tranform, one can be used without the other.
  • Being able to render to the native color space of the monitor using an ICC profile is a feature of OpenColorIO that we would like to support, there's no problem using that with ACES.
Let's keep this task focused on development planning, and leave the discussion for relevant devtalk topics. Please note: * There are two distinct parts to ACES, the linear color spaces and the view tranform, one can be used without the other. * Being able to render to the native color space of the monitor using an ICC profile is a feature of OpenColorIO that we would like to support, there's no problem using that with ACES.
Contributor

I noticed this:
029b0df81a

Not sure but I believe the lastest daily build I am using (b90e892a1757) is already the version with this commit.

Keep the existing Rec.709 fit and convert to other colorspace if needed, it seems accurate enough in practice, and keeps the same performance for the default case.

Sadly this doesn't work. By doing so you are still hardcoding Rec.709 in your blackbody node, see my test result here:
image.png

Even with a wider gamut colorspace as the working space, the blackbody node would output this clipped result, that straight line right there is the edge of the Rec.709 gamut triangle.

AFAIK, the proper way to do it is to use CIE 1931 XYZ as the standard for blackbody chromaticity, and then convert it to other spaces as needed, instead of "Keep the existing Rec.709 fit".

It is essential to use CIE 1931 XYZ because this is basically the working standard for chromaticity, literally every single RGB colorspace needs to use CIE XYZ as a standard reference, even ACEScg and ACES 2065-1. That's why I believe replacing the XYZ role with ACES_interchange is such a bad idea. CIE XYZ is literally the start of everything. CIE XYZ is a reprojection from LMS model which stands for Long, Middle, and Short cone cells in our human eye. CIE 1931 XYZ is not just a "wider gamut RGB colorspace similar to ACES", no, it is literally the pre-existing standard for all RGB colorspaces. At least this is how I understand it. Things need to be done properly.

I noticed this: 029b0df81a Not sure but I believe the lastest daily build I am using (`b90e892a1757`) is already the version with this commit. >Keep the existing Rec.709 fit and convert to other colorspace if needed, it seems accurate enough in practice, and keeps the same performance for the default case. Sadly this doesn't work. By doing so you are still hardcoding Rec.709 in your blackbody node, see my test result here: ![image.png](https://archive.blender.org/developer/F13010884/image.png) Even with a wider gamut colorspace as the working space, the blackbody node would output this clipped result, that straight line right there is the edge of the Rec.709 gamut triangle. AFAIK, the proper way to do it is to use `CIE 1931 XYZ` as the standard for blackbody chromaticity, and then convert it to other spaces as needed, instead of "Keep the existing Rec.709 fit". It is essential to use `CIE 1931 XYZ` because this is basically the working standard for chromaticity, literally every single RGB colorspace needs to use CIE XYZ as a standard reference, even ACEScg and ACES 2065-1. That's why I believe replacing the XYZ role with ACES_interchange is such a bad idea. CIE XYZ is literally the start of everything. CIE XYZ is a reprojection from LMS model which stands for Long, Middle, and Short cone cells in our human eye. CIE 1931 XYZ is not just a "wider gamut RGB colorspace similar to ACES", no, it is literally **the** pre-existing standard for all RGB colorspaces. At least this is how I understand it. Things need to be done properly.

Please report potential bugs to the bug tracker, not in this task.

Please report potential bugs to the bug tracker, not in this task.

For Blender to be OCIO config agnostic and work in arbitrary colorspaces it is necessary to define built-in color producing functions like a Blackbody or Sky Texture node in a color space with a special "interchange" role. It should be preferred to use an color space for that purpose that theoretically encompasses all colors visible to the human eye. There are several color spaces that include the whole visible spectrum (without negative coordinate values) as well as even more "imaginary" colors, which are just mathematical artefacts of the way the visible spectrum has been parametrized and physically can't exist.

Two prominent examples of such color spaces are the ACES 2065-1 which is not inherently flawed or the cause of the problems of the ACES view transform. It's mere a "coordinate system for colors". And the CIE-XYZ [D65](https://archive.blender.org/developer/D65). Both of these color spaces would work fine for the role as "interchange" color space and it's basically a question of which one is more established. ACES tries to establish itself as a standard in the film industry and CIE has been around since 1931.

Personally I'd say CIE-XYZ fits better for applications with a physical/scientifical background and ACES 2065-1 for film industry related things. So I find CIE more fitting as an interchange role for things with the aspiration to be somewhat physically/scientifically based like Blackbody, Sky Texture etc. One is more likely to find publishings in that field that are based on XYZ than on ACES. Therefore I'd vote for a comeback of the XYZ role in the config, more precisely an CIE-XYZ [D65](https://archive.blender.org/developer/D65) interchange role.

To address the problems of the ACES view transform that creates these unpleasant color shifts in certain extreme lighting scenarios, especially with blue colors:
There will always be problems like these with RGB rendering. Only spectral renderers can produce accurate colors, but at high cost, both computation wise aswell as configuration/complexity wise (materials etc). But ACES view transforms are more common and standardized than the Blender Filmic one, which is only used by Blender itself. So to create a behavior more similar to other software in the industry, adopting the ACES View transform is a good idea. Not to insult anybody that worked on the Blender Filmic View Transform (it is great and was a real step foreward in terms of realism compared to before), but there was probably a lot more work commited to engineering the ACES View Transform (at least it should) and there will probably be more commited to maintain and improve it in the future. And with OCIO having a built-in ACES View Transform that is performant and not LuT based, aswell as maintained by OCIO, which Blender is already commited to, why not use it instead?

Feel free to disagree or give your own input to the topic

Greetings

For Blender to be OCIO config agnostic and work in arbitrary colorspaces it is necessary to define built-in color producing functions like a Blackbody or Sky Texture node in a color space with a special "interchange" role. It should be preferred to use an color space for that purpose that theoretically encompasses all colors visible to the human eye. There are several color spaces that include the whole visible spectrum (without negative coordinate values) as well as even more "imaginary" colors, which are just mathematical artefacts of the way the visible spectrum has been parametrized and physically can't exist. Two prominent examples of such color spaces are the `ACES 2065-1` which is not inherently flawed or the cause of the problems of the ACES view transform. It's mere a "coordinate system for colors". And the `CIE-XYZ [D65](https://archive.blender.org/developer/D65)`. Both of these color spaces would work fine for the role as "interchange" color space and it's basically a question of which one is more established. ACES tries to establish itself as a standard in the film industry and CIE has been around since 1931. Personally I'd say CIE-XYZ fits better for applications with a physical/scientifical background and ACES 2065-1 for film industry related things. So I find CIE more fitting as an interchange role for things with the aspiration to be somewhat physically/scientifically based like Blackbody, Sky Texture etc. One is more likely to find publishings in that field that are based on XYZ than on ACES. Therefore I'd vote for a comeback of the XYZ role in the config, more precisely an `CIE-XYZ [D65](https://archive.blender.org/developer/D65)` interchange role. To address the problems of the ACES view transform that creates these unpleasant color shifts in certain extreme lighting scenarios, especially with blue colors: There will always be problems like these with RGB rendering. Only spectral renderers can produce accurate colors, but at high cost, both computation wise aswell as configuration/complexity wise (materials etc). But ACES view transforms are more common and standardized than the Blender Filmic one, which is only used by Blender itself. So to create a behavior more similar to other software in the industry, adopting the ACES View transform is a good idea. Not to insult anybody that worked on the Blender Filmic View Transform (it is great and was a real step foreward in terms of realism compared to before), but there was probably a lot more work commited to engineering the ACES View Transform (at least it should) and there will probably be more commited to maintain and improve it in the future. And with OCIO having a built-in ACES View Transform that is performant and not LuT based, aswell as maintained by OCIO, which Blender is already commited to, why not use it instead? Feel free to disagree or give your own input to the topic Greetings
Contributor

In #68926#1343546, @Accelero wrote:
And the CIE-XYZ [D65](https://archive.blender.org/developer/D65). Both of these color spaces would work fine for the role as "interchange" color space and it's basically a question of which one is more established. ACES tries to establish itself as a standard in the film industry and CIE has been around since 1931.

My understanding of CIE 1931 XYZ is a bit different.

The following is just my current understanding, please correct me if I am wrong.

AFAIK, CIE 1931 XYZ is a reprojection from LMS color model. And LMS color model is the direct study of human eyes' cone cells. Therefore CIE 1931 XYZ is directly related to human eye cells research. It is not a "wider gamut colorspace that encompasses all colors visible to the human eye", the cause-and-result relationship is inverted if you think of it that way. Because it is directly related to human eye cone cells response, therefore it naturally covers all colors we can see. And all later RGB colorspaces each needs to define their primaries with three sets of CIE XYZ values, becuase CIE XYZ is a reprojection of LMS, which means each RGB colorspace needs to use CIE XYZ to define their primaries cone cell response.

Both ACES 2065-1 and ACEScg are problematic in a sense that they are defining their primaries with CIE XYZ just like all other RGB spaces, but the underlaying cone cells response level does not exist, because it is outside of the horseshoe-shaped standard observer model, it becomes a mere mathematical byproduct of the CIE XYZ math reprojection. So in my understanding, ACES is just not capable of replacing CIE XYZ, because it is built on top of CIE XYZ's mathmatical byproduct, not human cone cell responses. The situation is not just about "how large the gamut is, can it covers the entire horseshoe", it is also about "how it is related back to the meaning of color"

In #68926#1343546, @Accelero wrote:
Personally I'd say CIE-XYZ fits better for applications with a physical/scientifical background and ACES 2065-1 for film industry related things.

This is a misunderstanding of what CIE XYZ is I believe. Again this is just my current understanding, correct me if I am wrong. As I said, CIE 1931 XYZ is directly related to human eye cone cell research LMS, therefore it is not really about physics, it's more about the standard observer human eye. (Though you could say that LMS is about cone cells' response to wavelengths and wavelengths are physics, I guess.) ACES 2065-1 is built on top of CIE 1931 XYZ since it still needs to define its three primaries with three sets of XYZ values, but it has some controversy because it does not make sense in the human cone cell response aspect. It is important to understand that color is not a physical property, but a combination of biological and psychological phenomenon in human visual perception.

> In #68926#1343546, @Accelero wrote: > And the `CIE-XYZ [D65](https://archive.blender.org/developer/D65)`. Both of these color spaces would work fine for the role as "interchange" color space and it's basically a question of which one is more established. ACES tries to establish itself as a standard in the film industry and CIE has been around since 1931. My understanding of CIE 1931 XYZ is a bit different. The following is just my current understanding, please correct me if I am wrong. AFAIK, CIE 1931 XYZ is a reprojection from LMS color model. And LMS color model is the direct study of human eyes' cone cells. Therefore CIE 1931 XYZ is directly related to human eye cells research. It is not a "wider gamut colorspace that encompasses all colors visible to the human eye", the cause-and-result relationship is inverted if you think of it that way. Because it is directly related to human eye cone cells response, therefore it naturally covers all colors we can see. And all later RGB colorspaces each needs to define their primaries with three sets of CIE XYZ values, becuase CIE XYZ is a reprojection of LMS, which means each RGB colorspace needs to use CIE XYZ to define their primaries cone cell response. Both `ACES 2065-1` and `ACEScg` are problematic in a sense that they are defining their primaries with CIE XYZ just like all other RGB spaces, but the underlaying cone cells response level does not exist, because it is outside of the horseshoe-shaped standard observer model, it becomes a mere mathematical byproduct of the CIE XYZ math reprojection. So in my understanding, ACES is just not capable of replacing CIE XYZ, because it is built on top of CIE XYZ's mathmatical byproduct, not human cone cell responses. The situation is not just about "how large the gamut is, can it covers the entire horseshoe", it is also about "how it is related back to the meaning of color" > In #68926#1343546, @Accelero wrote: > Personally I'd say CIE-XYZ fits better for applications with a physical/scientifical background and ACES 2065-1 for film industry related things. This is a misunderstanding of what CIE XYZ is I believe. Again this is just my current understanding, correct me if I am wrong. As I said, CIE 1931 XYZ is directly related to human eye cone cell research LMS, therefore it is not really about physics, it's more about the standard observer human eye. (Though you could say that LMS is about cone cells' response to wavelengths and wavelengths are physics, I guess.) ACES 2065-1 is built on top of CIE 1931 XYZ since it still needs to define its three primaries with three sets of XYZ values, but it has some controversy because it does not make sense in the human cone cell response aspect. It is important to understand that color is not a physical property, but a combination of biological and psychological phenomenon in human visual perception.

Added subscriber: @Fastfinger

Added subscriber: @Fastfinger

I created an OCIO config so that default-Blender, ACES, TCAMv2 and AgX configurations can be used all together.

While creating this I've marked 2 issues.

  • Blackbody node becomes inaccurate. David explains how this should be fixed pretty well in their comment. (I created a hackjob node-tree to use blackbody with ACEScg using values generated by this )
  • The RGB values that are saved in Blender are not color-space aware. Which means that once the scene/rendering space is changed old RGB values are used in previous files (such as diffuse or emission colors) does not get interpreted resulting in over-saturated colors while going to a larger color space and de-saturated colors when going into a smaller space. I suggest that Blender either saves the scene/rendering space tag so that OCIO can assign new values if it's changed. Or Blender gives the user an option to choose what color space RGB values are meant for (like the textures)

Also while making this config I wanted to hide some colors paces from the shader editor but keep them present in the display section. Only way I could do this is if I named the family to be "display" (I don't know if there's a better way or not). It can be confusing if same config is used for any other software since they present different segments for different families.

You can find the config I mentioned here, Google Drive link to Merged OCIO config

And I made a video about this with some additional details, here

I created an OCIO config so that default-Blender, ACES, TCAMv2 and AgX configurations can be used all together. While creating this I've marked 2 issues. - Blackbody node becomes inaccurate. David explains how this should be fixed pretty well in their comment. (I created a hackjob node-tree to use blackbody with ACEScg using values generated by [this ](https://share.streamlit.io/mrlixm/streamlit_temperature2rgb/main/src/app.py)) - The RGB values that are saved in Blender are not color-space aware. Which means that once the scene/rendering space is changed old RGB values are used in previous files (such as diffuse or emission colors) does not get interpreted resulting in over-saturated colors while going to a larger color space and de-saturated colors when going into a smaller space. I suggest that Blender either saves the scene/rendering space tag so that OCIO can assign new values if it's changed. Or Blender gives the user an option to choose what color space RGB values are meant for (like the textures) Also while making this config I wanted to hide some colors paces from the shader editor but keep them present in the display section. Only way I could do this is if I named the family to be "display" (I don't know if there's a better way or not). It can be confusing if same config is used for any other software since they present different segments for different families. You can find the config I mentioned here, [Google Drive link to Merged OCIO config](https://drive.google.com/file/d/1lubkN9Lwx_gyEOCGAFhyqnTusyyzvtiU/view) And I made a video about this with some additional details, [here ](https://youtu.be/RigdyzR_cf0)

That's my setup, and I'm pretty happy with it!
What's wrong with this setup?
config.ocio

That's my setup, and I'm pretty happy with it! What's wrong with this setup? [config.ocio](https://archive.blender.org/developer/F13032051/config.ocio)
Contributor

In #68926#1347590, @Fastfinger wrote:
I created an OCIO config so that default-Blender, ACES, TCAMv2 and AgX configurations can be used all together.

Interesting attempt. Haven't throughly tested it but from my first glance, your Views should be Displays and your Displays should be Views.
image.png
image.png

Also your Film Looks don't work. I mean... Those Film Looks were present in Blender 2.79 but removed in 2.80, the removal was for a good reason: They don't work:
image.png

> In #68926#1347590, @Fastfinger wrote: > I created an OCIO config so that default-Blender, ACES, TCAMv2 and AgX configurations can be used all together. Interesting attempt. Haven't throughly tested it but from my first glance, your Views should be Displays and your Displays should be Views. ![image.png](https://archive.blender.org/developer/F13032564/image.png) ![image.png](https://archive.blender.org/developer/F13032566/image.png) Also your Film Looks don't work. I mean... Those Film Looks were present in Blender 2.79 but removed in 2.80, the removal was for a good reason: They don't work: ![image.png](https://archive.blender.org/developer/F13032560/image.png)

In #68926#1347951, @Eary wrote:
your Views should be Displays and your Displays should be Views.

Yeah I agree with that, I found this an easier way to organize it within Blender. Also, wanted to keep how different views name their identical displays.

In #68926#1347951, @Eary wrote:
Also your Film Looks don't work. I mean...

They are just an attempt at achieving some kind of look. I would like to start a discussion on this and figure out a way that would actually work.

I'm aware that Filmlight has its VisionLook which is paid and I haven't gotten the chance to play around with that.

I'd like some feedback on this, I'm using Cineon-log as a basis for FPE because this is what I'm used to from Davinci Resolve, but clearly it's not working. How should I approach it?

> In #68926#1347951, @Eary wrote: >your Views should be Displays and your Displays should be Views. Yeah I agree with that, I found this an easier way to organize it within Blender. Also, wanted to keep how different views name their identical displays. > In #68926#1347951, @Eary wrote: > Also your Film Looks don't work. I mean... They are just an attempt at achieving some kind of look. I would like to start a discussion on this and figure out a way that would actually work. I'm aware that Filmlight has its VisionLook which is paid and I haven't gotten the chance to play around with that. I'd like some feedback on this, I'm using Cineon-log as a basis for FPE because this is what I'm used to from Davinci Resolve, but clearly it's not working. How should I approach it?

Added subscriber: @donmccurdy

Added subscriber: @donmccurdy

This issue was referenced by 5baa3ecda6

This issue was referenced by 5baa3ecda66337c0584f0bc6c6e7af0a6c0f6320

Added subscriber: @basvanbergen

Added subscriber: @basvanbergen

This issue was referenced by 469ee7ff15

This issue was referenced by 469ee7ff1529a1b28ce0b300835ebc42d5c5362f

This issue was referenced by bdab538b30

This issue was referenced by bdab538b3019406cfbd53d99bc40c4dbae27393c

This issue was referenced by None@62941

This issue was referenced by None@62941

This issue was referenced by 9d8fb80f21

This issue was referenced by 9d8fb80f218f05f743943a289e2aad579e709058

This issue was referenced by None@62943

This issue was referenced by None@62943

Added subscriber: @Emi_Martinez

Added subscriber: @Emi_Martinez

Added subscriber: @Dadido3

Added subscriber: @Dadido3
Brecht Van Lommel added this to the Render & Cycles project 2023-02-07 19:08:06 +01:00
Philipp Oeser removed the
Interest
Render & Cycles
label 2023-02-09 13:59:49 +01:00

I'd like to note that Blender's OCIO implementation lacks support for useful QoL/UX features, such as regex file rule support

@Fastfinger mentioned this when i brought it up, thinking it was an issue with his config. But it was actually a lack of functionality within Blender itself.
https://github.com/Joegenco/PixelManager/issues/3

https://github.com/Joegenco/PixelManager/blob/master/config.ocio

example:

`file_rules:

  • ! {name: PBRMaps, regex: ".(_(Normal|normal|Roughness|roughness|Metallic|metallic|Metal|metal|Height|height|Displacement|displacement|AmbientOcclusion|ambientOcclusion|AO|ao|Specular|specular|Glossiness|glossiness|Gloss|gloss|Cavity|cavity|Subsurface|subsurface|SubsurfaceScattering|subsurfaceScattering|SSS|sss|Alpha|alpha|Opacity|opacity|_nm|_rm|_mm|_hm|_dm|_ao|_sm|_gm|_cm|_ss|_sssm|_sss|_am|_om)).", colorspace: Non-Color}
  • ! {name: OpenEXR, extension: "exr", pattern: "*", colorspace: Linear Rec.709}
  • ! {name: hdr, extension: "hdr", pattern: "*", colorspace: Linear Rec.709}
  • ! {name: ColorSpaceNamePathSearch}
  • ! {name: Default, colorspace: sRGB}`

This would make users lives easier, saving time changing colorspaces from sRGB to Non-color. This would also help mitigate problems with equivalent color spaces not being preserved when changing colorspaces. Ex. Someone who is using Filmic Non-Color, could have their non color texture be converted to ACES Utility Raw if it matches the regex, saving headache when using add-ons like PolyHaven's browser

I'd like to note that Blender's OCIO implementation lacks support for useful QoL/UX features, such as regex file rule support @Fastfinger mentioned this when i brought it up, thinking it was an issue with his config. But it was actually a lack of functionality within Blender itself. https://github.com/Joegenco/PixelManager/issues/3 https://github.com/Joegenco/PixelManager/blob/master/config.ocio example: `file_rules: - !<Rule> {name: PBRMaps, regex: ".*(_(Normal|normal|Roughness|roughness|Metallic|metallic|Metal|metal|Height|height|Displacement|displacement|AmbientOcclusion|ambientOcclusion|AO|ao|Specular|specular|Glossiness|glossiness|Gloss|gloss|Cavity|cavity|Subsurface|subsurface|SubsurfaceScattering|subsurfaceScattering|SSS|sss|Alpha|alpha|Opacity|opacity|_nm|_rm|_mm|_hm|_dm|_ao|_sm|_gm|_cm|_ss|_sssm|_sss|_am|_om)).*", colorspace: Non-Color} - !<Rule> {name: OpenEXR, extension: "exr", pattern: "*", colorspace: Linear Rec.709} - !<Rule> {name: hdr, extension: "hdr", pattern: "*", colorspace: Linear Rec.709} - !<Rule> {name: ColorSpaceNamePathSearch} - !<Rule> {name: Default, colorspace: sRGB}` This would make users lives easier, saving time changing colorspaces from sRGB to Non-color. This would also help mitigate problems with equivalent color spaces not being preserved when changing colorspaces. Ex. Someone who is using Filmic Non-Color, could have their non color texture be converted to ACES Utility Raw if it matches the regex, saving headache when using add-ons like PolyHaven's browser

Hello again!

I am expanding the Blender 4.0 config to have a lot of the things that the checklist in the original post included.
Its over here.

What would be cool is that if Blender had the option to assign a colorspace to the RGB node along with the other "RGB" value pickers.
By default, this would be in the rendering space. However it would give the option to the user to manage the RGB values by colorspace assigned to them AND it would allow for rendering space to be changed without affecting the RGB values.

Blender currently assumes all RGB values are in the rendering space, hence if an asset that was originally created for Linear Rec709 is used in any other rendering space (Be it Rec.2020 or ACEScg..) those values end up moving coordinates since Rec.2020 RGB is in a different position than Rec.709 RGB, adding a "selector" to RGB like the textues, would solve this.

Hello again! I am expanding the Blender 4.0 config to have a lot of the things that the checklist in the original post included. Its over [here](https://github.com/Joegenco/PixelManager). What would be cool is that if Blender had the option to assign a colorspace to the RGB node along with the other "RGB" value pickers. By default, this would be in the rendering space. However it would give the option to the user to manage the RGB values by colorspace assigned to them AND it would allow for rendering space to be changed without affecting the RGB values. Blender currently assumes all RGB values are in the rendering space, hence if an asset that was originally created for Linear Rec709 is used in any other rendering space (Be it Rec.2020 or ACEScg..) those values end up moving coordinates since Rec.2020 RGB is in a different position than Rec.709 RGB, adding a "selector" to RGB like the textues, would solve this.

@Fastfinger if you want contribute improvements to the config with Blender, it can be done with incremental pull requests that add one feature at a time. For example one for ACES RRT view transform, or an additional display, or additional input color spaces, etc.

We have no plans to add a configurable color space for every color property, but rather to provide some mechanism to convert between color spaces on import/export/link/append. I think doing these kinds of color space conversions at runtime leads to a messy workflow and inefficiencies.

@Fastfinger if you want contribute improvements to the config with Blender, it can be done with incremental pull requests that add one feature at a time. For example one for ACES RRT view transform, or an additional display, or additional input color spaces, etc. We have no plans to add a configurable color space for every color property, but rather to provide some mechanism to convert between color spaces on import/export/link/append. I think doing these kinds of color space conversions at runtime leads to a messy workflow and inefficiencies.

We have no plans to add a configurable color space for every color property, but rather to provide some mechanism to convert between color spaces on import/export/link/append. I think doing these kinds of color space conversions at runtime leads to a messy workflow and inefficiencies.

So like having the ability to pack non-default color space information in the blend file? That would solves certain workflow issues, such as external render farms or exchanging files. Ex. Someone with an ACES config could pack their config with whatever file they are working with and share it with someone who is using AgX

My apologies if I come across as treating this like it's right click select.

> We have no plans to add a configurable color space for every color property, but rather to provide some mechanism to convert between color spaces on import/export/link/append. I think doing these kinds of color space conversions at runtime leads to a messy workflow and inefficiencies. So like having the ability to pack non-default color space information in the blend file? That would solves certain workflow issues, such as external render farms or exchanging files. Ex. Someone with an ACES config could pack their config with whatever file they are working with and share it with someone who is using AgX My apologies if I come across as treating this like it's right click select.

So like having the ability to pack non-default color space information in the blend file? That would solves certain workflow issues, such as external render farms or exchanging files. Ex. Someone with an ACES config could pack their config with whatever file they are working with and share it with someone who is using AgX

The mechanism we plan to add is this from the issue description. We do not plan to pack configs, only include information about the scene linear color space in the .blend.

Convert between .blend files saved with a different config

    Save information about scene linear color space in .blend
    Auto convert all colors on link/append
    Option to convert when loading .blend with different config than it was saved as

This would allow some basic interop for assets created with a different configuration. But automatic conversion is never going to be perfect, and in general there should be an agreed color space at the start of a project.

> So like having the ability to pack non-default color space information in the blend file? That would solves certain workflow issues, such as external render farms or exchanging files. Ex. Someone with an ACES config could pack their config with whatever file they are working with and share it with someone who is using AgX The mechanism we plan to add is this from the issue description. We do not plan to pack configs, only include information about the scene linear color space in the .blend. ``` Convert between .blend files saved with a different config Save information about scene linear color space in .blend Auto convert all colors on link/append Option to convert when loading .blend with different config than it was saved as ``` This would allow some basic interop for assets created with a different configuration. But automatic conversion is never going to be perfect, and in general there should be an agreed color space at the start of a project.

only include information about the scene linear color space in the .blend.

That is a great idea!

As long as the destination OCIO profile includes the colorspace or an alias of it this will work perfectly and users won't feel it.
Although this means it will need to allow minus values since some values will turn negative when doing this.

> only include information about the scene linear color space in the .blend. That is a great idea! As long as the destination OCIO profile includes the colorspace or an alias of it this will work perfectly and users won't feel it. Although this means it will need to allow minus values since some values will turn negative when doing this.

We may have to clamp those negative out of gamut values when going from wide gamut to a narrower gamut. In some cases they may work ok, in other cases they can break shaders, lights, painting, etc.

We may have to clamp those negative out of gamut values when going from wide gamut to a narrower gamut. In some cases they may work ok, in other cases they can break shaders, lights, painting, etc.

Hey all,

I am looking to make a simple contribution to Blender in this area. Okay the last time I wrote C++ code was in 1993 but I'm not going to let that stop me. There are two items in this task which seem like low-hanging fruit which I'd like to volunteer to take a bite if nobody else is actively working on it:

Support environment variable BLENDER_OCIO, then fall back to OCIO (existing behavior) if it doesn't exist.

I've already built my own Blender with this trivial feature so I'm past square one!

  • This will immediately alleviate pain for those like me who have downloaded @Fastfinger's streamlined OCIO config and want to use it in every version of Blender on their PC, including future ones they might install tomorrow.
  • And since the BLENDER_OCIO location might be safely writeable by Blender itself (unlike say C:\Program Files\Blender Foundation\...), it would be trivial for someone to make a python add-on with "Press this button to update to @Fastfinger's latest OCIO").

Provide a per-.blend file configuration parameter to point to an OCIO location, supporting \relative\to\project notation

This simple feature solves three problems:

  • I might have multiple projects based on different OCIO config and I don't want to fuss around with various wrapper scripts to set the environment
  • someone might give me a ZIP of a blend file and related unpacked files, and the OCIO config it depends on can come with it
  • I want to bundle an OCIO config into my ZIP file destined for a render farm like SheepIt

These are minor improvements with material benefits, which I think I am capable of implementing. BTW I fully support @frameshift's proposal of a full-featured, Nuke-like Color Management UI but I'm not ready to boil that ocean yet.

Thanks in advance for any feedback.
Jon

Hey all, I am looking to make a simple contribution to Blender in this area. Okay the last time I wrote C++ code was in 1993 but I'm not going to let that stop me. There are two items in this task which seem like low-hanging fruit which I'd like to volunteer to take a bite if nobody else is actively working on it: ### Support environment variable `BLENDER_OCIO`, then fall back to `OCIO` (existing behavior) if it doesn't exist. I've already built my own Blender with this trivial feature so I'm past square one! - This will immediately alleviate pain for those like me who have downloaded @Fastfinger's streamlined OCIO config and want to use it in every version of Blender on their PC, including future ones they might install tomorrow. - And since the `BLENDER_OCIO` location might be safely writeable by Blender itself (unlike say `C:\Program Files\Blender Foundation\...`), it would be trivial for someone to make a python add-on with "Press this button to update to @Fastfinger's latest OCIO"). ### Provide a per-`.blend` file configuration parameter to point to an OCIO location, supporting \\relative\to\project notation This simple feature solves three problems: - I might have multiple projects based on different OCIO config and I don't want to fuss around with various wrapper scripts to set the environment - someone might give me a ZIP of a blend file and related unpacked files, and the OCIO config it depends on can come with it - I want to bundle an OCIO config into my ZIP file destined for a render farm like SheepIt These are minor improvements with material benefits, which I think I am capable of implementing. BTW I fully support @frameshift's proposal of a full-featured, Nuke-like Color Management UI but I'm not ready to boil that ocean yet. Thanks in advance for any feedback. Jon

Why just not make as in most apps where user can define the path to config using a GUI in options?

And I feel that most logical UX still:
A checkbox: Allow to ignore global OCIO_CONFIG
A path to User OCIO config, that in case of empty fall back to BLENDER_OCIO or global OCIO_CONFIG.

That way allow users who need to have not only VFX industry color spaces, always have their own cherry picked configs.
And allow to avoid some developers who use global OCIO_CONFIGs (that can be complicated for non Linux users)

Why just not make as in most apps where user can define the path to config using a GUI in options? And I feel that most logical UX still: A checkbox: Allow to ignore global OCIO_CONFIG A path to User OCIO config, that in case of empty fall back to BLENDER_OCIO or global OCIO_CONFIG. That way allow users who need to have not only VFX industry color spaces, always have their own cherry picked configs. And allow to avoid some developers who use global OCIO_CONFIGs (that can be complicated for non Linux users)

I'd like to clarify a distinction between three proposed sources of OCIO config

  1. Blender standard OCIO config, shipped with Blender
  2. User-overridden OCIO config, specified by the proposed BLENDER_OCIO environment variable if it exists, and falling back to the OCIO environment variable if it exists
  3. Project-overridden OCIO config, which I'm proposing to make a UI field to provide a per-.blend file configuration parameter to point to an OCIO location, supporting \\relative\to\project notation

If you are suggesting we should also have a UI field to specify the user-overridden OCIO config (say in Preferences -> File Paths), instead of (or in addition to) adding a BLENDER_OCIO environment variable, that seems reasonable to me. There wouldn't really be a need for a BLENDER_OCIO environment variable at all in this case I suppose.

I'd like to clarify a distinction between three proposed sources of OCIO config 1. Blender standard OCIO config, shipped with Blender 2. User-overridden OCIO config, specified by the proposed `BLENDER_OCIO` environment variable if it exists, and falling back to the `OCIO` environment variable if it exists 3. Project-overridden OCIO config, which I'm proposing to make a UI field to provide a per-.blend file configuration parameter to point to an OCIO location, supporting `\\relative\to\project notation` If you are suggesting we should also have a UI field to specify the user-overridden OCIO config (say in Preferences -> File Paths), instead of (or in addition to) adding a `BLENDER_OCIO` environment variable, that seems reasonable to me. There wouldn't really be a need for a `BLENDER_OCIO` environment variable at all in this case I suppose.

Yes.

Usual CG artist on windows or macos work in GUI. And it’s better avoid Linux or coding UX patterns with environment variables when more user friendly allow change a settings via Options.

So I think that definitely should be settings via GUI that allow override any environment variables.
Because most of OCIO guides recommend to use OCIO Environment variable, that usually point to ocio config that never including blender specific settings.

Yes. Usual CG artist on windows or macos work in GUI. And it’s better avoid Linux or coding UX patterns with environment variables when more user friendly allow change a settings via Options. So I think that definitely should be settings via GUI that allow override any environment variables. Because most of OCIO guides recommend to use OCIO Environment variable, that usually point to ocio config that never including blender specific settings.

Makes sense. I hope nobody minds if I split this into a separate issue to track my area of focus, "improvements to specifying the OCIO configuration location" and leave this thread for the more esoteric discussion of "improving internal handling of colorspaces", which are far beyond my skill level and not likely to be developed by me. That way we can track (and hopefully close) the development and testing of that minor UI & functionality improvement, while leaving this thread to the ongoing thoughtful discussions about colorspace processing.

I will post a couple implementation details in my issue 127050 and welcome any feedback there.

Makes sense. I hope nobody minds if I split this into a separate issue to track my area of focus, ["improvements to specifying the OCIO configuration location"](https://projects.blender.org/blender/blender/issues/127050) and leave this thread for the more esoteric discussion of "improving internal handling of colorspaces", which are far beyond my skill level and not likely to be developed by me. That way we can track (and hopefully close) the development and testing of that minor UI & functionality improvement, while leaving this thread to the ongoing thoughtful discussions about colorspace processing. I will post a couple implementation details in [my issue 127050](https://projects.blender.org/blender/blender/issues/127050) and welcome any feedback there.

Also, since Linux wayland has color management support now, I think we should also add color management support for blender under linux+wayland.

Also, since Linux wayland has color management support now, I think we should also add color management support for blender under linux+wayland.
Iliya Katushenock removed the
Status
Confirmed
Severity
Normal
labels 2024-09-03 21:18:38 +02:00
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset System
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Viewport & EEVEE
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Asset Browser Project
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Module
Viewport & EEVEE
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Severity
High
Severity
Low
Severity
Normal
Severity
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No Assignees
68 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#68926
No description provided.