Version: Unity 6.0 (6000.0)
言語 : 日本語
シェーダーモデルに基づく分岐
Unity バージョンに基づく分岐

プラットフォーム機能に基づく分岐

プラットフォームマクロを直接使用することは、コードの将来性を十分考慮してないため、推奨されません。例えば、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_HLSLUNITY_COMPILER_HLSL2GLSLUNITY_COMPILER_CG シェーダーのコンパイルにどのシェーダーコンパイラーが使用されるかを示します。詳細については、シェーダーのコンパイル のドキュメントを参照してください。コンパイラー間の差異を扱うようなシェーダー構文のまれなケースに遭遇し、それぞれのコンパイラーに異なるコードを書く必要がある場合は、これを使用してください。
  • UNITY_REVERSED_Z - リバース Z バッファを使って、プラットフォーム上で定義されます。格納した Z 値は、 0 - 1 ではなく、 1 - 0 の間です。

追加リソース

シェーダーモデルに基づく分岐
Unity バージョンに基づく分岐