夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

ShaderGraphでライトを使用する(CEDEC2021版)

本日はShader勉強枠です。

先日ShaderGraphでライトを使用するノードを作成しました。

redhologerbera.hatenablog.com

この方法はUnityの公式ドキュメントに上がっている情報をもとに筆者で最新のShaderGraphで使用できるようにしたものです。

先日こちらの方法とは別にUnity社によって行われたCEDEC2021内での動画で別の方法でライトを使用していたため勉強も兼ねて筆者もトライしました。

〇CEDEC2021とは?

CEDECはゲーム業界を中心としてコンピュータエンターテインメントの開発、ビジネスにおけるカンファレンスイベントです。

今年はYouTube上でオンライン配信されました。

その中で今回のShaderGraphの解説は以下の動画で配信されました。

www.youtube.com

〇ShaderGraphでライトを使用する。

動画内では[Custom.hlsl]と呼ばれるhlslファイルを作成し、ShaderGraphの[Custom Function]で使用しています。ソースコードのオリジナルは動画9分30秒で提供されています。

①ShaderGraphで[CustomFunction]ノードを作成します。

f:id:Holomoto-Sumire:20210831211510j:plain

このノードはShaderGraphで提供されていない処理をコードを記述して作成できるノードです。

②Projectウィンドウ内に[CustomLight.hlsl]を作成します。このhlslは動画内でソースコードが提供されています。

f:id:Holomoto-Sumire:20210831211645j:plain

③[CustomFunction]ノードを選択し、[GraphInspector]から[sauce]に作成した[Custom Light]を指定します。

f:id:Holomoto-Sumire:20210831211843j:plain

④CustomFunctionの設定を次のようにします。

f:id:Holomoto-Sumire:20210831212626j:plain

これは[CustomLight]の[MainLight]関数の引数および返り値に相当します。

void MainLight_half(float3 WorldPos, out half3 Direction, out half3 Color, out half DistanceAtten, out half ShadowAtten){
...
}

⑤[Position]ノードを作成し[CustomFunction]の[worldPos]につなぎます。

f:id:Holomoto-Sumire:20210831212920j:plain

⑥[DotProduct]ノードおよび[Saturate]ノードをつなぎます。

f:id:Holomoto-Sumire:20210831213548j:plain

[DotProduct]ノードはCEDEC2021の動画内での解説を引用するとインプットで与えられた二つのベクトルの角度を-1~1に収めるノードです。

[Saturate]ノードは0~1以外の値を除外するノードです。

⑦[Sample Texture 2D]ノードおよびジオメトリの法線を返す[Normal vector]ノードを[NormalBlend]につなぎます。

f:id:Holomoto-Sumire:20210831214000j:plain

これはオブジェクトから法線を返します。

以上でShaderGraphでライトを使用することができました。

f:id:Holomoto-Sumire:20210831214204j:plain

次回以降でCustom.hlslノードの中身を見てきます。