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

17.4K Views

July 31, 16

スライド概要

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

profile-image

Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Lightmass Deep Dive vol.1 Lightmap編 篠山 範明 Epic Games Japan Senior Support Engineer

2.

Lightmap編

3.

Lightmap編 の前に

4.

Lightmassってなに?

5.

Lightmassって何? Unreal Engine4が用いる 事前計算ライティングのアプリケーションです。

6.

ライティングビルドの場所

7.

押すと ライティングビルドが走ります

8.

そして失敗したりします。

9.

このときにUE4 Editorの裏で ライティング計算しているのが lightmassです。

10.

ソースコードは公開 Program/UnrealLightmass

11.

Lightmassの問題は? 大きく分けて三つ。

12.

Lightmassの問題① クオリティ

13.

Lightmassの問題② ビルド時間 平気で数時間単位にスケールする ライトビルド

14.

Lightmassの問題③ 容量 Memory File Size

15.

Lightmassの問題は? クオリティ ビルド時間 メモリサイズ

16.

Lightmassの問題は? クオリティ ビルド時間 真茅さん メモリサイズ

17.

Lightmassの問題は? クオリティ ビルド時間 SQEX 斎藤さん メモリサイズ

18.

Lightmassの問題は? クオリティ ビルド時間 メモリサイズ これらを調整するためには、 ライトマスの動作の仕組みや設定方法を 最初に篠山が説明します。

19.

Lightmassが出力するデータ Output Input Lightmass

20.

Lightmassが出力するデータ Light Map Shadow Map Precomputed Light Volume (半透明用のシャドウマップもありますが、そちらは今回は触れません。。)

21.

Light Map Shadow Map ③真茅さん Precomputed Light Volume

22.

LightMapとShadowMapは アクター単位で持たれます。

23.

Lightmapの実際に作られたテクスチャは、 World Settingsで見ることができます。

24.

Light Map Shadow Map ④ SQEX斎藤 さん Precomputed Light Volume

25.

ViewのメニューでDebug表示できます。

26.

Light Map Shadow Map Precomputed Light Volume すみません。今回の講演では省きます。

27.

Light Map Shadow Map Precomputed Light Volume すみません。今回の講演では省きます。 Shadow Mapを理解するためには、 その前に、Stationary Lightの挙動を理解する必要があります。

28.

Stationary Lightの影については、 上記ブログが参考になります http://darakemonodarake.hatenablog.jp/entry/2015/12/16/UE4/Stationary

29.

Light Map Shadow Map Precomputed Light Volume

30.

Lightmap をベースに Lightmassの基本アルゴリズムを学ぶ

31.

Lightmass -> Lightmap の流れを理解すれば、 他の二つは、 部分的な拡張として理解できます。

32.

おしながき 1. Lightmassによる、Lightmap 作成アルゴリズム 2. Lightmap作成のためのLightmass設定方法

33.

おしながき 1. Lightmassによる、Lightmap 作成アルゴリズム 2. Lightmap作成のためのLightmass設定方法

34.

そのまえに注意点三つ

35.

1. 説明するアルゴリズムは概要です。 概念の理解を最優先にしており不正確な部分もあります。 Lightmassの実際の実装を追っているエンジニアの方達は 回れ右してソースコードに戻ってください。 例えば、IrradiancePhoton, CacheOnSurface, IndirectPhotonPathなどについて触れておりません。 わかりやすさのためIndirectPhotonのEmitもDirectPhotonのEmitからシーケンシャルに行われるように説明し ております。

36.

2. Lightmass debugging… これから、こういう非常に簡単な図が沢山でてきますが、 基本的にはUE3の名残の機能であり、現在正式サポートはしていないので 使い方などの説明は省きます。 アルゴリズム説明の際のイメージと捉えてください。

37.

3. Base Scene これから、こういう非常に簡単な図が沢山でてきますが。。。

38.

3. Base Scene このような、一面が開いたボックスの中に、 球体があるシーンをイメージしてください。

39.

Lightmap作成の目標 ライトマップの各テクセルに 自身のライティング情報を格納する

40.

具体的な挙動になる前に。。 ライティングを二つに分けます。 Direct Lighting Indirect Lighting

41.

Direct Lighting Indirect Lighting

42.

Direct Lighting Indirect Lighting

43.

Direct Lighting ライトからの直接(Direct)のライティング 二次反射以降がないので影部分は黒い。

