超雑訳 A Survey of Temporal Antialiasing Techniques

どーも。Pocolです
今日は
[Yang 2020] Lei Yang, Shiqiu Liu, Marco Salvi, “A Survey of Temporal Antialiasing Techniques”, Computer Graphics Forum, Vol. 39, No.2, pp.607-621, 2020.
を読んでみようと思います。
いつもながら誤字・誤訳があるかと思いますので,ご指摘頂ける場合は正しい翻訳例と共に指摘していただけると幸いです。

※図は,[Yang 2020]より引用

Abstract

テンポラルアンチエイリアシング(TAA)は、正式には時間的に償却されたスーパーサンプリングと定義され、現在のリアルタイムレンダラーやゲームエンジンで最も広く使われているアンチエイリアシング技術です。本調査では,この技術の概要を体系的に説明します。まず,TAAの歴史,開発の経緯,および関連する研究について説明します。次に,TAAの2つの主要なサブコンポーネントであるサンプルのアキュームレーションとヒストリーの検証を特定し,アルゴリズムと実装方法について説明します。また,テンポラルアップサンプリングは,今日のゲームエンジンにおいてますます重要になってきていることから,様々なテンポラルアップサンプリング技術に対応できるよう,TAAの拡張を提案します。TAAが普及しているにもかかわらず、多くのシナリオで画質に影響を与える未解決の技術的課題が残っています。本論文では、これらの課題を詳細に分析し、改善のために既存の技術を再検討しています。最後に、TAAに関連する人気のアルゴリズムとトピックをまとめます。これらの分野の急速な進歩は,TAAの研究開発に役立つ,あるいはフィードバックされる可能性があると考えています。

1. Introduction

テンポラルアンチエイリアシング(別名:Temporal AA、TAA)は、複数のフレームに渡って収集されたデータを用いて空間的なアンチエイリアス処理を行う技術の一種です。10年前に登場して以来、TAAとそのバリエーションは、ほぼすべてのゲームエンジンとリアルタイム3Dレンダラーのアンチエイリアシングソリューションのデファクトスタンダードとなっています。従来、時間的なエイリアシング(別名:ワゴンホイール効果)の低減を目的とした技術には、テンポラルアンチエイリアシングという名称が用いられていました[KB83]。現在では、時間的なサンプルを用いた空間的なアンチエイリアシング(=スーパーサンプリング)から一貫して使用されているため、やや語弊があるようです。リアルタイムレンダリングのコミュニティで広く受け入れられていることから、この新しい命名規則に従うことにしました。

TAAが登場する以前は,ハードウェアアクセラレーションによるマルチサンプルアンチエイリアシング(MSAA)[Ake93]が,リアルタイムエンジンで最も使われているアンチエイリアシング技術として知られていました。MSAAは、シェーディングの速度を各ピクセルのプライミティブごとの1回の呼び出しに制限し、可視性の決定とシェーディングを効果的に切り離すことで、わずかな性能コストで画質を向上させます。しかし、MSAAを遅延シェーディング技術と組み合わせて使用する場合、残念ながらいくつかの課題があります[GPB04, Har04]。まず,可視性とシェーディングの間のハードウェアアクセラレーションによるマッピングが失われ,MSAAがコストのかかるスーパーサンプリング・アンチエイリアシング(SSAA)になってしまいます。第二に、異なるサンプルタイプ間のマッピングが回復したとしても[SV12, KS14]、マルチサンプリングされたG-Bufferのストレージとメモリのバンド幅の増加により、シェーダーを低レートで実行することによるパフォーマンスの向上が否定されることが多いです。このような問題から,ディファードレンダリングにおけるMSAAに代わる様々な後処理アンチエイリアシング技術が提案されていますが(概要はJimenezら[JGY*11]を参照),それらの多くは,真のピクセル値を復元するための十分な情報がないため,時間的安定性の問題に悩まされています。

TAAは、シングルサンプリングされたシェーディングでは欠けてしまうサブピクセルのディテールを解決することを目的としています。理論的には、スーパーサンプリングを用いて1ピクセルあたりのサンプリングレートを上げることで実現できますが、ブルートフォースで実装した場合、リアルタイムレンダリングでは非常に高価になってしまいます。TAAは、前のフレームのシェーディング結果を再投影することで、ピクセルあたりの複数サンプルのシェーディングのコストを連続したフレームで効果的に償却し、シングルサンプルシェーディングにわずかなコストを上乗せするだけでスーパーサンプリングを実現します。品質面でも、シングルフレームの後処理アンチエイリアシング技術と比較して、TAAはエイリアシングをより効果的に抑制するだけでなく、より時間的に安定した結果を得ることができます。また、TAAは既存のエンジンに比較的容易に組み込むことができます。TAAは通常、1つの後処理パスとして実装され、必要なのは前フレームの出力画像のフィードバック入力のみです。

TAAには、これまでのアプローチにはない課題があります。TAAは、ソフトな画像を生成すると批判されることがあり、ゴーストやシマーリングなどのアーティファクトが発生する可能性があります。本稿では、既存のTAAアルゴリズムにおけるこのような問題点を詳細に分析し(Sec.6)、この分野における今後の研究の方向性を示します。

1.1. Algorithm overview

TAAは、前のフレームから蓄積されたサブピクセルのサンプルを再利用することで、効果的にスーパーサンプリングを実現するという考え方です。図2は、その概念的なプロセスを示したものです。フレームNの前に、各画素ごとにいくつかのサンプル(黄色のドット)が集められ、平均化されて1画素あたりの単色の値(緑のドット)としてヒストリーバッファに保存されているとします。フレーム\(N\)の各ピクセルについて、その中心位置(オレンジ色のドット)をシーンの動きに基づいて前のフレーム\(N-1\)にマッピングし、その位置でヒストリーバッファを再サンプリングして、そのピクセルのヒストリーカラーを取得します。リサンプリングを行うことで、ヒストリーカラーはその点を中心に過去に蓄積されたサンプルの平均値となります。現在のフレーム\(N\)に対して、ジッターされた場所で新しいサンプル(青いドット)をシェーディングし、その結果をサンプリングされたヒストリーカラーと統合します。これにより、フレーム\(N\)の出力ピクセルカラーが生成され、それがフレーム\(N+1\)のヒストリーとなります。

※図は,[Yang 2020]より引用

このコンセプトを実現するために、典型的なTAAアルゴリズムの構成要素とデータの流れを図3に示します。画素領域内のさまざまな場所を均等にサンプリングするために、サンプルシーケンスから抽出したサブピクセルのジッターオフセットを用いて、フレームごとにビューポートをシフトさせます(項3.1)。前のフレームの出力(ヒストリー)から一時的に蓄積されたサンプルは、カメラやオブジェクトの動きを考慮して、アプリケーションが生成したモーションベクトルを使って再投影(リサンプル)されます(項3.2)。オクルージョン、照明、表面のコンテンツの変化により、取得されたヒストリーデータが古くなり、現在のフレームのデータと一致しない場合があります。スケールデータを精査せずに使用すると、ゴーストやイメージラグのアーティファクトが発生します。ヒストリーの検証はTAAアルゴリズムの重要な要素であり、古くなったヒストリーデータを識別し、現在のフレームにエラーが発生しないようにデータを拒否(Sec.4.1)または修正(Sec.4.2)します。一般的に、過去のデータを検証するために使用できる信頼性の高い情報は、現在のスパースサンプリングされたフレームのみであるため、これは困難であり課題です。この問題に関する課題については、Sec.6で説明します。

※図は,[Yang 2020]より引用

ヒストリーの検証後、新たにシェーディングされたサンプルがヒストリーカラーに蓄積(ブレンド)され、各ピクセルの新たな解決された色が得られます(Sec.3.3)。これには、固定または適応的なブレンドウェイトを使用して、ヒストリーカラーとカレントフレームサンプルの加重和を計算します。ブレンディングウェイトは、アンチエイリアシングの品質(収束速度、時間的安定性)と応答性(変化への適応速度、ヒストリーのエラーを排除する速度)のトレードオフに大きく影響します。ヒストリーバッファに保存された結果は、画像の後処理などでさらに洗練され、表示に備えることができます。

最近のTAAでは、入力シェーディングのサンプル密度を1ピクセルあたり1サンプル以下にする傾向があり、これにより空間的なアップスケーリングが可能になっています。このような技術は、一般的にテンポラルアップサンプリングと呼ばれています(Sec.5;テンポラルアップスケーリングとも呼ばれていますが、フレーム補間によってフレームレートを上げる技術と混同しないように注意してください)。フレームごとに粗くラスタライズされ、シェーディングされたシーンであっても、複数のフレームにまたがってサンプルを集めることで、より高密度・高解像度のデータを共同で得ることができます。このデータを利用して細かいディテールを復元するのがテンポラルアップサンプリングであり、通常は純粋な空間的アップサンプリングよりも高い品質を得ることができます。超高解像度でゲームをプレイしたいというニーズが高まっている現在、テンポラルアップサンプリングとそのバリエーションは、最新のゲームエンジンの新しいスタンダードになろうとしています。

