オススメ機能
Twitter
お気に入り
記事履歴
ランキング
4Gamer.net
TOP
PC
Xbox
PS4
PSV
Switch
3DS
スマホ
女性向け
VR
ハードウェア
ハードウェア
レビュー
テストレポート
インタビュー
ムービー
ドライバ
ベンチマークレギュレーション
AC
アナログ
お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

募集中
LINEで4Gamerアカウントを登録
QRコードでLINEの4Gamer
アカウントを友達登録すると
月〜金の週5回,21時に厳選
ニュースをお届けします!
※購読にはLINEアプリが必要です
特集記事一覧
注目のレビュー
注目のムービー
印刷2011/08/10 15:23

ニュース

[SIGGRAPH]ゲームにおいて平面視表示を立体視表示へと変換する2つの手法

ATI Technologiesに在籍していた多くの優秀なソフトウェアエンジニアは,AMDとの統合前後にゲーム業界へと散っていった。Natalya Tatarchuk氏(Bungie)もそんな1人だ
 カナダのバンクーバー市で開催されているSIGGRAPH 2011,会期2日目となる現地時間の2011年8月8日は,ここ数年のSIGGRAPHで恒例となっている,ゲームグラフィックスの最新技術を紹介する「Advances in Real-Time Rendering in 3D Graphics and Games」が開催された。これは,PCゲームだけでなくコンシューマゲームも含め,ユニークかつ先進的な技術を実際の開発者が登壇して解説するという人気のコースセッションである。
 オーガナイザーは,ATI Technologiesで数々のテクノロジーデモを生み出し,現在Bungieに在籍するNatalya Tatarchuk氏だ。

 9:00から17:30というタイムスケジュールで――昼食休憩はあったものの――16人もの開発者が登壇するというこのセッションは,かなりのスパルタ&過密といえるものだったが,実際,興味深い内容がかなり盛り込まれているものだった。
 今回行われたこのセッションをとても1本のレポートにまとめることができないので,後日いくつかのレポートに分割して詳細をお伝えするとして,今回は,その中からゲームにおける3D立体視表示の話題を現地からお届けしよう。


原理は簡単だが負荷が厳しいゲームの立体視表示


 3D立体視のテレビ放送がほとんど行われていないのに,3D立体視対応テレビがここまで訴求されているアンバランスな状況を理解できないという読者も多いことだろう。しかし,実のところ,3D立体視対応テレビは,3D立体視用ディスプレイ的な位置づけで発売されているのだ。つまりその用途は,3D立体視対応のBlu-ray視聴と,3D立体視表示でのゲームプレイということになる。

 3D立体視でのゲームプレイという点に集中して話を進めるが,ゲームにおける3D立体視表示は,「原理としては簡単」と言われている。
 これはなぜかというと,平面視表示を行う場合,もともと仮想空間に単眼カメラを配置して,そこからの情景をレンダリングしているわけで,同様の表示を3D立体視表示で行う場合には,カメラを人間の両目に合わせた距離だけ離した2か所に配置し,それぞれをレンダリングをすればいい。

 ただ,もちろんこの場合,平面視表示のときに比べてレンダリング負荷が2倍になるのは言うまでもない。
 例えば,平面視表示時に60fpsでレンダリングするゲームがあるとして,これを3D立体視表示にするためには,左右の目に向けてそれぞれ60fpsずつ,合計120fpsでレンダリングしなければならない。
 そのため,GPUパワーをギリギリまで使い込んでいるゲームを3D立体視表示にするのは,技術的にではなく負荷的に厳しいとされている。

 そこで,GPU負荷を軽減するためによく用いられるのは,レンダリング解像度を半分にしてしまうという手法だ。どういうことかというと,1280×720ドット解像度で60fpsのゲームがあったとして,これを640×720ドット解像度に下げたうえで,左右の目に向けてそれぞれ60fpsずつレンダリングし,1280×720ドット解像度へと拡大表示(スケールアップ)するのである。


Crysis 2で採用された3D立体視表示技術

「画面座標系手法:再投射法」


