イメージベースドライティング(IBL)
"IBL(イメージベースドライティング)とは「画像を元にライティングを行う」技術だ。オブジェクトをリアルに表現している要素は殆どライティングなので、既存の画像を元に光源を設定すると、非常によく見える。 これと「物理シェーダー(現実に存在する材質の反射率や光沢等を使用してシェーダーのパラメータを設定する技法)」を組み合わせると、非常にリアルな感じに見えるようになる。"
"このIBLですが、より正しい色を取得したい場合はHDRの画像を使用します。一般的な画像は色を表現できる0~255の範囲内に収められています。ですが、実際の色や目は輝度はもっと広い範囲のレンジを持っています。 例えば画像に黄色を加算合成していくと、最終的には白くなります。ですが実際は黄色を足しているので、黄色と認識すべきです。HDR画像では、そういった白飛びしている部分を正しく認識します。 要するにHDR画像ならば、それが「光ってるのか」「白い色なのか」を判断し、正しく光源として使用できる訳です。"
「静的な背景」シーンと「動的なインタラクション」シーンを分けたときのライティングについて
背景シーンはがっつりライトマップを焼き、動的な部分はIBLのみ(屋外の場合は、太陽であるリアルタイムディレクショナルライトをプラス)
ライトプローブは使わない(色むらが発生しやすく、特に大小様々な部品が密集するプロダクト系では部品ごとに明るさが違うなど、クオリティコントロールが難しいため)
1. 反射を得るためのリフレクションプローブを配置する
2. IBL用のCubemapを得るためのリフレクションプローブを配置する
3. ベイク(リアルタイム生成ではなく必ずベイクする。ボケ反射に品質の差が出るため)
2. ベイクが終わったら、IBL用のリフレクションプローブを非表示もしくは削除
2. シーンと同名のフォルダ内にある生成されたEXRファイルをSkyboxとして使用する(ライトは一切置かない)
https://gyazo.com/44baee9bc24116a01e9273707183cdd3
"この状態で「Generate Lighting」します。すると、ライティングが生成されてIBLが施されます。"
追加検証
「Generate Lighting」しないでプレイ開始するとどうなるか?
→ メタリックなものはリフレクションプローブにより自然に見えるが、そうではないものは真っ黒になる
Unityは 「最初に読み込まれたシーンのIBLが優先される」
ライトのないIBLが優先された結果、真っ黒になる
背景シーンをベースとしたときはどうなるか?
背景シーンの Skybox により、全方位からのライトでがっつり照らされてしまう
動的シーンのIBL生成後でも同じ結果になる
→ IBLを施した動的シーンから静的シーンを呼ぶのが最適
Lightingウィンドウに設定されたキューブマップをシェーダ内で取得できるようにする