メインメニューを開く

差分

フラットシェーディング

26 バイト除去, 2021年12月10日 (金) 04:41
==GLSL==
[[GLSL]]では[[バーテックスシェーダー]]の出力変数に「flat修飾子」を付けるとフラットシェーディングとなる。<syntaxhighlight lang="glsl">
// 入力
layout (location = 0) in vec3 VertexPosition;
layout (location = 1) ih in vec3 VertexNormal;
// 出力(これ)
void main()
{
// フォンシェーディングやグローシェーディングなんかを書いておく
// 出力変数に「flat out」と書かれていると、ここが頂点1個分しか呼ばれない
}
</syntaxhighlight>
</syntaxhighlight>この場合、[[バーテックスシェーダー]]の出力値を格納する変数にflat修飾子をつけると、その[[フォンシェーディング]]や[[グローシェーディング]]などを[[アルゴリズムバーテックスシェーダー]]を書いておいても、では[[ポリゴン]]を構成する3つの[[頂点]]のいずれか1つだけが計算され、その結果がのいずれか1つだけが計算され、その値が[[フラグメントシェーダー]]に渡ってくる。つまりGLSLでは前述の概要で「に渡ってくる。前述の概要で「[[法線]]を面単位で持つ」と書いたが「ポリゴンを構成するを面単位で持つ」と書いたが、GLSLでは「ポリゴンを構成する[[頂点]]の[[法線]]のいずれか1つが使われる」という内容になっている。
== HLSL ==
[[HLSL]]にはフラットシェーディングを扱う方法がない。このため普通に3頂点を計算して擬似的にフラットシェーディングを実装することになる。にはフラットシェーディングを扱う方法がない。このため普通に3頂点を計算して擬似的にフラットシェーディングを実装することになる。見た目がフラットシェーディング風になるだけなので速度的な利点は一切ない。 <syntaxhighlight>
float4x4 World;
float4x4 View;