stepismのブログ

ゲームだったりそれ以外だったり。色々やってるプログラマです。

【Unity】シェーダーコンパイルによるスパイクを減らす

   

どうも。急に寒くなったりして風邪など引きやすい時期ですが如何お過ごしでしょうか。たまにはプログラムっぽい話もしてみたり。

本題

外部からリソースを取得して、圧縮解凍まで行ってくれるUnityの便利な機能であるAssetBundle(アセットバンドル)。便利なんですが特徴を掴んでおかないとロード時間や、メモリ消費に影響が出てしまいます。

そもそも、AssetBundleは作成時に、
それ単体で動作する様に参照しているものは全て取り込まれる。

という仕様になっています。従って、同じファイルを参照した別々のAssetBundleデータをロードすると、たとえ同じファイルをを参照していてもユニークな物として扱われ、メモリには複数ロードされることになります。

ダメな例

shader_unity_compile
SpriteWithMaskはシェーダーファイルです。同じシェーダーを参照した別々のアセットバンドルをロードした数だけメモリに積まれてしまいます。これは大変だ。

そして、その分スパイクが発生する。

shader_unity_compile_2
スパイクっていうのは簡単にいえばカクつきの事。

解決方法

この解決方法としては、先にShaderファイルそのものをAssetBundleにしてロードしメモリに載せておく。するとAssetBundleに依存関係ができるためそれを参照する様になり自然とスパイクが減ります。

スポンサーリンク

スポンサーリンク

 - PC, プログラミング