「Sparse Voxel Octree」で間接光をうまく使う:Unreal Engine 4でも使っています(1/2 ページ)
NVIDIAは、3Dグラフィックスのリアリティを向上する「Spaese Voxel Octree」の概要を関係者に説明。この技術を採用する「Unreal Engine 4」のデモも紹介した。
8分木で間接光を“効率よく”表現する
NVIDIAは、8月2日に、3Dグラフィックスにおける「Voxel」の活用と、それを利用して間接光表現の演算などを行う「Sparse Voxel Octree」、そして、この機能を取り入れてEpicが開発を進めているゲームエンジン「Unreal Engine 4」の概要を説明した。
Voxelとは、2次元でグラフィックスデータを構成する画素単位の“Pixel”に対して、3次元でグラフィックスデータを構成する画素単位を指す。コンピュータグラフィックスでは、リアリティを持たせるために、光源からの直接光以外に間接光も利用するが、この間接光の演算では、従来からFEMと呼ばれる方式を用いてきた。FEMは、オブジェクトの平面を細かく分割し、それぞれの平面の位置関係に応じて光源からどのように光が伝達するか(反射した光が相手のオブジェクトをどのように照らすか)を事前に計算しておく。3Dグラフィックス描画では、その結果(これをフォームファクタと呼ぶ)に基づく間接光伝播と直接光を、リアルタイムで演算して求める。ただし、この手法は、事前にフォームファクタを用意する必要があるため、動的オブジェクトに対しては限定的にしか適用できない。
2010年には、この制約を改善する「Light Propagation Volumes」が提案された。これは、Voxelに光を当てて、その反射がどのようになるのかを演算して求める。ただ、この方法では、Voxelの解像度が増えると演算する画素が急激に増えることによる演算能力の不足と、間接光の方向情報を扱えない問題があった。
この問題に対処するために考案されたのが、「Sparse Voxel Octree」だ。Octreeは「8分木構造」の意味で、Sparse Voxel Octreeでは、描画するシーンを構成するすべての情報を階層化した8分木構造で扱う。この演算処理はすべてGPUで行い、中間処理は行わずに階層化したVoxelを直接構築する。また、8分木構造では必要のない空間で細かい階層を作らないことで、Voxelの画素数を抑え、現実的なメモリ容量でも高速な演算処理が可能になるという。
階層ごとに調べて、なにもなければ大ざっぱに
Sparse Voxel Octreeでは、直接光の当たっている情報をVoxelに記録するとともに、階層化したVoxelにフィルタリングした情報も保存する。最後に、カメラの視点でレンダリングを行う。このとき、それぞれの画素で、どこから間接光を受けているかをリアルタイムで演算する。自分から跳ね返った光が、回りのオブジェクトをどのように照らすのかを求めるため、「コーン型」の空間を調べる(Voxel Cone Tracing)。
Sparse Voxel Octreeによる間接光情報の作成処理では、まず、直接光の反射情報を一番上(最も細分化されていない)の階層から一番下(最も細分化された)の階層に向かって書き込んでいく。次のステップでは、Octreeの中間階層に対して、下の階層(より細分化した階層)の情報を参照してVoxel情報を書き込んでいく。最終段階は、カメラの視点からのレンダリングで、ここでは、Voxel Cone Tracingによって下の階層から反射した光で照らすオブジェクトを探していく。オブジェクトの探索ではConeの半径を徐々に大きくしていくが、それに応じて探すOctreeの階層も上げていく。これが広範囲における間接光の算出を可能にするとNVIDIAは説明する。
説明会では、間接光描画とエフェクトによる違いをデモで紹介した。直接光のみの描画と間接光を有効にした描画のそれぞれでリアリティを比べたほか、反射するオブジェクトの色が間接光に反映すること、さらに、間接光で照らされるオブジェクトのテクスチャによって反射する光の見えかたが変わること、そして、動的オブジェクトでも間接光が影響することを示した。
関連キーワード
NVIDIA | GPU | Unreal Engine | GPUコンピューティング | Epic Games | Kepler | アルゴリズム | 物理演算 | PhysX | 生産性
Copyright © ITmedia, Inc. All Rights Reserved.