「フラットシェーディング」の版間の差分

提供:MonoBook
編集の要約なし
15行目: 15行目:
void main()  
void main()  
{
{
     // ここが頂点1個分しか呼ばれない
     // フォンシェーディングやグローシェーディングなんかを書いておく
    // 出力変数に「flat out」と書かれていると、ここが頂点1個分しか呼ばれない
}
}



2018年11月22日 (木) 02:24時点における版

フラットシェーディングとは、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() 
{
    // フォンシェーディングやグローシェーディングなんかを書いておく
    // 出力変数に「flat out」と書かれていると、ここが頂点1個分しか呼ばれない
}

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

関連項目