Sec.7では、TAAとテンポラルアップサンプリングの性能特性をレビューします。 また、TAAと密接な関係にある他のいくつかの技術も、同様の構成要素と課題を共有しています。例えば、可変レートシェーディング、テンポラルデノイズ、機械学習ベースの再構成技術などです。Sec.8では、これらの問題とその解決策について説明します。これらの技術はすべて、時間的に蓄積されたデータを使用して、視覚的品質を向上させたり、ブルートフォースソリューションを高速化したりします。

2. A brief history of Temporal Antialiasing

TAAの導入に先立ち,レンダリング計算を高速化するために時間的なコヒーレンス(フレーム間のコヒーレンス)を利用する技術は,何十年も前からオフラインおよびインタラクティブなレイトレーシングシステムで利用されてきました。この技術の概要は、Scherzerら[SYM*12]に記載されています。このような方法は、一般的に、フレーム間でデータを再投影するためにプロキシ・ジオメトリ・ワーピングまたはピクセル・スキャッタリングのいずれかを使用することにより、高価な計算を節約するために複数のフレーム間でシェーディング結果を再利用することを目的としています。また,motion-compensated filteringと呼ばれる関連技術は,時空間フィルタを用いて画像(ビデオ)シーケンスのノイズを低減するものです[BKE*95].TAA と同様に、このような技術でも、適応型非線形フィルター[OST93]や信号分解法[KLB95]を用いて、時変信号を処理する必要があります。

複数のフレームにまたがるデータをピクセル単位の積分値の評価に使用するというアイデアは、Accumulation Buffer [HA90]にまで遡ることができますが、このアイデアがリアルタイムレンダリングで実用化されたのは、Reverse Reprojection Cache(ヒストリーバッファとも呼ばれる)が開発されてからのことです。Nehabら[NSL*07]とScherzerら[SJW07]は、フォワードレンダリングパスでピクセル単位のリプロジェクションベクトルを計算することで、アキュムレーションバッファのアイデアをシーンの動きに対応できるように拡張できることを発見しました。より正確には,再投影ベクトルはフレーム間のオブジェクトとカメラの動きを追跡し,現在のフレームの各ピクセルが以前のフレームから全く同じ表面ポイントに蓄積されたデータを取得することを可能にします。両研究とも、シャドウマッピングの品質を向上させるために、この技術を使用することを提案しています。

Amortized Supersamplingの論文[YNS*09]では,シェーディングのアンチエイリアシングの一般的な解決策として,データ再投影を用いることが初めて提案されました。この論文では,TAAが高品質な出力を得るためには,リサンプリング誤差による過度の時空間的なボケと,基本的な信号の変化への適応の遅さという2つの大きな問題があることを指摘しています。理論的な分析により、ぼかしを減らすためにヒストリーバッファを目標解像度の2倍の解像度で保存することを提案し、ぼかしや信号の変化による誤差を識別して制限する適応的なブレンディング方式を導入しました。

TAAのロバスト性を高める重要な技術として,Lotts[Lot11]が最初に紹介した,再投影されたヒストリーデータを修正するために現在のフレームサンプルを使用するというアイデアがある。後に改良され,neighborhood clamping(またはclipping)[Kar14, Sal16]と呼ばれるようになったこの技術は,現在のフレームの入力カラーバッファのみを利用して,古いヒストリーデータに起因するアーティファクトを低減します。そのため、他のヒストリー検証ヒューリスティックや追加の入力データの必要性が大幅に減り、TAAのロバスト性と統合のしやすさが向上しました。

2010年以降、TAAはゲームエンジンや発売されたばかりのタイトルで急速に普及しました。Halo: Reach [Lea10]では,フレーム間で交互にサンプリングパターンを使用し,最後の2フレームを適応的にブレンドすることで,2倍のスーパーサンプリングと同様の品質を実現しています.Crysis2 [Sou11]では、再投影を行うことで複数フレームの蓄積を可能にし、モーションおよび深度ベースの一貫性チェックを行うことで、アーティファクトを最小限に抑えています。2012年以降、NVIDIAはKepler+アーキテクチャのTAAソリューションとしてTXAA [NVI12]を提供しており、約20のゲームタイトルで採用されています。主要な商用ゲームエンジンでは,TAAを標準的なアンチエイリアシング手法として追加したり(Unreal Engine 4[Kar14],Unity[Uni16]など),モルフォロジカルアンチエイリアシング[Res09]などの他の空間アンチエイリアシングソリューションと組み合わせたりしています(CryEngine 3のSMAA[JESG12]やTSCMAA[Kim18]など)。また,TAAを実装・強化したタイトルやエンジンとしては,Dust 514 [Mal12],Decimaエンジン [Val14, dCI17],Far Cry 4 [Dro14],Quantum Break [Aal16],Rainbow Six Siege [EM16],Inside [Ped16],Uncharted 4 [Xu16]などが挙げられます。

TAAは始まり当初から時間的なアップサンプリングの考え方と結びついています。Yangら[YNS*09]は,TAAでサブピクセルレベルのディテールを蓄積する再構成アルゴリズムを提案した。Herzogら[HEMS10]は,画像空間でアップサンプリングを行うために,時空間ジョイントフィルタを導入しました。同様のアイデアは,急速に進化する高解像度ディスプレイの需要に対応するために,ゲームエンジンでも使用されています[Mal12, Val14, Aal16, Epi18]。さらに最近では,MSAAを拡張して1ピクセルあたりのシェーディング回数を減らす新しい技術(チェッカーボードレンダリング[Lea16, EM16, Wih17],可変レートシェーディング[PSK*16, XLV18]など)が登場し,シェーディングの欠落部分をフィルタリングしたり埋めたりするためにTAAを利用するようになっている。シェーディングレートを可視性のサンプリングレートから切り離すこれらの手法は、シェーディングのコストを削減しつつ、ジオメトリのエッジを密な解像度で解決することができますが、多くの場合、エンジンのレンダリングパイプラインを大幅に変更しなければなりません。

3. Accumulating temporal samples

理論的には、空間的なアンチエイリアシングを行うには、連続的なシェーディング信号をローパス・ピクセル・フィルターで畳み込んで、過剰な高周波成分を抑えてから信号をサンプリングする必要があります。実際には、連続した信号をスーパーサンプリングしてから、離散的な信号のサンプルにローパスフィルターを適用します。TAAでは、これらの空間サンプルを複数のフレームに渡って生成、エイリアシング、蓄積することで、スーパーサンプリングのコストを償却しています。本章では,これらの手順の概要を説明します。

3.1. Jittering samples

実用上の理由から、ほとんどのTAAの実装では、各フレームのピクセルごとに1つのサンプルをレンダリングしています。各フレームですべてのピクセルに異なるサンプルを生成する一般的な方法は,カメラの投影行列にビューポートのサブピクセルのジッターオフセットを追加することです。フレームごとのジッターオフセットは、通常、複数のフレームで生成されたサンプルですべてのピクセルが均等にカバーされるように、十分に分散されたサンプルシーケンスから引き出されます。

オブジェクトはいつでも現れたり消えたりする可能性があるため、ピクセル開始の蓄積の最初のサンプルは、シーケンス内のどのインデックスからでも始めることができます。高速な収束を可能にするためには、理想的なシーケンスは、任意の長さのサブシーケンスがピクセル領域内にある程度均等に分布していなければならないという特性を持つ必要があります。HaltonやSobolのようなある種の低食い違い度の数列は、この特性を持っています(概要はChristensenら[CKK18]を参照)。目標とする品質と有効な累積サンプル数に応じて,数列の長さはしばしば比較的小さい数に制限することができます。例えば,Unreal Engine 4 [Epi15]ではデフォルトでHalton(2, 3)からの8サンプルシーケンスを使用し,Inside [Ped16]ではHalton(2, 3)からの16サンプルシーケンスを使用し,SMAA T2x [Jim16]ではQuincunxを使用し,Quantum Break [Aal16]では回転したグリッドオフセットを使用しています.アンチエイリアシングフィルタのカーネルが一般的なボックスフィルタ以外の任意の非負のカーネルである場合,重点サンプリングを使用することで,ドメインを効率的にサンプリングし,個々のサンプルの明示的な重み付けを避けることができます[YNS*09].

Direct3D programmable sample position feature tier2に対応したGPUデバイスでは、2×2ピクセルのグリッドでサンプルパターンを指定することができ、隣接するピクセルが同じサンプルセットを共有する必要がありません。これにより、サンプルパターンの繰り返し周波数と基本的な信号周波数の干渉によって発生するエイリアシングアーティファクトを低減することができます。NVIDIAはこの機能をMaxwellアーキテクチャ以降のMFAA(Multi-Frame Anti-Aliasing)技術に採用しています[Gru15]。Drobot[Dro14]もこの機能を利用して、2x MSAAを用いてFLIPQUADパターンを2フレームにわたってサンプリングしています。

