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

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

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

変形

これらすべてのマトリックスは float4x4 タイプです。

Name Value
UNITY_MATRIX_MVP 現在のモデル*ビュー*射影行列(model*view*projection)
UNITY_MATRIX_MV 現在のモデル * ビュー行列。
UNITY_MATRIX_V 現在のビュー行列。
UNITY_MATRIX_P 現在の投影行列
UNITY_MATRIX_VP 現在のビュー行列*射影行列
UNITY_MATRIX_T_MV モデル * ビュー行列の転置行列
UNITY_MATRIX_IT_MV モデル * ビュー行列の逆行列の転置行列
_Object2World 現在のモデルマトリックス
_World2Object 現在のワールド行列の逆

カメラと画面

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

Name Type Value
_WorldSpaceCameraPos float3 カメラのワールド空間位置
_ProjectionParams float4 x は 1.0 または –1.0、反転した射影行列で現在レンダリングしている場合は負の値。y はカメラに近い平面、zはカメラの遠い平面、wは 1/FarPlane です。
_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

Name Type 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 (パスタイプ ForwardBaseForwardAdd )

Name Type Value
_LightColor0 (declared in Lighting.cginc) fixed4 ライトの色
_WorldSpaceLightPos0 float4 ディレクショナルライト: (ワールド空間方向, 0)、他のライト: (ワールド空間位置, 1)
_LightMatrix0 (declared in AutoLight.cginc) float4x4 ワールドとライトのマトリクス。クッキーと Attenuation テクスチャをサンプリングするのに使用されます。
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 Type Value
_LightColor float4 ライトの色
_LightMatrix0 float4x4 ワールドとライトのマトリクス。クッキーと Attenuation テクスチャをサンプリングするのに使用されます。

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

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

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

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

フォグとアンビエント

Name Type Value
unity_AmbientSky fixed4 gradient と ambient のライティングの場合の Sky ambient ライティングカラー
unity_AmbientSky fixed4 gradient と ambient のライティング場合の Equator ambient ライティングカラー
unity_AmbientGround fixed4 gradient と ambient のライティング場合の Ground Ambient ライティングカラー
UNITY_LIGHTMODEL_AMBIENT fixed4 Ambient ライティングカラー (gradient のライティング場合の sky カラー)。旧変数。
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 モード用。

その他、さまざま

Name Type Value
unity_LODFade float4 LOD グループを使用する際の細分化したレベルの fade。x は fade (0..1)、y は16 レベルに量子化された fade、zw は不使用。
ビルトインシェーダーヘルパー機能
複数のシェーダープログラムのバリアントを作る