ご報告ありがとうございます。
checkf(GFrameCounterRenderThread != PreviousFrameCounter, TEXT("FRayTracingGeometryManager::Tick() should only be called once per frame"));は CL#51377533 が追加したものではなく5.6時点ですでに存在しているものであるため、CLによる副作用か、別の問題が表面化した可能性があります。また、このチェックは5.8でも同じ形で残っており、「Tick() が 1 フレーム中に 2 回呼ばれてしまう呼び出し側を修正する」必要があると考えております。Tick() の呼び出し経路については、 FRayTracingGeometryManager::Tick() の呼び出し元は1箇所のみで、これが発生する可能性は以下のどちらかが推測されます。
1.エンジンフレーム内で PostRenderAllViewports() が 2 回実行されている(独自の描画ループ、ローディング/ムービー再生まわりの描画パス、Movie Render Queue 系の再入、RedrawViewports() の明示呼び出し等)
2.GFrameCounterRenderThread が進まないまま 2 回目の呼び出しが来ている(通常は FEngineLoop::Tick 内で GFrameCounter とともに更新されますが、HighResScreenshot 経路や PreLoadScreen 経路など、別途 GFrameCounter を進める処理が絡むケースがあります)
切り分けのため、以下をご確認いただけますでしょうか?
1. checkf 発火時のコールスタック
UGameEngine::Tick / UEditorEngine::Tick のどちらから来ているかをご教示ください。可能であれば、1 フレーム内の 1 回目・2 回目それぞれのコールスタックがいただけると確実です。
2. FRendererModule::PostRenderAllViewports() の冒頭にログを追加
下記のようなログを仕込んでいただき、同一の GFrameCounter 値で 2 回出力されるかをご確認ください。
UE_LOG(LogTemp, Log, TEXT("PostRenderAllViewports GFrameCounter=%llu"), GFrameCounter);3. 発生タイミング
起動直後か、ゲームプレイ中か、特定の機能使用時か(SceneCapture、Movie Render Queue、ローディングムービー、ハイレゾスクリーンショット等)をご教示ください。
4. エンジン改造の有無
独自のエンジンループ、RedrawViewports() の明示呼び出し、描画スレッド周りの改造など、標準のフレーム進行から外れる実装が入っていないかをご確認ください。
・暫定的な回避について
特にこのコールスタックに関する回避策の情報が社内に今のところ見つかっておらず、該当の checkf は DO_CHECK ブロック内にあるため、コメントアウトすることで起動自体は可能になります。ただし、その場合 1 フレームに 2 回 Tick() が走る状態はそのまま残るため、以下の副作用が発生し得ます。
・LastReferencedFrame の更新および参照ベース residency(BLAS の常駐/エビクト判定)の計算が不正確になる
・ReferencedGeometryHandles / ReferencedGeometryGroups が想定外のタイミングで Reset される
・ストリーミングリクエストの発行・完了処理が二重に走る
結果として、BLAS のストリームイン/アウトのタイミングずれに起因する別のクラッシュやアサートを誘発する可能性がありますので、恒久対処としてはお勧めできません。そのため、上記 1〜4 の情報をいただけましたら、エンジン側で追加の対処が必要かどうかを含めて引き続き確認いたします。お手数をおかけしますが、よろしくお願いいたします。