シーンに動きがあると、フレームに蓄積されたサンプルの位置がずれて、せっかくのサンプルパターンが乱れてしまうことがあります。短いリカレントシーケンスでは、特定の動きの速度によって、複数のフレームのサンプル位置がワールド空間上に集まってしまい、偏った結果(ぼやけたり、エイリアスがかかったり)になることがあります。これは,動きのある場合のTAAの品質低下の原因の一つです(他の原因については項6で述べます)。ジッタリングのパターンをランダム化することで、パターンの規則的なサイクルを崩し、このような病的なシナリオに陥るリスクを低減することができます。

TAAでは、ピクセル領域のサンプリングと統合により、ジオメトリとテクスチャの両方にアンチエイリアシングを行います。テクスチャは通常ミップマッピングでフィルタリングされるため、TAAによって出力がぼやけてしまう恐れがあります。そのため、一般的には、テクスチャがサンプリングされるフォワードパスにミップマップのバイアスを適用します。これは,時間的なアップサンプリングを行う場合に特に重要です[Epi18]。ミップマップバイアスのレベルは、有効なサンプル密度と入力ピクセル密度の比率を補う必要があります。例えば、入力ピクセルあたりの有効サンプル数が4と予想される場合(有効サンプル密度の推定方法については、項3.3および図4を参照)、ミップマップバイアスは\(-\frac{1}{2} \log_2 4 = -1.0\)と計算されます。実際には、時間的な安定性やテクスチャキャッシュの効率性を損なわないために、この値と0の間のあまり積極的でないバイアスが好まれることがあります。

※図は,[Yang 2020]より引用

TAAは基本的に償却されたサンプリングプロセスであるため、アンビエントオクルージョン、シャドウ、順序に依存しない透明度、反射、拡散グローバルイルミネーションなど、サンプルの統合を必要とする他のエフェクトにも適用することができます。これらのエフェクトにランダムな入力(高次元の低食い違い度数列が望ましい[CKK18])を与えることで,TAAはスクリーン空間のアンチエイリアシングサンプルとともにそれらを統合することができます。例えば,Unreal Engine 4では,確率的サンプリングやディザリングを用いた多くのエフェクトのノイズ除去にTAAを使用しています[Kar14]。

3.2. Data reprojection between frames

フレーム間にシーンの動きがある場合、各ピクセルはヒストリーデータを取得するために、前のフレームでの対応する位置を計算する必要があります。このステップを実行するために,リバースリプロジェクション[NSL*07, SJW07]が広く使われています.シーンのラスタライズでは、ジオメトリは2回変換されます。1回目は前のフレームのデータを使用し、2回目は現在のフレームのデータを使用します。すべてのピクセルの現在の位置と以前の位置の間のオフセットは,モーションベクトルテクスチャ(エンジンによっては速度とも呼ばれる)に格納され,TAAアルゴリズムによって,すべてのターゲットピクセルの再投影されたヒストリーバッファ座標を得るために使用されます。

フレームバッファの帯域幅を節約するために、一部のエンジンでは、アニメーションや移動するオブジェクトのモーションベクターのみを明示的に計算して保存し、影響を受けるすべてのピクセルをステンシルテクスチャにタグ付けしています。タグ付けされていないピクセルについては、TAAパスの中で、デプスバッファを使って各ピクセルの3Dクリップスペース座標を再構築し、前フレームと現フレームのカメラ行列を使って前フレームに投影することで、前フレームでの位置をオンザフライで決定することができます:

\begin{eqnarray}
p_{n-1} = M_{n-1} M^{-1}_n p_n \tag{1}
\end{eqnarray}

ここで,\(pn = ( \frac{2x}{w} -1, \frac{2y}{h} – 1, z, 1)\) は,現在のフレームのピクセルの3次元クリップ空間位置を同次座標で表したものであり,\(M_{n-1}\) および \(M_n\) は,それぞれ,前フレームおよび現在のフレームのビュープロジェクションマトリクスです。結果として得られる位置は,パースペクティブディビジョンの後に得られます。Unreal Engine 4 [Epi15]では、デフォルトでこの方法を採用しています。

ヒストリーバッファ内の再投影座標にはサブピクセルのオフセットが含まれていることが多く、ソースフレームとターゲットフレームの間に1:1のピクセルマッピングが存在しなくなってしまいます。歪み(フラクショナル・オフセット・スナッピング)アーティファクトが発生しないように、各ピクセルでヒストリーを得るためのリサンプリング・ステップが必要です。一般的には、ハードウェアアクセラレーションによるバイリニア・テクスチャ・フェッチやバイキュービック・テクスチャ・フィルタリングがこの目的のために使用されます。セクション6.1では、一般的に使用されるリサンプリングフィルタと、それらが画質に与える影響について説明します。

モーションベクトルはアンチエイリアス処理ができないため、モーションベクトルを用いた再投影では、動きのあるオブジェクトのオブジェクト境界に沿ってアンチエイリアス処理された滑らかなエッジに、アンチエイリアスのアーティファクトが再導入される可能性があります。このようなアーティファクトを避けるための簡単なアプローチは,モーションベクトルをサンプリングする際に前景オブジェクトを拡張し,エッジに触れたすべての境界ピクセルがこれらのオブジェクトとともに再投影されるようにすることです[Kar14].一般的には,4タップの小さなダイレーションウィンドウが使用されます.また,Wihlidal [Wih17]は,モーションベクトルが発散したときにのみ深度値を取得して比較する適応的なスキームを提案しています。

3.3. Sample accumulation

過去のフレームで各画素に蓄積されたすべてのサンプルを保存することは現実的ではありません。ほとんどのTAAの実装では、各ピクセルの蓄積されたサンプルは平均化され、現在のフレームの出力であり、次のフレームのヒストリー入力でもある単一の色として保存されます。この反復的な蓄積プロセスは次のように書くことができます[YNS*09]。

\begin{eqnarray}
f_n(p) = \alpha \cdot s_n(p) + (1 – \alpha) \cdot f_{n-1} (\pi(p)) \tag{2}
\end{eqnarray}

ここで,\(f_n(p)\)はフレーム\(n\)のピクセル\(p\)におけるカラー出力,\(\alpha\)はブレンド係数,\(s_n(p)\)はフレーム\(n\)のピクセル\(p\)における新しいサンプルカラー,\(f_{n-1}(\pi(p))\)は再投影演算子\(\pi(\cdot)\)とリサンプリングを用いて,前フレームから再投影された出力(ヒストリーカラー)です。

ブレンディング係数のパラメータ\(\alpha\)は、新しいサンプルとヒストリーカラーの相対的な貢献度のバランスをとります。現在,TAAのほとんどの実装では,固定の\(\alpha\)を使用しており,これは事実上,再帰的な指数平滑化フィルタにつながります [NSL*07, SJW07, YNS*09].

\begin{eqnarray}
f_n(p) = \alpha \left( s_n(p) + (1 – \alpha)s_{n-1}(p) + (1-\alpha)^2 s_{n-2}(p) + \cdots \right) \tag{3}
\end{eqnarray}

この式では、古いサンプルほど重みが低くなりますが、古いサンプルはシーンの変化によって陳腐化する可能性が高いため、場合によっては好ましい特性となります。しかし、分散削減の観点からは、これは最適ではないことに注意してください。最適な分散削減は,すべてのサンプルが和において等しく重み付けされている場合に達成されます[YNS*09].これは固定のアルファを使用した場合には当てはまらず,低いサンプル数でも高いサンプル数でも結果の質が損なわれる可能性があります.図4は,一様な重みを使用し,分散削減の程度を一致させた場合の,\(\alpha\)と有効な蓄積サンプル数の関係を示しています.例えば、一般的に使用されている\(\alpha=0.1\)の場合、蓄積された5フレームの結果は、1ピクセルあたり2.2サンプルに相当し、10フレームは5.1サンプル、15フレームは9.8サンプルに相当します。また、入力フレームを無限に蓄積した定常状態では、\(\alpha=0.1\)の場合、最高で19個の有効サンプルが得られます。

サンプルを均等に重み付けする代わりに、ヒストリーバッファのアルファチャンネルにピクセルごとの累積サンプルカウント\(N_t(p)\)を格納することができます[YNS*09]。この値は、ピクセルがリフレッシュされるたびに1に初期化され、フレームごとにインクリメントされます。\(\alpha = 1/N_t(p)\)を設定することで、式2はすべての履歴サンプルに同じ重みを割り当てます。これにより、追加のストレージチャネルを犠牲にして、最適な収束率を実現します。この方法は、特にターゲットフレームレートが低い場合に、ディスオクルージョン後の高速収束を必要とするいくつかのアプリケーション[WMB19, KIM*19]で使用されています。

