0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Cg/HLSLにおけるswizzling, smearing, maskingについて

Posted at

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である型に対して単一の値を代入した場合、全部の要素に同じ値を代入してくれるという意味です。

smearingの例
// 黒色と白色を作成する
fixed3 black = 0; // (0, 0, 0)という値が代入される
fixed3 white = 1; // (1, 1, 1)という値が代入される

この機能はglslにはなさそうで、Cg/HLSL特有の機能だと思います(hlslのリファレンスがどこにあるか分からないので、思うだけです)。

masking

maskingとは、packed array型の一部の要素を選択して値を代入できる機能です。

maskingの例
// 赤色と緑色のみ抽出する
fixed3 input;
fixed3 output;
output.rg = input.rg; // 青はそのまま

GLSLにおけるswizzling, smearing, masking

GLSLにおいてはswizzlingとmaskingは使うことができますが、smearingの機能はありません。
vec3やvec4などを作って代入すれば同等のことができます。

smearingの例
// 黒色と白色を作成する
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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?