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