\(\alpha\)を小さくすると、リサンプリングエラー(項6.1)やタイムラグ(項6.2)の影響を受けやすくなることに注意が必要です。これらのアーティファクトを避けるために、\(\alpha\)はしばしば下限値にクランプされ、最小限のヒストリー・リフレッシュを確保します。Yangら[YNS*09]は、バイリニア・リサンプリング・エラーの蓄積を防ぐために、小数モーション・スピードに基づいて適応的な\(\alpha\)下限を導き出す理論を提案しています。CryEngine 3 [Sou11]やUnreal Engine 4 [Epi15]では、モーションスピードが大きいほどアルファ値を大きくするという単純なヒューリスティックな手法が用いられています。また、ヒストリーの棄却(Sec.4.1)や修正(Sec.4.2)が発生した場合、追跡されている場合は、有効な累積サンプル数\(N_t(p)\)を\(\alpha\)に合わせて更新する必要があります[YNS*09]。

3.3.1. Sample accumulation in HDR color space

ほとんどのレンダリングエンジンでは、物理的に補正された後処理効果は、リニアHDR(=ラジオメトリック・リニア)色空間に実装されています。ブルームやレンズフレアなどの効果によって、エイリアスのある高エネルギーのカラーサンプルが誇張されるのを防ぐために、これらの効果の前にTAAを配置することが望ましいです。そのためには、TAAがリニアHDR空間で入力サンプルを取得する必要があります。一方、トーンマッピングは一般的に非線形であるため、アンチエイリアシングなどのフィルタリング処理は、ディスプレイ上で正しいエッジグラデーションを生成するために、トーンマッピング後の空間で適用するのが最適です。この問題を解決するためには、TAAを適用する前にサンプルをトーンマップ化し、出力を逆にしてリニアHDR空間に戻し、残りの後処理チェーンに供給する方法があります[Pet15]。実際には、Reinhard演算子\(1/(1+x)\)のような反転可能なトーンマッピング演算子を使って実装され、最終的なトーンマッピング関数の代理として機能します。

トーンマッピングの際に色がディサチュレーションしないように、Karis [Kar13, Kar14] は、新しいサンプルをヒストリーに蓄積する際に、ルミナンスに適応した重みを使用しています。

\begin{eqnarray}
w(c) = \frac{1}{1 + L(c)} \tag{4}
\end{eqnarray}

ここで、\(L(c)\)はカラー\(c\)のlumaチャンネルであり、\(w(c)\)は式2を用いて現在のフレームサンプルとヒストリーカラーをブレンドする際のバイラテラル・ウェイトとして適用されます。これにより、入力サンプルを効果的にトーンマッピングすることができ、”ファイアフライ”と呼ばれるような極端にエネルギーの高いカラーピクセルが出力されるのを防ぐことができます。同様の手法がCall of Duty: Advanced Warfare [Jim14]にも実装されており、ブルーム効果を安定させています。

4. Validating history data

実際には、前のフレームから再投影されたヒストリーのピクセルデータを、確認もせずに安易に再投影することはありません。シーンオクルージョンの変化によって無効になっていたり、ライティングやシェーディングの変化によって古くなっていたりします。このようなケースを適切に処理しないと、ゴースティングなどの強いテンポラルアーティファクトが発生します。このセクションでは、ヒストリーデータを検証するために一般的に使用されている技術をレビューします。

4.1. History rejection

古いデータや無効なデータを処理するための簡単な方法は、エラーが検出されたときにデータを棄却することです。棄却するには、式(2)で\(\alpha\)を1に設定します。また、\(\alpha\)を下限の閾値に制限することで、蓄積されたヒストリーカラーを通常よりも高速に更新するソフトリフレッシュも可能です。一般的に、ヒストリーの信頼性を判断するために使用できるソースには、ジオメトリデータ(深度、法線、オブジェクトID、モーションベクトル)とカラーデータの2種類があります。

ジオメトリデータは、一般的に、オクルージョンの変化によって不一致のサーフェイスから再投影された無効なヒストリーデータを識別するために使用されます。その例を図5に示します。再投影された\(p\)の深度と以前の\(\pi_{t-1}(p)\)の深度を小さな誤差許容値で比較することで、\(p_1\)のようなディスオクルードされたピクセルを特定し、そこでのヒストリーデータの再利用を避けることができます[NSL*07]。よりロバストなマッチングを実現するために、サーフェイス法線やオブジェクトIDなどの他のジオメトリ情報も一貫性の追加指標として使用することができます。Crysis 2のTAA実装[Sou11]では,Sousa氏が,深度ベースの一貫性チェックに加えて,モーションスピードが速くなるとアルファ値を増加させることも提案しています。なお、ジオメトリ情報はシェーディングカラーと強く相関する傾向がありますが、それはシェーディング入力の一部に過ぎません。照明、影、反射などのエフェクトにおけるシェーディングの変化は、ジオメトリ情報では検出できません。また、ジオメトリデータはフィルタリングできないため、アンチエイリアスされた滑らかなエッジに不連続性が再導入される可能性があります。そのため、ジオメトリ情報だけに頼ってヒストリーを拒否することは、しばしば脆い解決策となります。

※図は,[Yang 2020]より引用

ヒストリーバッファ\(f_{n-1}\)と現在フレームのサンプル\(s_n\)の色を比較することで、ヒストリーデータの有効性をより直接的に判断することができます。これは、ヒストリーデータが、目に見える照明やシェーディングの変化によって古くなった場合や、リサンプリングエラーや不正なモーションベクトルによって歪んだ場合を検出するのに有効です。現在のフレームサンプル\(s_n\)はエイリアスがかかっていることが予想されるため(そうでなければアンチエイリアシングは必要ない)、\(f_{n-1}(p)\)と\(s_n(p)\)を直接比較すると、誤差の偏った推定値が得られ、空間的にも時間的にも不安定になる可能性があることを意味しています。Yangら[YNS*09]はこの点を指摘し、誤差推定値にフィルタをかけることを提案しています。

\begin{eqnarray}
\epsilon_n(p) = B_3 \ast (f_{n-1} – s_n) (p) \tag{5}
\end{eqnarray}

ここで、\(B_3\)は半径3のボックスフィルターです。そして、この誤差推定値を用いて、\(\alpha\)値の下限を設定し、ヒストリーの更新を最小限に抑えることができます。Herzogら[HEMS10]は、再構成された色の時間的なグラデーションを計算し、安定性を向上させるために、グラデーションに空間的および時間的なスムージングを適用します。Malan [Mal12] は,現在のフレームサンプルにおける近傍のカラーエクステント(バウンディングボックス)を計算します。ヒストリーカラーがバウンディングボックスの内側または近くにある場合、ヒストリーカラーが保持されます。この手法では、カラーバウンディングボックスのコンテキストに基づいて\(\alpha\)値にバイアスをかけることもできます。小さなバウンディングボックス(フラットカラー)では、目に見えるゴーストを避けるために\(\alpha\)値を大きくし、大きなバウンディングボックス(シャープな不連続性)では、蓄積されたサンプルを増やして時間的なアーチファクトを抑制するために\(\alpha\)値を小さくします。カラーバウンディングボックスの使用は、ヒストリー補正技法(Sec.4.2)と関連しています。

時間的な変化を確実に検出するためには、フレーム間で全く同じサーフェイスの位置でシェーディングされた生のサンプルを比較するという方法があります。Killzone: Shadow Fall [Val14]やHRAA technique [Dro14]では,フレーム\(N\)と\(N-2\)のサンプル位置が一致するように,奇数-偶数フレームのサンプルパター(Temporal FLIPQUADなど)を使用しています。そのため、これらのフレームのサンプルは、動きがないときに直接比較することができます。より高いシェーディングレートバジェットを持つレイトレーシングアプリケーションのために、Schied[SPD18]は、以前のシェーディングサンプルのサブセットを現在のフレームに前方投影し、シェーディングの変化(時間的グラデーション)を確実に計算するために、まったく同じ場所で新しいサンプルをシェーディングすることを提案しています。疎に計算されたグラデーションは,ジョイント・バイラテラル・フィルタでアップスケールされ,ヒストリーを常に最新の状態に保つために\(\alpha\)を制御するのに使用されます。

4.2. History rectification

古くて無効なヒストリーデータを棄却すると、ピクセル単位の積分プロセスが事実上リセットされ、時間的なアーティファクトが増加する可能性があります。ヒストリーの修正は、棄却されたデータを新しいサンプルとの整合性を高めることで、この問題を改善します。現在のTAAのほとんどの実装と同様に、修正されたヒストリーは現在のフレームとブレンドされ、より視覚的に受け入れやすい結果をもたらします。

