多様な変換処理
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/10 04:11 UTC 版)
「グラフィックスパイプライン」の記事における「多様な変換処理」の解説
モデルの頂点座標データなどはシェーダーユニットなどによって幾度も多様な変換処理を受けて最終的にフレームバッファに結果が格納される。以下にDirectX (Direct3D) およびOpenGLそれぞれの3DグラフィックスAPIにおける処理の流れを示す。不要な処理ステージはスキップされる。「ラスタライザー」を挟んで前半が頂点データを扱う「頂点パイプライン」であり、ジオメトリシェーダーから始まる後半がピクセルデータを扱う「ピクセルパイプライン」である。これらはプログラム上の仮想的な処理順であって、実際の回路構成とは異なっている。カッコ内は演算フローの外部に位置する演算ユニットである。 DirectX 11の各ステージ インプット アセンブラー 頂点シェーダー (VS) (*) 3種のテッセレーション ユニットハル シェーダー (HS) (*) テッセレータ ドメイン シェーダー (DS) (*) ジオメトリ シェーダー (GS) (*) ラスタライザー ピクセル シェーダー (PS) (*) (テクスチャ フィルタリング) アウトプット マージャー コンピュート シェーダー (CS) (*) - パイプラインに含まれず、他のステージとは独立している。 OpenGL 4.3の各ステージ バーテックス プラー バーテックス シェーダー (VS) 3種のテッセレーション ユニットテッセレーション コントロール シェーダー (TCS) テッセレーション プリミティブ ジェネレーター テッセレーション エバリュエーション シェーダー (TES) ジオメトリ シェーダー (GS) トランスフォーム フィードバック フラグメント シェーダー (FS) (テクスチャリング) (ピクセル パイプライン) コンピュート シェーダー (CS) - パイプラインに含まれず、他のステージとは独立している。 DirectX 8およびOpenGL 2.0からは、従来は固定実装だった陰影計算のアルゴリズムをユーザープログラマーによって実装することのできる「プログラマブルシェーダー」が標準導入された。 DirectX 8、DirectX 9およびOpenGL 2.xでは、プログラム可能なステージは頂点シェーダーおよびピクセルシェーダーのみだったが、DirectX 10およびOpenGL 3.2以降ではさらにジオメトリシェーダーが追加された。 また、DirectX 10世代以降のGPUでは「汎用シェーダー」と呼ばれるプログラム可能なシェーダーユニットが、頂点シェーダー/ジオメトリシェーダー/ピクセルシェーダーなどを兼ねて演算を行なうようになっている。DirectX 11では上図で"*"印を付けて示したように、頂点シェーダー、ハルシェーダー、ドメインシェーダー、ジオメトリシェーダー、ピクセルシェーダー、コンピュートシェーダーが、実際のGPM内では汎用シェーダーで実行されていると想定されている[要出典]。 元々"Shading"(シェーディング)は元画像に対しての光源からの光による陰影効果であり、"Shader"(シェーダー)はその陰影処理を行なう演算プログラムを意味していたが、単純な陰影だけでなくリアルなCG画像を生み出すために多様な修飾(=画面効果、エフェクト)を施す工夫が考案され、それに対応して専用の演算を行なう数種類のシェーダーユニットが生み出された。やがて、必要な演算の種類は異なるが、それぞれに専用の回路を設けるよりも単一の汎用処理回路上でプログラムによって多様な演算をこなす方が得策だとして、「統合型シェーダーアーキテクチャ」が採用されるようになっている。 OpenGL 4.0のバーテックスシェーダーはラスタライジングまで機能に含まれている[要出典]。 頂点シェーダーは、モデルのポリゴンに対して、頂点単位で座標変換・陰影処理を行なう。また、テッセレーションの前段、または後段で視点変換しクリッピング処理を行ない、深度情報によって視点から完全に見えなくなるポリゴンはカリング (Culling) 処理によって除去される。この過程でモデルの座標情報は視点から見える3次元空間内でのワールド座標系へと変換される。 テッセレーションを実行するユニットは頂点を新たに付加することができる(新たに頂点を生成する機能は、バーテックスシェーダーでも備えている[要出典])。この機能によって、距離適応型テッセレーションやディスプレースメントマップのような効果が付けられる。 ジオメトリシェーダーはプリミティブの増減やプリミティブの種類変更が可能である。OpenGLではプリミティブシェーダーとも呼ばれる。 ラスタライザーによってポリゴンが2次元配列のピクセルに対応付けされる。一般にテクスチャデータを用いることも可能である。テクスチャデータは一般的に2次元画像であるが、立方体の各面を用いて6方向からの投影・参照を行なうキューブマップや、3次元のボリュームデータを格納するボリュームテクスチャという概念も存在する。テクスチャを構成する画素は「テクセル (texel)」と呼ばれる。 なおピクセルへの色の書き込みを行なう際に、併せて視点からの距離すなわち深度値を書き込むことも可能である。Direct3D/OpenGLでは、カラーバッファとは別にZバッファ(深度バッファ)を用意し、レンダーターゲットとして設定する。深度バッファには描画マスク値を管理するステンシル情報領域が含まれることもある(ステンシルバッファ)。 テクスチャデータを圧縮した状態のままGPU側のVRAM上で保持・参照する標準技術として、DXTC (DirectX Texture Compression, S3TC) やASTC (Adaptive Scalable Texture Compression) などがある。 ピクセルシェーダー(フラグメントシェーダー)はピクセル単位の陰影処理を行なう。また、テクスチャ(模様)をポリゴン表面のピクセルごとに貼り付けるテクスチャマッピング処理やテクスチャフィルタリング処理を行なう。テクスチャマッピングには、カラー画像を貼り付けるカラーマッピング、透過度画像を貼り付けるアルファマッピング、拡散反射度や鏡面反射度を付加するディフューズマッピング(アルベドマッピング)・スペキュラーマッピング(グロスマッピング)、凹凸情報や法線情報を付加するバンプマッピング・法線マッピングなど、多種類の修飾・装飾が含まれる。 上記で「○○シェーダー」と示されているステージは必ずしも対応する専用の演算回路がGPU内に存在する訳ではなく論理的なものであり、専用ハードウェアユニットで実行されるか汎用シェーダーで実行されるかはGPUチップと制御プログラムによって決まる。たとえ専用ハードウェアが存在していても、これらすべてのステージを実行する必要はない。 すべての頂点とフラグメントは独立したものと扱われ、並列に配置された多数のシェーダーユニットが同時平行的に処理を行なう。これらの点で現在のGPUはストリーム プロセッサであると同時にアレイ プロセッサ(ベクトル プロセッサ)であるともいえる。
※この「多様な変換処理」の解説は、「グラフィックスパイプライン」の解説の一部です。
「多様な変換処理」を含む「グラフィックスパイプライン」の記事については、「グラフィックスパイプライン」の概要を参照ください。
Weblioに収録されているすべての辞書から多様な変換処理を検索する場合は、下記のリンクをクリックしてください。
全ての辞書から多様な変換処理を検索
- 多様な変換処理のページへのリンク