Skip to main content
added 176 characters in body
Source Link
troy_s
  • 12.3k
  • 2
  • 37
  • 76

LUTs operate on an arbitrary range of values that are typically defined within the LUT format itself. In the case of a 1D LUT, it holds one line for each input and output, and as a result can be quite large. Typically 1D LUTs of 4096 values will deliver very accurate results using a simple linear interpolation assuming the “direction” of the transform is technically feasible. Some “directions” suffer breakage when the LUT resolution is not large enough to express the shape properly.

3D LUTs require special attention given their uniquely bounded constraints. Given that a 3D LUT represents an arbitrary range, care must be taken to make sure that the range maps the range within our image. This is especially important given visual effects, motion picture, or CGIanimation work, as the data is almost exclusively scene referred. Scene referred imagery from cameras or CGI represents a very large range that is mapped to the visualmuch smaller gamut of an output device domain, extending from an extremely low value to a theoretically infinitely large value. As a result, there is no one-size-fits-all approach for 3D LUT application, and care must be taken on input and output.

LUTs operate on an arbitrary range of values that are typically defined within the LUT format itself. In the case of a 1D LUT, it holds one line for each input and output, and as a result can be quite large. Typically 1D LUTs of 4096 values will deliver very accurate results using a simple linear interpolation.

3D LUTs require special attention given their uniquely bounded constraints. Given that a 3D LUT represents an arbitrary range, care must be taken to make sure that the range maps the range within our image. This is especially important given visual effects or CGI work as the data is almost exclusively scene referred. Scene referred imagery from cameras or CGI represents a very large range that is mapped to the visual domain, extending from an extremely low value to a theoretically infinitely large value. As a result, there is no one-size-fits-all approach for 3D LUT application, and care must be taken on input and output.

LUTs operate on an arbitrary range of values that are typically defined within the LUT format itself. In the case of a 1D LUT, it holds one line for each input and output, and as a result can be quite large. Typically 1D LUTs of 4096 values will deliver very accurate results using a simple linear interpolation assuming the “direction” of the transform is technically feasible. Some “directions” suffer breakage when the LUT resolution is not large enough to express the shape properly.

3D LUTs require special attention given their uniquely bounded constraints. Given that a 3D LUT represents an arbitrary range, care must be taken to make sure that the range maps the range within our image. This is especially important given visual effects, motion picture, or animation work, as the data is almost exclusively scene referred. Scene referred imagery from cameras or CGI represents a very large range that is mapped to the much smaller gamut of an output device domain, extending from an extremely low value to a theoretically infinitely large value. As a result, there is no one-size-fits-all approach for 3D LUT application, and care must be taken on input and output.

added 225 characters in body
Source Link
troy_s
  • 12.3k
  • 2
  • 37
  • 76

LUT is merely an acronym for Look Up Table. The term is also used colloquially to refer to a technique to apply creative looks to footage, as well as the more scientific / mathematical needs of transforming colour spaces. LUTs can be generated off of mathematical functions that are sampled at intervals, or by using tools to extract changes in images.

A 1D LUT at its most basic level is a pure single input to single output transform where a single value in put delivers a single value output. EOTFsTransfer functions such as sRGB's OETF / EOTF and other such decodes / encodes are delivered almost exclusively via 1D LUTs. There are also multi-channel 1D LUTs, where each channel can get back a unique value based on its input, or generic single channel 1D LUTs where all channels receive the same output value given identical input values.

Standard 1D LUTs are commonly used to perform colour transforms along intensity, also known as transfer curves. This can take many forms such as sRGB's OETF / EOTF, REC.709's OETF / EOTF, BT.1886's viewing EOTF, one of the many logarithmic transfer curve encodings, ACES encodings, etc. A 1D LUT is well suited for such application given that many of the transfer curves are nonlinear in naturepiecewise functions and no simple power law will accurately describe them.