ほとんどのヒストリー補正アルゴリズムは,現在のフレームサンプルから,各ピクセルがカバーする色の範囲(または分布)に関する信頼できる情報が得られることを前提としています.現在フレームのサンプルは疎でエイリアスがあることが多いため,色情報を引き出すためには,各ピクセルの3×3以上の近傍を考慮します(図6(a))。これは,より多くの近傍サンプルが局所的な色の変化の分布をよりよく推定することができると仮定したものです。色空間における近傍サンプルの凸包は、中心画素の周囲に期待される色の範囲を表しています。ヒストリーカラーが凸包の内側に収まっていれば、現在のフレームデータと一致しているとみなされ、安全に再利用することができます。凸包の外側にある場合は、現在のフレームデータと一致するように修正する必要があります。そのためには、ヒストリーカラーを現在のフレームのサンプルカラーに接続し、線分を凸包に対してクリップします。交差点は、現在のフレームサンプルと一致するヒストリーの最良の推定値です。

実際には,ピクセルごとに凸包の計算とレイと凸包の交点を計算するのは,非常に高価なものになります.これに対する一般的な近似方法は、最小/最大フィルタを使用して色の軸平行境界ボックス(AABB)を計算し、AABBに対してヒストリーカラーをクリップまたはクランプすることです(図6(c))。[Lot11, Kar14]。これはMalanの棄却技法[Mal12]と関連しており、同じAABBを使ってヒストリーデータを採用するか棄却するかを決めます(セクション4.1参照)。AABBは簡単に計算できますが、この近似は時間的な安定性と引き換えに、ゴースト発生の可能性を増加させます。Karis[Kar14]では、YCoCg空間のカラーAABBにクリッピングすることで、さらにゴーストを低減しています。RGBと比較して、YCoCg空間では、クロマ(Co, Cg)チャンネルを、局所的なコントラストが支配的なluma(Y)チャンネルから相関を失わせるため、よりタイトなAABBになります。

なお、非常に暗いまたは明るい異常値をmin/maxフィルタリングすると、バウンディングボックスの体積が大きくなり、本来なら修正されるはずのヒストリーデータが受け入れられてしまうことがあります。Variance Clipping [Sal16] は,局所的な色の平均値と標準偏差を用いて,修正に用いられる色範囲の中心とサイズを決めることで,外れ値に対処します。

\begin{eqnarray}
C_{\rm min} &=& \mu – \gamma \sigma \\
C_{\rm max} &=& \mu + \gamma \sigma \tag{6}
\end{eqnarray}

ここで,\(\mu\)と\(\sigma\)は,ローカルな近傍領域におけるカラーサンプルの平均値と標準偏差であり,\(\gamma\)は,通常0.75から1.25の間で選択されるスカラーパラメータです。計算された\(C_{\rm min}\)と\(C_{\rm max}\)は、ヒストリークリッピングのAABBエクステントの代わりに使用されます(図6(d))。

※図は,[Yang 2020]より引用

ヒストリー補正に関連する特殊な技術として、Iglesiias-Guitianらによるピクセルヒストリー線形モデルがあります[GMK*16]。彼らの手法では、各ピクセルに蓄積された安定した低周波の色情報である実行中の”特徴”からピクセルカラーを導き出します。この特徴は、シェーディング信号の変化に合わせてフレームごとに更新される、ピクセルごとのパラメータ化された線形モデルによって、出力ピクセルカラーに変換されます。更新時には、色予測モデルを改良するために、近傍クランプも使用されます。この技術は全体として、時間的な一貫性と応答性の優れたバランスを見つけることを目的としていますが、そのためにはヒストリーデータのピクセルごとの保存量を増やす必要があります。

5. Temporal upsampling

テンポラルアップサンプリングはTAAの自然な延長線上にあり、有効なサンプリングレートを1ピクセルあたりの1サンプルから1ピクセルあたりの何分の1かにさらに減らすことができます。これは、ピクセルワークロードが大きいアプリケーションでよく必要とされ、高解像度ディスプレイをターゲットにしたゲームではますます人気が高まっています。テンポラルアップサンプリングは、基本的に低解像度のシェーディング結果を蓄積し、純粋な空間的アップサンプリングの結果よりも多くのディテールを含む高解像度の画像を生成します。この手法は,サンプルのジッタリング,再投影,ヒストリーの検証など,TAAと多くの基本的な構成要素を共有していますが,最高の画質を得るためには,蓄積の段階で特別な処理が必要になります。本節では,様々な既存のアップサンプリング技術[YNS*09, HMES10, Mal12, Al16, Epi18]をカバーする一般的なフレームワークを提案し,いくつかの改善戦略について説明します。

5.1. Scaling-aware sample accumulation

Temporal upsamplingは、TAAとは異なり、入力されたサンプルをより高いピクセル密度のバッファに蓄積します。入力サンプルと出力ピクセルの間には、もはや1対1のマッピングは存在しないため、まず、以下の方法で入力サンプルを出力解像度にアップスケールします。

\begin{eqnarray}
{\bar s}_{n} (p) = \frac{1}{w(p)} \sum_{i \in \Omega(p)} \delta (o_i) s_i \tag{7}
\end{eqnarray}

ここで,\(\Omega(p)\)は出力ピクセル\(p\)の固定サイズの近傍にある入力サンプルの集まり,\(s_i\)は\(\Omega(p)\)の\(i\)番目のサンプル,\(o_i\)は\(s_i\)と\(p\)の間の距離,\(\delta\)は対象ピクセルに対して選択された再構成フィルタカーネルです.また,正規化係数\(w(p)\)は,重みの総和です。

\begin{eqnarray}
w(p) = \sum_{i \in \Omega(p)} \delta(o_i) \tag{8}
\end{eqnarray}

基本的に,式は,ターゲットピクセルの再構成カーネル\(\delta\)に該当する入力サンプルの加重和を計算します。再構成カーネル\(\delta\)は,ガウスカーネル[HEMS10, Epi18],1ピクセル幅のバイリニアテント(ハット)関数[YNS*09],または,入力サンプルグリッドサイズよりも広いサポートを持つ他のフィルタリングカーネルのいずれかです.\(\Omega(p)\)の固定サイズの近傍は,フィルタサイズに合わせて選択されます。

アップスケールされた入力サンプル\({\bar s}_n(p)\)をそのまま式2に入力して蓄積することもできますが、そうすると望ましいシャープネスを持った出力画像が得られません。アップスケーリングの性質上、値\({\bar s}_n\)のセットには、入力サンプルに近いものはそのコピーを直接受け取り(高品質)、他のものはより遠いサンプルから補間された(低品質)、品質の異なる出力サンプルが含まれています。フレームごとに規則に従ったジッタリングパターンでは,出力ピクセルは数フレームごとに高品質のサンプルを受け取りする必要があります.

すべてのピクセルで一貫した高画質を実現するためには、出力ピクセル\(p\)ごとに定義された品質信頼度\(\beta(p)\)に基づいて、入力サンプルを選択的にヒストリーにブレンドすることが重要です。そのためには、再帰的な蓄積ステップ(式2)を次のように書き換えることができます。

\begin{eqnarray}
f_n(p) = \alpha \cdot \beta(p) \cdot {\bar s}_n (p) + (1 – \alpha \cdot \beta (p)) \cdot f_{n-1} (\pi (p)) \tag{9}
\end{eqnarray}

信頼度係数\(\beta (p)\)は、[0,1]の値で、\({\bar s}_n(p)\)の品質が低いと予想される場合に、ヒストリーを保持する方向に蓄積が偏るように設計されています。Unreal Engine 4 [Epi18]では、信頼度の計算に次の項を使用しています。

\begin{eqnarray}
\beta(p) = {\rm max}_{i \in \Omega (p)} \delta (o_i) \tag{10}
\end{eqnarray}

ここで、\(\delta(o_i)\)は、式7で用いたのと同じガウスカーネルです。高解像度の蓄積バッファにサンプルを散らす他のほとんどのアップサンプリングアルゴリズムは、ターゲットピクセルサイズに一致する\(\delta(o_i)\)としてボックスカーネルを使用していると見なすことができます[YNS*09, Mal12, Al16]。

例として、入力サンプルが各次元で2倍の低解像度であり、カーネル\(\delta(p)\)がターゲットピクセルサイズのボックスであるような特殊なケースを考えてみましょう。入力サンプルと出力ピクセルの間には、\(1:4\)の固定マッピングがあります。サンプルはソースピクセルの内部でジッタリングされるため、各フレームにおいて、ターゲットとなる\(2 \times 2\)ピクセルブロックの4つのピクセルのうち1つだけが、そのカバーエリアに入る有効なサンプルを持っています。そのピクセルでは、ボックスカーネル\(\beta(p)\)が1に評価され、サンプルは\(f_n(p)\)に蓄積されます。他の3つのピクセルはすべて\(\beta(p)\)が0に評価され、ヒストリー値は変更されません。この方式では、任意のアップサンプリング比がサポートされていることに注目してください。図7は,異なるアップサンプリング比の例を示したものです。

