CEDEC 2012

コンピュータ・グラフィクス関連の最新論文紹介～Modular Radiance Transfer法の解説～

田村 尚希
安田 廉
シリコンスタジオ株式会社

発表の流れ
1. 発表の概要
2. 技術紹介 + デモ
3. まとめCEDEC 2012

発表の流れ
1. 発表の概要
2. 技術紹介 + デモ
3. まとめCEDEC 2012

発表の概要• 本セッションの目的– ゲーム業界にとって有望な技術の理解及び知識の共有• 本セッションの内容– ［Modular Radiance Transfer法］を利用したリアルタイムGI(Global Illumination)技術の解説

CEDEC 2012

解説技術の特徴• 長所– とにかく高速– 多重反射を扱える• 短所

使いこなせればワンランク上の表現が可能– 使い所を選ぶ– 多少込み入った前計算が必要

CEDEC 2012

注意点
• 元論文では、Modular (モジュール式)という概念が前面に押し出されており、立方体を組み合わせたシーン以外は適用しにくいような印象を受けます• 本セッションでは、Modularの部分は抑えて説明しますので論文の流れと多少異なります

CEDEC 2012

発表の流れ
1. 発表の概要
2. 技術紹介 + デモ– 間接光計算手法の解説 （論文4節）– シーン分割による高速化の解説 （論文5節）

3. まとめCEDEC 2012

発表の流れ
1. 発表の概要
2. 技術紹介 + デモ– 間接光計算手法の解説 （論文4節）– シーン分割による高速化の解説 （論文5節）

3. まとめCEDEC 2012

間接光の概要• そもそも間接光って何?
⇒ 光源から一度以上物体に反射して届く光CEDEC 2012

間接光の概要• 間接光があると何が良いのか⇒ 柔らかなライティングを再現でき、シーン全体の説得力が増す

直接光

直接光 + 間接光

その分非常に計算負荷が高くリアルタイム処理は困難

解説手法は様々な高速化や制約を設けてリアルタイム処理を実現
CEDEC 2012

解説手法の計算概要
背景オブジェクト
(静的オブジェクトに限る)

その他オブジェクト

分類+
直接光
光の伝播
間接光計算

間接光計算

統合

+
直接光 + 間接光CEDEC 2012

間接光計算の解説手順
Step1. 背景オブジェクトの間接光計算
Step2. その他オブジェクトへの光の伝播
Step3. デモ及び考察

CEDEC 2012

間接光計算の解説手順
Step1. 背景オブジェクトの間接光計算
Step2. その他オブジェクトへの光の伝播
Step3. デモ及び考察

CEDEC 2012

間接光計算の解説手順
Step1. 背景オブジェクトの間接光計算- 導入- 手法の詳細解説- ショートデモ
Step2. その他オブジェクトへの光の伝播
Step3. デモ及び考察

CEDEC 2012

間接光計算の解説手順
Step1. 背景オブジェクトの間接光計算- 導入- 手法の詳細解説- ショートデモ
Step2. その他オブジェクトへの光の伝播
Step3. デモ及び考察

CEDEC 2012

間接光計算の解説手順
Step1. 背景オブジェクトの間接光計算- 導入
1. 間接光計算の考え方の説明
2. 問題提起
3. キーアイディアの説明- 手法の詳細解説- ショートデモ
Step2. その他オブジェクトへの光の伝播
Step3. デモ及び考察
CEDEC 2012間接光計算の解説手順
Step1. 背景オブジェクトの間接光計算- 導入
1. 間接光計算の考え方の説明
2. 問題提起
3. キーアイディアの説明- 手法の詳細解説- ショートデモ
Step2. その他オブジェクトへの光の伝播
Step3. デモ及び考察
CEDEC 2012

間接光計算の考え方• 背景オブジェクトの間接光はメッシュ頂点で計算

間接光変換処理
頂点の情報のみ抽出

補間+=
直接光 + 間接光

間接光

直接光

CEDEC 2012

間接光計算の考え方• メッシュ頂点のライティング状態をベクトルで表記
ライティングベクトル

𝒍𝟏2 𝒍𝟐
𝐒行3 𝒍𝟑⋮
1

𝐒: シーンの頂点数

今後スライド中でライティング状態を絵で示してもベクトルで表記しても等価
CEDEC 2012

間接光計算の考え方• 光の変換行列Fを用いた間接光計算
𝐒: シーンの頂点数𝒍𝒅 : サンプル点の直接光成分
𝒍𝒊𝒏𝒅 : サンプル点の間接光成分

𝒍𝒊𝒏𝒅 𝟏𝒍𝒊𝒏𝒅 𝟐𝒍𝒊𝒏𝒅 𝟑 =⋮𝒍𝒊𝒏𝒅 𝑺F

間接光変換処理𝒍𝒅 𝟏
𝒍𝒅 𝟐× 𝒍𝒅 𝟑
⋮𝒍𝒅 𝑺
頂点の情報のみ抽出

補間+=
直接光 + 間接光

間接光

直接光

CEDEC 2012

間接光計算の考え方• 光の変換行列Fの計算
光の変換行列F
𝐒列
25𝐒行20 ⋯50 ⋯

𝟎. 𝟎𝟐
𝟎. 𝟎𝟐

82

⋮

⋯⋮

⋯
⋮

𝟎. 𝟎𝟏

⋯

𝟎. 𝟎𝟑

⋯

𝐒: シーンの頂点数行列Fは静的オブジェクトなら前計算可能
CEDEC 2012

間接光計算の考え方
• 要点
1.
2.
3.
4.

背景オブジェクトの間接光はメッシュ頂点で計算
ライティング状態はベクトルで表記可能
直接光は光の変換行列Fを用いて間接光に変換
光の変換行列Fは静的オブジェクトなら前計算可能
𝒍𝒊𝒏𝒅 𝟏𝒍𝒊𝒏𝒅 𝟐𝒍𝒊𝒏𝒅 𝟑 =⋮𝒍𝒊𝒏𝒅 𝑺=F

