2017-10-21 28 views
0

私はBlenderからCollada形式をエクスポーズすることを実験しています。さらに複雑なオブジェクトとテクスチャを使用して、インデックス "p"同じ頂点情報ですが、異なる法線とuv座標を使用します。3Dモデルで異なるuv座標を持つ重複頂点位置があるのはなぜですか?

非常に重要な2つの主な質問があります。

1:なぜですか?その位置に1頂点位置と1 UV座標しか持たないのですか?

2(すべての中で最も重要な質問):この頂点情報がVertex Shaderに順不同で入れられるとどうなりますか?たとえば、インデックス1の頂点とインデックス10の頂点は同じ位置を共有しますが、法線とUV座標は異なります。インデックス10が最初に、そしてインデックス1が最初に行われたらどうなりますか? Pixel Shaderの内部で何か変更されていますか?これはパイプラインの残りの部分にどのように影響しますか?

ありがとうございました!

答えて

1

頂点は、それを定義するすべての情報の組み合わせによって定義されます。あなたの頂点は5次元です:(x、y、z、u、v)。任意の2つの頂点に対して、u1!= u2またはv1!= v2の場合、それらは同じ頂点ではありません。固定パイプラインGPUは、「頂点はポジションA +テクスチャ位置B +ノーマルCプラス...」と言いたいという間接レベルの追加レベルをサポートしていませんでした。プログラマブルGPUとの間接的な機能です。通常、メモリ帯域幅の節約に比べて多くの費用がかかるからです。あなたはできますが、人々は一般的にそうしません。

頂点シェーダには、処理中の頂点がどこに配置されているかという概念はありません。ジオメトリ・パイプラインが追跡している限り、問題は発生しません。

+0

偉大な答えですが、質問1はどうですか? – Mike5050

+0

GPUは「インタリーブされた頂点データ」で動作します。つまり、頂点ごとのデータはすべて、フォーマットとストライドで定義された同じブロックにパックされます。異なる法線、UV、ボーンインデックス、またはその他の頂点ごとのデータで同じ位置にしたい場合は、それを複製する必要があります(「分割」とも呼ばれます)。 GPUは「配列の構造」ではなく「構造の配列」を使用します。複数の頂点バッファストリームを使用する場合でも、頂点ごとにすべてのバッファに対して単一のインデックスしか持たない –

+0

右。質問1への私の答えは:頂点は複製されません。頂点(x、y、z、u1、v1)と頂点(x、y、z、u2、v2)は、異なる(u、v)を持つため、異なる頂点です。 – Tommy

関連する問題