49
Image-Space Horizon- Image-Space Horizon- Image Space Horizon Based Ambient Occlusion Image Space Horizon Based Ambient Occlusion Bryan Dudash Bryan Dudash

Image-Space HorizonSpace Horizon- Based Ambient …developer.download.nvidia.com/presentations/2008/... · Full‐Res AO GeForce GTX 280 Geometry 1.0 ms AO 30.0 ms ... • Dragon

  • Upload
    ngokiet

  • View
    218

  • Download
    4

Embed Size (px)

Citation preview

Image-Space Horizon-Image-Space Horizon-Image Space HorizonBased Ambient Occlusion

Image Space HorizonBased Ambient Occlusion

Bryan DudashBryan Dudash

空からの光

• 最も簡単なアンビエントオクルージョン (AO)ン (AO)

• 光源 = 空 (球体光源)• AO – 二つの定義

シーンAO 二つの定義• AO = 空の照明による拡散光 [Landis 02]

[Christensen 03] • AO = 空の照明による影(sky illumination)

[Pharr and Green 04] [Hegeman et al. 06]

ただ 屋外のシ ンに限られている

球体光源

• ただ、屋外のシーンに限られている

アンビエントオクルージョン

• 光源= ローカルな半球

• 現在の面上の点を中心に

径 ザ 定

シーン

• 半径 = ユーザー設定

• レイトレーシングにより、描画できる[Gelato] [Mental Ray]

n[Gelato] [Mental Ray]

ローカルな球体光源

P

アンビエントオクルージョン

深さ 曲面性 距離感をモデルに与えるのが特徴• 深さ、曲面性、距離感をモデルに与えるのが特徴

AOなし AOあり

スクリーン空間上のアンビエントオクリージョン

• 下記の報告にはじめて紹介された[Shanmugam and Orikan 07] 目

[Mittring 07] [Fox and Compton 08]

入力 バ 法線

イメージ平面

• 入力 = Z-バッファー + 法線• ダイナミックなシーンを対象に、前処理なしでAOの近似値が描画でき処理なしでAOの近似値が描画できる Z-バッファー

• Z-Buffer = ハイトフィールド• z = f(x,y)

地平のマッピング[Max 86]

• 1次元のハイトフィールドだと

-Z

地平角度

PP +X

サンプリング(標本化)の方向

地平を検出する

• ハイトフィールドのマーチング

-Z

PS0 地平角度P +X

サンプリング方向

地平を検出する

• ハイトフィールドのマーチング

-Z

PS0

P

S1

+X

サンプリング方向

地平を検出する

• ハイトフィールドのマーチング

-Z

地平角度

S2

PS0

P

S1

+X

サンプリング方向

地平を検出する

• ハイトフィールドのマーチング

-Z S3

S2

地平角度

P

S2

S0P

S1

+X

サンプリング方向

接線の平面

点(P)とPの法線( )だと• 点(P)とPの法線(n)だと

-Zn

XY 平面

P

XY 平面

接線角度接線のベクトル 接線角度

地面ベースのアンビエントオクルージョン

Z-Z地面角度 [-π/2, π/2] h(H) = atan(H.z / ||H.xy||)地面ベクトル H

P

XY 平面

接線ベクトル T

P接線角度 [-π/2, π/2]t(T) = atan(T.z / ||T.xy||)

AO = sin h – sin t

アンビエントオクルージョンの半径

• 目の空間上で定義されたアンビエントオクルージョン

ンビエントオクル ジョンの半径• シーン = 深さのイメージ

イメージ平面

シ ン 深さのイメ ジ

• 光源の球体をテクスチャー空間へと投射する空間へと投射する• 球体の投射を円で近似化する

• 円をUV空間に投射する円をUV空間に投射するP R

球体光源

深さイメージのサンプリング

• ピクセル毎の方向が正常分

布にな ているとする

u

布になっているとする

• 方向毎のサンプルを固定

