Since there had been some discussion about soft-proofing lately on this forum, I though it would be useful to document and explain how we are dealing with this aspect in PhotoFlow.
I say we because I got a lot of help from @Elle and others, with ideas, suggestions, debugging and much more.
In PhotoFlow, the colorspace conversions are handled as part of the editing flow, so image data can be in different colorspaces (abbreviated as CS in the following) at different stages (read: layers) of the editing process.
The final step is the conversion from the last used CS to the display profile, before visualisation in the preview window.
So, a normal color workflow looks like this:
input CS -> CS 1 -> CS 2 -> ... -> CS N -> display profile
When soft-proofing, there is one additional color profile conversion that is inserted between the last CS and the display profile:
input CS -> CS 1 -> CS 2 -> ... -> CS N -> soft-proof profile -> display profile
If not specified otherwise, the
soft-proofing profile -> display profile conversion will use the relative colorimetric rendering intent.
Few options control the way the image data is converted from the last CS to the soft-proof profile, and then to the display profile:
black-point compensation (BPC): controls wether BPC is applied to the
CS N -> soft-proof profileconversion.
In general this option is activated, in particular when converting to a printer profile that has a black level
higher than zero. This avoids having the darkest tones being clipped in the conversion.
- clip negative/positive: when the soft-proofed profile is a matrix profile that allows unbounded conversions (like sRGB), this controls wether the out-of-gamut pixels should be clipped or not. Except for very special cases, this two options should be kept active for soft-proofing.
- gamut warning: when activated, the pixels that are outside of the gamut of the soft-proofing profile will be marked with a gray color
simulate black ink: when activated, the black point compensation in the
soft-proofing profile -> display profileconversion
is disabled, and the darkest tone in the preview will match as good as possible the black level of the proofed profile.
simulate paper color: when activated, the
soft-proofing profile -> display profileconversion will be performed with absolute colorimetric intent (and therefore no BPC by definition). This option tries to simulate not only the black level of the paper, but also the paper’s white point.
- **adaptation state: ** this slider allows to adjust the level of chromatic adaptation applied in the absolute colorimetric conversions. This way, partial adaptation can also be simulated.
Here is how the soft-proofing dialog looks like in PhotoFlow:
One last note concerns the way the gamut warning is generated. Instead of using LCMS2 built-in gamut warning, a custom code is used.
During our tests, we realised that a different approach is needed when soft-proofing matrix-based compared to LUT-based ones.
The gamut warning is generated by comparing the output of two parallel colorspace conversion chains:
CS N -> CS REF CS N -> soft-proof profile -> CS REF
For LUT-based profiles, the reference colorspace
CS REF is Lab, and the comparison is based on the delta-E 1976 metric.
For matrix-based profiles, the reference colorspace is linear ACES and the comparison is based on the direct numerical difference between RGB values. The advantage of this approach is that the resulting gamut comparison gives results that are independent of the gamma encoding of the input and soft-proof profiles.
Hope this could help other projects as well…