テンポラル アップスケーラー では、現在のフレームと以前のフレームからのデータを使用して、アップスケールされた高品質の結果を生成します。テンポラル アップスケーラーは、Unreal Engine 4 のテンポラル アンチエイリアシングのアップスケーリング (TAAU) か、Unreal Engine 5 の テンポラル スーパー解像度 か、または NVIDIA の DLSS 2+ Super Resolution、AMD の FSR 2.0+、Intel の XeSS といったサードパーティによって配布されたプラグインかにかかわらず、Unreal Engine ですべて同じように機能します。これらはすべて、ポストプロセス チェーンにおける被写界深度とモーション ブラーの間の同じ位置に組み込まれます。
テンポラル アップスケーラーの使用目的にかかわらず、レンダリング解像度は スクリーン パーセンテージ を使って、または 動的解像度 (サポートされる場合) によって一貫して制御されます。
テクスチャの自動化ビュー ミップ バイアス
スクリーン パーセンテージにより、ジオメトリは低いピクセル密度でレンダリングされます。つまりテンポラル アップサンプルでは、出力で同じシャープネスを維持するために、サーフェス と ディファード デカール のマテリアル ドメインから、レンダリングされたピクセルごとにより多くのテクスチャ情報が必要になります。
Texture Sample ノードをマテリアル グラフで選択すると、その [Details] パネルで [Automatic View Mip Bias (自動化ビュー ミップ バイアス)] を有効にして、テンポラル アンチエイリアシング メソッド (TSR や TAAU など) を使ったよりシャープな結果に向けて、テクスチャをビューごとのミップ バイアス処理でサンプリングするかどうかを設定できます。
小さな細部または高周波細部を多く含むテクスチャでは、自動化ビュー ミップ バイアスをより低いプライマリ スクリーン パーセンテージと組み合わせて使用することで、よりシャープな細部が失われることがあるため、問題となる場合があります。これを補正するには、[Details] パネルで [MipValueMode (ミップ値モード)] を [MipBias] に設定して、何らかの値を Texture Sample ノードの Bias 入力または [Const Mip Value (ミップ値定数)] に適用するか、[Automatic View Mip Bias] を完全にオフにします。
自動化ビュー ミップ バイアスは TAAU または TSR が有効な場合のみに処理されます。他のアンチエイリアス メソッド (MSAA や FXAA など) ではこの設定を使用しません。
TSR 後のポスト プロセス マテリアル
ポスト プロセス マテリアルでは、その使用場所から ブレンド可能な位置 (Blendable Location) を選ぶ必要があります。After Tonemapping (トーンマッピング後) と Replacing the Tonemapper (トーンマッパを置換) の各オプションは、レンダリング チェーンにおける TSR の後に処理されます。つまり、これらはフル解像度で処理されて、ビュー サイズとは異なります。
View Property 式には、パイプラインでの TSR 処理の前のビュー解像度を返す View Size (ビュー サイズ) と Render Target Size (レンダー ターゲット サイズ) の各オプションが含まれます (ただし、実際にこれらは TSR の後に処理されます)。TSR 後のビュー サイズとテクセル UV サイズを確認するには、Scene Texture 式で Size と InvSize の出力を含む PostProcessInput0 を使用します。
ビューポート UV をピクセル位置から再計算する場合は、次の例のように、SceneTexture:PostProcessInput0 を ScreenPosition で乗算します。
テンポラル アップスケーラーのビジュアライゼーション表示フラグ
テンポラル アップスケーラー のビジュアライゼーション表示フラグには、テンポラル スーパー解像度、テンポラル アンチエイリアシング、サードパーティのプラグインなど、すべてのテンポラル アップスケーラーに影響を及ぼす、共通のゴースト問題のデバッグに役立つ すべての関連バッファの概要が含まれます。こうした共通の問題には、オブジェクトの誤ったベロシティ ベクターや、透過性に関連するゴースト、ピクセルの実際の露光によって TSR をミスリードする内部バッファの過度に暗い事前露光、他のレンダリング アルゴリズムによって生成されるアーティファクト全般が含まれます。
この表示フラグには、レベル エディタの [Show (表示)] > [Visualize (視覚化)] メニューで テンポラル アップスケーラー (TSR、TAAU、またはサードパーティのプラグイン) を選択することでアクセスできます。
このビジュアライゼーション モードには、テンポラル アップスケーラーに影響を及ぼすアーティファクトの診断に役立つ入力と出力の生のバッファが含まれます。
| テンポラル アップスケーラーのビジュアライゼーション マップ | シーン例でのテンポラル アップスケーラーのビジュアライゼーション |
これらは、いずれもテンポラル アップスケーラーの生の入力と出力です。それぞれの色は事前露光された線形色空間内にあります。
さらなる調査のために対応するコマンドで注釈付けされたサムネイル
それぞれのサムネイルは、DumpGPU や他のサードパーティの GPU デバッグ ツールなどのリソース デバッグ ツールで使用されるリソース名と同じ名前のコンソール コマンドで注釈付けられています。たとえば、深度バッファは SceneDepthZ と呼ばれ、ランタイム視覚化ツールで vis SceneDepth を使って視覚化できます。
次は、DumpGPU で SceneDepthZ を使った TSR パスの例です。
以下は、DumpGPU でテンポラル アップスケーラーをデバッグする際に使用できるヒントの一部です。
r.DumpGPU.Root *PostProcess*を使うと、プロセスの高速化に使用されているテンポラル アップスケーラーを含むポスト プロセス チェーンのみがダンプされます。TSR に対しては、パイプラインの早期段階で TSR.Moire.Luma を生成するパスを含むr.DumpGPU.Root *TSR*を使用できます。- 発見したゴーストは DumpGPU でデバッグできます。DumpGPU コマンドを
r.DumpGPU.Delay 3(秒単位) とともに実行することで、ダンプを数秒間遅らせることができるため、ゲームプレイ ロジックでそのゴーストを再現する時間を得ることができます。 r.DumpGPU.FrameCountを使用すると、DumpGPU で連続した複数のフレームをダンプできます。- 他のフレーム デバッグ ツールとは異なり、DumpGPU は他のレンダリング機能と同じく Unreal Engine の RHI の上に実装されるため、サードパーティのテンポラル アップスケーラーのバイナリとの互換性に問題が生じることはありません。
深度バッファとベロシティ バッファの重要性
ビジュアライゼーション概要の左端にあるいくつかの列は、共通したテンポラル再投影問題の診断に使用されます。テンポラル アップスケーラーでの再投影は深度バッファとベロシティ バッファに依存します。シーン深度バッファはビジュアライゼーションで直接表示される一方で、ベロシティ バッファは、解釈が必ずしも容易ではない方法でエンコードされます。代わりに、VisualizeTemporalUpscaler 表示フラグでは VisualizeMotionBlur 表示フラグと VisualizeReprojection 表示フラグを表示します。これらはいずれも、コンソールに「show [command name]」と入力することで、エディタ ビューポートまたはランタイム時に利用できます。
VisualizeMotionBlur 表示フラグ (レベル ビューポートの [Show] > [Visualize] メニューからアクセス可能) では、レンダラ内部でエンコードされたモーション ベクターの方向と長さの配列を含む内部ベロシティ バッファでラスタライズされたオブジェクトの動きを直感的に表示します。静的ジオメトリは GPU パフォーマンスを節約するためにベロシティをレンダリングしないため、グレー ピクセルとしてレンダリングされます。それらのピクセル ベロシティは、深度バッファを使ってカメラの動きのみから計算されます。
Visualize Reprojection 表示フラグ (レベル ビューポートの [Show] > [Visualize] メニューからアクセス可能) では、モーション ベクターを使って表示された以前のフレームを再投影して、現在のフレームとその再投影された最後のフレームとの差分を色付けして表示します。これにより、モーション ベクターがオブジェクトの動きに対して正しく見える場合でも、実際に以前のフレームが正確に再投影されていることを検証することができます。これは、テンポラル アップスケーラーと他の内部テンポラル蓄積の品質に関して重要になります。
VisualizeReprojection では、再投影の失敗を確認するための画像が表示されます。オブジェクトに十分なテクスチャ詳細がないなど、オブジェクトに誤ったモーション ベクターが割り当てられている疑いがある場合は、より多くのテクスチャ詳細を含むマテリアルを適用してみてください。このマテリアルにはオブジェクトが一定の間隔で並んだグリッドが備わっており、ボーン トランスフォーム前のアニメート化されたスケルタルメッシュ上でも機能します。
次の参照例では、シーンで生の内部ベロシティ バッファ (vis SceneVelocity) とともに VisualizeMotionBlur 表示フラグと VisualizeReprojection 表示フラグが使用されており、静的ジオメトリの描画が黒色で表示されています。
ポスト DOF 透過性の重要性
テンポラル アップスケーラーでは再投影の際に深度とベロシティを描画しないことがあるため、透過性を正しく再投影することが難しい場合があります。ほとんどのテンポラル アップスケーラーではシーンを事前に作成しますが、TSR ではポスト DOF 透過性を受け取り、再投影してシーン カラーを作成します。このために、VisualizeTemporalUpscaler ではポスト DOF 透過性バッファとポスト DOF 透過性のアルファ チャンネル バッファの両方を表示します。
バックグラウンドで生じる VFX の被写界深度を得るうえで、透過マテリアルが課題となる可能性もあります。透過マテリアルがカメラに依存するようになり、透過性の順序に関する問題 (被写界深度の前または後のどちらに描画するようにマテリアル エディタで設定されているか) が生じる場合があります。この問題をテンポラル アップスケーラーのために軽減するために、r.Translucency.AutoBeforeDOF (デフォルトで有効) では、透過マテリアルが焦点距離の背後にある場合にポスト DOF を自動的に描画します。これによって透過性の順序の問題が簡素化されて、テンポラル アップスケーラーのメリットとなるように、透過性を使用するコンテンツでポスト DOF を可能な限り維持するよう促進されます。
これが行われると、焦点距離の背後にあるポスト DOF 透過が DOF の前に描画され、フル画像の DOF ブラーによって、ゴースト問題を新たに生じさせることなく、テンポラル アップスケーラーによる再投影が大幅に簡素化されます。これは、被写界深度のブラーによって、シーン カラー入力に送られるノイズが最小化されるためです。
ポスト DOF 透過性の形式は、「アルファ = 透過性 = 1 - オパシティ」で乗算済みの RGBA です。それがシーン カラーに合成されて、SceneColor.rgb = SceneColor.rgb * PostDOFTranlucency.a + PostDOFTranslucency.rgb となります。
概要 (Summary)
画面左下隅の [Summary (概要)] には、テンポラル アップスケーラーの実行に役立つ情報が表示されます。
| 項目 | 説明 |
|---|---|
| TemporalUpscaler (テンポラル アップスケーラー) | 使用中のテンポラル アップスケーラーと、エンジン内のアップスケーラー用に設定されているエンジン スケーラビリティ レベルを表示します。 |
| Input (入力) | テンポラル アップスケーラーが受け取る現在の解像度とピクセル形式です。 |
| Output (出力) | テンポラル アップスケーラーによって出力される現在の解像度とピクセル形式です。 |
| PreExposure (事前露光) | このようなタイプの問題を診断するカラー ピクセル形式の現在の事前露光です。事前露光がオーバーライドされる場合 (r.EyeAdaptation.PreExposureOverride) は、この情報も指定されます。テンポラル アップスケーラーを正しく機能させるためには、トーンマッパによって表示されている、レンダリングされたピクセルの露光をテンポラル アップスケーラーに伝えることが重要になります。事前露光が低すぎると、内部バッファでシーン カラーが異常に暗くなり、パフォーマンス上の理由で使われているテンポラル アップスケーラーで低ビット深度のエンコードにかかわるさまざまな問題が発生し、結果的にゴーストが生成されることがあります。理論上、事前露光はレンダラによって内部で自動的に計算される必要があります。こういったエッジ ケースにより、テンポラル アップスケーラーが失敗する可能性が生じます。ほとんどの場合、事前露光は自動的に行われるべきであるため、このケースでは r.EyeAdaptation.PreExposureOverride の使用は推奨されません。ただし、特定のレンダラ問題を回避するための策として、事前露光のオーバーライドが役立つ場合もあります。 |
| Support Alpha (アルファをサポート) | r.PostProcessing.PropagrateAlpha によって設定された場合に、SceneColor のアルファ チャンネルとテンポラル アップスケーラーの出力を表示するかどうかを指定します。 |