44.

Direct Lighting Indirect Lighting

45.

二次反射。照り返し。レフ版。 複数回バウンドしたライティング 直接光で届かない場所へ、光が回り込む。 Indirect Lighting

46.

Direct Lighting Indirect Lighting

47.

Direct Lighting Indirect Lighting

48.

Direct Lighting Indirect Lighting では、 ライトマスがこの二つをどのように計算するかを 見ていこうと思いま。。。。。。

49.

Direct Lighting Indirect Lighting しかし、 ライトによって計算の方法が変わります。

50.

説明を更に二分します。 Photonを 出す Light OR Photonを 出さない Sky Light

51.

これでこのようなマトリックスが出来ます。 Point Photonを Spot Directional 出す Light.. Light Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting Sky Light Photonを 出さない Sky Light

52.

まずはこちらから。 Point Photonを Spot Directional 出す Light.. Light Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting Sky Light Photonを 出さない Light

53.

Lightmap作成 アルゴリズム Point / Spot / Directional Light 編

54.

Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting Sky Light Photonを出さない Sky Light

55.

Photonを出す Light の Direct Lighting Direct Lightingは ライトへ、レイを飛ばして行います。 ※Photon Mappingは関与しない

56.

Light のSource Radius でライトの大きさを変えられます。

60.

Photonを出す Light の Direct Lighting ライトにレイを直接飛ばします。 影のボケなどはここで調整します。

61.

Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting ライトに 直接レイを飛ばす Sky Light Photonを出さない Sky Light

62.

Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting ライトに 直接レイを飛ばす Sky Light Photonを出さない Sky Light

63.

Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting ライトに 直接レイを飛ばす Photon Mappingで シミュレーション Sky Light Photonを出さない Sky Light

64.

Photon Mapping

65.

Photon Mapping ライトからPhotonを放出し、 光の複数回バウンスをシミュレーションする。

66.

ライトからPhotonを放出する

67.

当たらないPhotonは消失

68.

Photon Mapping 壁に衝突したフォトンは。。。

69.

Photon Mapping 壁に留まり、反射(バウンス)を表す 新たなPhotonを放つ

70.

バウンスしたら。。。

71.

バウンスしたら。。。

72.

更にバウンス

73.

沢山のフォトンを沢山反射させ、 Indirect Lightingを実現する

74.

Direct Photons

75.

Indirect Photon Path

76.

フォトンが蓄積されたので。。。

77.

Lightmapのテクセルのライティングを 周りのPhotonから見積もってみる。

78.

Lightmapのテクセルのライティングを 周りのPhotonから見積もってみる。

79.

Photon Mapping preview (radius = 50cm)

80.

Photon Mapping production (radius = 50cm)

81.

Photonが足りない!!

82.

設定をいじくりProductionよりも Photonの数を上げていく…

83.

増やしていけばいずれたどりつけそうだけ ど。。。

84.

いつになったらPhotonがたりるのでしょうか?

85.

Photon Mapping Only このテクセルに届く Photonはどれくらいでしょう?

86.

Photon Mapping Only (Direct Photon) ポイントライトから全方向にランダム

87.

Photon Mapping Only (InDirect Photon) あたった面から。。。

88.

Photon Mapping Only ? ? ? ? (InDirect Photon) あたった面から。。。 ランダムに反射する。

89.

Photon Mapping Only 各テクセルを見積もるには不十分 PhotonMappingだけの場合、 非常に沢山のPhotonを放出し、 そのバウンスを計算しなければいけない。

90.

Photon mapping

91.

Final Gathering

92.

Final Gathering Concept Photon Mappingだけならば 近傍のフォトンだけ。 これでは不十分なら。。。

93.

Final Gathering Concept ? ? ? (InDirect Photon) あたった面から。。。 ランダムに反射するならば。。

94.

Final Gathering Concept ? ? ? 逆に、各テクセルからレイを飛ばし、 もしもそのフォトンがこっちに飛んで きたなら、 どれぐらいの影響があるかを調べる。

95.

Final Gathering Concept みずからレイを飛ばして、 遠くのフォトンからの影響 を調べにいく。 見るフォトンの数が増える。

96.

Photon Mapping -> Final Gathering

97.

Final Gathering テクセルからレイを飛ばし、 フォトンを自分から取りに行く。

