ビルトインシェーダーヘルパー機能
複数のシェーダープログラムのバリアントを作る

ビルトインのシェーダー変数

Unity は、シェーダー用のビルトインのグローバル変数をいくつか提供しています。例えば、現在のオブジェクトの変形行列、ライトのパラメーター、現在の時間などです。これらは他の変数と同様、 シェーダープログラム で使用します。ただ 1 つの違いは、宣言する必要がないことです。これらの変数はすべて、自動的に加えられる include ファイル UnityShaderVariables.cginc の中で宣言されています。

変形

これらすべての行列は float4x4 型です。

名前
UNITY_MATRIX_MVP 現在のモデル * ビュー * プロジェクション行列
UNITY_MATRIX_MV 現在のモデル * ビュー行列
UNITY_MATRIX_V 現在のビュー行列
UNITY_MATRIX_P 現在のプロジェクション行列
UNITY_MATRIX_VP 現在のビュー * プロジェクション行列
UNITY_MATRIX_T_MV モデル * ビュー行列の変換
UNITY_MATRIX_IT_MV モデル * ビュー行列の逆変換
unity_ObjectToWorld 現在のモデル行列
unity_WorldToObject 現在のワールド行列の逆変換

カメラと画面

これらの変数は、レンダリング中の カメラ に対応します。例えば、シャドウマップのレンダリング中であれば、 シャドウマップの投影に使用されている「仮想カメラ」ではなく、カメラコンポーネントの値を参照します。

名前 タイプ
_WorldSpaceCameraPos float3 カメラのワールド空間位置
_ProjectionParams float4 x は 1.0 または –1.0、反転した射影行列で現在レンダリングしている場合は負の値。y はカメラのニアクリップ面、zはカメラのファークリップ面、wは 1/ファークリップ面 です。
_ScreenParams float4 x はカメラのターゲットテクスチャの幅(単位:ピクセル)、y はカメラのターゲットテクスチャの高さ(単位:ピクセル)、 z は 1.0 + 1.0/幅、 w は 1.0 + 1.0/高さです。
_ZBufferParams float4 Z バッファ値をリニア化するために使用します。 x は (1-far/near)、 y は (far/near)、 z は (x/far)、 w は (y/far) です。
unity_OrthoParams float4 x は平行投影カメラの幅、 y は平行投影カメラの高さ、 z は未使用、 w はカメラが平行投影の場合 1.0 で透視投影の場合 0.0 です。
unity_CameraProjection float4x4 カメラの射影行列です。
unity_CameraInvProjection float4x4 カメラの射影行列の逆です。
unity_CameraWorldClipPlanes[6] float4 カメラ錘台面のワールド空間上の方程式です。左、右、下、near、far の順番です。

Time

名前 タイプ
_Time float4 ステージのロードからの時間 (t/20, t, t*2, t*3)。シェーダー内でアニメーション化を行うために使用します。
_SinTime float4 時間の正弦: (t/8, t/4, t/2, t)
_CosTime float4 時間の余弦: (t/8, t/4, t/2, t)
unity _DeltaTime float4 デルタ時間: (dt, 1/dt, smoothDt, 1/smoothDt)

ライティング

ライトのパラメーターは、使用される レンダリング パス と シェーダー内で使用される LightMode Pass タグ によって、異なる方法でシェーダーに渡されます。

Forward Rendering (パスタイプ ForwardBaseForwardAdd )

名前 タイプ
_LightColor0 (declared in Lighting.cginc) fixed4 ライトの色
_WorldSpaceLightPos0 float4 ディレクショナルライト: (ワールド空間方向のxyz, 0)、他のライト: (ワールド空間位置のxyz, 1)
_LightMatrix0 (declared in AutoLight.cginc) float4x4 ワールドとライトの配列。クッキーと減衰テクスチャをサンプリングするのに使用されます。
unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0 float4 (ForwardBase パスのみ) 重要でない最初の 4つのポイントライトのワールド空間位置。
unity_4LightAtten0 float4 (ForwardBase パスのみ) 重要でない最初の 4つのポイントライトの Attenuation ファクター。
unity_LightColor half4[4] (ForwardBase パスのみ) 重要でない最初の 4つのポイントライトの色
unity_WorldToShadow float4x4[4] ワールドとシャドウの行列。スポットライトには 1 つの行列、ディレクショナルライトのカスケードには最高 4 つの行列。

ライティングパス シェーダー内で使用される、 Deferred シェーディングと Deferred ライティング(すべて UnityDeferredLibrary.cginc) 内で宣言される)

名前 タイプ
_LightColor float4 ライトの色
_LightMatrix0 float4x4 ワールドとライトの配列。クッキーと減衰テクスチャをサンプリングするのに使用されます。
unity_WorldToShadow float4x4[4] ワールドとシャドウの行列。スポットライトには 1 つの行列、ディレクショナルライトのカスケードには最高 4 つの行列。

球面調和関数の相互作用 (アンビエントライトとライトプローブにより使用される) は、ForwardBasePrePassFinalDeferred いずれかのタイプのパス向けに設定されます。 それらは 3次元の球面調和関数を含み、ワールド空間の法線ベクトルによって評価されます (UnityCG.cgincShadeSH9 を参照)。 変数はすべて、half4 型で、unity_SHAr や似た名前を持っています。

Vertex Lit レンダリングパス詳細 (Vertex パスタイプ)

1つの Vertex パスタイプに、8 ライトまで設定できます。常に、最も明るいものから順番になっています。 そのため、2つのライトから同時に影響を受けるオブジェクトをレンダリングする場合は、配列の最初の 2つを取得します。 オブジェクトに影響するライトが 8つより少ない場合は、残りのライトの色を黒に設定します。

名前 タイプ
unity_LightColor half4[8] ライトの色
unity_LightPosition float4[8] ビュー空間ライト位置。ディレクショナルライトは (-direction,0)、ポイント/スポットライト は (position,1)
unity_LightAtten half4[8] ライトの減衰ファクター。x は cos(spotAngle/2)、または、スポットライト以外は –1。y は 1/cos(spotAngle/4)、または、スポットライト以外は 1。z は 2次減衰。w はライト範囲の平方。
unity_SpotDirection float4[8] ビュー空間スポットライト位置。スポットライト以外は、(0,0,1,0)

フォグとアンビエント

名前 タイプ
unity_AmbientSky fixed4 グラデーションのアンビエントライトの場合のスカイアンビエントライトのカラー
unity_AmbientSky fixed4 グラデーションのアンビエントライトの場合の赤道のアンビエントライトのカラー
unity_AmbientGround fixed4 グラデーションのアンビエントライトの場合の地面のアンビエントライトのカラー
UNITY_LIGHTMODEL_AMBIENT fixed4 アンビエントライトのカラー (グラデーションのアンビエントライトの場合のスカイカラー)。古い変数。
unity_FogColor fixed4 フォグカラー
unity_FogParams float4 フォグ計算のためのパラメーター: (density / sqrt(ln(2)), density / ln(2), –1/(end-start), end/(end-start))。x は Exp2 fog モード用、y は Exp モード用、zw は Linear モード用。

その他

名前 タイプ
unity_LODFade float4 LOD グループ を使用する場合の LOD フェード。x は fade (0..1)、y は16 レベルに数値化された fade、zw は不使用。
_TextureSampleAdd float4 UI 専用に Unity によって自動的に設定されます。使用するテククチャが Alpha8 型 (値は (1,1,1,0) に設定) か、そうでないか (値は (0,0,0,0) に設定) に基づきます。
ビルトインシェーダーヘルパー機能
複数のシェーダープログラムのバリアントを作る