33K Views
July 31, 16
スライド概要
2016年7月30日に行われたライセンシー様向けライトマス勉強会の資料です。(登壇者: (Epic Games Japan: 篠山範明) アーティストの方に向けて、UE4のライトビルドの仕組みをかみ砕いて説明しております。こちらはライトマップ編
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
Lightmass Deep Dive vol.1 Lightmap編 篠山 範明 Epic Games Japan Senior Support Engineer
Lightmap編
Lightmap編 の前に
Lightmassってなに?
Lightmassって何? Unreal Engine4が用いる 事前計算ライティングのアプリケーションです。
ライティングビルドの場所
押すと ライティングビルドが走ります
そして失敗したりします。
このときにUE4 Editorの裏で ライティング計算しているのが lightmassです。
ソースコードは公開 Program/UnrealLightmass
Lightmassの問題は? 大きく分けて三つ。
Lightmassの問題① クオリティ
Lightmassの問題② ビルド時間 平気で数時間単位にスケールする ライトビルド
Lightmassの問題③ 容量 Memory File Size
Lightmassの問題は? クオリティ ビルド時間 メモリサイズ
Lightmassの問題は? クオリティ ビルド時間 真茅さん メモリサイズ
Lightmassの問題は? クオリティ ビルド時間 SQEX 斎藤さん メモリサイズ
Lightmassの問題は? クオリティ ビルド時間 メモリサイズ これらを調整するためには、 ライトマスの動作の仕組みや設定方法を 最初に篠山が説明します。
Lightmassが出力するデータ Output Input Lightmass
Lightmassが出力するデータ Light Map Shadow Map Precomputed Light Volume (半透明用のシャドウマップもありますが、そちらは今回は触れません。。)
Light Map Shadow Map ③真茅さん Precomputed Light Volume
LightMapとShadowMapは アクター単位で持たれます。
Lightmapの実際に作られたテクスチャは、 World Settingsで見ることができます。
Light Map Shadow Map ④ SQEX斎藤 さん Precomputed Light Volume
ViewのメニューでDebug表示できます。
Light Map Shadow Map Precomputed Light Volume すみません。今回の講演では省きます。
Light Map Shadow Map Precomputed Light Volume すみません。今回の講演では省きます。 Shadow Mapを理解するためには、 その前に、Stationary Lightの挙動を理解する必要があります。
Stationary Lightの影については、 上記ブログが参考になります http://darakemonodarake.hatenablog.jp/entry/2015/12/16/UE4/Stationary
Light Map Shadow Map Precomputed Light Volume
Lightmap をベースに Lightmassの基本アルゴリズムを学ぶ
Lightmass -> Lightmap の流れを理解すれば、 他の二つは、 部分的な拡張として理解できます。
おしながき 1. Lightmassによる、Lightmap 作成アルゴリズム 2. Lightmap作成のためのLightmass設定方法
おしながき 1. Lightmassによる、Lightmap 作成アルゴリズム 2. Lightmap作成のためのLightmass設定方法
そのまえに注意点三つ
1. 説明するアルゴリズムは概要です。 概念の理解を最優先にしており不正確な部分もあります。 Lightmassの実際の実装を追っているエンジニアの方達は 回れ右してソースコードに戻ってください。 例えば、IrradiancePhoton, CacheOnSurface, IndirectPhotonPathなどについて触れておりません。 わかりやすさのためIndirectPhotonのEmitもDirectPhotonのEmitからシーケンシャルに行われるように説明し ております。
2. Lightmass debugging… これから、こういう非常に簡単な図が沢山でてきますが、 基本的にはUE3の名残の機能であり、現在正式サポートはしていないので 使い方などの説明は省きます。 アルゴリズム説明の際のイメージと捉えてください。
3. Base Scene これから、こういう非常に簡単な図が沢山でてきますが。。。
3. Base Scene このような、一面が開いたボックスの中に、 球体があるシーンをイメージしてください。
Lightmap作成の目標 ライトマップの各テクセルに 自身のライティング情報を格納する
具体的な挙動になる前に。。 ライティングを二つに分けます。 Direct Lighting Indirect Lighting
Direct Lighting Indirect Lighting
Direct Lighting Indirect Lighting
Direct Lighting ライトからの直接(Direct)のライティング 二次反射以降がないので影部分は黒い。
Direct Lighting Indirect Lighting
二次反射。照り返し。レフ版。 複数回バウンドしたライティング 直接光で届かない場所へ、光が回り込む。 Indirect Lighting
Direct Lighting Indirect Lighting
Direct Lighting Indirect Lighting
Direct Lighting Indirect Lighting では、 ライトマスがこの二つをどのように計算するかを 見ていこうと思いま。。。。。。
Direct Lighting Indirect Lighting しかし、 ライトによって計算の方法が変わります。
説明を更に二分します。 Photonを 出す Light OR Photonを 出さない Sky Light
これでこのようなマトリックスが出来ます。 Point Photonを Spot Directional 出す Light.. Light Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting Sky Light Photonを 出さない Sky Light
まずはこちらから。 Point Photonを Spot Directional 出す Light.. Light Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting Sky Light Photonを 出さない Light
Lightmap作成 アルゴリズム Point / Spot / Directional Light 編
Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting Sky Light Photonを出さない Sky Light
Photonを出す Light の Direct Lighting Direct Lightingは ライトへ、レイを飛ばして行います。 ※Photon Mappingは関与しない
Light のSource Radius でライトの大きさを変えられます。
Photonを出す Light の Direct Lighting ライトにレイを直接飛ばします。 影のボケなどはここで調整します。
Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting ライトに 直接レイを飛ばす Sky Light Photonを出さない Sky Light
Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting ライトに 直接レイを飛ばす Sky Light Photonを出さない Sky Light
Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting ライトに 直接レイを飛ばす Photon Mappingで シミュレーション Sky Light Photonを出さない Sky Light
Photon Mapping
Photon Mapping ライトからPhotonを放出し、 光の複数回バウンスをシミュレーションする。
ライトからPhotonを放出する
当たらないPhotonは消失
Photon Mapping 壁に衝突したフォトンは。。。
Photon Mapping 壁に留まり、反射(バウンス)を表す 新たなPhotonを放つ
バウンスしたら。。。
バウンスしたら。。。
更にバウンス
沢山のフォトンを沢山反射させ、 Indirect Lightingを実現する
Direct Photons
Indirect Photon Path
フォトンが蓄積されたので。。。
Lightmapのテクセルのライティングを 周りのPhotonから見積もってみる。
Lightmapのテクセルのライティングを 周りのPhotonから見積もってみる。
Photon Mapping preview (radius = 50cm)
Photon Mapping production (radius = 50cm)
Photonが足りない!!
設定をいじくりProductionよりも Photonの数を上げていく…
増やしていけばいずれたどりつけそうだけ ど。。。
いつになったらPhotonがたりるのでしょうか?
Photon Mapping Only このテクセルに届く Photonはどれくらいでしょう?
Photon Mapping Only (Direct Photon) ポイントライトから全方向にランダム
Photon Mapping Only (InDirect Photon) あたった面から。。。
Photon Mapping Only ? ? ? ? (InDirect Photon) あたった面から。。。 ランダムに反射する。
Photon Mapping Only 各テクセルを見積もるには不十分 PhotonMappingだけの場合、 非常に沢山のPhotonを放出し、 そのバウンスを計算しなければいけない。
Photon mapping
Final Gathering
Final Gathering Concept Photon Mappingだけならば 近傍のフォトンだけ。 これでは不十分なら。。。
Final Gathering Concept ? ? ? (InDirect Photon) あたった面から。。。 ランダムに反射するならば。。
Final Gathering Concept ? ? ? 逆に、各テクセルからレイを飛ばし、 もしもそのフォトンがこっちに飛んで きたなら、 どれぐらいの影響があるかを調べる。
Final Gathering Concept みずからレイを飛ばして、 遠くのフォトンからの影響 を調べにいく。 見るフォトンの数が増える。
Photon Mapping -> Final Gathering
Final Gathering テクセルからレイを飛ばし、 フォトンを自分から取りに行く。
Final Gathering
Photon Mapping -> Final Gathering すごいですね。Final Gathering
Photon Mapping -> Final Gathering かなり見え張りました。
Photon Mapping -> Final Gathering Production: ILQ 10 かなり見え張りました。
Photon Mapping -> Final Gathering Preview: ILQ 1 Production: ILQ 10 かなり見え張りました。
Photon Mapping -> Final Gathering Preview: ILQ 1 Production: ILQ 10 ビルド時間 体感でおよそ100倍
Final Gathering… 隣のテクセルとの整合性がないので、 サンプリングノイズが多発する。
正しく見積もるには 沢山のレイを出す必要がある。
Photon mapping Final Gathering
ちょっとAdvance…
Final Gathering Concept の時に、下のように説明しました。
本当は、 自身の近くの Photonは探索しません
これが正解。。。なぜ?
Direct Lightingは、 直接ライトへレイを飛ばして 計算するからです。 それと別に近傍のPhotonをとると。。。
実際は、Final Gatheringだけをし、自身の Photonの近傍を探索しません。 直接光成分を二回 計算してしまいます。
FGだけにすれば、 Direct Photonの影響を省けます。
Final Gathering
Photon mapping Final Gathering
Irradiance Caching
Irradiance Cachingコンセプト ファイナルギャザリングをすべ てのテクセルでやるのか。。。。 時間もかかるし。。。 ノイズが。。
Irradiance Cachingコンセプト 君たち、 間接光成分 だいたい一緒でしょ?
Irradiance Cachingコンセプト どこかFinal Gathering したら。。。
Irradiance Cachingコンセプト その情報をキャッシング
Irradiance Cachingコンセプト どこかFinal Gathering したら。。。
Irradiance Cachingコンセプト その情報をキャッシング
Irradiance Cachingコンセプト テクセルがもしもキャッシュに 十分に入っていたら。。。
Irradiance Cachingコンセプト 近くのキャッシュから見積もる
Only FG With IRC
近くのキャッシュから見積もる • キャッシュの半径は? • どのような補完が適切?
Irradiance Caching (Production)
Irradiance Caching (Preview)
Final Gathtering -> Irradiance Caching FG: Preview FG + IRC: Preview Previewだと探索半径が大きくなり、 ノイズが減るがディティールも消失
Photon mapping Final Gathering Irradiance Caching
Photonを出す Light の Indirect Lighting アルゴリズムまとめ
Photonを出す Light Scene Setup の Indirect Lighting 各テクセルに対して。。。 近くに十分な IRCある? Photon Mapping NO!! Final Gathering Irradiance Caching YES!! なら補完して 値を格納
Photonを出す Light の Indirect Lighting Photon Mappingを軸にした 様々なアルゴリズムで動いています。
Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting ライトに 直接レイを飛ばす Photon Mappingで シミュレーション Sky Light Photonを出さない Sky Light
Photonを出さない Sky Light編
Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting ライトに 直接レイを飛ばす Photon Mappingで シミュレーション Sky Light Photonを出さない Sky Light
SkyLight は360度無限遠方からの ライティングです。 SkyLight
Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting ライトに 直接レイを飛ばす Photon Mappingで シミュレーション Sky Light Photonを出さない Sky Light Final Gathering時に 直接参照
Final Gathering SkyLight
この青いレイ達。
Final Gathering SkyLight ? 少なくない??
例) Skylightだけのシーン にじみだらけ。
Final Gathering SkyLight ? こっちにレイを 飛ばしたい。
Lightmass Portal
Lightmass Portal Final Gatheringの再分割を強制させる。 SkyLight P o r t a l
Lightmass Portal Final Gatheringの再分割を強制させる。 SkyLight P o r t a l
Lightmass Portal Final Gatheringの再分割を強制させる。 SkyLight P o r t a l
実際にレイを見てみます
Lightmass Portal なし vs あり
Lightmass Portal なし vs あり
例) Skylight+Portalのシーン にじみがなくなる。
Lightmass Portal なし vs あり LightmapのPaddingの問題が。。。
Photonを出さない Sky Light の Direct Lighting Skylightで屋内を照らす際、 Final GatherでSkylightを 重点的にサンプリングできるように、 Lightmass Portalを窓などに配置しましょう。
Lightmap作成のまとめ Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting ライトに 直接レイを飛ばす Photon Mappingで シミュレーション Sky Light Photonを出さない Sky Light Final Gathering時に 直接参照
Lightmap作成のまとめ Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting ライトに 直接レイを飛ばす Photon Mappingで シミュレーション Sky Light Photonを出さない Sky Light Final Gathering時に 直接参照
Sky LightはPhotonを放出しない SkyLight
けど間接光は出したい。 SkyLight
Scene Setup 各テクセルに対して。。。 近くに十分な IRCある? Photon Mapping NO!! Final Gathering Mini Final Gather For Sky Lights Irradiance Caching YES!! なら補完して 値を格納
本来のFinal Gatheringの前に… SkyLight
本来のFinal Gatheringの前に、 SkyLight用の非常に小さなFinal Gatheringをシー ンで行い、キャッングしておく。 SkyLight Cache!
本来のFinal Gatheringの前に、 SkyLight用の非常に小さなFinal Gatheringをシー ンで行い、キャッングしておく。 SkyLight
本来のFinal Gatheringの前に、 SkyLight用の非常に小さなFinal Gatheringをシー ンで行い、キャッングしておく。 SkyLight
本来のFinal Gatheringのとき、 SkyLight
本来のFinal Gatheringのとき、 前もってキャッシュしておいたSkyLightの情報を 取得してそこからの照り返しを計算する。 SkyLight
example スカイライトのみで照らしたシーン
example 天井に、地面の照り返しが来てるのがわかるかと思います。
問題点 Skylightの二次以上の反射を取れない ここのSkylightingの事前キャッシュの値は? SkyLight
問題点 Skylightの二次以上の反射を取れない ここのSkylightingの事前キャッシュの値は0 SkyLight
問題点 Skylightの二次以上の反射を取れない この周辺の事前キャッシュのライティング値は0 SkyLight
問題点 Skylightの二次以上の反射を取れない SkyLight この時に、こんなオブジェクトがあったとします
問題点 Skylightの二次以上の反射を取れない SkyLight Final Gathering!!!
問題点 Skylightの二次以上の反射を取れない SkyLight Final Gathering!!! してもサンプリングするのは闇
example
example
example まっくろ。
Photonを出さない Sky Light の Indirect Lighting どんなに設定を上げても、 二次以降のバウンスは存在しない
Lightmap作成アルゴリズムのまとめ Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting Sky Light Photonを出さない Sky Light ライトに 直接レイを飛ばす Final Gathering時に 直接参照 Photon Mappingで シミュレーション Final Gathering前に 事前キャッシュ (二次以降バウンスなし)
Scene Setup 各テクセルに対して。。。 近くに十分な IRCある? Photon Mapping NO!! Final Gathering Mini Final Gather For Sky Lights Irradiance Caching YES!! なら補完して 値を格納
おしながき 1. Lightmassによる、Lightmap 作成アルゴリズム 2. Lightmap作成のためのLightmass設定方法
おしながき 1. Lightmassによる、Lightmap 作成アルゴリズム 2. Lightmap作成のためのLightmass設定方法
Lightmass.ini Lightmassの設定パラメータファイル • Engine/Config/BaseLightmass.iniにLightmassの設定があります。 • Game/Config/DefaultLightmass.ini などを記載することでゲームで上書きできます。 • Lightbuild時に毎回参照されるので、パラメータを変えても、再起動 する必要はありません。
Lightmass.ini Lightmassの設定パラメータファイル • 問題は、そのパラメータが150個以上あること。 • Photon Mappingのパラメータだけでもこれぐらいあります。
いやですよね。
パラメータを一括で調整する機能が エディタにあります。 • World Settingsの “Lightmass”タブ 特に、一番重要かつよく触るであろう上記4パラメータ を本日は説明します。
ここでは、それらがアルゴリズムにどのように 影響していくかを説明します。
真茅さんが次の講演で これらがどのように 絵作りに影響をあたえるのかを、 実際のシーンで説明してくれます。
大前提: Lightmass Importance Volume Photonの放出範囲などを決める大事なもの。 ないと、UE4が大きさを自動で判断するが、 基本的には使い物にならないと思ってよい
必要な設定項目を振り返る Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径
World Settings: Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径
World Settings: Static Lighting Level Scale Lightmass内部のWorld Grid. どれぐらいスケール するかを設定する。 小さくすればするほど ビルド時間が激増します。 Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径
World Settings: Static Lighting Level Scale SLLS = 1.5 SLLS = 0.5 SLLSを小さくすると、Irradiance Cacheの半径も小さく なりFGすべきサンプルが増えます。 ディティールが向上しますが、 それだけビルド時間が増えます。
World Settings: Num Indirect Lighting Bounces (NILB) Photonが何回反射するか?そ の最大数を設定できる。 Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径
World Settings: Num Indirect Lighting Bounces (NILB) このサンプルシーンで確認してみる。 マーキングされているテクセルが参照するフォトンの バウンスを確認
World Settings: Num Indirect Lighting Bounces (NILB) 0th Bounce (Direct Photon)
World Settings: Num Indirect Lighting Bounces (NILB) 1st Bounce
World Settings: Num Indirect Lighting Bounces (NILB) 2nd Bounce
World Settings: Num Indirect Lighting Bounces (NILB) 3rd Bounce
World Settings: Num Indirect Lighting Bounces (NILB) 4th Bounce
World Settings: Num Indirect Lighting Bounces (NILB) 50th Bounce
World Settings: Num Indirect Lighting Bounces (NILB) Direct Photon 1st Bounce 1回目のバウンスでフォトンが激減するので、 ビルド時間への影響が少ない
World Settings: Num Indirect Lighting Bounces (NILB) Photonが何回反射するか?そ の最大数を設定できる。 こちらは数を上げてもビルド時 間にさほど影響しない。 基本は固定値で5とかにしてお けば問題ないかと。 Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径
World Settings: Indirect Lighting Quality (ILQ) Final Gather 時のサンプリング のレイの総数を決める際、この 値が掛け算される。 ビルド時間は増大するが、 にじみやノイズの除去につなが る Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径
World Settings: Indirect Lighting Quality (ILQ) ILQ=1 ILQ=3
World Settings: Indirect Lighting Quality (ILQ) ILQ=1 ILQ=3
World Settings: Indirect Lighting Smoothness (ILS) Irradiance Cachingのキャッシュ 半径を制御する 値を大きくすることで、ビルド時 間は減り、にじみが解消されるが、 逆に、ディティールが減る可能性 がある。 Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径
World Settings: Indirect Lighting Smoothness (ILS) ILS=2.5 ILS=0.25
World Settings: Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径
Build Lighting: Lighting Quality Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径
Build Lighting: Lighting Quality 最大バウンス回数以外の全てのクオリティを上げる。 Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径
Build Lighting: Lighting Quality Preview Production Final Gatherのレイが増大
Build Lighting: Lighting Quality Preview Production 放出Photonもしてるのがわかります
Build Lighting: Lighting Quality Preview Production Irradiance Cacheの半径も縮小
おしながき 1. Lightmassによる、Lightmap 作成アルゴリズム 2. Lightmap作成のためのLightmass設定方法
まとめ
LightmassのLightmap作成まとめ 間接光を出すために、 Lightmassは Photon Mappingを軸とした アルゴリズムを使用している。 SkylightはPhotonを発しないため、 作法や効果が異なる World SettingsやBuild Qualityで 内部パラメータの調整が可能。
真茅さんへGo!!