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

Post on 21-Apr-2017

6.312 Views

Category:

Engineering

6 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Lightmass Deep Divevol.1 Lightmap 編

篠山 範明Epic Games Japan

Senior Support Engineer

Lightmap 編

Lightmap 編の前に

Lightmass ってなに?

Lightmass って何?

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

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

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

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

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

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

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

Lightmass の問題①クオリティ

Lightmass の問題②ビルド時間

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

Lightmass の問題③容量

Memory File Size

Lightmass の問題は?

クオリティ ビルド時間 メモリサイズ

Lightmass の問題は?

真茅さん

クオリティ ビルド時間 メモリサイズ

Lightmass の問題は?

SQEX斎藤さん

クオリティ ビルド時間 メモリサイズ

Lightmass の問題は?

これらを調整するためには、ライトマスの動作の仕組みや設定方法を最初に篠山が説明します。

クオリティ ビルド時間 メモリサイズ

Lightmass が出力するデータ

Lightmass

InputOutpu

t

Lightmass が出力するデータ

LightMap

ShadowMap

PrecomputedLight

Volume

(半透明用のシャドウマップもありますが、そちらは今回は触れません。。)

LightMap

ShadowMap

PrecomputedLight

Volume

③ 真茅さん

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

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

LightMap

ShadowMap

PrecomputedLight

Volume

④ SQEX 斎藤さん

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

LightMap

ShadowMap

PrecomputedLight

Volume

すみません。今回の講演では省きます。

LightMap

ShadowMap

PrecomputedLight

Volume

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

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

LightMap

ShadowMap

PrecomputedLight

Volume

Lightmapをベースに

Lightmass の基本アルゴリズムを学ぶ

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

おしながき1.Lightmass による、 Lightmap 作成アルゴリズム

2.Lightmap 作成のための Lightmass 設定方法

おしながき1.Lightmass による、 Lightmap 作成アルゴリズム

2.Lightmap 作成のための Lightmass 設定方法

そのまえに注意点三つ

1. 説明するアルゴリズムは概要です。概念の理解を最優先にしており不正確な部分もあります。Lightmass の実際の実装を追っているエンジニアの方達は回れ右してソースコードに戻ってください。

例えば、 IrradiancePhoton, CacheOnSurface, IndirectPhotonPath などについて触れておりません。わかりやすさのため IndirectPhoton の Emit も DirectPhoton の Emit からシーケンシャルに行われるように説明しております。

2. Lightmass debugging…

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

3. Base Scene

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

3. Base Scene

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

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

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

Direct Lighting

Indirect Lighting

Direct Lighting

Indirect Lighting

Direct Lighting

Indirect Lighting

Direct Lighting

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

Direct Lighting

Indirect Lighting

Indirect Lighting

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

Direct Lighting

Indirect Lighting

Direct Lighting

Indirect Lighting

Direct Lighting

Indirect Lighting

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

Direct Lighting

Indirect Lighting

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

説明を更に二分します。Photon を出す

Light

Photon を出さないSky Light

OR

これでこのようなマトリックスが出来ます。Point SpotDirectionalLight..

Sky Light

Direct Lighting

Indirect Lighting

Direct Lightin

gIndirect Lightin

g

Photon を出すLight

Photon を出さないSky Light

まずはこちらから。Point SpotDirectionalLight..

Sky Light

Direct Lighting

Indirect Lighting

Direct Lightin

gIndirect Lightin

g

Photon を出すLight

Photon を出さないLight

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

Point SpotDirectionalLight..

Sky Light

Direct Lighting

Indirect Lighting

Direct Lighting

Indirect Lighting

Photon を出すLight

Photon を出さないSky Light

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

Direct LightingPhoton を出す Light の

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

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

Direct LightingPhoton を出す Light の

Point SpotDirectionalLight..

Sky Light

Direct Lighting ライトに

直接レイを飛ばすIndirect Lighting

Direct Lighting

Indirect Lighting

Photon を出すLight

Photon を出さないSky Light

Point SpotDirectionalLight..

Sky Light

Direct Lighting ライトに

直接レイを飛ばすIndirect Lighting

Direct Lighting

Indirect Lighting

Photon を出すLight

Photon を出さないSky Light