• ピクセル毎のランダム化 Pv

• ピクセル毎、方向をラ

ンダムに回転させる

• ランダムなオフセット

でサンプルをジッタピクセル毎に4つ方向の例

でサンプルをジッター

させる(ランダム化)

法線

• ピクセル単位で法線を保存する

補完された法線間違ったする

• 補完された法線ではない• 間違った遮蔽が発生してしまう

法線

面の法線間違った遮蔽

• 面の法線になる

• ジオメトリのパスで目空間上の座標に対して dd /dd 命令を利用する

Pに対して、ddx/ddy命令を利用する

コアなアルゴリズム

• 2次元上、AOの積分を取る• 複数の2次元方向でAOの平均値を取る複数 次元方向 平均値を取る

• AO(θ) = sin h(θ) - sin t(θ)

Z

θ

-Zh(θ)

XY 平面

面上の点 PXY 平面

t(θ)

折り目に見られるアンビエントオクルージョン

低三角化による問題

θ

n-Z

XY 平面AO > 0 間違った遮蔽

サンプリング方向 接線の平面サンプリング方向 接線の平面

解: 角度のバイアス

• Mental Rayでの”Spread”パラメーターに似ている

• 接線平面周辺の遮蔽を無視する接線平面周辺の遮蔽を無視する

θ

t(θ) + biasn

-Z 有効な接線平面

t(θ) bias

XY 平面AO == 0

接線平面

t(θ)

サンプリング方向 接線平面(符号付き角度)

リ グ方

角度ビアスの実例

角度バイアスなし 角度バイアスあり= 30度角度バイアスなし 角度バイアスあり 30度

スクリーン外のサンプリング

• 視錐台外では、シーン情報がない

バ 蔽– 辺固定と角度バイアスを用いて間違った遮蔽を除

外した

角度バイアス = 0 角度バイアス = 30度

非連続性の問題

-Z -Z

S1

n S1n

Pixel P0 S0 隣Pixel P1

AO(P0) = sin h – sin t= sin 0 – sin 0 = 0

AO(P1) = sin h – sin t == sin(45deg) – sin 0 = 0.7 sin 0 sin 0 0 sin(45deg) sin 0 0.7

P0 とP1の間、非連続が発生する

減衰の関数

• 放射関数W(r)により、AOのウェートを付ける• “obscurances”に似ているアプローチ [Zhukov et al. 98]似 るア チ [ ]• [Gelato] と[Mental Ray]では、 “Falloff” のパラメーター

基準化した距離r = ||S – P|| / R1

1.2

減衰関数W(r) = 1 - r20.6

0.8

step

1-r

0.2

0.4 1-r^2

-0.2

00 0.5 1 1.5 2

サンプル単位の減衰

• WAO = 0と、初期化

• サンプルS の後 SΦ(S2)

• サンプルS1の後• AO(S1) = sin Φ(S1) – sin t• WAO += W(S1) AO(S1)

S2Φ(S1)

R S1• WAO += W(S1) AO(S1)• サンプルS2の後

• もし Φ(S ) > Φ(S ) P• もし、 Φ(S2) > Φ(S1)• AO(S2) = sin Φ(S2) – sin t• WAO += W(S2) (AO(S2) - AO(S1))

P1

サンプリング方向( 2) ( ( 2) ( 1)) サンプリング方向

減衰ありとなしの例

減衰あり 減衰なし減衰ありW(r) = 1 - r2

減衰なしW(r) = 1

ノイズ

ピクセル毎のランダム化によるノイズ• ピクセル毎のランダム化によるノイズ

AO: 6 方向x 方向毎に6ステップ

Cross Bilateral Filter

をぼかす• AOをぼかす

• 深さ依存性のガウスのブラ• [Petschnigg et al. 04]• [Eisemann and Durand 04] • 辺のぼかしが防止できる

• 厳密には、非分離型のフィルターだが、X方向とY厳密 、非分離 ィ 、 方方向にそれぞれ与える

