読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Unityのシェーダーを実行時モバイル向けに変更して描画パフォーマンスを稼ぐ

最適化・デバッグ Shader アセット紹介、AssetStore StandardAssets Android iOS

今回もSample Assetsについて。


新 Standard Assets候補、Sample Assets (beta) - テラシュールブログ

 

シェーダーを差し替えるAutoMobileShaderSwitch

Sample Assetsにシェーダーを一括で変更する面白いUtilityがあります。

f:id:tsubaki_t1:20141009231427p:plain

 

このAutoMobileShaderSwitchは、モバイルプラットフォームで起動した際、シェーダーを差し替えるアセットです。

(左・起動前、 右・起動後)

f:id:tsubaki_t1:20141009235428p:plain f:id:tsubaki_t1:20141009235437p:plain

iOS/Androidのようなモバイル端末では高い解像度の割にGPUが貧弱なので、複雑なシェーダーを実行すると簡単に処理落ちが発生します*1

そのため可能な限り複雑なシェーダーを避けMobileのような簡略化したシェーダーを使う事が、パフォーマンスを稼ぐ最も近道となります。

 


iOSでパフォーマンスに悪影響を与えるボトルネックを確認 - テラシュールブログ

 

AutoMobileShaderSwitchの使い方

AutoMobileShaderSwitchの使い方は非常に分かりやすいです。

「+」を押し左にリプレースする元のシェーダー、右に置換するシェーダーを指定します。不要な場合は「-」をクリックします。とても簡単。

f:id:tsubaki_t1:20141009234118p:plain

と簡単なのは良いのですが、この設計だと「実行時に置換」処理を行います。しかも内部的にはシーン内のRendererを全て舐めて、マテリアルのシェーダーを差し替える処理を行います。これは割と勿体無いので、シェーダーをエディタ側で書き換える感じのエディタ拡張を作っても良いかもしれません。”とりあえず”シェーダーを一括で変えたい人向けで。

*1:例えば現在公開しているユニティちゃんのシェーダーを使ったモデルを画面いっぱいに表示すれば、簡単にGPUを使い切ります。現在、高速軽量なユニティちゃんシェーダーを準備中との噂。とりあえず今はUnity仮面で代用すれば半分くらいの負荷に抑えられます