Point SpotDirectionalLight..

Sky Light

Direct Lighting ライトに

直接レイを飛ばすIndirect Lighting Photon Mapping で

シミュレーション

Direct Lighting

Indirect Lighting

Photon を出すLight

Photon を出さないSky Light

Photon Mapping

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

ライトから Photon を放出する

当たらない Photon は消失

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

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

バウンスしたら。。。

バウンスしたら。。。

更にバウンス

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

Direct Photons

Indirect Photon Path

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

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

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

Photon Mapping preview (radius = 50cm)

Photon Mapping production (radius = 50cm)

Photon が足りない!!

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

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

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

Photon Mapping Only

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

Photon Mapping Only

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

Photon Mapping Only

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

Photon Mapping Only

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

??

??

Photon Mapping Only

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

Photon mapping

Final Gathering

Final Gathering Concept

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

Final Gathering Concept

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

??

Final Gathering Concept

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

??

Final Gathering Concept

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

Photon Mapping -> Final Gathering

Final Gathering

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

Final Gathering

Photon Mapping -> Final Gathering

すごいですね。 Final Gathering

Photon Mapping -> Final Gathering

かなり見え張りました。

Photon Mapping -> Final Gathering

かなり見え張りました。Production: ILQ 10

Photon Mapping -> Final Gathering

かなり見え張りました。Production: ILQ 10Preview: ILQ 1

Photon Mapping -> Final Gathering

ビルド時間 体感でおよそ 100 倍Production: ILQ 10Preview: ILQ 1

Final Gathering…

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

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

Photon mapping

Final Gathering

ちょっと Advance…

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

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

これが正解。。。なぜ?

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

実際は、 Final Gathering だけをし、自身の Photon の近傍を探索しません。

直接光成分を二回計算してしまいます。

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

Final Gathering

Photon mapping

Final Gathering

Irradiance Caching

Irradiance Caching コンセプト

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

Irradiance Caching コンセプト

君たち、間接光成分だいたい一緒でしょ?

Irradiance Caching コンセプト

どこか Final Gatheringしたら。。。

Irradiance Caching コンセプト

その情報をキャッシング

Irradiance Caching コンセプト

どこか Final Gatheringしたら。。。

Irradiance Caching コンセプト

その情報をキャッシング

Irradiance Caching コンセプト

テクセルがもしもキャッシュに十分に入っていたら。。。

Irradiance Caching コンセプト

近くのキャッシュから見積もる

Only FG With IRC

近くのキャッシュから見積もる

• キャッシュの半径は?• どのような補完が適切?

Irradiance Caching (Production)

Irradiance Caching (Preview)

Final Gathtering -> Irradiance Caching

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

Photon mapping

Final Gathering

IrradianceCaching

アルゴリズムまとめ

Indirect LightingPhoton を出す Light の

Final Gathering

Irradiance Caching

各テクセルに対して。。。

近くに十分なIRC ある?

NO!!

YES!!なら補完して値を格納Photon Mapping

Scene Setup

Indirect LightingPhoton を出す Light の

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

Indirect LightingPhoton を出す Light の

Point SpotDirectionalLight..

Sky Light

Direct Lighting ライトに

直接レイを飛ばすIndirect Lighting Photon Mapping で

シミュレーション

Direct Lighting

Indirect Lighting

Photon を出すLight

Photon を出さないSky Light

Photon を出さないSky Light 編

Point SpotDirectionalLight..

Sky Light

Direct Lighting ライトに

直接レイを飛ばすIndirect Lighting Photon Mapping で

シミュレーション

Direct Lighting

Indirect Lighting

Photon を出すLight

Photon を出さないSky Light

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

Point SpotDirectionalLight..

Sky Light

Direct Lighting ライトに

直接レイを飛ばすFinal Gathering 時に

直接参照Indirect Lighting Photon Mapping で

シミュレーション

Direct Lighting

Indirect Lighting

Photon を出すLight

Photon を出さないSky Light

Final Gathering

SkyLight

この青いレイ達。

Final Gathering

SkyLight

?少なくない??

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

Final Gathering

SkyLight

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

Lightmass Portal

Lightmass PortalFinal Gathering の再分割を強制させる。

SkyLight

Portal

