テクスチャ ストリーミング システム、すなわちストリーマーはアンリアル エンジンの一部であり、各テクスチャの解像度を高くしたり、低くしたりします。これにより、利用可能なメモリを効率的に管理しながら 視覚的クオリティを適切に保ちます。この一部はミップすなわちミップマップで行われます。ミップはご利用のテクスチャ解像度に対して事前計算された画像のシーケンスです。テクスチャの LOD (Level of Detail) のようなものと考えることができます。 ミップの詳細については、 テクスチャのサポートと設定 のページをご覧ください。
ストリーマーにはワールドの独自のビューがあり、その更新サイクルは以下によって構成されます。
ワールドビューの更新
各テクスチャでどの解像度が理想的であるかを計算
ストリーミングのプール サイズに応じて実際にどの解像度が可能であるかを選択
更新するテクスチャを選択
ロード / アンロードのリクエストを生成
こうしたタスクを行うために、ストリーマーは非同期のワーカースレッドを使ってゲーム スレッドの作業負荷を減らして、ゲームの更新ループで上記の最初と最後のタスクだけを行うようにします。 ワールド ビューは各プリミティブ コンポーネントが使用するすべてのテクスチャのリストと、それぞれについてワールドの境界とテクセルのワールド サイズで構成されます。この情報と任意の視点から、 1 ピクセルあたり適切なテクセルの比率にするためにどの程度の解像度が必要であるかを計算することが可能です。次にコンポーネントが実際に画面上で可視か不可視かのような追加情報を考慮します。 その結果、各テクスチャについて理想的な解像度が決まります。続いてストリーマーが、ストリーミングのメモリ プールがこうした解像度を保持するのに十分な大きさであるかを計算します。十分でなければ、ストリーマーが選択したテクスチャに対して計画されていたクオリティを低下させていきます。 一度に 1 ミップずつ落としていって、割り当て量内に収まるようにします。
ミップを減らすときに、テクスチャを処理する順序は保持の優先度によって決まり、以下のルールの順に従います。
ランドスケープ テクスチャ、強制ロード テクスチャ、および既に解像度が足りないテクスチャを保持します。
画面上で可視のミップを保持します。
キャラクターのテクスチャ、およびメモリを多く使わないテクスチャを保持します。
直近に見えたもののミップを落としてから、不可視のミップを落とします。
ストリーマーが各テクスチャについてどの解像度をロードするかを決めたら、ロード順の優先度に従いどのテクスチャを更新するかを計算します。優先度は、評価されたいくつかの基準によって以下の順序で決まります。
最初に可視のミップからロードします。
最初に強制ロード テクスチャ、ランドスケープ テクスチャ、およびキャラクターのテクスチャからロードします。
最初にターゲット解像度からかけ離れているテクスチャからロードします。
不可視のものについては、直近に見えたものからロードします。
最終ステップでは更新リクエストのバッチを生成します。それぞれ、現在のテクスチャ解像度を増やすか、減らすかします。ひとつのバッチに対して更新されるメモリ量は、リクエスト数を低く保つために テンポラリ プール サイズによって制限されます。
4.15 で改善された点
低解像度アーティファクトを取り除き、異なるプラットフォーム間でばらつくメモリ負荷制限を自動処理しつつ、CPU およびメモリの使用を減らし、ロード時間を短縮するためにテクスチャ ストリーミング システムを 最適化しました。
テクスチャ メモリ使用の改善
テクスチャ ロード時間の改善
CPU 時間の短縮:
ゲーム スレッドの更新時間が 50% 短縮
ストリーミング レベルのテクスチャ処理遅延が 98% まで減少
低解像度のアーティファクト削減
自動メモリ割り当て
Texture Streaming Debugging Visualization Viewmodes (テクスチャ ストリーミングのデバッグ視覚化ビューモード)
Primitive Distance Accuracy (プリミティブの距離の精度)
Mesh UV Density Accuracy (メッシュ UV の密度の精度)
Material Texture Scale Accuracy (マテリアル テクスチャのスケールの精度)
Required Texture Resolution (必要なテクスチャ解像度)
最新の改善点とゲームのデバッグ方法については、 テクスチャ ストリーミングのデータのビルド および テクスチャ ストリーミングのメトリックのレポート のページをご覧ください。