太郎Work

Unityとかで困ったこと等を残しておきます

SetReplacementShaderの使い方

公式の説明が全く意味不明だったのでメモ

Unity - Manual: Rendering with Replaced Shaders


カメラに映る全体を単一シェーダで描画したい場合は呼び出すだけ。

camera.SetReplacementShader (shader, null);


問題は特定のシェーダの場合のみ描画したい場合。

第2引数にカスタムタグの「キー」を指定すると、差し替えるシェーダに指定されているタグと対象にセットされているシェーダに指定されているカスタムタグの「」が一致していた場合描画される。
ここを理解するのに時間がかかりました…

shadowcamera.cs

camera.SetReplacementShader (shadow, "Shadow");


shadow.shader

Tags {
    "RenderType"="Opaque"
    "Queue"="Geometry"
    "Shadow"="Character"
}


character.shader

Tags {
    "RenderType"="Opaque"
    "Queue"="Geometry"
    "Shadow"="Character"
}

このようにするとUnity側がShadowタグを確認しここではCharacterが共通なため描画される仕組み。
他のシェーダにはそもそもShadowタグが存在しないので無視されます。

これでキャラクターのみの自前シャドウマップが作成出来ました。
めでたしめでたし