Hi! I would like to discuss some points about Filmic RGB’s white/blackpoint measurement that I think still need to be raised even after Aurélien Pierre seems to have left DT development.
I hope that this is the right place for it (My version is DT 4.8.0 - Please note that I am only an end user, and definitely not a programmer.):
“Problem:”
As we know, Filmic RGB attempts to imitate the behavior of film. In this sense, the calculated dynamic range of the source image (called “EV scene” in the graphic display) should not be dictated by the given scene but (originally) by the film material or the digital sensor’s potential dynamic range. Otherwise, you’ll re-map the “internal” luminance range of a “flat” non-full-spectrum scene (in the sensor source dynamic range) to the full luminance range (blackpoint/whitepoint) of the display range. However, in the “scene” tab, the color pickers for white/black relative exposure perform a black/whitepoint measurement from the scene.
This has several effects:
- Contrast stretching
By default, any scene is turned into a high-contrast scene.
Aurélien has declared in a forum comment that Filmic RGB is designed for scenes with a high dynamic range, where there are “real” whites and blacks.
In scenes where this is not the case, the problem is not that the color pickers may pick up some inaccurate value, as hinted at within the user manual, and that “you will need to adjust it manually.” Similarly, the problem is not (as remarked in the color pickers’ comments when you hover over them within the module) that you should adjust the values (even manually) “so […] clipping is avoided.” This is because in any scene apart from those with real whites and blacks (referring to the film material or the sensor data) - or apart from overexposure, there actually should not be any risk of clipping that would need to be avoided, because (after exposure correction, e.g. due to ETTR) we should be mostly somewhere in the moderate outer ranges of the histogram (outer upper/lower midtones).
Rather, the problem is the basic assumption that, according to the user manual, in the “scene” tab, the module measures min/max luminance within the scene and "assumes it is pure white [and] pure black." Granted, the module does not “know” where the ‘real’ white (and black) points are - but it is a conceptual error to assume that we can just infer them from the given mathematical data!
This is particularly problematic as in one of his introduction videos, Aurélien advises us to learn about Ansel Adams’ zone system. Yet, based on the color pickers, any attempt at staying true to the zones (apart from middle grey) is confounded - Note that this point does not criticize the additional “filmic” compression at both ends of the S-curve!
By the way, a similar effect of contrast maximization happens in the Negadoctor module, within the “paper properties” tab, when you use the color pickers for “paper black” and “paper gloss”.
Specific effects are:
-
Highlight clipping to maximum luminance
2a) In the highlights, the dynamic range is clipped (and re-mapped) based on the brightest spot.
Thus, when the brightest spot is a white wall “originally” at 70% luminance, it is pushed up to 100%.
2b) Overly aggressive highlight reconstruction
When activated by default (and in its default settings), Filmic RGB’s included “highlight reconstruction” tab starts whitening the highlights artificially created by the (white relative exposure) color picker (as a consequence of point “2a”). While this function is useful for its intended purpose, thanks to the highlight clipping caused by the color picker, skin portions or bright cloth tissues etc. that are now artificially pushed into white are additionally covered in a field of white dots that are preparing the transition to pure white.
Before I understood the “symbiosis” between the “highlight reconstruction” module and the “highlight reconstruction” tab within Filmic RGB, this side effect of a faulty dynamic range measurement led me to completely shun this function of Filmic RGB, thinking it was incorrectly programmed. -
Shadow clipping to zero luminance
Especially in low-dynamic-range situations (e.g. “zoomed-in” long-distance landscape shots that are flattened by natural haze), the shadows can be washed out - which is acceptable with regard to the given situation. Filmic RGB pulls these flat shadows down to the black point - often with a lack of pixel information regarding smooth luminance transitions, making such scenes appear extremely grainy or overly “dramatic” in the shadows.
There is one ironic example in which all these effects come together: I have two photos with the same exposure (module) setting imposed on the main subject. One of the two includes a brighter area or highlight: Here, the strong black relative exposure is “countered” by the comparatively strong white relative exposure. We get a comparatively balanced image. Conversely, I compose (zoom or crop) the “darker” scene such as to exclude the brighter areas or highlights: Here, Filmic RGB gives much more room to “uncompressed” shadows, letting the image become much darker overall, whereas those areas that (due to the lack of the “highlights” of the first image) are now calculated to be highlights themselves and are covered in white dots from Filmic RGB’s highlight reconstruction.
There have been several solutions proposed with regard to this “problem:”
-
A) Freehand use of “dynamic range scaling”
As a default solution, you are advised to move the “dynamic range scaling” slider - but towards which target point?! The additional info when you hover over the slider is “to give a safety margin to extreme luminances.” Again, it is assumed that the maximum detected luminance fromt he given scene is (close to) pure white and should be moderated just to avoid clipping. The manual explicitly admits that “when no true white and black are available on the scene, the maximum and minimum RGB values read on the image are not valid assumptions any more.” But then where do we get those target points from, apart from a manually adjusted estimate?! In any case, dynamic range scaling creates new problems in the shadows because it “symmetrically shrinks or enlarges the detected dynamic range:” If e.g. we scale down the highlights from the whitepoint to their “more realistic” zone position, the blacks get washed out - and vice versa regarding a freehand recovery of shadows. -
B) Freehand correction of black/white relative exposure
In certain videos, Aurélien Pierre, Bruce Williams and Gus from Studio Petrikas all make free-hand corrections with the sliders of black/white relative exposure.
Regarding non-HDR images, Aurélien seems to start with a default position and only adjusts one of the two sliders - even with a pre-defined number!
https://youtu.be/zbPj_TqTF88?t=5896
When Bruce uses Filmic RGB, he goes for the full manual adaption.
https://youtu.be/v8Z63QZ1IVI?t=567
At one point, he tries the colorpicker, but finds the result “too extreme,” , explicitly wondering about the “cringe” factor concerning manual adjustments (in the case of the blackpoint, whereas the whitepoint of the high-dynamic-range scene was obtained successfully).
https://youtu.be/qVnuqbR7Z-M?t=660
Gus from Studio Petrikas uses the color pickers and then makes a freehand black level correction according by taste by “a few stops.”
https://youtu.be/SiWBZ3FOMo8?t=478
In all cases, it is an arbitrary step to assume where pure white and black are and whether the scene is “interpreted” as one that should use the full luminance spectrum. -
C) Working with pre-measured dynamic range values
a) Subtraction of the sensor’s overall dynamic range from scene-measured white relative exposure
An old 2018 introduction to “Filmic” edited by Aurélien explicitly refers to dxomark.com or dpreview.com to make you insert the EV of known dynamic range of your sensor into the “scene” tab, subtracting it from the measured maximum white relative exposure.
Filmic module for darktable - HackMD
It may be noted that this approach starts with the assumption that the measured white relative exposure actually is the whitepoint.
I am fully aware of the remark in the more recent updated statement from the manual, according to which “there is no direct relationship between your camera sensor’s dynamic range (to be found in DxoMark.com or PhotonsToPhotos.org measurements) and the dynamic range in filmic (scene white EV – scene black EV).” This is most unfortunate, and I am not sure why this aid is ruled out (dpreview.com even tells you precisely the relative value of shadows and highlights!).
Is it, as the manual implies, that the specifics of the RGB space and the earlier modules in the pipeline may void the reassuring numbers of measured values? In one video, Aurélien explains to us that the measured values are only irrelevant because in studio environments, it is simply the scene that has a lower dynamic range that you can capture.
https://youtu.be/zbPj_TqTF88?t=664
But this explanation would simply refer to the assumption that scene-measured highlights and shadows should be pulled up close to pure black and white just to reach maximum contrast.
b) Imposing the sensor’s relative highlight/shadows dynamic range (based on the given ISO) via individual Filmic RGB presets
In a (German-language) tutorial, Boris Hajdukovic proposes using camera-related dynamic range presets on the black/white relative exposure sliders, whose positions he has to adapt to the prior exposure correction.
https://youtu.be/TlN_hy-p5ew?&t=625
Apart from the cumbersome need to adapt these numbers for every image, jumping forward and backward to calculate the “right” positions based on the exposure module’s EV-shift, this method appears refreshingly intuitive, since such presets could be easily copied to any picture with the same ISO.
Nevertheless, it has two problems: Firstly, there is currently no automatic function implemented to transfer the luminance shift from the exposure module to Filmic RGB’s “scene” tab. More importantly, at least with the current DT version, it does not work correctly, based on my numbers from dpreview.com. For example, it clips the shadows in “higher dynamic range” images. So I guess I am either misunderstanding something about the applicability of such numbers, based on either the scene characteristics or the complexity of the RGB color space.
What is currently missing is some “expectable” relationship between middle gray and min/max luminance in less-than-HDR conditions. I am dissatisfied with certain remarks (Aurélien) that you have to make artistic choices here since there is no accurate representation of reality: In the case of “high dynamic range” images with given pure whites and blacks the goalposts are quite “scientifically” exact indeed! What about inserting a scene-measured known luminance value as a substitute and placing it into a specific zone or luminance value? After all, we already have to “know” (or choose) some value for Ansel’s middle gray (or, roughly, mid-tones). Such a step (currently, of course, not implemented in DT) could mathematically fix the curve at some intermediate point, instead of the end-points.
Please don’t tell me just to move to Sigmoid!