「フラットシェーディング」の版間の差分
ナビゲーションに移動
検索に移動
imported>Administrator |
|||
1行目: | 1行目: | ||
− | '''フラットシェーディング'''とは、[[3DCG]]の陰影処理技法のひとつで、[[法線]]を[[ポリゴン]]面単位で保持し、[[法線]] | + | '''フラットシェーディング'''とは、[[3DCG]]の陰影処理技法のひとつで、[[法線]]を[[ポリゴン]]面単位で保持し、[[法線]]はポリゴン面に対して常に垂直なものとして扱うものをいう。1ポリゴンごとに1色で塗りつぶされる。 |
− | + | 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ポリゴンあたり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つが使われる」という内容になっている。