6.9K Views
September 26, 18
スライド概要
UE4のライトビルドシステムであるライトマスの内部挙動について、イラストにてなるべくかみ砕いて説明しております。ライトマップ編
アルゴリズム説明にフォーカスしております、実際のパラメータの設定で何が変更されるかは、本公演のVol.2を参考にしていただければと思います。
https://www.slideshare.net/EpicGamesJapan/lightmass-deep-dive-2018-vol-2-lightmaplightmass/EpicGamesJapan/lightmass-deep-dive-2018-vol-2-lightmaplightmass
※こちらは2016年に行った""Lightmass Deep Dive""の2018年度版になります。
Original Slide: https://www.slideshare.net/EpicGamesJapan/lightmass-lightmap-epic-games-japan
(Epic Games Japan: 篠山範明)
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
Lightmass Deep Dive 2018 Vol.1 Lightmass内部アルゴリズム概要(Lightmap編) Nori Shinoyama Epic Games Japan / Support Manager
目次 1. はじめに 2. Static Lightingを4種類に分類 3. ライトマスで使われるアルゴリズム各種 ※UE4.20での実装について説明しています
#1 はじめに
注意点1: このスライドはあくまで概要です。 概念の理解を最優先にしており不正確な部分もあります。 Lightmassの実際の実装を追っているエンジニアの方達は 回れ右してソースコードに戻ってください。 例えば、IrradiancePhoton, CacheOnSurface, IndirectPhotonPathなどについて触れておりませ ん。わかりやすさのため IndirectPhotonのEmitもDirectPhotonのEmitからシーケンシャルに行われ るように説明しております。
注意点 2: Debug Info of LIghtmass... これから、このような非常に簡単な図が沢山でてきますが、 基本的にはUE3の名残の機能であり、 現在正式サポートはしていないので使い方などの説明は省きます。 アルゴリズム説明の際のイメージと捉えてください。
注意点 3: とても簡素な絵での説明が続きます 非常にシンプルな図で恐縮ですが、 右図のような空間をイメージして頂けますと幸いです。
#2 Static Lightingを4種類に分類
初めに、Lightingを直接光と間接光に分けます Direct Lighting Indirect Lighting
直接光 (Direct Lighting) ライトからの直接(Direct)のライティング 二次反射以降がないので影部分は黒い。
間接光 (Indirect Lighting) 二次反射。照り返し。複数回バウンドしたライティング 直接光で届かない場所へも、光が回り込む。
Lightingの種類によって分割... Direct Lighting 1 3 Indirect Lighting 2 4
更に、LightがPhotonを出すかによって二種類に分けられます Lights emitting photons OR Lights NOT emitting photons
この4種類に対してそれぞれ設定ができるので見ていきます。 Lights emitting photons Lights NOT emitting photons Direct Lighting 1 3 Indirect Lighting 2 4
#3 ライトマスで使われるアルゴリズム各種
Lights emitting photons Lights NOT emitting photons Direct Lighting 1 3 Indirect Lighting 2 4
Direct Lighting from Lights emitting photons (Point/Spot/Directional/Rect) Photonを出すライトからの直接光
Photonを出すライトからの直接光 Direct Lightingは、 ライトの方向へレイを直接飛ばして行います。 ※Photon Mappingは関与しない .
ライトの大きさの設定 Light のSource Radius でライトの大きさを変えられます。
ライトの大きさの設定 Light のSource Radius でライトの大きさを変えられます。 Source Radius = 100 Source Radius = 400
ライトの大きさの設定 Light のSource Radius でライトの大きさを変えられます。 ライトの大きさにより、影が変わるのがわかるかと思います Source Radius = 100 Source Radius = 400
Lights emitting photons Lights NOT emitting photons Direct Lighting ライトに直接レイを飛ばす 3 Indirect Lighting 2 4
Lights emitting photons Lights NOT emitting photons Direct Lighting ライトに直接レイを飛ばす 3 Indirect Lighting 2 4
Indirect Lighting from Lights emitting photons (Point/Spot/Directional/Rect) Photonを出すライトからの間接光
Lights emitting photons Lights NOT emitting photons Direct Lighting ライトに直接レイを飛ばす 3 Indirect Lighting Photon Mapping でシミュレーション 4
間接光計算のための主なアルゴリズム3つ Photon Mapping Final Gathering Irradiance Caching
まずはPhoton Mappingから Photon Mapping Final Gathering Irradiance Caching
Photon Mappingとは ライトから”Photon”を放出し、 光の複数回バウンスをシミュレートする
Photon Mapping ライトからPhotonを放出する
Photon Mapping 当たらないPhotonは消失
Photon Mapping 壁に衝突したPhotonは。。。
Photon Mapping 壁に留まり、反射(バウンス)を表す新たなPhotonを放つ
Photon Mapping 新しいPhotonもどこかにぶつかったら。。。
Photon Mapping 新しいPhotonもどこかにぶつかったら。。。
Photon Mapping 更にバウンス。
Photon Mapping 沢山のPhotonを沢山反射させ、 光が回り込む間接光をシミュレートする。
Direct Photons
Indirect Photon Paths
Photon Mapping シーンがPhotonで満たされたら。。。
Photon Mapping 各Lightmapのテクセルは近辺のPhotonから 自身のライティングを見積もる。。。試してみると。。。
Only Photon Mapping Lighting Quality: Preview
Only Photon Mapping Lighting Quality: Production
photonが足りない!!
Only Photon Mapping 設定をいじくりProductionよりもPhotonの数を上げていく…
Only Photon Mapping 設定をいじくりProductionよりもPhotonの数を上げていく…
徐々にクオリティは高くなっていくが。。 いつになったらPhotonが足りるのか。。。
Only Photon Mapping このテクセルに届く Photonはどれくらいでしょう?
Only Photon Mapping (Direct Photons) Point Lightから放出されたものの一部
Only Photon Mapping (Indirect Photons) Photonがどこかにあたって。。。
Only Photon Mapping ? ? ? ? (Indirect Photons) Photonがどこかにあたって。。。 テクセルに届くかも。。。
Only Photon Mapping PhotonMappingだけの場合、 非常に沢山の Photonを放出し、 そのバウンスを計算しなければいけない。 それは非常にコストが高い。
Photon Mapping Final Gathering Irradiance Caching
Photon Mapping Final Gathering Irradiance Caching
Final Gathering 近傍のPhotonの探索だけでは不十分。。。
Final Gathering ? ? ? 逆に、各テクセルからレイを飛ばし、 もしもそのPhotonがこっちに飛んできたならば どれくらいの影響があるかを調べる。
Final Gathering みずからレイを飛ばして、 遠くのフォトンからの影響を調べにいく。 見るフォトンの数が増える。
Final Gathering あるテクセルから発せられた Final GatherのRayの視覚化 黄色はどこかにヒットした Ray。 青は無限遠に消失 (もしくはSkylightにヒット)したもの
Final Gathering 見違えるような結果のFinal Gathering….ですが... Photon Mapping -> Final Gathering
Final Gathering レイの数が少ないと大量のノイズを生みます。解決するためにレイの数を増やすとビ ルド時間が非常に長くなる危険性があります。 Preview: ILQ 1 Production: ILQ 10
Final Gathering 各テクセルが独立してレイを飛ばすので、 近隣のテクセルの相関がありません。 なのでレイの数が少ないと沢山のノイズが発生してしまいます。
Photon Mapping Final Gathering Irradiance Caching
Photon Mapping Final Gathering Irradiance Caching
Irradiance Caching ファイナルギャザリングを すべてのテクセルでやるのか。。。。 時間もかかるし。。。 ノイズが。。。
Irradiance Caching 君たち、間接光成分だいたい一緒でしょ?
Irradiance Caching どこかFinal Gathering したら。。。
Irradiance Caching その情報をキャッシング
Irradiance Caching どこかFinal Gathering したら。。。
Irradiance Caching その情報もキャッシング
Irradiance Caching テクセルがもしもキャッシュに十分に入っていたら 近くのキャッシュから見積もる。 そのテクセルは Final Gatherしないので高速
Irradiance Caching Irradiance CacheによってFinal Gatherのノイズが軽減 Only Final Gather With Irradiance Caching
Irradiance Caching 設定によって、各キャッシュの数と大きさ、補間の度合いなどを調整可能 Preview Production
Irradiance Caching ノイズを除去しかつ高速化されるが、あまりに大きな補間を行うとディティールが なくなるので注意が必要 Preview Production
Photon mapping Final Gathering Irradiance Caching
Photon mapping Final Gathering Irradiance Caching
Lightmass内部の間接光計算のアルゴリズム概要 Scene Setup Each texel... Photon Mapping 近くのIRCから 補間可能? YES!! 値を補間してテクセルに格納し、 次のテクセル計算へ NO!! Final Gathering Irradiance Caching (IRC)
Lights emitting photons Lights NOT emitting photons Direct Lighting ライトに直接レイを飛ばす 3 Indirect Lighting Photon Mapping でシミュレーション 4
Lights emitting photons Lights NOT emitting photons Direct Lighting ライトに直接レイを飛ばす 3 Indirect Lighting Photon Mapping でシミュレーション 4
Direct Lighting from Lights NOT emitting photons (Sky Light) Photonを出さないライトからの直接光
Skylightからの直接光 Skylightは360度無限遠からのライティングです SkyLight
Skylightからの直接光 Skylightからの直接光はFinal Gatheringの時に計算されます。 SkyLight
Skylightからの直接光 この青いレイ達がSkyLightにヒットしたレイです (Skylightがなければ無限遠に消失したという意味になります)
Skylightからの直接光 SkyLight ? これだけのレイで十分??
Skylightからの直接光 悪い例) Skylightからのみのライティング。にじみだらけ。
Skylightからの直接光 SkyLight ? SkyLightに向けてもっとレイが欲 しい!
Lightmass Portal
Lightmass Portal Final Gatheringの再分割を強制させる SkyLight Portal
Lightmass Portal Final Gatheringの再分割を強制させる SkyLight Portal
Lightmass Portal 例として実際に各テクセルのFinal Gatheringのレイの数を見てみる
Lightmass Portal No Lightmass Portal With a Lightmass Portal
Lightmass Portal No Lightmass Portal With a Lightmass Portal
Lightmass Portal No Lightmass Portal With a Lightmass Portal Please ignore the lightmap padding error...
Lights emitting photons Lights NOT emitting photons Direct Lighting ライトに直接レイを飛ばす Final Gathering時に 直接参照 Indirect Lighting Photon Mapping でシミュレーション 4
Lights emitting photons Lights NOT emitting photons Direct Lighting ライトに直接レイを飛ばす Final Gathering時に 直接参照 Indirect Lighting Photon Mapping でシミュレーション 4
Indirect Lighting from Lights NOT emitting photons (Sky Light) Photonを出さないライトからの間接光
Skylightの間接光 SkylightはPhotonを出さない。。。 SkyLight
Skylightの間接光 しかし、Skylightからも間接光は出したい SkyLight
Lightmass内部の間接光計算のアルゴリズム概要 Scene Setup Each texel... Photon Mapping 近くのIRCから 補間可能? !! ! w Mini Iterative e N Final Gather & Irradiance Caching For Skylights YES!! 値を補間してテクセルに格納し、 次のテクセル計算へ NO!! Final Gathering Irradiance Caching (IRC)
Skylightの間接光 Photon Mappingなどの前に、Final GatherをしてSkylightからのライ ティングをキャッシュしておく SkyLight Cache!
Skylightの間接光 Photon Mappingなどの前に、Final GatherをしてSkylightからのライ ティングをキャッシュしておく SkyLight
Skylightの間接光 複数回のバウンスを表現するために、FG&IRCを指定したバウンス回数 まで繰り返す。 SkyLight
Skylightの間接光 複数回のバウンスを表現するために、FG&IRCを指定したバウンス回数 まで繰り返す。 SkyLight
Skylightの間接光 “Num Sky Lighting Bounces”で反復回数を指定
Skylightの間接光 “Num Sky Lighting Bounces”で反復回数を指定 0 (Direct Lihgting Only) 1 2
Advanced: Emissive Light Emissiveにより自己発光しているStatic Objectは、 Lightmass内部で光源として扱うことができます。
Advanced: Emissive Light しかし、Skylightと同様にEmissive LightもPhotonを出せません。
Advanced: Emissive Light Emissive Lightのライティングは、 Skylightと同様にFinal Gatheringを基準に行われます。
Advanced: Emissive Light なので”Num Sky Lighting Bounces”はEmissive Lightにも効きます
Advanced: Emissive Light Num Sky Lighting Bounces = 0 Num Sky Lighting Bounces = 3
Tips: Emissive light にも効く Lightmass portal 小さな Emissive LightはFInal Gather時にヒットせず、 参照されないこともあります。。
Tips: Emissive light にも効く Lightmass portal 結果、非常にノイズが多いLightmapを生成する可能性があります
Tips: Emissive light にも効く Lightmass portal ノイズを軽減する方法として、そのEmissive Lightよりも大きなLightmass Portal で囲ってあげる方法があります Lightmass Portal
Tips: Emissive light にも効く Lightmass portal Lightmass Portalにさえ当たれば、Final Gatheringのレイの分割が行われ、結 果Emissive Lightにレイがヒットしやすくなります Lightmass Portal
Tips: Emissive light にも効く Lightmass portal No Lightmass Portal With Lightmass Portal
Lights emitting photons Lights NOT emitting photons Direct Lighting ライトに直接レイを飛ばす Final Gathering時に 直接参照 Indirect Lighting Photon Mapping でシミュレーション Skylight専用の FG&IRC を複数回繰り返す
Summary
Lightingの種類とLightの種類で4項目に分類 Lights emitting photons Lights NOT emitting photons Direct Lighting ライトに直接レイを飛ばす Final Gathering時に 直接参照 Indirect Lighting Photon Mapping でシミュレーション Skylight専用の FG&IRC を複数回繰り返す
Photon Mappingを軸にした間接光表現のためのアルゴリズム Photon mapping Final Gathering Irradiance Caching
Lightmass内部の間接光計算のアルゴリズム概要 Scene Setup Each texel... Photon Mapping 近くのIRCから 補間可能? !! ! w Mini Iterative e N Final Gather & Irradiance Caching For Skylights YES!! 値を補間してテクセルに格納し、 次のテクセル計算へ NO!! Final Gathering Irradiance Caching (IRC)
Thank you for your time!