Nicolas Schulz氏(Senior Graphics Engineer, Crytek)
 3D立体視表示をサポートするゲームとしては,2011年6月にDirectX 11への対応を果たした「Crysis 2」もそのひとつとして挙げられる。
 しかし,Crysis 2では,上記のように2眼分をレンダリングするという手法を採用していないという。
 その理由として,Crytekでシニアグラフィックスエンジニアを務めるNicolas Schulz氏は,「解像感を下げずに,平面視表示時に近いクオリティで3D立体視表示を可能にさせたかったため」と述べている。

Crysis 2では,画面座標系手法:再投射法を用いて3D立体視表示にしているという
ミドルウェア/開発ツール
 ではCrysis 2で採用した3D立体視表示技術は何かということになると思うが,それは平面視表示用にレンダリングした結果を3D立体視表示用に変換する手法だ。
 Crytekでは,この手法を「Image Space Approach: Reprojection」(画面座標系手法:再投射法)と呼んでいる。
 広義には,疑似3D立体視表示といってもいいのかもしれないが,本当の3次元情報を基に3D立体視表示へと変換しているので,まるっきりウソというわけでもない。

ある画素に対応した深度値が分かっていれば,視点がずれるとどうずれて見えるかを計算できる
ミドルウェア/開発ツール
 そもそも3Dグラフィックスは,2次元表示といえども,3次元空間でレンダリングを行っている。そして,GPUを使った一般的手法では,最終的なレンダリング結果ができるまでの過程において,画面上のピクセルに1対1で対応した奥行き情報の副産物,いわゆる「深度バッファ」もしくは「Zバッファ」と呼ばれるものができているわけだ。
 これらのバッファは本来,前後関係が矛盾するような2重レンダリングを避けたり,不要な描画を省略するための処理系に用いられるのだが,この値を利用して3D立体視表示へと変換するのが画面座標系手法:再投射法である。

 さて,実際どのようにCrysis 2で3D立体視表示を行っているのかだが,その前に「この深さを示すバッファから分かる深度値によって何ができるのか」を説明しておきたい。
 例えば,ある画素に着目したとして,この場所を左右の目で見たときにどの程度ずらせばいいのかを知りたいといった場合,その画素に対応した深度値さえ分かれば,できあがった平面視表示のレンダリング結果からでも,どの程度左右にずれているべきなのかを逆算できるのだ。
 すなわち,平面視表示用レンダリング結果と,深度値さえあれば,3D立体視表示に必要な2つの映像をレンダリングすることができることになる。

視点が左右にずれたことによって生じる新しい遮蔽は,近似で対処するという
ミドルウェア/開発ツール
 さて,原理が分かったところで,実際の仕組みを見ていこう。
 画面座標系手法:再投射法では,深度値を用いた逆算に基づき,ピクセルシェーダの画面座標系ポストプロセスを使って,平面視表示のレンダリング結果から左右の目に向けて2つの映像を生成する。実際の処理系としては,深度値からズレ量を逆算し,平面視表示のレンダリング結果をサンプルしていくという流れだ。

 なお,視点が横にずれることによって遮蔽関係が変わることもあるが,これは2つのケースが想定できる。
 1つは,視点をずらしたことで,平面視表示時に見えていたものが遮蔽されてしまうケース。この場合は,視線により近い深度値がないかを矛盾がないように探査して,もし値が存在しているならばその値を画素のズレ量にすることで最適化することになる。

平面視表示時にフレームで遮蔽されていたものが,立体視表示用に変換することで見えてしまう箇所(Disocclusion)についてはどうしようもないため,背景画素をコピーしてごまかしているとのことだ
ミドルウェア/開発ツール
 2つめは,平面視表示時は遮蔽されていて見えなかった部分が,視点をずらしたことで見えないと不自然になるケースだが,この場合は,近くの背景を複製することで対処するという。もちろん,こうした箇所は,「おかしい部分」なので矛盾点,というかエラーということになる。

 回り込みを考慮しなければならないため,丸みを帯びたオブジェクトの輪郭で発生しがちなこのアーティファクトだが,Crytekによれば,Crysis 2は,ビルが建ち並ぶ現代のニューヨークを舞台にしているため,丸みを帯びた形状のオブジェクトが少なく,さほどエラーを気にする必要がなかったとのことだ。
 ちなみに,これらの追加処理系に掛かるコストは,PlayStation 3,Xbox 360ともにわずか1msだという。画面座標系手法:再投射法は,いわば2D画像処理ともいえる手法のため,シーンのジオメトリやシェーダの複雑度に依存せず,常に1msの追加コストで済むのが強みである。負荷のわりに十分に満足できる結果だとCrytekは述べていた。

