今回は、Unreal Engineのライトの基礎的な部分について紹介します。
UE5では、Lumenという強力な機能が追加され、UE4と比べてより直感的に、簡単にライティングすることができるようになりました。
今後は、Lumenを使ったライティングが主流になるかと思いますが、ここではライトベイク(ライトビルド)について特に触れたいと思います。
何故かと言うと、Lumenは強力な機能ですが、UE5EAの時点で、まだ対応していないものもあり、ライトベイクと比べて完全ではないからです。
なので、必ずしもライトベイクが必要なわけではありませんが、処理負荷の低い綺麗なライティングをするのにも、ライトの基礎を紹介するのにも、ライトベイクは、ゲームエンジンにおいて、まだ重要な部分だと思います。
また、この記事は、UE4、UE5を使ったことのない方にもわかるように基本的な使い方を説明していくという趣旨があるので、それに沿うという意味でも紹介したいと思います。
より詳しい部分は、既にUE4での色々な記事などがあり、UE5でも共通な部分なので、省きますが、この記事では、基本的な知っておいた方が良いと思う部分を紹介したいと思います。
ライトベイク とは?
端的に言うと、ライトの照明効果や影の情報を事前に計算しておくことです。
計算して、その情報をテクスチャにして、使います。
この計算して、情報をテクスチャにすることをベイク(焼き込む)と言います。
このライトベイクで得たテクスチャを「ライトマップ」と言ったりもいます。
Substanceなどであるベイクと同じようなものです。
アンリアルエンジンでは、「ライトビルド」(こちらの方がUE5では一般的)とも言ったりします。
単に「ベイク」「ビルド」と言うこともありますが、他の意味とも被るので、気を付けてください。
なぜ、わざわざこんなことをするかと言うと
オブジェクトを照らしたり、影を落としたりなどのライトの計算は重く、処理負荷が高くなります。
ゲームなどのリアルタイムコンテンツでは、30FPS以上などが求められるので、ライトの計算量を減らして、少しでも軽くして、処理速度(FPS)を上げる工夫の一つとしてライトベイクがあります。
しかし、シーンが複雑なるほど、ライトが増えるほど、ライトベイクにかかる時間は増えます。
また、正しいライティングの結果を得るには、(後述のMobilityにもよりますが)ライトを動かしたり、設定を変える度に、再度ライトベイクをする必要があります。
ライトベイク(ライトビルド)のやり方
Unreal Engineでは、Lightmassというライトビルドをするための機能が備わっています。
単純な使い方は、とても簡単で
上部のメニューの「Build」から「Build All Levels」または「Build Lighting Only」をクリックすることでライトビルドの計算が始まり、ベイクされます。
このように単純にライトビルドをするのは簡単なのですが、綺麗なライティングをするには、Lightmassの設定やメッシュのライトマップの設定など様々な設定を行う必要があります。
それについては、既にUE4で出ている情報がそのまま役に立つので、そちらを紹介します。
また、UE4.26辺りから「GPU Lightmass」というのも登場しました。
前述のLightmassは、CPUで計算するのに対して、こちらは名前の通りでGPUで計算します。
プラグインを有効にすることで使用することができます。
NVIDIAのRTXのGPUが必要だったりしますが、より早く計算することができます。
ライトのMobility(可動性)とライトビルド
実際にライトベイクのやり方などを説明する前にライトについて少し紹介します。
ライトの種類や細かな設定項目の意味などUE4の公式ドキュメントがそのまま役に立つので、省きますが、Mobilityに関してだけ、ここでも説明したいと思います。
Mobilityとは何かといいますと、Detailsにあるこれです。
この「Static」「Stationary」「Movable」の3つのどれを選択するかで、ライトの挙動や処理負荷が変わります。
違いをざっくり説明すると、以下のような感じです。
Static | Stationary | Movable |
---|---|---|
ライトビルドで直接光、GI、影の情報がベイクされる | 基本的には、Staticと同じだが、ライトの色と強さは再度ベイクしなくても変更できる | 全ての情報がベイクされない→ベイクの必要がない。 |
パラメーターの変更、移動後は、再度、ベイクが必要 | GI(間接光)はベイクされるので、間接光もちゃんと変更したい場合はベイクが必要 | GI(間接光)がない |
全ての情報がベイクで表現されるので一番軽い | 5個以上重ねられない(5個目以降は、自動的にMovableに) | 一番重い |
まず、Staticは、全ての情報がライトビルドをすることでライトマップにベイクされます。
なので、一番軽いですが、ライトの設定やStaticなメッシュの位置など変更を加える度に再度、ベイクが必要になります。
こちらは、閉ざされたシンプルな真っ暗な空間にStaticなポイントライトを1つ置いた状態です。
Staticなので、ビルドしないとプレビューの状態で、正しいライティングの結果は得られません。
以下の画像は、上記のポイントライト1つの状態でライトビルドした結果です。
※なるべく綺麗な状態にするためにいくつかの設定を調整しています。
しかし、金属部分が黒くなってしまいました。
これは、スタティックライトの特徴の1つで、Staticライトは、そのライトによるスペキュラ(反射)は、ベイクに含まれません。
なので、これを解決するには、Reflection Captureというものを置く必要があります。
これは、環境を360°キャプチャして、それを反射として使うというものです。
続いて、Stationaryですが、色やライトの強さなどを変えることはできますが、間接光は変化しません。
以下の画像は、ライトの色を赤にしてベイクしたものですが、ベイク後に色を変えると直接光は変わりますが、間接光部分の赤色は変わりません。
間接光も正しく計算したい場合は、ベイクし直す必要があります。
ちなみにStationaryとMovableは、そのライトによるスペキュラは、Reflection Captureがなくても表示されます。
続いて、Movableですが、こちらはライトビルドの計算に含まれないので、完全にリアルライムに変更を加えることができます。
しかし、StaticやStationaryでベイクした時と見た目が異なります。
これは、Movableライトは、間接光が計算、表示されないからです。
直接光のみで、影部分は完全に黒になってしまっています。
前述の十営間接光、GIを表現したい場合は、基本的には
- ライトビルドをする
- Screen Space Global Illumination(SSGI)を使う
- Ray Tracing Global Illuminationを使う
- Lumenを使う
のいずれかになってくると思います。
ここまでめんどうそうなライトビルドとMobilityについて説明してきましたが、UE5では、最後のLumenを使ったライティングが一般的になるかと思います。
Lumenについて
ライトビルドでは、ライトを配置して、ビルドして待って…という流れであったり、Movableでは、GIがないと言ったことを説明しましたが
Lumenは、事前計算なしで完全にリアルタイムに間接光も計算される状態でライティングをすることができます。
※的確には、ディスタンスフィールドの計算があったりしますが、ライトの配置やライティングの結果の表示は、待ち時間はなく、リアルタイムで行えます。
なので、これまでは、GIもある状態でシームレスにライティングを変化させると言ったことが難しかったですが、ライトの向きや色、強さなどを変えるだけで、簡単にそれができるようになりました。
Movableライトでも間接光があります。
このように難しい設定をあまりせずとも綺麗な結果を得ることができます。
LumenのTipsなどを紹介した記事もありますので、ぜひご覧ください!
まとめ
今回は、ライト、ライティングの基礎的な部分のライトベイクとライトのMobilityについて特に紹介しました。
Mobility(可動性)についてまとめると
- Static(スタティック):移動や設定を変更した際は、ビルドが必要だが、一番軽量なライト。
- Stationary(ステーショナリー):色や強さなどを変更できるが、間接光は変わらず、ビルドし直す必要がある。
- Movable(ムーバブル):色の変更や移動も可能だが、間接光がない。
という違いがあります。
正直、Lumenもどんどん進化して、この記事で紹介したことは、必要なくなる可能性もありますが、ゲームエンジンでのライティングの基本的な部分であり、重要な部分で、プリレンダーを使っている方などは、あまり馴染のない部分だと思ったので紹介してみました!
IBL(イメージ ベースド ライティング)のやり方もこちらで解説しているので、あわせてご覧ください。
その他のUE5の基本的な機能などは、こちらで解説していますので、よろしければご覧ください!
最後までご覧頂きありがとうございました!
コメント