ShaderにおけるSwizzlingとは何か
ShaderにおけるSwizzlingとは、 packed array、つまり複数の要素を持つ型において要素の順番を自由に入れ替えたり、適当な要素を自由に選んで代入することが出来る機能のことを指します。
// 赤と青色を入れ替えて代入する。
fixed4 input;
fixed4 output;
output = input.bgra;
要素数の異なる配列への代入も可能です。
// 透明度を削って代入する。
fixed4 input;
fixed3 output;
output = input.rgb;
同じ要素を繰り返すことも可能です。
// 赤色成分のみを使ったグレースケールを作成する
fixed4 input;
fixed3 output;
output = input.rrr;
smearing
smearingとは、スカラー値をpacked arrayに代入した時に、要素を複製して代入してくれる機能のことを指します。
つまり、packed arrayである型に対して単一の値を代入した場合、全部の要素に同じ値を代入してくれるという意味です。
// 黒色と白色を作成する
fixed3 black = 0; // (0, 0, 0)という値が代入される
fixed3 white = 1; // (1, 1, 1)という値が代入される
この機能はglslにはなさそうで、Cg/HLSL特有の機能だと思います(hlslのリファレンスがどこにあるか分からないので、思うだけです)。
masking
maskingとは、packed array型の一部の要素を選択して値を代入できる機能です。
// 赤色と緑色のみ抽出する
fixed3 input;
fixed3 output;
output.rg = input.rg; // 青はそのまま
GLSLにおけるswizzling, smearing, masking
GLSLにおいてはswizzlingとmaskingは使うことができますが、smearingの機能はありません。
vec3やvec4などを作って代入すれば同等のことができます。
// 黒色と白色を作成する
vec3 black = vec3(0); // (0, 0, 0)という値が代入される
vec3 white = vec3(1); // (1, 1, 1)という値が代入される
参考文献
UNITY 5.x SHADER AND EFFECTS COOKBOOK :https://www.amazon.co.jp/Unity-5-x-Shaders-Effects-Cookbook/dp/1785285246