There are demons hidden away here though. 3D LUTs, given that they operate on a specifically designed range of values, must be properly mapped in order to both meet the range, but to optimise their application. In this case, since the question pertains to the Filmic LUT set, we need to make sure that our 3D LUT is going to sufficiently match what we saw when we were grading the image. Some 3D LUT formats include the "shaper" compression component inside their actual LUT formats.

Given that the default Blender sRGB OETF / EOTF was never designed for any sort of creative work such as raytracing, it is sub-optimal on a number of levels. As a replacement, the Filmic LUT set consists primarily of two transformations that make work appear more photographic. First, it uses a much wider dynamic range from the scene referred values than the default sRGB EOTF uses. This means your work includes and requires light that more closely matches physical, real-world levels. As a result you'll notice much better radiosity, caustics, indirect bouncing, etc. Second, it uses a 3D LUT to desaturate the values as they ascend to the higher dynamic range, attempting to emulate what happens on colour film or DSLRs, and prevent the broken, wonky saturations that happen as colours get very intense under the default view.

LUT is merely an acronym for Look Up Table. The term is also used colloquially to refer to a technique to apply creative looks to footage, as well as the more scientific / mathematical needs of transforming colour spaces.

A 1D LUT at its most basic level is a pure single input to single output transform where a single value in put delivers a single value output. EOTFs and other such encodes are delivered almost exclusively via 1D LUTs. There are also multi-channel 1D LUTs, where each channel can get back a unique value based on its input, or generic single channel 1D LUTs where all channels receive the same output value given identical input values.

Standard 1D LUTs are commonly used to perform colour transforms along intensity, also known as transfer curves. This can take many forms such as sRGB's OETF / EOTF, REC.709's OETF / EOTF, BT.1886's viewing EOTF, one of the many logarithmic transfer curve encodings, ACES encodings, etc. A 1D LUT is well suited for such application given that many of the transfer curves are nonlinear in nature and no simple power law will accurately describe them.

There are demons hidden away here though. 3D LUTs, given that they operate on a specifically designed range of values, must be properly mapped in order to both meet the range, but to optimise their application. In this case, since the question pertains to the Filmic LUT set, we need to make sure that our 3D LUT is going to sufficiently match what we saw when we were grading the image.

Given that the default Blender sRGB EOTF was never designed for any sort of creative work such as raytracing, it is sub-optimal on a number of levels. As a replacement, the Filmic LUT set consists primarily of two transformations that make work appear more photographic. First, it uses a much wider dynamic range from the scene referred values than the default sRGB EOTF uses. This means your work includes and requires light that more closely matches physical, real-world levels. As a result you'll notice much better radiosity, caustics, indirect bouncing, etc. Second, it uses a 3D LUT to desaturate the values as they ascend to the higher dynamic range, attempting to emulate what happens on colour film or DSLRs, and prevent the broken, wonky saturations that happen as colours get very intense under the default view.

LUT is merely an acronym for Look Up Table. The term is also used colloquially to refer to a technique to apply creative looks to footage, as well as the more scientific / mathematical needs of transforming colour spaces. LUTs can be generated off of mathematical functions that are sampled at intervals, or by using tools to extract changes in images.

A 1D LUT at its most basic level is a pure single input to single output transform. Transfer functions such as sRGB's OETF / EOTF and other such decodes / encodes are delivered almost exclusively via 1D LUTs. There are also multi-channel 1D LUTs, where each channel can get back a unique value based on its input, or generic single channel 1D LUTs where all channels receive the same output value given identical input values.

Standard 1D LUTs are commonly used to perform colour transforms along intensity, also known as transfer curves. This can take many forms such as sRGB's OETF / EOTF, REC.709's OETF / EOTF, BT.1886's viewing EOTF, one of the many logarithmic transfer curve encodings, ACES encodings, etc. A 1D LUT is well suited for such application given that many of the transfer curves are piecewise functions and no simple power law will accurately describe them.

