【Unity】「Shader Weaver」に任意のシェーダープログラムを後付けする

DEVELOP, Unity

「Shader Weaver」は、Asset Storeで配布されているノードベースのシェーダーアセットです。

Shader Weaver – Asset Store

非エンジニアの人でもGUI上でノードを繋げるだけで、美しく効果的な演出を実装できる素敵なアセット。今回はそんなShader Weaverに独自コードを流し込みたくなった(後付けしたくなった)話です。

アプリ固有の効果付けを一括で行いたい

全てのキャラクターをグレーアウト出来る様にだとか、カードのイラストに同じ効果を付与したいとか、Shader Weaver で編集したものに対して独自コードを後付けしたいことがあります。ひとつひとつ設定していてはデザイナさんの工数も馬鹿にならないので一括処理したい。これを実現するために一つの例として、出力されたシェーダープログラムをテキスト解析して、任意のコードを挿入するというものがあります。

サンプル

例えば「一括でグレイスケールの効果を付与したい!」となれば以下の様なコードを書きます。

Template.txtファイルは実際に挿入するコードそのものです。Shader WeaverからShaderファイルがファイルが作成、出力されたタイミングはAssetPostprocessorクラスのOnPostprocessAllAssetsで検知しShaderプログラムの解析を行います。こちらで指定したキーとなる文字列が見つかったら、Template.txtを読み込んでその場所にコードを挿入します。以降この繰り返し。内容を変えたくなったら、*Template.txtを編集し更新をかけます。

まとめ

今回のShaderコード解析は特定の文字列を探してコードを挿入するという単純なものでした。単純ですが、これが結構便利に使えます。例えばFBXモデルを解析して取り込むだとか、ファイルを扱う物に対して応用が利きますので、色々と試してみるのも面白いかもしれません。