5.3ベースのプロジェクトでNvidiaドライバーによるDOFのモザイクアーティファクトの問題が出ています。
テストでNvidiaドライバーを577に戻したところ改善しましたが、ユーザーにドライバーのロールバックを強制するのは現実的ではない為、根本的な修正をしたいと考えています。
この不具合の修正方法についてEpic Developer Assistantで質問したところ以下の回答がありました。
5.3のプロジェクトで手動パッチを行う手順
UE 5.3のソースビルド版(GitHub版)を使用していることを前提として、NVIDIAドライバ起因のPSO(Pipeline State Object)メモリ問題に対する手動パッチの手順を解説します。
この修正の目的は、不要になったPSOを確実に解放し、GPUメモリ(シェーダーヒープ)の枯渇による描画不良やクラッシュをeliminate(排除)することです。
1. 修正対象のファイル
以下のファイルを編集します。
エンジン/ソース/実行時間/D3D12RHI/プライベート/D3D12StateCache.cpp
Engine/Source/Runtime/D3D12RHI/Private/D3D12PSO.cpp(および関連するヘッダ)
2. 手動パッチのロジック(概要)
修正の核心は、D3D12RHIがPSOをキャッシュに保持し続けるのではなく、参照カウンタがゼロになった際に明示的に削除をトリガーするようにすることです。
手順 A: D3D12PSO.cpp の修正
PSOのデストラクタまたは解放処理において、DirectX 12のネイティブオブジェクト(ID3D12PipelineState)を即座に Release() するか、Deferred Deletion(遅延削除)キューに正しく追加されるようコードを確認・修正します。
手順 B: D3D12StateCache.cpp の修正
ステートキャッシュが古いPSOを保持しすぎないよう、キャッシュのクリア条件を厳格にします。
ClearState() 関数や、パイプライン切り替え時のロジックにおいて、現在のPSOが以前のものと異なる場合、古いPSOの参照を保持し続けないように SafeRelease または Reset() を確実に呼び出します。
3. パッチ適用後のビルド手順
コードを修正しただけでは反映されません。 RHIモジュールの再コンパイルが必要です。
Visual Studioを開く: プロジェクトの .sln ファイルを開きます。
D3D12RHIプロジェクトを探す: Engine/Runtime/D3D12RHI を右クリックします。
リビルド: 「リビルド(Rebuild)」を選択するか、エンジン全体をコンパイルします。
コマンドラインで行う場合(UnrealBuildToolを使用):
UnrealBuildTool.exe MyProject Win64 Development -Project=“C:/Path/To/MyProject.uproject”
シェーダーの再コンパイル: 次回起動時、または DerivedDataCache をクリアして、修正されたRHI環境下でシェーダーが正しく生成されるようにします。
しかし、回答にある「Engine/Source/Runtime/D3D12RHI/Private/D3D12PSO.cpp」がプロジェクトに存在しませんでした。
こちらの回答内容は正確なものでしょうか?
また、別途正確な解決方法があればご提示いただけますでしょうか?
以上、よろしくお願いいたします。
[Attachment Removed]