ここ 10 年近くで良く出る AA の種類について、簡単にまとめてみました。
推測も多くある為、間違い等ありましたらご指摘頂けますと幸いです。
DLSS, FSR と言った近年のアップサンプリングにも AA 技術が入っているかと思いますが、この記事ではあえて割愛しています。
略称 | 情報リンク | 実装 |
---|---|---|
SSAA (Super Sampling Anti Aliasing) | https://en.wikipedia.org/wiki/Supersampling https://ascii.jp/elem/000/000/746/746002/ | サブピクセル分も考慮した大きな解像度で描画し、実際に描画したい解像度に縮小してアンチエイリアシングする手法。 とてもシンプルな実装故に、サブピクセル分だけ純増した解像度を必要とする為、大きな負荷が掛かる。 |
MSAA (Multi Sample Anti Aliasing) | https://en.wikipedia.org/wiki/Multisample_anti-aliasing https://ascii.jp/elem/000/000/746/746002/ https://www.4gamer.net/specials/3de/050621_crossfire/050621_crossfire.shtml | ベースの考え方としてはSSAAに近く、負荷を軽く出来るように品質を犠牲にして改良したもの。 サブピクセルサイズの高解像度の深度バッファを用いてデプスの差を検出し、採用されたピクセル色をサブピクセルへとしてしまう方法。 その為、深度バッファはサブピクセル分も全解像度で描いていると思われる。(この処理はビデオカードが流通している時期とハード、ドライバにより諸説ありそう…) ポリゴンのエッジには効果が期待出来るが、デプスが平坦なテクスチャ描画に対してのAA効果は期待出来ないと思われる。 DeferredRenderingとの相性が悪い事が知られている。(費用対効果が悪すぎる) |
EQAA (Enhanced Quality Anti-Aliasing) | https://www.4gamer.net/games/122/G012292/20101212001/ https://www.coelacanth-dream.com/posts/2020/11/10/what-is-rbplus/ https://www.anandtech.com/show/4061/amds-radeon-hd-6970-radeon-hd-6950/10 | AMDドライバに実装あり。 NVIDIA では過去にあった CSAA と同列の手法と思われる。 (CSAAは内部実装があまり明かされていないとの事) MSAAの拡張で、EQAA 4x設定がMSAA 8xまたは16xに見えるようになると謳われているもの。 サンプル数はMSAAと同じままで、ポリゴンのカバレッジのサンプルを追加で行う事で、実現しているとの事。 MSAAのテクスチャへのAAが期待出来ないネガティブな面は残っていると思われる。 |
FXAA (Fast approximate Anti-aliasing) | https://docs.nvidia.com/gameworks/content/gameworkslibrary/graphicssamples/d3d_samples/fxaa311sample.htm https://developer.nvidia.com/gameworks-directx-samples | 近年のゲーム内実装に多く見られる。 画像処理的なアプローチで、輝度差からエッジを抽出してアンチエイリアシング処理を適用をする。 NVIDIA ドライバに実装あり(※他の設定と併用可) |
MLAA (Morphological Antialiasing) | http://www.realtimerendering.com/blog/morphological-antialiasing-in-god-of-war-iii/ http://www.iryoku.com/mlaa/ https://hexadrive.jp/lab/demo/556/ https://www.4gamer.net/games/016/G001684/20101105022/ | GodOfWar3で採用あり。 Z, U, L の形状を検出して、それぞれに応じたアンチエイリアシングを掛ける。 PS3 SPU一基だと20ms、並列化して4msだそうなので、当時にしても非常にリッチな実装と思われる。 |
SMAA (Enhanced Subpixel Morphological Anti-Aliasing) | GPUPro2 http://www.iryoku.com/smaa/ https://github.com/iryoku/smaa | Farcryシリーズにて採用。 MLAAのZ,U,Lエッジの抽出とブレンド用のウェイトの2パスにて出力した情報を用いて、アンチエイリアシングされた絵を作る。 SMAA 1x(PatternHandling) SMAA T2x(1x+Temporal Sampling) SMAA S2x(1x+Sparial Multisampling) SMAA 4x(1x+T2x+S2) の4つの選択肢がある。 |
TAA (Temporal Anti-Aliasing) | HIGH-QUALITY TEMPORAL SUPERSAMPLING http://advances.realtimerendering.com/s2014/index.html#_HIGH-QUALITY_TEMPORAL_SUPERSAMPLING ※ページ下記にもリンクあります | 近年のゲーム内実装に多く見られる。 ジッターさせた(n-1)の前回のフレームを累積(指数移動平均)し、サブピクセルとして扱ってアンチエイリアスを掛ける。 描画した深度バッファ、Velcoityバッファ等を用いて過去のピクセルを探し出す。 |
開発中の負荷の感覚としては、TAA << FXAA <<< SMAA << MSAA <<(超えられない壁)<< SSAA です。
個人差、環境差はあると思います。
品質は理屈的にも SSAA が一番ですが、負荷としては現実的ではない為、各社タイトルやジャンルに応じてそれぞれ別のものを選択している印象があります。
それでも、選択肢としては、TAA, FXAA, SMAA かなという印象です。ただ、SMAA も TAA のほうが圧倒的に軽い割に同等の品質が求められる事から、TAA, FXAA 、あるいは TAA + FXAA の 3択になりつつあるような気がします。
UE4では、機種ごとに制限もあったりするようです。(「猫でも分かるUE4のポストプロセスを使った演出・絵作り。」(2018/Aug/06, 154p-)
MSAA が、DeferredRenderingと相性が悪いというのも要メモですね。(なぜなにリアルタイムレンダリング)(2016/Nov/20, 73p-)
MSAA は、GBufferの複数枚分の全てを MSAA 用に変更しなくてはならず、4xMSAA の時はそれぞれが4倍となってしまう…というのはやはりまだまだ非現実的かと思います。
P.80の、「サブピクセルを利用するAA(MSAA,TAA)と、利用しないAA(FXAA,MLAA)」という区別は、タイトルが「電線など細かいジオメトリがあるか」により判断が出来て、指標としてとても分かりやすいですね。
■FXAA
FXAAは過去にバージョンがいくつかあるのですが、CEDEC 2011/09/08 の「DirectX最新グラフィックス技法のご紹介」にて、FXAA3の機能紹介が分かりやすいですね。
https://cedil.cesa.or.jp/cedil_sessions/view/576
■Temporal AA について
個人的には Temporal AA は負荷の割に高品質でかつ、サブピクセル処理も考慮している為、細かいジオメトリも行ける為、お気に入りです。FXAAとの併用も良いでしょう。
しかし、Temporal AA は素直に実装すると、動いた時の残像のアーティファクトや、半透明エフェクトの瞬間的な高周波な瞬間的に描画されるエフェクトが掻き消されてしまう現象がよく見られる為、タイトルに応じたカスタマイズは必須かなと思います。
デプスを積極的に参照して Reject する処理を優先して調整された TAA との相性も悪いでしょう。全てがデプスを描く不透明物の表現で出来ているタイトルであれば、もちろん問題はなさそうですが。
世の中に出ている手法が全て正解という訳でもないと思うので、様々なアイディアを考えて試したみたいものですね。
Temporal AA 参考リンク:
https://www.guerrilla-games.com/media/News/Files/GDC2014_Valient_Killzone_Graphics.pdf
Intel® Graphics Optimized TAA : https://github.com/GameTechDev/TAA
もんしょの巣穴ブログ ver2 : ResponsiveAA の挙動
http://graphicrants.blogspot.com/2013/12/tone-mapping.html
Japanese memo of “Temporal SuperSampling and Temporal Filtering” in hanecci blog
下町のナポレオン: Temporal Anti-Aliasingの実装
Unity の Temporal AA 実装 : https://github.com/Unity-Technologies/PostProcessing/blob/v2/PostProcessing/Shaders/Builtins/TemporalAntialiasing.shader
NVIDIA AdaptiveTemporalAntiAliasing:
https://research.nvidia.com/publication/2018-08_adaptive-temporal-antialiasing
Playdeadgames:
https://github.com/playdeadgames/temporal
https://github.com/playdeadgames/temporal/blob/master/GDC2016_Temporal_Reprojection_AA_INSIDE.pdf