🤖

ShaderGraphで頂点カラーを使う方法

2022/11/28に公開

描画負担を下げるために、あまり重要ではないオブジェクトに対して、
カラー、ライト、シャドウなどの処理をfragement shaderではなく、vertex shaderで行わせる手法がある。
手でShaderを書けばvertex shaderの関数内でそれをやればいいのだが、ShaderGraphでならどうすればいいか?
調べたところ、Custom InterpolatorというBlock Nodeを使うことで実装できると知ったので、検証してみた。

テスト環境

  • Unity2021.3.14 LTS
  • URP

色指定をFragmentからVertexに変える

1. UnlitShaderGraphを作って、適当な色をBaseColorに出力させる。

これがFragmentごとに色を指定していること。

2. VertexCustom InterpolatorというBlock Nodeを追加する

追加したCustom InterpolatorCustomVertexColorと名付ける
注:VertexColorと名付けるとエラーが出る。ShaderGraph内部にすでにVertexColorという変数があるため

3. CustomVertexColorに色を入れる

これでVertexごとに色をしていることができた

4. でCustomVertexColorを取得し、FragmentBaseColorに出力させる

  • CustomVertexColorというNodeを作(これがVertex上同名の変数を取ってくる)
  • CustomVertexColorFragmentBaseColorに入れる


VertexとFragmentで色を処理する結果の比較

単色だけでは差が分からない


ライトの処理も付けると差が分かる


Discussion