Cross Bilateral Filter

深さ依存 ぼか• 深さ依存のぼかし

ぼかしフィルターなし 15x15のぼかしフィルター

半解像度のAO

AOはほとんど低周波数• AOはほとんど低周波数

• 半解像度の描画も可能

• 半解像度の深さイメージを読み込む半解像度の深さイメ ジを読み込む

• ぼかし処理は、まだ全解像度を対象にする

• 辺での色滲みを防止する

• 目上の深さを全解像度で読み込む

• [Kopf et al. 07]

描画パイプライン

不透明モデルの描画

AO 描画

目空間の法線 目空間の深さ Unprojectionのパラメーター(fovyとアスペクト比)

AOの描画(全解像度または半分)

目空間上の半径 R方向の数方向当たりのステップ数角度バイX上、 AOをぼかす角度バイアス

Kernel 半径Spatial sigma

Y上、AOをぼかす

色 整

Spatial sigmaRange sigma

色の調整

デモ

パフォーマンス

主な要因• 主な要因

• スクリーンの解像度

• アンビエントオクルージョンの解像度解像度

• サンプル数 (方向 * ステップ)• ぼかしフィルターの大きさ

半解像度のAO

イメージサイズ 1600x1200AO解像度 800x600ぼかし解像度 1600x1200

半解像度 AO GeForce  GTX 280ジオメトリ 1.0 ms

ぼかし解像度

AO 3.5 msぼかし 2.5 ms合計 7.0 ms

143 fps143 fps

6 directions per pixel6 steps per direction15x15 Blur Size

全解像度のAO

イメージサイズ 1600x1200AO 解像度 1600x1200Blur 解像度 1600x1200解像度

Full‐Res AO GeForce GTX 280Geometry 1.0 ms

AO 30.0 msBlur 2.5 msTotal 33.5 ms

30 fps30 fps

6 方向/ピクセル6 ステップ/方向15x15 ぼかしのサイズ

半解像度のAO6x6 サンプル/ AO ピクセルBlurなし

AO = 3.5 ms @ 800x600GeForce GTX 280上

Blurなし

AO = 3.5 ms @ 800x600Blur = 2.5 ms @ 1600x1200

半解像度のAO6x6 サンプル/ AO ピクセル15x15 Blur GeForce GTX 280上15x15 Blur

全解像度のAO6x6 サンプル/ AO ピクセル15 15 Bl

AO = 30 ms @ 800x600Blur = 2.5 ms @ 1600x1200

15x15 Blur GeForce GTX 280上

全解像度のAO16x16 サンプル/ピクセル16x16 サンプル/ピクセルBlurなし

全解像度のAO16 32 サンプル/ピクセル16x32 サンプル/ピクセルBlurなし

結論

サ プ• DirectX10 SDK のサンプル• developer.nvidia.comにて配信中

ビデ• ビデオと技術白書も

• ゲームエンジンに組み込みやすい!• 入力 = 目空間上の深さと法線

• 後処理のパスで描画する

• 更に詳しくは、ShaderX7 (掲載予定)

Medusa デモ

Acknowledgments

NVIDIA• NVIDIA• Rouslan Dimitrov, Samuel Gateau, Michael Thompson,

Ignacio Castano the demo teamIgnacio Castano, the demo team• Models

• Dragon - Stanford 3D Scanning Repositoryg g p y• Sibenik Cathedral - Marko Dabrovic

Q&A

bdudash@nvidia comコ ドのサンプルの以下のアドレスまで [email protected]@nvidia.com

コードのサンプルの以下のアドレスまでhttp://developer.nvidia.com

ありがとうありがとうございました!ざ ました

10:40 - 12:00 Displacement Subdivision Surfaces in DX11p

Takayuki Kazama

13:00 - 14:20 G CGPU Physics and CUDA

Kitty Vongsay

14:50 16:1014:50 - 16:10 Real time Hair Rendering

