【Unity】テクスチャストリーミング
テクスチャストリーミングとは
通常、ミップマップは全ミップがメモリにロードされますが、テクスチャストリーミングを使用すれば、現在のカメラ位置のレンダリングに必要な分だけ、ミップマップをロードするので、GPU メモリを節約することができます。
手順としては、初めに低レベルのミップをメモリにロードしておき、カメラがオブジェクトに近づく毎に、高レベルのミップをロードします。
(ロードが完了するまでは低レベルのミップを表示に使います。)
カメラからオブジェクトが遠くなったら、高レベルのミップはアンロードします。
Quality設定
ミップマップストリーミングを有効にするには、Edit > Project Settings > Quality
に移動し、TextureStreamingをチェックします。
AddAllCameras
チェックを付けると全てのカメラでテクスチャストリーミングが有効になります。 外した場合はカメラごとにStreamingControllerコンポーネントを付けて、有効にします。
StreamingControllerのMipMapBiasはミップマップストリーミングシステムが選択したミップマップレベルにMipMapBiasに設定した値をオフセットして、ロードさせます。
例えば、Unityがmip1でテクスチャをロードし、MipMapBiasが1に設定されている場合、mip2をロードします。
負の値も設定できます。
MemoryBudget
Unityがシーンのテクスチャに使用するメモリの最大量を決定します(MB単位)。 MemoryBudgetがいっぱいになると、Unityは使用していないミップマップを破棄して、使用するミップマップのためのスペースを確保します。
メモリバジェットには、ミップマップストリーミングを使用しないテクスチャが含まれます。
例えば、MemoryBudgetを100MBで設定して、ミップマップストリーミングを使用しないテクスチャが 90MBある場合、Unity は残りの10 MB にすべてのストリーミングミップマップを収めようとします。それができない場合、低い解像度でロードします。
Unityはたとえ、メモリバジェットをオーバーしても、ミップマップストリーミングを使用しないテクスチャを常に完全な解像度でロードします。
RenderersPerFrame
各Rendererで使われているテクスチャが適切なサイズかどうかの判定処理を1フレームで何個のレンダラに対して行うか設定します。
デフォルトは512です。値を低くすると処理速度を上げることができますが、ミップマップのロードが遅くなります。
Max Level Reduction
1を設定するとMemoryBudgetの値を無視して、常にMax解像度のミップまでロードし、アンロードもしません。
デフォルトの2に設定すると1番解像度の高いミップ以外を最初にロードして、常に保持します。1番解像度の高いミップは最初にロードせずに、必要に応じてロード/アンロードします。
つまり、元のテクスチャが512x512だとすると、最初に256x256のミップまでロードして、追加でロード/アンロードするのは512x512のみです。
3に設定すると1〜2番に解像度の高いミップ以外を最初にロードして、1〜2番に解像度の高いミップは最初にロードせずに、必要に応じてロード/アンロードします。
4以降も同様に、ロード/アンロードするミップレベルを増やしていきます。
また、MemoryBudgetよりもMaxLevelReductionの設定を優先します。これによりテクスチャメモリがMemoryBudgetの合計を超えたとしても、 Max Level Reductionで設定した常に最初にロードしたレベルのミップは破棄されません。
Max IO Requests
テクスチャのファイルロード要求をいくつか発行できるかという設定します。(デフォルトは1024) 他のファイルロードと数値を共有するのであまりいじらない方が良いようです。
テクスチャの設定
テクスチャストリーミングを有効にするにはテクスチャ設定のStreamingMipmapsをチェックします。
MipMapPriority
ミップマップストリーミングシステムが選択したミップマップレベルにMipMapPriorityに設定した値をオフセットして、ロードさせます。
例えば、Unityがmip1でテクスチャをロードし、MipMapPriorityが1に設定されている場合、mip2をロードします。
StreamingSettings
Project Settings > Editor > Streaming Settings
から設定します。
Enable Texture Streaming In Mode チェックをすると再生中にテクスチャストリーミングを有効にします。
Enable Texture Streaming Edit Mode チェックをするとエディターでテクスチャストリーミングを有効にします。
ビルド設定
Android 用に開発する場合は、Build Settingsを開き、Compression Method を LZ4 か LZ4HC に設定する必要があります。