lightmassの仕組み ~precomputed light volume編~ (epic games japan: 篠山範明)

Post on 21-Apr-2017

3.996 Views

Category:

Engineering

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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!

top related