Frequency Domain Normal Map Filtering

Download Report

Transcript Frequency Domain Normal Map Filtering

ゲーム開発者向け最新技術論文の解説・実装講座
~遥かなるトップレンダリストの頂を目指して~
その②
田村 尚希
シリコンスタジオ株式会社 ソフトウェアエンジニアリング部
Imagire Day
発表の流れ
1. 概要
2. 論文紹介
「Frequency Domain Normal Map Filtering」
3. まとめ
Imagire Day
発表の流れ
1. 概要
2. 論文紹介
「Frequency Domain Normal Map Filtering」
3. まとめ
Imagire Day
1.概要
• 発表内容:
最新論文のうち、ゲームにも関係が深い論文を紹介
• 発表の目的:
1.最新技術の紹介及び理解
2.技術論文に親しむ機会を提供
最新技術に興味を持つ人が増え、
ゲーム業界全体の活性化に繋がることを期待
Imagire Day
1.概要
• 紹介論文:
「Frequency Domain Normal Map Filtering」
[Han et al. SIGGRAPH 2007]
Imagire Day
1.概要
• 「Frequency Domain Normal Map Filtering」
• 一言で言えば:
法線マップにおけるミップマップフィルタリング
に関する論文
Imagire Day
1.概要
• 動画:
Imagire Day
1.概要
• 動画:
Imagire Day
1.概要
• 利点
正確な法線マップミップマップフィルタリングが可能
拡散面から鏡面に近い光沢面まで適用可能
• 欠点
計算負荷が高い
テクスチャ消費量が多い
シーンによっては、適用前後でほとんど差がない
Imagire Day
発表の流れ
1. 概要
2. 論文紹介
「Frequency Domain Normal Map Filtering」
3. まとめ
Imagire Day
Normal map filteringの説明手順
ミップマップ
フィルタリングの復習
法線マップのミップ
マップの問題点
論文の手法説明
デモ・考察
Imagire Day
2.1 ミップマップフィルタリング
• ミップマップテクスチャ
解像度を半分にし、情報を平均化した
一連のテクスチャ群をミップマップテクスチャと呼ぶ
Imagire Day
2.1 ミップマップフィルタリング
• ミップマップフィルタリング(トリリニアフィルタリング)
Imagire Day
2.1 ミップマップフィルタリング
• ミップマップフィルタリングが必要な理由
スクリーン解像度とテクスチャ解像度の
不整合を解決するため
Imagire Day
2.1 ミップマップフィルタリング
• 解像度の差を解決する本質的な方法
⇒スーパーサンプリング
ランタイム時のスーパーサンプリングは計算負荷が高い
Imagire Day
2.1 ミップマップフィルタリング
• スーパーサンプリングの代替手段
⇒ミップマップテクスチャ
≒
スーパーサンプリング≒ミップマップフィルタリング
Imagire Day
Normal map filteringの説明手順
ミップマップ
フィルタリングの復習
≒
法線マップのミップ
マップの問題点
論文の手法説明
デモ・考察
Imagire Day
2.2 法線マップのミップマップ
• 法線マップのミップマップテクスチャ
Imagire Day
2.2 法線マップのミップマップ
• 法線マップのミップマップの問題点
正
誤
≠
スーパーサンプリング≠ミップマップフィルタリング
Imagire Day
2.2 法線マップのミップマップ
• 論文の解決方法
正
正
誤
≠
≒
スーパーサンプリング≒ミップマップフィルタリング
スーパーサンプリング≠ミップマップフィルタリング
Imagire Day
Normal map filteringの説明手順
ミップマップ
フィルタリングの復習
≒
法線マップのミップ
マップの問題点
≠
論文の手法説明
アイディアの概要
アルゴリズムの詳細
前計算
NDFミップマップテクスチャの作成
デモ・考察
Effective BRDFの計算
実行時
Imagire Day
2.3 アイディアの概要
≒
=

NDF
BRDF
Effective
BRDF
Imagire Day
2.3 アイディアの概要
• NDF(Normal Distribution Function) という概念
を導入
N : 法線の本数
基本的には 1
で正規化
N
・法線が存在する方向は
1
1
・法線が存在しない方向は
0
N
という値を持ったバイナリ情報
キューブマップ形式では、データ量が膨大 → 要圧縮
Imagire Day
2.3 アイディアの概要
≒
=

