🤖
ShaderGraphで頂点カラーを使う方法
描画負担を下げるために、あまり重要ではないオブジェクトに対して、
カラー、ライト、シャドウなどの処理をfragement shaderではなく、vertex shaderで行わせる手法がある。
手でShaderを書けばvertex shaderの関数内でそれをやればいいのだが、ShaderGraphでならどうすればいいか?
調べたところ、Custom InterpolatorというBlock Nodeを使うことで実装できると知ったので、検証してみた。
テスト環境
- Unity2021.3.14 LTS
- URP
色指定をFragmentからVertexに変える
1. UnlitShaderGraphを作って、適当な色をBaseColorに出力させる。
これがFragmentごとに色を指定していること。

2. VertexにCustom InterpolatorというBlock Nodeを追加する
追加したCustom InterpolatorをCustomVertexColorと名付ける
注:VertexColorと名付けるとエラーが出る。ShaderGraph内部にすでにVertexColorという変数があるため


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

4. でCustomVertexColorを取得し、FragmentのBaseColorに出力させる
-
CustomVertexColorというNodeを作(これがVertex上同名の変数を取ってくる) -
CustomVertexColorをFragmentのBaseColorに入れる


VertexとFragmentで色を処理する結果の比較
単色だけでは差が分からない


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


Discussion