※図は,[Yang 2020]より引用

5.2. Miscellaneous improvements

テンポラルアップサンプリングにおけるヒストリー検証は、TAAと同じような課題を抱えていますが、出力ピクセル数に対して入力サンプルが少ないと、実際のコンテンツに関する信頼性の高い情報が得られないため、より困難です。6.1.2項、6.2項、6.3項でさらに説明するように、入力サンプルが疎な場合、ヒストリー補正の品質は低下し、最終的にはゴースティング、時間的不安定性、ぼかしアーティファクトの間のトレードオフが悪化することになります。

テンポラルアップサンプリングを行うと、入力画像のカラーバウンディングボックスの計算に使用される典型的な\(3 \times 3\)の近傍領域が、ターゲット画像では\(3 \times 3\)ピクセル以上の領域をカバーすることになり、色域を過大評価する可能性が高くなります。これを避けるために、Unreal Engine 4 [Epi18]では、サブピクセルのオフセットに基づいて縮小されたサイズの近傍領域を計算し、カラーバウンディングボックスを計算しています。ターゲットピクセルの中心から遠く離れたサンプルはバウンディングボックスに含まれないため、ゴースティングの発生が少なくなります。同様に,Anderssonら[ANS*19]は,各ヒストリーピクセルをそのすぐ隣の\(2 \times 2\)サンプルにのみクランプすることを提案しています.

Quantum Break [Aal16]では、テンポラルアップサンプリングにおける時間的安定性とシャープネスを向上させるために、ピクセルのモーションスピードに基づいてカラーバウンディングボックスを適応的に緩和することを選択しました。静止状態に近いオブジェクトでは、積極的なクランプよりもサンプルを蓄積することが推奨されます。これにより、静的なショットでは、より安定したシャープな画像が得られますが、動的な照明や影、アニメーションのテクスチャでは、これらの変化が動きのベクトルに反映されないため、ゴースティングが発生する可能性があります。

テンポラルアップサンプリングをレイトレーシングに適用するという文脈において,Anderssonら[ANS*19]は,サンプリングの順序がモーションと相互に作用する場合に,著しい品質の違いを観察しています.規則的なサンプリングパターンでは,砂時計型と蝶ネクタイ型の2つの主なサンプリング順序モードを認識しています.彼らは,動きの速度と方向の小数部に基づいて,ピクセルごとに2つのモードを動的に切り替える適応的なスキームを提案しており,その結果,画像エラーと目に見えるアーティファクトが減少しました.

5.3. Checkerboard rendering

チェッカーボード・レンダリング(CBR)は、時間的なアップスケーリングの特殊な手法です。CBRは,PlayStation 4 ProやXBox One Xなどのゲーム機で,4K解像度を実現するためのツールとして採用されて以来,人気を博しています[Lea16]。CBRは,ランダムなジッターサンプルに依存してターゲットピクセルグリッドをカバーする他のテンポラルアップスケーリング技術とは異なり,\(2 \times 2\)ピクセルの各クワッドの対角線上にある対向する2つのピクセル(”チェッカーボード”という名前の由来)を1つのフレームで決定的にシェーディングし,次のフレームでそのパターンを反転させてクワッド内の他の2つのピクセルをシェーディングします。チェッカーボードパターンでサンプルをシェーディングする手法としては,\(45^{\circ}\)回転させたフレームバッファ[dCI17],ハードウェアアクセラレーションによる\(2\times\) MSAA[EM16, ML18],プログラマブルサンプルポジション[Dro14],ターゲットに依存しないラスタライズのバリエーション[Wih17]などがあります.このような技術は,ハードウェアに依存していることが多く,本稿のテーマとは直交しています.

1つのフレームには対象となるピクセルの半分しか映らないため、各フレームで完全な画像を生成するためには、時間的なデータの再利用が必要になります。再投影、サンプルアキュムレーション、ヒストリークランプなどの一般的なTAAおよびテンポラルアップスケーリング技術は、CBRに直接適用できます。また、チェッカーボードパターンでの新しいサンプルの分布は、テンポラルインターレースレンダリング[Val14]のような以前のテンポラルアップサンプリングの試みよりも、補間や近傍クランプのステップに本質的に適しています。しかし、CBRの実装は、非標準的なサンプルレイアウトと、それと相互作用する多数のシェーディングおよびポストプロセスパスのため、通常、エンジンコードの大幅な変更を必要とします。一時的なアップスケーリングのように、CBR技術は通常、アップスケーリングとアンチエイリアシングを1つのパスで解決します。最終的なレンダリングで目に見える鋸歯状のパターンを生成しないために、特別な後処理パスを使用することができます[EM16]。特別なハードウェアのサポートにより、深度やオブジェクト/プリミティブIDなどの可視性情報をシェーディングから切り離し、ターゲット解像度でサンプリングすることで、最終的なピクセルの解像度の品質を向上させることができます[Wih17]。一時的なアップサンプリングとは異なり、CBRは固定の\(1:2\)の入力と出力のピクセル比を想定しています。そのため、様々なワークロードをサポートするために、従来の解像度スケーリング技術と組み合わせて使用されることがあります[Wih17]。

6. Challenges

サンプリングやシェーディングを複数のフレームで償却すると、画質が悪くなることがあります。これらの問題の多くは、計算量が限られていること(不完全なリサンプリングなど)や、空間的に複雑で高速に変化する信号のサンプリングレートを下げることが根本的に困難であることに起因しています。このセクションでは、一般的な問題とその原因、および既存の解決策について説明します。

6.1. Blurriness

TAAの結果が”ソフト”に見える原因は2つあります。1つは、ヒストリーが再投影される際のリサンプリングによって生じる誤差、もう1つは、ヒストリーカラーに蓄積されたディテールが切り取られたり、クランプされたりするヒストリー補正によって生じる誤差です。

6.1.1. Resampling blur

リサンプリングは、動きによってターゲットピクセルが前のフレームの小数のピクセル位置に再投影されるときに起こります。ハードウェアで加速されたバイリニア・テクスチャ・フィルタリングを使用すると、再投影されたピクセルの中心(式2の\(\pi(p)\))を中心に、ヒストリーバッファ内の最も近い4つのピクセルの色値を効率的に補間することができます。しかし、バイリニアフィルタは、高周波成分の保持が苦手なため、リサンプル画像が軟化してしまいます。また、ヒストリーはフレームごとに再投影されるため、フィルタリングの誤差が蓄積され、すぐに見苦しいぼやけた画像になってしまいます。このぼやけた感じは、統計的な分析によって定量化することができます[YNS*09]。この分析により,\(\alpha\)をモーション速度に応じた適応的な低い閾値にクランプすること(ぼかしの量は小数のモーション速度に応じて変化するため)と,高解像度のヒストリーバッファを使用すること(バイリニアフィルタの帯域幅を緩和するため)の両方により,過度のぼかしを回避する戦略が導き出されました。レギュラーサンプリングされた出力を必要としないアプリケーション(レイトレーシング[CSK*17]など)では、フォワードリプロジェクションを使用して、明示的なホールフィリングステップとともにリサンプリングを回避することができます。

\(\alpha\)を制限してヒストリー解像度を上げる以外にも、再投影ボケを抑えるために高度なリサンプリングフィルターがよく使われます。Drobot[Dro14]は,BFECC(Back and Forth Error Compensation and Correction)[DL03, NABW12]を用いて,バイリニアサンプリングの誤差を大幅に低減しています.また,Catmull-Rom[CR74]のような立方体の補間スプラインも,ぼかしの蓄積を避けるためにTAAのリサンプリング関数としてよく使われています。例えば,Unreal Engine 4のTAA[Kar14, Epi15]やSMAA T2x[Jim16]では,Catmull-Rom補間器を近似的に最適化したものを使用しており,バイリニアフェッチの回数は5回程度と少ないです。図8に示すように、BFECCとCatmull-Romの両方とも、蓄積されたヒストリーのリサンプリングを100フレーム繰り返した後、バイリニアの結果よりも大幅に改善しています。最近では,NehabとHoppe[NH14]が,従来の畳み込みフィルタよりも優れたリサンプリング品質を示す一般化フィルタカーネルを研究しています.この種の最新のフィルタ[SN15]は、100フレームのリサンプリング後に、ほぼ視覚的にロスレスな結果を出します(図8の最後の列は、彼らのキュービック準補間器を使った結果を示しています)。一般化されたフィルタは、従来の線形、二次、三次リサンプリングフィルタに続いて線形再帰的フィルタパスとして実装されますが、これは並列再帰的フィルタリングを用いてGPU上で効率的に実装することができます[NM16]。

※図は,[Yang 2020]より引用

6.1.2. History rectification-induced blur

