私はCgに関するいくつかのチュートリアルを読みましたが、一つのことははっきりしていません。頂点シェーダーとフラグメントシェーダーの違いは何ですか?そして、ある状況が他の状況よりも適している状況は何ですか?
フラグメントシェーダーは、ピクセルシェーダーと同じです。
主な違いの1つは、頂点シェーダーが頂点の属性を操作できることです。ポリゴンのコーナーポイントです。
一方、フラグメントシェーダーは、頂点間のピクセルの外観を処理します。特定のルールに従って、定義された頂点間で補間されます。
たとえば、ポリゴンを完全に赤にしたい場合は、すべての頂点を赤に定義します。頂点間のグラデーションなどの特定の効果が必要な場合は、フラグメントシェーダーでそれを行う必要があります。
別の言い方をすると:
頂点シェーダーは、グラフィックパイプラインの初期段階の一部であり、モデル座標変換とポリゴンクリッピングの間のどこかにあると思います。その時点では、実際にはまだ何も行われていません。
ただし、フラグメント/ピクセルシェーダーはラスタライズステップの一部であり、画像が計算され、頂点間のピクセルが塗りつぶされるか、「色付け」されます。
ここでグラフィックパイプラインについて読むだけで、すべてが明らかになります。 http://en.wikipedia.org/wiki/Graphics_pipeline
頂点シェーダーはすべての頂点で実行され、フラグメントシェーダーはすべてのピクセルで実行されます。フラグメントシェーダーは、頂点シェーダーの後に適用されます。シェーダーGPUパイプラインの詳細 リンクテキスト
頂点変換は、グラフィックスハードウェアパイプラインの最初の処理段階です。頂点変換は、各頂点で一連の数学演算を実行します。これらの操作には、頂点位置をラスタライザーで使用する画面位置に変換する、テクスチャリング用のテクスチャ座標を生成する、頂点を照明してその色を決定するなどが含まれます。
ラスタライズの結果は、ピクセル位置のセットとフラグメントのセットです。プリミティブが持つ頂点の数と、ラスタライズされたときに生成されるフラグメントの数との間に関係はありません。たとえば、3つの頂点だけで構成される三角形が画面全体を占める可能性があるため、数百万のフラグメントが生成されます。
前に、フラグメントが何であるかを正確に知らなかった場合、フラグメントをピクセルと考えるように伝えました。ただし、この時点で、フラグメントとピクセルの区別が重要になります。ピクセルという用語は「ピクチャエレメント」の略です。ピクセルは、色、深さ、およびその場所に関連付けられているその他の値など、特定の場所にあるフレームバッファーの内容を表します。フラグメントは、特定のピクセルを更新するために潜在的に必要な状態です。
「フラグメント」という用語が使用されるのは、ラスタ化により、三角形などの各ジオメトリプリミティブが、プリミティブがカバーする各ピクセルのピクセルサイズのフラグメントに分割されるためです。フラグメントには、関連付けられたピクセル位置、深度値、および色、2次(鏡面)色、1つ以上のテクスチャ座標セットなどの補間パラメータのセットがあります。これらのさまざまな補間パラメータは、フラグメントの生成に使用される特定のジオメトリプリミティブを構成する変換された頂点から派生します。フラグメントは「潜在的なピクセル」と考えることができます。フラグメントがさまざまなラスタ化テストに合格した場合(後ほど説明するラスタ操作ステージで)、フラグメントはフレームバッファ内のピクセルを更新します。
頂点シェーダーとフラグメントシェーダーはどちらも、固定パイプラインレンダリングを使用しない3D実装の機能です。 3Dレンダリングでは、フラグメント/ピクセルシェーダーの前に頂点シェーダーが適用されます。
頂点シェーダーは各頂点で動作します。固定されたポリゴンメッシュがあり、シェーダーで変形したい場合は、頂点シェーダーで実装する必要があります。つまり頂点の外観の物理的な変更は、頂点シェーダーで実行できます。
フラグメントシェーダは、頂点シェーダからの出力を取得し、色、ピクセルの深度値などを関連付けます。これらの操作の後、フラグメントは画面に表示するためにフレームバッファに送信されます。
ライティング計算などの一部の操作は、頂点シェーダーとフラグメントシェーダーで実行できます。ただし、フラグメントシェーダーは、頂点シェーダーよりも優れた結果を提供します。
3Dハードウェアを介した画像のレンダリングでは、通常、メッシュ(ポイント、ポリゴン、ライン)があり、これらは頂点によって定義されます。通常、モデルのモーションまたは海洋の波の頂点を個別に操作するには、頂点シェーダーを使用できます。これらの頂点には、フラグメントシェーダーを使用して頂点の色を操作するために、静的色またはテクスチャによって割り当てられた色を持つことができます。ビューが画面に表示されるパイプラインの最後で、フラグメントシェーダーも使用できます。