Lightmassの仕組み ~Precomputed Light Volume編~ (Epic Games Japan: 篠山範明)
-
Upload
-epic-games-japan -
Category
Engineering
-
view
3.971 -
download
14
Transcript of Lightmassの仕組み ~Precomputed Light Volume編~ (Epic Games Japan: 篠山範明)
Lightmass Deep Divevol.2 Precomputed Light Volume編
篠山 範明Epic Games Japan
Senior Support Engineer
Lightmass が出力するデータ
LightMap
ShadowMap
PrecomputedLight
Volume
Precomputed Light Volume
Precomputed Light Volume とは?
• 空間上に分布されたライティング情報• Lightmass で作成される。• Movable なメッシュのライティングに使われる。
ViewのメニューでDebug表示できます。
Precomputed Light Volume の…・使われ方・作られ方
の二点を見ていこうと思います。
Indirect Lighting CachePLV の使われ方
Movable Mesh のライティングは二種類
Movable Mesh のライティングは二種類
Direct Lighting By Movable Light
Movable Mesh のライティングは二種類PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
Direct Lighting By Movable Light
Indirect LightingBy PLVs
周りの PLV からどのようにライティングを見積もるか?
Indirect LightingBy PLVs
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
Indirect Lighting Cache
Indirect LightingBy PLVs
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
ILC
Indirect Lighting Cache
Indirect LightingBy PLVs
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
ILC
Movable なメッシュは、ILC というデータをそれぞれ持つ
ランタイム上で、近くの PLV から自身の ILC を見積もりライティングを計算する。
ILC 系調整、デバッグコマンド
r.Cache.XXXXXXというコマンドで調整できます。
ILC Sampling の表示
• r.Cache.UpdateEveryFrame 1• r.Cache.DrawInterpolationPoints 1
• 毎フレーム Update してしまうので、デバッグ表示あとは必ず Off にするのをお忘れなく。
二つのサンプリング方法
ILCQ_ Point ILCQ_Volume
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
ILC ILC
ILC
ILC
ILC
ILC
ILC
ILC
ILC
ILC
二つのサンプリング方法
主な違いは、体積を考慮するかしないか。
ILCQ_Point
ILCQ_ Point
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
ILC
ILCQ Point
データ BB の中心一点レンダリング メッシュの大きさを
考慮しない
コスト 比較的軽い問題点 ???
ILCQ Point の問題点
ゆっくり動くとパカパカします。(demo)
予備 gif
原因を調べます。。
ILCQ Point の問題点
毎フレームの更新を避けるため、参照点がスナップされているからです。(demo)
予備 gif
ILCQ Point の問題点
サンプリングポイントのスナップによりパカつきが目立つ。(ILCQ_Volumeもスナップするけど、あまり目立たない )
ILCQ Point の問題点
試しに、参照しないように修正してみました(demo)
予備 gif
予備 gif
ILCQ Point の問題点
なおった!
ILCQ Point の問題点
しかし、この処理は毎フレームの ILCの更新を招くため、CPU負荷を招く可能性があります。
プロファイルしてから採用を検討します。
ILCQ_Point
ILCQ_ Point
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
ILC
ILCQ Point
データ BB の中心一点レンダリング メッシュの大きさを
考慮しない
コスト 比較的軽い問題点 パカパカする
ILCQ_Volume
ILCQ_Volume
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
ILC
ILC
ILC
ILC
ILC
ILC
ILC
ILC
ILC
ILCQ_Volume
ILCQ_Volume
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
ILC
ILC
ILC
ILC
ILC
ILC
ILC
ILC
ILC
ILCQ Volume
データ BB 上のグリッド上に配置 (5*5*5)
レンダリング メッシュの大きさを考慮する
コスト Point に比べ CPU/GPU 共に高コスト
問題点 ???
ILCQ_Volume の問題点
demo
ILCQ_Volume の問題点
ILC更新の CPUコスト。。。
ILCQ_Volume の問題点
キューブを巨大にしたらその分負荷も増える。
ILCQ Volume の問題点
Volumeの中に入ってる PLVがあればあるほど、CPUコストが増えます。
非常に大きなオブジェクトへの適用は慎重に。。
ILCQ_Volume
ILCQ_Volume
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
ILC
ILC
ILC
ILC
ILC
ILC
ILC
ILC
ILC
ILCQ Volume
データ BB 上のグリッド上に配置 (5*5*5)
レンダリング メッシュの大きさを考慮する
コスト Point に比べ CPU/GPU 共に高コスト
問題点 大きいと高コスト
二つのサンプリング方法PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
ILC ILC
ILC
ILC
ILC
ILC
ILC
ILC
ILC
ILC
二つのサンプリング方法PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
ILC ILC
ILC
ILC
ILC
ILC
ILC
ILC
ILC
ILC
ILCQ Point ILCQ_Volumeデータ BB の中心一点 BB 上のグリッド上に配置レンダリング メッシュの大きさを考慮し
ないメッシュの大きさを考慮する
コスト 比較的軽い Point に比べ CPU/GPU 共に高コスト
問題点 ゆっくり動くとパカパカ 大きいと高コスト
おまけ : Smooth Transition• 早く動くと補完される。r.Cache.SampleTransitionSpeed(default: 800)
Demo…
PLV の使われ方 ~Indirect Lighting Cache~ まとめ• Movable なオブジェクトは PLV から ILC を作成し、動的にレンダリングします。• ILC には Point と Volume があります。• それらの特徴を理解して、プロファイルして、どちらを使うか見極めましょう
しかし。。。そもそも PLV がダメだったらどんなサンプリングしてもだめ。
ノイズだらけ 配置がおかしい
PLV の作り方データ計算方法と配置方法
PLV のデータ
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
PLV
一つの PLVが 3バンドの SHです(SH = Spherical Harmonics)
PLV のデータ
一つの PLVが 3バンドの SHです(SH = Spherical Harmonics)
デバッグ表示では一色ですが。。。
PLV
PLV のデータ
一つの PLVが 3バンドの SHです(SH = Spherical Harmonics)
デバッグ表示では一色ですが。。。
方向性があります。
PLV
画像参考例 : http://www.banterle.com/francesco/projects/BantyToolkit/tk_diffuse.jpg
PLV のデータ
一つの PLVが 3バンドの SHです(SH = Spherical Harmonics)
デバッグ表示では一色ですが。。。
方向性があります。
このデータを周りから作成する必要があります。
PLV
画像参考例 : http://www.banterle.com/francesco/projects/BantyToolkit/tk_diffuse.jpg
一つ一つの PLV がどのように作られているか?
PLV
一つ一つの PLV がどのように作られているか?
PLV
上半分と下半分に分けて別々に。。。Lightmap と同様の計算をします。
PLV
直接光を計算し
PLV
Final Gathering!!
PLV
下半分も同様です。直接光 + FG
PLV
その二つを合算し、 PLV を作成します。
PLV
ただし、実は問題があります。
PLV
Final GatheringがAdaptive Samplingしない問題
Final Gathering Adaptive Sampling
Lightmap Texel
Final Gathering Adaptive Sampling1 レイを半休上全体に飛ばして、飛ばした先からの Photon や Skylight を見積もる
本来は何十本も。。
Final Gathering Adaptive Sampling2 となりあったレイから受け取るエネルギーの差が大きい場合は。。。
Final Gathering Adaptive Sampling3. 再分割して詳細を見る
Final Gathering Adaptive Sampling4. 繰り返す。輝度差が閾値より低くなる、または最大分割数まで分割したらサンプリング終了。
「 PLV 作成の」 Final Gathering のとき、この再分割 (Adaptive Sampling) を行いません。
PLV
なので、現在の UE4 では、Lightmass Portal の効果は PLV には出ません。
PLV
Portal
結果どうなるか。。。。
結果どうなるか。。。。ノイズが多い。。
試しに、再分割 (Adaptive Sampling)できるようにしてみました。
PLV
ノイズが取れました。
比べると一目瞭然です
UE4.13をめどに、PLV作成もAdaptive Samplingになります。
ノイズが減りますが、ビルド時間が若干増えます
PLV の作り方データ計算方法と配置方法
失敗例
こんなにいらない 相対的におかしい
絵作りだけじゃなく、メモリ量、ビルド時間にも影響
PLV の配置アルゴリズム
PLV の配置方法は三つが順番で行われます。
Surface Light
Sample
DetailVolumeSample
UniformVolumeSample
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
Surface Light Sample からはじめます
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
各ポリゴン単位で処理が行われます。
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
各ポリゴン、の法線を見て。。。上向きだったら。。
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
その表面に、数段の PLV を作成します。
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
こいつらです。
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
ここにもできます。
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
FirstSurfaceSampleLayerHeight(Default = 50)
SurfaceSampleLayerHeightSpacing(Default = 250)
.ini で細かくパラメータ調整できます。
何段つくる?NumSurfaceSampleLayers(Default = 2)SurfaceSampleLayer
HeightSpacing(Default = 250)
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
Detail Volume Sample…
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
Lightmass Character Indirect Detail Volumeで括った領域に PLV を作成します。
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
Lightmass Character Indirect Detail Volumeで括った領域に PLV を作成します。
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
こいつら
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
.ini で間隔が調整できます。
DetailVolumeSampleSpacing(Default = 300)
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
Uniform Volume Sample
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
Lightmass Importance Sample で囲った全体で PLV を作成します。
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
最初のテストシーンではでてこない。。
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
Default がめっちゃでかい!
VolumeLightSampleSpacing(Default = 3000)
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
シーンが小さすぎた。
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
90m Cube にしたら出てきた。 (30m 置き )
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
下は Surface Light Sample で感覚は 3m 置きです。
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
嫌な不釣り合いですね。。
PLV の配置アルゴリズム
PLV の配置方法は三つが順番で行われます。
Surface Light
Sample
DetailVolumeSample
UniformVolumeSample
PLV の配置アルゴリズム
ちなみに、各フェイズで PLV を作ろうとしたとき、近くにすでに作られていたら、その作成をスキップします。
Surface Light
Sample
DetailVolumeSample
UniformVolumeSample
PLV の配置アルゴリズム
ちなみに、各フェイズで PLV を作ろうとしたとき、近くにすでに作られていたら、その作成をスキップします。
Surface Light
Sample
DetailVolumeSample
UniformVolumeSample
PLVの配置設定方法
PLV の配置方法
既に説明した二つのボリューム以外に、実は二つしかありません。
Volume
・・・・・
Static Lighting Level Scale (SLLS)
Static Lighting Leve Scale (SLLS) = 1.0
ライトマス全体のWorld Gridのスケーリング
Static Lighting Level Scale (SLLS)
Static Lighting Leve Scale (SLLS) = 0.1
ライトマス全体のWorld Gridのスケーリング
PLV増やしたいけど。。。 SLLS変えると、他のライトマスのパラメータにも影響しちゃうな。。。
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 の半径が小さくなりサンプルが増えます。が、それだけビルド時間が増えます。
PLV増やしたいけど。。。 SLLS変えると、他のライトマスのパラメータにも影響しちゃうな。。。
Volume Light Sample Replacement Scale
PLVの配置専用のスケーリングパラメータStatic Lighting Leve Scale (SLLS) は
Lightmass全体の処理に影響するが、こちらは単独したスケーリングが可能
Volume Light Sample Replacement Scale
PLVの配置専用のスケーリングパラメータStatic Lighting Leve Scale (SLLS) は
Lightmass全体の処理に影響するが、こちらは単独したスケーリングが可能
。。。。。と思ったら。。。
Volume Light Sample Replacement Scale
Volume Light Sample Replacement Scale = 0.1
Static Lighting Level Scale (SLLS)
Static Lighting Leve Scale (SLLS) = 0.1
Volume Light Sample Replacement Scale
VLSRS = 0.1SLLS = 0.1ちがうじゃん!
Volume Light Sample Replacement Scale
このパラメータは。。SurfaceLightSampleSpacing,VolumeLightSampleSpacing,DetailVolumeSampleSpacing
各フェイズの SampleSpacingをスケールするだけです。
Surface Light
Sample
DetailVolumeSample
UniformVolumeSample
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
ここだけ影響しない!!
Volume Light Sample Replacement Scale
VLSRS = 0.1SLLS = 0.1高さだけが違う
PLV の配置方法
エディタでできるスケーリングでした。。
Volume
・・・・・
PLV の配置方法
ということで、エディタでできるのは、重要なところを囲む全体をスケーリングさせるの二つしかできません。
PLV の配置方法
あなたのプロジェクトにDefaultLightmass.iniを追加するときが来ました!!
PLV の配置方法
パラメータの意味はスライドに入れておきました
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
FirstSurfaceSampleLayerHeight(Default = 50)
SurfaceSampleLayerHeightSpacing(Default = 250)
.ini のパラメータ
何段つくる?NumSurfaceSampleLayers(Default = 2)SurfaceSampleLayer
HeightSpacing(Default = 250)
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
.ini のパラメータ
DetailVolumeSampleSpacing(Default = 300)
Surface
Light Sampl
e
DetailVolum
eSampl
e
Uniform
Volume
Sample
.ini のパラメータ
VolumeLightSampleSpacing(Default = 3000)
PLV の配置方法
[DevOpitions.PrecomputedDynamicObjectLighting]と記載して必要なパラメータをオーバーライドしてみてください。
Precomputed Light Volume
まとめ
Precomputed Light VolumeとIndirect Lighting Cacheはセットです。
シビアに調整したい場合は、二つの特性を理解し、最適な手法を模索しましょう。
•斎藤さんへ GO!