オススメ機能
Twitter
お気に入り
記事履歴
ランキング
パッケージ
GeForce GTX 600
  • NVIDIA
  • 発表日:2012/03/22
お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
NVIDIA,独自のアンチエイリアシング技法「FXAA」「TXAA」をアピール。いまあらためて振り返るアンチエイリアシングの歴史
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2012/11/26 13:00

ニュース

NVIDIA,独自のアンチエイリアシング技法「FXAA」「TXAA」をアピール。いまあらためて振り返るアンチエイリアシングの歴史

GeForce GTX 600
 2012年11月22日,NVIDIAは,都内で報道関係者向け説明会を開催した。同社は8月に,新しいグローバルイルミネーション(Global Illumination,大局照明)技法や「Unreal Engine 4」を題材とする説明会「Technologies in Games of Tomorrow」(関連記事)を開催しているが,今回の説明会タイトルは「Technologies in Games」。つまり将来ではなく,今日(こんにち)すでに使うことのできるゲームの技術ということで,テーマはアンチエイリアシング(Anti-Aliasing,以下 AA)である。


GPUの進化とAA


竹重雅也氏(Developer Technology Engineer, NVIDIA)
 8月の説明会に引き続き,解説担当は,NVIDIAでデベロッパーテクノロジーエンジニアを務める竹重雅也氏だ。ゲームの技術開発に深く関わった実績を持ち,リアルタイムグラフィックスを専門としている竹重氏は,日本におけるNVIDIAの顔の一人といっていいかもしれない。

 AAというと,「画面をぼかして綺麗に見せる技術」くらいに捉えている読者は多いだろう。そしてそれはかなりの部分で正しい。2D,3Dにかかわらず,コンピュータの画像はドット(以下,ピクセル)で描かれるので,たとえば斜めの線が画面内を右から左へ横切るようなとき,ギザギザな見た目になってしまうということが起こる。それを何とかしようというのがAAだ。

エイリアス(エイリアシング)は,画像をピクセルで表現しようとしたときに,斜めの線や曲線がギザギザして見えてしまう現象のこと。AAはこれを滑らかにすべく用いられる
GeForce GTX 600 GeForce GTX 600
GeForce GTX 600 GeForce GTX 600

 静止画において,ピクセルで斜めの線を描いたときに現れるギザギザを「ジャギー」(jaggy)という。ジャギーは2D,3Dにかかわらず現れる。
 一方,3Dゲームでは,斜めの線が動くのに合わせて,ギザギザが移動して見えることがある。静止画におけるジャギーよりも目立つため,映像の質を悪化させるという点ではジャギーよりも影響が大きいのだが,竹重氏はこれを「クローリー」(crawly)と呼んでいた。

ピクセルで斜めの線を描くとギザギザになる。これがジャギーだ。一方,3Dゲームでは斜めの線が動くとギザギザも移動して非常に目立つが,これがクローリーとされている
GeForce GTX 600 GeForce GTX 600

 ジャギーやクローリーに効果のあるAAだが,そんなAAに新技法が続々と登場してきているのは,やはりGPUの高速化によるところが大きいと,竹重氏は振り返る。「かつてAAは後回しになることが多かった。そして,ゲーム開発において『AAをどうしようか』という最終段階になる頃には,GPUの能力を使い切ってしまっていることが多かった」(同氏)。つまり,かつてのGPUだと,AAまで処理させるには貧弱だったともいえるだろう。

 さて,竹重氏はここで,AAにおける最も基本的な形となるSupersSample Anti-Aliasing(SuperSampling〜ともいう。以下,SSAA)の説明から入った。SSAAはピクセルをある数で再分割し,その平均を取って当該ピクセルの色を決める作業を行う。
 下のスライドは,NVIDIAの企業ロゴを例にとったもの。ちょうどロゴの一部で,白と黄緑の混ざったピクセルをピックアップしたものだ。AAが有効でなければ,ここはまるまる黄緑で描かれ,ロゴの縁はジャギーになる。

このスライドは4x SSAAの例。ロゴの縁が横切るピクセルを4つのサブピクセルに分け,サブピクセルから色をサンプリングする。スライドでは文字が重なってしまっているが,サブピクセルの中央から色をサンプリングするのがOGSSAA(濃い青の点),サンプリングする位置を少し回転させる手法がRGSSAA(マゼンタの点)だ
GeForce GTX 600

 今回竹重氏が例示した4x SSAAでは,1つのピクセルを4つのピクセルに分割する。分割したピクセルを「サブピクセル」といい,サブピクセルの色をサンプリング(sampling,見本として取る意)して平均を取り,当該ピクセルの色を決めるというのがSSAAの大まかな流れだ。
 「サブピクセルのどこの色をサンプリングするか」はいくつか方法があり,単純に各サブピクセルの中央色をサンプリングするのをOGSSAA(Ordered Grid SSAA)という。また,サンプリングする位置を2次元方向へ中央から少し回転させるようにズラすRGSSAA(Rotated Grid SSAA)もあって,現在はこれらが主流だ。OGSSAAよりもRGSSAAのほうが精度が高いとも言われるが,最終的な結果は大きく変わらないことも多い。

 いずれにしても,1つのピクセルを4つのサブピクセルに分け,サブピクセルから色をサンプリングして色の平均を取ることによって,たとえば緑の色が少し横切ったピクセルは薄緑色に,大きく横切ったピクセルはやや濃い緑色にという具合に線の周囲をぼかす。結果,ギザギザが目立たなくなるというのがSSAAの基本的な仕組みだ。

GeForce GTX 600
上のスライドで示した例だと,OGSSAA,RGSSAAのいずれでも,4つのサブピクセルの色は図の右側のように決定される
GeForce GTX 600
サブピクセルの色を平均化したものを,そのピクセルの色とする。これで周囲がぼけてジャギーが目立たなくなる仕組みだ

 SSAAでは確かにギザギザの目立たない画像が得られるものの,この処理を行うというのは,たとえば4x SSAAでは元画像の4倍の解像度を扱うのに等しい。ご想像のとおり,非常に“重い”のが大きな欠点となる。

SSAAのメリットとデメリット
GeForce GTX 600

 そこで,SSAAを「3Dグラフィックス向きに改良したもの」(竹重氏)が,多くの読者におなじみのMultiSample Anti-Aliasing(MultiSampling〜ともいう。以下,MSAA)である。PCゲームのグラフィックスオプションで,とくに説明なくAAと書かれていた場合,たいていはこのMSAAを指す。

 MSAAでは,3Dグラフィックスの描画ならではの「オブジェクトの奥行き情報」を使うのが大きな特徴だ。
 3Dのグラフィックスというのは,大雑把に言うと「オブジェクトを構成するポリゴンの奥行きの情報(=深度)からオブジェクトの表面の色(=陰影)を計算(=シェーディング)して2次元のディスプレイ画像に落とし込む」作業の結果だ。ちなみに,この一連の処理でポリゴンのデータを2次元の画像に落とし込むことを「レンダリング」という。

 MSAAにおいて,シェーディング自体はピクセル解像度で行われるが,同時に,ピクセルを描画する“タネ”となった深度を複数個サンプリングして,ピクセルを構成する色が計算される。4x MSAAならば,ピクセル1つに対してサブピクセルの深度をバッファから4つ取ってくるわけだ。
 その操作で,「サブピクセルの1つは背景色,残り3つはオブジェクト」などといった決定を行える。そこで,背景色とオブジェクトの色を平均化してピクセルの色を決めるということを行うのである。

このスライドは4x MSAAの例。ピクセルを構成する4つのサブピクセルそれぞれの奥行き情報を取ってくる
GeForce GTX 600
上のスライドの続き(左)。奥行き情報から,「1つのサブピクセルは背景の色,残る3つはオブジェクトの色」だと分かるので,サブピクセルの色を平均化(≒ブレンド)して,最終的なピクセルの色を決める(右)
GeForce GTX 600 GeForce GTX 600

 ピクセルの色を決定するため,3Dグラフィックスならではの奥行き情報を使うというのがMSAAの大きな特徴だ。しかも,シェーディング自体はピクセル解像度で行えばいいので,SSAAと比べても処理の負荷は低い。背景の前にポリゴンで描かれたオブジェクトがあるような画像において,ポリゴンの輪郭にあるギザギザはMSAAで抑えられる。
 ただ,MSAAには欠点もある。最大のものは,「奥行き情報がなく,深度差がないようなところでは機能しない」点だ。ポリゴンにテクスチャが貼られ,テクスチャに斜めの先が描かれている場合を考えてほしい。ポリゴンの表面において,サブピクセルの奥行き情報はほぼ同じなので(※厳密にいえばカメラに対して斜めになっていればごくわずかに深さは異なるが,ピクセル単位でしかないので,ズレはないに等しい),サブピクセルの平均化を行っても色の平均化(≒ブレンド)は生じない。つまり,テクスチャには効果がないのである。

MSAAのメリットとデメリット
GeForce GTX 600


NVIDIAが提案するFXAAとTXAA


 MSAAだとギザギザ感を取りきれないというのは,読者も経験的に知っているのではなかろうか。その大きな理由の1つが「(テクスチャなど)奥行きのない部分では奥行きテストを行えないため,AAを適用できない」ことにあるというのは前段で紹介したとおりだが,そこをうまく処理可能で,なおかつ負荷の低い手法としてNVIDIAが提案してきたのがFast Approximate Anti-Aliasing(以下,FXAA)だ。FXAAは非常に“軽い”ため,PCゲームのみならず,PlayStation 3やXbox 360などのゲーム機でも積極的に採用される,人気のAA技法に成長した。

 FXAAの手法は極めてシンプルなもので,「ピクセル色を周囲と比較して輝度差を調べ,輝度差があるピクセルの色は周囲と混ぜ合わせる」というものになっている。
 たとえば,背景とオブジェクトには大きな輝度差があるとしよう。このとき,あるピクセルで周囲との輝度の差を調べ,輝度の差があれば,オブジェクトの縁の部分がピクセルに乗っている可能性があると判断できる。ピクセルの輝度の差(=輝度差の大きいピクセルのエッジ)をとっていくことで,オブジェクトの縁(へり)を推定できるわけだ。
 そしてこの「推定できた縁」に沿って,「縁が横切る比率」に基づいてピクセルの色を混ぜ,それによって輪郭をぼかそうというのがFXAAの基本的な考え方になる。

ピクセルの周囲との輝度の差をとってピクセルのエッジ(黒い線)を検出すると,オブジェクトの縁を推定できる(赤い線)。その推定された縁が横切る比率に基づいて周囲と色をブレンドしていくと,輪郭がぼかされ,ギザギザ感が目立たなくなる。これがFXAAの基本的な概念だ
GeForce GTX 600

 FXAAではサブピクセルを使わずに済むのが利点だ。要は,2Dレベルの画像処理で,ギザギザ感を低減できる。また,輝度の差があればブレンドが行われるので,テクスチャに描かれた線のようなものに対しても有効に機能する。

上下段とも左から順にAA無効,4x MSAA,FXAA。それぞれのサムネイルは,いずれも同じスライドから,上段は奥の壁,下段は照準周辺をピックアップしているが,奥の壁は4x MSAAでギザギザを取り切れる一方,テクスチャの貼られた照準周辺は取り切れない。それがFXAAでは照準部分もギザギザ感が目立たなくなっている
※いずれもサムネイルをクリックするとスライド全体を表示します
GeForce GTX 600 GeForce GTX 600 GeForce GTX 600
GeForce GTX 600 GeForce GTX 600 GeForce GTX 600

 実際のゲームではポストエフェクトとしてFXAA処理が行われるのだが「FXAAのシェーダコードはかなり長い」ものの「レイテンシは0.1msやその程度で済む」と竹重氏は述べていた。輪郭を検出して色のブレンドを行う処理は相応に複雑だが,MSAAで必須の「深度が格納されているバッファ(=Zバッファ)を参照する」作業が不要で,かつ,現在のGPUはシェーダコード――より具体的に言えばピクセルシェーダのコード――を高速に実行できるため,FXAAのレイテンシは極めて低いのだろう。つまり,GPUで長いシェーダコードを高速に実行できるようになったからこそ可能になったAA技法と述べていいかもしれない。

 なおFXAAは,動きがあるシーンでは効果が落ちたり,適用されていないように見えることがあるが,竹重氏によると「動きがあるシーンではブラーがかかり,輝度の差がなくなるため,そう見える可能性がある」とのことだった。また,「動くシーンではFXAAの効果が薄くなるので,ゲーム側でFXAAを意図的に切っている可能性もある」という。
 レイテンシが小さいとはいえ,FXAAの負荷は決してゼロではない。そこで,描画速度を優先し,ゲーム側で意図的にFXAAを無効化しているケースもあるというわけだ。

 ちなみに,GeForceシリーズだとNVIDIAコントロールパネルでFXAAを強制適用できるが,この場合はどのようなシーンでもFXAAが強制的に使われるため,ゲーム側でFXAAをオンにした場合と結果が異なる可能性はあると竹重氏は述べていた。

TXAAの位置づけ。8x MSAAを超える画質を,2x MSAA相当の負荷で実現できるとされる。4x MSAA相当の負荷を許容できるなら8x MSAAを大きく超える画質を実現可能とのことだ
GeForce GTX 600
 一方,最近になってNVIDIAが提案している新たな技法にTXAAがある。TXAAのTはもともとはTemporal(時間的な)の略だったそうだが,現在では固有名詞のように使われているようで,何かの略というわけではないらしい。
 そんなTXAAを竹重氏は「MSAAの問題点を解消する技術」と位置づけている。ここでいうMSAAの問題点とは,先ほど挙げた「奥行きのない部分では奥行きテストを行えないため,AAを適用できない」とは別の2つだ。

 順に見ていこう。1つめは,「ピクセルを縁が横切ったときしかAAがかからない」というものになる。
 MSAAはピクセル単位で色のブレンドを行っているので,ピクセルにポリゴンの縁がピッタリと載った場合は,すべてのサブピクセルの色が同じになり,周囲の色とのブレンドが行われない。これは「静止画なら問題になることはほとんどないが,エッジが動き続けるゲームグラフィックスでは問題になる」(竹重氏)。

 エッジが斜めに動き続けるとき,ピクセル上では輪郭がぴったり載ったり横切ったりと変化するが,そのたびに色がブレンドされたりされなかったりを繰り返すと,見た目には輪郭の周辺がちらちらする現象,すなわちクローリーのような減少を引き起こすことになる。竹重氏は「これが不快な経験として(エンドユーザーに)伝わってくる」と述べていた。
 このような現象が起こるのは,MSAAがピクセル単位で色のブレンドを行なっているためだ。この点,TXAAでは「ピクセルを超えたより広い範囲から色をサンプリングして色のブレンドを行う」(竹重氏)ため,MSAAのような現象が抑えられるのだという。

MSAAはピクセル単位で色を混ぜているため,隣合うピクセルに大きな輝度の差があると,ジャギーやクローリーといったものが残ると竹重氏。その点,TXAAではピクセルの範囲を超えてサンプリンすぐするため,MSAAに見られる欠点が抑えられるとしていた
GeForce GTX 600

 竹重氏の挙げるMSAAの問題,もう1つは「HDRレンダリングに対応しづらい」点だ。少々込み入った話になるのだが,前提として,SDR(Standard Dynamic Range)では色――より正確に言うと輝度だが――の計算にガンマカーブを用いることがあるという。ディスプレイ製品において,信号の強度と輝度はリニアな対応関係にあるわけではないので,ガンマ補正をかけて明るさが正しく見えるように補正を行うが,それに用いられるのがガンマカーブだ。

 そして,3DグラフィックスのSDRレンダリングでは,内部の計算にそのガンマカーブが用いられているのだが,竹重氏によれば「それが色のブレンドには偶然ではあるが適している」とのことだ。
 たとえばMSAAで色をブレンドした結果,輝度が50%になったとすると,それにガンマが適用され実際の輝度は20%ほどになる。「人間がグレー(※筆者注:中間の明るさ)と感じるのは16%とか18%とかその程度」(竹重氏)なので,ちょうど人間の感覚と計算結果が合うわけだ。

 一方,HDR(High Dynamic Range)レンダリングでは取れる輝度の幅が広くなるため,物理的に正しい計算を行う必要がある。竹重氏の言葉を借りれば「画面全体のエネルギーを変えないよう計算を行う必要がある」ため,RGBをリニアで計算しなければならない。すると,50%は50%として表示されるようになるので,中間色として見せるつもりだったところが中間色として見えなくなる。
 竹重氏はこの点について,「解決するには,ガウス関数のようなフィルタを使って周囲のピクセルと色をブレンドする必要がある」と述べていた。TXAAでは,平均化処理をピクセルを超えた範囲から色を取って行う特徴があるため,HDRレンダリングでも上記のような問題は起きないとのことだ。

SDRレンダリングでは内部的に輝度の計算にガンマカーブ(右のグラフにおける曲線)が用いられており,それが偶然にもMSAAにおける色の計算結果と人間の視覚がフィットする形になっているそうだ。それに対してHDRレンダリングでは,RGBをリニア(右のグラフ直線)で計算するため,そのフィット感が得られなくなる。これを解決するには,ガウス曲線(左のグラフ)のようなフィルタを使い,広い範囲から色をサンプリングする必要があって,実際,TXAAではそれを行っているという
GeForce GTX 600

4x MSAAでHDRレンダリングを行うと,オブジェクトと背景との輝度差が大きい部分ではギザギザ感が目立つ(左)。これがTXAAだと「完璧に取り切れた」とまでは言えないものの,ギザギザ感はかなり低減している(右)
※いずれもサムネイルをクリックするとスライド全体を表示します
GeForce GTX 600 GeForce GTX 600

 以上がMSAAに対するTXAAのメリットだが,TXAAには加えて「前フレームの結果を投影することによって時間軸上のエイリアシングを低減する」という大きな特徴があるとも竹重氏は述べていた。
 1つ前のフレームのピクセルを現在のフレームにリプロジェクション(再投影)して色の平均化を行うということのようだ。「3DCGではモーションベクタを描くことができる」(竹重氏)ので,この種の処理はビデオよりもやりやすいことは想像がつくが,それでもかなり重い処理になりそうな気もする。

 いずれにしても,TXAAではピクセル境界を超えて色をサンプリングし,さらに前フレームを参照して色の平均化を行うことで,たとえば縁が動いてもギザギザ感が目立ちにくいということのようである。

 なお,FXAAは対応タイトルではなくてもNVIDIAコントロールパネルでFXAAを選択すれば利用できたが,TXAAは対応タイトルでしか利用できない,とのことである。

 TXAAを利用できるタイトルは,これまで国内展開されていないMMORPG「Secret World」くらいしかなく,いま一つ知名度が上がってこなかったが,11月22日にPC日本語版の販売が始まった「Call of Duty: Black Ops 2」と,26日付けでPC日本語版の国内発売が明らかになった「Assassin's Creed III」というビッグタイトルで採用されているため,状況も変わってくるのではなかろうか。

 下に示したスクリーンショットは,いずれもCall of Duty: Black Ops 2のものだ。サムネイルは一部をクローズアップしたもので,サムネイルをクリックすると拡大画像を表示するようにしてある。

GeForce GTX 600 GeForce GTX 600
画面中央の柵に注目。柵の枠は光を反射していて非常に輝度が高い一方,填め込まれたガラスの奥は薄暗くなっていて輝度差が大きいため,MSAAではギザギザ感を取り切れないが(左),TXAAでは抑えられている(右)
GeForce GTX 600 GeForce GTX 600
MSAAではフォグがある部分にアンチエイリアスがかからない。竹重氏は推測と断りつつ「奥のフォグは半透明オブジェクトとして描かれている。半透明オブジェクトは重いので,MSAAでないバッファで描画されたものをコンポジットされているのではないか」と述べていたが,MSAAではフォグのかかった輪郭にAAが適用されない一方,TXAAにはかかっている
GeForce GTX 600 GeForce GTX 600
蔦の絡まった網。ここにはテクスチャが使われているため,MSAAではAAが機能していないが、TXAAでは機能する。「これは,TXAAがピクセルを超えた範囲からサンプリングを行っているからだ」と竹重氏は説明していた

 またNVIDIAは,Assassin's Creed IIIにおけるTXAA(やテッセレーション)の有効性を訴えるムービーも公開しているので,そちらは以下のとおり示しておきたい。


 なお,TXAAは現状だとKepler世代のGPUでのみ利用可能だとのこと。その理由を竹重氏は「広い範囲のサブサンプルを拾うことになるが,それをリーズナブルに行うにはKeplerが必要だから」と説明していた。さらに,前フレームのテクスチャを拾う必要があり,その分だけグラフィックスメモリの帯域幅が必要になるということもあるようだ。

 ただ,そもそもNVIDIAがTXAAの原型を提案したのはDirectX 10世代のときに遡るので,原理的には前世代のGPUでも不可能ではないものと思われる。竹重氏も「前の世代のサポートは検討中」と語っていたので,現時点では技術的な理由というより,Kepler世代のGPUをアピールするための要素としてTXAAが使われているということがあるようだ。

 筆者的には,ゲーム機での採用実績も豊富なFXAAがいいソリューションかなと感じている。FXAAは対応タイトルでなくても利用でき,フレームレートに対するペナルティもごくわずかだ。アクション系のゲームでは見た目の綺麗さよりフレームレートを優先したいことが多いので,フレームレートへの影響を少なく,それなりの品質が得られるFXAAで十分だろうということがある。

 もっともTXAAも,「2x MSAAと同程度の負荷で8x MSAA以上の画質が得られる」,“軽い”AA技法だというのがNVIDIAの主張だ。TXAAに対応しているゲームであればMSAAよりもTXAAを使うべし,ということにはなるのだろう。現状ではKepler世代でしかサポートされないほか,対応タイトルもまだ多くはない難点はあるものの,これから普及してくる可能性はあるだろう。

セッションの最後には,11月26日13時から始まる「やっぱりゲームはGeForce GTX 2012キャンペーン」が告知された。スライドに挙げられているメーカーのNVIDIA GPU搭載ゲーマー向けPCを購入するとNVIDIA特製バックパックがもらえるという
GeForce GTX 600
PC日本語版Assassin's Creed IIIの発売に合わせ,同タイトルとコラボレートした製品ボックスのGeForce搭載製品がASUSTeK Computerと,GIGA-BYTE TECHNOLOGY,ZOTAC Internatilanから発売になる。推奨PCも11月26日から販売が始まるとのこと(左)。Call of Duty: Black Ops 2のPC日本語版から推奨を受けたPCも登場するという(右)
GeForce GTX 600 GeForce GTX 600

やっぱりゲームはGeForce GTX 2012キャンペーン 告知ページ

PC日本語版Assassin's Creed III コラボ製品 告知ページ

PC日本語版Call of Duty: Black Ops 2 コラボPC 告知ページ

  • 関連タイトル:

    GeForce GTX 600

  • この記事のURL:
line
4Gamer.net最新情報
トピックス
スペシャルコンテンツ
注目記事ランキング
集計:08月16日〜08月17日
タイトル評価ランキング
78
ブラウンダスト (iPhone)
77
OCTOPATH TRAVELER (Nintendo Switch)
65
Ar:pieL (PC)
63
2018年02月〜2018年08月