【ShaderGraph】Vector4ノードとガンマ補正

2022/06/13に公開

はじめに

Colorノードは、指定したRGB値が画面上にそのまま表示されます。

Color

Vector4のような数値系ノードは、Color Space = Linear の場合に、明るく表示されます。


Vector4

これらについて、軽くまとめてみようと思います。

色空間とガンマ補正

以下の図は、数値0.5をColorノード、数値系ノード(Vector4ノード)で指定した場合に画面に出るまでの流れを簡略化したものになります。

Color Space = Linear の場合、
\gamma=1.0 でシェーダーの計算が行われた後、画面( \gamma \approx 2.2 )へ転送されます。
両者の \gamma が異なるので、補正(ガンマ補正)がかかります。

Color Space = Gamma の場合、
\gamma \approx 2.2 でシェーダーの計算が行われた後、画面( \gamma \approx 2.2 )へ転送されます。両者の \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