お世話になっております。
今回実装なされようとしている機能(VirtualTexturingの事前ロードを行う機能)につきまして、エンジンの機能を利用する箇所についてはアドバイスすることができますが、実装なされる機能の妥当性や効果につきましては御社側の実装内容による部分ですので、完全な機能の実装についての保証が出来かねる点につきましては改めて認識を共有できればと思います。また、ここまでのやり取りにおきまして実装部分の内容についてはコードベースでご共有頂く機会がございませんでしたため、コードベースで内容を共有できますと認識を一致させつつ具体的なやりとりができるかと思われます。現行の進め方でも問題ございませんが、マイルストーンの期限等もあるかと存じますので、必要に応じて代替案もご検討いただければと思います。
まずVTの基本的なフローとして以下のように流れていくことかと認識しております。VT機能の都合上、描画の結果反映までに1フレーム(以上の)遅延が発生する可能性があるという点がございます。
[GPU]
│ UV, dUV → 必要Mip/タイル推定
▼
[TextureLoadVirtualPageTable()]
│ → TextureLoadVirtualPageTableInternal()
▼
[Virtual Page Table Lookup]
├─ マップ済: 物理プールの該当タイルを参照
└─ 未マップ: 最低ミップへフォールバック
│
▼
[StoreVirtualTextureFeedback()]
│ (必要タイルIDを記録)
▼
[CPUでFeedback集計 → Request生成]
│
▼
[Upload Tiles] + [Page Table Map]
│
▼
次フレーム以降は高解像に改善
事前ロードが効かないケースにおける1つのケースとして、[LoadObjectでUTexture → IAllocatedVT取得] -> [任意のタイルをRequest/Upload]
-> [実描画のUV, スタック, ミップと「ページID不一致」] ->[PageTable未マップ扱い → 最低ミップ表示 → Feedback→再ロード] ということが発生している可能性が考えられます。まずはリクエストしている PageIds が 一致しているかどうかは確認する価値があるものと思われます。ここでのPageIDsは、OnEndFrame_RenderThread で Feedback時に記録した PageIds と、RequestVirtualTextureTiles, およびLoadPendingVirtualTextureTiles で指定する PageIds の一致になります。
これが問題ないことが確認できた場合、リクエスト自体には問題がなさそうではあるが、VTの結果反映までのパスでネックになっていることが考えられます。r.VT.MaxUploadsPerFrame を上げてもポッピングに対して効果が無い理由はいくつか考えられますが、そもそも当該フレームの「アップロード対象」が少ない、Feedback→集計→反映の1フレーム遅延で頭打ち、他の制限要因との競合、などが想定されます。stat virtualtexturing で状況を確認しながら各種パラメータを調整することで改善されることがあります。一例として、以下のようなパラメータを確認するのは一つの調整の目安としてございます。
・Num page visible not resident が高い → 必要なページがロードされていない
・Num page update が低い → アップロード制限に引っかかっている
このような状況である場合、例えば以下のような調整によってポッピングが緩和される可能性がございます。
r.vt.FeedbackFactor 8
r.VT.MaxUploadsPerFrame 100
r.VT.MaxUploadsPerFrame.Streaming 100
あくまで上記は一例ですが、これはコンテンツ次第や実装なされている機能、および動作状況(他のVT利用状況)などによっても影響する部分ではございますので、そのままの値を利用せずに調整の目安としてご確認ください。特に、r.VT.MaxUploadsPerFrame の値を大きくすることは、アップロード数の増加に伴い、物理プールの蓄積に伴うGPUメモリ使用量の増加、およびCPU負荷の増大、I/Oの帯域逼迫などに関与するため、値自体を大きくしすぎないようにご注意ください。
それから、弊社澤田からも提案がありましたが、
>また改造も伴ってしまうため、UE5.4で行うおすすめの方針としましては、遅延が問題となるようなものはVTを利用しない、
>もしくは既に試されているかもしれませんが、VTの設定で許容できる遅延まで解消できないか改めてお試しいただけますと幸いです。
上記の点は代替案として妥当かと思われますので、バックアッププランの一つとしてご考慮頂けますと幸いです。
よろしくお願いします。