2010-12-12 21 views
83

Cgに関するチュートリアルを読んだことがありますが、それでも私には分かりません。 頂点シェーダーとフラグメントシェーダーの違いは何ですか? そして、どちらの状況が他の状況より適していますか?頂点シェーダとフラグメントシェーダ

答えて

147

フラグメントシェーダはピクセルシェーダと同じです。

主な違いの1つは、頂点シェーダが頂点の属性を操作できることです。これはポリゴンの角の点です。

一方、フラグメントシェーダは、頂点間のピクセルがどのように見えるかを処理します。それらは、特定の規則に従って定義された頂点間で補間されます。

たとえば、ポリゴンを完全に赤くするには、すべての頂点を赤く定義します。頂点間に勾配のような特定のエフェクトが必要な場合は、フラグメントシェーダで行う必要があります。

別の言い方をすれば:

は、頂点シェーダは、私が思うの変換とポリゴンクリッピング座標のどこかのモデルの間で、グラフィックパイプラインの初期段階の一部です。その時点では、実際にはまだ何も行われていません。

ただし、フラグメント/ピクセルシェーダは、ラスタライズステップの一部であり、画像が計算され、頂点間のピクセルが塗りつぶされます(「色付き」)。

ただ、ここでは、グラフィックス・パイプラインについて読み、すべては自分自身を明らかにする: http://en.wikipedia.org/wiki/Graphics_pipeline

+4

ありがとう、非常に明確かつ簡潔な説明。私は今それを得ると思います。 – adivasile

+0

実際には、頂点の属性を赤に設定する必要はありません。カラー/ラスタライズが属するフラグメントシェーダで、簡単に、おそらくより賢く赤に設定することができます。 – RichieHH

25

頂点シェーダはすべての頂点で実行され、フラグメントシェーダはすべてのピクセルで実行されます。フラグメントシェーダは、頂点シェーダの後に適用されます。シェーダGPUパイプラインの詳細link text

2

3Dハードウェアを経由して画像をレンダリングでは、一般的に(ポイント、ポリゴン、ライン)これらは頂点によって定義されたメッシュを持っています。モデル内のモーションや海洋の波に対して個別に頂点を操作するには、頂点シェーダを使用できます。これらの頂点は、テクスチャによって割り当てられた静的な色または色を持ち、フラグメントシェーダを使用する頂点の色を操作できます。パイプラインの終わりに、ビューが画面に表示されるときに、フラグメントシェーダを使用することもできます。

+1

"モデル内の動きや海洋の波に対して個別に頂点を操作する" - これが当てはまるかもしれないが、頂点シェーダとピクセル/フラグメントシェーダの後ろにあるジオメトリシェーダのほうが適切です。 – Placeable

19

Nvidia CG Book

頂点変換は、グラフィックスハードウェア・パイプラインの最初の処理段階です。頂点変換は、各頂点に対して一連の数学演算を実行します。これらの操作には、ラスタライザで使用するための頂点位置をスクリーン位置に変換すること、テクスチャのためのテクスチャ座標を生成すること、頂点を照明してその色を決定することが含まれます。

ラスタライズの結果は、一連のピクセル位置と一連のフラグメントです。プリミティブに含まれる頂点の数と、ラスタライズされるときに生成されるフラグメントの数との間には関係がありません。たとえば、3つの頂点だけで構成される三角形は、画面全体を占め、数百万のフラグメントを生成する可能性があります。

以前は、フラグメントが何であるかを正確に把握していないと、フラグメントをピクセルとして考えるように言われました。しかし、この時点では、フラグメントとピクセルの区別が重要になります。画素という用語は、「絵素」の略語である。ピクセルは、色、深さ、およびその位置に関連する他の任意の値など、特定の位置にあるフレームバッファの内容を表します。フラグメントは、特定のピクセルを更新する可能性のある状態です。

用語ラスタライズは、三角形のような各幾何プリミティブを、プリミティブがカバーする各ピクセルのピクセルサイズのフラグメントに分割するために使用されます。フラグメントには、ピクセル位置、深さ値、補間パラメータのセットがあります。これらの様々な補間されたパラメータは、フラグメントを生成するために使用された特定の幾何プリミティブを構成する変換された頂点から導出されます。フラグメントは、色、二次(鏡面)カラー、および一つ以上のテクスチャ座標セットとして考えることができます。 「潜在的なピクセル」。フラグメントが様々なラスタライズテストに合格した場合(ラスタオペレーションフレームバッファ内のピクセルを更新する。

4

は、頂点シェーダ及びフラグメントシェーダの用途は、固定パイプライン頂点シェーダをレンダリングrendering.In任意の3-Dは、断片/ピクセルシェーダの前に適用されない3次元実装の両方の特徴です。

頂点シェーダは、固定されたポリゴンメッシュがあり、それをシェーダで変形したい場合、頂点シェーダで実装する必要があります。頂点の物理的な変更は頂点シェーダで行うことができます。

フラグメントシェーダは頂点シェーダの出力を取り込み、ピクセルの深度値を割り当てます。これらの操作の後、フレームセグメントは画面に表示するためにフレームバッファを送ります。

例えば、ライティング計算のようないくつかの操作は、頂点シェーダとフリーグラフシェーダで実行できます。変形シェーダは頂点シェーダよりも良い結果を提供します。

関連する問題