透明度およびアルファテストは、alpha ディレクティブと alphatest ディレクティブで制御されます。透明度には通常、2 種類があります。従来のアルファブレンディング (オブジェクトをフェードアウトするために使用) と、物理的にもっともらしい “事前乗算ブレンド” (半透明のサーフェスで適切な鏡面反射の保持が可能) です。半透明性を有効にすると、生成されたサーフェスシェーダーコードに Blending コマンドが含まれます。一方でアルファカットアウトを有効にすると、指定された変数に基づいて、生成されたピクセルシェーダーのフラグメントの破棄を行います。
alpha と alpha:auto - 単純なライティング関数のために透明度のフェードイン/アウトを選択し (alpha:fade と同様)、物理基盤のライティング関数のために前もって乗算された透明度を選択します (alpha:premul と同様)。alpha:blend - アルファブレンディングを可能にします。alpha:fade - 従来の透明度のフェードイン/アウトを可能にします。alpha:premul - プレマルチプライドアルファ透明度を可能にします。alphatest:VariableName - アルファカットアウト透明度を可能にします。カットオフ値は VariableName をともなう float 変数で示されます。多くの場合は、addshadow ディレクティブも使用して、適切なシャドウキャスターパスを生成することになります。keepalpha - デフォルトでは、出力構造体の Alpha が何であろうと、ライティング関数で何が戻り値であろうと、不透明サーフェスシェーダーによって 1.0 (白) がアルファチャンネルに書き込まれます。このオプションを選択することにより、ライティング関数のアルファ値を、不透明サーフェスシェーダーのために一定に保つことができます。decal:add - 加算デカールシェーダー (Terrain AddPass など)。これは、他のサーフェスの一番上にあるオブジェクトに有用で、加算ブレンディングに使用します。サーフェスシェーダーの例を参照してください。decal:blend - 半透明デカールシェーダー。これは、他のサーフェスの一番上にあるオブジェクトに有用で、アルファブレンディングに使用します。サーフェスシェーダーの例を参照してください。カスタムモディファイア関数は、入ってくる頂点データを変更または計算するために使用されます。または、計算された最終的なフラグメント色を変更するために使用されます。
vertex:VertexFunction - カスタム頂点修正関数。この関数は、頂点シェーダーの作成の開始時に呼び出され、頂点データごとに修正や計算を行うことができます。サーフェスシェーダーの例を参照してください。finalcolor:ColorFunction - カスタムの最終色修飾関数。サーフェスシェーダーの例を参照してください。finalgbuffer:ColorFunction - G バッファのコンテンツを変更するカスタムディファードパス。Shadows and Tessellation - シャドウとテッセレーションの取り扱いを制御する追加ディレクティブ。
addshadow - シャドウキャスタやコレクタパスを追加します。通常、カスタム頂点編集で使用されるので、シャドウキャスティングも手続き型頂点アニメーションを取得します。多くの場合、シェーダーはフォールバックからシャドウキャスターパスを使用することができるため、特別なシャドウの処理を行う必要はありません。fullforwardshadows - フォワードレンダリングパスですべてのタイプのライトシャドウをサポート。デフォルトでは、フォワードレンダリングでのシェーダーは、一方向からのシャドウしかサポートしません (内部シェーダー変数の数を節約するため)。フォワードレンダリングでポイントシャドウかスポットライトシャドウが必要な場合は、このディレクティブを使用します。tessellate:TessFunction - DX11 GPU テッセレーションを使います。この関数はテッセレーション係数を計算します。詳細はサーフェスシェーダーテッセレーションを参照してください。コード生成オプション - デフォルトでは、生成されたサーフェスシェーダーコードは、すべての使用可能なライティング、シャドウイング、ライトマップのシナリオを可能な限り処理しようとします。ただし、明らかに不要と分かっているものが含まれることもあります。その場合は生成されたコードを調整し、不要なものを省くことができます。こうすることでシェーダーのサイズが小さくなり、ロードが早くなります。
exclude_path:deferred、exclude_path:forward - 指定のレンダリングパスのパスを生成しません (それぞれディファードシェーディング、フォワード)。noshadow - このシェーダーでシャドウのサポートを無効にします。noambient - アンビエントライトやライトプローブを適用しません。novertexlights - フォワードレンダリングで、ライトプローブや頂点ごとのライトを適用しません。nolightmap - このシェーダーでライトマップのサポートを無効にします。nodynlightmap - このシェーダーでランタイムの動的なグローバルイルミネーションのサポートを無効にします。nodirlightmap - このシェーダーでディレクショナルライトマップのサポートを無効にします。nofog - このシェーダーで、すべてのビルトインフォグのサポートを無効にします。nometa - “メタ” パスを生成しないようにします (サーフェス情報を取り出すために、ライトマッピングと動的グローバルイルミネーションに使用します)。noforwardadd - フォワードレンダリングの追加パスを無効にします。これにより、シェーダーは完全なディレクショナルライトをサポートし、その他すべてのライトは、頂点ごと/SH で計算されます。シェーダーもより小さくなります。nolppv - シェーダーのライトプローブプロキシボリュームのサポートを無効にします。noshadowmask - このシェーダーのシャドウマスクサポートを無効にします (シャドウマスクと距離シャドウマスクの両方)。その他のオプション
softvegetation - Soft Vegetation をオンにすると、サーフェスシェーダーのみがレンダリングされます。interpolateview - ビュー方向をピクセルシェーダーで計算する代わりに、頂点シェーダーで計算して補間します。これにより、ピクセルシェーダーがより早くなりますが、テクスチャのインタポレーターを 1つ追加で使用してしまいます。halfasview - 半分方向のベクトルを、ビュー方向ではなくライティング関数に渡します。半距離は頂点ごとに計算、標準化されます。これはより高速ですが、全体的には正しくありません。approxview - Unity 5.0 で削除されました。代わりに interpolateview を使用してください。dualforward - フォワードレンダリングパスでデュアルライトマップを使用します。dithercrossfade - サーフェスシェーダーがディザリングエフェクトをサポートするようにします。そうすると、クロスフェーディング遷移モードに設定された LOD Group コンポーネントを使うゲームオブジェクトにこのシェーダーを適用できます。上記のさまざまなオプションが実際、それぞれどのように違うのかを見るには、シェーダー Inspector の “Show Generated Code” ボタンを使用すると便利です。