Commit Graph

46 Commits

Author SHA1 Message Date
Nathan Vegdahl
e26d287520 Fix #112018: increase AgX LUT resolution
AgX exhibited some banding-like artifacts that were due to being
approximated with a 3D LUT.  This commit resolves that by increasing
the LUT resolution enough to mitigate the artifacts and make them
unnoticeable.

Additionally:
- The previous LUTs were written in a space-inefficient way, using
  e.g. "0.000000" instead of "0".  The new LUTs are written more
  efficiently, avoiding quite as dramatic a file size increase as
  usually accompanies 3D LUT resolution increases.
- The previous LUTs included output values greater than 1.0, which was
  both incorrect for a tone mapper, and also pointless since Blender
  immediately clips them anyway.  The new LUTs clip to 1.0.  This also
  allows the more efficient writing to squeeze even more space savings
  out of the LUTs.
- The previous inverse AgX LUT contained NaNs.  Those have been
  replaced with 0.0 in the new inverse LUT.

Note that due to discrepancies between the LUTs previously provided
to Blender and the AgX scripts that were later published, the color
transform in these LUTs are slightly different.  But they are close, and
equivalently good.

Pull Request: https://projects.blender.org/blender/blender/pulls/113253
2023-10-06 10:12:24 +02:00
Zijun Zhou
23fc8126be Color management: Shrink Filmic LUT size down without noticeable difference
This PR shrinks the Filmic LUT's size down without causing noticeable
difference, making the overall LUT package size smaller. There should be no
functional change on the user end.

Pull Request: https://projects.blender.org/blender/blender/pulls/111380
2023-08-22 15:30:12 +02:00
Zijun Zhou
a9053f7efb Color management: Add AgX view transform and make it default
On a user level this view transform provides much better handling of colors in
the over-exposed areas.

With this configuration the following display devices are available, including
AgX view transform for them:
* sRGB
* Display P3
* Rec.1886
* Rec.2020

NOTE: There is no Filmic view transform available for the newly added display
devices.

AgX also brings an implementation of False Colors view transform, which replaces
Filmic-based, and is available for all display devices.

The backward compatibility is preserved. The new files will default to AgX view
transform, which makes it non-forward compatible.

More technical details is available in the original PR #106355.
Please note that the PR has been split into more incremental changes when
was landing.

Pull Request: https://projects.blender.org/blender/blender/pulls/111099
2023-08-22 12:53:15 +02:00
Zijun Zhou
6923f7a153 Color management: Add and Rename Colorspaces
This is the next step towards AgX view transform project.

This is a sanitization pass over the existing color space names, as well as
addition of some new spaces. For example, the name Linear makes no sense when
there are a bunch of Linear spaces. An aliases are included for backwards
compatibility.

Some of the space descriptions and family tags are also updated., which also
involves in putting `False Color` to `inactive_colorspaces` instead of using
`family: display` filtering.

The spaces are now:

- Linear components of the display spaces
  - Linear Rec.709
  - Linear DCI-P3 D65
  - Linear Rec.2020
- Linear ACES spaces
  - ACES2065-1
  - ACEScg (Changed from `Linear ACEScg` to `ACEScg` since ACEScg already
    implied a linear transfer function, otherwise using `Linear AP1 ACES`
    might make more sense. Same goes for ACES2065-1)
- Linear FilmLight E-Gamut
  This is for AgX's LUT input encoding. It can potentially be useful for interop.
- Display spaces
  - sRGB
  - Display P3
  - Rec.1886
  - Rec.2020
- Filmic Components
  - Filmic Log
  - Filmic sRGB
  - False Color

Ref #110685

Pull Request: https://projects.blender.org/blender/blender/pulls/110941
2023-08-09 18:00:45 +02:00
Zijun Zhou
1bcf31a874 Color management: Refactor OCIO config to be CIE XYZ I-E based
The change is motivated by using the actual CIE standard, preparing for the
Spectral Cycles, and making followup AgX integration more straight forward.

On a user level this change renames XYZ space to Linear CIE-XYZ D65, and
introduces Linear CIE-XYZ E.

The aliases are configured so that the backward compatibility is preserved.
The forward compatibility will be achieved by committing an alias name to the
3.6 release branch.

