シリコンスタジオ事例紹介

物理ベース時代のライトマップベイク奮闘記
大河原昭

ak-ogawara@siliconstudio.co.jp©Silicon Studio Corp., all rights reserved.

本講演でお話すること
DCCツールでライトマップをベイクしたときの奮闘記– 日頃はミドルウェアを作る1人のエンジニア

High Dynamic Rangeなライトマップ– 物理ベースレンダリング

１人で扱えるワークフロー– ちょっと扱いづらい©Silicon Studio Corp., all rights reserved.

ライトマップを利用したMuseumデモ

物理ベースなリアルタイムレンダリングデモ

GDC 2014, CEDEC 2014にて公開

動画©Silicon Studio Corp., all rights reserved.

発表の構成1. ライトマップの効果
2. ワークフローの構築
3. 正しいライトマップを目指して
4. クオリティアップ
5. まとめ©Silicon Studio Corp., all rights reserved.

発表の構成1. ライトマップの効果
2. ワークフローの構築
3. 正しいライトマップを目指して
4. クオリティアップ
5. まとめ©Silicon Studio Corp., all rights reserved.

LightMap
LightMaps©Silicon Studio Corp., all rights reserved.

LightMap+AlbedoMaps(+Directional Light)©Silicon Studio Corp., all rights reserved.

LightMapLighting+Image-Based©Silicon Studio Corp., all rights reserved.

+Local Reflection
LightMap and Fog©Silicon Studio Corp., all rights reserved.

ライトマップの効果Global Illumination– 屋内に差し込む直射日光– 時間をかけて計算した、正確な値

Image Based LightingのCubemap撮影

ライトマップ©Silicon Studio Corp., all rights reserved.

最終結果

発表の構成1. ライトマップの効果
2. ワークフローの構築
3. 正しいライトマップを目指して
4. クオリティアップ
5. まとめ©Silicon Studio Corp., all rights reserved.

ベイク環境3ds Max + V-Rayでベイク

デザイナの作業環境が3ds Max

V-Rayは物理ベースレンダリングに対応



描画エンジンの開発と並行して作業©Silicon Studio Corp., all rights reserved.

簡単そう?


3ds MaxでライトマップのUV展開をして、ベイクしてるだけパッと聞いた感じ簡単そう

そんなことはなかった©Silicon Studio Corp., all rights reserved.

ワークフロー
fbxファイル
ジオメトリ、ライト、マテリアル
名前付き選択セットとライトマップの対応csvファイル

ベイク
する
モデル

Flatiron
UV展開

Backburner
UV展開

V-Ray用モデル

モデル

3ds Max上での作業

ファイル入力MAXScriptによる自動化©Silicon Studio Corp., all rights reserved.

V-Ray
ベイク

ベイク済みモデル

ライトマップddsファイル

オブジェクトとライトマップの対応
csvファイル

描画エンジンワークフローのポイント
ベイク補助プラグインの導入
ベイク
するモデル

fbxファイル
ジオメトリ、ライト、マテリアル
名前付き選択セットとライトマップの対応csvファイル

Flatiron

ネットワークレンダリング

Backburner

UV展開

UV展開

UV展開

V-Ray用

モデル

モデル

自動ベイク

©Silicon Studio Corp., all rights reserved.

V-Ray
ベイク

ベイク済み
モデル

描画エンジンへの入力
ライトマップddsファイル

オブジェクトとライトマップの対応
csvファイル

描画エンジンFlatironの導入
ベイク補助プラグインの導入
Flatiron©Silicon Studio Corp., all rights reserved.

複数オブジェクトを１枚にベイクしたいモデリングとベイクの分業のため– モデリング• オブジェクトごとに編集内容&履歴を管理したい– ベイク• 描画エンジンのために、解像度、枚数などを調整したい©Silicon Studio Corp., all rights reserved.

3ds Maxの問題


複数オブジェクトを1枚にベイクできない– オブジェクトごとにベイクされてしまう

UVの自動展開機能が扱いづらい– パラメータの試行錯誤©Silicon Studio Corp., all rights reserved.

Flatiron

ベイク補助プラグイン

複数オブジェクトを１枚にベイク

簡易な設定によるUVの自動展開– 解像度– パディングUV展開©Silicon Studio Corp., all rights reserved.

ベイク

UV展開

UV展開

UV展開