98.

Final Gathering

99.

Photon Mapping -> Final Gathering すごいですね。Final Gathering

100.

Photon Mapping -> Final Gathering かなり見え張りました。

101.

Photon Mapping -> Final Gathering Production: ILQ 10 かなり見え張りました。

102.

Photon Mapping -> Final Gathering Preview: ILQ 1 Production: ILQ 10 かなり見え張りました。

103.

Photon Mapping -> Final Gathering Preview: ILQ 1 Production: ILQ 10 ビルド時間 体感でおよそ100倍

104.

Final Gathering… 隣のテクセルとの整合性がないので、 サンプリングノイズが多発する。

105.

正しく見積もるには 沢山のレイを出す必要がある。

106.

Photon mapping Final Gathering

107.

ちょっとAdvance…

108.

Final Gathering Concept の時に、下のように説明しました。

109.

本当は、 自身の近くの Photonは探索しません

110.

これが正解。。。なぜ?

111.

Direct Lightingは、 直接ライトへレイを飛ばして 計算するからです。 それと別に近傍のPhotonをとると。。。

112.

実際は、Final Gatheringだけをし、自身の Photonの近傍を探索しません。 直接光成分を二回 計算してしまいます。

113.

FGだけにすれば、 Direct Photonの影響を省けます。

114.

Final Gathering

115.

Photon mapping Final Gathering

116.

Irradiance Caching

117.

Irradiance Cachingコンセプト ファイナルギャザリングをすべ てのテクセルでやるのか。。。。 時間もかかるし。。。 ノイズが。。

118.

Irradiance Cachingコンセプト 君たち、 間接光成分 だいたい一緒でしょ?

119.

Irradiance Cachingコンセプト どこかFinal Gathering したら。。。

120.

Irradiance Cachingコンセプト その情報をキャッシング

121.

Irradiance Cachingコンセプト どこかFinal Gathering したら。。。

122.

Irradiance Cachingコンセプト その情報をキャッシング

123.

Irradiance Cachingコンセプト テクセルがもしもキャッシュに 十分に入っていたら。。。

124.

Irradiance Cachingコンセプト 近くのキャッシュから見積もる

125.

Only FG With IRC

126.

近くのキャッシュから見積もる • キャッシュの半径は? • どのような補完が適切?

127.

Irradiance Caching (Production)

128.

Irradiance Caching (Preview)

129.

Final Gathtering -> Irradiance Caching FG: Preview FG + IRC: Preview Previewだと探索半径が大きくなり、 ノイズが減るがディティールも消失

130.

Photon mapping Final Gathering Irradiance Caching

131.

Photonを出す Light の Indirect Lighting アルゴリズムまとめ

132.

Photonを出す Light Scene Setup の Indirect Lighting 各テクセルに対して。。。 近くに十分な IRCある? Photon Mapping NO!! Final Gathering Irradiance Caching YES!! なら補完して 値を格納

133.

Photonを出す Light の Indirect Lighting Photon Mappingを軸にした 様々なアルゴリズムで動いています。

134.

Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting ライトに 直接レイを飛ばす Photon Mappingで シミュレーション Sky Light Photonを出さない Sky Light

135.

Photonを出さない Sky Light編

136.

Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting ライトに 直接レイを飛ばす Photon Mappingで シミュレーション Sky Light Photonを出さない Sky Light

137.

SkyLight は360度無限遠方からの ライティングです。 SkyLight

138.

Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting ライトに 直接レイを飛ばす Photon Mappingで シミュレーション Sky Light Photonを出さない Sky Light Final Gathering時に 直接参照

139.

Final Gathering SkyLight

140.

この青いレイ達。

141.

Final Gathering SkyLight ? 少なくない??

142.

例) Skylightだけのシーン にじみだらけ。

143.

Final Gathering SkyLight ? こっちにレイを 飛ばしたい。

144.

Lightmass Portal

145.

Lightmass Portal Final Gatheringの再分割を強制させる。 SkyLight P o r t a l

146.

Lightmass Portal Final Gatheringの再分割を強制させる。 SkyLight P o r t a l

147.

Lightmass Portal Final Gatheringの再分割を強制させる。 SkyLight P o r t a l

148.

実際にレイを見てみます

149.

Lightmass Portal なし vs あり

150.

Lightmass Portal なし vs あり

151.

