テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】dynamic voxel-based global illuminationを実現する SEGI

今回はUnityでdynamic voxel-based global illuminationを実現する、SEGIというアセットを試してみました。

github.com

今回試したSEGIは、他のものと同様に事前ベイク無しにGIを実現出来るみたいです。

実際に適当に試したのがコチラ。
全てのオブジェクトはダイナミックで、ベイクは行っていません。

f:id:tsubaki_t1:20180117011351j:plain

f:id:tsubaki_t1:20180117011414j:plain

また、こんな感じの表現も出来るみたいです。

f:id:tsubaki_t1:20180117011516j:plain

f:id:tsubaki_t1:20180117011528j:plain

 

目次

 

voxel-based global illumination

voxel-based global illuminationは、CryEngine3Lumberyardで紹介されているGI表現の一種みたいです。詳しいことは調べてません。

基本的に間接光のような光をトレースしなければいけない処理は重いので、多くの場合ライトを事前にベイクしたり、計算するにしても高速で実現できるように事前のデータを用意(ベイク)します。

 

試してみた

実際に試してみました。

 

プロジェクトの設定

まずはプロジェクトにSEGIをインポートします。

Githubで公開されているプロジェクトをZipで保存&解凍し、中身を自身のプロジェクトにぶち込めばOKです。

フォルダパスはAssets/SEGIです。

f:id:tsubaki_t1:20180117011916j:plain

 後はマニュアルを見ながらプロジェクトの設定です。

 

カラースペースをLinearに設定にします。

f:id:tsubaki_t1:20180117012303j:plain

 

シーンの設定

まずRendering PathはDeferredにセットします。

f:id:tsubaki_t1:20180117012638j:plain

 

Unityのライトベイク機能は全部殺します。

f:id:tsubaki_t1:20180117012801j:plain

 

カメラにSEGIコンポーネントを追加します。

f:id:tsubaki_t1:20180117013509j:plain

 

後はDirectional LightをSunに登録します。

f:id:tsubaki_t1:20180117014232j:plain

 

ボクセルの粒度

ボクセルが上手い感じに出来ない時は、Voxel Spaceの数を減らすとかすると良いかもしれません。範囲が減りピクセル辺り高い解像度が得られます。

同時にFollow TransformでGIを求める対象を設定したり。

f:id:tsubaki_t1:20180117014602j:plain

 

感想

普通にベイクした物とくらべて重かったりノイズが発生してたりしますが、ベイクなしでもソコソコ綺麗に絵が出るのは中々に面白いです。

 

関連

こちらはベイクすることが前提のライティング手順です。

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp