フォト

Google AdSense

  • AdSense
無料ブログはココログ

« GPUのみのシミュレーション | トップページ | Re:Verlet積分の資料 »

2004.09.16

ちょっとマシになった動的ディスプレースマッピング

NVIDIAの開発の鉄人に触発されて、Verlet積分での水面のシミュレーションを実装してみました。

テクスチャは適当なまま(ちゃんと水っぽい質感のシェーディングや環境マッピング的なネタを入れての実装はまた今度。そもそもディスプレース後の法線も計算しなおさんといかんし)なのですが、気にしないでください。動画で動かしてるサンプルのフレームレートは60固定です。実際にはFPS 900ほどです(スペックは一番下)。

高解像度版(WMV9, 2Mbps, 640x480, 53秒)
ムービーの再生

低解像度版(WMV9, 334kbps, 320x240, 53秒)
ムービーの再生

とりあえずやってることは、下記の通り。2パスで実現です。MRTも使います(後述)。

・パス1(PS3.0のみ)
高さマップをVerlet積分で解く。
解いた後の結果をレンダーターゲット0に出力。
解く前の高さマップは前のフレームの高さとしてレンダーターゲット1に出力。

Verlet積分は前のフレームの位置を必要とするのでMRTで前のフレームの高さを出力しておきます。なお、動画像中の左下の青っぽいヤツは高さマップです。2枚あるのは、左が現在位置で右が前のフレームの高さ。フォーマットはD3DFMT_R32F(R32Fでは赤チャンネルが浮動小数点フォーマットでそれ以外は255がセットされているため。赤が0なら緑と青が255だから水色に見える)のため青っぽいわけですね(0が水色で1が白。それ以外の値は表示できないので負の範囲は水色に見えて1より大きいピクセルは白く見えます)。動画はちとエンコードの問題で目を凝らさないとキツイかも。

・パス2(VS3.0 PS3.0)
頂点テクスチャでディスプレース

ココはシンプルですね。

・総括
とりあえず512×256ピクセルなので制御点131,072って考えると結構な速度ですね。これがGeForce 6600でどのくらい出るかが実用性の観点で気になります。とりあえずクロスシミュレーションとかもこうしたアプローチはどんどん出そうですね(GPUでのヤツは)。

ソースとデモの公開は未定。まぁ、ネタ的にNVIDIAのヤツのパクリだしね。上で、実装のアイデアを書いてるのでそれ見りゃ簡単にできることですしね。

こうなるとDirect3D(というかNVIDIAのハードで)でも高次プリミティブが欲しくなりますね。

スペック
Pentium4 3.0GHz HT付き
RAM 1GB
GeForce 6800 256MB
Windows XP Pro

DirectX 9.0c
Retailランタイム
Releaseビルド
高さマップ:512×256ピクセル
頂点数:16,641

« GPUのみのシミュレーション | トップページ | Re:Verlet積分の資料 »

Programming」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2210/1446778

この記事へのトラックバック一覧です: ちょっとマシになった動的ディスプレースマッピング:

« GPUのみのシミュレーション | トップページ | Re:Verlet積分の資料 »