𝒍𝒅 𝟏
𝒍𝒅 𝟐× 𝒍𝒅 𝟑
⋮𝒍𝒅 𝑺+
CEDEC 2012

間接光計算の解説手順
Step1. 背景オブジェクトの間接光計算- 導入
1. 間接光計算の考え方の説明
2. 問題提起
3. キーアイディアの説明- 手法の詳細解説- ショートデモ
Step2. その他オブジェクトへ光の伝播
Step3. デモ及び考察
CEDEC 2012

問題提起
𝒍𝒊𝒏𝒅 𝟏𝒍𝒊𝒏𝒅 𝟐𝒍𝒊𝒏𝒅 𝟑 =⋮𝒍𝒊𝒏𝒅 𝑺F

𝒍𝒅 𝟏
𝒍𝒅 𝟐
× 𝒍𝒅 𝟑⋮𝒍𝒅 𝑺

上記計算式で間接光は計算可能
ただし実行速度が不十分 + 頂点数の増加で処理量が爆発
CEDEC 2012

間接光計算の解説手順
Step1. 背景オブジェクトの間接光計算- 導入
1. 間接光計算の考え方の説明
2. 問題提起
3. キーアイディアの説明- 手法の詳細解説- ショートデモ
Step2. その他オブジェクトへの光の伝播
Step3. デモ及び考察
CEDEC 2012

キーアイディア• 全ての直接光は前計算した既知の状態の重ね合わせで近似できると仮定
既知の状態

現在の状態++
CEDEC 2012

キーアイディア• 直接光が変化しても係数のみが変化– 既知の状態は変化しない

既知の状態

現在の状態++CEDEC 2012

キーアイディア• これはベクトルの足し合わせとして表現可能
𝒍𝒅 𝟏
𝒍𝒅 𝟐
⋮
𝒍𝒅 𝑺

𝑩𝟏𝒅 𝟏

≑ 𝒘𝟏

𝑩𝟏𝒅 𝟐
⋮
𝟏𝑩𝒅 𝑺+𝒘𝟐

𝑩𝟐𝒅 𝟏

𝑩𝟐𝒅 𝟐
⋮
𝟐𝑩𝒅 𝑺

𝑩𝟑𝒅 𝟏+𝒘𝟑

𝑩𝟑𝒅 𝟐⋮
𝟑𝑩𝒅 𝑺・・・

𝒍𝒅 : 現在の直接光の状態
𝑩𝟏𝒅 ⋯ 𝑩𝒏𝒅 : 既知の状態++CEDEC 2012

キーアイディア• 各状態𝐵𝑑 には、対になる間接光の状態𝐵𝑖𝑛𝑑 がそれぞれ存在
𝒍𝒅 𝟏
𝒍𝒅 𝟐
⋮
𝒍𝒅 𝑺

≑ 𝒘𝟏

𝑩𝟏𝒅 𝟏

𝑩𝟏𝒅 𝟐
⋮
𝑩𝟏𝒅 𝑺+𝒘𝟐

𝑩𝟐𝒅 𝟏

𝑩𝟐𝒅 𝟐
⋮
𝑩𝟐𝒅 𝑺

𝑩𝟑𝒅 𝟏+𝒘𝟑

𝑩𝟑𝒅 𝟐⋮
𝟑𝑩𝒅 𝑺×𝟊

×𝟊

×𝟊

×𝟊

𝒍𝒊𝒏𝒅 𝟏𝒍𝒊𝒏𝒅 𝟐⋮𝒍𝒊𝒏𝒅 𝑺

𝑩𝟏𝒊𝒏𝒅 𝟏𝑩𝟐𝒊𝒏𝒅 𝟏𝑩𝟑𝒊𝒏𝒅 𝟏

𝑩𝟏𝒊𝒏𝒅 𝟐⋮
𝟏𝑩𝒊𝒏𝒅 𝑺

𝑩𝟐𝒊𝒏𝒅 𝟐⋮
𝟐𝑩𝒊𝒏𝒅 𝑺

𝑩𝟑𝒊𝒏𝒅 𝟐⋮
𝟑𝑩𝒊𝒏𝒅 𝑺・・・・・・
CEDEC 2012

キーアイディア• 直接光側と同じ重みで間接光側を足し合わす事で𝒍𝒊𝒏𝒅 を近似可能
𝒍𝒅 𝟏
𝒍𝒅 𝟐
⋮
𝒍𝒅 𝑺

≑ 𝒘𝟏

𝑩𝟏𝒅 𝟏

𝑩𝟏𝒅 𝟐
⋮
𝑩𝟏𝒅 𝑺+𝒘𝟐

𝑩𝟐𝒅 𝟏

𝑩𝟐𝒅 𝟐
⋮
𝑩𝟐𝒅 𝑺

𝑩𝟑𝒅 𝟏+𝒘𝟑

𝑩𝟑𝒅 𝟐⋮
𝟑𝑩𝒅 𝑺×𝟊

×𝟊

×𝟊

×𝟊

𝒍𝒊𝒏𝒅 𝟏𝒍𝒊𝒏𝒅 𝟐⋮𝒍𝒊𝒏𝒅 𝑺

𝑩𝟏𝒊𝒏𝒅 𝟏𝑩𝟐𝒊𝒏𝒅 𝟏

𝑩𝟑𝒊𝒏𝒅 𝟏≑𝒘𝟏

𝑩𝟏𝒊𝒏𝒅 𝟐⋮
𝟏
𝑩𝒊𝒏𝒅 𝑺+𝒘𝟐

𝑩𝟐𝒊𝒏𝒅 𝟐⋮
𝟐𝑩𝒊𝒏𝒅 𝑺+𝒘𝟑

