Search Unity

Built-inとURPとHDRPで共通で使えるShader Graph

  • アーティスト向け
  • 開発者向け

<このページで学べる内容>

Shader Graphはノードを繋げるだけでオリジナルのシェーダーを作成できるツールです。 このページでは出力ターゲットを切り替えることで複数のレンダーパイプラインに対応したグラフを書く方法について紹介します。

使用環境を以下に示します。

  • Unity 2021.2.7f1
  • Windows 10(21H2)

基本的にWindows 10で検証していますが、macOSでも利用できますのでご安心ください。

Master StackとMaster Node

Shader Graph 8.xにおいて最終出力を決定していたのはMaster Nodeと呼ばれるノードでした。以下はUnity 2019.4.8f1のShader Graph 7.3.1におけるURPのPBR Master NodeグラフとUnlit Master Nodeグラフの例です。

PBR Master Node
Unlit Master Node

このMaster Nodeによる方式にはいくつかの問題がありました。

  1. レンダーパイプラインにおける頂点シェーダーとフラグメントシェーダーが一つにまとめられているため、そこに繋げるノードが混雑した状態になりがちだった
  2. 出力ターゲットが固定化されているため、URPとHDRPと言ったレンダーパイプライン間で共通に使えるシェーダーを作成することができなかった

そこでこれらの問題点を解決するために、Shader Graph 9.0からはMaster Nodeから Master Stackに変わりました。以下はUnity 2020.3.23f1のShader Graph 10.7.0において、ProjectビューのCreateメニューで作成できるURPのLit Shader GraphとUnlit Shader Graphの例です。

Project ビューのCreate > Shader > Universal Render Pipeline > Lit Shader GraphとUnlit Shader Graphメニュー
Lit Shader GraphのMaster Stack
Unlit Shader GraphにおけるMaster Stack

まずレンダーパイプラインのステージに合わせてVertex(頂点シェーダー)とFragment(フラグメントシェーダー)にノードが別れました。これによりShader Labで記述するシェーダーに近い形で書けるようになりました。

Shader Labによる記述例

また一見するとLitとUnlitではMaster Stackが異なるように見えますが、それぞれのStackにノードを追加することでカスタマイズができます。そのため、メニューから生成できるLit Shader GraphとUnlit Shader Graphは標準的な出力の例であって、必要に応じて自由にカスタマイズできるようになっています。

VertexやFragmentコンテキストを選択し、スペースキーを押すと表示される「Create Node」メニュー

ターゲットセッティング

さらにShader Graph 9.0ではターゲットセッティングでどのレンダーパイプライン向けのシェーダーを選択できるようになりました。ターゲットセッティングはGraph Inspectorで行います。

デフォルトは使用しているレンダーパイプラインのみですが、URPとHDRPのパッケージを同時にインポートすることでURPとHDRPの両方に対応したShader Graphを作ることができます。図はURPのプロジェクトにHDRPパッケージをインポートし、Hair Shader Graphを作成したときのGraph Inspectorの表示です。

ターゲットセッティングの例

各ターゲットに関する設定もGraph Inspectorで行います。

HDRPとURPに合わせて設定が可能

またレンダーパイプラインによっては使えるノードと使えないノードがあります。それらを含む場合はグレー表示となり視覚的に確認できるようになっています。

Built-inレンダーパイプラインでもShader Graphが利用可能

Shader Graph 12.0からBuilt-inレンダーパイプラインでもShader Graphが利用できるようになりました。本記事を執筆している時点において、Unity 2021.2.7f1のShader Graph 12.1.2がリリースバージョンとして利用できます。

なお、URPやHDRPでは新規にプロジェクトを作成するとShader Graphパッケージも同時にインストールされますが、Built-inレンダーパイプラインにおいては手動でパッケージマネージャからインストールする必要があります。

これでBuilt-inレンダーパイプラインのShader Graphでシェーダーを作成することで、将来URPやHDRPに移行時にカスタムシェーダーの移行の手間が減ることが期待できます。

おわりに

Shader GraphがBuilt-inレンダーパイプラインにも対応したことでシェーダープログラミングがかなり身近になったと思います。とは言え「そもそもシェーダーとは何だろうか?」と言う疑問もあると思います。ネットに色々と情報がありますし、ご自分の合った勉強法があるかと思いますが、筆者としてはまずはこちらの動画をお勧めしたいと思います。

シェーダーの概要 – Unity Learning Materials

https://learning.unity3d.jp/tag/shader/

この動画をご覧になり、その上で自分に不足している知識を補うために書籍なり動画なりブログなりを調べて実際に動かしながら勉強をするという方法が良いと思います。

このブログでは今後も様々なUnityの機能について情報を発信していく予定ですのでご期待ください。

この記事はいかがでしたか?