ヒストリー補正技法(Sec.4.2)は、各ピクセルの近傍にある現フレームのサンプルに、そのピクセルがカバーするサーフェイスカラーの全領域が含まれていることを前提としています。カレントフレームのサンプルは疎であるため(\(\geq 1\) サンプル/ピクセル)、ジオメトリやシェーディングの薄い特徴は、少なくとも、そのピクセルが接する\(3 \times 3\)の近傍の1つのピクセルでカバーされていることが期待されます。残念ながら、非常に詳細なコンテンツでは、この仮定はしばしば破られます。図9(a)は、あるフレームの入力でサブピクセル幅の細い線が欠落し、過小評価されたカラーバウンディングボックスによって線の色がヒストリーから切り取られたり、クランプされたりする、よくあるケースを示しています。これは、小さくて鋭い特徴が出力で平滑化されるような、詳細度の高いシーンでよく起こる現象です(図9(b-d))。

※図は,[Yang 2020]より引用

最近のTAAの実装ではヒストリーの補正が必須であり、ゴースティングなどのより深刻なアーティファクトを避けるために調整する必要があるため(項6.2)、ディテールの保存が犠牲になることがあります。シャープでディテールに富んだ外観を取り戻すために,離散ラプラシアンなどのシャープネスフィルタをTAAの出力結果に適用するレンダラーもあります[Dro14, Xu16, Wih17]。アダプティブ・シャープネス・フィルター[Kra19]を使用すると,シャープネス処理の際に色域外色が生み出されるのを防ぐことができます。

6.2. Ghosting and temporal lag

ゴースティングは、スクリーンスペースの一時的なデータ再利用技術でよく見られるタイプのアーティファクトです。ゴースティングは、移動する物体によって新たに排除された領域に現れることが多く、無効なヒストリーデータがヒストリーの除去や修正技術によって現在のフレームから完全に除去されない場合に発生します。その領域は、移動物体の2つ目のコピーとして現れ、後続のフレームにも引き継がれることがあります。排除以外にも、誤ったモーションベクトルにより、無効な再投影されたヒストリーが移動物体の偽の形状になることもあります。不適切なモーションベクトルをもたらす一般的なエフェクトは、透明度、パーティクル、反射であり、TAAが扱うには難しいケースとして知られています。モーションがなくても、高速で変化するシェーディング(鏡面ハイライトやアニメーションシャドウなど)のためにヒストリーデータが古い場合、結果は単にぼやけているように見えたり、複数のフレームにわたってブレンドされているように見えることがあります。これはテンポラルラグと呼ばれています。

ヒストリー補正機構が有効であれば、ゴースティングやテンポラルラグの発生を防ぐことができます。しかし、ヒストリークリッピングやクランプのようなヒストリー修正技術は、コントラストの高いオブジェクトの境界付近では効果が損なわれることが多いです。図10はゲームでよく見られるケースで、現在のフレームからの入力サンプルには高コントラストのエッジが密集しており(b)、その部分に大きなカラーバウンディングボックスができてしまいます(c)。大きなバウンディングボックスは、ピクセルカラーの色域を表現するのに有効ではないため、クリッピングやクランプの際に無効なヒストリーカラーを通過させてしまうことになります。

※図は,[Yang 2020]より引用

 ゴースティングアーティファクトを避けるために,Unreal Engine 4[Kar14]上のTAAは半透明マテリアル上に”responsive AA”フラグを追加しています。これはステンシルバッファへと書き込まれ,\(\alpha\)を増加させるためにTAAパスによって使われ,不正なヒストリーをより早くリフレッシュをするようにします。同様の手法をUncharted 4[Xu16]でも用いて、ゴースティングが発生しやすいマテリアルをマスクしています。アンチャーテッド4のTAAでも、拡張ステンシルマスクを使用して、アンチエイリアス処理された滑らかなエッジ付近でのゴースティング発生を回避しています。Jimenez[Jim16]は、ヒストリー棄却と補正を組み合わせ、深度比較に失敗したヒストリーピクセルを強制的にリフレッシュしています。INSIDE [Ped16]で使用されているTAA技術は、ゴースティングのアーティファクトの一部を隠すために、TAA出力をモーション速度が増すにつれてモーションブラーピクセルに移行させています。

 Xu[Xu16]は,反射の誤った再投影を修正するために,平面反射面の正しいベクトルを得る方法を述べています.また,対応関係を追跡するために追加のデータ構造を用いて,屈折・反射したコンテンツや影をワープさせることを目的とした関連技術[LRR*14, ZRJ*15, LRBR16]もあります。

6.3. Temporal instability

TAAの主な目的の一つは、フリッカーやシマーのようなエイリアスフレームの時間的な不安定さを軽減することです。フレームごとに異なるジッターオフセットがビューポートに適用されるため、カメラが静止していても、ピクセルに対して計算されるシェーディングサンプルはフレームごとに変化します。通常、この差はサンプル蓄積ステップ(Sec.3.3)で吸収され、正しくフィルタリングされたピクセルが得られます。しかし、ヒストリーの除去や修正のアルゴリズムでは、ジッターによるサンプルの色の変化により、誤ってヒストリーを無効にしたり、クランプしたりすることがあります。図11はそのような例を示しています。低周波のモアレパターンにより、一部のピクセルの近傍で完全な色域の変化が生じ、ヒストリーカラーがすべてのフレームで新しいサンプル値にクリップまたはクランプされ、蓄積が事実上できなくなります。ヒストリーの補正を無効にしたり、緩和したりすると、ちらつきはなくなりますが(図11の3段目)、出力にゴーストやタイムラグが発生する可能性があります。実際、ゴースティングの回避とフリッカリングの回避は、ヒストリー棄却または修正アルゴリズムの設計において、しばしば矛盾する目標となります。

※図は,[Yang 2020]より引用

 時間的な不安定さを引き起こす根本的な問題は、先に紹介した問題の原因と似ています。つまり、十分にサンプリングされていない入力では、無効なヒストリーや古いヒストリーを確実に検出するための十分な情報が得られません。検出の誤検出(有効なヒストリーを無効として扱う)はボケと時間的不安定を引き起こし、逆に誤検出(無効なヒストリーを有効として扱う)はゴースティングとテンポラルラグを引き起こします。テンポラルアップサンプリングアルゴリズムでは、入力がより重くアンダーサンプリングされるため、通常のTAAに比べてアーティファクトが顕著になることが多いです。Sec.4.1で説明したAlternating Sample Pattern [Dro14]やSelective Reshading [SPD18]の技術は、この問題を軽減することを目的としていますが、先に説明した主流のTAA技術とは互換性がありません。

 特定のシナリオの下で時間的な不安定さを減らすことができるいくつかのヒューリスティックなアルゴリズムがあります。前のフレームと現在のフレームの間のモーションコヒーレンシーのテスト[Sou11, Dro14, EM16]は、より多くのヒストリーを保存するようにクランプにバイアスをかけるための追加の入力を提供することができますが、シェーディングが安定していることが知られている場合に限られます。Karis [Kar14]は、ヒストリーがクランピングに近い場合、クランピングが起こった後の時間的変化を和らげるために、ブレンド係数\(\alpha\)を減らします。Jimenez[Jim16]は、この手法を拡張し、フレーム間の空間コントラストの変化をフリッカーアーティファクトの指標として追跡し、フリッカーが検出された場合には収束時間を長くすることを提案しています。

6.4. Undersampling artifacts

TAAはサンプルを時間的に積分することでエイリアシングを低減するため、蓄積されたサンプル数が少ない部分では目に見えるエイリアシングが発生することがあります。これは、カメラのカット時によく見られる現象で、トランジション後の最初の数フレームは、通常、過度にシャープでエイリアスのある外観になります。また、新しくディスオクルードされた領域や、急激にシェーディングが変化した領域では、アンダーサンプリングによるアーティファクトが発生しやすくなります。

 このようなアンダーサンプリングによるアーティファクトを軽減するための一般的な手法は、これらの領域の空間的再利用率を高めることです。いくつかのTAAの実装[Epi15, Xu16]では,新しいサンプルにローパスフィルタを適用することで,エイリアシングアーティファクトや,新たにシェーディングされたピクセルがシャープになりすぎて,収束した結果とは異なって見えることを低減しています.あるいは,モルフォロジカル・アンチエイリアシング技術[Res09, Lot09]のようなスクリーン空間の空間的アンチエイリアシングは,現在のフレームからの生のサンプルをアンチエイリアシングするのに役立ちます[JESG12, Dro14, Jim16, dCI17, Kim18].近似技術に加えて、Adamら[MSG*18]は、ラスタサンプルが疎な領域でより多くのサンプルを集めるために、レイトレーシングを適応的に使用しています。同様に,Yangら[YNS*09]は,シェーディングのエイリアシングを減らすために,除外された領域のシェーディングを適応的にスーパーサンプリングしています。実際には、適応的なスーパーサンプリングは、アルファテスト[Wih17]のようなピクセルシェーダ内の安価な手順で使用することができます。

7. Performance

