Shader Graph 公式ドキュメントまとめ
読むだけだと退屈なので、適当にまとめたものです。もし使える人がいれば使ってください。ソースはこちら。間違っている内容を載せている可能性もありますので、気を付けてください。なおShader Graphのバージョンは6.9.2を使用しています。
Shader Graphとは
〇コードを書く代わりに、ノードを繋ぎながら視覚的にシェーダーを作ることができるツールで、書き換えた内容を即座にビューで確認することができる。
〇ShaderGraphはUnity2018.1以降であればPackageManagerでインストールすることができる。Scriptable rendering Pipeline( HDRPやURP(旧LWRP) )では標準搭載されている。
ShaderGraphを始めてみよう。
〇SRPのインストール
ShaderGraphはHDRPとURPの間で互換性がありますが、旧式のBuilt-in pipelineでは使用することができません。
〇Shader Graph Assetの作成
Project Windowで右クリック, Create>ShaderでShaderGraphAssetを作成することができる
Shader Graph Assetは現在下記の三種類存在する。
・PBR Graph
・Sub Graph
・Unlit Graph
HDRPを使用していれば、これらに加え以下の種類を使用することができる.
・Decal Graph
・Fabric Graph
・Hair graph
・Lit Graph
・Stack Lit Graph
・Unlit Graph
〇Shader Graph Windowの概要
Shader Graph Windowの画面構成は以下のようになっている。
1. WorkSpace
画面の黒いところ全般。ノードを組むことができる。
2. Title Bar
WorkSpaceの上にある帯状のwindow。シェーダーのモードを切り替えたり、保存したり、WorkSpaceの表示について操作できる。
3. Master node
このノードのインプットに繋がれた内容がシェーダーとしてアウトプットされるインプット専用のノード。
4. Preview Window
Master nodeに繋がれた内容を確認することができる。プレビューされるメッシュの変更や回転なども行える。
5. Blackboard
Inspectorから書き換えることが可能であるPropertiesを定義、管理することができる。BlackboardからpropertiesをWorkSpaceにドラッグアンドドロップでノードとして使用することができる。
6. Create Node
Spaceを押すか、右クリック>Create Nodeで表示することができる。ノードの検索や作成ができる。
Shader GraphのModeについて
Shader GraphにはいくつかModeがある。
①Color Mode
Work Spaceのノードを見やすいように、ノードを色分けする機能。色分けの仕方には以下の種類がある。
・None
色を表示しない。すべてグレーで統一
・Category
ノードのカテゴリーで色分けを行う。
・Precision
ノードのPrecision Modeで色分けを行う
・User Defined
ユーザーが色を決められる。ノードを左クリック>Colorで色を選択できる。
①Precision Mode
〇Precisionとは
Precisionとはデータの型のことっぽいです。とりわけ、Shader Graphでは少数をどのように表現するかということらしい。Shader Graphでは以下の二種類準備されているっぽい。
・half...16bitで浮動小数を定義。
・float...32bitで浮動小数を定義。これはC#と同じですね。
・inherit...文脈で型を選ぶ。詳しくはNode Precisionで説明。
Shader Graphのもとになっているシェーディング言語のHLSLではdoubleなんかも使えた気がしますが、Shader Graphでは制限されているみたい。使用する情報量が増えれば精度が上がるが、使用するメモリが増える。
〇Graph Precision
Shader Graph全体でまとめて使うprecisionを設定できる。Title Barからhalfもしくはfloatを選べる。
〇Node precision
Nodeの歯車マークからNode別にPrecisionを設定できる。NodeとNode間でPrecisionが異なる場合、行先のPrecisionに変換(UpcastもしくはDowncast)される。
Node Precisionにはinheritというものがあり、すべてのNodeのデフォルト値はinheritである。入力されるPrecisionによって決定する。複数のPrecisionが入力される場合は、より精度の高いFloatが優先して使用される。詳しくはこちらを参照。
Custom functionについて
Custom FunctionとはHLSLコードを挿入することで自分自身のNodeを作成できる機能である。Create NodeからCustom Nodeを作成することができる。
HLSLについて詳しくないので飛ばす。詳しくはこちら。
Sub Graphについて
Sub GraphとはShader Graphの特別な種類で、他のグラフ内で使用するためのグラフで、何度も使う機能などをまとめておける。基本的な使用方法については同じで、他のGraphと異なる点は以下の三つです。
1. BlackboardのpropertiesはInspectorに表示するためのものではなく、SubShaderを使用するGraphで表示される変数。
2. Sub-Graphはデータのタイプが異なります。通常のShader GraphはShader Graph Assetというデータが作られるのに対して、Sub-ShaderはSub Graph Assetが作られる。
3. Master Nodeがなく、その代わりにアウトプットノードがある。自由にアウトプットする変数を選べる。
Nodeのライブラリについて
他の人の作品を真似るときなんかでは、ただ真似るだけでなく、使っているNodeがどのようなものなのかを同時に勉強する必要がある。公式ドキュメントに各Nodeの詳細がまとめられている。
詳しくはこちら