こんにちは!イワサキです
梅雨
真っ只中だというのに暑い日も多いですねぇ(むしろ蒸し暑い?)
これから徐々に暑くなってくる季節です
前回の紹介は簡単なデモでしたので今回は少し先を見据えた技術デモを公開したいと思います
夏も近いということで少しでも涼しい気分に浸ってもらうために今回のテーマは
『水 』 です。
リアルタイムでレンダリングする場合DirectXかOpenGLの
ハードウェアアクセラレーションの恩恵を受けて描画するわけですが、
「
質感 」を出すにはどのようにしたらよいでしょうか。
普通に画面にポリゴンを出すだけでは物足りませんよね。
今回は「
水 」に焦点を絞って紹介します。
皆さんが普段から目にしている「
水 」とは一体どのような見え方をしていますか?
お風呂
とかで身近に触れているものですよね。
詳しく観察すると簡単に次のような要素があることに気がつきます。
ゆらゆら動く(液体)
透明
海のように深いと色が青っぽい
水面下が屈折してゆがんで見える
水面下に光がゆらゆら映り込んでいる
水面がきらきら反射している
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でも実現可能な技術です。
ゲーム用CGである以上は「
高速(快適)であること 」「
見た目が楽しいこと 」が大前提ですよネ。
又、より一層屈折感を出すために
屈折色収差 をシミュレートしています。
「色収差」とは赤〜紫の光の波長によって屈折率が異なる現象です。
色収差 (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環境のスペックによって選択してください。
リンク先でフルサイズで閲覧できます。
今回の技術デモは見た目のインパクトを出すためにビジュアル面を重視しました。
レンダリング品質を大幅に向上させるためにリアルタイムレイトレースも行なっているため
ピクセルシェーダーが大変ヘビーな実装になっています。
なるべく演算器の多い上位機種での実行をお勧めします。
今後はこのような技法がゲームCGの世界にやってきそうです!
池の底や照り返しにコースティクスが発生していることと、光の回折現象などに
注目してみてください。これだけでリアリティが増していることがわかります。
この技術デモはまだ最適化・高速化の余地はたくさん残っています。
しかもまだまだ動作が重いです。
しかし、これを実用範囲まで高速化することは可能です
実はこの中で一番重たい処理は水面の描画です。
フォトンマッピングは非常に軽量な処理となっています。
実際にゲーム制作に導入する際にはもっと高速に動作させる必要があります
ここもプログラマーの腕の見せ所ですよネ
ヘキサドライブ では自社内製ゲームエンジン「
ヘキサエンジン 」を開発しています。
最新の技術をどんどんと取り入れて共にゲーム作品を作っていきませんか?
グラフィクスだけでなく、物理、AI、サウンドなど多岐にわたります。
企画実現のための表現力の可能性をゲームを作りながら探っていきましょう!
新卒・中途ともにご応募お待ちしています。
皆さんに会えることを心待ちにしています