variant block
概要
variant ブロックは、HCSLでシェーダーのバリアント(条件付き分岐)を定義するための構文です。
variant ブロック内で定義した値は、プリプロセッサマクロとしてシェーダーコード内で利用できます。
これにより、同じシェーダーコードを異なる条件で切り替えてビルド・実行することができます。
また、variant ブロックで定義した値は、Unityのマテリアルインスペクター上にパラメーターとして表示されます。
これらの値を切り替えてHEOエクスポートを行うことで、異なるバリアントごとに個別のコンパイル結果を得ることができます。
条件付きコンパイルのプリプロセッサディレクティブについてはこちらも参照してください。
構文
variant
{
int _RED = 1;
}
variantブロック内で変数を定義すると、その名前がプリプロセッサマクロ(例:_RED)として有効になります。- 値は整数リテラルで指定します。
使用例
variant ブロックで定義したマクロは、shader ブロック内で #ifdef などのプリプロセッサディレクティブを使って参照できます。
variant
{
int _RED = 1;
}
shader fragment
{
void main()
{
vec4 col = vec4(1.0);
#ifdef _RED
col = vec4(1.0, 0.0, 0.0, 1.0);
#else
col = vec4(1.0, 1.0, 1.0, 1.0);
#endif
outColor = col;
}
}
この例では、_RED が定義されている場合は赤色、そうでない場合は白色になります。
主な用途
- 機能のON/OFF切り替え
- 複数バリアントの自動生成
- 条件付きコードの管理
注意点
- バリアントの数が多いとビルドや管理が複雑になるため、必要なものだけ定義してください。