フォト

Google AdSense

  • AdSense
無料ブログはココログ

« AMDのForward+について | トップページ | Unity:ShadowGunのサンプルレベル »

2012.03.21

MLAA vs. FXAA ~AMDのGDC 2012のUnreal Engineのセッションスライドから

※画像はクリックすると大きなサイズになります。

本日は、AMDのGDC 2012セッションを読みまくってるんですが、"Enhancing Graphics in Unreal Engine 3 Titles using New Code Submissions"がちょっと面白かったのでメモ。

AMDのGDCセッションスライド
http://developer.amd.com/documentation/presentations/Pages/default.aspx#GDC

スライド
http://developer.amd.com/gpu_assets/Enhancing%20Graphics%20in%20Unreal%20Engine%203%20Titles%20using%20New%20Code%20Submissions.ppsx

このセッションは、Unreal Engineに関与しているAMDの技術についての解説なのですが、内容的には、テセレーション、マルチモニタ、頂点シェーダベースのボケDoF、FSAA(フルシーンアンチエイリアシング)が取り上げられています。

今回は、その中でもFSAAのところが気になったので読んでました。

Unreal Engine 3では、FSAAとしてMLAAとFXAAの2種類が使えるようで、その手法の特徴と比較が行われてました。両方とも現行の家庭用機で使用できて流行っているんですが、イマイチどちらがいいのかわかってなかったのですが、読んでたらそれぞれの特徴と優位性がわかってきました。

IntelのMLAAのサンプル(CPU実装なので遅い)
http://software.intel.com/en-us/articles/vcsource-samples-morphological-antialiasing-mlaa/

FXAA 3.11
http://timothylottes.blogspot.jp/2011/07/fxaa-311-released.html

とりあえず、両者の特徴が書かれてるスライドを抜き出してみました。

・FXAA
Ue001
特徴
○シングルパスのポストエフェクト(シェーダ)で実現できる
○アンチエイリアス処理をかけるレンダーターゲット以外のレンダーターゲットはいらない(360はちょっとごにょごにょしないと行けないけどね)
×エッジの検出しすぎで非エッジ箇所もブラーがかかっちゃう
→画面がぼけた感じになりやすい

・MLAA
Ue002
×3パスのポストプロセス→パス数多い
×2つの追加レンダーターゲットテクスチャが必要
→1. エッジマスクを格納するテクスチャ
→2.エッジ長さを格納するテクスチャ
○エッジ部分を精度良くアンチエイリアス処理できる
○エッジ検出レベルをパラメータで制御できる
→パフォーマンス制御しやすい

なんか×の数では、MLAAの方が多いのですが内容的には

品質:MLAA > FXAA
速度や実装のしやすさ:FXAA > MLAA

となります。わりと話題になってるエッジ検出に関してのスライドがありました。

・エッジ検出の比較
Ue003

Ue004

おお、なんかMLAAに比べるとFXAAの方がエッジ部分の検出が多いですね。FXAAは、エッジの検出率が高いからアンチエイリアス処理がかかりすぎて全体的にボケ気味になるのはこのせいか~、なるほど。

・速度の話
ここからはAMDのスライドの話ではありませんが、速度比較してるサイトがありました。

FXAA vs. MLAA
http://www.hardocp.com/article/2011/07/18/nvidias_new_fxaa_antialiasing_technology/4

全体的にFXAAが速いですねぇ。いくつかのGPUで実験されてますが、30%以上速い感じですね。

・まとめ FXAAの品質は何と比較するべきか?
こうなるとFXAAはMLAAと比較すべきじゃないんでしょうねぇ。

FXAAはおそらく、MSAAと比較すべきなんでしょうねぇ。MSAA 2xよりも良い品質だけど、MSAA 4xが使えないときに高速にやりたいって場合に使うもんなんでしょうね。

MLAA・・・FXAAの品質に納得いかない場合。GPUに余裕がない場合に他のプロセッサで出来る。
FXAA・・・とにかく速度が欲しい場合でMLAA使えない場合。

って感じでしょうかねぇ。

Unreal Engineでは両方使えるようですが、上記の特徴を理解しながら使えって感じでしょうね(AMDはMLAA押しですが、NVIDIAはFXAA押し)。

« AMDのForward+について | トップページ | Unity:ShadowGunのサンプルレベル »

Programming」カテゴリの記事

画像付き」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« AMDのForward+について | トップページ | Unity:ShadowGunのサンプルレベル »