ミップマップストリーミング (ミップマップストリーミング) システムを使うと、Unity による ミップマップ のロードの方法を制御できます。
このページには以下の情報が含まれています。
このシステムの機能を拡張するための API の使用については、ミップマップストリーミングシステム API を参照してください。
This system forces Unity to only load the mipmap levels needed to render the current Camera position, instead of loading all of them by default. It trades a small amount of CPU resources to save a potentially large amount of GPU memory.
You can set a total memory limit for all textures in an application, and the system automatically reduces mipmap levels to stay within this budget.
Unity の Viking Village デモプロジェクトでは、ミップマップストリーミングシステムはカメラの場所に応じて、テクスチャメモリの 25 - 30% を節約します。
ミップマップストリーミングを有効にするには、Unity の Quality Settings (Edit > Project Settings > Quality) を開き、Texture Streaming チェックボックスを有効にします。
この設定を有効にすると、Quality Settings ウィンドウにミップマップストリーミングシステム固有の設定項目が表示されます。各設定の詳細については、Quality Settings のドキュメントを参照してください。
デフォルトでは、これにより、プロジェクト内のすべてのカメラでミップマップストリーミングが有効になります。
これで、個々のテクスチャにミップマップストリーミングを設定することができます。テクスチャアセットを選択し、Inspector ウィンドウに移動して、テクスチャインポートの設定を表示します。Advanced 設定を開き、Mip Streaming チェックボックスをオンにします。
Android 用に開発する場合は、Build Settings (ビルド設定) を開き、Compression Method を LZ4 か LZ4HC に設定する必要があります。 Unity では、ミップマップストリーミングシステムが依存する 非同期テクスチャのロード にそれらの圧縮方法の 1 つが必要です。
Unity loads mipmap levels at the highest resolution possible while observing the memory budget. You can configure the priority of a texture with the Mip Streaming > Priority setting in the Texture Import Settings.
Unity は、この設定を使用して以下を決定します。
正の数は優先度を高くします。有効な値は –128 から 127 までです。
You can use the Mipmap Streaming system to stream mipmap levels for lightmaps.
ライトマップアセットのミップマップストリーミング設定は、他のテクスチャと同じように編集できますが、Unity がライトマップを再生成するときにデフォルト値にリセットされます。これを解決するには、ライトマップを生成するときにこれらの値を適用するように Unity に指示します。Player Settings (Edit > Project Settings > Player) には、生成されたライトマップのストリーミングと優先度を設定する 2 つのコントロール Lightmap Streaming Enabled と Streaming Priority があります。
ミップマップストリーミングを有効にし優先順位を設定することは、ライトマップに対して 通常のテクスチャ と同じように動作します。
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 コンポーネントを加えます。
This component also allows you to adjust the mipmap bias setting per-Camera.
エディターの Mipmap Streaming (テクスチャストリーミングとも呼ばれます) はデフォルトで有効ですが、品質設定 で Texture Streaming を有効にし、テクスチャアセットのインポート設定 の 1 つ以上で Mipmap Streaming を有効にした場合にのみ有効になります。
Unity がエディターで再生モードと編集モードの両方で Mipmap Streaming を使用するかどうかは、独立してコントロールできます。これを行うには、Project Settings > Editor > Streaming Settings に移動します。
エディターで片方のモードで Mipmap Streaming を有効にし、もう片方のモードで Mipmap Streaming を有効にしない場合は、プレイモードへの切り替えと終了に若干時間がかかります。両方のモードで Mipmap Streaming を有効にすると、Unity がミップマップデータをアンロードしてリロードすることがなくなり、Play モードへの切り替えと終了のスピードが上がります。
The “Load texture data on demand” setting enables further optimizations in the Editor for textures which have mipmap 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 mipmapped 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 を使って、独自のカスタムデバッグツールやビジュアライゼーションを作成することもできます。
重要: メインテクスチャが MainTexture 属性を使用して設定されている場合は、テクスチャストリーミング デバッグビューモード またはカスタムデバッグツールを使用すると、ゲームビューに表示されません。
For textures that use Mipmap Streaming, Unity calculates the correct mipmap level using one of the following methods:
If you don’t do this, Unity can’t calculate the correct mipmap level, and it loads the texture using low-resolution mipmap levels. These can appear blurry.
Note: The following systems don’t use standard Renderer components. This means you must manually set the requested mipmap levels for these systems:
_ST
値でそのテクスチャの scale と translation を探します。例えば、テクスチャを _ MainTex
を使用してシェーダーで参照する場合、Unity は _ MainTex_ST
を探します。