以前にも紹介したが、IBL(イメージベースドライティング)とは「画像を元にライティングを行う」技術だ。オブジェクトをリアルに表現している要素は殆どライティングなので、既存の画像を元に光源を設定すると、非常によく見える。
これと「物理シェーダー(現実に存在する材質の反射率や光沢等を使用してシェーダーのパラメータを設定する技法)」を組み合わせると、非常にリアルな感じに見えるようになる。
今回はIBLの話。
絵の中にモデルを配置してみた的な
光源計算は画像から取得
Lightmapping Extended
UnityのIBLで代表的な物はSkyshopだが、今回は無料のアセットのLightmapping ExtendedでIBLを実現する。
Lightmapping Extendedは、UnityのBeastを割と手軽に操作する為のアセットだ。
Unityが採用しているBeastは元々IBLをサポートしている。つまり、Beastを設定する事でIBL表現が可能なのだが、XML形式のテキストを一々修正する必要があり正直面倒臭い。そこで、このアセットを使用することで非常に手軽に設定する訳だ。
ちなみにこのアプローチでは、リアルタイムなIBLは出来ない。もしリアルタイムに動くオブジェクトのIBLを行いたい場合、
Unity でお手軽 IBL -- ProbePolisher を試してみた - テラシュールブログ
みたいな擬似IBLの手法もある。また、Skyshopは非常に綺麗なリアルタイムIBLを実現してくれる。
IBLの使用手順
IBLを使用するには、以下の手順で行う。
まずはセットアップ。
- sIBL Archiveから適当なHDR画像を落としてくる
- シーンを保存する(まだ保存されてないシーンはBeastを設定出来ない)
- Lightmapping Extendedをインポート
実際にライトマップを焼く。ライトマップに焼かれる為には、オブジェクトがstaticな必要があるので注意。要するに動くものにはこの方法でIBLを指定する事は出来ない。
- メニュー>Window>Lightmapping Extended を開く
- Create Beast Settings file for current sceneを選択
- Environment(環境の意味)を選択して、Environment typeをIBLに設定
- IBL ImageのImage PathのChooseより、sIBL Archiveから落とした***.hdr画像を選択
- IntensityでIBLとして取得する光の強さを設定。
(上画像は2.5位を使った。高いほど影響が大きい。
輝度が高過ぎると画像と馴染まないので、もっと低くても良いかもしれない。) - ライトマップを焼く
ついでに、周囲の背景をIBLの元画像に変更する。
- ****8k.jpgみたいな、全体を見渡せる画像を探す(多分ある)
- テクスチャのタイプをReflection、mappingをcylindrcalに設定
- マテリアルを新しく作り、シェーダーをRenderFX/Skybox cubed に設定
- 2で設定を変更したテクスチャを3で作ったマテリアルに登録
- 3で作ったマテリアルをEdit>RenderSettingsのSkybox Materialに登録
ちなみにUnity 5では標準対応してる。
tsubakit1.hateblo.jp