投影されたグリッド水面の詳細


13

私はC ++とDirectX11で海のシーンを実装しようとしています。現在、投影されたグリッド、ガーストナー波、基本的なシェーディングがあります。私の問題は、カメラを水平に向けると、水平線が遠くに見えるので、高い頂点数であっても投影されたグリッドが不十分になることです。これらのスクリーンショットは問題を示しています:

日陰の水面

ワイヤーフレームの水面

私は問題の原因が投影されたグリッドの概念にあることを知っています(グリッドはカメラの近くに詳細であり、それから大まかに離れています)が、これを解決するにはベストプラクティスが必要です。

何か案は?

回答:


7

一般的な解決策は、グリッドの投影に使用されるカメラ変換を、グリッドのレンダリングに使用されるカメラ変換から分割することだと思います。トップダウンに近い遠近法では、2つのカメラは一致しますが、表示カメラが水平遠近法に近づくと、投影カメラは逸脱し、最小の傾斜を維持しようとします。

トリッキーなビットは、投影カメラの視野が常にレンダーカメラから見たシーンの領域をカバーするようにすることです。適切な変換を計算する方法を詳細に説明するリソースは手元にありません。手作業で導出するのは面倒かもしれません。

別の解決策は、信号処理ツールボックスを取得することです。画像に表示されるアーティファクトは、投影されたグリッドによる波高フィールドのサンプリングが不十分であるため、本質的にエイリアシングです。したがって、1つの解決策は、グリッドセルの投影面積に応じて、heightfieldを適切にフィルタリングすることです。これは海洋のオフラインレンダリングで使用され、水平線での波が平らになることを基本的に保証すると考えています。ただし、このアプローチが合理的に見えるようにするには高品質の異方性フィルタリングが必要になるため、これがリアルタイムレンダリングでどの程度実行可能かはわかりません。


アドバイスをありがとう、私は今のところ怠zyなソリューションを選びました。カメラからの距離から波の減衰を決定する頂点シェーダーの関数を使用します。
ガボールシャロキ

6

あなたは現実的かつリアルタイムになります。秘密は、情報がシャノン-ナイキスト(グリッド)スケール(ジオメトリから法線マップ、シェーディングモデルまで)の下で取得されるたびに表現を変更することです。このペーパーはあなたのために作られています:http : //maverick.inria.fr/Publications/2010/BNH10/index.php(Youbeビデオもご覧ください


3

Mayaなどの一部のソフトウェアでは、カメラ位置を中心にグリッドを配置するのとほぼ同じ方法で、極(または実際には距離を置いて極に変わるデカルト)を使用してこれを解決します。このセットアップは、最も重要な箇所に詳細を追加します。その後、さらなる範囲でシェーダーの通常の処理に依存します。改善の余地があります。このアプローチを少し変更し、カメラに向かってメッシュ密度を高める他の形状を作成します。これの利点は、継ぎ目を気にせずに水平線まで効果を拡大できることです。

この場合、ディスプレイスメントをゴチャゴチャにしないためのコツは、遠ざかるにつれて徐々にディスプレイスメントを減らすことです。その後、ピクセルシェーダーで通常の修正を使用します。これは、正確なシュレットのエッジをフィルタリングするよりもフィルタリングが簡単です。また、それが遠くに見える場合は、とにかくあなたの爪はおそらく十分に平らです。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.