🧊

Shader Variant Loading Settingsに関して

に公開

UnityのShaderデータの保存と読み込みの仕組み

UnityのShaderデータは、アプリのビルド時にコンパイルされ、LZ4形式でアプリのバイナリに格納されます。コンパイルされたデータは、Chunkと呼ばれる単位に分割されます。デフォルトのChunkサイズは16MBです。

アプリ起動時、このバイナリ内のすべてのChunkがメモリに展開されます。Shaderの数やVariantが多い場合、このサイズは数百MBにも達することがあり、特にモバイルデバイスではメモリを圧迫し、クラッシュの原因となることがあります。

このメモリ消費を抑えるために、Shader Variant Loading Settingsを設定します。

Shader Variant Loading Settingsの設定

Shader Variant Loading Settingsは、Project Settings > Player > Otherから設定します。

Default chunk size

Chunkのデフォルトサイズです。さまざまなChunkサイズを試しましたが、明確な違いは感じられなかったため、通常は変更不要と思われます。

Default chunk count

一度に展開するChunkサイズ数です。0に設定すると、すべてのChunkが展開されます。
この値を1以上に設定することで、一度に展開されるChunkの数を制限し、メモリ消費を抑えることができます。

ただし、すべてのプラットフォームで一律に設定すれば良いわけではありません。Shaderの読み込みが発生したタイミングでChunkの展開処理が行われるため、一瞬カクつくような挙動が発生する可能性があります。この挙動を許容できるかどうかが、設定の可否を分けるポイントです。個人的な体感としては、そこまで深刻なデメリットは感じないため、メモリに余裕がないモバイルデバイス向けのアプリでは、とりあえず設定しておくことをおすすめします。

Default chunk countを大きくするほど、カクつきが発生する確率は減りますが、メモリ消費は増加します。いくつかの値を試してみて、あまり違いが感じられないようであれば、1にしておくのが無難でしょう。

結論

メモリに余裕がないプラットフォームの場合、Default chunk countには、とりあえず1を設定しておきましょう。

参考

Discussion