2013年1月24日木曜日

[Unity]モバイル向けのShaderのメモ


Shaderの勉強のためのメモ
モバイル向けに使用できるものを中心にメモしていく。
まずは基本から。

◆バーテックスシェーダー
頂点データを使用して算術的に3D空間のデータに特殊効果を与えるグラフィックス機能。
Cg、GLSL、HLSLなどで扱える。

◆フラグメントシェーダー
ピクセルシェーダーとも呼ばれる。
ピクセル操作に特化したシェーダー。
基本的に頂点シェーダの情報を元にピクセルを操作するので、バーテックスシェーダーと同時に使用することが多い。
Cg、GLSL、HLSLなどで扱える。

◆ジオメトリシェーダー
プリミティブシェーダーとも呼ばれる。
プリミティブを作成できる。
バーテックスシェーダーの実行後にジオメトリシェーダーが実行される。
アセンブリ言語、Cg、GLSL、HLSLで扱える。

◆Unity内のシェーダー言語
Cg/HLSLを合わせて拡張したようなもの。
なので、基本的にはCg/HLSLが扱えれば問題ない。
Shader言語は初なのでまずは基本的なところから学習。
データ型
float - 32bit浮動小数点型
half - 16bit浮動小数点型
int - 32bit整数型
fixed - 12bit固定小数点型
bool - 論理型
sampler - テクスチャーオブジェクト型

その他にfloat3、float4x4などがあり、
ベクトルや行列を扱う型も存在する。

◆参照


◆実行順
Vertex Shader
Fragment Shader

の順番で実行される。

下位のシェーダーはモバイルでは使用できない
というかDirectX11向けに改良された点が多いので、モバイルは制限が多く感じられるのかもしれない。
 - geometory
 - hull
 - domain

◆セマンティクス
Shader言語で関数を記述する際に使用することがよくある。
関数宣言の構文についてと合わせて参照するとよい。
関数の戻り値に対しても、引数の型に対しても、使用目的の識別子として扱われる。
↓関数宣言の構文について

↓セマンティクスについて

よく使われるセマンティクス
シェーダー毎に挙動が異なることが多いので、使用する際にシェーダーとセマンティクスがどういう挙動になるか確認をした方が良い。

POSITION - オブジェクトの頂点位置を読み取る
SV_POSITION - オブジェクトの頂点位置の読み込みと書き込みが可能(DirectX10以降)

0 件のコメント:

コメントを投稿