※ これは 2020/07/17 時点の Unity 2019.4.4f1 の情報です
最新版では動作が異なる可能性がありますのでご注意ください
Shader Graph の一部を別ファイルに分割したあとにわかったこと
画像を色付けする場合は事前にグレースケール化して、明るさだけの情報に補正をかけてから RGB 値をかける必要がある、と
なのでこのグレースケール化をやってみたい
そこで、複数のノードをまとめてすっきりさせる方法を試してみる
スポンサードリンク
前回分割したサブ Graph に対して、下記のように2つのノードを挿入
Sample TExture 2D
のノードにつないだのは Dot Product
のノードで、ベクトル同士の内積を求める
なんでテクスチャ画像の色情報の内積を取るかというと、RGB の各要素の加重平均をとるためで、別に内積でなくても R、G、B のそれぞれに重みをつけた掛け算をしてその平均が求められれば内積である必要はないらしい
この加重平均では R x 0.299
、G x 0.587
、B x 0.114
と、色により重みをかける・・・これは緑が青や赤に比べて、物理的な明るさより主観的には明るく感じることに配慮した補正*1らしい
緑 > 赤 > 青 の順に明るく感じるのでこんな係数になる
また、この Dot Product
のノードのあとは Vector4
で値をまとめているだけでそんなに重要ではない
透明度のアルファ値はグレースケール化の対象外なので、テクスチャ画像の元の値をそのままつなぐ、と
これでグレースケール化の完成・・・以前よりもきれいに色付けされるはず!