LAB
研究室
デモプログラム
【水面下のコースティクス表現】 – Caustics under surface of the water –
普段の生活で目にしている「水」を詳しく観察すると簡単に次のような要素があることに気がつきます。
ゆらゆら動く(液体)
透明
海のように深いと色が青っぽい
水面下が屈折してゆがんで見える
水面下に光がゆらゆら映り込んでいる
水面がきらきら反射している
GPUのプログラマブルシェーダーで上記の特徴・質感を再現してみましょう。
今回の技術デモにはこれらを実現するために次のようなものを実装してみました。
リアルタイムフォトンマッピング(Realtime photon mapping)
レイキャストレンダリング(Ray-cast rendering)
リアルタイムレイトレース(Realtime ray tracing)
水面屈折による色収差(Chromatic aberration)
HDRレンダリング(High dynamic range rendering)
水の透明度(Measure the clarity of the water)
カメラ絞り羽根による光の回折現象(Diffraction of light)
この中で今回の技術デモでの特筆すべき点は「フォトンマッピング」です。
Henrik Wann Jensen氏が提唱したフォトン(光子)を実際に飛ばして密度を測定して
レンダリングするという物理現象に沿ったレンダリングをしていることが特徴です。
また、構造が非常にシンプルで、並列化・分散実行にも適しています。
フォトンマッピング―実写に迫るコンピュータグラフィックス
Henrik Wann Jensen (著), 苗村 健 (翻訳)
出版社: オーム社 (2002/07)
ISBN-10: 4274079503
ISBN-13: 978-4274079504
このレンダリング手法では集光模様(Caustics)を忠実に再現できます。
レイトレーシングだけではこの模様を出すことは難しいですが、フォトンマッピングを
併用することで美しい模様を描き出すことが可能です。
集光模様とは一体何?という方は下記ページの写真などを参照ください。
Caustics (wikipedia)
http://en.wikipedia.org/wiki/Caustic_(optics)
今回はフォトンマッピングの処理方式を水面に限定化して高速化しています。DirectX9世代のGPUで実現可能です。
使用しているレイの本数は約26万本です。
とてもCPUではリアルタイムでは捌ききれないデータ量ですが、GPUを用いると
この膨大なデータを非常に高速に生成することが可能です。
DirectX9世代ということは現行のXbox360やPlayStation3でも実現可能な技術です。
又、より一層屈折感を出すために屈折色収差をシミュレートしています。
「色収差」とは赤?紫の光の波長によって屈折率が異なる現象です。
色収差(wikipedia)
http://ja.wikipedia.org/wiki/%E8%89%B2%E5%8F%8E%E5%B7%AE
理科の教科書などでプリズムで光が七色に分解されている様子「分光現象」の写真を
見たことがある方も多いと思います。虹もこの色収差が影響しています。
デモでは屈折したときに虹色模様が出ていることが確認できます。
今回のデモではこの現象を意図的に強調して計算しています。
安いレンズで写真撮影すると写真中心から離れた周囲にこの虹色の色収差が強く出ます。
高級なレンズはこの収差が少ないレンズが用いられたり、非球面レンズなどで収差補正が施されているということになります。
技術デモは下記よりダウンロード可能です。
◎動作可能な環境
GeForce 6800シリーズ以降
Radeon X1000シリーズ以降
基本的にはシェーダーモデル3.0以降で動作します。
特殊なレンダリング手法を用いていますのでドライバの不具合などで一部動作しない環境があるかもしれません。
なるべく最新のデバイスドライバで実行してください。
Download
HexaWater.zip (約4.17MB)
【動作確認済ハードウェア】
nVIDIA GeForce9800GT
AMD RadeonHD4350
【操作方法】
画面左クリック&ドラッグ 視点を回転
Z 雫を滴下
X 水面の挙動をリセット
C 大波を起こす
実行できない方のためにキャプチャした動画を用意しました。
HD解像度でアップロードしていますのでPC環境のスペックによって選択してください。
リンク先でフルサイズで閲覧できます。
今回の技術デモは見た目のインパクトを出すためにビジュアル面を重視しました。
レンダリング品質を大幅に向上させるためにリアルタイムレイトレースも行なっているためピクセルシェーダーが大変ヘビーな実装になっています。なるべく演算器の多い上位機種での実行をお勧めします。
池の底や照り返しにコースティクスが発生していることと、光の回折現象などに注目してみてください。これだけでもリアリティが増していることがわかります。
CATEGORY
- 製品事例 (7)
- デモプログラム (18)
- プログラムTIPS (41)
- C言語 (5)
- C++ (6)
- C++cording (4)
- Ruby (8)
- VisualStudioの使い方 (3)
- 最適化Tips (5)
- ゲーム開発テクニック (2)
- その他 (7)