最近のレンダリングエンジンでは、TAAは通常、単一のコンピュートシェーダまたはフルスクリーンのピクセルシェーダパスとして実装されています。最適化されたTAAの実装は、最新のGPUでもそれなりに高速に動作します。表1は,Unreal Engine 4におけるTAAの典型的なコストを示しています[Epi16]。スクリーンスペース技法として,TAA または時間的アップサンプリ ングのコストは,出力画像の解像度に比例して増加します(動きのあるオブジェクトのモーションベクトル生成のコストを除く)。そのため、通常は安定しており、シーンに依存しないため、エンジンが一定のフレームレートを維持する上で望ましい特性と言えます。一方、フォワードシェーディングパスに相当するMSAAのコストは、ジオメトリの密度、深度の複雑さ、マルチサンプル数、ハードウェアの実装特性などの要因によって変化します。とはいえ、ローエンドのプラットフォーム(特にタイルベースのモバイルGPU)では、MSAAの方がTAAよりも安価な場合が多く、フォワードレンダラーでは好ましい選択肢となることもあります。

※表は,[Yang 2020]より引用

 テンポラルアップサンプリングは、時としてエンジンのパフォーマンスにオーバーヘッドをもたらすことがあります。従来の画像ベースのアップサンプリングフィルタは、通常、ディスプレイに送られる画像の前に適用されますが、テンポラルアップサンプリングパスは、通常、特定の後処理パスの前に適用されます[Epi18]。これは、テンポラルアップサンプリングが、ポストプロセスエフェクトへの入力からエイリアシングと時間的不安定性を除去する役割を担うアンチエイリアシング技術を兼ねているからです(図3.3.1)。その結果、これらのポストプロセスエフェクトはアップサンプリングされた解像度で計算されなければなりません。この変更による影響は、これらのエフェクトのコストとアップサンプリング係数によって異なります。

8. Other related techniques

TAA技術を活用したり拡張したりして、より良い画質を実現する技術やアプリケーションがいくつかあります。このセクションでは、これらの分野の概要を説明します。

8.1. Variable rate shading

Variable Rate Shading (VRS, coarse pixel shading, CPS) [VST*14, HGF14]は、マルチプル・サンプリング・アンチエイリアシング[Ake93]をピクセルよりも大きな画像領域に拡張することで、可視性とシェーディングの計算速度を切り離します。VRSは、グラフィックスハードウェアや主要なグラフィックスAPIで採用されています[NVI18]。VRSは,フラグメントシェーダの呼び出し回数を減らすことでパフォーマンスを向上させる効果がありますが,粗いピクセルに属するすべてのピクセルが一様な色を共有するため,空間的および時間的なアーティファクトが発生する可能性があります。この問題を軽減するために,いくつかの技術がTAAの空間-時間フィルタを適応・活用して,粗いシェーディングのピクセルから細かいピクセルの再構成を改善しています。

 Patneyら[PSK*16]は,画像の周辺部に粗いピクセルシェーディングを用いることで,foveatedレンダリングを高速化しています。このとき,ピクセルあたりのシェーディングが1つのフラグメントに満たない場合に生じるアンダーサンプリングアーティファクトは,分散クリッピング(4.2項参照)によって対処されます。大きな画像領域で色の平均値と標準偏差を計算することによる影響は,生のモーメントの線形性を利用することで回避することができます。生のモーメントは,タイル(16×16ピクセルなど)上で事前に統合され,ハードウェアのトライリニアフィルタリングを用いて中間スケールで再構成されます[Sal16, PSK*16]。Xiaoら[XLV18]は,ブラーノイズ特性を持つビジビリティサンプルとシェーディングサンプルの分布を生成するジッタリングシーケンスを採用することで,TAAを粗いピクセルシェーディングに合わせて調整しています。さらに,粗いピクセルスケールで分散クリッピングを使用することによってもたらされるゴースティングアーティファクトは,重なり合うサーフェイスから多数のシェーディングサンプルが得られるエッジ周辺の色分散を適応的に再スケーリングすることによって低減されます。

8.2. Temporal denoising

リアルタイムレンダリングにおける確率的アルゴリズムは,サンプルバジェットが少ないため,ノイズの多い結果になることが多い.TAAのような時間的再利用アルゴリズムは,分散を低減する手段として,空間フィルタリングと併用したり,空間フィルタリングの代わりに使用したりすることができます。その例としては,ソフトシャドウ[NSL*07, SSMW09],スクリーンスペースアンビエントオクルージョン(SSAO)[MSW10, BA12],スクリーンスペースリフレクション(SSR)[Sta15],グローバルイルミネーション[Xu16],その他の時間的ディザリング効果[WM17]などがあります。データを時間的に再利用することで,空間フィルタリングは,一定の計算コストと出力品質で,より大きなフィルタサポートを効果的に実現することができます.

 再投影に基づく時間的データの再利用は、レイトレースされた画像のノイズ除去にも広く応用されています。多くの技術は,非常に低いサンプリングレートでレンダリングされたパストレース画像をノイズ除去するためにTAAのような時間的フィルタに依存しています[SKW*17, MMBJ17, SPD18, KIM*19, LLCK19, WMB19, SA19, BBHW*19]。パストレーシングでサンプルを再利用する際の大きな問題点として,反射や照明などの二次的なシェーディング効果のために正しいモーションベクトルを得ることが難しいことが挙げられます。Zimmerら[ZRJ*15]は,多様体探索[JM12]を一般化したものを用いて,レンダリング時に鏡面反射の後に見えるオブジェクトのモーションベクトルを推定しており,また,放射成分の複雑な動きを推定するために画像ベースのオプティカルフローを用いています。

8.3. Machine learning-based methods

Salvi [Sal17] は,ストキャスティック・グラディエント・ディセント(SGD)を用いて,近傍クランプ法やクリッピング法で使用されるカラーエクステントを計算するための最適な畳み込み重みを学習することで,TAAの画質を向上させています(セクション4.2参照).人工的なヒストリー補正手法をやめて、補正タスクを直接学習することで、画質をさらに向上させることができます。例えば,分散クリッピングは,新しいサンプルを幻覚し,ヒストリーデータと適切にブレンドするように共同で学習されたリカレント畳み込みオートエンコーダーで置き換えることができます[Sal17].

デノイジングの面では,Chaitanyaら[CKS*17]は,深いU-Net構造にリカレント接続を導入して,時間的安定性を向上させています。Vogelsら[VRM*18]は,カーネル予測ネットワーク(KPN)ベースの時間フィルタを提案している.このフィルタは,(現在のフレームに再投影された)前のフレームと未来のフレームの両方を,時間的特徴の抽出とノイズ除去の入力として使用します.

9. Conclusion and future work

過去10年間、ゲーム業界ではテンポラルアンチエイリアシングとテンポラルアップサンプリング技術が大きく進歩し、成功を収めてきました。私たちは、既存の技術の概要を説明し、最も一般的に使用されているビルディングブロックを包含するフレームワークでそれらを整理しました。特に、空間的なサンプルをどのように収集し、時間的に蓄積するか、ヒストリーデータをどのように検証するか、そして時間的なサンプルをどのように活用して空間解像度を向上させるかについて説明しました。ここで取り上げた技術のほとんどは、出荷されたゲームや量産型ゲームエンジンに組み込まれており、その多くは現在のベストプラクティスとして確立されています。幅広い応用と採用により、このトピックは非常に実用的なものとなっています。

 リアルタイムレンダリングにおけるアンチエイリアシングは、これまでも解決されていませんでしたし、近い将来も解決されないでしょう。TAAもその例外ではありません。ここでは、現在直面しているTAAの主な課題を特定して議論し、既存の解決策や回避策をまとめました。TAAは、真のシネマティックレベルの品質と堅牢性を実現するためには、まだまだ大きな飛躍が必要です。特に、利用可能な時間データを十分に活用するためには、ヒストリー補正の堅牢性と信頼性をさらに向上させる必要があると考えています。近い将来、解析技術と機械学習を用いたソリューションの両方が進歩することで、この分野における現在の最高の技術を凌駕し、TAAの画質が次のレベルに到達することを期待しています。

超雑訳 A Survey of Temporal Antialiasing Techniques」への1件のフィードバック

  1. いつも陰ながら拝見させてい頂いております。(☆PROJECT ASURA☆のときから)
    HPを閉じるかもしれないと聞いて参りました。
    今年出版もされて今後のご活躍を期待される中でのサイト閉鎖の話は残念であります。
    まだ読み進めていない記事もあるため、前のサイト同様に残してもらえると個人的に助かります。
    私はゲーム業界人ではないですが、フルスクラッチでシェーダー関連を扱うブログは少ないため、本HPはかなり貴重だと思います。
    出版された本は購入しました。私はプロではないため貴重な知識を公開してもらい大いに助かります。
    もし、次回作があるようでしたら、ぜひ購入させて下さい。
    今後のご活躍を陰ながら応援致します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください