連載
西川善司の3DGE:GeForce GTX 980に搭載された新機能「DSR」「MFAA」とは何か
今回は,GM204コアを採用する「GeForce GTX 980」「GeForce GTX 970」(以下順に,GTX 980,GTX 970)の発表時に紹介された新機能から,「Dynamic Super Resolution」(ダイナミックスーパーレゾルーション,以下 DSR)と「Multi Frame Anti-Aliasing」(マルチフレームアンチエイリアシング,以下 MFAA)について細かく解説していきたいと思う。
ディスプレイ解像度を超えた解像度でレンダリングしてダウンサンプリングするDSR
NVIDIAが2014年9月に米モントレー市で実施した技術説明会で,何よりも先に紹介されたのがDSRだった。
PlayStation 3(以下,PS3)やXbox 360世代における,マルチプラットフォーム対応タイトルのPC版は,ハイエンドクラスのGPUで動作させると,1920×1080ドット解像度を指定し,ゲーム側に用意されるグラフィックス設定をすべて最も高い状態にしても,もの足りないくらい負荷が低く,結果,フレームレートは60fpsを超えてしまうことが多かった。
「フルHD解像度で,可能な限りグラフィックス設定を上げて60fps張り付きの状態を維持できるなら,それでいいじゃない」と思うかもしれない。ただ,ゲーマーにとって,いま最も一般的な解像度を前にしたとき,GPU性能が有り余っているなら,その余力を使って,もう少し映像品質を引き上げてくれたほうが嬉しいのも確かだろう。
そういう思いを受けてNVIDIAが提唱するのがDSRで,具体的には「ディスプレイ解像度よりも高い解像度でいったんレンダリングして,その結果をダウンサンプリングさせる」というGPU活用法となる。
ダウンサンプリングのことは「スーパーサンプリング」とも言うが,いずれにせよこれは,NVIDIAに買収される前の3dfxが「Full Screen Anti-Aliasing」(フルスクリーンアンチエイリアシング)として提唱していた手法と同じ考え方によるものだ。
では,DSRでどんな効果が得られるのかというと,主なメリットは2つある。
1つは,「芦」(あし)のような非常に細いポリゴン帯からなるモデルを的確に描画できるようになることだ。
現在のGPUが持つレンダリングシステムでは,ポリゴンがラスタライズされる(=ポリゴンがピクセルに分解される)とき,当該ポリゴンが「ピクセル化するかしないか」は,その判定ポイントである「サンプルポイント」とポリゴンが重なるかどうかに依存する。そして,細い草のモデルだと,細すぎてサンプルポイントと重ならないケースが出てくることがあるのだ。
この場合,実際の描画結果として,「細い草のモデルが,フレームごとに点線として描かれたり実線として描かれたりといった状況がランダムに繰り返され,ちらついて見える」という現象が引き起こされることになる。
細い草でなくても,3Dモデルの輪郭線では同様の現象が生じ,時間方向にピクセルが消失と出現を繰り返すして,ちらつきが出ることもある。
ちなみにこのちらつきは「ピクセルクローリング」(Pixel Crawling)や「ピクセルシマー」(Pixel Shimmer)と呼ばれることが多い。
DSRによるメリットの2つめは,時間方向に生じるちらつきの低減である。
現在のゲームグラフィックスでは,多ポリゴンモデルが遠方で描かれたとき,1ピクセルに複数のポリゴンが含まれ,かつ,それら複数のポリゴン面が異なる向きを向いているケースがけっこうな割合で生じる。そのとき,通常は最も手前のポリゴンが当該ピクセルに描画されるわけだが,複数のポリゴンがほぼ同じZ軸パラメータを持っている場合は,「カメラからの位置関係に応じてポリゴンの前後関係が変わり,ライティングによって生じるハイライトの出方がフレームごとに変わる」ケースも出てくる。
とくに,今日(こんにち)においては,ハイダイナミックレンジレンダリング(High Dynamic Range Rendering)や物理ベースレンダリング(Physically Based Rendering)の採用によって,強烈な高輝度ハイライトが出ることも多い。それだけに,ハイライトの出方がフレームごとに変わると,露骨にちらちらした点滅に見えてしまう場合があるのだ。
ところで「Super Resolution」といえば「超解像」という訳語があるわけだが,超解像とは,失われた解像度情報をアルゴリズムで推測・復元することをいう。それに対してDSRは,言ってしまえばただのスーパーサンプリングである。超解像ではないのではないか。
この質問を,DSRの担当者であるNVIDIAのTom Petersen(トム・ピーターソン)氏にぶつけてみたところ,返ってきた答えは「その指摘は正しい。実際のところ,ダイナミックでスーパーな解像度という意味で付けた名称だ」だった。
なお,DSRについては,NVIDIAのデモ担当者が「1つ問題がある」と話していたので,そのことも紹介しておこう。
結論から先に言うと,DSR機能自体に問題があるわけではない。あるのは,現状のゲームにおける4Kレンダリングのほうだ。
3Dグラフィックス自体は,どんなに解像度を上げてレンダリングしても,画面に対する3Dオブジェクトの大きさは一定で,その上がった解像度分だけ,情報量が増す。しかし,ゲージ類などの2Dグラフィックス部分は,ゲームシステム側で,その解像度に適したサイズのデータが用意されていないと,小さく表示されてしまうことがある。
同じ2Dグラフィックス表示でも,ポリゴンにテクスチャが貼られていたためなのか,残段数表示など,一部はDSRを利用しても適切な大きさに表示されているのだが,それ以外はかなり見にくい状況だ。
通常の1920×1080ドットでWar Thunderのゲーム画面を表示させたところ |
こちらがDSRによる疑似4K表示時。左下のレーダー表示や右下のマップ,左上の数値表示が小さくなってしまった |
NVIDIAのデモ担当者は「これは単純にゲーム側が4K表示を想定していなかったために起こる問題で,4K表示に対応すればDSR疑似4K表示時にも正しい表示になる」と述べていた。ただこれは逆に言うと,4K表示に対応していないゲームはDSR疑似4K表示をすることで遊びにくくなってしまうこともあり得るということだ。とくに昔のゲームほどそういうケースは生じやすくなると思われるので,この点はあらかじめ押さえておきたいポイントといえるだろう。
2x MSAA相当の負荷で4x MSAA相当の品質を実現するとされるMFAA
続いてはMFAAだ。
MFAAは,「マルチフレーム」「アンチエイリアシング」という名称からも分かるとおり,複数からなるフレームの情報を用いて行うアンチエイリアシング手法である。
MFAAの開発コンセプトは,Multi Sampled Anti-Aliasing(マルチサンプルアンチエイリアシング,以下 MSAA)よりも一段低いサンプル数で,一段上の品質を実現することにあったそうで,コストパフォーマンスの高いアンチエイリアシング技法として訴求される。
NVIDIAのアンチエイリアシング技法としては,Kepler世代の「GeForce GTX 680」の発表に合わせて導入された「Temporal approXimate Anti-Aliasing」(以下,TXAA)を覚えている人も多いだろう。TXAAについては当時の解説記事を参照してほしいが,深度バッファの参照や,前フレームと現在フレームとの間で生じるピクセル単位の移動ベクトル情報参照など,比較的,高度な実装が行われていた。
これに対し,MFAAはシンプルな実装なのがウリとなっている。MSAAと基本アルゴリズムは同じなのだ。
MSAAについての解説は筆者の連載バックナンバーを参照してほしいが,簡単に紹介しておくと,MSAAにおいて,ピクセルシェーダは描画解像度の1ピクセル単位で動作させる一方,深度バッファへの出力はサブピクセル解像度で行うことになる。たとえば4x MSAAなら,縦横2倍の4倍解像度で深度バッファへの出力の行うのだ。MSAAでは,実際のアンチエイリアシング処理を,この4倍解像度の深度バッファを基にして行う。
では,基本アルゴリズムがMSAAと同じMFAAはどうかというと,MFAAではアンチエイリアシング処理を行うためのサンプルポイントをMSAAよりも少なく取り,その代わり,サンプルポイントの位置をフレームごとにずらしていく工夫が導入されている。
たとえば4x MFAAの場合,1フレームあたりのサンプル数は2点のみだ。つまり,2x MSAA相当である。しかし,次のフレームでは,その2点あるサンプルポイントの位置をずらすのである。
では,「MFAAとは,ただフレームごとにサンプル位置を変えるだけのMSAAなのか」というと,ちょっと違う。
当該フレームの実質処理はたしかに,サンプル位置を変えただけのMSAAだが,最終的に画面へ出力するのは,保存しておいた1つ前のフレームのMSAA結果と合成した映像にするのだ。この合成処理にNVIDIAは「Temporal Synthesis Filter」(テンポラルシンセシスフィルタ,時間軸上で合成するフィルタ)という名前を与えている。
4x MSAAと4x MFAAを比較した場合,4x MFAAにおけるフレーム単位の処理は2x MSAA相当だ。そこに,MFAA特有の追加処理としてTemporal Synthesis Filterを行うわけだが,「この合成処理自体は,ほとんど無視できるレベルの処理負荷」(Petersen氏)。なので,NVIDIAの主張としては「4x MFAAは2x MSAAと同等の負荷で4x MSAAのアンチエイリアシング品質を実現する」というメッセージになる。
静止画に適用した場合は,確かに主張のとおりとなるだろう。しかし動画の場合,前フレームと現在のフレームとでは映像内のオブジェクトが動いてしまっている可能性が高く,そうそう理想どおりの結果にはならないような気がする。
その点を指摘すると,Petersen氏は「確かにそうだが,フレームレートが十分に高ければ,理想に近い結果が得られる」と答えていた。
映像が動いている場合,当該フレームで(アンチエイリアシングの処理系が)着目しているピクセルと,その同じ座標位置にある前フレームのピクセルとが,同じポリゴンを構成する同一ピクセルである保証はない。ただし,フレームレートが十分に高ければ,たとえ「同じポリゴンを構成する同一ピクセルでない」場合でも,「少なくとも近場のピクセルであることは間違いない」わけだ。なのでポジティブに考えれば,「サンプル位置を近場のピクセルにまで手を伸ばした」と見なせる。すなわち,誤差拡散の効果が期待できるというわけである。
アンチエイリアシングとは,乱暴に言えば「ポリゴン輪郭をボカしてごまかすこと」なので,その目的は少なくとも達成できているというのがMFAAのスタンスなのだ。
さらに,MFAAは「Alpha to Coverage」(アルファトゥカバレッジ)にも効くとPetersen氏は述べていた。
Alpha to Coverageは,かつてはOpenGLの機能として提供され,後にNVIDIAがGeForce 7000シリーズの発表と合わせて「Transparency Anti-Aliasing」(トランスペアレンシーアンチエイリアシング)としてリリースしたものである。最終的にはDirectX 10で標準仕様にも採用されたので,そちらで記憶している人もいるだろう。
MSAAが効く部分ではMFAAも有効になるので,Petersen氏の主張は,まあ,言われてみれば当たり前のことなのであった。
NVIDIA調べにはなるが,4x MSAAに対する4x MFAAのパフォーマンス比較が下図になる。ゲームタイトルにもよるが,4x MFAAは,およそ30%ほど4x MSAAよりもフレームレートが上がる結果となるとのこと。まあ,実質的にはほぼ2x MSAAのパフォーマンスということになるのだろうが。
DSRは“軽い”タイトルのために
MFAAは“重い”タイトルのために用意される
NVIDIAのメッセージは,DARK SOULS IIのような“軽い”タイトルでは,DSRによってさらに描画品質を向上させ,BF4のような“重い”タイトルではMFAAによって描画品質を維持しつつ性能を向上させることができるというものだ。タイトルごとにDSRとMFAAを使い分けることで,どんなタイトルでも,描画品質とフレームレートの向上を目指せる,というわけである。
NVIDIAのGeForce製品情報ページ
- 関連タイトル:
GeForce GTX 900
- この記事のURL: