NEUROMANTIC

自分でC/C++/UE4/Graphics/ゲームなどをやったことをメモするブログ

「Archive」Antialiasingについて自分なりにメモってみた

以前にAntialiasingについていくつかをメモしたことがありましたけど、纏めずにそのまま上げたいと思います。(間違えてたり、荒れているかもしれませんが後で整理しますよ)

内容

SSAA(FSAA)とは

https://en.wikipedia.org/wiki/Supersampling
http://lite.parkoz.com/zboard/view.php?id=int_vganews&no=11404
http://lite.parkoz.com/zboard/view.php?id=int_vganews&no=11673

Super Sampling Anti-Aliasingは、1pxのピクセルを描画するとき、サンプリングするテクセルの数を増やして、それを補間し、最終的にピクセルを描画するようにする技法である。

もしx4 SSAAだとすると、1ピクセルを描画するのに4個のサンプリングを行うことになる。単純ながらもクォリティーは良いが、倍となるメモリが必要になる。大きい倍数ではAnisotrophic Filteringと同じのフィルタリング効果まで適用するように見える。なぜならAnisotrppicも遠く見えるもののサンプリング問題を解決して、サンプリング率を動的に高くしてフィルタリングする効果であるからです。

実装方法としてはサンプリング倍数ほどに外像度を拡大して(画面表示用の外像度ではない)それをスクリーンの外像度に合わせて色を混ぜて縮小して表示する方法がある。

MSAA 란

https://en.wikipedia.org/wiki/Multisample_anti-aliasing

既存のSSAAが画面全体としてAAを行った一方、処理とメモリ量が高くなるため、描かれるモデルの枠線だけをサンプリングの範囲に入れる方法である。

f:id:neuliliilli:20190605124740j:plain

まず枠線があることを検出するため、Coverage Sampleという検査を行ってピクセルの中に同じモデルだけ検出出来たか、それとも複数があるかを検査する。もしピクセルの中に複数のモデルがあるとしたらこのピクセルをサンプリングして色を混ぜる。

この技術は今でも幅広く愛用されるAA技法であるが、最近はDeferred Shaderingという技法が採用されるため、普通の方法ではAAが出来なってしまっている。

変種としてはRSAA(Rotated Sampling Anti-Aliasing)Quincunx Anti-AliasingEdge-Detectなどがある。

TAA とは

https://namu.wiki/w/%EC%95%88%ED%8B%B0%EC%97%90%EC%9D%BC%EB%A6%AC%EC%96%B4%EC%8B%B1

Temporal AntiAliasingという。MSAAかSSAAの場合にはスクリーンの空間に対してAAを行ったが、TAAは時間軸に対してAAを行う。実際に現実では各種のパンとプロペラが実際に回る方向の反対方向にゆっくりと回るように見える現象がTAという。

人の目から見えるFPSは220fps以上を区別できるが、ゲームではSoftなら30FPS、Hardだったら60か120FPSの更新率になるため、このTemporal Aliasingに脆弱する。

FXAA とは

https://m.blog.naver.com/ssan664/10153008116

ATAA(Adaptive Temporal AA)・DLSS とは

https://quasarzone.co.kr/bbs/board.php?bo_table=qf_vga&wr_id=134495
https://www.reddit.com/r/nvidia/comments/99xxmr/what_is_dlss/
https://news.developer.nvidia.com/dlss-what-does-it-mean-for-game-developers/

Deep Learing Super Sampling と言って、オブジェクト縁にある階段現状(ピクセルがなめらかに表現出来ず、境界線がはっきりと見える現象)であるAliasingをサブピクセル単位で補間するAntialiasingというものを、ディープラーニングを使用して一般的なAntaliasing技術より鮮明に補間する技法である。

f:id:neuliliilli:20190605124817p:plain

上の画像で、左はクラシックなAntialiasing方法(TAA)を、右は今説明するDLSS(DeepLearning Super Sampling)のディテールを比較する。緑のボックスの中でディテールの差が見える。

普通のTAA(Temporal)の方法は普通の普及しているグラフィックカードでも実装が出来て、そして速いという点もある。しかし上の画像のようにディテールが落ちるおそれがあるし、そしてサブピクセル単位でそのサブピクセルをピックアップしてその方法でブレンディングをするかによってクォリティーが違ってしまう。即ち、マジックナンバーというのが必然と必要になってしまう。

しかしDLSSは人工知能として開発されたモデルを用いて、境界線のサブピクセルの補間をより賢くすることで、ディテールを落とさなくながらも既存のAAが出来るようにする。しかしこれを使用するためには、NVidiaのTuring GPU系列のTensorCoreが必要になる。

AA自体が後処理(Post-processing)であるため、TensorCoreがあるGPUがあれば、エンジンなどに簡単に実装して適用させることができるだろう。しかし、DLSSを100%使用するにはそのゲームに合うRTXモデルが必要になるため、ということはNVidiaにゲームのビルドを提供して、サンプリングを行い、そのゲームに合うモデルが開発しないとならないということになるため、AAAなどの巨大開発者だけ十分に活用しそうだ。

In there, he describes the way how DLSS work.

  • NVIDIA receives early build of games
  • NVIDIA generate training images
  • Use the images to train an AI using deep learning
  • Distill the images and "download" it to user PC
  • Turing RTX GPU uses Tensor cores to deliver the performance and improved image quality

To me, this sounds like NVIDIA could do it unilaterally since they get early build of games to make Game Ready Driver and other optimization and play testing.

https://blog.naver.com/vivamus09/221330156995 ATAA 초록 :

게임에서 실시간 적응형 슈퍼 샘플링을 위한 실용적인 알고리즘을 소개합니다. 적응형 광선 추적을 통해 레스터화 된 이미지의 일시적인 안티 앨리어싱을 확장하고, 상용 게임 엔진 및 최신 GPU 광선 추적 API의 제약을 준수합니다. 이 알고리즘을 통해 블러 및 고스트 현상과 같은 현상을 제거하고, 대부분의 게임에서 요구되는 33ms 프레임 내에서 기하학적 구조(geometry), 음영(shading), 사물(materials)의 8x 슈퍼 샘플링에 도달하는 품질을 달성합니다

[출처] 엔비디아, 새로운 안티앨리어싱기술 ATAA 발표|작성자 뻘짓연구소장

  • 据え置き機で最初にAAを実装したゲーム機はニンテンドウ64である。