私はコンピュータ グラフィックスの初心者であり、理解を深めようとしています。私の教授は、固定機能のパイプラインとシェーダー ベースのプログラミングについて説明しました。これら2つは互いにどのように比較されますか? 違いは何ですか?
3 に答える
固定機能パイプラインは、名前が示すとおり、機能が固定されています。そこで誰かが、ジオメトリを変換およびラスタライズするために許可されるさまざまな方法のリストを書きました。それが利用可能なすべてです。大まかに言えば、線形変換を行ってから、テクスチャリングによってラスタライズしたり、顔全体に色を補間したり、それらの組み合わせや順列によってラスタライズしたりできます。しかしそれ以上に、固定パイプラインには特定の欠陥があります。
たとえば、設計時には、ピクセルごとの照明を計算するのに十分な電力がないことは明らかでした。したがって、照明は頂点で計算され、面全体で線形補間されます。
特定の効果に関連するいくつかの中間的な拡張機能 (たとえば、単一のソースからのピクセルごとの照明用の dot3 とキューブマップ) がありましたが、プログラム可能なパイプラインを使用すると、各段階で必要なことを実行できるため、完全な柔軟性が得られます。
最初はより良いライティングが可能になり、次に一般的な特殊効果 (反射する水の波紋、不完全なガラスなど) が改善され、最近では、パイプラインの端を反転させる遅延レンダリングなどに使用されています。
固定機能パイプラインのすべてのサポートは、過去 10 年ほどのハードウェアでプログラマブル パイプラインをプログラミングすることによって実装されます。プログラマブル パイプラインは、ハードウェアの改良によって提供される、その前身の進歩です。
固定関数パイプラインの本質は、固定プログラムのハードワイヤード実装であり、GPU が処理する各データが通過し、ステップの詳細を変更することはできません。パラメータ化できるのは、プログラム内のハードコーディングされたパスを切り替えるための不定期のブランチ (ライティングの有効化または無効化、別の鏡面反射光の使用など)、または使用されるいくつかの定数 (ライトの色と位置、テクスチャ環境のベース カラー変調) だけです。そして、すべてのステップは特定の公式に従います。
ただし、プログラム可能なパイプラインでは、GPU は白紙の状態です。レンダリング プロセスのさまざまな段階 (頂点変換、テッセレーション、フラグメント処理) をどのように実行するかは、完全にプログラマ次第です。また、タスクに適していると思われる式を使用できます。
固定関数パイプライン GPU には、1 つのイルミネーション モード (Gourad または Phong シェーディングを使用して実装されるランバート イルミネーション モデル) があります。イルミネーション モデルをわずかに変更するためのいくつかのトリックがありました。たとえば、異方性にするなどです。しかし、これには何らかの方法で GPU の裏をかく (または鈍くするためには馬鹿にする) 必要がありました。プログラム可能なパイプラインを使用すると、最初にやりたかったことを簡単に実行できます。