ShaderLab builtin values
Unity provides a handful of builtin 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.
Transformations
- float4x4 UNITY_MATRIX_MVP
- Current model*view*projection matrix
- float4x4 UNITY_MATRIX_MV
- Current model*view matrix
- float4x4 UNITY_MATRIX_P
- Current projection matrix
- float4x4 UNITY_MATRIX_T_MV
- Transpose of model*view matrix
- float4x4 UNITY_MATRIX_IT_MV
- Inverse transpose of model*view matrix
- float4x4 UNITY_MATRIX_TEXTURE0 to UNITY_MATRIX_TEXTURE3
- Texture transformation matrices
- float4x4 _Object2World
- Current model matrix
- float4x4 _World2Object
- Inverse of current world matrix
- float3 _WorldSpaceCameraPos
- World space position of the camera
- float4 unity_Scale
-
xyz
components unused;.w
contains scale for uniformly scaled objects.
Lighting
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 |
Various
- float4 _Time : Time (t/20, t, t*2, t*3), use to animate things inside the shaders
- float4 _SinTime : Sine of time: (t/8, t/4, t/2, t)
- float4 _CosTime : Cosine of time: (t/8, t/4, t/2, t)
- float4 _ProjectionParams :
x
is 1.0 or -1.0, negative if currently rendering with a flipped projection matrix
y
is camera's near plane
z
is camera's far plane
w
is 1/FarPlane. - float4 _ScreenParams :
x
is current render target width in pixels
y
is current render target height in pixels
z
is 1.0 + 1.0/width
w
is 1.0 + 1.0/height