TATIKUNLOG.

主にゲーム作りについて書き留めるブログ。

Unity2021.2からBuilt-inがShaderGraphのターゲットに【Unity】



PR

SRPを使うメリットとしてShaderGraphが使える事というのが言われていたような気がするのですが、ShaderGraphのターゲットとしてBuiltinも加わるみたいです(正式リリースではないので、どういう扱いかは分かりませんが)。

※タイトルはUnity2021.2としていますが、正しくはURP12.0.0からの追加です。

Changelog | Shader Graph | 12.0.0

f:id:tat1kun:20210930224924j:plain

環境

Unity2021.2.0b13

URP12.0.0

ShaderGraphの作成と動作確認

f:id:tat1kun:20210930183105j:plain

ShaderGraphの作成メニューも色々と階層化されて変わっているのが分かります。

その奥に作成するためのメニューがあって、現状はLitとUnlitのシェーダが作成できるようです。

簡単な動作確認としてフレネルエフェクトで縁の色を変化させてみました。

f:id:tat1kun:20210930184207j:plain:h600

f:id:tat1kun:20210930184216j:plain
球にマテリアルを適用した例

注意点

恐らく試験的な機能で、SRPのURPやHDRPとの互換性はあまりないのではないかと思います。

公式のカスタムライティングがそのまま使えるか試してみましたが、GetMainLight関数が上手く機能していない感じで、メインライトの情報を取得する部分で詰まりました。

代わりのメインライトの角度取得手段

https://docs.unity3d.com/ja/2018.4/Manual/SL-UnityShaderVariables.html:title:h350

試行錯誤したところ、一応直接変数からライトの角度を拾ってくることができたので、CustomFuncutionから取得できるようにしました。

void MainLightDirection_half(out half3 Direction)
{
    #ifdef SHADERGRAPH_PREVIEW
        Direction = half3(0.5h, 0.5h, 0);
    #else
        Direction = _WorldSpaceLightPos0.xyz;
    #endif
}

f:id:tat1kun:20210930223302j:plain
グラデーションで陰影処理をしてみるシェーダ

f:id:tat1kun:20210930223828j:plain

おわりに

Builtinのシェーダってサーフェイスシェーダが強力というイメージがありました。一方で現状の実装であればシェーダグラフで構築する場合にはSRPと同様にサーフェイスシェーダに頼らない実装になると思うんですよね。今回のこのbuiltinの対応は何に対する準備なんでしょうか、アナウンスがあった気もしないので気になりますね。