82

頂点シェーダーとピクセル シェーダーとは何ですか?

それらの違いは何ですか?どれが最高ですか?

4

6 に答える 6

68

DirectX 10 と OpenGL 3 では、ジオメトリ シェーダーが 3 番目のタイプとして導入されました。

レンダリング パイプラインの順序で -

Vertex Shader - 単一のポイントを取り、それを調整できます。次の段階のセットアップとして複雑な**頂点照明計算を実行したり、ポイントをワープしたりするために使用できます (ぐらつき、スケールなど)。

結果として得られる各プリミティブは、

ジオメトリ シェーダー- 変換された各プリミティブ (三角形など) を取得し、それに対して計算を実行できます。これにより、新しいポイントを追加したり、削除したり、必要に応じて移動したりできます。これを使用して、単一のベース メッシュから詳細レベルを動的に追加または削除したり、ポイントに基づいて数学的なメッシュを作成したり (複雑なパーティクル システム用)、その他の同様のタスクを実行したりできます。

結果として得られる各プリミティブはスキャンライン変換され、スパンがカバーする各ピクセルは

ピクセル シェーダー(OpenGL のフラグメント シェーダー) - 頂点シェーダーが渡すもの、バインドされたテクスチャ、およびユーザーが追加したデータに基づいて、画面上のピクセルの色を計算します。これは現在の画面をまったく読み取ることができず、現在のプリミティブに対してそのピクセルがどのような色/透明度であるべきかを判断するだけです。

これらのピクセルは、現在の描画バッファー (スクリーン、バックバッファー、テクスチャへのレンダリングなど) に配置されます。

すべてのシェーダーはワールド ビュー マトリックスなどのグローバル データにアクセスでき、開発者は単純な変数を渡して照明やその他の目的に使用できます。シェーダーはアセンブラーに似た言語で処理されますが、最新の DirectX と OpenGL のバージョンには、それぞれ HLSL と GLSL と呼ばれる高レベルの C に似た言語コンパイラーが組み込まれています。NVidia には、両方の API で動作する CG と呼ばれるシェーダー コンパイラもあります。

[コメントに記載されているように、以前の誤った順序 (ジオメトリ -> 頂点 -> ピクセル) を反映するように編集しました。]

テッセレーション用に DirectX 11 で使用される 3 つの新しいシェーダーが追加されました。新しい完全なシェーダーの順序は、Vertex->Hull->Tessellation->Domain->Geometry->Pixel です。私はこれらの新しいものをまだ使用していないので、それらを正確に説明する資格があるとは感じていません.

于 2009-06-06T13:15:34.187 に答える
52

ピクセル シェーダーは GPU (グラフィック プロセッシング ユニット) コンポーネントで、ピクセル単位で動作するようにプログラムでき、照明やバンプ マッピングなどを処理します。

頂点シェーダーも GPU コンポーネントであり、ピクセル シェーダーなどの特定のアセンブリに似た言語を使用してプログラムされますが、シーン ジオメトリに向けられており、漫画のようなシルエット エッジをオブジェクトに追加するなどの操作を行うことができます。

どちらが優れているというわけではなく、それぞれに特定の用途があります。DirectX 9 以上をサポートする最新のグラフィック カードのほとんどには、これらの機能が含まれています。

これらの使用方法をよりよく理解するためのリソースが Web 上に複数あります。特に NVidia と ATI は、このトピックに関するドキュメントの優れたリソースです。

于 2009-05-07T01:48:06.450 に答える
13

頂点シェーダーとピクセル シェーダーは、グラフィックス パイプライン内でさまざまな機能を提供します。頂点シェーダーは、頂点関連のデータ (位置、法線、texcoords) を取得して処理します。

ピクセル (より正確にはフラグメント) シェーダーは、頂点シェーダーで処理された値から補間された値を取得し、ピクセル フラグメントを生成します。「クール」なもののほとんどは、ピクセル シェーダーで行われます。ここで、テクスチャ ルックアップやライティングなどが行われます。

于 2009-05-07T01:48:32.063 に答える
7

DirectX 固有:

シェーダー:

固定レンダリング パイプラインで定義されていないオブジェクトに追加のグラフィック機能を実装するプログラムのセット。このため、必要に応じて独自のグラフィック効果を持たせることができます。つまり、定義済みの「固定」操作に制限されることはなくなりました。

HLSL: (ハイレベル シェーディング言語):

HLSL は、シェーダー (ピクセル シェーダー / 頂点シェーダー) を実装するために使用される C++ のようなプログラミング言語です。

頂点シェーダー:

頂点シェーダーは、各頂点で個別に動作するグラフィックス カードの GPU で実行されるプログラムです。これにより、頂点を操作する独自のカスタム アルゴリズムを簡単に作成できます。

ピクセル シェーダー:

ピクセル シェーダーは、各ピクセルのラスター化プロセス中にグラフィックス カードの GPU で実行されるプログラムです。これにより、個々のピクセルに直接アクセス/操作する機能が提供されます。このピクセルへの直接アクセスにより、マルチテクスチャリング、ピクセル単位の照明、被写界深度、雲のシミュレーション、火のシミュレーション、洗練されたシャドウイング技術など、さまざまな特殊効果を実現できます。

注:頂点シェーダーとピクセル シェーダー (プログラム) はどちらも、使用前に特定のバージョンのコンパイラを使用してコンパイルする必要があります。コンパイルは、ファイル名、メイン エントリ関数などの必須パラメータを使用して API を呼び出すのと同じように実行できます。

于 2013-08-05T15:32:26.520 に答える
4

開発に関しては、ピクセル シェーダーは各ピクセルを個別に操作する小さなプログラムです。同様に、頂点シェーダーは各頂点を個別に操作します。

これらを使用して、特殊効果、影、照明などを作成できます...

各ピクセル/頂点は個別に操作されるため、これらのシェーダーは最新のグラフィックス プロセッサの高度な並列アーキテクチャに適しています。

于 2009-05-07T01:55:48.723 に答える