Debugging DirectX 11 shaders with Visual Studio
Particle system

ShaderLab built-in values

Unity provides a handful of built-in values for your shaders: things like current object’s transformation matrices, time etc.

You just use them in ShaderLab like you’d use any other property, the only difference is that you don’t have to declare it somewhere - they are “built in”.

Using them in programmable shaders requires including UnityCG.cginc file.


Name Type Value
UNITY_MATRIX_MVP float4x4 Current model * view * projection matrix.
UNITY_MATRIX_MV float4x4 Current model * view matrix.
UNITY_MATRIX_V float4x4 Current view matrix.
UNITY_MATRIX_P float4x4 Current projection matrix.
UNITY_MATRIX_VP float4x4 Current view * projection matrix.
UNITY_MATRIX_T_MV float4x4 Transpose of model * view matrix.
UNITY_MATRIX_IT_MV float4x4 Inverse transpose of model * view matrix.
UNITY_MATRIX_TEXTURE0 to UNITY_MATRIX_TEXTURE3 float4x4 Texture transformation matrices.
_Object2World float4x4 Current model matrix.
_World2Object float4x4 Inverse of current world matrix.
_WorldSpaceCameraPos float3 World space position of the camera.
unity_Scale float4 xyz components unused; w contains scale for uniformly scaled objects.


In plain ShaderLab, you access the following properties by appending zero at the end: e.g. the light’s model * light color is _ModelLightColor0. In Cg shaders, they are exposed as arrays with a single element, so the same in Cg is _ModelLightColor[0].

Name Type Value
_ModelLightColor float4 Material’s Main * Light color
_SpecularLightColor float4 Material’s Specular * Light color
_ObjectSpaceLightPos float4 Light’s position in object space. w component is 0 for directional lights, 1 for other lights
_Light2World float4x4 Light to World space matrix
_World2Light float4x4 World to Light space matrix
_Object2Light float4x4 Object to Light space matrix


Name Type Value
_Time float4 Time (t/20, t, t*2, t*3), use to animate things inside the shaders.
_SinTime float4 Sine of time: (t/8, t/4, t/2, t).
_CosTime float4 Cosine of time: (t/8, t/4, t/2, t).
unity_DeltaTime float4 Delta time: (dt, 1/dt, smoothDt, 1/smoothDt).
_ProjectionParams float4 x is 1.0 (or –1.0 if currently rendering with a flipped projection matrix), y is the camera’s near plane, z is the camera’s far plane and w is 1/FarPlane.
_ScreenParams float4 x is the current render target width in pixels, y is the current render target height in pixels, z is 1.0 + 1.0/width and w is 1.0 + 1.0/height.
Debugging DirectX 11 shaders with Visual Studio
Particle system