Skip to main content
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が出力するデータ
Lightmass
Input
Output
Lightmassが出力するデータ
Light
Map
Shadow
Map
Precomputed
Light
Volume
(半透明用のシャドウマップもありますが、そちらは今回は触れません。。)
Light
Map
Shadow
Map
Precomputed
Light
Volume
③真茅さん
LightMapとShadowMapは
アクター単位で持たれます。
Lightmapの実際に作られたテクスチャは、
World Settingsで見ることができます。
Light
Map
Shadow
Map
Precomputed
Light
Volume
④ SQEX斎藤さ
ん
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
Photonを
出さない
Sky Light
OR
これでこのようなマトリックスが出来ます。
Point
Spot
Directional
Light..
Sky Light
Direct
Lighting
Indirect
Lighting
Direct
Lighting
Indirect
Lighting
Photonを
出す
Light
Photonを
出さない
Sky Light
まずはこちらから。
Point
Spot
Directional
Light..
Sky Light
Direct
Lighting
Indirect
Lighting
Direct
Lighting
Indirect
Lighting
Photonを
出す
Light
Photonを
出さない
Light
Lightmap作成
アルゴリズム
Point / Spot / Directional Light 編
Point
Spot
Directional
Light..
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
Spot
Directional
Light..
Sky Light
Direct
Lighting ライトに
直接レイを飛ばす
Indirect
Lighting
Direct
Lighting
Indirect Lighting
Photonを出す
Light
Photonを出さない
Sky Light
Point
Spot
Directional
Light..
Sky Light
Direct
Lighting ライトに
直接レイを飛ばす
Indirect
Lighting
Direct
Lighting
Indirect Lighting
Photonを出す
Light
Photonを出さない
Sky Light
Point
Spot
Directional
Light..
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
かなり見え張りました。