Lightmass PortalFinal Gathering の再分割を強制させる。

SkyLight

Portal

Lightmass PortalFinal Gathering の再分割を強制させる。

SkyLight

Portal

実際にレイを見てみます

Lightmass Portal なし vs あり

Lightmass Portal なし vs あり

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

Lightmass Portal なし vs あり

Lightmap の Padding の問題が。。。

Skylight で屋内を照らす際、Final Gather で Skylight を

重点的にサンプリングできるように、Lightmass Portal を窓などに配置しましょう。

Direct LightingPhoton を出さないSky Light の

Lightmap 作成のまとめPoint SpotDirectionalLight..

Sky Light

Direct Lighting ライトに

直接レイを飛ばすFinal Gathering 時に

直接参照Indirect Lighting Photon Mapping で

シミュレーション

Direct Lighting

Indirect Lighting

Photon を出すLight

Photon を出さないSky Light

Lightmap 作成のまとめPoint SpotDirectionalLight..

Sky Light

Direct Lighting ライトに

直接レイを飛ばすFinal Gathering 時に

直接参照Indirect Lighting Photon Mapping で

シミュレーション

Direct Lighting

Indirect Lighting

Photon を出すLight

Photon を出さないSky Light

Sky Light は Photon を放出しない

SkyLight

けど間接光は出したい。

SkyLight

Final Gathering

Irradiance Caching

各テクセルに対して。。。

近くに十分なIRC ある?

NO!!

YES!!なら補完して値を格納Photon Mapping

Scene Setup

Mini Final GatherFor Sky Lights

New!!!

本来の Final Gathering の前に…

SkyLight

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

SkyLight

Cache!

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

SkyLight

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

SkyLight

本来の Final Gathering のとき、

SkyLight

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

example

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

example

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

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

SkyLightここの Skylighting の事前キャッシュの値は?

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

SkyLightここの Skylighting の事前キャッシュの値は 0

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

SkyLightこの周辺の事前キャッシュのライティング値は 0

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

SkyLight

この時に、こんなオブジェクトがあったとします

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

SkyLight

Final Gathering!!!

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

SkyLight

Final Gathering!!!

してもサンプリングするのは闇

example

example

example

まっくろ。

どんなに設定を上げても、二次以降のバウンスは存在しない

Indirect Lighting

Photon を出さないSky Light の

Lightmap 作成アルゴリズムのまとめPoint SpotDirectionalLight..

Sky Light

Direct Lighting ライトに

直接レイを飛ばすFinal Gathering 時に

直接参照Indirect Lighting Photon Mapping で

シミュレーションFinal Gathering 前に事前キャッシュ

( 二次以降バウンスなし )

Direct Lighting

Indirect Lighting

Photon を出すLight

Photon を出さないSky Light

Final Gathering

Irradiance Caching

各テクセルに対して。。。

近くに十分なIRC ある?

NO!!

YES!!なら補完して値を格納Photon Mapping

Scene Setup

Mini Final GatherFor Sky Lights

おしながき1.Lightmass による、 Lightmap 作成アルゴリズム

2.Lightmap 作成のための Lightmass 設定方法

おしながき1.Lightmass による、 Lightmap 作成アルゴリズム

2.Lightmap 作成のための Lightmass 設定方法

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

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

いやですよね。

パラメータを一括で調整する機能がエディタにあります。• World Settings の “ Lightmass” タブ

特に、一番重要かつよく触るであろう上記 4 パラメータを本日は説明します。

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

真茅さんが次の講演でこれらがどのように

絵作りに影響をあたえるのかを、実際のシーンで説明してくれます。

大前提 : Lightmass Importance Volume

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

Photon mapping

Final Gathering

IrradianceCaching

Direct Lighting

(Shadowing)影用レイの数 Photon の放出量

最大バウンス回数 レイの数 キャッシングの半径

必要な設定項目を振り返る

World Settings:  

Photon mapping

Final Gathering

IrradianceCaching

Direct Lighting

(Shadowing)影用レイの数 Photon の放出量

最大バウンス回数 レイの数 キャッシングの半径

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 の半径も小さくなり FG すべきサンプルが増えます。ディティールが向上しますが、それだけビルド時間が増えます。

