Unity は、シェーダー用のビルトイン・グローバル変数をいくつか提供しています。例えば、現在のオブジェクトの変形マトリックス、ライトパラメーター、現在のタイムなどです。これらは他の変数と同様、 シェーダープログラム で使用します。ただ一つの違いは、宣言する必要がないことです。これらの変数はすべて、自動的に含められるインクルードファイル UnityShaderVariables.cginc
の中で宣言されています。
これらすべてのマトリックスは float4x4
タイプです。
Name | Value |
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 | 現在のワールド行列の逆変換 |
これらの変数は、レンダリング中の カメラ に対応します。例えば、シャドウマップのレンダリング中であれば、 シャドウマップの投影に使用されている「仮想カメラ」ではなく、カメラコンポーネントの値を参照します。
Name | タイプ | Value |
_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 の順番です。 |
Name | タイプ | Value |
_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 (パスタイプ ForwardBase
と ForwardAdd
)
Name | タイプ | Value |
_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) 内で宣言される)
Name | タイプ | Value |
_LightColor | float4 | ライトの色 |
_LightMatrix0 | float4x4 | ワールドとライトの配列。クッキーと減衰テクスチャをサンプリングするのに使用されます。 |
球面調和関数の相互作用 (アンビエントライトとライトプローブにより使用される) は、ForwardBase
、PrePassFinal
、Deferred
いずれかのタイプのパス向けに設定されます。
それらは 3次元の球面調和関数を含み、ワールド空間の法線ベクトルによって評価されます (UnityCG.cgincの ShadeSH9
を参照)。
変数はすべて、half4 型で、unity_SHAr
や似た名前を持っています。
Vertex Lit レンダリングパス詳細 (Vertex
パスタイプ)
1つの Vertex
パスタイプに、8 ライトまで設定できます。常に、最も明るいものから順番になっています。
そのため、2つのライトから同時に影響を受けるオブジェクトをレンダリングする場合は、配列の最初の 2つを取得します。
オブジェクトに影響するライトが 8つより少ない場合は、残りのライトの色を黒に設定します。
Name | タイプ | Value |
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) |
Name | タイプ | Value |
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 モード用、z と w は Linear モード用。 |
Name | タイプ | Value |
unity_LODFade | float4 | LOD グループを使用する際の細分化したレベルの fade。x は fade (0..1)、y は16 レベルに量子化された fade、z と w は不使用。 |