NDF
BRDF
Effective
BRDF
Imagire Day
2.3 アイディアの概要
• BRDFを可視化
拡散面: f (i , o ; nx )  max(i  nx ,0)
s
光沢面: f (i , o ; nx )  max(h  nx ,0) h 
i  o
i  o
法線ベクトル
s=5
10
光の入射ベクトル
Imagire Day
2.3 アイディアの概要
≒
=

NDF
BRDF
Effective
BRDF
Imagire Day
2.3 アイディアの概要
• スーパーサンプリングを数式化
L
n
基本式
B
o
B( x, o )  L( x, i ) f (i , o ; nx )
拡散面: f (i , o ; nx )  max(i  nx ,0)
s
光沢面: f (i , o ; nx )  max(h  nx ,0) h 
スーパーサンプリング
B( x, o ) 
1
L( x, i ) f (i , o ; nq )

N qx
1


 B( x, o )  L( x, i )  f (i , o ; nq ) 
 N qx

i  o
i  o
i
x
B : 放射照度(ピクセルの色 )
L : 入射輝度(ライトの強さ )
f : BRDF
x :ピクセル位置
i : 入射方向
o : 出射方向
n : 法線ベクトル
N : サブピクセル数
q : サブピクセル位置
Imagire Day
2.3 アイディアの概要
1

B( x, o )  L( x, i )  f (i , o ; nq ) 
 N qx

⇒BRDFの項をスーパーサンプリングすれば良い
1
f (i , o ; nq ) を Effective BRDF と呼ぶ

N qx
Imagire Day
2.3 アイディアの概要
• Effective BRDFを可視化
1
f (i , o ; nq )

