フラットシェーディング
フラットシェーディングとは、3DCGの陰影処理技法のひとつで、法線をポリゴン面単位で保持し、法線はポリゴン面に対して常に垂直なものとして扱うものをいう。1ポリゴンごとに1色で塗りつぶされる。
1ポリゴンあたり1法線とデータ量が非常に少なく、非常に高速に処理できるという利点があり、リアルタイムレンダリングが求められるポリゴンを使った初期のゲームでよく用いられた。現在ではハードウェアT&Lやプログラマブルシェーダーの登場でほぼ見かけることはなくなった。
GLSL
GLSLではバーテックスシェーダーの出力変数に「flat修飾子」を付けるとフラットシェーディングとなる。
// 入力
layout (location = 0) in vec3 VertexPosition;
layout (location = 1) ih vec3 VertexNormal;
// 出力(これ)
flat out vec3 Intensity;
// バーテックスシェーダー
void main()
{
// フォンシェーディングやグローシェーディングなんかを書いておく
// 出力変数に「flat out」と書かれていると、ここが頂点1個分しか呼ばれない
}
この場合、バーテックスシェーダーにフォンシェーディングやグローシェーディングなどをアルゴリズムを書いておいても、ポリゴンを構成する3つの頂点のいずれか1つだけが計算され、その結果がフラグメントシェーダーに渡ってくる。前述の概要で「法線を面単位で持つ」と書いたが「ポリゴンを構成する頂点の法線のいずれか1つが使われる」という内容になっている。