西川善司の3DGE:GTX 980 Ti用として披露されたDX12ベースの新作デモ「MECH Ti」,その技術に迫る

2015年06月09日 11:23
NVIDIAが,COMPUTEX TAIPEI 2015に合わせる形で,「GM200」コア採用の新型GPU「GeFoce GTX 980 Ti」(以下,GTX 980 Ti)を発表したのは記憶に新しいところだろう。
 NVIDIAのデモ開発チームは,そんなGTX 980 Tiのリリースに合わせて,Windows 10&DirectX 12対応の新作技術デモ「MECH Ti」(MECH Ti Feature Demo)を開発し,COMPUTEX TAIPEI 2015の会場近くにあるホテル「Grand Hyatt Taipei」内にある同社プライベートブースにおいて披露していた。
 
 本稿では,このMECH Tiに組み込まれた要素技術を細かく見てみたいと思うが,まずは,下のビデオを見てもらいたい。これは,展示されていたGTX 980 Ti搭載機からHDMI出力された映像を,ビデオキャプチャデバイスで録画したものである。
 
MECH Tiデモ(音声なし)
Clik to PlayClik to Play
 
実行にはWindows 10環境が必須だ
 
DX12の「Conservative Rasterizer」を活用する「Ray Traced Shadows」
 
 MECH Tiの影生成には「Ray Traced Shadows」(※リンクをクリックするとpdfファイルのダウンロードが始まります)と呼ばれる技術が採用されている。開発を担当したのはNVIDIAのJon Story氏(Senior Developer Technology Engineer)だ。
 
Ray Traced Shadowsの効果。投射距離の短いところでは鋭い影に,投射距離が長いところではぼやけた影になっている
西川善司の3DGE:GTX 980 Ti用として披露されたDX12ベースの新作デモ「MECH Ti」,その技術に迫る
 
 ご存じの人も多いと思うが,今日(こんにち)のGPUにおいて,他者からの遮蔽によって生じる「影」は,自動的には得られない。そのため,影を描画するためには,別途,影を描画する処理系を実装して走らせなける必要がある。
 
西川善司の3DGE:GTX 980 Ti用として披露されたDX12ベースの新作デモ「MECH Ti」,その技術に迫る
デプスシャドウ技法では,シャドウマップ解像度に依存したジャギーが描画した影に出てしまう
西川善司の3DGE:GTX 980 Ti用として披露されたDX12ベースの新作デモ「MECH Ti」,その技術に迫る
解像度が十分に高くできれば鋭い輪郭の影生成を行える一方,広いシーンで品質を保つには,巨大なサイズのテクスチャでシャドウマップを生成する必要が出てくる
 そんなわけで,ゲームグラフィックス(=リアルタイムCG)における影生成にはなかなかの歴史があって,10年前には「Stencil Shadow Volume」(ステンシルシャドウボリューム,以下カタカナ表記)と「Depth Shadow」(デプスシャドウ,Shadow Mapsとも。以下カタカナ表記)との壮絶な戦い(?)があった。そのときは,結果的には後者が多くのゲームで採用されることになって落ち着いた経緯がある。
 ただ,デプスシャドウ技法では,影生成元となる光源から,シーン内の全オブジェクト(=遮蔽物)までの距離をテクスチャに描画して,遮蔽物までの距離の分布データをシャドウマップ(Shadow Maps)として最初に生成するのだが,影描画にあたっては,このシャドウマップ解像度(≒テクスチャ解像度)に依存したジャギーが出てしまう弊害と闘わなければならなかった。
 
 ステンシルシャドウボリュームではこのジャギーが出ないというのが優位点だったのだが,デプスシャドウ技法が勝っ(てしまっ)た結果として,「ジャギーを淡くボカして,ジャギー感の露呈をごまかす」というのが,ゲームデベロッパにおける定番のやり方になっている。
 
影の輪郭を一様にボカす。デプスシャドウ技法における,ジャギーを低減させる常套手段がこれだ
西川善司の3DGE:GTX 980 Ti用として披露されたDX12ベースの新作デモ「MECH Ti」,その技術に迫る 西川善司の3DGE:GTX 980 Ti用として披露されたDX12ベースの新作デモ「MECH Ti」,その技術に迫る
 
 それに対して,新開発のRay Traced Shadowsは,そうしたジャギーを低減しつつシャープな影生成を行えるようになっており,かつ,必要であれば影の投射距離に比例したボケ具合を実現するような,リアルなソフトシャドウ表現も行えるのが特徴だ。
 
 Ray Traced Shadowsが持つアルゴリズムの概念自体は,デプスシャドウ技法のパイプラインと似て非なるものだ。
 まず,影生成元となる光源からシーン全体を見下ろして,シーン内のオブジェクト(遮蔽物)までの距離をテクスチャにレンダリングする。デプスシャドウマップ技法だと,ここで,ピクセル(=テクセル)に分解されたシーン内のオブジェクトのシルエットが,光源までの距離情報と共に書き出されるのだが,Ray Traced Shadowsでは,ピクセルに分解した情報を書き出すのではなく,その遮蔽オブジェクトを構成するのポリゴンの情報を書き出すのである。
 
西川善司の3DGE:GTX 980 Ti用として披露されたDX12ベースの新作デモ「MECH Ti」,その技術に迫る
Deep Primitive Mapとは,その3Dモデルを構成するポリゴンのうち,光源に対して向いているもの(=光源から光を遮蔽するもの)の情報をテクスチャに書き出したもの
西川善司の3DGE:GTX 980 Ti用として披露されたDX12ベースの新作デモ「MECH Ti」,その技術に迫る
Deep Primitive Mapの最上階層は「何個のポリゴンが光を遮蔽したか」のカウント数したものになる。後段のレイトレーシングで,カウントが0のところはレイが素通りする。1以上の箇所には,対応する下階層にポリゴンのID番号が記録される
 MECH Tiを使って具体的な話をすると,光源からの光を遮蔽するのがロボットの腕である場合,その腕を構成するポリゴンの個数とポリゴンIDがテクスチャ配列(=3Dテクスチャ)に出力される。
 この3DテクスチャをRay Traced Shadowsでは「Deep Primitive Map」と命名している。なお,ここでいうPrimitiveは「ポリゴン」という解釈でいい。
 
 Deep Primitive Mapは階層構造になっていて,光源からの光を遮蔽している部位のポリゴンの枚数とそのポリゴンIDを,適当な分解能(N×N)で記録する。そのため,多ポリゴンモデルになると,光を遮蔽するポリゴンの枚数が多くなり,すべての情報を記録できないケースも生じうるため,何枚までのポリゴン情報を記録しておけるかのカウント数(d)も慎重に決定しなければならない。
 
 NVIDIAの実装では,この「N×N×d」を1024×1024×32(128MB)~1024×1024×64(256MB)で確保していたが,「最適な設定」は,影生成元となる3Dモデルが持つポリゴンの数や,影の投射先となるシーンの大きさに配慮しながら,適宜決定する必要があるだろう。