Version: 2021.3
言語: 日本語
ミップマップストリーミングシステム
Streaming Controller コンポーネント

ミップマップストリーミングシステム API

この API を使用して、ミップマップストリーミングシステム のデフォルト設定をオーバーライドしたり、よりきめ細かい制御を行うことができます。

このページには以下の情報が含まれています。

このシステムに関する一般的な情報については、ミップマップストリーミングシステム を参照してください。

概要

ミップマップストリーミングシステムが自動的にデフォルト設定を管理する一方で、API を使って特定の状況に応じた動作をオーバーライドすることができます。

これは、Unity が特定のテクスチャを完全にロードする必要がある場合に便利です。例えば、大きな距離をすばやく移動するゲームオブジェクトに関連する場合、または瞬間的なカメラカットを使用する場合などです。

ミップマップストリーミングシステムの制御

テクスチャのミップマップストリーミングを有効にして制御するには、以下のプロパティを使用します。

ミップマップストリーミングは、テクスチャのミップレベルをミップマップストリーミングの Memory Budget (メモリバジェット) に収まるように自動的に縮小します。テクスチャの Mip Map Priority (ミップマップ優先順位) の数字はおおむね Memory Budget のミップマップオフセットに当たります。例えば、優先順位が 2 の場合、ミップマップストリーミングシステムは、優先順位が 0 の他のテクスチャよりミップレベルが 2 つ高いミップマップを使用しようとします。負の値も有効です。これを行うことができない場合は、Memory Budget に合うように低いミップレベルを使用します。

これらのプロパティは、実行時には読み取り専用になります。

ランタイムに発生する処理を制御するには、以下の静的プロパティを使用します。

カメラの制御

ある場所から別の場所へ切り替えるとき、ミップマップストリーミングシステムは、必要なテクスチャを Unity にストリーミングする時間が必要とします。無効にしたターゲットカメラ位置で事前ロードを起動させるには、ターゲットカメラの Streaming Controller コンポーネントで StreamingController.SetPreloading を呼び出します。終了時間を指定して、事前ロードフェーズを終了することができます。プリロードの終了時に自動的にカメラを有効にするには、スクリプトで activateCameraOnTimeout フラグを true に設定します。カメラから新しいカメラに切り替えた後、そのカメラを無効にするには、disableCameraCuttingFrom パラメーターとして無効にするカメラを渡します。

void StreamingController.SetPreloading(float timeoutSeconds=0.0f, bool activateCameraOnTimeout=false, Camera disableCameraCuttingFrom=null)

プリロード状態をキャンセルまたはクエリするには、以下のメソッドを使用します。

ミップマップストリーミングシステムが依然としてテクスチャをロードしているかどうかを判断するには、以下のプロパティをクエリできます。

カメラを有効にしてからプロパティがゼロ以外の値になるまでに、遅延があることに注意してください。この遅延は、ミップマップストリーミングシステムがタイムスライス処理でミップマップを計算するためです。このため、カメラカット中は、カット前に最低限待機する必要があります。テクスチャバジェットやシーンの動きは、連続したミップマップストリーミングを引き起こす可能性があります。そのため、カットするまでの最大時間を設定する必要があります。

特定のミップレベルのロード

特定テクスチャのミップレベルの計算をオーバーライドするには、Texture2D.requestedMipmapLevel を使用します。これは、その特定テクスチャの 0 から最大の範囲内で設定できる正確なミップレベルです。または、それより低い場合は Max Level Reduction 値を使用します。0 が最高解像度ミップレベルです。

要求されたミップレベルがロードされているかどうかを確認するには、Texture2D.IsRequestedMipmapLevelLoaded を使用します。

リクエストしたミップレベルでのオーバーライドを止め、システムにミップレベルを計算させたい場合は、Texture2D.ClearRequestedMipmapLevel を使用して値をリセットします。

メッシュの UV 密度の推定値を取得するには、以下を使用します。

float Mesh.GetUVDistributionMetric(int uvSetIndex)

UV 分布メトリックを使用すると、カメラの位置に基づいて、必要なミップマップレベルを計算することができます。コードサンプルは Mesh.GetUVDistributionMetric を参照してください。

システムをオーバーライドしてすべてのミップを強制的にロードするには、Texture.streamingTextureForceLoadAll を使用します。

デバッグとプロファイリング

デバッグ用のビジュアライゼーションを作成するために使用するマテリアルプロパティで、テクスチャごとのストリーミング情報を取得するには、Texture.SetStomengTextureMaterialDebugProperties を使用します。

Texture.SetStreamingTextureMaterialDebugProperties を使用して、各テクスチャのストリーミングステータス情報をマテリアルプロパティに割り当てます。その後、シェーダーでこれらのプロパティを使用して、デバッ グの視覚化を行うことができます。

また、これらのプロパティを使用して、プロジェクト用のミップマップストリーミングプロファイリングおよびデバッグツールを作成することも可能です。

ミップマップストリーミングシステムが相互作用するテクスチャやレンダラーの数に関する情報を取得するには、以下のプロパティを使用します。

テクスチャのミップマップレベルに関する情報を取得するには、以下のプロパティを使用します。

関連する Unity API メソッド

マテリアルに割り当てられたテクスチャを取得および設定するには、以下を使用します。

マテリアルのすべてのテクスチャプロパティを取得するには、以下を使用します。

ミップマップストリーミングシステム
Streaming Controller コンポーネント