I.はじめに
偶然ゴンダのビデオに出くわしたのですが、ビデオを見た後、覚えているようでしたが、多くのことを思い出せませんでした。私も最近メディア関係のことを勉強しているので、GPUについて学ばなければなりません。
グラフィックとビデオ ~~~ グラフィックは何とかビデオの続き。
まあ、私はそれが大好きです。
2. はじめに - ディスプレイ
モニターはどのように画像を表示しますか?
基本単位ピクセルは以下の通り!! !
各ピクセルには、赤、緑、青、つまり RGB の 3 つの要素が含まれており、これらが組み合わさってさまざまな色が形成されます。
各コンポーネントは数字で表すことができ、最も一般的には8桁で表され、数字が大きいほど明るさが高くなります。このように、3 つの要素を組み合わせると、256 256 256 = 16777216 色を表すことができます。
コンテンツと表示技術の発展に伴い、これらの年も登場しました。各コンポーネントは、10 ビット、12 ビット、16 ビットなどのより高いビット数で表されます。より詳細に表現したり、範囲を広げたりすることができます。実際には、それらの原理に大きな違いはありません. 簡単にするために、ここでは主に8ビットの状況について話します.
では、コンピューターとしてコンテンツをモニターに出力したい場合、どうすればよいでしょうか。ここに行く前に、いくつかの基本的な概念を見てください。
3. グラフィックの基本概念
ここでの概念は、メモリの領域であるフレーム バッファ、フレーム バッファと呼ばれます。
この領域のコンテンツは、ディスプレイに表示される各ピクセルに対応しています。
8 ビットが 1 バイトなので、フレームバッファ内のすべてのバイト。(各コンポーネントは数字で表すことができ、最も一般的には 8 桁で表されます)
連続的に配置されたピクセルのコンポーネントを表します。もちろん、最新のコンピューターは 32 ビットで整列された処理により適しています。したがって、フレーム バッファでは、32 ビットごと、つまり 4 バイトが 1 つのピクセルを表します。RGB が占める 24 ビットに加えて、透明度を表すアルファが続きます。ディスプレイに出力されますが、この情報は無視されます。
フレーム バッファでは、フレーム バッファの内容をディスプレイに出力するためのデバイスが必要です。これは、グラフィックス カードによって異なります。グラフィックカードには、モニターを介したディスプレイ出力ポートがあります。
フレームバッファを表示出力信号に変換する表示回路もあります。
これは単なるグラフィックカードであり、計算能力はなく、画像のポーターにすぎないことに注意してください。
需要が高まったので、表示される画像の明るさを 2 倍にしたい、つまり、RGB の各コンポーネントを 2 倍にしたいと考えています。フレームバッファに書き込む前に、各数値を 2 で乗算することにより、CPU でこれを行うことができます。これは必然的に多くの CPU リソースを占有します。
より良いアプローチは、大量のデータに対して同じ操作を実行できるプロセッサ (PU) を追加することです。たとえば、ここでは各ピクセルを *2 にしていますが、処理するピクセルがたくさんあります。操作アルゴリズムが固定されている場合、目標を達成するために異なるパラメーターを設定するだけで済みます。
しかし、操作が柔軟で変更可能である必要がある場合は、プログラムをインストールする必要があります。このようなプログラムはピクセルを扱うため、シェーダーと呼びます。ここでのシェーダーはピクセル シェーダーです. シェーダーに結合できるこの種類のユニットは Programmable Pipeline Unit (Programmable Pipeline Uint) と呼ばれます. 各ピクセル シェーダーは 1 つの入力と 1 つの出力で 1 つのピクセルのみを処理します.
ここで、ピクセル シェーダーへの入力は座標です。
(テクスチャ座標: 座標に従って画像から色を取得し、演算を実行して結果を返します。)
入力画像をテクスチャ、テクスチャと呼びます。そして、座標からテクスチャへのデータの収集方法と、フレーム バッファへの書き込み方法。
シェーダーで管理する必要はなく、専用のハードウェアで処理されます。
これまでのところ、ピクセル シェーダーのみを実行でき、処理後に画像の各ピクセルのみを出力できる、最も基本的な画像用プロセッサを見てきました。
(私も持っていましたが、紛失してしまいました。)
PPUと呼ばれる任天堂の赤と白のマシンには、そのようなプロセッサがあります。ブロック移動などの操作を担当。
写真を加工するだけでは不十分です。さらに一歩進んでみましょう。
1-プリミティブ - プリミティブ
入力が単なるグラフではなく、幾何学的メッシュである場合はどうなるでしょうか?
このようなジオメトリは、一連の単純な形状で構成されています。点、線三角形、四角形など。これらの単純な形状は、プリミティブ (プリミティブ) と呼ばれます。
簡単にするために、ここでは三角形のみを見ていきます. これらの三角形はどのようにピクセルに関連していますか?
2- ラスタライズ - ラスタライズ
ピクセル シェーダーに到達する前に、三角形で覆われた領域のピクセルを埋めるためのリンクが必要です。このリンクはラスタライゼーションと呼ばれます — ラスタライズ
これはアルゴリズムが固定された演算であり、効率化のためにハードウェアで直接作成するのが一般的であり、プログラムすることはできません。これを固定パイプライン ユニットと呼びます。
3出力合流(深さ判定)
また、ジオメトリには前後のオクルージョン関係がありますが、どのピクセルが表示され、どのピクセルが表示されないかをどのように判断するのでしょうか? これには、出力マージと呼ばれるピクセル シェーダーの後にリンクを追加する必要があります
。これにより、深度の判断が行われます。
最終的に生き残ることができるピクセルを決定するルールに従って、これは固定パイプラインの単位でもあります。
4 プリミティブ アセンブラー
まだ終わっていませんが、ジオメトリはどのように保存されますか?
まず、空間にはたくさんの点が分布しており、これらの点を頂点と呼びます。
通常、各頂点には、位置を表す <x, y, z> 座標があります。また、向き、色、テクスチャ座標などの情報。
頂点を格納するバッファーを頂点バッファーと呼びます。
それからワイヤーの束があります、それらを接続します。したがって、バッファが必要です。
内部の各単位は、頂点のインデックスを表す整数です。このようなバッファは、インデックス バッファと呼ばれます。この2つで幾何学的形状を表現することができます。
ラスター化プロセスを開始する前に、頂点を三角形に組み立てる必要があります。画面を切り取ったり、三辺の方程式を計算したり、など。次に、ラスタライズに送信されます。
ここでのプリミティブ アセンブリ ユニットも固定パイプライン ユニットです。
5- ハードウェア変換と照明 (T&L)
新しい要求が再び来ました。同じジオメトリ。さまざまな位置に置いたり、さまざまな角度から見たり、カメラの焦点を調整したりできます。画面上では異なって見えるはずです。
このとき、インデックス バッファは同じです。ジオメトリ自体のトポロジー関係は変更されないためです。
ただし、頂点バッファー内の各頂点を変換する必要があります。ジオメトリ自体の空間から画面の空間に変換します。
ここでは 3 つの異なる変換が必要であり、各変換は 4x4 マトリックスで表されます。
頂点の座標 <x, y, z> に 4 番目の次元 1 を加え、これらの 3 つの行列を掛けると、画面空間内の座標 <x', y', z', w'> を取得できます。
この3つの変化のうち、
- 1 つ目は、空間内のオブジェクトを決定するために使用されます: 位置、向き、スケーリングなど、ワールド マトリックスと呼ばれます。このマトリックスを通じて、オブジェクトはグローバル ワールドに配置されます。
- 2 つ目は、ビュー マトリックスと呼ばれるカメラの位置を決定するために使用されます。この行列の後、オブジェクトはカメラを原点とする座標系にあります。カメラから見える空間を表します。
- 視野の幅、視野の範囲など、カメラを調整するために使用される 3 番目のパラメーターは、射影行列と呼ばれます。マトリックスを通過した後、オブジェクトはスクリーン範囲の空間にあり、近くに大きく、はるかに小さいという効果があります。
同様に、固定のアルゴリズム操作のみが必要な場合でも、固定のハードウェアと構成可能なパラメーターを使用して実際に実行できます。
2000 年の GeForce 256 など、初期の GPU も同様でした。
このステップはハードウェア変換と照明 (T&L) と呼ばれますが、柔軟性のために、プログラム可能な方法に急速に進化しました。
しかし、柔軟性のために、すぐにプログラム可能な方法に進化しました。シェーダーを使用して各頂点を渡します。これが頂点シェーダーです。
(T&L は頂点シェーダーに進化)
頂点情報は、必要に応じてさまざまな形式で保存できます。
6入力アセンブラ
頂点シェーダーは、頂点が格納されている形式を認識する必要はありません。
したがって、呼び出し元は頂点形式の記述を提供する必要があります固定パイプライン ユニットの入力アセンブラーは、頂点バッファーから頂点をアセンブルし、それを頂点シェーダーに送信して処理します。
同様に、各頂点シェーダーは、シングルイン、シングルアウトの 1 つの頂点のみを処理します。
4.まとめ
この時点で、完全なグラフィックス パイプライン (グラフィックス パイプライン) が完成しました。
呼び出し元が入力情報を提供した後、画像をレンダリングして送信して表示することができます。
このパイプラインには、プログラマブル ユニットと非プログラマブル ユニットがあります。互いに学び合い、効率と柔軟性のバランスを確保します。このようなパイプラインは、2000 年代の主流の GPU の構成です。
これにより、グラフィックス レンダリング プロセスにおける単純だが大規模な操作から CPU が解放され、専用の GPU を使用してこれらの操作が効率的に実行されます。GPU がグラフィックス プロセッシング ユニットと呼ばれる理由は、まさにグラフィックスをレンダリングできるからです。
グラフィックス レンダリング機能のない GPU を持っていると言うのは詐欺です。
まとめると、頂点シェーダーであれピクセルシェーダーであれ、
それらのプログラム機能は集中しており、ハードウェアによって詰め込まれたデータ単位のみを処理し、処理された結果を返します。
メモリからデータを読み込む方法と、処理後にデータを書き出す方法を考慮する必要はなく、前後に処理する別のユニットがあります。つまり、コールバック関数のように、GPU は必要に応じて大量のデータを処理します。各セルに対してこのコールバック関数を呼び出します。
同時に、CPU と GPU の最初の違いも確認できます。
CPU は、比較的複雑なシリアル計算と小さなデータのロジック制御を得意としています。
GPU は、大量のデータに対して比較的単純な並列計算を行うのが得意であり、分業と協力が行われます。
では、要件がさらに進化するにつれて、GPU で他に何が変わったのでしょうか? 次の記事では、この考え方に従い、GPU の機能を拡張し続けます。
コンテンツの出典: bilibili-Gong Da's Grocery Store