8

法線バンプ マッピング、視差マッピングなどを含むマッピング テクニックの多くは、特別な頂点単位の接空間ベース(接線、法線、従法線 / 従接線) を必要とします。

これは明らかに、モデルが頂点位置テクスチャ座標頂点ごとの近似法線をエクスポートするだけでなく、接空間基底ベクトルの 1 つ (通常はtangent)もエクスポートする必要があることを意味しますcross(tangent, normal)

位置、法線、UV、および接線は、実際には次のように相互に依存していることに注意してください(接線ベースを準備するには、頂点に関する他のすべてのことを知っておく必要があります)。

position -> normal ->  tangents
            uv     ->

さて、現代の 3D ゲーム / レンダリング エンジンでは、この種の処理はどのように行われているのでしょうか?

それらは実際に各頂点ごとに法線接線、およびuv 座標を提供しますか、それとも実行時に何らかの方法で計算できますか? それらはモデル データの一部であるべきですか、それとも実行時のみのプロパティであるべきですか?

また、ジオメトリ シェーダーを使用すると、実行時に法線と接線を実際に準備できることもわかっていDirect3D10+ます (当然のことながら、各三角形の頂点にアクセスできるため) 。

4

5 に答える 5

6

私の見解は次のとおりです。

UV 座標: 明らかに事前計算されています。複雑なモデルの UV アンラップは、単純なアルゴリズム タスクではなく、通常、最良の結果を得るために手動でシームを配置する必要があります。また、モデルにテクスチャ スキンが付属している場合、UV はスキンと一致する必要があるため、この場合、実行時に計算されない可能性があります。

法線:理論的には、読み込み中にジオメトリ シェーダーまたは CPU で事前に計算できます。ただし、ゲーム内の実際のモデルは元のモデルではなく、ポリゴン数が少ないバージョンであることがよくあります。ゲーム内で使用される最終的なモデルでは、頂点が少なくなりますが、元のハイポリ モデル (アンビエント オクルージョンの計算などにも使用されます) から頂点ごとの法線がより正確に計算されます。したがって、法線を事前に計算することも可能です。

また、多くのゲームでは、テクセルごとの法線マップ(通常は接線空間、AFAIK) を持つテクスチャが、後でピクセル シェーダーで並列マッピングする目的で、各モデルのカラー テクスチャと共に提供されます。

したがって、私の提案は明確なようです-事前計算されたデータを使用し、詳細を改善し、シェーダー処理またはロード時間を節約します-モデルサイズ(つまり、GPUメモリ制限)を心配する必要がない限り-ジオメトリで法線を計算する必要がある場合のみシェーダーを使用すると、スペースを節約できます。

于 2010-11-11T18:54:17.743 に答える
3

一般に、可能な限り事前計算する必要があります。ほとんどのエンジンには、3D ソフトウェアから生データを取り込んで実行時の形式に変換できるカスタム作成ツールがあります (タンジェントやバイタンジェントを追加するなど)。でも...

特定の状況では、頂点ごとのメモリ オーバーヘッドが特定のパフォーマンスの問題になる可能性があります。これは、システムに関するデータの移動に関連するオーバーヘッドがあるためです。これは、シェーダーに追加された命令として明示的ではないため「隠されている」ため、少し高度です。

このような場合、バイタンジェントは事前に計算されず、代わりに実行時に構築されます (メモリ内の頂点のサイズを縮小するため)。バイタンジェントは、単一の頂点のすべてのプロパティである法線タンジェント、および方向フラグから構築できるため、これに適しています。

法線、一部のUV マッピングなどには、メッシュの「トポロジ」に関する知識が必要です。このトポロジは通常、ランタイム データには存在しません。また、アーティストからの追加のマーキングも必要です。シャープ エッジやテクスチャ シームなど。このため、法線UV、および最初のタンジェントは、ほとんどの場合、非常に特殊なタイプのジオメトリを除いて事前に計算されます。

Max、Maya、または Blender でのモデルの表現は、ランタイム バージョンとは大きく異なることに注意してください。

編集ソフト

  • 隣接情報を含む三角形と四角形のスープ
  • シャープ/ソフトとしてマークされたエッジ
  • 1 つの頂点が複数の法線と複数の UV 座標を持つことができます

ランタイム(DirectX、OpenGL など)

  • トライアングル ストリップとトライアングル ファンのキャッシュ フレンドリーなコレクション
  • エッジは暗黙的であり、それらに関連付けられた追加情報はありません
  • 各頂点には、1 つの位置、1 つの法線座標、および 1 つの UV 座標 (テクスチャごと) のみがあります。
  • 複数の詳細レベルで存在する場合がある

一般に、再構築できない多くの情報が失われます。ジオメトリのオリジナルの Max/Maya バージョンでできる限り多くのことを行うと、アーティストは最も満足するでしょう。

于 2010-11-14T09:37:48.850 に答える
2

これは、D3D9 の ID3DXMesh でも実行できます。実行時に再度計算するのは無駄なので、常に事前に計算する必要があります。ただし、メッシュごとに計算するのは 1 回だけなので、プログラムが手続き的にメッシュを生成しない限り、どこでいつ実行されるかについてはおそらく問題になりません。

ここで重要なことは、GPU ではなく CPU で計算することだけです。これは、フレームごとに GPU で何度も何度もその作業を行っているためです。これは、CPU で 1 回だけ実行する場合と比較して、全体の無駄です。私が知る限り、すべての 3D レンダリング システムは CPU で法線などを一度計算し、それをファイルに保存してからロードし、作業のために GPU に送信します。

于 2010-11-09T17:52:15.647 に答える
1

継ぎ目、ミラー化されたテクスチャ、ラップアラウンドなどで特別な処理が必要なため、事前に計算することを好みます。

正しい接線空間を取得するには、現在の三角形データよりも多くのデータが必要になる場合があるため、実行時に計算するのは簡単ではありません。

于 2010-11-09T18:22:18.660 に答える
0

UV と法線は通常、アーティストの管理下にあります。接線と従法線は、UV のグラデーションを使用して計算できます。タンジェントと従法線を常に計算するのは少しコストがかかる傾向があるため、通常は、基礎となるジオメトリに基づいて一度事前計算します。ロード時間を短縮するために、できれば出荷前に行ってください。

于 2010-11-12T19:40:50.397 に答える