見出し画像

【Unity】URPのLitシェーダー改造

前回の記事ではビルトインレンダーパイプラインのStandard Shaderの改造を行いました。一方、URPではStandard Shaderの代わりにLitシェーダーが光の影響を受ける標準的なシェーダーとして用意されています。今回はこのURPのLitシェーダーの改造を行ってみます。

改造する内容としては既存のLitシェーダーに対してグレースケールの効果を加えてみます。実用性よりは変更箇所の把握が趣旨となっています。


環境

Unity 2022.3.34f1 / URP 14.0.11  / Windows 10
プロジェクトのレンダーパイプラインはURPに設定しておいてください。

1. シェーダーの複製

まず元となるPackages/com.unity.render-pipelines.universal/Shaders から以下のファイルを複製してリネームします。

  • Lit.shader → LitCustom.shader

  • LitForwardPass.hlsl → LitForwardPassCustom.hlsl

元となるオリジナルファイルに手を加えてしまうと、標準Litを使用するすべてのマテリアルに影響してしまうため、必ず複製して区別できるようにしましょう。保存場所はPackagesではなく、Assets配下の任意のフォルダに保存します。

2. LitCustomの編集

LitCustom.shaderを開き以下のように編集します。

1行目のシェーダー名を"Universal Render Pipeline/LitCustom"に変更

Propertiesに _Brightness("Brightness", Range(0.0, 1.0)) = 1.0 を追加

172行あたりにあるForwardLitのPassのincludeパスの書き換えとプロパティの追加

half _Brightness;
#include "Assets/Shaders/LitForwardPassCustom.hlsl"

CustomEditorのパスをコメントアウト

デフォルトではカスタムエディタのUIが適用されているため、独自のパラメータを追加してもインスペクタには表示されません。コメントアウトすることで標準のインスペクタ表示が適用され独自のパラメータが表示されるようになります。

カスタムUIでも独自のパラメータを表示させる場合は、コメントアウトした部分のファイルに独自のパラメータを追記する必要がありますが、手順が長くなるためここでは省略します。

3. LitForwardPassCustomの編集

238行あたりのコードを以下のように編集します。

内容としてはLuminace関数を使って輝度を計算し、_Brightness変数で係数を掛けています。アルファはそのままの値を入れています。

シェーダーの修正は以上になります。

4. 結果

適当なマテリアルに作成したLitカスタムシェーダーを適用します。

左のCubeがLitカスタム、右が標準Lit

インスペクタにも追加したパラメータが表示されていることが確認できます。

5. おわりに

ShaderGraphを使用すればLitベースの独自のシェーダーが作成できますが、標準のLitとは表現が異なる部分があります。今回の手法を用いれば標準Lit全く同じ表現上に独自の処理を付け加えることができます。

URPにおけるシェーダーの作成に関してはShaderGraphの使用が一般的ではあるものの、手段の一例として参考になれば幸いです。🌱


この記事が気に入ったらサポートをしてみませんか?