例) Skylight+Portalのシーン にじみがなくなる。

152.

Lightmass Portal なし vs あり LightmapのPaddingの問題が。。。

153.

Photonを出さない Sky Light の Direct Lighting Skylightで屋内を照らす際、 Final GatherでSkylightを 重点的にサンプリングできるように、 Lightmass Portalを窓などに配置しましょう。

154.

Lightmap作成のまとめ Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting ライトに 直接レイを飛ばす Photon Mappingで シミュレーション Sky Light Photonを出さない Sky Light Final Gathering時に 直接参照

155.

Lightmap作成のまとめ Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting ライトに 直接レイを飛ばす Photon Mappingで シミュレーション Sky Light Photonを出さない Sky Light Final Gathering時に 直接参照

156.

Sky LightはPhotonを放出しない SkyLight

157.

けど間接光は出したい。 SkyLight

158.

Scene Setup 各テクセルに対して。。。 近くに十分な IRCある? Photon Mapping NO!! Final Gathering Mini Final Gather For Sky Lights Irradiance Caching YES!! なら補完して 値を格納

159.

本来のFinal Gatheringの前に… SkyLight

160.

本来のFinal Gatheringの前に、 SkyLight用の非常に小さなFinal Gatheringをシー ンで行い、キャッングしておく。 SkyLight Cache!

161.

本来のFinal Gatheringの前に、 SkyLight用の非常に小さなFinal Gatheringをシー ンで行い、キャッングしておく。 SkyLight

162.

本来のFinal Gatheringの前に、 SkyLight用の非常に小さなFinal Gatheringをシー ンで行い、キャッングしておく。 SkyLight

163.

本来のFinal Gatheringのとき、 SkyLight

164.

本来のFinal Gatheringのとき、 前もってキャッシュしておいたSkyLightの情報を 取得してそこからの照り返しを計算する。 SkyLight

165.

example スカイライトのみで照らしたシーン

166.

example 天井に、地面の照り返しが来てるのがわかるかと思います。

167.

問題点 Skylightの二次以上の反射を取れない ここのSkylightingの事前キャッシュの値は? SkyLight

168.

問題点 Skylightの二次以上の反射を取れない ここのSkylightingの事前キャッシュの値は0 SkyLight

169.

問題点 Skylightの二次以上の反射を取れない この周辺の事前キャッシュのライティング値は0 SkyLight

170.

問題点 Skylightの二次以上の反射を取れない SkyLight この時に、こんなオブジェクトがあったとします

171.

問題点 Skylightの二次以上の反射を取れない SkyLight Final Gathering!!!

172.

問題点 Skylightの二次以上の反射を取れない SkyLight Final Gathering!!! してもサンプリングするのは闇

173.

example

174.

example

175.

example まっくろ。

176.

Photonを出さない Sky Light の Indirect Lighting どんなに設定を上げても、 二次以降のバウンスは存在しない

177.

Lightmap作成アルゴリズムのまとめ Point Spot Photonを出す Directional Light Light.. Direct Lighting Direct Lighting Indirect Lighting Indirect Lighting Sky Light Photonを出さない Sky Light ライトに 直接レイを飛ばす Final Gathering時に 直接参照 Photon Mappingで シミュレーション Final Gathering前に 事前キャッシュ (二次以降バウンスなし)

178.

Scene Setup 各テクセルに対して。。。 近くに十分な IRCある? Photon Mapping NO!! Final Gathering Mini Final Gather For Sky Lights Irradiance Caching YES!! なら補完して 値を格納

179.

おしながき 1. Lightmassによる、Lightmap 作成アルゴリズム 2. Lightmap作成のためのLightmass設定方法

180.

おしながき 1. Lightmassによる、Lightmap 作成アルゴリズム 2. Lightmap作成のためのLightmass設定方法

181.

Lightmass.ini Lightmassの設定パラメータファイル • Engine/Config/BaseLightmass.iniにLightmassの設定があります。 • Game/Config/DefaultLightmass.ini などを記載することでゲームで上書きできます。 • Lightbuild時に毎回参照されるので、パラメータを変えても、再起動 する必要はありません。

182.

Lightmass.ini Lightmassの設定パラメータファイル • 問題は、そのパラメータが150個以上あること。 • Photon Mappingのパラメータだけでもこれぐらいあります。

183.

いやですよね。

184.

