3Dゲームファンのためのグラフィックス講座
西川善司の3Dゲームファンのための「Panta Rhei」講座(前編)
(2013/7/31 00:00)
「Panta Rhei」のレンダリングパイプラインは「TBDR×FORWARD+」のハイブリッドタイプ
「Panta Rhei」ではレンダリングパイプラインも一新されている。それも、DirectX 11世代のGPUを活用できるということで、非常に先進的な手法に切り換えられている。
具体的には、基本レンダリングメソッドとしては「Tile Based Deferred Rendering」(TBDR)法を採用しつつも、半透明や特殊マテリアルについては「Forward+ Rendering」法を組み合わせるようなハイブリッド型となっているのだ。
Deferred Renderingでは、最初に複雑なシェーダーは動かさずに(いわば素ポリゴンのような状態で)シーンのジオメトリをレンダリングしてしまい、その際に後段のマテリアル表現を行なうシェーダーを動かすためのパラメータ群(法線情報や拡散反射情報、鏡面反射情報など)をG-Bufferと呼ばれる中間バッファへと出力する。そのシーンを視点から見たフレームで切り出し、ピクセル単位で最終レンダリングに必要な付随情報だけを先だししてしまうイメージだ。
一般的なレンダリング手法ではピクセルシェーダーに動的光源を引数的に入力するイメージでシェーディング処理が行なわれるが、Deferred Renderingにおけるシェーディング処理は、動的光源を画面に描画していくようなイメージで執り行なわれる。シェーダープログラムに持ち込める引数には最大数があるので通常のレンダリングメソッドでは動的光源の数のが制約されるが、Deferred Renderingではこうした制約を受けずに済むのである。なお、Deferred Rendering(Deferred Shading)に関するより詳細な情報は、本連載「KILLZONE2」編の方を参照して欲しい。
そして、「Panta Rhei」が採用したTBDRは、Deferred Rendering法をさらに現代風に改良したものになる。TBDRも基本的な考え方はDeferred Rendringと同じだが、これを実践する際に、画面を適当なサイズの四角形領域(タイル)に分割してしまい「各タイル単位にどの光源がライティングに関わってくるのか」という判定をGPGPUを駆使して行なってしまう(ライトカリング)。判定の結果は、各タイルごとにどの光源がライティング/シェーディングに関わってくるかの可否リストに相当するものとなる。
実際のDeferred Rendering時には、この可否リストを参照しつつ、各タイルに影響してくる動的光源だけを描画していく。簡潔に言えば、TBDRはDeferred Renderingのハイパフォーマンス版ということができる。また、各タイル毎の光源可否リストの生成は同時並列でGPGPUで処理してしまうために極めて高速に行なわれる。
三嶋氏:ComputeShader(GPGPU)によるライトカリング処理がとても高速ですし、全体としてもTBDRはとてもハイパフォーマンスなものに仕上がりました。半透明オブジェクトをレンダリングする際や、特殊マテリアルを表現するために特殊なBRDF(Bidirectional Reflectance Distribution Function:双方向反射率分布関数)を用いたいときにはさらにForward+ Renderingを利用できるようにしています。Forward+も、タイルベースで行なわれるメソッドですが、ライトカリング情報はTBDRで作成済みですからこれを流用するんです。いやぁ、シェーダーコードにこんなに動的分岐命令多用していいのかって言うくらい酷使していますが、さすがDirectX 11世代の近代GPUだけあってパフォーマンスは上々でした(笑)
ライティングに際して、ローカルライトに関しては、従来の点光源ではなく、球面光源を用い、距離の二乗で減衰する二乗減衰を採用している。従来の点光源を用いた方式では、HDRレンダリング時などにおいて鏡面反射強度の高い箇所の高輝度部分でエリアシングが発生しがちだった。新方式では、そうしたアーティファクトを回避できるだけでなく、その方が物理的にも正しくなるメリットもある。
基本的なマテリアル表現に関しては、拡販反射項、鏡面反射項、法線、粗さ(ラフネス)項といったパラメータで与える方式としている。いわゆる物理ベースレンダリングの手法に切り換えた格好だ。
三嶋氏:「粗さ」は、拡散反射にも効いてくるパラメータです。というのも「Panta Rhei」では拡散反射においても、従来のLambert法ではなく、Oren-Nayar法を採用しているためです。また、シェーダーの組み合わせによっては、法線マップのMIPレベルが低くなった場合に「粗さ」マップに委譲できる仕組みも実装しました。BRDFについては、拡散反射はOren-Nayar法、鏡面反射はBlinn-Phong法の改良版を採用しています。
BRDFとは、光がどう反射するかを光学現象に沿った考え方で一般化したもの。Deferred Renderingでのマテリアル表現は、G-Bufferに出力されたレンダリングに必要な基本パラメータ群のみを用いて実践することになるが、それだけではすまない異方性反射をおこなうものなど、半透明マテリアルを含め、イレギュラーなものについてはForward+でレンダリングすことになるのだ。
Oren-Nayar法は、微細なザラザラ面が存在するマテリアルを取り扱う拡散反射モデルで、視線方向と光源方向が近ければ近いほど明るく、離れていれば離れているほど暗くなるような特性が再現される。つまり、拡散反射モデルでありながらも、視線に依存したハイライトが生成される仕組みとなる。