ShaderLab 内置值
Unity 为着色器提供 少量内置值:当前对象变换矩阵、时间等类似值。
使用 ShaderLab 中的内置值就像使用其他任何属性一样,唯一的区别在于您不必在某处进行声明 - 它们都是“内置的”。
在可编程着色器中使用它们需要包含UnityCG.cginc文档。
变换
- float4x4 UNITY_MATRIX_MVP
- 当前模型*视图*投影矩阵 (model*view*projection matrix)
- float4x4 UNITY_MATRIX_MV
- 当前模型*视图矩阵 (model*view matrix)
- float4x4 UNITY_MATRIX_V
- 当前视图矩阵 (view matrix)。
- float4x4 UNITY_MATRIX_P
- 当前投影矩阵 (projection matrix)
- float4x4 UNITY_MATRIX_VP
- 当前视图*投影矩阵 (view*projection matrix)
- float4x4 UNITY_MATRIX_T_MV
- 模型*视图矩阵 (model*view matrix) 的转置
- float4x4 UNITY_MATRIX_IT_MV
- 模型*视图矩阵 (model*view matrix) 的逆转置
- float4x4 UNITY_MATRIX_TEXTURE0 到 UNITY_MATRIX_TEXTURE3
- 纹理变换矩阵
- float4x4 _Object2World
- 当前模型矩阵
- float4x4 _World2Object
- 当前世界坐标矩阵的逆转置
- float3 _WorldSpaceCameraPos
- 相机的世界坐标空间位置
- float4 unity_Scale
-
xyz
组件未使用;.w 包含等比缩放对象的缩放。
光照
在普通的 ShaderLab 中,通过结尾追加零访问以下属性:例如光源的模型*光颜色是 _ModelLightColor0
。在 Cg 着色器中,它们显示为单元素阵列,所以 Cg 中相同的是 _ModelLightColor[0]
。
名称 | 类型 | 值 |
_ModelLightColor | float4 | 材质的主要*光色 |
_SpecularLightColor | float4 | 材质的高光*光色 |
_ObjectSpaceLightPos | float4 | 光源在对象空间中的位置。w 组件针对方向灯是 0,针对其他灯是 1 |
_Light2World | float4x4 | 光到世界坐标 (World) 空间矩阵 |
_World2Light | float4x4 | 世界坐标到光 (Light) 空间矩阵 |
_Object2Light | float4x4 | 对象到光 (Light) 空间矩阵 |
种类
float4 _Time : 时间 (t/20, t, t*2, t*3),用于对着色器内的对象进行动画处理
float4 _SinTime : 时间正弦:(t/8, t/4, t/2, t)
float4 _CosTime : 时间余弦:(t/8, t/4, t/2, t)
float4 unity_DeltaTime : 差量时间:(dt, 1/dt, smoothDt, 1/smoothDt)
float4 _ProjectionParams :
x
是 1.0 或 -1.0,如果当前用翻转投影矩阵渲染,则为负数
y
是相机的近平面
z
是相机的远平面
w
是 1/FarPlane。float4 _ScreenParams :
x
是以像素为单位的当前渲染目标宽度
y
是以像素为单位的当前渲染目标高度
z
是 1.0 + 1.0/宽度
w
是 1.0 + 1.0/高度