Bryan Dudash

16:40 - 18:00 Horizon Based Ambient Occlusion

Bryan Dudash

developer.nvidia.com

References

[M 86] MAX N L 1986 “H i i Sh d f b• [Max 86] MAX, N. L. 1986. “Horizon mapping: Shadows for bump-mapped surfaces.” In Proceedings of Computer Graphics Tokyo ’86 on Advanced Computer Graphics.

• [Zhukov et al. 98] Sergej Zhukov, Andrej Inoes, Grigorij Kronin, 1998. “An ambient light illumination model.” In Rendering Techniques ’98 G Drettakis and N Max Eds Eurographics 45–Techniques 98, G. Drettakis and N. Max, Eds., Eurographics, 4556.

• [Landis 02] Landis, 2002. “Production-Ready Global Illumination,” I ACM SIGGRAPH C #16In ACM SIGGRAPH Course #16.

• [Christensen 03] Christensen, P. H. 2003. “Global illumination and all that”. In ACM SIGGRAPH Course 9.

References

[Ei d D d 04] El Ei d F éd D d• [Eisemann and Durand 04] Elmar Eisemann and Frédo Durand, “Flash Photography Enhancement via Intrinsic Relighting”, ACM SIGGRAPH 2004.

• [Petschnigg et al. 04] Petschnigg, Szeliski, Agrawala, Cohen, Hoppe, Toyama, “Digital photography with flash and no-flash image pairs ” ACM SIGGRAPH 2004image pairs. ACM SIGGRAPH 2004.

• [Schüler 05] Christian Schüler, 2005. “Eliminate surface acne with gradient shadow mapping”, ShaderX4: Advanced Rendering T h iTechniques.

• [Gelato] Gritz, L. 2006. “Gelato 2.1 Technical Reference”. NVIDIA.• [Mental Ray] “mental ray Shader Reference” November 2007[Mental Ray] mental ray Shader Reference , November 2007.

References

[Mitt i 07] MITTRING M 2007 “Fi di t C E i 2”• [Mittring 07] MITTRING, M. 2007. “Finding next gen: Cry Engine 2”. In SIGGRAPH ’07: ACM SIGGRAPH 2007 courses.

• [Shanmugam and Orikan 07] SHANMUGAM, P., AND ARIKAN, O. [ g ] , , ,2007. “Hardware accelerated ambient occlusion techniques on GPUs”. In I3D ’07: Proceedings of the 2007 symposium on Interactive 3D graphics and gamesInteractive 3D graphics and games.

• [Kopf et al. 07] Johannes Kopf, Michael F. Cohen, Dani Lischinski, Matt Uyttendaele, “Joint Bilateral Upsampling”, SIGGRAPH '07: ACM SIGGRAPH 2007ACM SIGGRAPH 2007 papers.

• [Fox and Compton 08] Megan Fox and Stuart Compton, “Ambient Occlusive Crease Shading”, Game Developer Magazine, March g , p g ,2008.

目空間上の位置を計算する

• 座標(u,v)にあるサンプルのS だと

uvunproject

s,tsnapx,y

目空間

uv 空間

st

ピクセルの中央点に移動させる

u,vs,tsnap

to s,tテクスチャー読み込み

zピクセルの中央点に移動させる読み込み

– 再構築の (x,y)とサンプルのzのすれ違いを防止するた再構築 ( ,y) サン すれ違 を防 する

め、uvを移動させる

接線角度

• 接線角度のTでは、

• 平面上のT(θ)• t(θ) = atan(T.z / ||T.xy||)

• 平面の基底を計算する

• 基底 = (dP/du dP/dv) XY

n• 基底 = (dP/du,dP/dv)– T = dP/du ∆u + dP/dv ∆v

勾配シャドーマッピングP

XY

t(θ) in [-π/2,π/2]– 勾配シャド マッピング[Schüler 05] 接線ベクトル T(θ)