公式の説明が全く意味不明だったのでメモ
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タグが存在しないので無視されます。
これでキャラクターのみの自前シャドウマップが作成出来ました。
めでたしめでたし