SceneCaptureコンポーネントの「Capture Every Frame」が有効なまま(デフォルト)、「Capture Scene」を実行し、同フレーム内でSceneCaptureコンポーネントを破棄するとエンジンがクラッシュ

[添付画像1番目]のようなSceneCaptureの使い方でクラッシュが発生します。

  1. SceneCaptureコンポーネントをアクターに追加 (SceneCaptureComponent2D または SceneCaptureComponentCube
  2. SceneCaptureコンポーネントの「Capture Every Frame」が有効なまま(デフォルト)、「Capture Scene」を呼ぶ
  3. 同フレーム内でSceneCaptureコンポーネントを破棄

■ 技術的な原因の詳細 (若干簡略化しています)

クラッシュの直接原因は、SceneCapture中に FOcclusionFeedbackVS というGlobalShaderが見つからないことですが、本来このシェーダはモバイル向け処理(FOcclusionFeedback::SubmitOcclusionDraws)でしか使われません

[添付画像2]・[添付画像3]・[添付画像4]

という形になっていますが、Windows(PCD3D_SM6)環境でこの処理が呼ばれてしまうのは、FViewInfo 内の FSceneViewState* ViewState が既に破棄されており、無効な状態で参照されてしまっているためだと推測しています。

[添付画像5]

この無効な参照が起きる原因は、レンダラー内の BeginOcclusionTests にバグがある為だと考えています。具体的には、「Capture Every Frame」が有効な状態で「CaptureScene」を実行すると、SceneCaptureコンポーネントが保持している FSceneViewState が BeginOcclusionTestsパス(描画ステップ)によって参照されます。この BeginOcclusionTestsパスは非同期パスとしてマークされているため、実際の実行は「CaptureScene」が終わった後になることが多いです。そのため、「CaptureScene」実行後にSceneCaptureコンポーネントと FSceneViewState が破棄されても、非同期パス側がまだそのポインタを参照し続け、不正アクセス(クラッシュ)に繋がります。

[添付画像6]

レンダパスの非同期実行をOffにして(r.RDG.ParallelExecute 1)、クラッシュがなくなることは確認できています。

再現手順
SceneCaptureコンポーネントの「Capture Every Frame」が有効なまま(デフォルト)、「Capture Scene」を実行し、同フレーム内でSceneCaptureコンポーネントを破棄するとエンジンがクラッシュします。

詳細なご報告ありがとうございます。是非問題を再現してバグ登録させていただきたいと思うのですがUE5.5.4に添付いただいたノードを再現した上で、

SetRenderTargetを追加したもの(設定を行わないとUpdateSceneCaptureContents早期リターンします)でPIE/Standalone実行/PackagedGameで動作確認を行ってみましたがクラッシュが再現できておりません。

[Image Removed]

他に追加で必要な手順やプロジェクト設定等でお気づきの点はございますでしょうか?可能でしたら再現に用いたプロジェクトがあればご共有いただけますと幸いです。

またバグとは直接関連はないかもしれませんが Capture Every Frame が有効なままCaptureSceneを呼び出すと、

Warning: CaptureScene: Scene capture with bCaptureEveryFrame enabled was told to update - major inefficiency.といった警告が出力されると思うのですがこちらは出力されていますか?

宜しくお願いします。

非同期パスの挙動が関わってくるということなのでレベルのコンテンツ内容によってタイミングを調整する必要があったりするのかもしれません

返答が遅れまして申し訳ございません。確認いたします。