はじめに
今回はこちらを見ていきます
- エンジンが生成するダイレクトライティングと影野シンプルなシーンから始める
- グローバルイルミネーションを生成して下記のような結果を得るプロセスを紹介
最初のシーンに戻る
- 上記のシーンだけでもUE4が極めて正確にシェーディングしている影の計算を行っていることがわかる
- ただしコンタクトシャドウ、カラーブリーディング、ライトバランスなどの間接ライティング情報はまだ不足している
- 建築のシーンでは上記はリアリスティックを求めるのに重要
- テクスチャ、マテリアル、反射と組み合わせると下記のようになる
この講座のアジェンダは下記の通り
- GI in a Real-Time(Baked vs Dynamic)
- Baked GI
- Baking Checklist
- Intro to Lightmass
- Visualizing Lightmaps
- Lightmass Setup
- Meshes as Lights
- Dynamic GI
- Light Propagation Volume(LPV)
GI in a Real-Time(Baked vs Dynamic)
- GI ( Global illumination)の作成方法の紹介
- ベイクされたGIとダイナミックなGIの2種類ある
- この講座ではベイクされたGIにより焦点を絞る
- なぜなら建設シーンではベイクされたほうが一般的なため
- ベイクされると通常よりも高品質を実現できる
- リアルタイムGI
- 多大な労力を必要とするプロセス
- 数分から数時間要する
- レイトレーシングが必要
- リアルタイムでのGIアプローチ
- GIを事前計算または事前処理し結果をLightmapに保存する
- このようなライトマップは基本的にテクスチャ
- マテリアルやテクスチャと組み合わせて使用する
- 制約はこのアプローチを使うオブジェクトはスタティックでなければならないという点
- パフォーマンスは非常に優れている
- ライトプロパゲーションボリュームという手法
- すべてをオンザフライで計算する
- 最初のアプローチよりも品質は劣る
- GIを事前計算または事前処理し結果をLightmapに保存する
- 多大な労力を必要とするプロセス
Baked GI
Baking Checklist
GIをライトマップにベイクするために必要なチェックリスト
- MeshアクターのMobilityはスタティックに設定されている事
- アウトライナでオレンジの点がついているものは movable 設定がされている
- ライトMobilityはstaticまたはstationaryに設定可能
- stationary は静的とダイナミックを含む
- メッシュは重なっていないUVを要求する
- ライトマップをベイクするために使用されるUVチャンネルがオブジェクト上にある必要がある
- ライトマップはテクスチャとして表される為、適切なUVチャンネルが必要
- スタティックメッシュを開くと
- UVチャンネルは2つある
- 0 はディフューズ、法線、ラフネスマップなど通常のテクスチャに使用される
- 1 はLightmapに使用される
- 1を開いたところ、このUVマップは重なり合わさってはいけない
- UV周辺の空白部分は最小限に抑えることも重要
- DCCソフトでUVチャンネルを作成する事も可能
- スタティックメッシュを開くと
- ライトマップはテクスチャとして表される為、適切なUVチャンネルが必要
- ライトマップをベイクするために使用されるUVチャンネルがオブジェクト上にある必要がある
- Lightmap UVはUE4の既存のUVに基づいてUVチャンネルを自動生成できる機能がある
- 宛先ライトマップインデックスが Lightmapを書き込む場所の指定
- オブジェクトごとに適切な解像度を設定する
- 2つの設定は一致しているのが好ましい
Intro to Lightmass
- ライトマップのベイク
- グローバルイルミネーションの計算
- マテリアルへの統合
- 上記をすべてを行うツールは Lightmass と呼ばれている
- Lightmassはスタンドアロナプリケーション
ライトマスを実行する方法
- シーンがライトますに送信される
- GIの計算が開始される
計算が完了したらテクスチャをシーンにインポートしてすべてをマテリアルと統合する
Visualizing Lightmaps
- ベイクするライトマップの品質を向上させるにはライティングの情報のみ分離してテクスチャ、マテリアルその他のポストプロセスが追加されていない状態でベイクされた結果を確認することが有効
- 表示モードをライティングのみに変える
テクスチャや反射をすべて非表示にすることが可能
特定のポストプロセスも無効にするとのこと
- 表示 → ライティング機能 → スクリーンスペースアンビエントオクルージョンをOFF
– ライトマスは一部のアンビエントオクルージョン条件をすでに計算しておりライトマップでベイクされている
– スクリーンスペースアンビエントオクルージョンが有効な場合は、+アルファでエンジンが追加処理を行っていることになる。純粋に評価しづらくなるため無効化する
また露出設定も無効にするとのこと。
自分の環境で確認すると露出設定 自動などの項目がないため、何も手をつけないでおく
もう一つが Bloom 設定。ライティングにいくつかのハイライトを追加する機能だが、わかりにくくなるため無効化するとの事
これでベイク品質に集中できる様になった模様
Lightmass Setup
- 品質改善、ベイク時間を短縮するにはどうすればよいか?
- いくつかの方法がある
- 品質のみ向上させるもの
- ベイク時間のみ短縮させるもの
インポータンスボリューム
- Editor のアクタから取得できる特別なアクタ
- これは空間を指定する通常のボリューム
- なかったため追加。部屋全体を包む黄色い枠。
- このボリュームの目的はすべての計算をどこに集中するかをライトマスに伝えること
- この例でいうと部屋の外にも世界はあるが、主に部屋内部(Boxの内側)に焦点を当ててベイクするように依頼。
- 品質の向上に役立ち、範囲を制限していることからベイク時間短縮にも役立つ
ライトマス ポータル
- 開口部がシーンのどこにあるかをライトマスに伝える
追加すると平べったいBoxが現れる
理想的にはインテリアシーンの全ての開口部の周辺にあることが望ましい。
開口部がシーンのどこにあるかをライトマスに伝える
- 太陽光が分散するのではなく集中できるようになるため品質とベイク時間両方にとって良い
品質を上げる
- 反復が一番品質が低い。オブジェクトの配置や色を変えている段階なら低くしてパフォーマンスを優先させたほうが良い
ワールドセッティングから改善する
ウィンドウ→ワールドセッティングを開く
- 詳細については講座の内容からそれるためしないが品質に重要なものを解説するとのこお
- 最も重要なのは 間接ライティング品質
- 講座では 1 から 5 へ変更していたため同じにする
- 部屋が暗いと感じるなら 間接ライティングのバウンス数 を修正
- 静的ライティングスケールもオブジェクトの周りに細かいコンタクトシャドウなどが必要だと感じるならこの値を下げる事ができる
- 品質が低い場合、値を下げることでノイズが増えてしまうので注意が必要
一旦ベイクしてみる。その前に現段階のイメージ
- あまり良くわからないけど部屋の奥の方はベイク後のほうが気持ち明るくなっていて明度が増えたように感じる
Meshes as Lights
- ライトマスはテクスチャ処理されたオブジェクトを光源として使用する優れた機能もサポートしている
- この機能は本当に役立つ。との事
ここではテレビに電源
が入っていて、テレビからの光が部屋に影響を与えているようにするとの事。
- 平面を追加してテレビの画面の前面に覆いかぶさるように配置
- マテリアルを追加。tv_matという名前にしている
- tv_matをダブルクリックして編集する
- マテリアルの Shaind Modelを Unlitに設定
- Texture Sampleをエミッシブカラーに接続
- Textureは適当に画面に表示されているイメージを選択
- ライトマスのライトエミッタとみなすために、性的ライティングに笑みっ支部を使用にチェック
- ビルドするとテレビの光が落ちているように見えるとのこと
- 更にわかりやすく表示するには、ライティングのみにすれば良いとのこと
- しかし残念ながら光の影響を受けているようには見えず。しかしやり方はわかったので一旦良しとする
Dynamic GI
Light Propagation Volume(LPV)
メリット
- ランタイム
- ダイナミックオブジェクトを扱うことができる
- 余計なUVは必要なくなる
デメリット
- 高価(負荷が高い)
- 毎フレームGIを計算しているため
- 通常この手法の結果はベイクされたGIである以前のアプローチと比較してより近似化されているため品質や詳細度が低下する
ここからは使用方法の解説。といってもこの機能は使えそうにないためスキップ
最後に
Lightmapは静的なものに対するもののようですね。
メモ
- アウトライナでオレンジの点がついているものは movable 設定がされている
- アウトライナで黄色の点がついているものは stationary 設定がされている