Shaderを使ってレンダリング時にシェーダを差し替える方法です。Shaderという機能があります。これを使うと、下記二つのことが実現可能になります。レンダリングに使う全てのシェーダをまるごと差し替えるレンダリングに使う全てのシェーダをTagの情報に基づいて差し替えるこの二つが一つの機能としてまとめられているのでややこしくなっています。この記事ではそれぞれを分けて説明します。Shaderの一つ目の機能として、レンダリングに使う全てのシェーダをまるごと差し替えるというものがあります。この効果を検証するため、まずシーン上に適当なオブジェクトを生成します。シェーダはStandardシェーダをアサインしておきます。次に適当なシェーダを作成します。今回は赤色を返すだけのシェーダにしました。}}そしてこのシェーダをCamera.SetReplacementShader()に渡します。このとき第二引数をnullに指定することで、レンダリング対象のオブジェクトが持つシェーダをすべて置換します。}}このスクリプトをカメラにアタッチして再生します。シェーダが置換されてオブジェクトが赤くなることが確認できました。2.レンダリングに使う全てのシェーダをTagの情報に基づいて差し替える次にレンダリングに使う全てのシェーダをTagの情報に基づいて差し替える方法を説明します。前節のシェーダを少し変えてこんな感じにします。"Opaque"を定義しました。次にスクリプトの方も少し変えます。}}Camera.SetReplacementShaderの第二引数にRenderTypeを指定しました。これをカメラにアタッチして再生すると、以下の処理が行われます。"Opaque"が定義されているので置換ができるはずです。再生結果は以下の通りとなります。SubShaderが置き換えられていることが確認できました。ModeをTransparentにします。"Transparent"が定義されています。"Transparent"が定義されていないため、オブジェクトがレンダリング対象から外れました。ちなみにこの性質を利用して置換用を以下のように定義すれば、「不透明のオブジェクトは赤、半透明のオブジェクトは緑」にすることができます。Shaderの設定を行うだけで実際のレンダリングタイミングはカメラに任せることになりますが、もしレンダリングまで行いたければCamera.RenderWithShader()を使います。»プロフィールUnityエンジニア。グラフィックスへの興味が強めです。【Unity】【エディタ拡張】テクスチャを指定したUV座標で切り取って保存する【Unity】指定したアセットのAssetBundle名を取得する【Unity】【シェーダ】スクリプトからVP行列を渡してシェーダで座標変換に使う【Unity】【シェーダ】FloatやVectorをリニアライズ対象にするGammaアトリビュート【Unity】【Addressable】アセットバンドルのダウンロード・ロード処理をカスタムする月別アーカイブはてなブログをはじめよう!halya_11さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。