テラシュールブログ

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

環境マップとIBLとReflectionProbeについて少し整理

目次

はじめに

Unity 5で変わった分かりやすい変更点の一つが、IBLとReflectionProbeの導入です。

IBLは環境マップのキューブマップを元に環境光を設定してくれる仕組みです。
これを上手く使うと、雪山や密林・街角といった環境光を手軽に設定することが出来ます。 またUnity 5の場合は、Skyboxが環境光に影響をあたえることが出来ます。標準では影響を与えます。

Unity 5のモデルが妙に青みがかっているのは、この辺りのエフェクトの影響です。 空は青いのです

f:id:tsubaki_t1:20150830233427p:plain

環境光を全天球画像から設定する

Unity5では標準設定では環境光(Ambient Light)はSkyboxから取得します。 もちろんAmbient SourceをColorに設定すれば過去の単色Ambient Lightが復活しますし、Gradientを設定すれば「空・中間・照り返し光」の3段階表現も設定できます。

f:id:tsubaki_t1:20150830233502p:plain

Skyboxを設定するには、LightingのウィンドウよりSkyboxの設定をする必要があり、Skyboxに設定するにはSkyboxのシェーダーを持つマテリアルを作る必要があり、Skyboxのシェーダーにテクスチャを設定するには全天球画像をCubemap等に設定する必要があります。

1から手順を行う場合は、下のような感じです。

  1. 全天球画像を入手する。例えばhdrlabsのsIBL
  2. Unityにインポートする
  3. TextureのフォーマットをCubemapに変更する
  4. 新しいMaterialを用意する(名前はskyboxとか)
  5. Materialのシェーダーの設定をSkybox/Cubemapに変更する
  6. 5.で設定したマテリアルに3.で設定したテクスチャを設定する。
  7. メニューバー > Lighting > Skyに5で設定したマテリアルを設定する
    もしくはSceneビューにマテリアルをドラッグ&ドロップ。

これでReflection SourceをSkyboxに設定していると、Skyboxの色が環境光になります。

f:id:tsubaki_t1:20150830233648p:plain

このIBLですが、より正しい色を取得したい場合はHDRの画像を使用します。一般的な画像は色を表現できる0~255の範囲内に収められています。ですが、実際の色や目は輝度はもっと広い範囲のレンジを持っています。 例えば画像に黄色を加算合成していくと、最終的には白くなります。ですが実際は黄色を足しているので、黄色と認識すべきです。HDR画像では、そういった白飛びしている部分を正しく認識します。 要するにHDR画像ならば、それが「光ってるのか」「白い色なのか」を判断し、正しく光源として使用できる訳です。

これでIBLを設定したシーンでは、かなり良い感じに背景に馴染んだ絵作りが出来る訳です。

@MuRo_CGさんのサンプル。実際分かりやすいです。

環境マップとSkybox

Unity 5のSkyboxには、もう一つ環境マップとしての役割があります。この機能もシーンにモデルを馴染ませる機能の一つで、金属等の反射性の高い材質に風景を写り込ませる効果があります。

環境マップのありと無しを比較してみます。最後のモデルのみ環境マップ無しです。

f:id:tsubaki_t1:20150830233808p:plain f:id:tsubaki_t1:20150830233819p:plain f:id:tsubaki_t1:20150830233834p:plain

環境マップ有りのメタリック最大の汚れ無しだと、非常に金属っぽく見えますが、環境マップ無しにすると同様の材質でもマットな何かっぽくなってしまいます。 他にも目や水・プラスチックといった反射のある物質を表現する際には非常に協力です。

ReflectionProbe

環境マップを使用すると、周囲の色を取り込み光沢を非常に綺麗に表現してくれます。しかしこのSkyboxによる環境マップはシーン内全てのモデルに影響を与えてしまいます。 この影響範囲を限定的にしたのが、ReflectionProbeです。

f:id:tsubaki_t1:20150830234051p:plain

ReflectionProbeは部屋や一部のマップに対し、範囲限定のオブジェクトに環境マップを設定します。また、範囲内のオブジェクトに対し反射等の影響を与える効果があります。 また範囲はある程度被っても大丈夫です。その場合、近いReflectionProbeが優先してブレンドされます。

ReflectionProbeが作成する環境マップは、自分でベイクしても良いですし、既存のCubemapから持ってきても良いです。

特に屋内の場合、Skyboxの色をそのまま使うと妙に青空教室くさい部屋が出来上がるので、ReflectionProbeの配置は必須です。

tsubakit1.hateblo.jp

上手く使うと、説得力の有る絵作りの武器になりそうです。

関連

主婦写真講座 HDR ハイダイナミックレンジ by ほぼGOROmanさん Unity5の綺麗なミクさんの話とか - Togetter