イベント
[GDC 2014]PowerVRがついにリアルタイムレイトレーシングエンジンを統合。ゲームグラフィックスはハイブリッド時代へ
展示会場となる「Expo」ではプロトタイプとなるテストシリコンによる実動デモが行われ,来場者の注目を集めていた。
PowerVR Wizardの目玉は,レイトレーシングユニット(Ray Tracing Unit,以下 RTU)の搭載である。
Imaginationは,2010年12月に,レイトレーシング用プロセッサを開発するベンチャー企業,Caustic Graphicsを買収済み(関連記事)。この旧Caustic Graphicsが開発したRTUを,基礎設計から見直して最適化し,PowerVRへの統合を果たしたものが,今回のPowerVR Wizardとなる。
もっとも,製品としてのPowerVR Wizardは,開発コードネーム「Rogue」と呼ばれていたPowerVR Series6シリーズに属する上位モデル「PowerVR Series6XT」にRTUを統合したものである。Imaginationの担当者も「“PowerVR WizardのRTU抜き”はPowerVR Series6の新製品そのもの」と述べていたが,実際,下に示したブロック図でも,PowerVR Wizardならではの部分は紺色のところだけで,基本的なグラフィックスIPコア部分はPowerVR Series6XTと変わっていない。
ImaginationはIP企業なので,PowerVR WizardのデザインをSoC(System-on-a-Chip)メーカーなどといった顧客に販売するカスタマーに販売するわけだが,要は,「今回の発表によって,PowerVR Series6XTに,RTU付きのラインナップが加わった」というわけだ。
RTUとは何か?
PowerVR WizardのRTUとは一体どのようなものなのだろう。「RTUなのだから,当然,レイトレーシングをするユニット」なのは漠然と分かるが,それで何ができるのか気になる読者も多いと思う。
「レイを投げる」ことを「レイをキャストする」などと言うこともあるが,いずれにせよ,分かりやすい言葉で言い換えると,「指示された方向に何があるのかを探査する」という意味になる。つまりRTUというのは,「指示された開始地点から指示された方向に向かって探査する」処理を行うものなのだ。
どこを調査するのかというと,それはもちろん,3Dグラフィックスで描画されたCG世界の中となる。
冒頭で紹介したように,PowerVR Wizardの中身は「PowerVR Series6XT+RTU」なわけだが,ごくごく普通のGPUといえるPowerVR Series6XTでCGをレンダリングすると,頂点シェーダなどが働いて,PowerVR Series6XTの中でジオメトリがセットアップされる。平たく言うと,仮想世界が組み上がる。
通常のレンダリングパイプラインでは,このセットアップされたジオメトリを,視点から見た視界(=2次元平面)で切り取って,さらにピクセルへ分解する。これがラスタライズ処理というヤツだ。続けて,この各ピクセルでピクセルシェーダを起動させ,テクスチャを貼ったり,ライティングを行ったりする。
それに対してPowerVR Wizardでは,ラスタライズ処理によってピクセルに分解された,各ピクセル位置に対応するジオメトリ世界,いわば「頂点シェーダによってセットアップされた仮想世界」の一点から,RTUによってレイを投げるようになっている。
基本どおりにやるのもよいのだが,このあたりはプログラマーのアイデア次第でいろいろ応用ができる。たとえば,オブジェクトの表面から光源(※太陽など)に向かってレイを投げるとしよう。投げられたレイが第三者にぶつからず,光源にまで辿り着いた場合,レイを投げる起点に光が当たっていることになる。通常のレンダリングでいえば「ライティングされるべき場所」というわけだ。ここでピクセルシェーダを起用してライティングやシェーディングをすれば,そのピクセルの色が決定される。
では,投げる起点から光源までの間にレイが第三者に当たってしまったらどうかというと,そう,そこは影になるのだ。ここでピクセルシェーダを起用して“影色”を付ければ,そのピクセルは影色で描かれる。
ここまで読んでもらうと分かってもらえたと思うが,PowerVR WizardのRTUとは,プログラマーの知りたい情報を得るためにジオメトリ世界の中でレイを投げて,何かに衝突するかどうかを検出する装置(ユニット)なのだ。
RTUが生み出す「ハイブリッドレンダリング」とは何か
「そんな面倒臭いことをして何の意味が?」と思うことなかれ。先ほどの例で挙げた「影か否かの判定」は非常にすごいことなのだ。
現在の一般的な3Dグラフィックスのライティングシステムに,影か否かを判定する仕組みはない。なので,デプスバッファ(=デプステクスチャ)にシーンの深度をレンダリングしてシャドウマップを生成し,このシャドウマップ情報を基にピクセルシェーダで当該ピクセルが影か否かを判断する「デプスシャドウ技法」が考案されて実用化されている。
ただ,デプスシャドウ技法において,影の精細度はデプステクスチャ(=シャドウマップ)の解像度に依存してしまう。たとえば4km×4kmの世界を4096×4096テクセルのシャドウマップで影を生成するとしたら,1×1テクセルに格納できる影の情報は約1m×1mという広い範囲になる。影の解像度としてはとてつもなく粗い解像度になってしまうのだ。
GPUと組み合わされるグラフィックスメモリ容量が有限である以上,確保できるシャドウマップの解像度には限界がある。そのため,現在のゲームグラフィックスでは,近場しか影を表示しなかったり,遠くの影は適当に手を抜いたりするのが常態化している。
一方,レイトレーシングであれば,影の解像度は確実に1ピクセル単位で生成できる。レイをピクセル単位で飛ばすのだから,ピクセル単位の影を生成できるのは自明なことである。
これまでの3Dグラフィックスレンダリングは有効に活用しつつ,特定の表現手段や局所的な表現手段にレイトレーシングを用いる。このテクニックをImaginationは「Hybrid Rendering」(ハイブリッドレンダリング)法と命名し,今回,強く訴求している。
広がるハイブリッドレンダリングの世界
ここまで影の話を進めてきたが,RTUでできるのは影の処理だけではない。
Imaginationのブースでは,実際に部分的なレイトレーシングを使ったハイブリッドレンダリングの事例をデモンストレーションしていた。そのうちのいくつかを紹介しよう。
1つは,映り込み(Reflection)の表現だ。
現在の3Dゲームグラフィックスにおいて,映り込み表現は実のところ,とても難しいテーマの1つとなっている。
局所的な映り込み表現は,通常のレンダリング手法では難しいテーマ。RTUはこうした表現には強い |
ガラスに投射される情景と,ガラス越しに見える車内の情景。両方を正確に表現するにあたって,RTUによるハイブリッドレンダリングは有効だ |
そこで,RTUの出番だ。プレイヤー視線の反射ベクトル方向に当該ピクセルからレイを投げて,第三者のオブジェクトに衝突したときは,当該オブジェクトの衝突箇所でピクセルシェーダを起動してライティングなりシェーディングなりを行って結果を持ち帰ることにすれば,正確な映り込みを実現できる。
ブースでは「画面に見えていない,視点側の後ろを走るクルマの映り込み」が実現するさまを確認できた。
ブースでは,ガラス瓶や水面などを通すことで歪んで見える情景のデモも実演された。これはガラス瓶の表面上のピクセルから視線が屈折する方向へレイを投げることによって実現されている。
なお,RTUは再帰的に,あるいは反復的にレイを投げられるので,たとえば,「投げたレイが第三者に衝突したら,そこからまた別のレイを投げる」なんてことも可能だ。「合わせ鏡」のような,無限にレイを投げ合うような情景の再現は難しいとしても,間接照明や大域照明といった表現などを行うことはできるだろう。
また,1点から複数のレイを投げることもできる。これは,物理的に正しいソフトシャドウ表現(半影表現)を近似するのに有効だ。
RTUの性能を考察しつつ,まとめ
さて,現時点でPowerVR WizardのRTUは,1秒間に3億本のレイを投げられると説明されている。
ちょっとイメージが湧きにくいので,もう少し具体的に分析してみよう。
仮に毎秒30コマの映像を作るとすれば,1フレームあたりに投げられるレイの数は1000万本ということになる。なので,1280×720ドットの100万画素の場合,1ピクセルあたりのレイ数は10本だ。これを60fps化すれば5本となり,さらに1920×1080ドットの200万画素化すれば2.5本となっていく。
もちろんこれは理論値でしかなく,実際に衝突を取ってくるまでの時間はシーンに依存するので,実際のところ,実効性能はよく分からない。ただ,できることの規模感は,こうやって計算してみると,なんとなく見えてくるのではないだろうか。
つまり,PowerVR Wizardは,従来のGPUに最低限の固定ユニットを組み合わせて,プログラマブルシェーダユニットを必要に応じて起用しつつレイトレーシンクを行えるGPUなのだ。この発想は,別に「PowerVRだからできた」というわけでもなく,NVIDIAやAMDなどといった他社のGPUにも応用できるので,技術としてその有効性が確立されてくれば,ほかのGPUベンダーが採用に乗り出してくる可能性はある。
ちなみにブースの担当者は「RTUの応用は,グラフィックスレンダリング用途に留まらない可能性も秘めている」とも語っていた。
たとえば,ジオメトリ空間内で第三者との衝突を取れる以上,それこそ物理シミュレーションなどにおける衝突判定にも応用できるという。あるいは,障害物を回避して移動するためのAIや,もっとシンプルに,スニーキングゲームなどで必要となる可視判定処理にも使える可能性がある。
期待を込めて述べるならば,RTUには,今後のGPUが向かうべき拡張の方向性を指し示しているほどの可能性を感じる。今後,どういった影響が業界へもたらされるかにも注目していきたい。
●マメ情報
Imaginationは,ハイブリッドレンダリングをソフトウェア実装したデモを「OpenRL Hybrid Example」として公開している。実行にはImagination製のレイトレーシングライブラリ「OpenRL」のRuntimeが必要だ。興味のある人は下記リンク先から入手のうえ,実行してみてほしい。
→PowerVR Wizard製品情報ページ(OpenRL Hybrid Example公開中)
→OpenRL SDK&Runtime配布ページ
- 関連タイトル:
PowerVR
- この記事のURL:
キーワード
(C)2011 Imagination Technologies Ltd. All rights reserved