本腰
読んでるだけじゃまったく捗らないので習ったことをここにメモしてゆく事にした。のちのち長いまとめを書くとき用のメモですね。まずは用語の洗い出し。
メッシュ
ポリゴンの集合体。頂点やエッジ、サブメッシュなどの情報を持つ、オブジェクトの形状を定義したもの。
マテリアル
テクスチャの色や質感、光の反射などの情報を含む、オブジェクト表面の見た目を定義したもの。
シェーダー
頂点シェーダー(Vertex Shader)(バーテックス・シェーダー)
頂点に関する情報を処理するシェーダー。モデルのローカル座標をスクリーン座標に変換する。ジオメトリの頂点が2Dスクリーン上のどこにあるかを計算する。ジオメトリの変形はここで行う。断片シェーダー(Fragment Shader)(フラグメント・シェーダー)
ピクセルに関する情報を処理するシェーダー。様々な情報を元に実際の色を決定する。ピクセルをどんな色で塗るか計算する。テクスチャや光と影影の適用はここで行う。
なんで呼称を揃えないのか謎だけど、どのサイトでも、Vertex Shaderは「頂点シェーダー」、Fragment Shaderは「フラグメントシェーダー」と呼んでいるので、僕もそう呼ぶことにする。
ストレージ修飾子
const(コンスト)修飾子
ローカル変数。コンパイル時の定数を入れる。uniform(ユニフォーム)修飾子
グローバル変数。すべてのデータ型・配列・構造体で使用できる。attribute(アトリビュート)修飾子
頂点の情報を持つ変数。頂点が個別に持っている、座標や色などの情報を入れる。頂点シェーダー以外で使うとエラーになる。float・vec2・vec3、vec4・mat2・mat3・mat4のデータ型で使用できる。配列・構造体は無理。varying(ベアリング)修飾子
データ補間のため、頂点シェーダーとフラグメントシェーダー間で連関するパラメータ。float・vec2・vec3・vec4・mat2・mat3・mat4・配列のデータ型で使用できる。構造体は無理。
データ型
void
関数が戻り値を持たないときや、引数リストが空だということを示すときに使われる特別なデータ型。int
符号付き整数値。float
浮動小数点数値。bool
true・falseの論理値。vec2・vec3・vec4
2・3・4つの浮動小数点数要素を持つベクトル(floatの次元ベクトル版)。ivec2・ivec3・ivec4
2・3・4つの符号付き整数要素を持つベクトル(intの次元ベクトル版)。bvec2・bvec3・bvec4
2・3・4つの論理値要素を持つベクトル(boolの次元ベクトル版)。mat2・mat3・mat4(mat2x2・mat3x3・mat4x4)
2列2行 ・3列3行・4列4行の浮動小数点行列(次正方行列)。matAxB(mat2x3・mat2x4・mat3x2・mat3x4・mat4x2・mat4x3)
A列B行の浮動小数点行列。sampler2D
texture2D関数でアクセスできる2DテクスチャのID。samplerCube
textureCube関数でアクセスできるキューブにマッピングされるテクスチャのID。
「行列」と書きつつも「mat列x行」なところがアテンション。
しかも「mat3x2(1.0, 2.0, 3.0, 4.0, 5.0, 6.0)」と下記のような順で格納されるそう(※Column-major Orderって言うんだって)。
mat3x2(1.0, 2.0, 3.0, 4.0, 5.0, 6.0);
// = 1.0 3.0 5.0
// 2.0 4.0 6.0
その他
UV座標
メッシュにテクスチャをマッピングする際に使用する座標系。テクスチャの横方向を「U」、縦方向を「V」として、(0,0)から(1,1)の範囲で表現する。
※何かの略ってわけじゃなく、アルファベットの並び順「…OPQRSTUVWXYZ」を指している。“紫外線”とは一切関係ない。
参考文献
すべてはここにあった…。
https://gist.github.com/gyohk/abf13dbcb5be750b3b021752b280ccd3