Ref #110685
2023-08-08 15:11:10 +02:00
Zijun Zhou
f5e567b4a8 Color Management: Use OCIO's built-in function for sRGB color space
Use OCIO's built-in functionality for sRGB which allows to have un-clipped
range of the input colors. The lookup tables are now removed.

Should be no functional changes on the user side.
However, it is possible that this change does not preserve exact per-pixel
value due to difference in precision.

Ref #110685

Pull Request: https://projects.blender.org/blender/blender/pulls/110712
2023-08-07 17:52:29 +02:00
Zijun Zhou
b2b7b37139 Color Management: Clean up no longer used colorspaces, display device, and LUTs
This is a Step 1 of the AgX project integration, which is focused on cleaning
up legacy aspects of the configuration.

Delete all not longer used colorspaces and their LUT files. This includes:
nuke_rec709, lg10, XYZ display device and its standard view colorspace.

The nuke_rec709, lg10 were not used, and the XYZ display device was initially
added to support output for a DCP compliant J2K files. Unfortunately, some of
the crucial transform was missing from this initial configuration, so often a
custom OCIO configuration was needed. With the addition of Filmic and now with
AgX this really became not-so-usable use-case. Also, there is no display device
which is XYZ and on which Blender can realistically run.

The None display device has duplicated functionality as the Raw view in sRGB
display. Its need originated for the compatibility with legacy "No Color
Management" option in Blender. It is also missing in the fallback color
management implementation. So, now use sRGB with Raw view to replicate the
old behavior. There will be a separate do-version commit after this one to help
transitioning the current files to the new configuration.

The Raw and Non-Color are duplicates of each other, there is no need to have
both of them. Since users are more familiar with Non-Color, and it's also the
one assigned as the data role, will keep Non-Color and remove Raw. For the
compatibility the Raw is an alias of the Non-Color space.

Ref #110685
2023-08-01 14:57:45 +02:00
Damien Picard
19d90c7a33 UI: fix several labels and tooltips
See the differential revision for details about each change.

Differential Revision: https://developer.blender.org/D15608
2022-12-09 16:10:14 -06:00
Brecht Van Lommel
4c4056579b Fix typo in colorspace description 2022-06-03 15:25:23 +02:00
Brecht Van Lommel
2b80bfe9d0 Color Management: add Filmic sRGB as an image colorspace
A typical use case is when you want to render with the Filmic view transform, but
composite an existing image in the background that should not be affected by the
view transform.

With this colorspace it's possible to do an inverse Filmic transform, render
everything in scene linear space, and then apply the Filmic transform again.

This is pretty basic in that this is not going to take into account the full view
transform including looks, curves and exposure. But it can be helpful anyway.

Ref T68926
2022-06-02 18:49:04 +02:00
Brecht Van Lommel
f807e6effe Cleanup: don't use allocation variables in OpenColorIO config
These are only needed for the legacy GPU renderer, which we don't use.
2022-04-21 17:34:46 +02:00
Brecht Van Lommel
f991f5ad51 Color Management: add ACEScg to the default configuration
For more easily reading and writing ACEScg EXR files.
2022-04-21 17:34:46 +02:00
Thomas Dinges
05a1770ab0 Fix T97280: Typo in tooltip of image texture node 2022-04-12 17:36:12 +02:00
Brecht Van Lommel
da6b534274 Fix T95368: wrong white point adaptation for Linear ACES color space
This affected loading of EXR files with set to Linear ACES colorspace, as
well as the sky texture for in some custom OpenColorIO configurations.

Use the builtin OpenColorIO transform from ACES AP0 to XYZ D65 to fix this.
2022-02-17 19:51:43 +01:00
luzpaz
dea26253a0 cleanup: fix typos in comments and docs
Followup to https://developer.blender.org/D10288

Reviewed By: Blendify

Differential Revision: https://developer.blender.org/D10346
2021-11-16 18:45:10 -05:00
Brecht Van Lommel
eb20250d2a Fix wrong white point of Linear ACES in config reading and the bundled config
The Blender/Cycles XYZ color space has a D65 white point instead of E, and
this was not correctly accounted for both in the OpenColor config reading code
and the bundled config.

