UE4 CheapContrastについて
マテリアル関数の CheapContrast の中身についてメモしておきます。
こちらが CylindricalUVs の中で使われていたので何をやっているか調べました。
まず、得られる効果は名前の通り「低い処理コストでコントラストを与えられる」といった感じになるかと思います。
使い方としては「In」ピンに「0~1」の輝度情報を入力します。
「Contrast」ピンにコントラストの強さを入力します。0で何も変化無しです。
下図は与える強さごとの結果です(白寄りに見えるのはリニアで表示されているため)。
さて、中身ですが LinearInterpolate (直線補間) ノードを使って、入力したコントラスト値を「0 から引いた値」~「1足した値」の範囲に広げた後に「0~1」で Clamp しています。
ただ、なぜ Subtract の後に 3チャンネルにして計算してるのかが分かりません。
こちらの構成は不要なような。。
どなたかお分かりになる方いらっしゃったら教えてください。。
これだけではイメージが掴みにくいのでさらに補足します。
まず、元の輝度情報がこちらのグラフのような感じだとします。
コントラストの値を「1」にした場合、範囲が 0.5 を中心に「-1~2」になり「0以下と1以上」は Clamp されるので、下図を見て分かる通り 0~1 の範囲が狭まりコントラストが強まったと言えると思います。
ただ、白飛び&黒潰れさせるコントラストの与え方なので注意が必要です。
(処理に余裕があるなら白飛び&黒潰れはさせずにS字カーブでコントラストを与えるような感じにしたいところです)
コントラストの値を「5」にした場合は、こちらのような感じです。
0~1 の範囲は 0.5 を中心にさらに狭くなります。
なるほど、面白い!
0~1の範囲をスライドできるようにしてやると、使い勝手が上がりそうです。
という訳で CheapContrast でした。