【ShaderGraph】Vector4ノードとガンマ補正
はじめに
Colorノードは、指定したRGB値が画面上にそのまま表示されます。
Color
Vector4のような数値系ノードは、Color Space = Linear の場合に、明るく表示されます。
Vector4
これらについて、軽くまとめてみようと思います。
色空間とガンマ補正
以下の図は、数値0.5をColorノード、数値系ノード(Vector4ノード)で指定した場合に画面に出るまでの流れを簡略化したものになります。
Color Space = Linear の場合、
両者の
Color Space = Gamma の場合、
色空間を体感してみる
Project Settings -> Player -> Other Settings から
Color Space = Linear に設定しておきます。
Colorを出力するShaderGraph
RGBA = (0.5, 0.5, 0.5, 1) を 出力するようなシェーダーグラフを作成します。
結果
このシェーダーを3Dモデルにアタッチすると、 (0.5, 0.5, 0.5, 1) という色が表示されます。
(色の確認には、Microsoft Power Toys の Color Picker を使用しています)
Vector4 を出力するShaderGraph
次に、Vector4 (0.5, 0.5, 0.5, 1) を出力するようなシェーダーグラフを作成します
結果
(0.74, 0.74, 0.74, 1) という色が表示されました。
シェーダー内で、0.5という数値を出力した場合、0.5^(1/2.2) ≒ 0.74 という色が画面に表示されます。
Color Space とガンマ補正
Color系ノードはそのまま出力される
ColorノードはGamma ≒ 2.2で、 画面も Gamma ≒ 2.2です。
入力と出力のガンマが一致するので、色がそのまま画面に表示されます。
Color Space = Linear だと、Vector4は補正される
Color Space = Linear とした場合、シェーダープログラムは Gamma ≒ 1.0 (リニア空間) として扱われます。
入力と出力のガンマが異なるため、補正がかかります。
Color Space = Gamma だと、Vector4は補正されない
Color Space = Gammaとした場合、シェーダープログラムは Gamma ≒ 2.2 として扱われます。
Vector4もGamma ≒ 2.2になり、入力と出力のGammaが一致するので、補正無しでそのまま画面に表示されます。
Discussion