2010-09-24

[]Digital Foundry Tech Analysis: Halo: Reach Digital Foundry Tech Analysis: Halo: Reach - Nao_uの日記 を含むブックマーク はてなブックマーク - Digital Foundry Tech Analysis: Halo: Reach - Nao_uの日記 Digital Foundry Tech Analysis: Halo: Reach - Nao_uの日記 のブックマークコメント

Halo:REACHアンチエイリアシング手法の話。カメラが動いている間はAAが消えるような挙動に見えたのでどうやってるんだろうと不思議に思ってたけど、どうも半ピクセルずらした前フレームと合成してるらしい。

動いてる敵や味方キャラを観察したり、カットシーンを注意して見ても残像っぽいものがほとんど認識できなかったのでなにか違う方法で動的にAAのレベルを変えてるのかな、と思ったけどどうやらそうではなかったみたい。木の枝や葉っぱの先まで綺麗に見えてて、解像度が高く感じられた。

映像表現も全般にレベルが高く、HDRは高輝度の色が滲んだりせずに自然に見えるし、爆発や閃光などのエフェクトもちゃんとHDR対応してるっぽい。ほとんどのマテリアルに環境マップから拾った異方性のスペキュラが使われてて、テクスチャの解像度も十分高い。負荷の高いシーンでもティアリングは出てないように見えた。ほんとよくできてる。

最初の方で雨が降ってるシーンでは、カメラ手前20mくらいの範囲に降ってくる雨粒のラインが、ちゃんと地面や屋根に当たり判定を取った上で着弾エフェクトが乗るマテリアルに波紋を表示しているようだった。かなりの数が出てたので馬鹿正直に当たり判定をとったら酷いことになりそう。どうやったらできそうかな。それともあのくらいだったら普通にこなせるくらいにライン当たりが高速にできるんだろうか。

あと、あまりちゃんと考えたことがなかったけど、2xのMSAAとTemporal AAで静止時の結果に違いがあるのかどうかが気になってきた。QUINCUNXで取ってこなければ1フレームで2サンプル描くか、2フレームに分散するかの違いだけで同じような結果になるのかな?

@Nao_u_ 木の葉などのAlphaTest物はMSAAだと駄目だけど、SSAAだとアンチがかかる違いがあるように、物によってはSSAAに近いTemporal AAとMSAAでも描画結果の違いがあるような気がします。

  • @yakiimo02_2go なるほど、確かにTemporal AAはMSAAと違ってテクスチャフェッチが絡む部分では実質的に解像度が上がったかのような挙動になりますよね。静止時であれば、壁や床面などのエッジでない部分にも効果があるのかも。納得です。

Temporal AAを試してみた Temporal AAを試してみた - Nao_uの日記 を含むブックマーク はてなブックマーク - Temporal AAを試してみた - Nao_uの日記 Temporal AAを試してみた - Nao_uの日記 のブックマークコメント

  • エッジ部分は少し綺麗になったけれど、それ以外の壁や床ではほとんど変化が認識できなかった。よく考えてみるとエッジ・αテスト部分以外の場所では2サンプルにほとんど同じ色が割り当てられてブレンドでぼかされるので、結果として2倍動いてるシェーダー処理の効果は消えて、1サンプルしか取らないときと結果がほとんど変わらなくなるっぽい。

f:id:Nao_u:20100924124010j:image

f:id:Nao_u:20100924124011j:image

上:AAなし 下:AAあり

  • もしかしたら0.5ピクセルの差でも十分色が変わるような高解像度のテクスチャを使ってればまた違うのかもしれないけれど、今回のケースでは高密度のディティール法線マップが貼られたマテリアルをいろんな距離から眺めてみても違いはほとんど認識できなかった。MipLevelとかも絡んできそうなのでそんなに単純な話ではないのかも
  • 以前にモデルビューワ用に実装したときにもエッジ以外はほとんど変わらない印象だったので、背景と違ってポリゴン面積が狭いから認識しづらかったのかな?とか思ってたんだけど、とりあえずは大きな違いはみられないようだった。2xAAと違いが出そうなのはそれぞれのサンプルに大きく違う色が入ってくるαテスト部分くらいになるのかな


  • 60fpsで、カメラ固定の中で動いてる物体にTemporal AAをかけると、やっぱり残像が気になる。特に人が走って前を横切ったときなど、その物体だけ30fpsになったみたいなガクガク感が。最初から30fpsであればもともと残像が乗ってガクガクして見えるので、ちょっとブレるかな?くらいな印象。こっちは比較しないとわかりにくい
  • 30fpsで、待機モーションくらいの移動量であればほぼ残像は認識できないみたい。Haloで目の前で人が動いてるような場面でも、30fpsでモーションブラーがかかってれば最初からブレてるのでほとんど気にならなかった。カメラ移動と連動させてブレンド率を変えれば、比較的安価なAA手段としては便利なのかな

  • レースゲームみたいな一方向に走る場面だと、まっすぐ進んでるときはあまり気にならないけどハンドルを切ってカメラが横に回ると画面がぼやけて、せっかくの60fpsのヌルヌル感が消えてもったいない感じに。カメラの回転量に応じてブレンド率を変えたほうがよさそう。こちらも30fpsだとやや気になりにくい傾向が

f:id:Nao_u:20100926200649j:image

直進時

f:id:Nao_u:20100926200650j:image

旋回中

  • あとは「カメラ移動中にAAが消える」のをどれくらいの人が認識できるのかが知りたいところ。30fpsのゲームであればもともと残像やブラーでぶれるので気づきにくいし、止まってるときは綺麗に見える、ってだけでもだいぶ印象は違うのかな。TPSで使っても同様の結果が得られるのかも気になる。目の前でキャラが激しいアクションをしたときなどはかなり残像が目に付きそう。
  • 2xAAをかけてるところにさらにTemporal AAをかけるとどうなるんだろう。その場合、どの方向にどれだけずらすべきなのか。
  • そもそも60fpsならブレンドしなくても高速点滅が勝手に50%半透明に見えるから、いっそ描画位置をずらすだけで他には何もしない、って選択もアリかも。
追記

yakiimo02さんのTemporal AAを実装したスクリーンショットによると、やはり0.5ピクセル差でも大きく色の違うテクスチャが拾える場面では画質が向上する、とのこと。こちらのモデルはアルベドテクスチャがものすごく低解像度で、そこにタイリングされたノイズ法線マップを貼っているものだったために、違いが認識しづらい状態だったみたい。

Halo:Reachはテクスチャ密度も十分高そうだったので、なんとなく高解像度っぽく見えてたのはTemporal AAの効果もありそう、ということなのかな。

さらに追記(2010-10-01)

@yakiimo02_2go temporal AAですが、バグでtexture filteringが正しく設定されていなかったです( ̄Д ̄;; Filteringがaliasingを普通はとってくれるので、@Nao_u_ さんと同じようにテクスチャ内部の改善に関しては自分のシーンもないです。


  • texture filteringで遠距離のエリアシングが軽減されますが、一般的なフィルタ設定はデザイナの人から見ると「ボケすぎ」と認識されることも多いですよね。MipLevelにバイアスを入れられるような仕組みを作ると殆どの場合MipMapが効かない方向に調整される傾向がありました

  • アニソトロピックフィルタのレベルが4x程度では足りないというのもありますが、それだけの問題でもないようで、デフォルトのミップマップの効きは強すぎる、エリアシングが出てもいいから高解像度感が欲しい、という話になったことがありました

  • そういった場面では、負荷とのトレードオフになりますがミップマップを高解像度寄りに拾ってきた上でTempolal AAを使えば高解像度感がある状態でエリアシングが軽減できるので、効果があるかもしれないですね