Unity2021.2のShaderGraph新機能

Unity2021.2のShaderGraph新機能

こんにちは!

第2事業部エンジニアの佐久間です。

業務でUnityのShaderGraphを触る機会がありました。

そこで、2021年の10月26日にリリースされたUnity2021.2.0から使えるShaderGraphの新機能をまとめました。

自分が気になったもののみをピックアップしているので、詳しく知りたい方は公式のドキュメントをご確認してください。

Changelog

開発環境

Unity 2021.2.8f1

ShaderGraph 12.1.3

ビルトインレンダーパイプライン対応

今回のアップデートでこの機能が一番の目玉なのではないかなと考えています。

Graph InspectorのGraph SettingsのTargetにBuilt-Inが増えています。

また、右クリックから作成する際にもBuiltInが増えています。

今までShaderGraphはURPかHDRPでしか使えませんでした。

ですが、これからはビルトインでもShaderGraphを使えるので今まで以上にシェーダーを触りやすくなるかと思います。

また、ビルトインからURPへ互換性があるように目指してくれているとのことなので、移行時のコストも減ります。

ただし、Unity的には今まで通り可能ならURPに移行して欲しいそうなので、タイミングを見計らって早めに対応するのが良さそうです。

Custom Interpolator

今まで、VertexからFlagmentにはPosition、Normal、Tangentの3つのパラメータ固定でしか渡せませんでした。

VertexノードにAdd Block Nodeが追加されています。

そこをクリックすることで新しいパラメータを追加できるようになりました。

Shader側のコードですと以下の部分にあたります。

struct v2f
{ 
    float4 vertex : SV_POSITION;
    float2 uv : TEXCOORD0;
}

これにより、今まで無理やりFlagmentに書いていた処理をVertexに逃したり、Vertexでの計算結果をFlagmentに渡したりすることができます。

Branch On Input Connection Node

SubGraph内で使えるノードが追加されました。

ノードが繋がれていない場合に、デフォルトの値を渡すことができます。

C#でいうデフォルト引数に近い意味合いになります。

 

簡単な例として、ノードが繋がっていればその色を、繋がれていない場合には指定した色を返すSubGraphを制作します。

ノードが繋がっているので、繋がれている色を返しています。

ノードが繋がれていないので、指定した色を返しています。

デフォルトの値にするプロパティのNode SettingsのUse Custom Bindingのチェックボックスを入れないとエラーが出てしまうので、忘れずにチェックしてください。

また、Labelで指定した文字列をShaderGraph側に表示させることができます。

ShaderVariant

shader_featureやmulti_compileといったバリアントを各ステージで設定することができるようになりました。

Node SettingsのStagesから変更することができます。

Declaring and using shader keywords in HLSL

にもある通り、使用するステージやスコープを絞ることでパフォーマンスの向上をすることができます。

見た目の変更

Categoryの追加

今まではプロパティを追加しても、羅列されるだけで見にくい印象がありました。

Blackboard上

Inspector上

今回からCategoryが追加されたことにより、改善されました。

プロパティを増やす際にCategoryの項目があります。

クリックすると枠が追加されます。

これにより、ユーザーの任意の文字で枠を括り見やすくすることができます。

Blackboard上

Inspector上

Vector型

今までは、Vector2でもVector3でも4つ枠が表示されてしまっていました。

それが、対応する値の数に変更されました。

最後に

どんどんShaderGraphが使いやすくなって、hlslでシェーダーを書く機会が減っていきそうです。

ですが、細かい部分やGeometry、ComputeはShaderGraphではサポートされていないので必要に応じて使い分けて行く必要がありそうです。