ART Ver. 1.21 より darktable から移植されたシグモイド・トーンマッパーが追加されました。これは、フィルム・シミュレーションから選択して使うことができます。既に機能紹介を行っていますが、対数トーンマッピングと比較しながら違いを探っていきます。
darktable ではシグモイドはフィルミック RGB の代替トーンマッピングツールとして導入され、原則としてフィルミック RGB を使うか、あるいはシグモイドを使うか選択することになります。
ART の場合フィルミック RGB に似た存在として対数トーンマッピングがありますがこれとの関係はどうなっているのでしょうか。
因みに、トーンマッピングというのはシーン参照の Raw データ (入力データ) をディスプレイ参照のデータ (出力データ) に割り付けることです。現代のデジタルカメラの場合、センサーのダイナミックレンジは 12~15EV 程度ありますが、ディスプレイが表示できるダイナミックレンジはせいぜい 8EV 程度です。もしプリントアウトする場合は、4 ~ 5EV 程度しかありません。そのため、センサーから得られたデータ (シーン参照データ) を出力デバイスに割り付けられるように 0 ~ 100% の明度データ (ディスプレイ参照データ) に変換することをトーンマッピング (トーン割付け) と言っています。
まず露出タブにある、対数トーンマッピングを見てみます。
上のようなダイアログになっています。ここで指定したパラメータに基づいてどのようにトーンマッピングを行っているのでしょうか。これは下図を見てください。
対数トーンマッピングはシーン参照データをディスプレイ参照データにリニアに割り付けます*1。対数トーンマッピングをオフにした場合はデフォルト値でトーンマッピングを行うものと思われます。これをオンにすると、トーンの割り付け方を調整することができる、ということだと思います。
そして黒の相対的露出と白の相対的露出を調整することでシーン参照データのどの範囲をディスプレイデータに割り付けるのかを決定します。黒の相対的露出はディスプレイデータのブラックポイントに、白の相対的露出はホワイトポイントに対応します。但し中間グレー点とそれに対応するシーン参照データの点が指定されているので、ホワイトポイントやブラックポイントに対するシーン参照データ点を指定しても、途中でクリップしてしまう可能性があると思います。
また、マッピング範囲に指定されない部分は、当然クリップされます。
基準とする中間グレー値と増幅度 (Gain) が調整できますが、基準とする中間グレー値を動かすと、デフォルトの状態の場合 0EV のデータを割り当てるディスプレイデータ上の明るさの位置が変わります。逆に増幅度を動かすと、ディスプレイの中間グレー点 (デフォルトでは 18%) に割り当てるシーンデータ側の明るさのポイントが (0EVから) 変わります。
結果的に両者の効果は同様ですが、その違いは、基準とする中間グレー値は割り付けられるディスプレイ参照データ側を調整し、増幅度は割り付けるシーン参照データ側を調整するという違いになります。
なお、A. Griggio 氏は、増幅度と露出の調整の効果は全く同一であると述べていますが、露出で調整すると、画像処理パイプラインの初期段階で調整しますので、調整結果が例えばローカル編集におけるパラメータ指定マスクを作るときなどに影響を及ぼします。これに影響を及ぼしたくない場合は、露出ではなく、画像処理パイプラインの後の方にある増幅度で調整するのだと述べています。
因みに、darktable のフィルミック RGB と対数トーンマッピングとの違いは、フィルミックの方はトーンマッピングに S字のトーンカーブを組み合わせていますが、対数トーンマッピングの方は、カーブが含まれておらず、リニアに割り付けます。カーブはトーンカーブや、トーンイコライザーでつけることが前提になっているのです。但しトーンカーブはトーンマッピング後のリニアRGBで適用されるのに対し、トーンイコライザーはトーンマッピング前に適用されます。
但し、ハイライトの事前圧縮をチェックすると白の相対的露出に近い部分の諧調が圧縮されますので、ハイライト側にカーブをつけたのと同様な効果が生じることになります。
それに対し、シグモイド・トーンマッパーは S字状のカーブをつけてトーンマッピングを行います。
これでどうシーン参照データをディスプレイ参照データに割り付けるかというと...
シグモイドでは、中間グレー点は、18.45%に固定されていて、それに シーン参照の 0EV が割り付くのも調整できません。但し、露出で明るさを調整していれば、そこで調整された明るさが中間グレー点に割り付くようです。
また、対数トーンマッピングでは、原則として、データマッピング範囲が、均等にディスプレイ参照データに割りつきますが、シグモイドは、ハイエンドとローエンドでは諧調が圧縮されて割りつきます (S字カーブの先端と後端部分)。
コントラスト値でこのカーブの傾斜ならびにデータマッピング範囲が調整され、コントラスト値を下げるとカーブがなだらかになりより広い範囲のデータが割り付きます。つまりダイナミックレンジは広がります。コントラスト値を上げるとカーブが急になり、ダイナミックレンジは狭まります。
なお、このカーブはシグモイドを最初に考案した J. Andren 氏の以下のサイトから取っています。
https://jandren-tone-curve-explorer-streamlit-app-xca32q.streamlit.app/
なお比較のため、上の図で同じマッピング範囲の場合、対数トーンマッピングではどうなるかを灰色の線で入れてみました。
傾きは、ディスプレイに割り付ける際に、ハイライト部を多めに割り付けるのか、それともシャドウ部を多めに割り付けるのかを決定するパラメータで、マイナスに動かすとハイライト部を多めに、プラスに動かすとシャドウ部を多めに割り付けます。上のカーブで言うと、傾きをマイナスにするとカーブが左に移動し、データ割付範囲の内、ハイライト部の比重が高くなり、傾きをプラスにするとカーブが右に移動しシャドウ部の比重が高くなります。
因みに傾きを変えるとどうなるか描いて比較してみました。傾き - 1.0 と + 1.0 の結果です。コントラストは変えていません。
たしかにマイナスの方がハイライトの割合が増えて、プラスの方はシャドウの割合が増えています。ただ主としてハイライト部の変化の方が大きく、それがハイライト / シャドウ比を主に決定していることが分かります。
原色の調整に関しては以下の拙稿をご参照ください。
*1:リニアに割り付けているというのは、以下の A. Griggio 氏の発言を参照のこと。