テクスチャ ストリーミング システム、すなわちストリーマーは、各テクスチャの解像度を増減させるエンジンの一部です。これにより、利用可能なメモリを効果的に管理しながら、 良好なビジュアル品質を実現できます。これは、テクスチャ解像度に対する事前に計算された画像のシーケンスであるミップ、すなわちミップマップで一部行われます。これらは、テクスチャの LOD のようなものと考えることができます。 ミップの詳細情報については、テクスチャ形式のサポートと設定 のページでご確認いただけます。
ストリーマーにはワールドの独自のビューがあり、その更新サイクルの構成は次のとおりです。
- ワールド ビューを更新する
- どの解像度が各テクスチャに理想的かを計算する
- ストリーミング プール サイズに基づいて、どの解像度が実際に可能かを選択する
- どのテクスチャを更新するかを選択する
- ロードまたはアンロード要求を生成する
これらのタスクを達成するために、ストリーマーは非同期のワーカー スレッドを使用してゲーム スレッドのワークロードを減らすことで、ゲームの更新ループで行う必要があるのは上記の最初と最後のタスクのみとしました。 ワールド ビューは、各プリミティブ コンポーネントが使用するすべてのテクスチャのリストで構成され、それぞれについては、ワールドの境界とテクセルのワールド サイズで構成されています。その情報と与えられた視点から、良好なテクセル パー ピクセル比を得るために必要と思われる 解像度は何かを計算することができます。それから、このコンポーネントが実際に画面上に表示されたかどうかといった追加情報が考慮されます。 これにより、各テクスチャの理想的な解像度が定義されます。それからストリーマーは、それらの解像度を保持するのに十分な大きさのストリーミング メモリ プールがあるかを計算します。もしなければ、ストリーマーは選択したテクスチャの計画された品質を低下させ、 計画されたソリューションがバジェット内に収まるまで 1 つずつミップを削除します。
ミップを削除する際のテクスチャの処理順序は保持優先度によって定義され、また次のルールに従います。
- ランドスケープのテクスチャ、強制ロードされたテクスチャ、および解像度がすでに不足しているテクスチャを維持
- 画面上で表示されているミップを維持
- キャラクターのテクスチャとメモリを多く使用しないテクスチャを維持
- 表示されていないミップを削除し、最後に表示されたものから削除
ストリーマーが各テクスチャにロードする解像度を決定したら、ロードの優先順位に従って最初に更新すべきテクスチャを計算します。優先順位は、次の基準によって順に評価されます。
- 表示されているミップを最初にロード
- 強制ロードされたテクスチャ、ランドスケープのテクスチャ、およびキャラクターのテクスチャを最初にロード
- ターゲットの解像度から遠いテクスチャを最初にロード
- 表示されていない場合、最後に表示されたものからロード
最後のステップは更新リクエストのバッチを生成することであり、それぞれが現在のテクスチャの解像度を増加または減少させます。単一のバッチで更新されるメモリの量は、 転送中のリクエスト数を低く保つために一時プールのサイズで制限されています。
4.15での改善点
テクスチャ ストリーミング システムは、CPU 使用量、メモリ 使用量、およびロード時間を削減するよう最適化されていると同時に、低解像度のアーティファクトを削除し、さまざまなプラットフォームで変化するメモリ バジェットの制約を 自動的に処理します。
- テクスチャ メモリ使用量の改善
- テクスチャのロード時間の改善
- CPU 時間の削減
- ゲーム スレッドの更新時間が 50% 削減
- ストリーミング レベルのテクスチャ処理のストールを最大 98% 削減
- 低解像度アーティファクトの削減
- 自動メモリの割り当て
- テクスチャ ストリーミングのデバッグ ビジュアライゼーション表示モード
- プリミティブ距離の精度
- メッシュ UV 密度の精度
- マテリアル テクスチャのスケール精度
- 必須のテクスチャ解像度
これら最新の改善およびゲームのデバッグ方法の詳細については、テクスチャ ストリーミング データのビルドおよび
テクスチャ ストリーミング メトリクスの報告 のページにアクセスしてください。