構造体、引数、uv、そしてスィズル
code:cg/HLSL
fixed4 frag(v2f i) : SV_Target
{
return i.uv.xxxx;
}
frag()関数への入力は、引数としてv2f構造体が渡されています。
構造体とは、変数をまとめて持ち運べるようにしたものと考えてください。
v2f構造体の中には絵を描く為に必要な変数がたくさん入っています。今日は特に、その中のfloat2 uvだけは覚えて帰ってください!
このuとvは、テクスチャの縦横をあらわす座標軸です。
float2型は言語側が定義している構造体で、float xとfloat yが定義されており、uvのxとyにはこれから描画するピクセルの座標が指定されています。
さやちゃんぐbot.icon{Is it real?}
ここで、uv変数の加工にスィズル変数(Swizzle)というものを使用します。
これはベクトルの任意の成分を使って任意の次元のベクトルを作れる仕組みです。float2はxとyの2成分を持っていますが、uv.xxxxと記述することで、x成分のみを4つ並べた4次元のベクトルであるfloat4を作成することができます。
以上のことから、i.uv.xxxxと記述することで、uv座標のx成分を4つ並べた4次元ベクトルを作成する処理が実行されます。
さやちゃんぐbot.icon ポイント! 4次元のベクトルは、4つの要素を持った配列float4であらわします。
あれこれ
xyzw、rgbaは[0][1][2][3]に対応します。
xzzとかgabaみたいな書き方すらできます。
uv.xyはfloat2(uv[0], uv[1])と等価です。
ひとつのfloat変数から3次元のベクトルを(1).xxxのように作ることも可能です。