For the last several years I have traveled to a sunflower farm in KS for a photo shoot. The field of rich color is hypnotic and it’s a lot of fun.
Unfortunately this year I discovered that the new filmic RGB v6 doesn’t deal with the rich colors without it applying excessive amounts of desaturation and in some cases color shift. To deal with it you have back off on highlights color brilliance and/or exposure and perhaps throw away a significant portion of the histogram range. You end up with dull, sometimes under exposed-looking images that nobody could argue looks good.
I used a workaround for while where first I reduce the color brilliance of the highlights until the weird desaturation and color shift go away, and then boost the brilliance of those same highlights by the same amount post-filmic. I can get OK results this way, but I shouldn’t need to do this (never had to in the past). And although this “works”, you lose filmic’s tone-mapping benefits for those highlights as a trade-off.
I finally decided to try to figure out where this happens in the code. After some experimentation I found it and disabled it in a test build. IMO it produces much better looking results now in every color preservation mode. I’ve been using this test version for several weeks and I will be sticking with this as my standard version for now.
You might say “just use filmic v5”. It’s a fair comment, but there are other differences between v5 and v6 and I like v6 so far in general except for the behavior I’m describing here.
What I’ll include next are several test images. With the exception of the first one which is mine (the sunflower, CC-BY-SA), these are all images freely available on the web: DPReview sample raw, RAWSAMPLES.CH (CC-BY-NC-SA), https://www.signatureedits.com/free-raw-photos.
After the test images I will attach a source code patch file that you can use if you are interested in trying it out. The test version makes no change to any database or XMP file structure, so it won’t mess up anything with that. It simply alters the behavior of filmic RGB.
Each processed image here will be presented as an A/B comparison between the test version (image on the left) and std darktable v4.0.1 (image on the right). In each pair of images, the XMP file is exactly the same, and is the one used to develop the image on the left. The image on the right is simply the same XMP file opened in the std darktable v4.0.1 against the same raw file.
For each raw file there are 5 A/B comparison images. The only difference between the 5 comparisons is the color preservation mode chosen. I did the raw file developing using the test build with “no” as the preservation mode, the mode I personally use the most, and then simply changed the preservation mode for each of the remaining 4 comparisons without doing any other edits. I’ll comment a bit more along these lines after the images below.
So you might say that the A/B comparisons are unfair to some degree because I didn’t try to optimize the edits using stock filmic v6. Well, I didn’t show them here but I did experiment with that too. And I spent plenty of time doing this after this year’s sunflower shoot. With max RGB in std darktable you can get sometimes close to my “no” edits either by sliding the latitude slider to zero to “shrug the tone mapper shoulder” or by leaving the latitude alone and moving the shadows/highlights balance slider far to the right (again shrugging the shoulder). Or you can just make the image darker. Neither of these moves are required using the experimental build. I don’t have to give up any shadow or highlight range by pushing the shadow/highlight balance almost completely to one end, give up a wide range of decent contrast by totally pushing the latitude to zero, or losing local contrast/detail by switching to max RGB. And lastly even if switching to max RGB or one the other preservation modes is preferred for some reason, they all look better using the experimental build anyway.
Here is the src code patch file.
darktable_v4.0.1_bp_test_ngm.patch (22.4 KB)
Summary of changes made by the patch: For both the normal and openCL versions of filmic RGB, disable calls to gamut_check_RGB. Instead, do the conversion from Ych back to RGB and then clamp RGB to display_white. I also changed the “darktable” text in upper-left corner of the application window so that it is obvious it is test version of darktable.
To use it, first follow the instructions for a normal build here to download the source code: GitHub - darktable-org/darktable: darktable is an open source photography workflow application and raw developer
Use the patch file just before you run the build command to compile the source code. Put the patch file in the parent folder to the darktable source code folder that gets created when the files are pulled to the local computer. Then navigate to the “darktable” folder, open a terminal window and type this command:
$ patch -p1 < …/darktable_v4.0.1_bp_test_ngm.patch
Compile/build prerequisites: Assuming Linux, you need to have both LLVM (Linux Mint: sudo apt install llvm) and Clang (install via SW manager) installed.
Final thought: I think it would a very useful and simple modification if a checkbox could be added to Filmic RGB options tab that would globally disable the gamut_check_RGB function via a user selection. Users that want it could have it, and users that don’t won’t.