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

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

Unity は、シェーダー用のビルトイン・グローバル変数をいくつか提供しています。例えば、現在のオブジェクトの変形マトリックス、ライトパラメーター、現在のタイムなどです。これらは他の変数と同様、 シェーダープログラム で使用します。ただ一つの違いは、宣言する必要がないことです。これらの変数はすべて、自動的に含められるインクルードファイル 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 モデル * ビュー行列の逆変換
_Object2World 現在のモデルマトリックス
_World2Object 現在のワールド行列の逆変換

カメラと画面

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

名前 タイプ
_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つのポイントライトの色

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

名前 タイプ
_LightColor float4 ライトの色
_LightMatrix0 float4x4 ワールドとライトの配列。クッキーと減衰テクスチャをサンプリングするのに使用されます。

球面調和関数の相互作用 (アンビエントライトとライトプローブにより使用される) は、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 グループを使用する際の細分化したレベルの fade。x は fade (0..1)、y は16 レベルに量子化された fade、zw は不使用。
ビルトインシェーダーヘルパー機能
複数のシェーダープログラムのバリアントを作る