This meant that since the OpenColorIO v2 upgrade, the Linear ACES color space
was not working correctly, and other OpenColorIO configs defining
aces_interchange were not interpreted correctly.
2021-03-10 16:56:27 +01:00
Evan Wilson
bc851700a6 Fix T85820: False Color not available in color management
Differential Revision: https://developer.blender.org/D10489
2021-02-22 14:52:04 +01:00
Brecht Van Lommel
1b4961b318 OpenColorIO: upgrade to version 2.0.0
Ref T84819

Build System
============

This is an API breaking new version, and the updated code only builds with
OpenColorIO 2.0 and later. Adding backwards compatibility was too complicated.

* Tinyxml was replaced with Expat, adding a new dependency.
* Yaml-cpp is now built as a dependency on Unix, as was already done on Windows.
* Removed currently unused LCMS code.
* Pystring remains built as part of OCIO itself, since it has no good build system.
* Linux and macOS check for the OpenColorIO verison, and disable it if too old.

Ref D10270

Processors and Transforms
=========================

CPU processors now need to be created to do CPU processing. These are cached
internally, but the cache lookup is not fast enough to execute per pixel or
texture sample, so for performance these are now also exposed in the C API.

The C API for transforms will no longer be needed afer all changes, so remove
it to simplify the API and fallback implementation.

Ref D10271

Display Transforms
==================

Needs a bit more manual work constructing the transform. LegacyViewingPipeline
could also have been used, but isn't really any simpler and since it's legacy
we better not rely on it.

We moved more logic into the opencolorio module, to simplify the API. There is
no need to wrap a dozen functions just to be able to do this in C rather than C++.
It's also tightly coupled to the GPU shader logic, and so should be in the same
module.

Ref D10271

GPU Display Shader
==================

To avoid baking exposure and gamma into the GLSL shader and requiring slow
recompiles when tweaking, we manually apply them in the shader. This leads
to some logic duplicaton between the CPU and GPU display processor, but it
seems unavoidable.

Caching was also changed. Previously this was done both on the imbuf and
opencolorio module levels. Now it's all done in the opencolorio module by
simply matching color space names. We no longer use cacheIDs from OpenColorIO
since computing them is expensive, and they are unlikely to match now that
more is baked into the shader code.

Shaders can now use multiple 2D textures, 3D textures and uniforms, rather
than a single 3D texture. So allocating and binding those adds some code.

Color space conversions for blending with overlays is now hardcoded in the
shader. This was using harcoded numbers anyway, if this every becomes a
general OpenColorIO transform it can be changed, but for now there is no
point to add code complexity.

Ref D10273

CIE XYZ
=======

We need standard CIE XYZ values for rendering effects like blackbody emission.
The relation to the scene linear role is based on OpenColorIO configuration.

In OpenColorIO 2.0 configs roles can no longer have the same name as color
spaces, which means our XYZ role and colorspace in the configuration give an
error.

Instead use the new standard aces_interchange role, which relates scene linear
to a known scene referred color space. Compatibility with the old XYZ role is
preserved, if the configuration file has no conflicting names.

Also includes a non-functional change to the configuraton file to use an
XYZ-to-ACES matrix instead of REC709-to-ACES, makes debugging a little easier
since the matrix is the same one we have in the code now and that is also
found easily in the ACES specs.

Ref D10274
2021-02-12 19:06:35 +01:00
Brecht Van Lommel
122a3169e2 Fix missing standard OpenColorIO roles, as reported by ociocheck
These are not used by Blender, but can be used by other software using our
configuration.
2020-05-12 21:50:42 +02:00
Brecht Van Lommel
f405934fe3 Fix T75445: Filmic transform not working when using Turkish locale
This is a bug in OpenColorIO that we work around (see "Turkish I" problem),
a proper fix will be submitted upstream.
2020-04-08 20:50:50 +02:00
Aaron Carlisle
4c4e798f35 Color Management: Updated False Color Look
Change to false color are based on artist feedback:

  * Even 2.5 EV differences down to -10 EV.
  * Even 2.167 EV differences up to +6.5 EV.
  * Slightly below middle grey biased toward cyan.
  * Slightly above middle grey biased toward yellow.
  * Converts to nonlinear luma for more accuracy.