There are demons hidden away here though. 3D LUTs, given that they operate on a specifically designed range of values, must be properly mapped in order to both meet the range, but to optimise their application. In this case, since the question pertains to the Filmic LUT set, we need to make sure that our 3D LUT is going to sufficiently match what we saw when we were grading the image. Some 3D LUT formats include the "shaper" compression component inside their actual LUT formats.

Given that the default Blender sRGB OETF / EOTF was never designed for any sort of creative work such as raytracing, it is sub-optimal on a number of levels. As a replacement, the Filmic LUT set consists primarily of two transformations that make work appear more photographic. First, it uses a much wider dynamic range from the scene referred values than the default sRGB EOTF uses. This means your work includes and requires light that more closely matches physical, real-world levels. As a result you'll notice much better radiosity, caustics, indirect bouncing, etc. Second, it uses a 3D LUT to desaturate the values as they ascend to the higher dynamic range, attempting to emulate what happens on colour film or DSLRs, and prevent the broken, wonky saturations that happen as colours get very intense under the default view.

replaced http://blender.stackexchange.com/ with https://blender.stackexchange.com/
Source Link
  1. OpenColorIO . OpenColorIO has several tools that are built when you have OpenImageIO present on your system. In particular, we will be requiring ociolutimage and ocioconvert.
  2. Given that the original question pertains to wide dynamic range filmic LUTs, you will also require the OpenColorIO configuration package that implements them. They can be found in my answer to Cegaton's original question heremy answer to Cegaton's original question here. If you have arrived here and are reading this without a familiarity of the concepts, it is heavily advised you read the original question and the ridiculously long answer I gave there. With that background, you should be much more well equipped to deal with the information provided in this solution.

Loosely, we will be doing the following steps to implement custom LUTs in Blender. Note this specifically pertains to LUTs, but a similar technique can be used to apply canned ASC CDL valuesASC CDL values in your own configuration.

  1. OpenColorIO . OpenColorIO has several tools that are built when you have OpenImageIO present on your system. In particular, we will be requiring ociolutimage and ocioconvert.
  2. Given that the original question pertains to wide dynamic range filmic LUTs, you will also require the OpenColorIO configuration package that implements them. They can be found in my answer to Cegaton's original question here. If you have arrived here and are reading this without a familiarity of the concepts, it is heavily advised you read the original question and the ridiculously long answer I gave there. With that background, you should be much more well equipped to deal with the information provided in this solution.

Loosely, we will be doing the following steps to implement custom LUTs in Blender. Note this specifically pertains to LUTs, but a similar technique can be used to apply canned ASC CDL values in your own configuration.

  1. OpenColorIO . OpenColorIO has several tools that are built when you have OpenImageIO present on your system. In particular, we will be requiring ociolutimage and ocioconvert.
  2. Given that the original question pertains to wide dynamic range filmic LUTs, you will also require the OpenColorIO configuration package that implements them. They can be found in my answer to Cegaton's original question here. If you have arrived here and are reading this without a familiarity of the concepts, it is heavily advised you read the original question and the ridiculously long answer I gave there. With that background, you should be much more well equipped to deal with the information provided in this solution.

Loosely, we will be doing the following steps to implement custom LUTs in Blender. Note this specifically pertains to LUTs, but a similar technique can be used to apply canned ASC CDL values in your own configuration.

Bounty Ended with 500 reputation awarded by CommunityBot
Update with caution regarding colour space issues.
Source Link
troy_s
  • 12.3k
  • 2
  • 37
  • 76
Loading
Add link for OpenImageIO
Source Link
troy_s
  • 12.3k
  • 2
  • 37
  • 76
Loading
Update explanations of sample LUTs based on feedback.
Source Link
troy_s
  • 12.3k
  • 2
  • 37
  • 76
Loading
added 303 characters in body
Source Link
troy_s
  • 12.3k
  • 2
  • 37
  • 76
Loading
added 230 characters in body
Source Link
troy_s
  • 12.3k
  • 2
  • 37
  • 76
Loading
Source Link
troy_s
  • 12.3k
  • 2
  • 37
  • 76
Loading