シェーダー
ジオメトリシェーダー(英: Geometry Shader, GS)はピクセルシェーダーに渡されるオブジェクト内の頂点の集合を加工するために使用される。ジオメトリシェーダーにより、実行時に頂点数を増減させたり、プリミティブの種類を変更したりすることが可能となる。OpenGLではプリミティブシェーダーとも呼ばれる。
ジオメトリシェーダーはポイント、ライン、トライアングルといった既存のプリミティブから新しいプリミティブを生成できる。
ジオメトリシェーダーは頂点シェーダーの後に実行され、プリミティブ全体または隣接したプリミティブの情報を持つプリミティブを入力する。例えばトライアングルを処理するとき、3つの頂点がジオメトリシェーダーの入力となる。ジオメトリシェーダーはラスタライズされるプリミティブを出力でき、そのフラグメントは最終的にピクセルシェーダーに渡される。またプリミティブを出力せずにキャンセルすることもできる。
ジオメトリシェーダーのよくある使い方としては、ポイントスプライトの生成、ジオメトリテセレーション、シャドウボリュームの切り出し、キューブマップあるいはテクスチャ配列へのシングルパスレンダリングなどがある。
3DCGは様々な要素技術の集まりである。「物体」を三角形の集合で表現するモデリング、「動き」を計算するアニメーション・物理演算、「見た目」を生成するレンダリングなどである。その中でシェーダーはレンダリングの一部を担う。レンダリングは複数の段階からなるパイプライン(レンダリングパイプライン)で成っており、シェーダーはこのうちの「プログラム可能な部分」を意味する。例えば頂点シェーダーは頂点を入出力としてなんらかの処理を記述したものであり、例えばカメラを起点とする座標変換の記述に用いられる。
シェーダーはシェーディング言語を用いて記述される。頂点やピクセルが入出力に与えられ、座標変換/テクスチャマッピング/ライティングなどを含む任意の処理をプログラミングする。実行時には多くの場合シェーダープログラムはGPUへ引き渡され、頂点群やフラグメント群に対して並行的に呼び出されることで3DCGの「見た目」を生成する。
シェーダーはプログラムであるため、シェーディング言語と実行環境が許す任意の処理を記述できる。例えばピクセルシェーダーにおいて入力に含まれている色情報をすべて捨て去って真っ黒なピクセルを出力することも可能であるし、最新の研究に基づいた新しいライティングアルゴリズムを記述することもできる。シェーダーの用途(例: リアルタイムかプロダクションか、写実的かアニメ的か)によってシェーダーに記述される内容は異なり、これが3DCGの見た目の違いとなって現れる。