2020-02-26 12:18:52 -05:00
Aaron Carlisle
9f4b090eec Color Management: Allow looks on any transform
Previously it was not possible to use looks on filmic log.
2020-02-26 12:18:52 -05:00
Brecht Van Lommel
d2e139e44e Color Management: update configuration, remove legacy transforms
* Replace Log view transform with Filmic Log.
* Remove Rec.709, DCI-P3 displays that were incomplete and outdated.
* Remove outdated RRT and Film transforms, replaced by Filmic.
* Remove camera responsive curves that don't work with HDR colors.
* Rename Default view transform to Standard.

We're breaking compatibility now for 2.80, so that we can add future
improvements on a clean config.

Part of the code was contributed by George Vogiatzis in D4782.

Differential Revision: https://developer.blender.org/D4900
2019-05-20 16:35:34 +02:00
Brecht Van Lommel
9a63fa21eb Color management: change view transform for color pickers and display modes.
* Use simple default view transform for color pickers, as Filmic does not work
  well for all types of colors. We better handle this with an option and tagging
  of colors as emissive or albedo like.
* For solid/workbench we also no longer use Filmic, as there is not enough contrast
  and it's not really needed since this is not physically based lighting.
* For lookdev always take into account the view transform and look. Other view
  settings like exposure are only taken into account if scene lighting is used,
  since these are often dependent on scene light intensity.

Fixes T61022, T57649, T59363.
2019-02-01 20:56:42 +01:00
Brecht Van Lommel
6601a89650 Fix T58549, T56741: HSV color picker issues with Filmic view transform.
In 2d655d3 the color picker was changed to use display space HSV values.
This works ok for a simple sRGB EOTF, but fails with view transforms like
Filmic where display space V 1.0 maps to RGB 16.292.

Instead we now use the color_picking role from the OCIO config when
converting from RGB to HSV in the color picker. This role is set to sRGB
in the default OCIO config.

This color space fits the following requirements:

* It is approximately perceptually linear, so that the HSV numbers and
  the HSV cube/circle have an intuitive distribution.
* It has the same gamut as the scene linear color space.
* Color picking values 0..1 map to scene linear values in the 0..1 range,
  so that picked albedo values are energy conserving.
2018-12-13 19:25:45 +01:00
Brecht Van Lommel
ad248333a6 Merge branch 'master' into blender2.8 2018-11-06 20:04:06 +01:00
Troy Sobotka
81e2515a04 Fix T56055: color discrepancy between viewport and render for Filmic transforms. 2018-11-06 19:35:50 +01:00
Brecht Van Lommel
c86b5fa820 Viewport: use Filmic without scene exposure/gamma/curves for workbench.
This ignores the scene color managment view settings for solid mode and
lookdev when not using scene lights and world. The scene settings are
intended for tweaking renders and should not affect studio lighting and
matcaps.

There may be cases where a simple sRGB transform is better than Filmic
and we could add configuration for this. Not sure if it really matters
and it may be better if we just assume matcaps and studiolights are all
created for one view transform.

Differential Revision: https://developer.blender.org/D3569
2018-07-30 18:51:15 +02:00
Lukas Stockner
3ee606621c Cycles: Query XYZ to/from Scene Linear conversion from OCIO instead of assuming sRGB
I've limited it to just the RGB<->XYZ stuff for now, correct image handling is the next step.

Reviewers: brecht, sergey

Differential Revision: https://developer.blender.org/D3478
2018-06-14 22:21:37 +02:00
Bastien Montagne
34389999b2 Usual i18n/UI messages fixes.
Please do not add useless tooltips! We have enough messages to translate
already...
2017-06-16 12:50:24 +02:00
Brecht Van Lommel
3cd27374ee Color management: add Filmic view transform to Blender configuration.
* "Filmic" and "False Color" view transforms added (sRGB display device only).
* "Very Low/Low/Base/High/Very High Contrast" looks added.
* Added filtering so that Filmic only shows look names prefixed with "Filmic - ".

Filmic Dynamic Range LUT configuration created by Troy James Sobotka with
special thanks and feedback from Guillermo, Claudio Rocha, Bassam Kurdali,
Eugenio Pignataro, Henri Hebeisen, Jason Clarke, Haarm-Peter Duiker, Thomas
Mansencal, and Timothy Lottes.

