10K Views
July 31, 16
スライド概要
2016年7月30日に行われたライセンシー様向けライトマス勉強会の資料です。(登壇者: Epic Games Japan: 篠山範明)アーティストの方に向けて、UE4のライトビルドの仕組みを粉々にかみ砕いて説明しております。こちらはPrecomputed Light Volume編
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
Lightmass Deep Dive vol.2 Precomputed Light Volume編 篠山 範明 Epic Games Japan Senior Support Engineer
Lightmassが出力するデータ Light Map Shadow Map Precomputed Light Volume
Precomputed Light Volume
Precomputed Light Volume とは? • 空間上に分布されたライティング情報 • Lightmassで作成される。 • Movableなメッシュのライティングに使われる。
ViewのメニューでDebug表示できます。
Precomputed Light Volume の… ・使われ方 ・作られ方 の二点を見ていこうと思います。
Indirect Lighting Cache PLVの使われ方
Movable Meshのライティングは二種類
Movable Meshのライティングは二種類 Direct Lighting By Movable Light
Movable Meshのライティングは二種類 PLV PLV PLV PLV Direct Lighting By Movable Light PLV PLV PLV PLV Indirect Lighting By PLVs
周りのPLVからどのようにライティングを 見積もるか? PLV PLV PLV PLV PLV PLV PLV PLV Indirect Lighting By PLVs
Indirect Lighting Cache PLV PLV PLV PLV ILC PLV PLV PLV PLV Indirect Lighting By PLVs
Indirect Lighting Cache PLV PLV PLV PLV ILC PLV PLV PLV PLV Movableなメッシュは、 ILCというデータをそれぞれ持つ ランタイム上で、 近くのPLVから自身のILCを見積もり ライティングを計算する。 Indirect Lighting By PLVs
ILC系調整、デバッグコマンド r.Cache.XXXXXX というコマンドで調整できます。
ILC Samplingの表示 • r.Cache.UpdateEveryFrame 1 • r.Cache.DrawInterpolationPoints 1 • 毎フレームUpdateしてしまうので、デバッグ表示 あとは必ずOffにするのをお忘れなく。
主な違いは、体積を考慮するかしないか。
二つのサンプリング方法 PLV PLV PLV PLV ILC PLV ILCQ_ Point PLV PLV PLV PLV PLV PLV PLV PLV ILC ILC ILC ILC ILC ILC ILC ILC ILC PLV PLV PLV ILCQ_Volume
二つのサンプリング方法
主な違いは、体積を考慮するかしないか。
ILCQ_Point PLV PLV PLV ILC PLV PLV PLV PLV ILCQ_ Point ILCQ Point PLV データ 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 PLV PLV PLV ILC PLV PLV PLV PLV ILCQ_ Point ILCQ Point PLV データ BBの中心一点 レンダリング メッシュの大きさを 考慮しない コスト 比較的軽い 問題点 パカパカする
ILCQ_Volume PLV PLV PLV PLV PLV ILC ILC ILC ILC ILC ILC ILC ILC ILC PLV PLV PLV ILCQ_Volume
ILCQ_Volume ILCQ Volume データ BB上のグリッド上に 配置(5*5*5) レンダリング メッシュの大きさを 考慮する コスト Pointに比べCPU/GPU 共に高コスト 問題点 ??? PLV PLV PLV PLV PLV ILC ILC ILC ILC ILC ILC ILC ILC ILC PLV PLV PLV ILCQ_Volume
ILCQ_Volumeの問題点 demo
ILCQ_Volumeの問題点 ILC更新のCPUコスト。。。
ILCQ_Volumeの問題点 キューブを巨大にしたらその分負荷も増える。
ILCQ Volumeの問題点 Volumeの中に入ってるPLVがあればあるほど、 CPUコストが増えます。 非常に大きなオブジェクトへの適用は慎重に。。
ILCQ_Volume ILCQ Volume データ BB上のグリッド上に 配置(5*5*5) レンダリング メッシュの大きさを 考慮する コスト Pointに比べCPU/GPU 共に高コスト 問題点 大きいと高コスト PLV PLV PLV PLV PLV ILC ILC ILC ILC ILC ILC ILC ILC ILC PLV PLV PLV ILCQ_Volume
二つのサンプリング方法 PLV PLV PLV PLV ILC PLV PLV PLV PLV PLV PLV PLV PLV PLV ILC ILC ILC ILC ILC ILC ILC ILC ILC PLV PLV PLV
二つのサンプリング方法 PLV データ レンダリング PLV コスト 問題点 PLV PLV PLV PLV ILCQ Point BBの中心一点 PLV PLV ILCQ_Volume ILC ILC ILC BB上のグリッド上に配置 メッシュの大きさを考慮し メッシュの大きさを考慮する ない ILC PLV ILC PLV PLV ILC ILC 比較的軽い Pointに比べCPU/GPU共に高 コスト ゆっくり動くとパカパカ ILC ILC ILC 大きいと高コスト PLV PLV PLV PLV PLV
おまけ: 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 一つのPLVが3バンドのSHです (SH = Spherical Harmonics) デバッグ表示では一色ですが。。。
PLVのデータ PLV 一つのPLVが3バンドのSHです (SH = Spherical Harmonics) デバッグ表示では一色ですが。。。 方向性があります。 画像参考例: http://www.banterle.com/francesco/projects/BantyToolkit/tk_diffuse.jpg
PLVのデータ PLV 一つのPLVが3バンドのSHです (SH = Spherical Harmonics) デバッグ表示では一色ですが。。。 方向性があります。 このデータを周りから作成する必要 があります。 画像参考例: 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 Sampling 1 レイを半休上全体に飛ばして、 飛ばした先からのPhotonやSkylightを見積もる 本来は何十本も。。
Final Gathering Adaptive Sampling 2 となりあったレイから受け取るエネルギーの 差が大きい場合は。。。
Final Gathering Adaptive Sampling 3. 再分割して詳細を見る
Final Gathering Adaptive Sampling 4. 繰り返す。輝度差が閾値より低くなる、または 最大分割数まで分割したらサンプリング終了。
「PLV作成の」Final Gatheringのとき、 この再分割(Adaptive Sampling)を行いません。 PLV
なので、現在のUE4では、 Lightmass Portalの効果はPLVには出ません。 PLV P o r t a l
結果どうなるか。。。。
結果どうなるか。。。。ノイズが多い。。
試しに、再分割(Adaptive Sampling) できるようにしてみました。 PLV
ノイズが取れました。
比べると一目瞭然です
UE4.13をめどに、PLV作成も Adaptive Samplingになります。 ノイズが減りますが、ビルド時間が若干増えます
PLVの作り方 データ計算方法と 配置方法
失敗例 こんなにいらない 相対的におかしい 絵作りだけじゃなく、メモリ量、ビルド時間にも影響
PLVの配置アルゴリズム Surface Light Sample Detail Volume Sample Uniform Volume Sample PLVの配置方法は三つが順番で行われます。
Surface Light Sample Detail Volume Sample Surface Light Sampleからはじめます Uniform Volume Sample
Surface Light Sample Detail Volume Sample 各ポリゴン単位で処理が行われます。 Uniform Volume Sample
Surface Light Sample Detail Volume Sample Uniform Volume Sample 各ポリゴン、の法線を見て。。。上向きだったら。。
Surface Light Sample Detail Volume Sample その表面に、数段のPLVを作成します。 Uniform Volume Sample
Surface Light Sample Detail Volume Sample こいつらです。 Uniform Volume Sample
Surface Light Sample Detail Volume Sample ここにもできます。 Uniform Volume Sample
Surface Light Sample SurfaceSampleLayer HeightSpacing (Default = 250) Detail Volume Sample Uniform Volume Sample 何段つくる? NumSurface SampleLayers (Default = 2) SurfaceSampleLayer HeightSpacing (Default = 250) FirstSurface .iniで細かくパラメータ調整できます。 SampleLayerHeight (Default = 50)
Surface Light Sample Detail Volume Sample Detail Volume Sample… Uniform Volume Sample
Surface Light Sample Detail Volume Sample Uniform Volume Sample Lightmass Character Indirect Detail Volume で括った領域にPLVを作成します。
Surface Light Sample Detail Volume Sample Uniform Volume Sample Lightmass Character Indirect Detail Volume で括った領域にPLVを作成します。
Surface Light Sample Detail Volume Sample Uniform Volume Sample こいつら
Surface Light Sample Detail Volume Sample DetailVolumeSampleSpacing (Default = 300) .iniで間隔が調整できます。 Uniform Volume Sample
Surface Light Sample Detail Volume Sample Uniform Volume Sample Uniform Volume Sample
Surface Light Sample Detail Volume Sample Lightmass Importance Sampleで 囲った全体でPLVを作成します。 Uniform Volume Sample
Surface Light Sample Detail Volume Sample Uniform Volume Sample 最初のテストシーンではでてこない。。
Surface Light Sample Detail Volume Sample VolumeLightSampleSpacing (Default = 3000) Defaultがめっちゃでかい! Uniform Volume Sample
Surface Light Sample Detail Volume Sample シーンが小さすぎた。 Uniform Volume Sample
Surface Light Sample Detail Volume Sample Uniform Volume Sample 90m Cubeにしたら出てきた。(30m 置き)
Surface Light Sample Detail Volume Sample Uniform Volume Sample 下はSurface Light Sampleで感覚は3m置きです。
Surface Light Sample Detail Volume Sample 嫌な不釣り合いですね。。 Uniform Volume Sample
PLVの配置アルゴリズム Surface Light Sample Detail Volume Sample Uniform Volume Sample PLVの配置方法は三つが順番で行われます。
PLVの配置アルゴリズム Surface Light Sample Detail Volume Sample Uniform Volume Sample ちなみに、各フェイズでPLVを作ろうとしたとき、 近くにすでに作られていたら、その作成をスキップします。
PLVの配置アルゴリズム Surface Light Sample Detail Volume Sample Uniform Volume Sample ちなみに、各フェイズでPLVを作ろうとしたとき、 近くにすでに作られていたら、その作成をスキップします。
PLVの配置設定方法
PLVの配置方法 Volume ・・・・・ 既に説明した二つのボリューム以外に、 実は二つしかありません。
Static Lighting Level Scale (SLLS) ライトマス全体のWorld Gridのスケーリング Static Lighting Leve Scale (SLLS) = 1.0
Static Lighting Level Scale (SLLS) ライトマス全体のWorld Gridのスケーリング Static Lighting Leve Scale (SLLS) = 0.1
PLV増やしたいけど。。。SLLS変えると、 他のライトマスのパラメータにも影響しちゃうな。。。
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の半径 が小さくなりサンプルが増えます。 が、それだけビルド時間が増えます。
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.1 SLLS = 0.1 ちがうじゃん!
Volume Light Sample Replacement Scale Surface Light Sample Detail Volume Sample Uniform Volume Sample このパラメータは。。 SurfaceLightSampleSpacing, VolumeLightSampleSpacing, DetailVolumeSampleSpacing 各フェイズのSampleSpacingをスケールするだけです。
Surface Light Sample Detail Volume Sample Uniform Volume Sample ここだけ影響しない!!
Volume Light Sample Replacement Scale VLSRS = 0.1 SLLS = 0.1 高さだけが違う
PLVの配置方法 Volume ・・・・・ エディタでできるスケーリングでした。。
PLVの配置方法 ということで、 エディタでできるのは、 重要なところを囲む 全体をスケーリングさせる の二つしかできません。
PLVの配置方法 あなたのプロジェクトに DefaultLightmass.iniを追加するときが来ました!!
PLVの配置方法 パラメータの意味はスライドに入れておきました
Surface Light Sample Detail Volume Sample Uniform Volume Sample 何段つくる? NumSurface SampleLayers (Default = 2) SurfaceSampleLayer HeightSpacing (Default = 250) SurfaceSampleLayer HeightSpacing (Default = 250) FirstSurface SampleLayerHeight (Default = 50) .iniのパラメータ
Surface Light Sample Detail Volume Sample DetailVolumeSampleSpacing (Default = 300) .iniのパラメータ Uniform Volume Sample
Surface Light Sample Detail Volume Sample VolumeLightSampleSpacing (Default = 3000) .iniのパラメータ Uniform Volume Sample
PLVの配置方法 [DevOpitions.PrecomputedDynamicObjectLighting] と記載して必要なパラメータをオーバーライドしてみてください。
Precomputed Light Volume
まとめ Precomputed Light Volume と Indirect Lighting Cache はセットです。 シビアに調整したい場合は、 二つの特性を理解し、最適な手法を模索しましょう。
• 斎藤さんへGO!