Version: 2021.3
言語: 日本語
シェーダーグラフでのストリーミング仮想テクスチャリングの使用
テクスチャを "Virtual Texturing Only" とマークする

仮想テクスチャリングのキャッシュ管理

仮想テクスチャリングでは、GPU メモリに固定サイズのテクスチャキャッシュを使用します。グラフィックス形式ごとに 1 つのキャッシュがあります。キャッシュのデフォルトサイズを設定したり、デフォルトサイズを上書きしたりすることができます。

ストリーミング仮想テクスチャリング (SVT) システムでは、メインメモリの 1 つの CPU キャッシュを使用してタイルページを格納します。タイルページには、SVT システムがディスクから CPU キャッシュにまとめて読み込んだ複数のタイルが含まれています。これにより、低速度のドライブでディスクからの読み取りスループットの速度が向上します。仮想テクスチャリングシステムがタイルをリクエストすると、そのタイルを含むページを読み込みます。システムは次のフレームでそのページの他のタイルを要求する可能性があります。そのため、CPU キャッシュはそのページを保持し、ディスクからの他の読み取りを避けます。CPU キャッシュのサイズが大きければ大きいほど、仮想テクスチャリングはそのページをメインメモリに長く保持することができます。

仮想テクスチャリングは、指定した形式を使用するテクスチャのテクスチャスタックを持つマテリアルを描画するときに、そのグラフィックス形式の GPU キャッシュを割り当てます。そのグラフィックス形式の GPU キャッシュを割り当てます。キャッシュサイズ (MB) は、HDRP Asset 上で設定できるため、品質レベルごとに異なる設定が可能です。

VirtualTexturing.Streaming.SetGPUCacheSettings メソッドを使って、スクリプトでキャッシュサイズを設定することもできます。

キャッシュサイズを変更することもできますが、その場合、リソースの負担が高い CPU や GPU の動作となり、メインスレッドとレンダースレッドの両方がブロックされます。キャッシュサイズの変更にかかる時間は、キャッシュのサイズと数によって異なります。フリーズやスタッターが目立たないようにするには、フレームレートの重要性が低い時 (レベルのロード時など) にキャッシュサイズを変更するとよいでしょう。

あるキャッシュの最適サイズに影響する主な要因は、出力画面の解像度と、そのグラフィックス形式を使用する各テクスチャスタックのレイヤー数です。シーンのマテリアルの数やテクスチャの解像度は、最適サイズにそれほど影響しません。最高品質の設定でフル HD の画面解像度を使用する場合、GPU キャッシュの合計サイズは通常 700 MB です。

キャッシュのサイズが小さすぎてキャッシュの内容を収容できず、同じフレーム内でタイルのロードとアンロードを行わなければならない場合、“キャッシュスラッシング” と呼ばれる問題が発生します。キャッシュスラッシングを防ぐために、仮想テクスチャリングシステムは、必要に応じて自動的にテクスチャの品質を下げます。キャッシュの使用状況を監視し、ピクセルシェーダーのテクスチャスタックサンプリングのためのミップマップバイアスを自動的に管理します。キャッシュがいっぱいになると、ミップマップバイアスが増加します。これにより、仮想テクスチャリングシステムが低解像度のタイルを要求することで、キャッシュのスペースが節約され、リクエストされたすべてのタイルを格納することができます。

テクスチャがぼやけて見える場合は、キャッシュのサイズを大きくしてみてください。フレームを最高の品質でレンダリングするのに十分な大きさのキャッシュがすでにある場合、キャッシュのサイズをさらに大きくすると、キャッシュにタイルをより長く保持できます。これにより、最近表示されていたタイルがまだキャッシュに残っている可能性が高くなるため、カメラを動かしたり回したりするときにテクスチャが飛び出すなど、望ましくない効果を減らすことができます。

シェーダーグラフでのストリーミング仮想テクスチャリングの使用
テクスチャを "Virtual Texturing Only" とマークする