お世話になっております。
RuntimeVirtualTexture(RVT)のLockedPageResidencyの増加によりプールが圧迫される件について対策のご助言をいただけますでしょうか。
現在、RuntimeVirtualTextureを使用したLandscapeマテリアルを用意し、World PartitionのレベルにLandscapeおよびRuntimeVirtualTextureVolumeを配置して使用しております。
(RuntimeVirtualTextureのAdaptive Page Tableは有効にしています)
UE5.5環境下でこのレベル内を移動し続けるとLockedPage数が増加し続ける現象を確認しております。
また、増加後に元の位置へ戻ってもLockedPageは減少せずレベルが継続している限り減少しない状況でした。
一方、UE5.6で同様の検証を行った際はレベル継続中でもLockedPageが減少する場合がありました。
つきましては、
・UE5.5においてRVTのLockedPageが減少しない問題は既知の挙動でしょうか?もしくは私の検証に誤りがある可能性はございますか?
・RVTによるLockedPageの増加を抑制する方法、またはLockedPageを明示的に解放する手段があればご教示いただけますと幸いです。
よろしくお願いいたします。
[Image Removed]
             
            
              
              
              
            
            
           
          
            
            
              (下記のリンク先は、本スレッドを英語に翻訳した英文スレッドですが、Epic Games のサポートチームが内部的に使用するものですので、ユーザーの方に利用していただく必要はございません。サポートは、この日本語スレッドに日本語で表示されることになります。)
[How to prevent the increase in the number of LockedPages for [Content removed]
             
            
              
              
              
            
            
           
          
            
            
              [mention removed] 様
(以下は、サポート担当の Peterson Alex によるコメントを翻訳したものです。)
お世話になっております。
5.6 では、Virtual Texture のデフォルト値にいくつか変更がありました。具体的には、
r.VT.MaxUploadsPerFrame = 2 (RVT の更新コストを削減)
r.VT.MaxUploadsPerFrame.Streaming = 32 (VT ストリーミングの更新のための予算を分離)
r.VT.MaxReleasedPerFrame = 5 (ワールド パーティションのストリーミング シナリオのための最大コストを削減)
r.VT.PageFreeThreshold = 15 (VT のページをキャッシュに保持すること v.s. VT の常駐を解放すること ― のバランスを改善)
また、5.6 には修正およびフィードバックシステムの変更がいくつか含まれています。LockedPages に影響する変更についてより詳しい知識を持つ同僚に、本件問題を引き継ぎたいと思います。少々お待ちいただけますと幸いです。
             
            
              
              
              
            
            
           
          
            
            
              (以下は、サポート担当の Moore Jeremy によるコメントを翻訳したものです。)
お世話になっております。
以前、UnrealFest のための Witcher テックデモを作業していた時に、確かに同様の挙動を確認したことがあります。
RVT Adaptive Page Table は、動的にアロケートされる Virtual Texture のグリッドに依存しています (コードではF AdaptiveVirtualTexture::AllocationSlots の部分)。このグリッドの各要素はロックされたページを生成します。そして、グリッドの各要素が完全に解放されるまで、ロックされたページは解放されません。バージョン 5.5 では、アロケーションを解放するためのデフォルト値はかなり控え目でした。その理由は、解放するたびにページ テーブルのリマッピングが引き起こされ、コストのかかる操作となりうるからでした。そこで、バージョン 5.6 では、トレードオフ改善のためにロジックを以下のように調整しました。
* r.VT.AVT.AgeToFree を 0 (一切解放しない) から 1000 (age が 1000 になると解放) に変更しました。
* r.VT.AVT.PoolResidencyToFree を追加しました。age とプールでの residency (プールにどれだけ長く居続けているか) の両方を考慮したヒューリスティックに変更したものです。
5.6 ではこのような変更が AdaptiveVirtualTexture.cpp で行われ、デフォルト値も調整されたのですが、それでもロックされたページがプールの residency で一定の割合を占めることになるはずです。ただし、ワールドを動き回らないのが長時間続けば、おそらく、それも減少するはずです。さらに制御する必要であるならば、上記の 2 つのコンソール変数を調整してください。
5.6 では、もう一つの変更があり、本件問題には少ないながら影響があったかもしれません。
https://github.com/EpicGames/UnrealEngine/commit/ee4b1cff3bbe9f7cf0bc35e60f1d5d7e6a259855
これについて触れたのは、単に、アロケーションの挙動に影響があるからです。前述の主要な変更ほど重要なものではありません。
最後に、本件問題とは関係しませんが、非常に重要な 5.6 における変更についてもお伝えします。その変更とは、Adaptive Page Table の一時的なページ破損が生じかねない問題を修正するものでした。
https://github.com/EpicGames/UnrealEngine/commit/218af0adc51412680eb35472ae96425e4321c794
             
            
              
              
              
            
            
           
          
            
            
              情報ありがとうございます。
プロジェクトがUE5.6に移行した後に確認させていただこうと思います。
             
            
              
              
              
            
            
           
          
            
            
              木村様、
本件問題、記録上一旦クローズとさせていただきますが、さらに追加の質問が生じた場合や、何らかの問題が発生した場合は、こちらのスレッドにそのまま書き込んでいただければ、自動的に再オープンとなり、サポートを受けられるようになります。どうぞよろしくお願いいたします。