パラメータを一括で調整する機能が エディタにあります。 • World Settingsの “Lightmass”タブ 特に、一番重要かつよく触るであろう上記4パラメータ を本日は説明します。

185.

ここでは、それらがアルゴリズムにどのように 影響していくかを説明します。

186.

真茅さんが次の講演で これらがどのように 絵作りに影響をあたえるのかを、 実際のシーンで説明してくれます。

187.

大前提: Lightmass Importance Volume Photonの放出範囲などを決める大事なもの。 ないと、UE4が大きさを自動で判断するが、 基本的には使い物にならないと思ってよい

188.

必要な設定項目を振り返る Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径

189.

World Settings: Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径

190.

World Settings: Static Lighting Level Scale Lightmass内部のWorld Grid. どれぐらいスケール するかを設定する。 小さくすればするほど ビルド時間が激増します。 Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径

191.

World Settings: Static Lighting Level Scale SLLS = 1.5 SLLS = 0.5 SLLSを小さくすると、Irradiance Cacheの半径も小さく なりFGすべきサンプルが増えます。 ディティールが向上しますが、 それだけビルド時間が増えます。

192.

World Settings: Num Indirect Lighting Bounces (NILB) Photonが何回反射するか?そ の最大数を設定できる。 Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径

193.

World Settings: Num Indirect Lighting Bounces (NILB) このサンプルシーンで確認してみる。 マーキングされているテクセルが参照するフォトンの バウンスを確認

194.

World Settings: Num Indirect Lighting Bounces (NILB) 0th Bounce (Direct Photon)

195.

World Settings: Num Indirect Lighting Bounces (NILB) 1st Bounce

196.

World Settings: Num Indirect Lighting Bounces (NILB) 2nd Bounce

197.

World Settings: Num Indirect Lighting Bounces (NILB) 3rd Bounce

198.

World Settings: Num Indirect Lighting Bounces (NILB) 4th Bounce

199.

World Settings: Num Indirect Lighting Bounces (NILB) 50th Bounce

200.

World Settings: Num Indirect Lighting Bounces (NILB) Direct Photon 1st Bounce 1回目のバウンスでフォトンが激減するので、 ビルド時間への影響が少ない

201.

World Settings: Num Indirect Lighting Bounces (NILB) Photonが何回反射するか?そ の最大数を設定できる。 こちらは数を上げてもビルド時 間にさほど影響しない。 基本は固定値で5とかにしてお けば問題ないかと。 Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径

202.

World Settings: Indirect Lighting Quality (ILQ) Final Gather 時のサンプリング のレイの総数を決める際、この 値が掛け算される。 ビルド時間は増大するが、 にじみやノイズの除去につなが る Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径

203.

World Settings: Indirect Lighting Quality (ILQ) ILQ=1 ILQ=3

204.

World Settings: Indirect Lighting Quality (ILQ) ILQ=1 ILQ=3

205.

World Settings: Indirect Lighting Smoothness (ILS) Irradiance Cachingのキャッシュ 半径を制御する 値を大きくすることで、ビルド時 間は減り、にじみが解消されるが、 逆に、ディティールが減る可能性 がある。 Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径

206.

World Settings: Indirect Lighting Smoothness (ILS) ILS=2.5 ILS=0.25

207.

World Settings: Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径

208.

Build Lighting: Lighting Quality Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径

209.

Build Lighting: Lighting Quality 最大バウンス回数以外の全てのクオリティを上げる。 Direct Lighting (Shadowing) 影用レイの数 Photon mapping Photonの放出量 最大バウンス回数 Final Gathering Irradiance Caching レイの数 キャッシングの半径

210.

Build Lighting: Lighting Quality Preview Production Final Gatherのレイが増大

211.

Build Lighting: Lighting Quality Preview Production 放出Photonもしてるのがわかります

212.

Build Lighting: Lighting Quality Preview Production Irradiance Cacheの半径も縮小

214.

おしながき 1. Lightmassによる、Lightmap 作成アルゴリズム 2. Lightmap作成のためのLightmass設定方法

215.

まとめ

216.

LightmassのLightmap作成まとめ 間接光を出すために、 Lightmassは Photon Mappingを軸とした アルゴリズムを使用している。 SkylightはPhotonを発しないため、 作法や効果が異なる World SettingsやBuild Qualityで 内部パラメータの調整が可能。

217.

真茅さんへGo!!