フラットシェーディング

提供: MonoBook
2018年11月22日 (木) 02:23時点における180.15.192.154 (トーク)による版
ナビゲーションに移動 検索に移動

フラットシェーディングとは、3DCGの陰影処理技法のひとつで、法線ポリゴン面単位で保持し、法線はポリゴン面に対して常に垂直なものとして扱うものをいう。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() 
{
    // ここが頂点1個分しか呼ばれない
}

この場合、バーテックスシェーダーフォンシェーディンググローシェーディングなどをアルゴリズムを書いておいても、ポリゴンを構成する3つの頂点のいずれか1つだけが計算され、その結果がフラグメントシェーダーに渡ってくる。前述の概要で「法線を面単位で持つ」と書いたが「ポリゴンを構成する頂点法線のいずれか1つが使われる」という内容になっている。

関連項目