モデルUV展開©Silicon Studio Corp., all rights reserved.

オブジェクトを複数選択してUV展開

オブジェクトを複数選択して、UV展開する作業を繰り返す

UVを確認して、各オブジェクトとライトマップの対応を決定©Silicon Studio Corp., all rights reserved.

UV展開の設定が保存されない
他を選択後パラメータを指定し、UV展開


ベイクする時に必要な情報が保存されない– 解像度、パディング– ライトマップとオブジェクトの対応


最新のFlatironでは改善された©Silicon Studio Corp., all rights reserved.

再選択時に、パラメータが表示されない

名前付き選択セット

3ds Maxの機能
ビューポート上で選択するオブジェクトの集合を名前のリストで管理
名前付き選択セットのリスト

名前付き選択セット
クリック

選択される
©Silicon Studio Corp., all rights reserved.

選択セットと共通パラメータによる管理

ライトマップとオブジェクトの対応– ライトマップ１枚と対応させた
名前付き選択セット



解像度、パディング– UV展開時のパラメータはなるべく共通化©Silicon Studio Corp., all rights reserved.

fbxファイルとマテリアル変換
fbxファイル
ジオメトリ、ライト、マテリアル

描画エンジンとの共有

UV展開

V-Ray用モデル

モデル

VRayマテリアルへ変換

V-Rayで正しくベイクするため©Silicon Studio Corp., all rights reserved.

自動ベイク
名前付き選択セットとライトマップの対応csvファイル

V-Ray用モデル

自動ベイク©Silicon Studio Corp., all rights reserved.

まとめてベイクしたいライトマップが45枚



1枚ベイクに30分以上

22.5時間以上

自動化したい

Flatironは自動ベイク機能なし©Silicon Studio Corp., all rights reserved.

MAXScriptによる自動化


Flatrionのプリセットファイル– UV展開のパラメータ– ライトマップのフォーマット



csvファイル– 名前付き選択セット→ライトマップ



完全な自動化には至らず– ネットワークレンダリング– ジョブを投げるダイアログ©Silicon Studio Corp., all rights reserved.

名前付き選択セット
ライトマップのファイル名

ワークフローのポイント
ネットワークレンダリング
Backburner
V-Rayベイク©Silicon Studio Corp., all rights reserved.

ネットワークレンダリングBackburner– 3ds Maxに付属– ジョブ管理ツール



サーバ3台



8時間ぐらいで終わる

ジョブ一覧– 一晩で終わる
サーバ一覧©Silicon Studio Corp., all rights reserved.

外部参照ファイルでのUV展開&ベイク

OKボタンをクリックする度にアセットがzip圧縮&保存– アセットの総量が1.16GB

外部参照ファイルをネットワーク共有
UV展開&ベイク可能©Silicon Studio Corp., all rights reserved.

外部参照描画エンジンへの入力
fbxファイル
ジオメトリ、ライト、マテリアル

描画エンジンへの入力
ライトマップddsファイル

ベイク済み
モデル©Silicon Studio Corp., all rights reserved.

オブジェクトとライトマップの対応
csvファイル

描画エンジン描画エンジンへの入力ファイル
fbxファイル
– オブジェクトごとのマテリアル分割– ディフューズテクスチャ– ジオメトリ、ライト

ライトマップ– 45枚のddsファイル

csvファイル
– 各オブジェクトとライトマップの対応©Silicon Studio Corp., all rights reserved.

各オブジェクトとライトマップの対応

ベイク時に、Flatironがシェルマテリアルを付加– 元マテリアルを保持しつつ、ライトマップをオブジェクトへ追加

MAXScriptで抽出

木材マテリアルを共有©Silicon Studio Corp., all rights reserved.

ベイク後各オブジェクトにシェルマテリアルを付加

ベイク手順1.
2.

ベイクモデルを3ds Maxでロード
1.
複数オブジェクトを選択セットに登録
UV展開
2.
3.

各選択セットをFlatironでUV展開
パラメータはあとから確認できないのでメモ
UVを確認してダメなら2に戻る

3.
4.

UV展開後のモデルをfbxでエクスポート
モデルをV-Rayマテリアルに変換するMAXScriptを実行

5.

自動ベイク

2.
3.
4.
5.
6.

