ニュース
» 2012年08月02日 19時00分 UPDATE

Unreal Engine 4でも使っています:「Sparse Voxel Octree」で間接光をうまく使う (1/2)

NVIDIAは、3Dグラフィックスのリアリティを向上する「Spaese Voxel Octree」の概要を関係者に説明。この技術を採用する「Unreal Engine 4」のデモも紹介した。

[長浜和也,ITmedia]

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の解像度が増えると演算する画素が急激に増えることによる演算能力の不足と、間接光の方向情報を扱えない問題があった。

kn_uregn4_01.jpgkn_uregn4_02.jpgkn_uregn4_03.jpg 間接光を利用すると3Dグラフィックスのリアリティは大幅に向上する(写真=左)、これまでは、FEM(写真=中央)やLight Propagation Volumes(写真=右)を利用していたが、動的オブジェクトへの対応や扱える解像度などの制約があった

 この問題に対処するために考案されたのが、「Sparse Voxel Octree」だ。Octreeは「8分木構造」の意味で、Sparse Voxel Octreeでは、描画するシーンを構成するすべての情報を階層化した8分木構造で扱う。この演算処理はすべてGPUで行い、中間処理は行わずに階層化したVoxelを直接構築する。また、8分木構造では必要のない空間で細かい階層を作らないことで、Voxelの画素数を抑え、現実的なメモリ容量でも高速な演算処理が可能になるという。

kn_uregn4_04.jpgkn_uregn4_05.jpgkn_uregn4_06.jpg 2次元で画素を構成するPixelに対してVoxelは3次元で画素を構成する(写真=左)。Octreeは各要素を最大でも8分割して階層ごとに構成する(写真=中央)。Sparse Voxel Octreeでは、描画するシーンを8分木構造によって階層化し、必要がなければ細分化をしない。このことで演算負荷を抑えるほか、すべての演算をGPUで実行する(写真=右)

階層ごとに調べて、なにもなければ大ざっぱに

 Sparse Voxel Octreeでは、直接光の当たっている情報をVoxelに記録するとともに、階層化したVoxelにフィルタリングした情報も保存する。最後に、カメラの視点でレンダリングを行う。このとき、それぞれの画素で、どこから間接光を受けているかをリアルタイムで演算する。自分から跳ね返った光が、回りのオブジェクトをどのように照らすのかを求めるため、「コーン型」の空間を調べる(Voxel Cone Tracing)。

 Sparse Voxel Octreeによる間接光情報の作成処理では、まず、直接光の反射情報を一番上(最も細分化されていない)の階層から一番下(最も細分化された)の階層に向かって書き込んでいく。次のステップでは、Octreeの中間階層に対して、下の階層(より細分化した階層)の情報を参照してVoxel情報を書き込んでいく。最終段階は、カメラの視点からのレンダリングで、ここでは、Voxel Cone Tracingによって下の階層から反射した光で照らすオブジェクトを探していく。オブジェクトの探索ではConeの半径を徐々に大きくしていくが、それに応じて探すOctreeの階層も上げていく。これが広範囲における間接光の算出を可能にするとNVIDIAは説明する。

kn_uregn4_07.jpgkn_uregn4_08.jpgkn_uregn4_09.jpg Sparse Voxel Octreeのアルゴリズムは、3ステップで構成する(写真=左)。第1ステップで反射光のライティング情報を書き込み、第2ステップでVoxel情報を書き込む(写真=中央)。第3ステップでカメラ視点からのレンダリングを行うが、Voxel Cone Tracingを利用することで広範囲における間接光の算出を可能にしている(写真=右)

 説明会では、間接光描画とエフェクトによる違いをデモで紹介した。直接光のみの描画と間接光を有効にした描画のそれぞれでリアリティを比べたほか、反射するオブジェクトの色が間接光に反映すること、さらに、間接光で照らされるオブジェクトのテクスチャによって反射する光の見えかたが変わること、そして、動的オブジェクトでも間接光が影響することを示した。

kn_uregn4_10.jpgkn_uregn4_11.jpgkn_uregn4_12.jpg 間接光を反映したシーンで(写真=左)、日の射す角度を動的に変えると、間接光の色が反射したテクスチャを反映する(写真=中央)。さらに、反射するオブジェクトを細分化すると反射する光が鏡のように精密になる(写真=右)

kn_uregn4_13.jpgkn_uregn4_14.jpgkn_uregn4_15.jpg 従来の間接光描画処理で苦手としていた動的オブジェクト。直接光のみを反映する状態から(写真=左)、間接光を反映して影も描画し(写真=中央)、さらに、動的オブジェクトで反射した間接光が隣接するオブジェクトを明るくする(写真=右)

       1|2 次のページへ

Copyright© 2016 ITmedia, Inc. All Rights Reserved.