World Settings: Num Indirect Lighting Bounces (NILB)  

Photon が何回反射するか?その最大数を設定できる。

Photon mapping

Final Gathering

IrradianceCaching

Direct Lighting

(Shadowing)影用レイの数 Photon の放出量

最大バウンス回数 レイの数 キャッシングの半径

World Settings: Num Indirect Lighting Bounces (NILB)  

このサンプルシーンで確認してみる。マーキングされているテクセルが参照するフォトンのバウンスを確認

World Settings: Num Indirect Lighting Bounces (NILB)  

0th Bounce (Direct Photon)

World Settings: Num Indirect Lighting Bounces (NILB)  

1st Bounce

World Settings: Num Indirect Lighting Bounces (NILB)  

2nd Bounce

World Settings: Num Indirect Lighting Bounces (NILB)  

3rd Bounce

World Settings: Num Indirect Lighting Bounces (NILB)  

4th Bounce

World Settings: Num Indirect Lighting Bounces (NILB)  

50th Bounce

World Settings: Num Indirect Lighting Bounces (NILB)  

Direct Photon

1st Bounce

1 回目のバウンスでフォトンが激減するので、ビルド時間への影響が少ない

World Settings: Num Indirect Lighting Bounces (NILB)  

Photon が何回反射するか?その最大数を設定できる。こちらは数を上げてもビルド時間にさほど影響しない。基本は固定値で 5 とかにしておけば問題ないかと。

Photon mapping

Final Gathering

IrradianceCaching

Direct Lighting

(Shadowing)影用レイの数 Photon の放出量

最大バウンス回数 レイの数 キャッシングの半径

World Settings: Indirect Lighting Quality (ILQ)  

Final Gather 時のサンプリングのレイの総数を決める際、この値が掛け算される。ビルド時間は増大するが、にじみやノイズの除去につながる

Photon mapping

Final Gathering

IrradianceCaching

Direct Lighting

(Shadowing)影用レイの数 Photon の放出量

最大バウンス回数 レイの数 キャッシングの半径

World Settings: Indirect Lighting Quality (ILQ)  

ILQ=1 ILQ=3

World Settings: Indirect Lighting Quality (ILQ)  

ILQ=1 ILQ=3

World Settings: Indirect Lighting Smoothness (ILS)  

Irradiance Caching のキャッシュ半径を制御する値を大きくすることで、ビルド時間は減り、にじみが解消されるが、逆に、ディティールが減る可能性がある。

Photon mapping

Final Gathering

IrradianceCaching

Direct Lighting

(Shadowing)影用レイの数 Photon の放出量

最大バウンス回数 レイの数 キャッシングの半径

World Settings: Indirect Lighting Smoothness (ILS)  

ILS=2.5 ILS=0.25

World Settings:  

Photon mapping

Final Gathering

IrradianceCaching

Direct Lighting

(Shadowing)影用レイの数 Photon の放出量

最大バウンス回数 レイの数 キャッシングの半径

Build Lighting: Lighting Quality  

Photon mapping

Final Gathering

IrradianceCaching

Direct Lighting

(Shadowing)影用レイの数 Photon の放出量

最大バウンス回数 レイの数 キャッシングの半径

Build Lighting: Lighting Quality  

Photon mapping

Final Gathering

IrradianceCaching

Direct Lighting

(Shadowing)影用レイの数 Photon の放出量

最大バウンス回数 レイの数 キャッシングの半径

最大バウンス回数以外の全てのクオリティを上げる。

Build Lighting: Lighting Quality

Preview Production

Final Gather のレイが増大

Build Lighting: Lighting Quality

Preview Production

放出 Photon もしてるのがわかります

Build Lighting: Lighting Quality

Preview Production

Irradiance Cache の半径も縮小

おしながき1.Lightmass による、 Lightmap 作成アルゴリズム

2.Lightmap 作成のための Lightmass 設定方法

まとめ

Lightmass の Lightmap 作成まとめ間接光を出すために、

Lightmass はPhoton Mapping を軸とした

アルゴリズムを使用している。Skylight は Photon を発しないため、

作法や効果が異なるWorld Settings や Build Quality で内部パラメータの調整が可能。

真茅さんへ Go!!

top related