𝑩𝟑𝒊𝒏𝒅 𝟐⋮
𝟑𝑩𝒊𝒏𝒅 𝑺・・・・・・
CEDEC 2012

キーアイディア• このロジックは下記条件を満たせば非常に高速
1. 必要な係数が十分に少ない
2. 係数が高速に計算可能
𝒍𝒅 𝟏𝒍𝒅 𝟐
⋮𝒍𝒅 𝑺

≑𝒘𝟏

𝑩𝟏𝒅 𝟏

𝑩𝟏𝒅 𝟐
⋮
𝑩𝟏𝒅 𝑺+𝒘𝟐×𝟊

×𝟊

𝑩𝟏𝒊𝒏𝒅 𝟏𝒍𝒊𝒏𝒅 𝟏
𝑩𝟏𝒊𝒏𝒅 𝟐𝒍𝒊𝒏𝒅 𝟐𝟏⋮⋮
𝟏𝑩𝒊𝒏𝒅 𝑺
𝒍𝒊𝒏𝒅 𝑺 今後既知の状態𝐵

≑𝒘+𝒘𝟐

𝑩𝟐𝒅 𝟏

𝑩𝟐𝒅 𝟐
⋮
𝟐𝑩𝒅 𝑺+𝒘𝟑

𝑩𝟑𝒅 𝟏

𝑩𝟑𝒅 𝟐
⋮
𝟑𝑩𝒅 𝑺×𝟊×𝟊

𝑩𝟐𝒊𝒏𝒅 𝟏

𝑩𝟑𝒊𝒏𝒅 𝟏𝑩𝟐𝒊𝒏𝒅 𝟐⋮
𝟐
𝑩𝒊𝒏𝒅 𝑺+𝒘𝟑

𝑩𝟑𝒊𝒏𝒅 𝟐⋮
𝟑𝑩𝒊𝒏𝒅 𝑺・・・・・・

𝑑 , 𝐵𝑖𝑛𝑑 を”基底”と呼ぶ

CEDEC 2012

間接光計算の解説手順
Step1. 背景オブジェクトの間接光計算- 導入- 手法の詳細解説
1. 最適な基底の計算方法
2. 係数の計算方法- ショートデモ
Step2. その他オブジェクトへの光の伝播
Step3. デモ及び考察

CEDEC 2012

間接光計算の解説手順
Step1. 背景オブジェクトの間接光計算- 導入- 手法の詳細解説
1. 最適な基底の計算方法
2. 係数の計算方法- ショートデモ
Step2. その他オブジェクトへの光の伝播
Step3. デモ及び考察

CEDEC 2012𝐵𝑑 , 𝐵𝑖𝑛𝑑 を求める
• ２方向のアプローチが考えられる– 直接光優先 : 𝐵𝑑 を先に求めて𝐵𝑖𝑛𝑑 = F𝐵𝑑 から𝐵𝑖𝑛𝑑 を算出
𝒍𝒅 𝟏
𝒍𝒅 𝟐
⋮
𝒍𝒅 𝑺×𝟊

≑ 𝒘𝟏

𝑩𝟏𝒅 𝟏

𝑩𝟏𝒅 𝟐
⋮
𝟏
𝑩𝒅 𝑺×𝟊
𝒍𝒊𝒏𝒅 𝟏𝒍𝒊𝒏𝒅 𝟐⋮𝒍𝒊𝒏𝒅 𝑺≑ 𝒘𝟏+𝒘𝟐

𝑩𝟐𝒅 𝟐⋮
𝟐
𝑩𝒅 𝑺×𝟊
𝑩𝟏𝒊𝒏𝒅 𝟏

𝑩𝟏𝒊𝒏𝒅 𝟐⋮
𝟏
𝑩𝒊𝒏𝒅 𝑺

𝑩𝟑𝒅 𝟏

𝑩𝟐𝒅 𝟏+𝒘𝟐+𝒘𝟑

𝑩𝟑𝒅 𝟐⋮𝟑𝑩𝒅 𝑺・・・×𝟊𝑩𝟐𝒊𝒏𝒅 𝟏

𝑩𝟐𝒊𝒏𝒅 𝟐⋮
𝟐𝑩𝒊𝒏𝒅 𝑺+𝒘𝟑

𝑩𝟑𝒊𝒏𝒅 𝟏

𝑩𝟑𝒊𝒏𝒅 𝟐⋮
𝟑𝑩𝒊𝒏𝒅 𝑺・・・
CEDEC 2012𝐵𝑑 , 𝐵𝑖𝑛𝑑 を求める
• ２方向のアプローチが考えられる– 間接光優先 : 𝐵𝑖𝑛𝑑 を先に求めて
𝐵𝑑 = F −1 𝐵𝑖𝑛𝑑 から𝐵𝑑 を算出
𝒍𝒅 𝟏
𝒍𝒅 𝟐
⋮𝒍𝒅 𝑺

≑ 𝒘𝟏

𝑩𝟏𝒅 𝟏

𝑩𝟏𝒅 𝟐
⋮
𝟏𝑩𝒅 𝑺

× 𝐅 −𝟏𝒍𝒊𝒏𝒅 𝟏𝒍𝒊𝒏𝒅 𝟐⋮𝒍𝒊𝒏𝒅 𝑺≑ 𝒘𝟏+𝒘𝟐

𝑩𝟐𝒅 𝟐
⋮
𝟐𝑩𝒅 𝑺

× 𝐅 −𝟏
𝑩𝟏𝒊𝒏𝒅 𝟏

𝑩𝟏𝒊𝒏𝒅 𝟐⋮
𝟏
𝑩𝒊𝒏𝒅 𝑺

𝑩𝟑𝒅 𝟏

