こんにちわ、オオバです。

Unityには結構前からReplaced Shadersという機能が提供されています。
これは特定のシェーダーを置き換えてくれる便利機能です。

Replaced Shaders でのレンダリング - Unity マニュアル

オオバ自身結構前からこの機能の存在は知っていたのですが、リファレンスを読んでも分かりづらかったのでまとめます。

Replaced Shadersとは、SubShaderに定義されたタグで判定し、シェーダーを置き換えて描画する仕組みです。

コチラのサンプルコードを御覧ください。
A1.shader · GitHub

合計4つのシェーダーの中の、A1 〜 3のシェーダーに以下のタグが設定されています。

シーン上ではこのようにマテリアルを設定した球を配置しています。

最初理解しづらいReplaced Shadersの仕組み_0

4つ目のシェーダーReplace.shaderに以下の2つのタグを設定しています(SubShaderが2つあります)。

var replaceShader = Shader.Find ("Replace");  
Camera.main.SetReplacementShader (replaceShader, "Hoge");  

このようにCameraのSetReplacementShader関数を使って置き換え用のReplace.shaderと、置き換えるキーとなるタグを指定(ここではHoge)します。

最初理解しづらいReplaced Shadersの仕組み_1

このコードを実行するとこのようにシェーダーが置き換えられます。

左のA1、真ん中のA2は、それぞれ置き換え用のシェーダーのタグとマッチするキーとバリューが存在したため、正常に置き換えられて描画されました。
※色が変わってしまったのは、置き換えシェーダー側の処理で色を変えています。

消えてしまった右のA3はは、キーHogeは存在しましたが、バリュー(Bar)が、置き換えシェーダー側に存在しな買ったため、描画対象から外されています。

このReplaced Shadersを使えば、特定のオブジェクトだけシェーダーを動的に変更するといったことができそうであります。

期間限定 最大95%オフセール
効率UPメガバンドル開催中!最大95%オフ!!!
期間 : 11月1日午後15時59分まで
オススメ記事