N qx
拡散面: f (i , o ; nx )  max(i  nx ,0)
s
光沢面: f (i , o ; nx )  max(h  nx ,0) h 
i  o
i  o
法線ベクトル
Effective BRDF
法線ベクトル
法線ベクトル
Imagire Day
2.3 アイディアの概要
1. NDFを前計算で保存
2. Effective BRDFをリアルタイムに計算
Imagire Day
Normal map filteringの説明手順
ミップマップ
フィルタリングの復習
≒
法線マップのミップ
マップの問題点
≠
論文の手法説明
アイディアの概要
アルゴリズムの詳細
前計算
NDFミップマップテクスチャの作成
デモ・考察
Effective BRDFの計算
実行時
Imagire Day
アルゴリズムの詳細
法線マップの入力
NDFの圧縮
NDFミップマップテ
クスチャの作成
視点・光源位置の入力
球面調和関数
Effective BRDFの計算
ピクセル色の出力
前計算
実行時
Imagire Day
2.3.1 球面調和関数
• 球面調和関数の要点
球面調和関数を用いた近似
本来の輝度分布
球に投影
各方向の輝度を
高さに変換
≒
球面調和関数は、大まかな特徴を極めて効率的に近似可能
データ量
データ量
16個~64個のfloat :
64byte (16個の場合)
データ量を1/400に圧縮!!
キューブマップのデータ量 :
float × ( 32×32×6 ) pixel : 24576 byte
詳しくは、株式会社Pyramid(http://www.pyramid-inc.net)
の「使える最新PRTのススメ」参照
Imagire Day
2.3.1 NDFの圧縮
• NDFを球面調和関数を用いて圧縮
球面調和関数を用いた近似
本来のNDF
各方向の値を
高さに変換
≒
球面調和関数は、大まかな特徴を極めて効率的に近似可能
データ量
16個~64個のfloat :
64byte (16個の場合)
データ量
データ量を1/400に圧縮!!
キューブマップのデータ量 :
float × ( 32×32×6 ) pixel : 24576 byte
Imagire Day
アルゴリズムの詳細
法線マップの入力
NDFの圧縮
NDFミップマップテ
クスチャの作成
視点・光源位置の入力
球面調和関数
Effective BRDFの計算
ピクセル色の出力
前計算
実行時
Imagire Day
2.3.2 NDFミップマップテクスチャ
• NDFを、ミップマップの各レベル毎に球面調和関数
を用いて圧縮
Imagire Day
アルゴリズムの詳細
法線マップの入力
NDFの圧縮
NDFミップマップテ
クスチャの作成
視点・光源位置の入力
球面調和関数
Effective BRDFの計算
ピクセル色の出力
前計算
実行時
Imagire Day
2.3.3 Effective BRDFの計算
• 全方向に関して、NDFとBRDFを乗算し足し合わせる
畳み込み(Convolution)という演算に相当
Imagire Day
2.3.3 Effective BRDFの計算
• 畳み込みは、球面調和関数空間では高速に処理可能
NDF


Nˆ  N0 , N1, N2 ,
  


BRDF
=
Effective
BRDF
fˆ   f 0 , f1, f 2 ,
球面調和関数空間



fˆ eff  f0eff , f1eff , f 2eff ,
理論及び ^
f の計算方法の詳細は論文4.2及び4.3参照
Imagire Day
アルゴリズムの詳細
法線マップの入力
NDFの圧縮
NDFミップマップテ
クスチャの作成
視点・光源位置の入力
球面調和関数
Effective BRDFの計算
ピクセル色の出力
前計算
実行時
Imagire Day
2.3.4 ピクセル色の出力
• Effective BRDFの係数を、元の空間に復元

Effective
BRDF

係数が必要なのは特定の1方向ωのみ
f eff ()   fˆjeff y j ()

fˆ eff  f0eff , f1eff , f 2eff ,
拡散面:   i
光沢面:   h
y() : 方向の球面調和関数の
値
j
B( x,o )  L(x,i ) f eff ()
yの計算方法の詳細は、 「球面調和関数の多項式表現」参照
(http://lucille.sourceforge.net/blog/images/shpoly.pdf)
Imagire Day
2.3.4 ピクセル色の出力
• fragment shader擬似コード
{Setup: half vectorh , incident vectori and BRDFcoefficient vector fˆ }
Nˆ  texture2D(NDFTexture, s, t)
fˆ eff  Nˆ multiply fˆ (convolution)
y  computeSH coefficients of i {diffuse case},h{glossy case}
f eff  dot( fˆ eff , y)
PixelColor  L  f eff (L is light intensity)
Imagire Day
Normal map filteringの説明手順
ミップマップ
フィルタリングの復習
≒
法線マップのミップ
マップの問題点
≠
論文の手法説明
アイディアの概要
アルゴリズムの詳細
前計算
NDFミップマップテクスチャの作成
デモ・考察
Effective BRDFの計算
実行時
Imagire Day
2.4 考察1
• 球面調和関数では鋭いスペキュラーなどは不可能
圧縮に利用する関数を変更することで実現
Imagire Day
アルゴリズムの詳細
法線マップの入力
NDFの圧縮
NDFミップマップテ
クスチャの作成
視点・光源位置の入力
vMF
球面調和関数
Effective BRDFの計算
ピクセル色の出力
前計算
実行時
Imagire Day
2.4 考察1
• 球面調和関数では鋭いスペキュラーなどは不可能
圧縮に利用する関数を変更することで実現
→ 精度が高い反面、より計算負荷が高い
アルゴリズムの流れは変わらないので今回は割愛
Imagire Day
2.4 考察2
• 効果が顕著に現れる例と、それほど現れない例に
分かれる
効果が顕著なケース:
光沢面、法線分布が急激、法線マップが高解像度
効果がでないケース:
拡散面、法線分布が緩やか、法線マップが低解像度
→ 状況によっては重要な問題
法線マップのミップマップは潜在的に
この問題を含んでいることを理解しておくことが重要
Imagire Day
発表の流れ
1. 概要
2. 論文紹介
「Frequency Domain Normal Map Filtering」
3. まとめ
Imagire Day
3 まとめ
• 紹介した論文:
「Frequency Domain Normal Map Filtering」
法線マップにおけるミップマップフィルタリング
Imagire Day
3 まとめ
≒
≠
スーパーサンプリング≒ミップマップフィルタリング
スーパーサンプリング≠ミップマップフィルタリング

=
NDF
BRDF
データ量削減、処理の効率化のため
球面調和関数を利用
Effective
BRDF
Imagire Day
御静聴ありがとうございました
• 質問はございませんか?
Imagire Day