𝑩𝟐𝒅 𝟏+𝒘𝟐+𝒘𝟑𝑩𝟑𝒅 𝟐⋮𝟑𝑩𝒅 𝑺× 𝐅 −𝟏𝑩𝟐𝒊𝒏𝒅 𝟏𝑩𝟐𝒊𝒏𝒅 𝟐⋮
𝟐𝑩𝒊𝒏𝒅 𝑺+𝒘𝟑・・・× 𝐅 −𝟏

𝑩𝟑𝒊𝒏𝒅 𝟏

𝑩𝟑𝒊𝒏𝒅 𝟐⋮
𝟑𝑩𝒊𝒏𝒅 𝑺・・・
CEDEC 2012𝐵𝑑 , 𝐵𝑖𝑛𝑑 を求める
• 両方を並行して解説– 最終的には両方をハイブリッドしたアプローチでより良い基底を算出

𝒍𝒅 𝟏𝒍𝒅 𝟐⋮𝒍𝒅 𝑺×𝟊

𝒍𝒊𝒏𝒅 𝟏𝒍𝒊𝒏𝒅 𝟐⋮𝒍𝒊𝒏𝒅 𝑺

𝑩𝟏𝒅 𝟏≑𝒘𝟏× 𝐅 −𝟏×𝟊≑𝒘𝟏

𝑩𝟏𝒅 𝟐
⋮
𝟏𝑩𝒅 𝑺

𝑩𝟏𝒊𝒏𝒅 𝟏

𝑩𝟏𝒊𝒏𝒅 𝟐⋮
𝟏𝑩𝒊𝒏𝒅 𝑺𝑩𝟐𝒅 𝟏+𝒘𝟐
× 𝐅 −𝟏
×𝟊

+𝒘𝟐

𝑩𝟐𝒅 𝟐
⋮
𝟐𝑩𝒅 𝑺

𝑩𝟐𝒊𝒏𝒅 𝟏𝑩𝟐𝒊𝒏𝒅 𝟐⋮
𝟐𝑩𝒊𝒏𝒅 𝑺𝑩𝟑𝒅 𝟏+𝒘𝟑
× 𝐅 −𝟏
×𝟊+𝒘𝟑

𝑩𝟑𝒅 𝟐
⋮
𝟑𝑩𝒅 𝑺・・・
× 𝐅 −𝟏

𝑩𝟑𝒊𝒏𝒅 𝟏

𝑩𝟑𝒊𝒏𝒅 𝟐⋮
𝟑𝑩𝒊𝒏𝒅 𝑺・・・
CEDEC 2012

最適な基底• 最適な基底は同じシーンでも場合によって異なる– それぞれに特化した基底のほうが良い結果を得られる

サンプリングベースの基底を採用
CEDEC 2012

サンプリングベースの基底• 様々な状況でライティングした結果を集め、特異値分解を用いて基底を算出

𝐵𝑑

𝐵𝑖𝑛𝑑
CEDEC 2012

サンプルの選び方について• 特異値分解で得られるのは「全ての入力サンプルを良く近似する基底」• サンプルで用いる光源のタイプ・方向・位置を予め分かっている範囲で厳選するのが好ましい
CEDEC 2012

サンプリング行列• 特異値分解を施すために、各サンプルの頂点の入射光を列に並べた行列を作成

𝐿𝑑
CEDEC 2012

サンプリング行列• 特異値分解を施すために、各サンプルの頂点の入射光を列に並べた行列を作成

𝐿𝑑
CEDEC 2012

サンプリング行列• 特異値分解を施すために、各サンプルの頂点の入射光を列に並べた行列を作成

𝐿𝑑
CEDEC 2012

サンプリング行列• 特異値分解を施すために、各サンプルの頂点の入射光を列に並べた行列を作成

𝐿𝑑
・・・
CEDEC 2012

サンプリング行列• 特異値分解を施すために、各サンプルの頂点の入射光を列に並べた行列を作成

𝐿𝑑𝐿𝑖𝑛𝑑・・・
CEDEC 2012

サンプリング行列• 特異値分解を施すために、各サンプルの頂点の入射光を列に並べた行列を作成

𝐿𝑑𝐿𝑖𝑛𝑑・・・
CEDEC 2012

サンプリング行列• 特異値分解を施すために、各サンプルの頂点の入射光を列に並べた行列を作成

𝐿𝑑
・・・

𝐿𝑖𝑛𝑑・・・
CEDEC 2012

特異値分解(Singular Value Decomposition)• 入力された行列𝑀を𝑈, Σ, 𝑉 𝑇 という3行列に分解– 数多くの数学ライブラリがサポート

𝑀

=・・・

SVD

𝑈

∗ Σ ∗ 𝑉𝑇・・・

𝑀が異なれば当然𝑈, Σ, 𝑉 𝑇 も異なる
CEDEC 2012

特異値分解(Singular Value Decomposition)• 𝐿𝑑 , 𝐿𝑖𝑛𝑑 に特異値分解を適用すると、行列𝑈が𝐵𝑑 , 𝐵𝑖𝑛𝑑 となる𝑇
𝐿𝑑 = 𝑈𝑑 Σ𝑑 𝑉𝑑

𝑈𝑑・・・

CEDEC 2012

特異値分解(Singular Value Decomposition)• 𝐿𝑑 , 𝐿𝑖𝑛𝑑 に特異値分解を適用すると、行列𝑈が𝐵𝑑 , 𝐵𝑖𝑛𝑑 となる𝑇
𝐿𝑑 = 𝑈𝑑 Σ𝑑 𝑉𝑑

𝑈𝑑・・・

CEDEC 2012

特異値分解(Singular Value Decomposition)• 𝐿𝑑 , 𝐿𝑖𝑛𝑑 に特異値分解を適用すると、行列𝑈が𝐵𝑑 , 𝐵𝑖𝑛𝑑 となる𝑇
𝐿𝑑 = 𝑈𝑑 Σ𝑑 𝑉𝑑

𝑈𝑑
・・・

CEDEC 2012

特異値分解(Singular Value Decomposition)• 𝐿𝑑 , 𝐿𝑖𝑛𝑑 に特異値分解を適用すると、行列𝑈が𝐵𝑑 , 𝐵𝑖𝑛𝑑 となる𝑇
𝐿𝑑 = 𝑈𝑑 Σ𝑑 𝑉𝑑

𝑈𝑑・・・
左から重要度順に並んでいるため、必要な数だけ用いればよい
CEDEC 2012

基底による直接光の近似

CEDEC 2012

アプローチの比較
直接光の近似精度 間接光の近似精度

直接光優先

○△

間接光優先△○ハイブリッド△◎• 優先してサンプリングした方の近似精度が高い• 近似したいのは間接光なので間接光優先が好ましい
論文ではもう一歩進んだハイブリッドなアプローチを採用

CEDEC 2012

ハイブリッド手法の計算手順
① 𝐿𝑑
②𝑆𝑉𝐷

𝑈𝑑 Σ𝑑 𝑉𝑑𝑇

直接光優先アプローチ①で求めた基底を元に間接光サンプルを計算

𝐿𝑖𝑛𝑑 = 𝐹𝑈𝑑 Σ𝑑𝑆𝑉𝐷

𝑇𝐿𝑈
Σ𝑉
𝑖𝑛𝑑𝑚 𝑚 𝑚③
𝐵𝑖𝑛𝑑 = 𝑈𝑚 Σ𝑚

間接光優先アプローチを利用して𝑩𝒊𝒏𝒅 を算出

𝐿𝑖𝑛𝑑 = 𝐵𝑖𝑛𝑑 𝑉𝑚𝑇 = 𝐹𝑈𝑑 Σ𝑑④ 𝐵𝑖𝑛𝑑 = 𝐹𝑈𝑑 Σ𝑑 𝑉𝑚 = 𝐹𝐵𝑑
𝐵𝑑 = 𝑈𝑑 Σ𝑑 𝑉𝑚

𝑩𝒊𝒏𝒅 から𝑩𝒅 を計算

𝐵𝑖𝑛𝑑 = 𝑈𝑚 Σ𝑚 , 𝐵𝑑 = 𝑈𝑑 Σ𝑑 𝑉𝑚
CEDEC 2012

係数の数の比較• 直接光優先

直接光 + 間接光

• ハイブリッド

間接光のみ

間接光のみ

直接光 + 間接光

係数の数

係数の数

324
CEDEC 2012

ランタイムの計算処理
Step1. 背景オブジェクトの間接光計算- 導入- 手法の詳細解説
1. 最適な基底の計算方法
2. 係数の計算方法- ショートデモ
Step2. その他オブジェクトへの光の伝播
Step3. デモ及び考察

CEDEC 2012

係数の計算方法• ランタイムで必要な計算は𝑙𝑖𝑛𝑑 = 𝐵𝑖𝑛𝑑 𝒘≑𝒘𝟏+𝒘𝟐+𝒘𝟑

ここで−1𝒘 = 𝐵𝑑 𝑙𝑑• 𝐵𝑑−1 が必要だが、ハイブリッド手法の場合−1−1
𝑇
𝐵𝑑 = 𝑉𝑚 Σ𝑑 𝑈𝑑
CEDEC 2012

ランタイムの計算処理
𝑙𝑖𝑛𝑑=𝐵𝑖𝑛𝑑

∗

𝐵𝑑−1=

∗𝑙𝑑𝒌𝒌

• ここでkは使用する係数の数– 自分たちのデモでは𝒌 = 4~32– 頂点数に比べ非常に少ない→高速CEDEC 2012

間接光計算の解説手順
Step1. 背景オブジェクトの間接光計算- 導入- 手法の詳細解説- ショートデモ
Step2. その他オブジェクトへの光の伝播
Step3. デモ及び考察

CEDEC 2012

ショートデモCEDEC 2012

間接光計算の解説手順
Step1. 静的オブジェクトの間接光計算
Step2. その他オブジェクトへの光の伝播- 手法概要の説明- データ更新時における高速化の解説
Step3. デモ及び考察

CEDEC 2012

間接光計算の解説手順
Step1. 静的オブジェクトの間接光計算
Step2. その他オブジェクトへの光の伝播- 手法概要の説明- データ更新時における高速化の解説
Step3. デモ及び考察

CEDEC 2012

Light Probe• 背景以外のオブジェクトにはLight Probeを用いる

CEDEC 2012

Light Probe• Light Probeとは– 全方位の入射光を保持する仮想的な球– 今回は球面調和関数(SH)を使用

CEDEC 2012

Light Probeによるライティング• Light Probeを離散的に配置– シェーダで近傍のLight Probeの値を補間して間接光の表現が可能

CEDEC 2012Light Probeによるライティング• 時間の都合上、詳細は割愛
詳しくは下記書籍をご参照下さい– Chapter8 「KILLZONE2」 : Light Probe自体の解説– Chapter9 「バイオハザード5」 : Light Probeによるライティング

西川善司著「3Dゲームファンのためのグラフィックス講座」

ここまでは、あくまで既存の手法の話
CEDEC 2012

間接光計算の解説手順
Step1. 静的オブジェクトの間接光計算
Step2. その他オブジェクトへの光の伝播- 手法概要の説明- データ更新時における高速化の解説
Step3. デモ及び考察

CEDEC 2012

Light Probeの計算• 通常Light Probeは前計算した後更新しない– Light Probeの計算は負荷が高い

今回は、動的にLight Probeを更新する必要がある
CEDEC 2012

動的なLight Probe• 今回、シーンのライティング結果は既知の状態の組み合わせに分解される≑ 𝒘𝟏+𝒘𝟐×𝟊

×𝟊

