Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Lightmassの仕組み ~Precomputed Light Volume編~ (Epic Games Japan: 篠山範明)

7,834 views

Published on

2016年7月30日に行われたライセンシー様向けライトマス勉強会の資料です。(登壇者: Epic Games Japan: 篠山範明)アーティストの方に向けて、UE4のライトビルドの仕組みを粉々にかみ砕いて説明しております。こちらはPrecomputed Light Volume編

Published in: Engineering
  • Be the first to comment

Lightmassの仕組み ~Precomputed Light Volume編~ (Epic Games Japan: 篠山範明)

  1. 1. Lightmass Deep Dive vol.2 Precomputed Light Volume編 篠山 範明 Epic Games Japan Senior Support Engineer
  2. 2. Lightmassが出力するデータ Light Map Shadow Map Precomputed Light Volume
  3. 3. Precomputed Light Volume
  4. 4. Precomputed Light Volume とは? • 空間上に分布されたライティング情報 • Lightmassで作成される。 • Movableなメッシュのライティングに使われる。
  5. 5. ViewのメニューでDebug表示できます。
  6. 6. Precomputed Light Volume の… ・使われ方 ・作られ方 の二点を見ていこうと思います。
  7. 7. Indirect Lighting Cache PLVの使われ方
  8. 8. Movable Meshのライティングは二種類
  9. 9. Movable Meshのライティングは二種類 Direct Lighting By Movable Light
  10. 10. Movable Meshのライティングは二種類 PLVPLVPLV PLVPLV PLVPLVPLV Direct Lighting By Movable Light Indirect Lighting By PLVs
  11. 11. 周りのPLVからどのようにライティングを 見積もるか? Indirect Lighting By PLVs PLVPLVPLV PLVPLV PLVPLVPLV
  12. 12. Indirect Lighting Cache Indirect Lighting By PLVs PLVPLVPLV PLVPLV PLVPLVPLV ILC
  13. 13. Indirect Lighting Cache Indirect Lighting By PLVs PLVPLVPLV PLVPLV PLVPLVPLV ILC Movableなメッシュは、 ILCというデータをそれぞれ持つ ランタイム上で、 近くのPLVから自身のILCを見積もり ライティングを計算する。
  14. 14. ILC系調整、デバッグコマンド r.Cache.XXXXXX というコマンドで調整できます。
  15. 15. ILC Samplingの表示 • r.Cache.UpdateEveryFrame 1 • r.Cache.DrawInterpolationPoints 1 • 毎フレームUpdateしてしまうので、デバッグ表示あ とは必ずOffにするのをお忘れなく。
  16. 16. 二つのサンプリング方法 ILCQ_ Point ILCQ_Volume PLVPLVPLV PLVPLV PLVPLVPLV PLVPLVPLV PLVPLV PLVPLVPLV ILC ILCILC ILC ILCILC ILC ILCILC ILC
  17. 17. 二つのサンプリング方法
  18. 18. 主な違いは、体積を考慮するかしないか。
  19. 19. ILCQ_Point ILCQ_ Point PLVPLVPLV PLVPLV PLVPLVPLV ILC ILCQ Point データ BBの中心一点 レンダリング メッシュの大きさを 考慮しない コスト 比較的軽い 問題点 ???
  20. 20. ILCQ Pointの問題点 ゆっくり動くとパカパカします。 (demo)
  21. 21. 予備gif
  22. 22. 原因を調べます。。
  23. 23. ILCQ Pointの問題点 毎フレームの更新を避けるため、 参照点がスナップされているからです。 (demo)
  24. 24. 予備gif
  25. 25. ILCQ Pointの問題点 サンプリングポイントのスナップにより パカつきが目立つ。 (ILCQ_Volumeもスナップするけど、 あまり目立たない)
  26. 26. ILCQ Pointの問題点 試しに、参照しないように修正してみました (demo)
  27. 27. 予備gif
  28. 28. 予備gif
  29. 29. ILCQ Pointの問題点 なおった!
  30. 30. ILCQ Pointの問題点 しかし、 この処理は毎フレームのILCの更新を招くため、 CPU負荷を招く可能性があります。 プロファイルしてから採用を検討します。
  31. 31. ILCQ_Point ILCQ_ Point PLVPLVPLV PLVPLV PLVPLVPLV ILC ILCQ Point データ BBの中心一点 レンダリング メッシュの大きさを 考慮しない コスト 比較的軽い 問題点 パカパカする
  32. 32. ILCQ_Volume ILCQ_Volume PLVPLVPLV PLVPLV PLVPLVPLV ILCILC ILC ILCILC ILC ILCILC ILC
  33. 33. ILCQ_Volume ILCQ_Volume PLVPLVPLV PLVPLV PLVPLVPLV ILCILC ILC ILCILC ILC ILCILC ILC ILCQ Volume データ BB上のグリッド上に 配置(5*5*5) レンダリング メッシュの大きさを 考慮する コスト Pointに比べCPU/GPU共 に高コスト 問題点 ???
  34. 34. ILCQ_Volumeの問題点 demo
  35. 35. ILCQ_Volumeの問題点 ILC更新のCPUコスト。。。
  36. 36. ILCQ_Volumeの問題点 キューブを巨大にしたらその分負荷も増える。
  37. 37. ILCQ Volumeの問題点 Volumeの中に入ってるPLVがあればあるほど、 CPUコストが増えます。 非常に大きなオブジェクトへの適用は慎重に。。
  38. 38. ILCQ_Volume ILCQ_Volume PLVPLVPLV PLVPLV PLVPLVPLV ILCILC ILC ILCILC ILC ILCILC ILC ILCQ Volume データ BB上のグリッド上に 配置(5*5*5) レンダリング メッシュの大きさを 考慮する コスト Pointに比べCPU/GPU共 に高コスト 問題点 大きいと高コスト
  39. 39. 二つのサンプリング方法 PLVPLVPLV PLVPLV PLVPLVPLV PLVPLVPLV PLVPLV PLVPLVPLV ILC ILCILC ILC ILCILC ILC ILCILC ILC
  40. 40. 二つのサンプリング方法 PLVPLVPLV PLVPLV PLVPLVPLV PLVPLVPLV PLVPLV PLVPLVPLV ILC ILCILC ILC ILCILC ILC ILCILC ILC ILCQ Point ILCQ_Volume データ BBの中心一点 BB上のグリッド上に配置 レンダリング メッシュの大きさを考慮し ない メッシュの大きさを考慮する コスト 比較的軽い Pointに比べCPU/GPU共に高コ スト 問題点 ゆっくり動くとパカパカ 大きいと高コスト
  41. 41. おまけ: Smooth Transition • 早く動くと補完される。 r.Cache.SampleTransitionSpeed (default: 800) Demo…
  42. 42. PLVの使われ方 ~Indirect Lighting Cache~ まとめ • MovableなオブジェクトはPLVからILCを作成し、 動的にレンダリングします。 • ILCにはPointとVolumeがあります。 • それらの特徴を理解して、プロファイルして、 どちらを使うか見極めましょう
  43. 43. しかし。。。 そもそもPLVがダメだったらどんなサンプリ ングしてもだめ。 ノイズだらけ 配置がおかしい
  44. 44. PLVの作り方 データ計算方法と配置方法
  45. 45. PLVのデータ PLV PLVPLVPLV PLVPLV PLVPLVPLV 一つのPLVが3バンドのSHです (SH = Spherical Harmonics)
  46. 46. PLVのデータ 一つのPLVが3バンドのSHです (SH = Spherical Harmonics) デバッグ表示では一色ですが。。。 PLV
  47. 47. PLVのデータ 一つのPLVが3バンドのSHです (SH = Spherical Harmonics) デバッグ表示では一色ですが。。。 方向性があります。 PLV 画像参考例: http://www.banterle.com/francesco/projects/BantyToolkit/tk_diffuse.jpg
  48. 48. PLVのデータ 一つのPLVが3バンドのSHです (SH = Spherical Harmonics) デバッグ表示では一色ですが。。。 方向性があります。 このデータを周りから作成する必要 があります。 PLV 画像参考例: http://www.banterle.com/francesco/projects/BantyToolkit/tk_diffuse.jpg
  49. 49. 一つ一つのPLVがどのように作られているか? PLV
  50. 50. 一つ一つのPLVがどのように作られているか? PLV
  51. 51. 上半分と下半分に分けて別々に。。。 Lightmapと同様の計算をします。 PLV
  52. 52. 直接光を計算し PLV
  53. 53. Final Gathering!! PLV
  54. 54. 下半分も同様です。 直接光 + FG PLV
  55. 55. その二つを合算し、PLVを作成します。 PLV
  56. 56. ただし、実は問題があります。 PLV
  57. 57. Final Gatheringが Adaptive Samplingしない問題
  58. 58. Final Gathering Adaptive Sampling Lightmap Texel
  59. 59. Final Gathering Adaptive Sampling 1 レイを半休上全体に飛ばして、 飛ばした先からのPhotonやSkylightを見積もる 本来は何十本も。。
  60. 60. Final Gathering Adaptive Sampling 2 となりあったレイから受け取るエネルギーの 差が大きい場合は。。。
  61. 61. Final Gathering Adaptive Sampling 3. 再分割して詳細を見る
  62. 62. Final Gathering Adaptive Sampling 4. 繰り返す。輝度差が閾値より低くなる、または 最大分割数まで分割したらサンプリング終了。
  63. 63. 「PLV作成の」Final Gatheringのとき、 この再分割(Adaptive Sampling)を行いません。 PLV
  64. 64. なので、現在のUE4では、 Lightmass Portalの効果はPLVには出ません。 PLV P o r t a l
  65. 65. 結果どうなるか。。。。
  66. 66. 結果どうなるか。。。。ノイズが多い。。
  67. 67. 試しに、再分割(Adaptive Sampling) できるようにしてみました。 PLV
  68. 68. ノイズが取れました。
  69. 69. 比べると一目瞭然です
  70. 70. UE4.13をめどに、PLV作成も Adaptive Samplingになります。 ノイズが減りますが、ビルド時間が若干増えます
  71. 71. PLVの作り方 データ計算方法と配置方法
  72. 72. 失敗例 こんなにいらない 相対的におかしい 絵作りだけじゃなく、メモリ量、ビルド時間にも影響
  73. 73. PLVの配置アルゴリズム PLVの配置方法は三つが順番で行われます。 Surface Light Sample Detail Volume Sample Uniform Volume Sample
  74. 74. Surface Light Sample Detail Volume Sample Uniform Volume Sample Surface Light Sampleからはじめます
  75. 75. Surface Light Sample Detail Volume Sample Uniform Volume Sample 各ポリゴン単位で処理が行われます。
  76. 76. Surface Light Sample Detail Volume Sample Uniform Volume Sample 各ポリゴン、の法線を見て。。。上向きだったら。。
  77. 77. Surface Light Sample Detail Volume Sample Uniform Volume Sample その表面に、数段のPLVを作成します。
  78. 78. Surface Light Sample Detail Volume Sample Uniform Volume Sample こいつらです。
  79. 79. Surface Light Sample Detail Volume Sample Uniform Volume Sample ここにもできます。
  80. 80. Surface Light Sample Detail Volume Sample Uniform Volume Sample FirstSurface SampleLayerHeight (Default = 50) SurfaceSampleLayer HeightSpacing (Default = 250) .iniで細かくパラメータ調整できます。 何段つくる? NumSurface SampleLayers (Default = 2)SurfaceSampleLayer HeightSpacing (Default = 250)
  81. 81. Surface Light Sample Detail Volume Sample Uniform Volume Sample Detail Volume Sample…
  82. 82. Surface Light Sample Detail Volume Sample Uniform Volume Sample Lightmass Character Indirect Detail Volume で括った領域にPLVを作成します。
  83. 83. Surface Light Sample Detail Volume Sample Uniform Volume Sample Lightmass Character Indirect Detail Volume で括った領域にPLVを作成します。
  84. 84. Surface Light Sample Detail Volume Sample Uniform Volume Sample こいつら
  85. 85. Surface Light Sample Detail Volume Sample Uniform Volume Sample .iniで間隔が調整できます。 DetailVolumeSampleSpacing (Default = 300)
  86. 86. Surface Light Sample Detail Volume Sample Uniform Volume Sample Uniform Volume Sample
  87. 87. Surface Light Sample Detail Volume Sample Uniform Volume Sample Lightmass Importance Sampleで 囲った全体でPLVを作成します。
  88. 88. Surface Light Sample Detail Volume Sample Uniform Volume Sample 最初のテストシーンではでてこない。。
  89. 89. Surface Light Sample Detail Volume Sample Uniform Volume Sample Defaultがめっちゃでかい! VolumeLightSampleSpacing (Default = 3000)
  90. 90. Surface Light Sample Detail Volume Sample Uniform Volume Sample シーンが小さすぎた。
  91. 91. Surface Light Sample Detail Volume Sample Uniform Volume Sample 90m Cubeにしたら出てきた。(30m 置き)
  92. 92. Surface Light Sample Detail Volume Sample Uniform Volume Sample 下はSurface Light Sampleで感覚は3m置きです。
  93. 93. Surface Light Sample Detail Volume Sample Uniform Volume Sample 嫌な不釣り合いですね。。
  94. 94. PLVの配置アルゴリズム PLVの配置方法は三つが順番で行われます。 Surface Light Sample Detail Volume Sample Uniform Volume Sample
  95. 95. PLVの配置アルゴリズム ちなみに、各フェイズでPLVを作ろうとしたとき、 近くにすでに作られていたら、その作成をスキップします。 Surface Light Sample Detail Volume Sample Uniform Volume Sample
  96. 96. PLVの配置アルゴリズム ちなみに、各フェイズでPLVを作ろうとしたとき、 近くにすでに作られていたら、その作成をスキップします。 Surface Light Sample Detail Volume Sample Uniform Volume Sample
  97. 97. PLVの配置設定方法
  98. 98. PLVの配置方法 既に説明した二つのボリューム以外に、 実は二つしかありません。 Volume ・・・・・
  99. 99. Static Lighting Level Scale (SLLS) Static Lighting Leve Scale (SLLS) = 1.0 ライトマス全体のWorld Gridのスケーリング
  100. 100. Static Lighting Level Scale (SLLS) Static Lighting Leve Scale (SLLS) = 0.1 ライトマス全体のWorld Gridのスケーリング
  101. 101. PLV増やしたいけど。。。SLLS変えると、 他のライトマスのパラメータにも影響しちゃうな。。。
  102. 102. World Settings: Static Lighting Level Scale Photon mapping Final Gathering Irradiance Caching Direct Lighting (Shadowing) 影用レイの数 Photonの放出量 最大バウンス回数 レイの数 キャッシングの半径 Lightmass内部のWorld Grid. どれぐらいスケール するかを設定する。 小さくすればするほど ビルド時間が激増します。
  103. 103. World Settings: Static Lighting Level Scale SLLS = 1.5 SLLS = 0.5 SLLSを変えることで、例えば、Irradiance Cacheの半径が小 さくなりサンプルが増えます。 が、それだけビルド時間が増えます。
  104. 104. PLV増やしたいけど。。。SLLS変えると、 他のライトマスのパラメータにも影響しちゃうな。。。
  105. 105. Volume Light Sample Replacement Scale PLVの配置専用のスケーリングパラメータ Static Lighting Leve Scale (SLLS) は Lightmass全体の処理に影響するが、 こちらは単独したスケーリングが可能
  106. 106. Volume Light Sample Replacement Scale PLVの配置専用のスケーリングパラメータ Static Lighting Leve Scale (SLLS) は Lightmass全体の処理に影響するが、 こちらは単独したスケーリングが可能 。。。。。と思ったら。。。
  107. 107. Volume Light Sample Replacement Scale Volume Light Sample Replacement Scale = 0.1
  108. 108. Static Lighting Level Scale (SLLS) Static Lighting Leve Scale (SLLS) = 0.1
  109. 109. Volume Light Sample Replacement Scale VLSRS = 0.1SLLS = 0.1 ちがうじゃん!
  110. 110. Volume Light Sample Replacement Scale このパラメータは。。 SurfaceLightSampleSpacing, VolumeLightSampleSpacing, DetailVolumeSampleSpacing 各フェイズのSampleSpacingをスケールするだけです。 Surface Light Sample Detail Volume Sample Uniform Volume Sample
  111. 111. Surface Light Sample Detail Volume Sample Uniform Volume Sample ここだけ影響しない!!
  112. 112. Volume Light Sample Replacement Scale VLSRS = 0.1SLLS = 0.1 高さだけが違う
  113. 113. PLVの配置方法 エディタでできるスケーリングでした。。 Volume ・・・・・
  114. 114. PLVの配置方法 ということで、 エディタでできるのは、 重要なところを囲む 全体をスケーリングさせる の二つしかできません。
  115. 115. PLVの配置方法 あなたのプロジェクトに DefaultLightmass.iniを追加するときが来ました!!
  116. 116. PLVの配置方法 パラメータの意味はスライドに入れておきました
  117. 117. Surface Light Sample Detail Volume Sample Uniform Volume Sample FirstSurface SampleLayerHeight (Default = 50) SurfaceSampleLayer HeightSpacing (Default = 250) .iniのパラメータ 何段つくる? NumSurface SampleLayers (Default = 2)SurfaceSampleLayer HeightSpacing (Default = 250)
  118. 118. Surface Light Sample Detail Volume Sample Uniform Volume Sample .iniのパラメータ DetailVolumeSampleSpacing (Default = 300)
  119. 119. Surface Light Sample Detail Volume Sample Uniform Volume Sample .iniのパラメータ VolumeLightSampleSpacing (Default = 3000)
  120. 120. PLVの配置方法 [DevOpitions.PrecomputedDynamicObjectLighting] と記載して必要なパラメータをオーバーライドしてみてください。
  121. 121. Precomputed Light Volume
  122. 122. まとめ Precomputed Light Volume と Indirect Lighting Cache はセットです。 シビアに調整したい場合は、 二つの特性を理解し、最適な手法を模索しましょう。
  123. 123. • 斎藤さんへGO!

×