フォト

Google AdSense

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

« 更新のロードマップ | トップページ | 宝探しみたいなもの »

2004.07.28

返事

こちらでMotoyasu Tanakaさんからご質問を頂きました。

すでにメールでは返事を返しましたが気になる方もいるかとお思いますので、こちらで簡易版(あ、メールはもうちょっと丁寧に書いております)を載せておきます。

>最近小生もHWでのDisplacement Mapping に非常に興味を持っているのですが、Geforce 6800 のHWでの、テセ
>レーション等を行わない単純な頂点変移のみを行うDisplacement Mapping の場合、各頂点の変移後の法線ベク
>トルは、変移後のサーフェスの形状を反映して新たに計算されるのか、変移前の法線情報がそのまま適応され
>るのかどちらなのでしょうか。
コレについては自動計算は行われません。

これは確かNVIDIAの技術者も認めています(3月くらいのニュース記事だったと思いますがちょっと情報元を失念しました)。

それで、その解決法について実装されたサンプルが下記に存在します。
http://www.nzone.com/object/nzone_downloads_nvidia.html

もしもGeForce 6シリーズをお持ちでないのであれば下記にVideoがあります。
http://www.nvidia.com/page/6800_downloads.html

こちらにある【Clear Sailing】の水面の振幅がまさに動的なディスプレースメントマッピングによって実装されていますが、テセレーションがないためNVIDIAでは動的なバンプマップ(動的に法線マップも計算する)をすることでこの問題を解決していると言う話を聞いたことがあります。

ちなみに、これは予想ですがA32R32G32B32Fフォーマットにレンダリング(R32FとA32R32G32B32Fフォーマットでないと頂点テクスチャとして使えないため)することでA32にディスプレースする高さ、R32G32B32に法線という風に格納すればRenderTargetは1枚で済むと思います。

> また、パフォーマンスは別にして、ワンフレームごとに描画されるテクスチュアマップ素材
>(RGBおよび変移量データ)を更新するとい うことは可能でしょうか。
これは可能です(【Clear Siling】はOpenGL)。

実際にそれが【Clear Sailing】デモの水面ですね。

ただ、DirectX 9.0c のヘルプでは【DirectX Graphics】→【Programming Guide】→【The Programmable Pipeline】→【Programmable HLSL Shaders 】→【Vertex Textures in vs_3_0 】に

"At draw time, a texture cannot be simultaneously set as a render target and a texture at a stage."

と書かれているのが気になります。確かにソフトウェア頂点シェーダとピクセルシェーダの組み合わせでは出来ませんでした(ハードウェアは可)。

« 更新のロードマップ | トップページ | 宝探しみたいなもの »

Programming」カテゴリの記事

コメント

コメントを書く

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

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

トラックバック

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

この記事へのトラックバック一覧です: 返事:

« 更新のロードマップ | トップページ | 宝探しみたいなもの »