≑𝒘𝟏+𝒘𝟑×𝟊+𝒘𝟐・・・
×𝟊+𝒘𝟑・・・
CEDEC 2012動的なLight Probe• 間接光と同様に、それぞれに対応したLight Probeを計算しておけば足し合わせで高速に計算可能≑ 𝒘𝟏+𝒘𝟐+𝒘𝟑・・・≑𝒘𝟏+𝒘𝟐+𝒘𝟑・・・
CEDEC 2012

間接光計算の解説手順
Step1. 背景オブジェクトの間接光計算
Step2. その他オブジェクトへの光の伝播
Step3. デモ及び考察

CEDEC 2012

デモ

CEDEC 2012

デモ詳細

• 背景オブジェクト– 頂点数– 基底の係数10800
22(頂点)(係数)500
129(個)(係数)(係数)• Light Probe– Probe総数– 基底の係数– 球面調和関数の係数

CEDEC 2012

パフォーマンス
影あり

影なし

影なし・GIなし

Geforce GTX 680

500 fps

800 fps

1500 fps

Geforce GTX 560

360 fps

440 fps

750 fpsRadeon 6630 M

80 fps120 fps280 fps• 解像度は1400*800で測定• 実装にはCompute Shaderを使用• 前計算約45分– 2520光源サンプル
実装のTipsはAppendixに記載– 20回反射まで考慮– 最適化で10倍以上の高速化の余地あり
CEDEC 2012

まとめ
• 良い点
– 非常に高速＆計算負荷が一定– 反射回数が無制限（行列Fに含められる)– 高速なLight Probe計算– 様々な拡張• 悪い点– Lightの位置・方向を含めた前計算– 動的すぎるシーンは不可(→Delta Radiance Transfer)– 頂点カラーを念頭に置いたメッシュ分割＆頂点配置– 複雑すぎない形状
CEDEC 2012

発表の流れ
1. 発表の概要
2. 技術紹介 + デモ
– 間接光計算手法の解説 （論文4節）– シーン分割による高速化の解説 （論文5節）

3. まとめCEDEC 2012

シーン分割による高速化の解説手順
Step1. 問題提起
Step2. 小領域間の光の伝播の計算
Step3. 手法の拡張
Step4. デモ及び考察

CEDEC 2012

シーン分割による高速化の解説手順
Step1. 問題提起
Step2. 小領域間の光の伝播の計算
Step3. 手法の拡張
Step4. デモ及び考察

CEDEC 2012

問題提起 （1/4）• 対象とする問題：
シーンが複雑になった場合の計算負荷の増大

シンプルなシーン

より複雑なシーン

CEDEC 2012

問題提起 （2/4）• 複雑なシーンでは：
1. メッシュ頂点数が増加
2. 必要な係数の数の増大｝⇒ 計算量の増大

CEDEC 2012

問題提起 （3/4）• 解決策：シーンを複数の小領域に分割⇒ 適切に小領域を設定すればシーンの複雑さを抑える事が可能• 小領域の分割方法はユーザーが決定
CEDEC 2012

問題提起 （4/4）• 各小領域内の間接光は、前述の方法で計算可能• 小領域間の光の伝播を別途考慮する必要がある

小領域間の光の伝播の高速な計算方法を解説
CEDEC 2012

シーン分割による高速化の解説手順
Step1. 問題提起
Step2. 小領域間の光の伝播の計算– キーアイディアの説明– 小領域間の伝播行列の計算

Step3. 手法の拡張
Step4. デモ及び考察

CEDEC 2012

シーン分割による高速化の解説手順
Step1. 問題提起
Step2. 小領域間の光の伝播の計算– キーアイディアの説明– 小領域間の伝播行列の計算

Step3. 手法の拡張
Step4. デモ及び考察

CEDEC 2012

キーアイディア （1/6）• 小領域間の光の伝播を個別に計算

CEDEC 2012

キーアイディア （2/6）• 例として右⇒（中央）⇒左へ伝播する光を考える

キーアイディアでは多重反射を考慮しない光の伝播を考える
CEDEC 2012

キーアイディア （3/6）• 小領域間の光の伝播は頂点間の影響に帰着

CEDEC 2012

キーアイディア （4/6）• 小領域間の光の伝播行列Pを前計算
𝐍列
𝐌行

P

𝐌: 伝播先の小領域の頂点数
𝐍: 伝播元の小領域の頂点数

光の伝播行列P

CEDEC 2012

キーアイディア （5/6）• 光の伝播行列Pを利用して光の伝播を高速に計算
𝒅𝟏⋮𝒅𝑴

𝐍列=

𝒅: 伝播先の小領域の頂点の色

𝐌行P

𝐌: 伝播先の小領域の頂点数
𝐍: 伝播元の小領域の頂点数

×𝒔𝟏
⋮𝒔𝑵

𝐬: 伝播元の小領域の頂点の色

CEDEC 2012

キーアイディア （6/6）• 光の伝播を係数からの変換に修正
𝒔𝟏𝒔𝟐
⋮𝒔𝑵

≑ 𝒘𝟏×𝐏
𝒅𝟏𝒅𝟐
⋮
𝒅𝑴

≑𝒘𝟏

𝑩𝟏𝒅 𝟏

𝑩𝟏𝒅 𝟐
⋮
𝟏
𝑩𝒅 𝑵

𝑩𝟐𝒅 𝟏+𝒘𝟐

𝑩𝟐𝒅 𝟐⋮
𝟐
𝑩𝒅 𝑵+𝒘𝟑

𝑩𝟑𝒅 𝟏

𝑩𝟑𝒅 𝟐
⋮
𝟑
𝑩𝒅 𝑵×𝐏

×𝐏

×𝐏

𝑩𝟏𝒑

𝑩𝟐𝒑

𝑩𝟑𝒑

𝟏

𝑩𝟏𝒑𝟐
⋮

𝑩𝟏𝒑

𝑴+𝒘𝟐

𝟏

