There has been some discussion online as to how film should render exposure to blues and other colors. In this article, I will take you through some practical examples and some mistakes one can make that would lead to incorrect and ugly conclusions.


Contents


Theory:

Intro to how film works

Below I will briefly summarize how negative film works, mechanically. A negative consists of three layers of silver that are each sensitized primarily to different bandwidths of light, broadly red, green, and blue light. When exposed, the silver is activated as a function of the amount of energy of the sensitive wavelengths hit that region. During development, the regions that have more activations will have more colored dye. The red, green, and blue sensitive layers will be given cyan, magenta, and yellow dyes respectively. These dyes primarily absorb red, green, and blue light. Thus, increased energy during exposure results in more dye and less transmittance of the negative film stock.

A negative to print process consists of two of these sorts of film stocks in series. First, something is photographed with a negative stock. The negative stock is then developed, which forms an inverted image. The developed negative is then displayed to a print stock that adheres to similar mechanics1 and therefore inverts the image again.

Reversal stocks (ie Slide film) are similar to negative film, except the chemistry during the development process binds dye to the unactivated grains and washes away the activated ones. Thus, more energy during the exposure results in less dye and therefore increased transmittance of the resulting film stock.

Scanning

Film scanners are essentially a digital camera that can be modeled in the following way for each pixel:

\[R,G,B = k \cdot \int_\lambda I(\lambda) \cdot T(\lambda) \cdot S_{R,G,B}(\lambda) d \lambda\]

In the above expression,

  • \(R,G,B\) represents the resulting RGB code value, which varies for every pixel.
  • \(k\) is a normalizing constant, ie an exposure control.
  • \(\lambda\) is a wavelength of light in the visible spectrum2
  • \(I(\lambda)\) represents the wattage of the scanner’s backlight for the wavelength \(\lambda\). This is nonnegative and generally fixed for the scanner.
  • \(T(\lambda)\) represents the transmittance (proportion of light that is not blocked) at the wavelength \(\lambda\). This is between 0 and 1 and varies for every pixel.
  • \(S_{R,G,B}(\lambda)\) indicates the sensitivity of the scanner’s R/G/B channel to the wavelength of light \(\lambda\). This is nonnegative and fixed for the scanner.

You can see that as the transmittance \(T(\lambda)\) increases in any wavelength, the resulting code value from the scanner R,G,B can either remain the same or increase. The scanner code value cannot decrease as transmittance increases, unless the R,G,B code value is later perturbed by an energy non-conserving operation.


Predictions from Theory

Suppose you have a negative stock and you photograph two paint chips \(A\) and \(B\), and the energy hitting the film for each of these two paint chips at each wavelength is given by \(SPD_A(\lambda)\) and \(SPD_B(\lambda)\). Suppose that \(SPD_A(\lambda) \geq SPD_B(\lambda)\) for all \(\lambda\); perhaps \(B\) is a very black paint and \(A\) is some other standard paint color and they’re under similar lighting.

It then follows that a negative film will have at least as much concentration of each dye underneath the image of \(A\), compared to the dye concentrations of \(B\). A scanner reading the film will then report a lower or equal code value in each of the three channels. Likewise, a print stock exposed to this negative will see less light in all wavelengths from \(A\) than from \(B\) and will therefore produce less dye underneath \(A\). This will result in \(A\) being at least as bright as \(B\) at all wavelengths in the final projection or if the print stock were to be scanned.


Scanned film samples

I have photographed a color chart and some shadows under a bright blue light on Portra 400 and Ektachrome E100, a negative and a reversal stock respectively. I then scanned these stocks using a Plustek 8200i scanner directly to a DNG file, which I decoded in the sensor native colors as to get the scanner behavior described in the Scanning section. Normalizing so that an empty scanning bed reads (1,1,1) and only gamma 2.2 encoding the result for your display gives the following appearances (Portra on left, Ektachrome on right):

Naturally, it’s not fair to show negative film in this state, so I’ll invert it using an S curve similar to that of a typical print stock. Note that nondecreasing 1D curves will maintain the relationship that if \(A \leq B\), then \(f(A) \leq f(B)\), though to invert the image we’ll instead be using non-increasing curves.


Prediction Failure

In the below image on the left, I have taken my negative scan, converted to cineon, applied a large upwards offset adjustment to make a point, and then applied a certain print emulation lut. On the right, I have recycled the 1D curves adjustment from before, but adjusted the offset going into the curve as to emulate a similar black point as the print film LUT approach on the left.

At first using a print LUT may seem to be a principled approach – you’re taking a negative stock and using a print film emulation to emulate the second half of the pipeline. However, in this case the print film emulation LUT is evidently problematic. To the sensitive eye, you may be able to detect that the blues in a sense appear darker than the black point adjacent to them.

This is, in fact, a motivated observation. Let’s inspect each of the three channels, in red/green/blue order:

Sure enough, you see that the red channel looks totally different between the two images. In the one graded via the LUT, the red channel in bright areas like the book covers was typically darker than the red channel in the darkest shadows in the image. This is detectable to your eye and this error is visible in many color grades and movies.

Note that even in the case of my Ektachrome shot, none of the three channels ever dip below the channel’s corresponding black point given by the black hole in the Spyder Cube.

Watch out for these kinds of errors in your color grades and post processing.

  1. Negative stocks are unique in using colored couplers (or “tinted mask couplers”), which is a method that allows for greater control over the effective shape of the negative’s dye density curves, simultaneously resulting in the orange DMIN of negative stocks. However, this does not affect the overall mechanics of film, nor does it affect the generality of the logic presented here. 

  2. Specifically, any wavelength that is visible to the scanner’s sensor \(S_{R,G,B}(\lambda) \neq 0\)