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