プラットフォームマクロを直接使用することは、コードの将来性を十分考慮してないため、推奨されません。例えば、D3D11 をチェックするシェーダーを記述した場合、将来的にはチェックの範囲を広げ Vulkan も確認する必要があるかもしれません。代わりに、Unity は (HLSLSupport.cginc に) いくつかのヘルパーマクロを定義しています。
| マクロ | 用途 |
|---|---|
UNITY_BRANCH |
条件文の前に加え、実際のブランチの内部にコンパイルされることをコンパイラーに示唆します。HLSL プラットフォームの場合は、[branch] に展開します。 |
UNITY_FLATTEN |
条件文の前にこれを追加し、実際の分岐命令を回避するのに平坦化する必要があるということをコンパイラーに示唆します。HLSL プラットフォームの場合は、[flatten] に展開します。 |
UNITY_NO_SCREENSPACE_SHADOWS |
プラットフォームでカスケード式スクリーン空間シャドウマップを使用しないように定義します (モバイルプラットフォーム)。 |
UNITY_NO_LINEAR_COLORSPACE |
プラットフォームでリニアカラー空間をサポートしないように定義します (モバイルプラットフォーム)。 |
UNITY_NO_RGBM |
プラットフォームでライトマップのための RGBM 圧縮が使用されないように定義します (モバイルプラットフォーム)。 |
UNITY_NO_DXT5nm |
プラットフォームで DXT5nm の法線マップの圧縮を使用しないように定義します (モバイルプラットフォーム)。 |
UNITY_FRAMEBUFFER_FETCH_AVAILABLE |
“framebuffer color fetch” 機能が利用できるプラットフォーム (一般的に iOS プラットフォーム) で定義します。 |
UNITY_USE_RGBA_FOR_POINT_SHADOWS |
ポイントライトのシャドウマップが、エンコードされた深度が含まれる RGBA テクスチャを使用するプラットフォーム上で定義されます (他のプラットフォームでは、シングルチャンネルの浮動小数点テクスチャが使用されます) 。 |
UNITY_ATTEN_CHANNEL |
ライト減衰テクスチャの、どのチャンネルがデータを保有するかを定義し、ピクセルごとのライティングコードで使用されます。‘r’ または ‘a’ のいずれかに定義されます。 |
UNITY_HALF_TEXEL_OFFSET |
プラットフォームで、ピクセルに対してマッピングテクセルで 1/2 テクセルのオフセット調整が必要なことを定義します。 |
UNITY_UV_STARTS_AT_TOP |
常に 1 または 0 で定義されます。1 の値は、テクスチャの “一番上” で、テクスチャの V 座標が 0 であるプラットフォームで使用します。Direct3D のようなプラットフォームでは 1 を使用し、OpenGL のようなプラットフォームでは 0 を使用します。 |
UNITY_MIGHT_NOT_HAVE_DEPTH_Texture |
手動で深度をテクスチャにレンダリングして、プラットフォームがシャドウマップか深度テクスチャをエミュレートするか定義します。 |
UNITY_PROJ_COORD(a) |
4 コンポーネントベクトルを渡すと、投影されたテクスチャ読み込みに適切なテクスチャ座標を戻します。ほとんどのプラットフォームでは渡された値そのものを戻します。 |
UNITY_NEAR_CLIP_VALUE |
ニアクリップ面の値として定義されます。Direct3D のようなプラットフォームでは 1.0 が使用され、OpenGL のようなプラットフォームでは –1.0 を使用します。 |
UNITY_VPOS_TYPE |
ピクセル位置の入力 (VPOS) に必要なデータ型を定義します。D3D9には float2、その他は float4。 |
UNITY_CAN_COMPILE_TESSELLATION |
シェーダーコンパイラが、テッセレーションシェーダーの HLSL 文法 (現時点では D3D11 のみ) を “理解できる” 場合に定義されます。 |
UNITY_INITIALIZE_OUTPUT(type,name) |
指定された type の変数 name を 0 に初期化します。 |
UNITY_COMPILER_HLSL、UNITY_COMPILER_HLSL2GLSL、UNITY_COMPILER_CG
|
シェーダーのコンパイルにどのシェーダーコンパイラーが使用されるかを示します。詳細については、シェーダーのコンパイル のドキュメントを参照してください。コンパイラー間の差異を扱うようなシェーダー構文のまれなケースに遭遇し、それぞれのコンパイラーに異なるコードを書く必要がある場合は、これを使用してください。 |
UNITY_REVERSED_Z - リバース Z バッファを使って、プラットフォーム上で定義されます。格納した Z 値は、 0 - 1 ではなく、 1 - 0 の間です。