𝑩𝟐𝒑𝟐
⋮

𝑩𝟐𝒑

𝑴+𝒘𝟑𝟏
𝟑
𝑩𝒑𝟐

⋮

𝑩𝟑𝒑・・・

・・・

𝑴

CEDEC 2012

シーン分割による高速化の解説手順
Step1. 問題提起Step2. 小領域間の光の伝播の計算– キーアイディアの説明– 小領域間の伝播行列の計算

Step3. 手法の拡張
Step4. デモ及び考察

CEDEC 2012

光の伝播行列の計算 （1/7）• ライトフィールドという概念を導入

境界面に注目ライトフィールドは、任意の点群を通過する光を体系的に記録するためのデータ構造
CEDEC 2012

光の伝播行列の計算 （2/7）• 光の伝播行列Pを三要素に分割: 右の小領域
1. 光の出射行列 Pout
2. 光の通過行列 Pthrough : 中央の小領域
3. 光の入射行列 Pin: 左の小領域

P = Pin × Pthrough × Pout

CEDEC 2012

光の伝播行列の計算 （3/7）• 光の出射行列Pout– 小領域 ⇒ ライトフィールド
𝐍列
459

⋮

𝐋𝟏 行68⋯𝟎. 𝟎𝟎. 𝟎⋯

𝟎. 𝟓𝟎. 𝟓⋮⋮⋯

𝟏. 𝟎⋯⋯𝟎. 𝟎⋯

𝐋𝟏 : 出射ライトフィールドのサンプル数
𝐍: 伝播元の小領域の頂点数

CEDEC 2012

光の伝播行列の計算 （4/7）• 光の通過行列Pthrough– ライトフィールド ⇒ ライトフィールド
𝐋𝟏 列
58

⋮

𝐋𝟐 行

25

⋯

𝟎. 𝟕

⋯

𝟎. 𝟑

⋯

⋯

𝟎. 𝟎

⋯

𝟏. 𝟎⋯

⋮
⋮

𝐋𝟐 : 出射ライトフィールドのサンプル数
𝐋𝟏 : 入射ライトフィールドのサンプル数

CEDEC 2012

光の伝播行列の計算 （5/7）• 光の入射行列Pin– ライトフィールド ⇒ 小領域
𝐋𝟐 列
21𝐌行

55

⋯

𝟏. 𝟎

⋯

⋯

𝟎. 𝟎

⋯

⋮
⋮

6𝟎. 𝟎 𝟎. 𝟎⋯

𝟎. 𝟓 𝟎. 𝟓⋯

𝐌: 伝播先の小領域の頂点数
𝐋𝟐 : 入射ライトフィールドのサンプル数

Pin 計算時にヘミキューブ法などを用いて立体角を考慮
CEDEC 2012

光の伝播行列の計算 （6/7）• 全ての小領域間の光の伝播は三種類の行列の組み合わせで計算可能

P = Pin × Pthrough × Pout

P = Pin × Pout
上記例ではPout は再利用不可能だがPin は共通
CEDEC 2012

光の伝播行列の計算 （7/7）• 光の伝播の計算のまとめ
𝒔𝟏𝒔𝟐
⋮𝒔𝑵

≑ 𝒘𝟏×𝐏
𝒅𝟏𝒅𝟐
⋮
𝒅𝑴

≑𝒘𝟏

𝑩𝟏𝒅 𝟏

𝑩𝟏𝒅 𝟐
⋮
𝟏
𝑩𝒅 𝑵

𝑩𝟐𝒅 𝟏+𝒘𝟐

𝑩𝟐𝒅 𝟐⋮
𝟐
𝑩𝒅 𝑵+𝒘𝟑

𝑩𝟑𝒅 𝟏

𝑩𝟑𝒅 𝟐
⋮
𝟑
𝑩𝒅 𝑵×𝐏×𝐏×𝐏

𝑩𝟏𝒑

𝑩𝟐𝒑

𝑩𝟑𝒑

𝟏

𝑩𝟏𝒑𝟐
⋮

𝑩𝟏𝒑

𝑴+𝒘𝟐𝟏

𝑩𝟐𝒑𝟐
⋮

𝑩𝟐𝒑

𝑴+𝒘𝟑𝟏
𝟑
𝑩𝒑𝟐

⋮

𝑩𝟑𝒑

・・・

・・・

𝑴

CEDEC 2012

シーン分割による高速化の解説手順
Step1. 問題提起
Step2. 小領域間の光の伝播の計算
Step3. 手法の拡張– 多重反射への拡張– モジュール導入による更なる効率化

Step4. デモ及び考察

CEDEC 2012

シーン分割による高速化の解説手順
Step1. 問題提起
Step2. 小領域間の光の伝播の計算
Step3. 手法の拡張– 多重反射への拡張– モジュール導入による更なる効率化

Step4. デモ及び考察

CEDEC 2012

多重反射への拡張• 間接光計算を反復実行
直接光間接光計算

間接光計算

間接光計算

⋮CEDEC 2012

シーン分割による高速化の解説手順
Step1. 問題提起
Step2. 小領域間の光の伝播の計算
Step3. 手法の拡張– 多重反射への拡張– モジュール導入による更なる効率化

Step4. デモ及び考察

CEDEC 2012

モジュールの導入 （1/3）• モジュール（=再利用可能な汎用小領域）の導入• 上記のようなシーンは「回転」も考慮すれば5種の立方体モジュールの組合わせで構成可能

3方向壁

2方向壁

2方向壁1方向壁

0方向壁

CEDEC 2012

モジュールの導入 （2/3）• 立方体モジュールのメリット
1. データ量及び前計算時間の削減
2. 再利用可能な光の通過行列が導入可能
3. ライトフィールド用の基底が導入可能

ライトフィールドデータを一つの行列に格納
特異値分解

データ量の削減及び計算の高速化