ベイクするMAXScript用設定ファイルを用意
UV展開のパラメータ、ライトマップのフォーマット、選択セットごとの出力ライトマップファイル名
V-Rayのパラメータを設定
ベイクするMAXScriptを実行
ネットワークレンダリングのためのダイアログを、ライトマップの枚数分クリック
8時間待つ
ライトマップを確認して、ダメなら8に戻る

1.
2.

ベイク済みモデルからオブジェクトとライトマップの対応表を抽出するMAXScriptを実行
モデルファイル(.fbx)、ライトマップ(.dds)、対応表(.csv)を描画エンジンに入力

1.

6.

描画エンジンへの入力

7.

描画エンジンの結果を確認©Silicon Studio Corp., all rights reserved.

ワークフローのまとめ

つぎはぎ– DCCツールやプラグインの合わせ技– MAXScriptでなるべく自動化



1人でも扱えるが・・– 面倒な作業– 1枚1枚チェックしないと心配– 繰り返すのはつらい©Silicon Studio Corp., all rights reserved.

発表の構成1. ライトマップの効果
2. ワークフローの構築
3. 正しいライトマップを目指して
4. クオリティアップ
5. まとめ©Silicon Studio Corp., all rights reserved.

物理的に正しいライトマップとは?


実世界に則した値がベイクされたもの– V-Rayは物理ベースレンダリング• 実世界に則した計算• 描画エンジンも

実世界に則した計算を行うには、物理的に正しいライトマップが必要©Silicon Studio Corp., all rights reserved.

発表の構成1. ライトマップの効果
2. ワークフローの構築
3. 正しいライトマップを目指して
i.

ベイク環境の確認

ii.

実世界の光源環境を再現するパラメータ

4. クオリティアップ
5. まとめ©Silicon Studio Corp., all rights reserved.

発表の構成1. ライトマップの効果
2. ワークフローの構築
3. 正しいライトマップを目指して
i.

ベイク環境の確認

ii.

実世界の光源環境を再現するパラメータ

4. クオリティアップ
5. まとめ©Silicon Studio Corp., all rights reserved.

Museumデモの光源設定


directional light ×１– 太陽の直接光を再現– パラメータ• マルチプライヤ (強さのスカラー値)
• カラー



sky light– 天空光を再現– 3ds Maxにおける環境マップ• HDRスカイマップ©Silicon Studio Corp., all rights reserved.

ベイク環境で確認すべきこと

ライトマップにベイクされている値の確認– マニュアルには詳しく書かれていない



光源の入力と出力の関係を確認– directional light: マルチプライヤ、カラー– sky light: スカイマップ



光源の設定を行うために確認する必要がある©Silicon Studio Corp., all rights reserved.

ライトマップにベイクされるべき値

Global Illumination– 間接光による値

直接光
間接光©Silicon Studio Corp., all rights reserved.

“間接光”はどんな値なのか


照度であると考えられる
間接光による照度がGlobal Illumination

照度ある点を照らす光の総量V-Rayで間接光の照度は出力可能か?

©Silicon Studio Corp., all rights reserved.

V-Rayがライトマップに出力する値
レンダリング設定で選択可能– VRayGlobalIllumination– VRayRawLighting– VRayRawGlobalIllumination– … などなど
VRayRawGlobalIlluminationのようだが…
– マニュアルでは”Global Illuminationの値”



本当にVRayRawGlobalIlluminationで正解なのか?

©Silicon Studio Corp., all rights reserved.

簡易なシーンでレンダリング

V-Rayの最終出力



VRayRawLighting

VRayRawGlobalIlluminationが間接光のようだが– 照度かどうかはわからない



VRayRaw
GlobalIllumination

もう少し詳しく調べる必要がある©Silicon Studio Corp., all rights reserved.

VRay
GlobalIllumination

VRayRawGlobalIlluminationはどんな値か?
間接光を含むV-Ray向けシーンをベイクして、実際に値を確認– 簡単な数式で、照度を推定できるようにする• ベイク結果の確認と比較を簡単にするため



間接光を発するsky lightによる確認シーンを用意©Silicon Studio Corp., all rights reserved.

sky lightのV-Rayシーン


スカイマップは一様に(1.0, 1.0, 1.0)

照度
– 一様な輝度の半球積分Ω

環境マップだけなので板ポリ１枚

𝐿𝑖 𝑥, 𝜔 𝜔 ∙ 𝑛 𝑑𝜔= スカイマップの𝑅𝐺𝐵 ∗ Ω 𝜔 ∙ 𝑛 𝑑𝜔= スカイマップの𝑅𝐺𝐵 ∗ 𝜋= 𝜋, 𝜋, 𝜋©Silicon Studio Corp., all rights reserved.

sky light

sky lightのシーンをベイクした結果


ライトマップを確認– ベイクされた値は(1.0, 1.0, 1.0)
–

照度𝜋

照度
 スカイマップの値を変更しても、がベイクされる
𝜋– (0.5, 0.5, 0.5), (2.0, 0.0, 0.0)など

sky lightによって、照度𝜋©Silicon Studio Corp., all rights reserved.

が出力されることを確認ライトマップにベイクされる値


VRayRawGlobalIllumination– V-Rayの出力– 間接光による値

照度が出力される
𝜋– sky lightによって、

ライトマップにベイクされている値の確認ができた©Silicon Studio Corp., all rights reserved.

各光源の入力と出力の関係は?
sky lightは確認済み

directional lightに関しても確認する必要がある– 簡単な数式で、照度を推定できるようにする• V-Rayの出力結果の確認を簡単にするため©Silicon Studio Corp., all rights reserved.

directional lightのV-Rayシーン


マルチプライヤ: 1.0



カラー: (1.0, 1.0, 1.0)

照度

板ポリに対して垂直に当てる– punctual lightなので𝜋乗算– 𝜋 ∗ マルチプライヤ ∗ カラー = 𝜋, 𝜋, 𝜋
directional light

予想– sky lightと同じ値が出力されるはず–照度𝜋= (1.0, 1.0, 1.0)
©Silicon Studio Corp., all rights reserved.

directional lightのシーンの出力をした結果
V-Rayの出力を確認– 出力された値は(1.0, 1.0, 1.0)
– 想定通り

照度
マルチプライヤとカラーの値を変えても、が出力された

directional lightの入力と出力の関係が確認できた

𝜋©Silicon Studio Corp., all rights reserved.

全光源の入力と出力の関係を確認した


各光源の入力と出力の関係を確認できた– sky light– directional light

光源の設定を行う準備ができた©Silicon Studio Corp., all rights reserved.

発表の構成1. ライトマップの効果
2. ワークフローの構築
3. 正しいライトマップを目指して
i.

ベイク環境の確認

ii.

実世界の光源環境を再現するパラメータ

4. クオリティアップ
5. まとめ©Silicon Studio Corp., all rights reserved.

スカイマップの修正

スカイマップの太陽は取り除く– センサのレンジ外– 不正確な値



太陽は直接光をdirectional lightで再現©Silicon Studio Corp., all rights reserved.

実世界の光源環境の再現

directional light
太陽の直接光を再現

sky light
天空光を再現

実世界での相対強度を再現する©Silicon Studio Corp., all rights reserved.

実世界を再現する光源のパラメータ

太陽の直接光と天空光による照度の比を再現



directional lightのマルチプライヤを設定– デザイナが選んだスカイマップから照度の比©Silicon Studio Corp., all rights reserved.

現実的な値域内の、マルチプライヤ


スカイマップから、正確に実世界を再現するのは困難– 撮影日時、場所、大気の状態は不明– 太陽の直接光の強さも変化するはず

きっちり計算するのは難しい
現実的な値域を計算し、それを満たすようにマルチプライヤを調整する– 実世界の照度の比©Silicon Studio Corp., all rights reserved.

実世界の照度

太陽の直接光による法線照度– 32000 ～ 130000 lux



天空光による照度– 10000 ～ 25000 lux※各照度は[Hiscocks2011] より参照
©Silicon Studio Corp., all rights reserved.

太陽を向いた面における照度実世界の照度の比

直接光と天空光の照度の比の値域– 直接光の強さによって、両照度は変化– 最小値同士、最大値同士で照度の比を計算

直接光の法線照度3.2 ≤≤ 5.2
天空光の照度

実世界の照度の比の値域を満たすように、マルチプライヤを決める©Silicon Studio Corp., all rights reserved.

各光源の照度directional light

directional light– 𝜋 ∗ マルチプライヤ ∗ カラーsky light– sky lightだけベイク– 𝜋 ∗ ライトマップの値• ライトマップは照度𝜋©Silicon Studio Corp., all rights reserved.

sky light

マルチプライヤの決定

