今回はUnity 5.4(オープンベータ中)の新しい新しい機能LightprobeProxyVolumeについて、少し分かりにくいなと思ったので色々と確認を兼ねてメモします。
間接光(GI)と動的なオブジェクトとLightprobe
UnityはUnity5になり動的なGI(間接光)を使用出来るようになりました。壁に反射する光を事前に計算する事で、動的に光源を動かしたときも間接光を表現できるようになった訳です。
このGIの計算は非常に負荷の高い物のため、ゲームのような速度が必要なコンテンツで動的に実行することが出来ません。
GIの影響を正しく受ける事が出来るには「事前計算」する事の出来る「事前に配置した静的なオブジェクト」のみになります。
ダイナミックなオブジェクトに対してはどうするのかと言えば、Lightprobeを使用します。空間に対して「この空間に影響する間接光はコレ」と事前計算してる訳です。
Lightprobeと大きなメッシュ
Lightprobeをダイナミックなオブジェクトに適応する上で一つ問題になるのが、大きなメッシュです。
Lightprobeはメッシュに対して間接光を教えているのですが、単位が「メッシュ単位」のため、大きなメッシュや広範囲なパーティクルを使用している場合、一部のLightprobeがメッシュ全体に影響を与えてしまいます。
特に「家具等を動的に置くタイプのコンテンツ」や「空間に対するパーティクルの場合、割と顕著に出ます。
LightprobeProxyVolume
LightprobeProxyVolumeを使うと、Lightprobeの影響をメッシュ全体ではなく、一部に限定する事が出来るみたいです。
これは「大きなものを動かす」という用途以外でも、大きな壁とか家具を置いた時、ちゃんと照り返し光で色が付くようになります。
下の図は、地面以外は全て動的なオブジェクトとして配置しています。比較すると、LightprobeProxyVolume(LPPV)はLightprobeと比較して、地面の間接光に影響を受けてるのが分かります。
流石にstaticよりは汚いですが、Lightprobeよりは整合性を取りやすい絵を作りやすくなります。
LPPVの使い方
メッシュにLightprobeProxyVolumeコンポーネントを追加すると、オブジェクト内部にプローブが幾つか作られます。
後はMeshRendererのLightprobesをUseProxyVolumesに設定すれば、LightprobeProxyVolumeが使われるようになります。
パーティクルの場合も同様です。RendererモジュールにLightprobeの項目がありますので、そこをLightprobeProxyVolumeに設定すればOKです。
その他細かい設定は、(English) Light Probe Proxy Volume: 5.4 Feature Showcase – Unity Blogが分かりやすいです。
ちなみに使えるのはシェーダーモデル4、つまりPC向けです。
関連
borndigitalのブログ:Tips:UnityでIES Lightを試してみよう!テクスチャはSubstanceでね - livedoor Blog(ブログ)