通過行列は（直進/右折/左折）の三種類

詳しくは論文5.1節参照
CEDEC 2012

モジュールの導入 （3/3）• 立方体モジュールのメリット
1. データ量及び前計算時間の削減
2. 再利用可能な光の通過行列が導入可能
3. ライトフィールド用の基底が導入可能
メリットは多いがシーンの自由度とのトレードオフ
モジュールの使い所は要検討

CEDEC 2012

シーン分割による高速化の解説手順
Step1. 問題提起
Step2. 小領域間の光の伝播の計算
Step3. 手法の拡張
Step4. デモ及び考察

CEDEC 2012

デモ

CEDEC 2012

考察
• ライトフィールドは本当に必要か?

P = Pin × Pthrough × Pout

• 小領域間の位置関係が固定ならば（恐らく）不要⇒ レイトレーシング法で伝播行列Pを直接計算した方が効率的• 小領域を動的に入れ替える場合は必要
CEDEC 2012

発表の流れ
1. 発表の概要
2. 技術紹介 + デモ
3. まとめCEDEC 2012

発表内容のまとめ• Modular Radiance Transfer法を解説– 長所• とにかく高速• 多重反射を含んだ間接光が扱える• 技術のコア部分は汎用的で応用の余地が高い– 短所• 前計算を含め、使い方に癖がある(実験を通してノウハウを蓄積すれば余り問題にならない?)

ゲームへの応用は十分可能
CEDEC 2012

著作権について本スライド内で引用した論文の図の著作権は全て論文著者に帰属します
その他の図・スライド本体・挿絵等の著作権はシリコンスタジオ株式会社に帰属します

CEDEC 2012

最後に御清聴ありがとうございました
スライド・デモは弊社HPで近日公開
http://www.siliconstudio.co.jp/presentations/index.html
問い合わせ先: 田村 nk-tamura@siliconstudio.co.jp安田 re-yasuda@siliconstudio.co.jp

シリコンスタジオは常に人材を求めています
ご興味ある方は弊社HPをご覧ください
制作協力: 河野 駿介 ・ 辻 俊晶 ・ 古家 亙 ・ 後藤 晋也 ・ 京田 文人 ・ 三谷 健一郎
CEDEC 2012

Appendix A. 実装について• 実装自体は様々なアプローチが可能• ここではデモの実装でのアプローチを紹介

CEDEC 2012

Appendix A. 前計算について• Fの計算– メッシュの全頂点からキューブマップにレンダリング– ピクセルには頂点IDとウェイトを出力• 直接光サンプルの計算– 頂点カラーをStream Outでバッファに出力– 頂点シャドウあり• Light Probeの計算– 各Probeの中心からキューブマップにレンダリング– 𝐵𝑑 と𝐵𝑖𝑛𝑑 の対応する基底ベクトル同士を足し合わせたベクトル(直接光+間接光)を頂点カラーとして使用

CEDEC 2012

Appendix A. ランタイム: 𝑙𝑑• 直接光の結果をStream Outでバッファに出力– 頂点シャドウあり– カラーバッファへの書き込みOFF– 複数オブジェクトの場合は単一バッファにオフセットを変えて出力𝑙𝑑

CEDEC 2012

Appendix A. ランタイム: 係数𝒘• Compute Shaderで𝒘 = 𝐵𝑑−1 𝑙𝑑 , を計算– 𝐵𝑑−1 は極めて横長の行列(行: ~100程度, 列:頂点数)– 𝐵𝑑−1 ∗ 𝑙𝑑 はGPUが少々苦手な処理ではあるもののタイリングベースの実装で高速に処理可能
−1𝐵𝑑𝒘

∗ 𝑙𝑑

=
CEDEC 2012

Appendix A. ランタイム: 𝑙𝑖𝑛𝑑
• Compute Shaderで 𝑙𝑖𝑛𝑑 = 𝐵𝑖𝑛𝑑 𝒘 を計算– 𝐵𝑖𝑛𝑑 は極めて縦長(𝐵𝑑 の転置と同サイズ)なので素直に実装可能

𝑙𝑖𝑛𝑑𝐵𝑖𝑛𝑑∗ 𝒘=

CEDEC 2012

Appendix A. ランタイム: 最終パス
• 𝑙𝑖𝑛𝑑 を頂点カラーとして入力として、ピクセル単位の直接光のシェーディングと合成して最終結果を得る=＋CEDEC 2012

Appendix A. ランタイム: Light Probe(1)• Compute Shaderで𝑈𝑣𝑜𝑙 ∗ 𝒘を計算
– 𝑈𝑣𝑜𝑙 は縦長(行:頂点数×SH係数の数, 列:~100程度)

𝑙𝑣𝑜𝑙𝑈𝑣𝑜𝑙∗ 𝒘=

CEDEC 2012

Appendix A. ランタイム: Light Probe(2)• Probeを用いてDynamic Objectsをライティング– 各Light ProbeがSHを9係数で保持するため、3D TextureではなくStructured-Bufferで保持– Vertex Shader内で自力Tri-Linear補間=＋CEDEC 2012

Appendix B. 後半の補足• 大規模なシーンでの光の伝播• 小領域間の光の伝播は個別に総当たりで計算⇒小領域間の光の伝播は距離によって大きく減衰
実際は大規模シーンでも概ね二つ隣の小領域まで考慮すれば十分
CEDEC 2012

Appendix B. 後半の補足• 小領域の境界• 小領域の境界部分が不連続になる⇒ 小領域の境界部分は補間の必要がある
CEDEC 2012

Appendix C. 記号の表記• スライドと論文で表記が違う記号があります
スライドでの表記

論文での表記

𝐵𝑑

𝐿𝑖𝑚𝑝

𝐵𝑖𝑛𝑑

𝑈𝑏

𝐵𝑑−1

𝑇𝑑→𝑏𝒘b

CEDEC 2012