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

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

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

フラットシェーディングとは、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つが使われる」という内容になっている。

関連項目