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 | モデル * ビュー行列の逆変換 |
_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 | 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
)
名前 | タイプ | 値 |
_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 | ワールドとライトの配列。クッキーと減衰テクスチャをサンプリングするのに使用されます。 |
球面調和関数の相互作用 (アンビエントライトとライトプローブにより使用される) は、ForwardBase
、PrePassFinal
、Deferred
いずれかのタイプのパス向けに設定されます。
それらは 3次元の球面調和関数を含み、ワールド空間の法線ベクトルによって評価されます (UnityCG.cgincの ShadeSH9
を参照)。
変数はすべて、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 モード用、z と w は Linear モード用。 |
名前 | タイプ | 値 |
unity_LODFade | float4 | LOD グループ を使用する場合の LOD フェード。x は fade (0..1)、y は16 レベルに数値化された fade、z と w は不使用。 |