2022年の AntiAlias 処理についてのまとめリンク

ここ 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

ClearCoat Material に関する情報とリンク

UE4,UE5に代表される、ClearCoat の内容の簡単な情報収集。

利用用途ととしては、主にハードサーフェイス系のマテリアルのシェーディングに用いられる。

説明については下記にあり。

クリアコート モデルと言えば、よくカーペイント タイプのマテリアルが連想されますが、使用はそれに限定されません。標準的な材質の上に薄い半透明の表面がある多層材質をシミュレートするのにも使われます。金属の表面にも非金属の表面にも使えます。

https://www.unrealengine.com/ja/tech-blog/improved-shading-models-in-unreal-engine-4-25-and-beyond

現実では、自動車の塗料用の用語としても用いられる。

上塗カラーを塗装した上に塗り重ねる、最終的な上塗(トップコート)としてクリヤーを塗装することをクリヤーコートといいます。

https://www.paint-works.net/color_mix/point/point04.htm

UEの実装としては、2つあり、

・塗装のような通常のClearCoat
・カーボンファイバーなど複雑なものに向けた、Dual-NormalClearCoat

と分かれているようだ。

Dual-NormalClearCoatは、2つ目のNormalが必要なようで、プロジェクト設定から変える必要がある。

https://docs.unrealengine.com/4.27/ja/RenderingAndGraphics/Materials/HowTo/ClearCoatDualNormal/

マテリアルのピンについては、DefaultLitと比べて、

・ClearCoat

・ClearCoatRoughness
が追加される。

2つ目のNormalを使用する場合は、特殊な手順とノードを利用する必要があるようだ。

ClearCoatBottomNormal マテリアル式ノードを必ずマテリアル グラフに追加して、使用したい法線マップを入力に接続しておいてください。そうしておかないと、マテリアルの中で 2 つ目の法線マップを見ることができません。

https://docs.unrealengine.com/4.27/ja/RenderingAndGraphics/Materials/HowTo/ClearCoatDualNormal/

組み込みのチュートリアルは色々と公開されているので、使いたくなったら参考にしてみるのが良いだろう。

実装について。

Shaders\Private\ClearCoatCommon.ush

にシェーダ関数が存在する。

ClearCoatLayerCombine を見ると、GBuffer に ClearCoat 用のFloat2つのバッファが存在し、そのパラメータを元にシェーディングを利用しているように見える。

なお、SecondNormalを有効にすると、プロジェクトに対してシェーダ全コンパイル相当の依存が掛かるようです。

式やレンダリングの詳細については、必要が出たら調査しようと思います。

Graphics Pickup 2022/10/08

For example, if the traditional algorithm taught in school multiplies a 4x5 by 5x5 matrix using 100 multiplications, and this number was reduced to 80 with human ingenuity, AlphaTensor has found algorithms that do the same operation using just 76 multiplications. 

Google翻訳直訳すると、

例えば、学校で教えられている従来のアルゴリズムが 4x5 × 5x5 の行列を 100 回の乗算を使用して乗算し、この数が人間の創意工夫によって 80 回に削減された場合、AlphaTensor は、わずか 76 回の乗算を使用して同じ演算を行うアルゴリズムを発見しました。 

4×4でも普通に乗算が1度減らせるらしいですが、ゲームCGにどれだけ恩恵があるか気になりますね。

https://blog.en.uwa4d.com/2022/09/29/screen-post-processing-effects-color-models-and-color-grading/

Graphics Pickup 2022/10/02

DirectX9 時代の GraphicsPipiline。懐かしいですね。

PCF & Random Shadow.

Houdini による流体シミュレーション

SIMD で高速化された、FLIP simulator, Poisson solver, Variational viscosity equation solverが含まれているとの事。OpenVDBに基いているらしいです。

github は、https://github.com/kaust-csg-uaamg/uaamg

2017年の RespawnEntertainment の GDCのスライド

Embergen の新たなデモンストレーション。

衝突した時の散り方が流体ならではの動きをしているように見えます。

続いてEmbergen の Dr.Strange 風の気持ち良い動き。

Flashback社のParticleGenerator。ProRes,H.264への映像出力が可能との事。

TokyoIndies復活のお知らせ。