LUT Types

There are several LUT types supported by LUT Buddy. Each type has different capabilities and limitations. Most LUT file formats (like .cube and .amp) support a single LUT type.

1D

The standard 1D LUT is just a list of output numbers. The input is assumed to be mapped evenly to the output values in the LUT, so on a graph the points all appear evenly-spaced along the x-axis.

We call this a 1D LUT because the input to this LUT is one number—the value of one channel. For an RGB image, we apply this same LUT to each of the Red, Green, and Blue channels.

1D RGB

With this LUT, we provide three separate 1D LUTs, one for each channel, which are operated on independently. This is not a 3D LUT, but three 1D LUTs.

1D I/O

While in a standard 1D LUT the inputs are assumed to be evenly spaced, with a 1D I/O LUT, we explicitly give the input value assigned to each output value. When graphed, the plotted points are not necessarily spaced evenly along the x-axis.

One benefit of an I/O LUT is that points can be specified above the typical value of white (1.0 in floating point), while a regular 1D LUT always maps its highest value to white. Another benefit is that an I/O LUT can be perfectly inverted by simply swapping the input and output values.

1D I/O RGB

As you might gather, this is simply a set of three 1D I/O LUTs, one for each of the RGB channels.

3D

A 3D LUT is very different from the 1D LUTs described above. We say a 3D LUT has three dimensions. This is because for input, it does not take a single channel, but rather takes into account all three channels for a pixel.

We said before that certain common color operations such as Levels and Curves treat each channel separately, and that is why 1D LUTs can represent those operations. But many color operations, such as Saturation, take into account the whole color. This causes channels to react to one another.

If you want to make a LUT to hold all the possible outputs from an 8-bit Saturation filter, it would not be good enough to take 256 samples. Instead, you would have to run through the 16.8 million different RGB combinations and store the RGB output for each. The result would be a 3D LUT.

It helps to think of a 3D LUT as a color cube where the X, Y, and Z axes are mapped to RGB. Like a 1D LUT, the input is assumed to be evenly spaced from black to white. The total number of LUT entries is the number of values on a side to the third power. So a full 8-bit 3D LUT would contain 2563 or 16,777,216 entries. Each entry contains an RGB triplet, so this LUT would be fairly large.

Fortunately, a 3D LUT of that size is never necessary, and in practice they tend to be much smaller. LUT Buddy defaults to a 3D LUT with 32 samples on a side and many systems use fewer. For example, the Inferno uses LUTs of size 173. The values in-between are interpolated as they would be for a small 1D LUT.

The pattern that LUT Buddy draws for a 3D LUT is basically a 3D cube sliced into tiles and then laid out flat. It’s a sub-sample of all the possible RGB values. In a LUT file, the various RGB entries are simply listed in an order determined by the file type. Since the entire color space is represented by a 3D LUT, they are suitable for virtually any kind of color operation, save those that perform special operations on values outside the standard black-white range (floating point 0.0 to 1.0).