アンチエイリアシング
ジャギーやちらつきが消えない理由を標本化不足という一点から解き、MSAA・SSAA・FXAA・SMAA・TAA を原理と得失で選び分けられるようになります。
- 1.エイリアシングは連続的なエッジをピクセル格子で標本化する際、エッジの高周波成分が標本化周波数の半分(ナイキスト周波数)を超え、偽の低周波パターンとして折り返す現象。
- 2.SSAA は全体を高解像度で描いて縮小、MSAA はエッジのカバレッジだけを複数サンプルで評価しシェーディングは1回に抑える。負荷と品質のバランスが対照的。
- 3.FXAA/SMAA は完成画像のエッジを検出してぼかすポストプロセス、TAA は複数フレームのサンプルを再投影して蓄積する時間的手法で、動きに伴うぼけやゴーストが弱点。
エイリアシングは「標本化不足」で起きる
3D レンダリングは、本来連続的な図形(三角形のエッジやテクスチャの模様)を、有限個のピクセルという離散的な格子で標本化する処理です。ここで避けられないのがエイリアシングです。斜めのエッジが階段状にギザギザに見える現象(ジャギー)や、細い線・遠景のテクスチャがフレームごとにちらつく現象は、すべて同じ根から生じます。
原因は信号処理の標本化定理にあります。ある信号を正しく復元するには、その信号に含まれる最高周波数の2倍を超える周波数で標本化しなければなりません(この下限をナイキストレートと呼ぶ)。言い換えれば、標本化周波数の半分(ナイキスト周波数)を超える成分は正しく表現できません。ところが幾何エッジは色が不連続に変化する境界で、理論上は無限に高い周波数成分を含みます。ピクセル格子の標本化周波数では到底足りず、ナイキスト周波数を超える高周波成分が低周波側に「折り返して」偽の模様として現れます。これがエイリアシング(元の高周波が別名の低周波に化ける、の意)です。
静止画で見える階段状のエッジ(空間的エイリアシング)と、動画でエッジや細部が明滅する現象(時間的エイリアシング)は、どちらも標本化不足による折り返しです。空間方向の標本点がピクセル、時間方向の標本点がフレームというだけの違いで、対策の考え方も「標本を増やす」か「事前に高周波成分を削る(フィルタする)」の二択に集約されます。
理想は「ピクセル内の被覆率を積分する」こと
エイリアシングを根絶する理想的な処理は、各ピクセルを1点で標本化するのではなく、ピクセルが覆う面積の中で図形の色を積分(平均)することです。エッジがピクセルの30%を覆うなら、そのピクセルは前景色30%と背景色70%の混合になり、階段はなだらかな階調に置き換わります。これは高周波成分を除去するローパスフィルタを標本化の前にかけることに相当します。
問題は、この積分を厳密に解くのが高コストな点です。そこで実用的な各手法は、この積分を「どこで・何回・いつ」近似するかで棲み分けます。以下の軸で整理できます。
| 手法 | 近似の場所 | サンプルの取り方 |
|---|---|---|
| SSAA | 画面全体 | 高解像度で描いてから縮小(空間オーバーサンプル) |
| MSAA | エッジ(幾何)のみ | 1ピクセル内の複数点でカバレッジ判定、シェーディングは1回 |
| FXAA/SMAA | 完成画像 | 描画後にエッジを検出して近傍色を混合(ポスト処理) |
| TAA | 時間方向 | 毎フレーム標本位置をずらし過去フレームと蓄積 |
SSAA ── 力任せだが最も素直
SSAA(Super-Sampling Anti-Aliasing)は最も単純です。目標解像度の縦横それぞれ2倍(合計4倍のピクセル数)などで内部的にレンダリングし、最後にボックスフィルタなどで縮小して表示します。ピクセルごとに複数の標本点を持つため、被覆率の積分をそのまま高い精度で近似できます。
原理が素直なだけに品質は最良で、エッジだけでなくテクスチャの内側やシェーダが生む高周波(スペキュラのちらつきなど)にも効きます。欠点は明快で、4倍 SSAA ならピクセルシェーダの実行回数もフィルレートもメモリ帯域も約4倍になります。全画素で重い処理を4回回すため、リアルタイム用途では最も高価な選択肢です。
MSAA ── エッジのカバレッジだけを増やす
SSAA の無駄は、平坦な面の内側までシェーディングを4回計算してしまう点にあります。エイリアシングが目立つのは主に幾何エッジなのだから、カバレッジ(被覆率)の評価はサンプル数を増やし、色の計算(シェーディング)は1回で済ませる——これが MSAA(Multi-Sample Anti-Aliasing)の発想です。
具体的には、1ピクセル内に複数のサブサンプル位置(4x なら4点)を用意します。ラスタライザは三角形が各サブサンプル位置を覆うかどうかだけを個別に判定し、深度テストもサブサンプル単位で行います。一方、ピクセルシェーダは覆われたピクセルにつき原則1回だけ実行され、その結果の色が「覆われたサブサンプルにのみ」書き込まれます。最後に解決(リゾルブ)でサブサンプルを平均し、最終色を得ます。
4x MSAA の1ピクセル処理(概念):
サブサンプル位置 s0..s3 それぞれで:
三角形がその点を覆うか? → カバレッジ判定(4回)
その点の深度は手前か? → 深度テスト(4回)
ピクセルシェーダ: → 原則 1 回だけ実行
→ 得た色を「覆われた si」のフレームバッファに書く
リゾルブ:
最終色 = s0..s3 全スロットの色の平均
(覆われた si には今回の色、覆われない si には
背景や他三角形の色が残っており、この平均が被覆率になる)
この分離により、エッジ部分は SSAA に近い品質を得ながら、シェーディング負荷は1回分で済みます。コストの中心はサンプル数に比例して増えるフレームバッファのメモリと帯域、そしてリゾルブ処理に移ります。
MSAA が高精度化するのは幾何エッジのカバレッジだけです。シェーダ内部で計算されるアルファテスト(葉や金網のテクスチャ抜き)やスペキュラハイライトの明滅は、幾何エッジではないため MSAA では改善しません。前者にはアルファ・トゥ・カバレッジ、後者にはミップマップや別手法が必要です。加えて、G バッファに一度描いてから照明を計算するディファードレンダリングとは相性が悪く(サブサンプルごとに照明計算が必要になり利点が薄れる)、この事情がポスト処理系や TAA の普及を後押ししました。
FXAA / SMAA ── 完成画像を後処理でならす
ディファードレンダリングの普及で MSAA が使いにくくなると、レンダリング済みの最終画像だけを入力として後処理でエッジをならす手法が広まりました。ジオメトリ情報を必要とせず、画面解像度の1パスで済むため軽量です。
FXAA(Fast Approximate Anti-Aliasing)は、画像の輝度(ルミナンス)差からエッジを検出し、エッジに沿う方向へ近傍ピクセルをブレンドします。極めて高速で実装も容易な一方、実際のカバレッジ情報を持たないため推測に頼り、画面全体がわずかにぼける傾向があります。
SMAA(Enhanced Subpixel Morphological Anti-Aliasing)はより精緻です。エッジのパターン(L 字・Z 字など)を形態的に分類し、事前計算したテーブルを使って被覆率を推定してから混合します。FXAA より鋭さを保ちつつ階段を消せますが、その分やや重くなります。両者とも推定ベースゆえに真のサブピクセル情報は復元できず、1フレームの情報だけでは限界があります。
TAA ── 時間軸からサンプルを借りてくる
1フレームの標本が足りないなら、複数フレームにまたがって標本を集めれば実効的な標本数を増やせる——これが TAA(Temporal Anti-Aliasing)の中核アイデアです。近年の主流で、ポスト処理の軽さと高い品質を両立します。
仕組みは3段階です。第一に、毎フレーム、投影行列にサブピクセル単位の微小なずれ(ジッター)を加え、標本位置を少しずつ変えます。第二に、前フレームの結果をモーションベクトル(各ピクセルが前フレームでどこにあったか)を使って現在の座標系へ再投影(リプロジェクション)します。第三に、再投影した過去の色と現在の色を指数移動平均などで蓄積します。数フレームで多数の標本位置がピクセル内に蓄積され、実効的に高いオーバーサンプルが得られます。
TAA の1フレーム(概念):
1. ジッター: 投影にサブピクセルのずれを与えて描画
(ずれの系列は Halton 列など低食い違い列を使う)
2. 再投影: モーションベクトルで前フレーム色を現座標へ写す
history_color = 前フレーム結果[ 現ピクセル − motion_vector ]
3. 蓄積: 現フレーム色と履歴を混合
out = lerp(history_color, current_color, α) (α は小さめ, 例 0.1)
利点は、静止シーンで SSAA に迫る品質を1パス相当の負荷で得られる点です。加えてジッターと蓄積はシェーダ由来のちらつきにも効きます。
TAA の弱点はすべて「過去の情報を混ぜる」ことに由来します。再投影が外れる場所——遮蔽が解けて現れた領域(ディスオクルージョン)、モーションベクトルを持たない透明・半透明、高速移動する物体——では古い色が尾を引き、残像(ゴースト)や滲みが出ます。実装では履歴色を近傍の色範囲に制限するネイバーフッドクランプで無効な履歴を棄却しますが、棄却するほどその画素は瞬間的にアンチエイリアスが弱まります。動きの多い映像で全体がぼけやすいのも、履歴混合が事実上のローパスフィルタとして働くためです。
どう選ぶか ── 得失の要点
- 品質最優先・負荷を問わないなら SSAA。素直に全高周波へ効くが最も高価。
- 前方(フォワード)レンダリングでエッジ品質を稼ぎたいなら MSAA。シェーディング1回でエッジのカバレッジだけ高精度化できるが、アルファテストやディファードとは相性が悪い。
- とにかく軽く・実装容易なら FXAA、軽さと鋭さの両立なら SMAA。ただし推定ベースゆえ真のサブピクセル情報は復元できない。
- 現代のディファード+高品質なら TAA。実効標本を時間方向から稼げるが、ディスオクルージョンや高速移動でゴースト・ぼけが出る。DLSS/FSR など時間的アップスケーラは、この TAA の再投影・蓄積を解像度復元へ発展させたものです。
GPU のレンダリングパイプライン全般は /hardware-components/、標本化やフィルタの信号処理的背景は他分野にも通じる普遍的な原理です。
まとめ
- エイリアシングの本質は標本化不足による高周波の折り返し。理想の対策はピクセル被覆率の積分(プレフィルタ)で、各手法はこの積分を「どこで・何回・いつ」近似するかで分かれる。
- SSAA は全画素を高解像度で描いて縮小し品質最良だが負荷も最大。MSAA はカバレッジだけ多点評価しシェーディングは1回に抑え、エッジに絞って効率化する。
- FXAA/SMAA は完成画像のエッジを後処理でならす軽量手法で、ジオメトリ不要な代わりに推定に頼りぼけやすい。
- TAA はジッター・再投影・蓄積で時間方向から標本を集め、低負荷で高品質を得るが、ディスオクルージョンや高速移動でゴースト・ぼけという時間的手法固有の代償を負う。
グラフィックス Article
アンチエイリアシングを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
アンチエイリアシング
比較で見る軸
難易度: advanced / カテゴリ: グラフィックス / タグ数: 5
導入後に効く点
SSAA は全体を高解像度で描いて縮小、MSAA はエッジのカバレッジだけを複数サンプルで評価しシェーディングは1回に抑える。負荷と品質のバランスが対照的。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- グラフィックス
- タグ数
- 5
判断チェックリスト
- 自社の用途が「アンチエイリアシング / MSAA」に近いか確認する。
- 強みである「エイリアシングは連続的なエッジをピクセル格子で標本化する際、エッジの高周波成分が標本化周波数の半分(ナイキスト周波数)を超え、偽の低周波パターンとして折り返す現象。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。