Upload
-epic-games-japan
View
6.310
Download
6
Embed Size (px)
Citation preview
Lightmass Deep Divevol.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 が出力するデータ
Lightmass
InputOutpu
t
Lightmass が出力するデータ
LightMap
ShadowMap
PrecomputedLight
Volume
(半透明用のシャドウマップもありますが、そちらは今回は触れません。。)
LightMap
ShadowMap
PrecomputedLight
Volume
③ 真茅さん
LightMap と ShadowMap はアクター単位で持たれます。
Lightmap の実際に作られたテクスチャは、World Settings で見ることができます。
LightMap
ShadowMap
PrecomputedLight
Volume
④ SQEX 斎藤さん
View のメニューで Debug 表示できます。
LightMap
ShadowMap
PrecomputedLight
Volume
すみません。今回の講演では省きます。
LightMap
ShadowMap
PrecomputedLight
Volume
すみません。今回の講演では省きます。Shadow Map を理解するためには、その前に、 Stationary Light の挙動を理解する必要があります。
Stationary Light の影については、上記ブログが参考になりますhttp://darakemonodarake.hatenablog.jp/entry/2015/12/16/UE4/Stationary
LightMap
ShadowMap
PrecomputedLight
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
Photon を出さないSky Light
OR
これでこのようなマトリックスが出来ます。Point SpotDirectionalLight..
Sky Light
Direct Lighting
Indirect Lighting
Direct Lightin
gIndirect Lightin
g
Photon を出すLight
Photon を出さないSky Light
まずはこちらから。Point SpotDirectionalLight..
Sky Light
Direct Lighting
Indirect Lighting
Direct Lightin
gIndirect Lightin
g
Photon を出すLight
Photon を出さないLight
Lightmap 作成アルゴリズムPoint / Spot / Directional Light 編
Point SpotDirectionalLight..
Sky Light
Direct Lighting
Indirect Lighting
Direct Lighting
Indirect Lighting
Photon を出すLight
Photon を出さないSky Light
Direct Lighting はライトへ、レイを飛ばして行います。※ Photon Mapping は関与しない
Direct LightingPhoton を出す Light の
Light の Source Radius でライトの大きさを変えられます。
ライトにレイを直接飛ばします。影のボケなどはここで調整します。
Direct LightingPhoton を出す Light の
Point SpotDirectionalLight..
Sky Light
Direct Lighting ライトに
直接レイを飛ばすIndirect Lighting
Direct Lighting
Indirect Lighting
Photon を出すLight
Photon を出さないSky Light
Point SpotDirectionalLight..
Sky Light
Direct Lighting ライトに
直接レイを飛ばすIndirect Lighting
Direct Lighting
Indirect Lighting
Photon を出すLight
Photon を出さないSky Light
Point SpotDirectionalLight..
Sky Light
Direct Lighting ライトに
直接レイを飛ばすIndirect Lighting Photon Mapping で
シミュレーション
Direct Lighting
Indirect Lighting
Photon を出す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
かなり見え張りました。Production: ILQ 10Preview: ILQ 1
Photon Mapping -> Final Gathering
ビルド時間 体感でおよそ 100 倍Production: ILQ 10Preview: ILQ 1
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
Preview だと探索半径が大きくなり、ノイズが減るがディティールも消失FG + IRC: PreviewFG: Preview
Photon mapping
Final Gathering
IrradianceCaching
アルゴリズムまとめ
Indirect LightingPhoton を出す Light の
Final Gathering
Irradiance Caching
各テクセルに対して。。。
近くに十分なIRC ある?
NO!!
YES!!なら補完して値を格納Photon Mapping
Scene Setup
Indirect LightingPhoton を出す Light の
Photon Mapping を軸にした様々なアルゴリズムで動いています。
Indirect LightingPhoton を出す Light の
Point SpotDirectionalLight..
Sky Light
Direct Lighting ライトに
直接レイを飛ばすIndirect Lighting Photon Mapping で
シミュレーション
Direct Lighting
Indirect Lighting
Photon を出すLight
Photon を出さないSky Light
Photon を出さないSky Light 編
Point SpotDirectionalLight..
Sky Light
Direct Lighting ライトに
直接レイを飛ばすIndirect Lighting Photon Mapping で
シミュレーション
Direct Lighting
Indirect Lighting
Photon を出すLight
Photon を出さないSky Light
SkyLight は 360 度無限遠方からのライティングです。SkyLight
Point SpotDirectionalLight..
Sky Light
Direct Lighting ライトに
直接レイを飛ばすFinal Gathering 時に
直接参照Indirect Lighting Photon Mapping で
シミュレーション
Direct Lighting
Indirect Lighting
Photon を出すLight
Photon を出さないSky Light
Final Gathering
SkyLight
この青いレイ達。
Final Gathering
SkyLight
?少なくない??
例 ) Skylight だけのシーンにじみだらけ。
Final Gathering
SkyLight
?こっちにレイを飛ばしたい。
Lightmass Portal
Lightmass PortalFinal Gathering の再分割を強制させる。
SkyLight
Portal
Lightmass PortalFinal Gathering の再分割を強制させる。
SkyLight
Portal
Lightmass PortalFinal Gathering の再分割を強制させる。
SkyLight
Portal
実際にレイを見てみます
Lightmass Portal なし vs あり
Lightmass Portal なし vs あり
例 ) Skylight+Portal のシーンにじみがなくなる。
Lightmass Portal なし vs あり
Lightmap の Padding の問題が。。。
Skylight で屋内を照らす際、Final Gather で Skylight を
重点的にサンプリングできるように、Lightmass Portal を窓などに配置しましょう。
Direct LightingPhoton を出さないSky Light の
Lightmap 作成のまとめPoint SpotDirectionalLight..
Sky Light
Direct Lighting ライトに
直接レイを飛ばすFinal Gathering 時に
直接参照Indirect Lighting Photon Mapping で
シミュレーション
Direct Lighting
Indirect Lighting
Photon を出すLight
Photon を出さないSky Light
Lightmap 作成のまとめPoint SpotDirectionalLight..
Sky Light
Direct Lighting ライトに
直接レイを飛ばすFinal Gathering 時に
直接参照Indirect Lighting Photon Mapping で
シミュレーション
Direct Lighting
Indirect Lighting
Photon を出すLight
Photon を出さないSky Light
Sky Light は Photon を放出しない
SkyLight
けど間接光は出したい。
SkyLight
Final Gathering
Irradiance Caching
各テクセルに対して。。。
近くに十分なIRC ある?
NO!!
YES!!なら補完して値を格納Photon Mapping
Scene Setup
Mini Final GatherFor Sky Lights
New!!!
本来の 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 の二次以上の反射を取れない
SkyLightここの Skylighting の事前キャッシュの値は?
問題点Skylight の二次以上の反射を取れない
SkyLightここの Skylighting の事前キャッシュの値は 0
問題点Skylight の二次以上の反射を取れない
SkyLightこの周辺の事前キャッシュのライティング値は 0
問題点Skylight の二次以上の反射を取れない
SkyLight
この時に、こんなオブジェクトがあったとします
問題点Skylight の二次以上の反射を取れない
SkyLight
Final Gathering!!!
問題点Skylight の二次以上の反射を取れない
SkyLight
Final Gathering!!!
してもサンプリングするのは闇
example
example
example
まっくろ。
どんなに設定を上げても、二次以降のバウンスは存在しない
Indirect Lighting
Photon を出さないSky Light の
Lightmap 作成アルゴリズムのまとめPoint SpotDirectionalLight..
Sky Light
Direct Lighting ライトに
直接レイを飛ばすFinal Gathering 時に
直接参照Indirect Lighting Photon Mapping で
シミュレーションFinal Gathering 前に事前キャッシュ
( 二次以降バウンスなし )
Direct Lighting
Indirect Lighting
Photon を出すLight
Photon を出さないSky Light
Final Gathering
Irradiance Caching
各テクセルに対して。。。
近くに十分なIRC ある?
NO!!
YES!!なら補完して値を格納Photon Mapping
Scene Setup
Mini Final GatherFor Sky Lights
おしながき1.Lightmass による、 Lightmap 作成アルゴリズム
2.Lightmap 作成のための Lightmass 設定方法
おしながき1.Lightmass による、 Lightmap 作成アルゴリズム
2.Lightmap 作成のための Lightmass 設定方法
Lightmass.iniLightmass の設定パラメータファイル• Engine/Config/BaseLightmass.ini に Lightmass の設定があります。• Game/Config/DefaultLightmass.iniなどを記載することでゲームで上書きできます。• Lightbuild 時に毎回参照されるので、パラメータを変えても、再起動する必要はありません。
Lightmass.iniLightmass の設定パラメータファイル• 問題は、そのパラメータが 150 個以上あること。• Photon Mapping のパラメータだけでもこれぐらいあります。
いやですよね。
パラメータを一括で調整する機能がエディタにあります。• World Settings の “ Lightmass” タブ
特に、一番重要かつよく触るであろう上記 4 パラメータを本日は説明します。
ここでは、それらがアルゴリズムにどのように影響していくかを説明します。
真茅さんが次の講演でこれらがどのように
絵作りに影響をあたえるのかを、実際のシーンで説明してくれます。
大前提 : Lightmass Importance Volume
Photon の放出範囲などを決める大事なもの。ないと、 UE4 が大きさを自動で判断するが、基本的には使い物にならないと思ってよい
Photon mapping
Final Gathering
IrradianceCaching
Direct Lighting
(Shadowing)影用レイの数 Photon の放出量
最大バウンス回数 レイの数 キャッシングの半径
必要な設定項目を振り返る
World Settings:
Photon mapping
Final Gathering
IrradianceCaching
Direct Lighting
(Shadowing)影用レイの数 Photon の放出量
最大バウンス回数 レイの数 キャッシングの半径
World Settings: Static Lighting Level Scale
Photon mapping
Final Gathering
IrradianceCaching
Direct Lighting
(Shadowing)影用レイの数 Photon の放出量
最大バウンス回数 レイの数 キャッシングの半径
Lightmass内部の World Grid.どれぐらいスケールするかを設定する。小さくすればするほどビルド時間が激増します。
World Settings: Static Lighting Level Scale
SLLS = 1.5 SLLS = 0.5SLLS を小さくすると、 Irradiance Cache の半径も小さくなり FG すべきサンプルが増えます。ディティールが向上しますが、それだけビルド時間が増えます。
World Settings: Num Indirect Lighting Bounces (NILB)
Photon が何回反射するか?その最大数を設定できる。
Photon mapping
Final Gathering
IrradianceCaching
Direct Lighting
(Shadowing)影用レイの数 Photon の放出量
最大バウンス回数 レイの数 キャッシングの半径
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 とかにしておけば問題ないかと。
Photon mapping
Final Gathering
IrradianceCaching
Direct Lighting
(Shadowing)影用レイの数 Photon の放出量
最大バウンス回数 レイの数 キャッシングの半径
World Settings: Indirect Lighting Quality (ILQ)
Final Gather 時のサンプリングのレイの総数を決める際、この値が掛け算される。ビルド時間は増大するが、にじみやノイズの除去につながる
Photon mapping
Final Gathering
IrradianceCaching
Direct Lighting
(Shadowing)影用レイの数 Photon の放出量
最大バウンス回数 レイの数 キャッシングの半径
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 のキャッシュ半径を制御する値を大きくすることで、ビルド時間は減り、にじみが解消されるが、逆に、ディティールが減る可能性がある。
Photon mapping
Final Gathering
IrradianceCaching
Direct Lighting
(Shadowing)影用レイの数 Photon の放出量
最大バウンス回数 レイの数 キャッシングの半径
World Settings: Indirect Lighting Smoothness (ILS)
ILS=2.5 ILS=0.25
World Settings:
Photon mapping
Final Gathering
IrradianceCaching
Direct Lighting
(Shadowing)影用レイの数 Photon の放出量
最大バウンス回数 レイの数 キャッシングの半径
Build Lighting: Lighting Quality
Photon mapping
Final Gathering
IrradianceCaching
Direct Lighting
(Shadowing)影用レイの数 Photon の放出量
最大バウンス回数 レイの数 キャッシングの半径
Build Lighting: Lighting Quality
Photon mapping
Final Gathering
IrradianceCaching
Direct Lighting
(Shadowing)影用レイの数 Photon の放出量
最大バウンス回数 レイの数 キャッシングの半径
最大バウンス回数以外の全てのクオリティを上げる。
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!!