費用対効果を考えればこの画面座標系手法:再投射法というアプローチは正解だったと振り返る。その真偽はぜひともCrysis 2を3D立体視表示でプレイして確かめてほしい
ミドルウェア/開発ツール ミドルウェア/開発ツール

 なお,この深度値と平面視表示用のフレームを用いた3D立体視表示変換は,HDMIにおける3D立体視表示フォーマットの拡張仕様としても定義されている。
 裸眼立体視表示は2視点の映像だけではなく,より多視点からの映像を生成する場合もあるのだが,こうした3D立体視表示のために柔軟な映像フォーマットとして規定されているわけだ。

 ただし,今のところ,深度値と平面視表示用のフレームとで3D立体視表示を行ってくれる3D立体視表示対応テレビは存在していない。そもそも深度値,というかZバッファは,GPUを用いた場合の副産物なので,テレビが対応していないというのも納得できる話である。
 今は,Crytekのように1つのフレームをGPUで2つのフレームへと変換しているが,将来的にテレビでこうした処理を行ってくれるような未来がやってくるかもしれない。


PlayStation 3版「Cars 2」は

Cellプロセッサで3D立体視に対応


 こうした深度値と平面視表示用のフレームを用いて,画像処理的に3D立体視表示を実現したゲームタイトルは,Crysis 2以外にもあった。それはDisney Interactive Studiosの「Cars 2: The Video Game」(以下,Cars 2)だ。これは同名のCG映画をゲーム化した作品で,Avalanche Softwareが開発を担当したレーシングゲームである。

Dave Edwards氏(Avalanche Software)
 Avalanche SoftwareのDave Edwards氏によれば,Cars 2では,「4画面分割による4人同時プレイで3D立体視に対応させる」という命題に取り組んだため,視点ごとにレンダリングするという手法は,最初から選択肢になかったという。これは,2視点分(左右視点用レンダリング)×4人となると,1人のときに比べて8倍のジオメトリ負荷になるためだ。

 そこでAvalanche Softwareは,画像処理的アプローチを用いてCars 2を3D立体視表示化に対応させるという方法を選択したのだが,PlayStation 3版のみを3D立体視表示に対応させればよかったため,この処理系にCellプロセッサのSPU(Synergistic Processor Unit,Cellプロセッサに内蔵されている128bit SIMD型RISCプロセッサ)を用いることにしたという。
 PlayStation 3が搭載しているCellプロセッサのSPUは,7基のうち1基がシステムで利用されており,6基が利用できる仕様である。Cars 2では,4基のSPUを多目的な用途に利用するというゲームエンジン設計になっており,3D立体視表示化処理以外にも,この4基のSPUが利用される。
 「平面視表示用のフレームから3D立体視表示用のフレームを生成する」という着想それ自体はCrysis 2と同じCars 2だが,GPUかCPUかという処理主体が異なるわけだ。

Cars 2でも画像処理的なアプローチで3D立体視に対応している
ミドルウェア/開発ツール ミドルウェア/開発ツール

ミドルウェア/開発ツール
基本着想としては同じだが,実現様式が異なる
ミドルウェア/開発ツール
Gathererd Reads(収集読み出し系)手法とScattered Writes(拡散書き出し系)手法の概要
 さらに両者の違いは,処理系の仕組みにおいても見られる。
 深度値から左右の目の視点に合ったズレ量を求めるという点は両者ともに変わらないが,異なるのはどのフレームを基準としているかである。
 まずCrysis 2の場合は,平面視表示のフレームからそれぞれの画素をズレ幅を考慮しつつ3D立体視表示用のフレームへと合成していく「Gathererd Reads」(収集読み出し系)手法が用いられている。

 これに対してCars 2では,3D立体視表示用フレームの画素を基準とし,それぞれに合った画素を平面視表示用フレームからズレ幅を考慮しつつコピーしてくる「Scattered Writes」(拡散書き出し系)手法が採用されている。

 Cars 2の場合も,視点をずらしたことによって新たに遮蔽が生じる可能性があるのだが,左右の目の視野,すなわち3D立体視表示用のフレームを基準としているため,遮蔽に対して特別な後処理が不要になる。