Differential Revision: https://developer.blender.org/D2659
2017-05-07 16:41:38 +02:00
Sergey Sharybin
6fb874369c OpenCOlorIO: Add explicit linearSRGB -> sRGB lookup table
Previously converting from linear space to SRGB was doing rather
slow inverted 1D lookup. Adding explicit inverse LUT gives 20%
speedup of OpenGL render.

Next question is: why do we even bother with sRGB conversion here,
OpenGL is already in the proper space so in theory we can avoid
quite some color space conversions. In any case, having this case
optimized in nice anyway.
2016-09-15 15:56:47 +02:00
Sergey Sharybin
3237ae2855 Add license text for OCIO configuration 2016-03-29 12:54:29 +02:00
Antony Riakiotakis
3c21885ec4 Change coefficients to 4 digit precision only.
Need to match convention and sum up to 1.0 (previous set had a minor
10^(-10) overflow) Thanks to Campbell for taking notice.
2015-03-23 12:18:42 +01:00
Antony Riakiotakis
42aac45d7f Part 1 of D1082 by Troy Sobotka, add API in OCIO for luminance
calculation.
2015-03-17 14:15:05 +01:00
Sebastian Koenig
9d02e2626b Fix typo in OCIO configuration file 2015-01-12 15:06:03 +05:00
Sergey Sharybin
a59262e325 Spelling fix 2014-05-23 13:04:15 +02:00
Brecht Van Lommel
9c2c3c1804 Film response looks:
* Reorder list a bit to put brands together
* Move looks menu below views
* Rename camera_response to film_response folder, to make clear that these
  are photographic film types, not camera models
2013-09-09 14:23:58 +00:00
Sergey Sharybin
cf8cddf07a Film response curves implemented as a looks
This commit implement's OCIO's Looks idea which
is about applying some color correction on the
buffer before it get's affected by a display
transform.

This is mainly used to modify images in an
artistics way.

Currently we've got looks generated from film
response curves for all sorts of cameras.

Patch by both of me and Brecht.
2013-09-09 09:48:26 +00:00
Sergey Sharybin
b1b5274549 Tweak allocation vars for XYZ space for more accurate GPU transform
Also extend 3DLUT edge size to 64 (1 meg of memory) to increase
transform accuracy as well.
2013-04-29 10:53:10 +00:00
Sergey Sharybin
d87b40d95d Fixes for color management:
- Sequencer preview was clamping float buffers
- ACES color space wasn't correct, was noticeable when
  applying display processor from linear space to display.
- Extended sRGB LUT to sRGBf from nuke-default config.
  Makes sequencer behave much better in sRGB space.
2013-04-26 18:56:15 +00:00
Sergey Sharybin
6ab23d5a01 Tweak allocation vars for linear space so black is converted
to black when using GLSL display transform.
2013-04-02 18:19:16 +00:00
Brecht Van Lommel
9b34237c09 Fix for last color management commit, wrongly assumed aces_to_rec709.spimtx was in svn. 2012-09-25 15:24:06 +00:00
Brecht Van Lommel
ed47d89d7f Color management: change reference space from Linear ACES to Linear. This will
have no effect on the end result, because it is only an intermediate space and
scene_linear was already set to Linear. It does avoid some unnecessary matrix
transforms which should be a bit faster, and it makes it more clear what's
happening.
2012-09-25 12:43:50 +00:00
Sergey Sharybin
0b155618a4 Color Management: wrong register was used for color space for None display 2012-09-25 09:03:11 +00:00
Sergey Sharybin
b93da9b01e Color Management, Stage 1: Initial OpenColorIO library integration
This commit integrates support of OpenColorIO library into build systems.

It also contains C-API for OpenColorIO library which could be used by Blender.

CMake has got find rules familiar to OpenImageIO's one which makes it easier
for build system to find needed libraries and includes. Scons only could use
explicitly defined paths to libraries and includes.

C-API would be compiled and Blender would be linked against C-API and OpenColorIO
but it wouldn't affect on Blender behavior at all.

OpenColorIO could be disabled by setting up WITH_OCIO to Off in CMake and
setting WITH_BF_OCIO in Scons.
2012-09-15 10:03:17 +00:00