ミップマップストリーミング (ミップマップストリーミング) システムを使うと、Unity による ミップマップ のロードの方法を制御できます。
このページには以下の情報が含まれています。
このシステムの機能を拡張するための API の使用については、ミップマップストリーミングシステム API を参照してください。
このシステムは、デフォルトですべてのミップレベルをロードする代わりに、現在のカメラ位置のレンダリングに必要なミップレベルのみをロードするように強制します。これは、大量の GPU メモリを節約するために、少量の CPU リソースを犠牲にするものです。
アプリケーション内のすべてのテクスチャに対してメモリの総量制限を設定することができ、システムはミップレベルを自動的に削減して、この制限内に収まるようにします。
Unity の Viking Village デモプロジェクトでは、ミップマップストリーミングシステムはカメラの場所に応じて、テクスチャメモリの 25 - 30% を節約します。
ミップマップストリーミングを有効にするには、Unity の Quality Settings (Edit > Project Settings > Quality) を開き、Texture Streaming チェックボックスを有効にします。
この設定を有効にすると、Quality Settings ウィンドウにミップマップストリーミングシステム固有の設定項目が表示されます。各設定の詳細については、Quality Settings のドキュメントを参照してください。
デフォルトでは、これにより、プロジェクト内のすべてのカメラでミップマップストリーミングが有効になります。
これで、個々のテクスチャにミップマップストリーミングを設定することができます。テクスチャアセットを選択し、Inspector ウィンドウに移動し、テクスチャインポートの設定を表示します。Advanced 設定を開き、Streaming Mip Maps チェックボックスを有効にします。
Android 用に開発する場合は、Build Settings (ビルド設定) を開き、Compression Method を LZ4 か LZ4HC に設定する必要があります。 Unity では、ミップマップストリーミングシステムが依存する 非同期テクスチャのロード にそれらの圧縮方法の 1 つが必要です。
Unity は、メモリバジェットを守りつつ、可能な限り高い解像度でミップをロードします。テクスチャの優先順位は、テクスチャインポート設定の Mip Map Priority の設定で設定することができます。
Unity は、この設定を使用して以下を決定します。
正の数は優先度を高くします。有効な値は –128 から 127 までです。
ミップマップストリーミングシステムを使用して、ライトマップのミップレベルをストリーミングすることができます。
ライトマップアセットのミップマップストリーミング設定は、他のテクスチャと同じように編集できますが、Unity がライトマップを再生成するときにデフォルト値にリセットされます。これを解決するには、ライトマップを生成するときにこれらの値を適用するように Unity に指示します。Player Settings (Edit > Project Settings > Player) には、生成されたライトマップのストリーミングと優先度を設定する 2 つのコントロール Lightmap Streaming Enabled と Streaming Priority があります。
Enabling Mip Map Streaming and configuring priority work in the same way for lightmaps as for regular textures.
Unity エディターでデフォルトの設定を行い、必要に応じて ミップマップストリーミング API を使用してこれらの設定をオーバーライドすることができます。
Memory Budget プロパティは、Unity がシーンのテクスチャに使用するメモリの最大量を決定します。メモリバジェットが小さすぎると、Unityはシーン内のテクスチャの解像度を下げてしまいます。これにより、テクスチャがポップしたり、ロードが遅くなったりします。しかし、他のリソースのためのメモリを確保するために、メモリバジェットはできるだけ小さくすべきです。
Quality Settings ウィンドウの Texture Streaming > Memory Budget プロパティで、メモリバジェットを設定します。
メモリバジェットがいっぱいになると、Unity は使用していないミップマップを破棄して、使用する必要があるミップマップのためのスペースを確保します。未使用のミップマップをどれだけ捨てるかは、Max Level Reduction で制御することができます。
この値は、ミップマップストリーミング システムが起動時に最初にロードするミップマップレベルでもあります。例えば、この値を 2 に設定すると、Unity は最初のロード時に最も高い 2 つのミップマップをスキップします。
この値は、Quality Settings ウィンドウの Texture Streaming > Max Level Reduction プロパティで設定します。
ノート: Unity はメモリバジェットよりも Max Level Reduction の値を優先します。例え、テクスチャのメモリがバジェットを超えることになっても、Max Level Reduction の値を超えるミップマップを破棄することはありません。
メモリバジェットには、ミップマップストリーミングを使用しないテクスチャが含まれます。例えば、予算が100MB で、ミップマップストリーミングを使用しないテクスチャが 90MB ある場合、Unity は残りの10 MB にすべてのストリーミングミップマップを収めようとします。それができない場合、低い解像度でロードます。Unity は、例え、メモリバジェットをオーバーしても、ミップマップストリーミングを使用しないテクスチャを常に完全な解像度でロードします。
適切なメモリバジェットは、以下の方法で求められます。
これにより、シーンの中で最もリソースを必要とする領域に利用できる十分なテクスチャメモリが確保され、テクスチャが低解像度に落ちるのを防ぐことができます。メモリに余裕がある場合は、メモリバジェットを大きく設定することで、シーンで表示されていないテクスチャデータをストリーミングキャッシュに残すことができます。
デフォルトで、ミップマップストリーミングシステムを有効にすると、Unity はすべてのカメラに対してこれを有効にします。必要に応じてこの設定を無効にすることができます。
Unity がすべてのカメラのミップマップストリーミングを有効にするかどうかは、Quality Settings ウィンドウの Texture Streaming > Add All Cameras プロパティで設定します。
特定のカメラを除外したい場合は、そのカメラに Streaming Controller コンポーネントを加えてから、無効にします。
Add All Cameras を無効にすると、カメラ毎のミップマップストリーミングを有効にする必要があります。これを行うには、Camera コンポーネント同様に、ゲームオブジェクトに Streaming Controller コンポーネントを加えます。
また、このコンポーネントでは、カメラごとにミップバイアスの設定を調整することができます。
Mipmap Streaming (also known as texture streaming) in the Editor is enabled by default, but only takes effect if you have enabled Texture Streaming in Quality Settings, and have enabled Mipmap Streaming on one or more of your texture asset’s import settings.
You can control whether Unity uses Mipmap Streaming in the Editor in both Play Mode and Edit Mode independently. To do this, go to Project Settings > Editor > Streaming Settings.
If you enable Mipmap Streaming in the Editor for one mode but not the other, entering and exiting Play mode takes slightly longer. Enabling Mipmap Streaming for both modes prevents Unity from unloading and reloading mipmap data, and increases the speed of entering and exiting Play Mode.
The “Load texture data on demand” setting enables further optimizations in the Editor for textures which have mip-map streaming enabled, which:
These optimizations avoid some stalls, make loading slightly faster, and reduce the amount of CPU memory used. However, this setting can cause mip-mapped textures to temporarily appear at a lower resolution than they should while a higher resolution version is loaded in. This feature incurs some overhead on the CPU, so you might want to leave this disabled if your textures all fit in memory at once, or you don’t have any textures set up to stream.
Unity にはビルトインのミップマップストリーミングデバッグビューモードがあります。それにアクセスするには、シーンビューの描画モードのドロップダウン をクリックし、Texture Streaming を選択します。このビューモードでは、ミップマップストリーミングシステム内でのゲームオブジェクトの状態に応じて、ゲームオブジェクトに以下の色を設定します。
また、デバッグ API を使って、独自のカスタムデバッグツールやビジュアライゼーションを作成することもできます。
Important : When the main texture is set using the MainTexture attribute, it is not visible in the game view when you use the texture streaming debugging view mode or a custom debug tool.
ミップマップストリーミングを使用するテクスチャの場合、Unity は以下のいずれかの方法で正しいミップレベルを計算します。
これを行わないと、Unity は正しいミップレベルを計算できず、低品質のミップを使用してテクスチャをロードします。このため、ぼやけた印象になることがあります。
ノート: 以下のシステムは標準の Renderer コンポーネントを使用しません。つまり、これらのシステムで要求されるミップを手動で設定する必要があります。
_ST
値でそのテクスチャの scale と translation を探します。例えば、テクスチャを _ MainTex
を使用してシェーダーで参照する場合、Unity は _ MainTex_ST
を探します。