SRAA: Subpixel Reconstruction Antialiasing for Deferred Shading
GDC 11: 新技術SRAAを採用した『Battlefield 3』最新スクリーンショット - Game*Spark
New Battlefield 3 Screenshot and Frostbite 2 demostration « PlayStation Informer
NVIDIA Research
同期のネットワーク野郎から教えてもらいました。
って畑違いに先越されてる俺って・・・・・・・
ちょっと前にMLAAが盛り上がりましたが、これが最近騒がれてるみたいね。(本当に無知でごめんなさい。)
方法はgameとか3Dに特化してて、もはや常識となりつつあるディファードレンダリングに適した形。というかこれ、ディファード系のエイリアシングのトレンドになるんじゃないか?てかもうなってる?
どんなもの?
思考プロセスを予測して書くとこんな感じ。
- ディファードレンダリングでは、スクリーンスペース(見える部分)をデプス、ノーマル、アルベドなどを巨大なバッファ(G-buf)に保存する。次にその一つ一つのピクセルをG-bufの情報をもとにレンダリングします。参考はやはりKILLZONE。西川善司の3Dゲームファンのための「KILLZONE 2」グラフィックス講座(前編) -GAME Watch
- はじめのG-buf作成は一つの一つのポリゴンの深度とか法線の情報を垂れ流すだけなので、細かいシェーディング計算がいらん。めちゃ軽い。だけどその分、そのあとの全ピクセルに複雑なシェーディングをするので、そっちがなかなかに重たい。だから、ディファード=遅延=シェーディングを最後に後回し ということ。
- これに更にエイリアシングかけようとマルチサンプリングすると、サブピクセル(1ピクセルを更に分割したもの)も計算するので、数倍の計算量となり重たくなってしまう。つまり、ことディファードに関しては、複雑なシェーディングとアンチエイリアシングはトレードオフの関係になっている。シェーディングを取るか。ピクセル数を取るか。
- というわけで、今回の論文のキモ1:ディファードのG-bufつくるときは軽いんだから、数倍の解像度で深度と法線をレンダリング。後半のシェーディングは重たいからサブピクセルではなく普通の解像度のピクセル分だけレンダリング。もちろんこのシェーディングはエイリアシングだらけ。
- 論文のキモ2:この画像解像度でエイリアシングなシェーディング結果画像を、上で保存しておいた高解像度のデプスとノーマルを使ってアンチエイリアシングしてやろう。
- これで複雑なシェーディングもエイリアシングもどちらもできちまう!折半案!
という感じですかね。
間を取りつつもどっちつかずではないというまさに理想の上司みたいな手法。
アルゴリズム
ということで、具体的な実装はどんなんか。上の論文を読んでみました。
パルスのファルシのルシをコクーンからパージするよりも遥かにシンプルで感激しました。
やり方は、サブピクセルのシェーディング情報を、シェーディングされたピクセルから復元(Reconstruction)します。そのためにクロスバイラテラルフィルタを用いています。フィルタの重みとして、法線とデプスを用いておるのです。
眠いのでまた今度。
これは実装してみよー。