処理結果の一例。左の写真が平面視表示用のフレームとなる。中央が左目用,右が右目用の3D立体視表示用フレームだ
ミドルウェア/開発ツール ミドルウェア/開発ツール ミドルウェア/開発ツール

この変換処理は独立性のあるタスクとして処理が可能
ミドルウェア/開発ツール
 また,人間の目が左右に並んでいることから,この処理系は,縦方向には依存関係がないと想定できる。つまり,この画像処理系は1ライン単位区切って考えれば,完全に独立したタスクとして見なすことができる。つまり,並列に処理ができるわけで,SPUに任せるタスクとしてはおあつらえ向きなのだ。

 Cars 2では,ITEMバッファという,1ライン分の横解像度に相当する作業バッファが用意される。この作業バッファを用いて,“ネタ元”となる平面視表示用のフレームと,深度値から逆算したズレ幅で左右にズラしたフレームとの対応関係を書き込んでいき,最後に画素値を計算するという流れになるわけだ。

実際の処理系の流れ
ミドルウェア/開発ツール ミドルウェア/開発ツール ミドルウェア/開発ツール

 ただ,この手法においても,Crysis 2が用いている手法と同じく,「平面視表示時のフレームで遮蔽されている一方,3D立体視表示用に生成したフレームだと遮蔽されず,新たに見えることになる『未知の領域』は,何の画素値も与えられない『穴』になってしまう」という問題はある。Cars 2においては,奥側の背景を複製することでこの領域の穴埋めを行うとのことだった。

ミドルウェア/開発ツール ミドルウェア/開発ツール
新たに見えることになる領域に関しては,穴埋め処理が必要になる
ミドルウェア/開発ツール ミドルウェア/開発ツール

 このアーティファクトは,やはり丸みを帯びた3Dモデルの輪郭付近で起きやすい。Cars 2では,丸みを帯びた車が多く登場するため,画面全体の約5%がそうした領域になるそうだ。
 ただ,動きの速いゲームのため,見た目はそれほど破綻していないというのが制作側の感想である。

半透明に関しては無視しているとのことだ
ミドルウェア/開発ツール
 Crysis 2で用いられていた手法でもそうだったが,こうした平面視表示時のフレームから3D立体視表示用のフレームを合成する手法では,深度値を持たない半透明オブジェクトの扱いを無視しなければならないことになる。ただ,「もともと半透明オブジェクト自体が実体のないボヤっとしたものなので,無視してもそれほど気にならない」というのが,Avalanche Softwareの見解だ

ミドルウェア/開発ツール
平面視表示用のフレーム
ミドルウェア/開発ツール
左目用として合成した3D立体視表示用のフレーム。緑でマークされている部分が新たに見えることになる領域だ
ミドルウェア/開発ツール
この未知の領域を背景で埋めてごまかした左目用のフレーム。本当は後輪が見えるべきだろうか

 Avalanche Softwareによれば,3D立体視表示に変換した場合のフレームレートは,平面視表示時と比べても低下がなかったとのこと。この点は,改めてSPUのパワフルさに驚かされた部分だ。
 なお,この拡散書き出し系アプローチは,DirectComputeやCUDA,あるいはOpen CLでも実装できるはずなので,PCでも似たようなアプローチを実践してくるスタジオが登場してくる可能性がある。

 現在,ゲームを3D立体視で楽しむユーザーがまだ少ないので,本稿で紹介したような疑似手法に対するクレームのようなものをあまり聞かない。ただ,掛けるコストに対して得られるメリットが大きいことは確かなので,PCはともかく,PlayStation 3やXbox 360などのコンシューマゲーム機では,こうした手法が今後主流になっていくのかもしれない。
  • 関連タイトル:

    ミドルウェア/開発ツール

  • 関連タイトル:

    クライシス 2

  • この記事のURL:
line
4Gamer.net最新情報
トピックス
スペシャルコンテンツ
注目記事ランキング
集計:12月18日〜12月19日