実世界の照度の比の値域内で、マルチプライヤを調整
directional lightの照度
3.2 ≤
≤ 5.2
sky lightの照度



描画エンジンの結果を見つつ決定©Silicon Studio Corp., all rights reserved.

正しいライトマップのまとめ

ベイク環境の確認– ライトマップにベイクされている値– 光源の入力と出力の関係



実世界を光源環境を再現するパラメータ– 光源間の相対強度を、実世界に即すように

物理ベースレンダリングをなるべく正しく行うための確認と設定©Silicon Studio Corp., all rights reserved.

発表の構成1. ライトマップの効果
2. ワークフローの構築
3. 正しいライトマップを目指して
4. クオリティアップ
5. まとめ©Silicon Studio Corp., all rights reserved.

ノイズを減らしたい

デフォルト設定でGlobal Illuminationをベイクすると、結構ノイズがのる
V-Rayのパラメータを変更し、いろいろ試したが– ノイズの閾値を下げるのが１番効果的– 基本的にV-Rayのマニュアル通り©Silicon Studio Corp., all rights reserved.

サンプラの設定
Min Samples: 16– 最低サンプリング量Noise threshold: 0.001– ノイズを減らすために最小値に– 全ベイクで8時間で済んだ

Global subdivs multiplier: 8.0– シーン全体のサンプリング数に影響©Silicon Studio Corp., all rights reserved.

Global Illuminationの設定
Primary bounces– Irradiance map
特定箇所で計算し、補間– プリセット: High• サンプリング数• 補間サンプル数
Secondary bounces– Brute force
モンテカルロ・パストレーシング©Silicon Studio Corp., all rights reserved.

V-Rayのマニュアルより引用

Irradiance Mapのサンプリング数

50


200

ノイズがのりやすいライトマップだけ上げる– 間接光だけで照らされている箇所– サンプリング数はベイク時間に直結©Silicon Studio Corp., all rights reserved.

Irradiance Mapのサンプリング数

50


200

ノイズがのりやすいライトマップだけ上げる– 間接光だけで照らされている箇所– サンプリング数はベイク時間に直結©Silicon Studio Corp., all rights reserved.

Irradiance Mapの補間サンプル数

20

ノイズをぼやかして、ごまかしたい時に使う– ベイク時間にあまり影響しない©Silicon Studio Corp., all rights reserved.

200

Irradiance Mapの補間サンプル数

20

ノイズをぼやかして、ごまかしたい時に使う– ベイク時間にあまり影響しない©Silicon Studio Corp., all rights reserved.

200

補間サンプル数を上げ過ぎるとポリゴンの境目が目立つ

のっぺりする

接地感がなくなる

多用しないこと©Silicon Studio Corp., all rights reserved.

20200

補間サンプル数を上げ過ぎると

ポリゴンの境目が目立つ

のっぺりする

接地感がなくなる

多用しないこと©Silicon Studio Corp., all rights reserved.

20200

よくやっていたベイク手順


同じ設定で全部ベイク– サンプラ, Global Illumination

ノイズが目立つライトマップがあったら– Irradiance mapの補間サンプルを上げてぼやかす– Irradiance mapのサンプリング数を上げる©Silicon Studio Corp., all rights reserved.

きれいなライトマップの完成©Silicon Studio Corp., all rights reserved.

発表の構成1. ライトマップの効果
2. ワークフローの構築
3. 正しいライトマップを目指して
4. クオリティアップ
5. まとめ©Silicon Studio Corp., all rights reserved.

発表のまとめ
1. ライトマップの効果– 高品質なGlobal Illumination

2. ワークフローの構築– 3ds MaxとV-Rayによるベイク、FlatironによるUV展開

3. 正しいライトマップを目指して– 物理ベースレンダリングをなるべく正しく行うための確認と設定

4. クオリティアップ– ノイズ低減©Silicon Studio Corp., all rights reserved.

最後に

改善点
– さらなる自動化– 不安定

単純なライトモデルなら、細かい確認が可能

最終的なクオリティは高い

ご静聴ありがとうございました©Silicon Studio Corp., all rights reserved.

参考文献


[Hiscocks2011] Peter D.Hiscocks, “Measuring Light”
http://www.ee.ryerson.ca/~phiscock/astronomy/light-pollution/photometry.pdf©Silicon Studio Corp., all rights reserved.