ShaderTips

シェーダーTips

主にUnityシェーダーについての記事を書いています。

【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 に設定する必要があります。

参考

docs.unity3d.com www.youtube.com