Unity 内置的 Include 文件为着色器提供了一些全局变量:当前对象的变换矩阵、光源参数、当前时间等等。这些变量就像其他变量一样可供着色器程序使用,但如果已经包含了相关的 Include 文件,则不必声明这些变量。
如需详细了解 Include 文件,请参阅内置的 Include 文件。
所有矩阵都是 float4x4 类型,并且是列主序的。
| 名称 | 值 |
|---|---|
| UNITY_MATRIX_MVP | 当前模型 * 视图 * 投影矩阵。 |
| UNITY_MATRIX_MV | 当前模型 * 视图矩阵。 |
| UNITY_MATRIX_V | 当前视图矩阵。 |
| UNITY_MATRIX_P | 当前投影矩阵。 |
| UNITY_MATRIX_VP | 当前视图 * 投影矩阵。 |
| UNITY_MATRIX_T_MV | 模型 * 视图矩阵的转置。 |
| UNITY_MATRIX_IT_MV | 模型 * 视图矩阵的逆转置。 |
| unity_ObjectToWorld | 当前模型矩阵。 |
| unity_WorldToObject | 当前世界矩阵的逆矩阵。 |
这些变量将对应于正在渲染的摄像机。例如,在阴影贴图渲染中,它们仍将引用摄像机组件值,而不是用于阴影贴图投影的“虚拟摄像机”。
| 名称 | 类型 | 值 | |
|---|---|---|---|
| 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,如果 UNITY_REVERSED_Z 为 1,则为 -1+far/near。如需详细了解 UNITY_REVERSED_Z,请参阅基于平台功能的分支
|
||
y |
far/near,如果 UNITY_REVERSED_Z 为 1,则为 1。如需详细了解 UNITY_REVERSED_Z,请参阅基于平台功能的分支
|
||
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 | 摄像机视锥体平面世界空间等式,顺序为:左、右、底、顶、近、远。 | |
时间以秒为单位,并根据项目时间设置中的时间乘数进行调整。不存在可用于访问未调整时间的内置变量。
| 名称 | 类型 | 值 |
|---|---|---|
| Time |float4 | 从关卡加载算起的时间 (t/20, t, t2, t3),用于将着色器中的内容动画化。 | |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)。 |
光源参数会以不同的方式传递给着色器,具体取决于使用的渲染路径,以及着色器中使用的光源模式通道标签。
前向渲染(ForwardBase 和 ForwardAdd 通道类型):
| 名称 | 类型 | 值 |
|---|---|---|
| LightColor0(在 UnityLightingCommon.cginc 中声明) | fixed4 |光源颜色。 | |WorldSpaceLightPos0 | float4 | 方向光:(世界空间方向,0)。其他光源:(世界空间位置,1)。 |
| unity_WorldToLight(在 AutoLight.cginc 中声明) | float4x4 | 世界至光源矩阵。用于对剪影和衰减纹理进行采样。 |
| unity_4LightPosX0、unity_4LightPosY0、unity_4LightPosZ0 | float4 | (仅限 ForwardBase 通道)前四个非重要点光源的世界空间位置。 |
| unity_4LightAtten0 | float4 | (仅限 ForwardBase 通道)前四个非重要点光源的衰减因子。 |
| unity_LightColor | half4[4] | (仅限 ForwardBase 通道)前四个非重要点光源的颜色。 |
| unity_WorldToShadow | float4x4[4] | 世界至阴影矩阵。聚光灯用一个矩阵,方向光级联最多用四个矩阵。 |
延迟着色,用于光照通道着色器(全部在 UnityDeferredLibrary.cginc 中声明):
| 名称 | 类型 | 值 |
|---|---|---|
| _LightColor | float4 | 光源颜色。 |
| unity_WorldToLight | float4x4 | 世界至光源矩阵。用于对剪影和衰减纹理进行采样。 |
| unity_WorldToShadow | float4x4[4] | 世界至阴影矩阵。聚光灯用一个矩阵,方向光级联最多用四个矩阵。 |
为 ForwardBase、Deferred 通道类型设置的球谐函数系数(供环境光和光照探针使用)。这些系数包含由世界空间法线求值的 3 阶 SH 函数(见 UnityCG.cginc 中的 ShadeSH9)。变量都是 half4 类型、unity_SHAr 和类似名称。
顶点光照渲染(Vertex 通道类型):
最多可为 Vertex 通道类型设置 8 个光源;始终从最亮的光源开始排序。因此,如果您希望一次渲染受两个光源影响的对象,可直接采用数组中前两个条目。如果影响对象的光源数量少于 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_ 是二次衰减;_w_ 是光源范围的平方。 |
| unity_SpotDirection | float4[8] | 视图空间聚光灯位置;非聚光灯为 (0,0,1,0)。 |
| 名称 | 类型 | 值 |
|---|---|---|
| unity_Lightmap | Texture2D | 包含光照贴图信息。 |
| unity_LightmapST | float4[8] | 调整 UV 信息并转换为正确的范围,以对光照贴图纹理进行采样。 |
| 名称 | 类型 | 值 |
|---|---|---|
| unity_AmbientSky | fixed4 | 梯度环境光照情况下的天空环境光照颜色。 |
| unity_AmbientEquator | fixed4 | 梯度环境光照情况下的赤道环境光照颜色。 |
| unity_AmbientGround | fixed4 | 梯度环境光照情况下的地面环境光照颜色。 |
| unity_IndirectSpecColor | fixed4 | 如果使用天空盒则为天空盒的平均颜色,Unity 使用环境探针中的球谐函数数据的 DC 分量来计算该颜色。否则为黑色。 |
| 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 雾模式;_y_ 适用于 Exp 模式,_z_ 和 w 适用于 Linear 模式。 |
##其他
| 名称 | 类型 | 值 |
|---|---|---|
| unity_LODFade | float4 | 使用 LODGroup 时的细节级别淡入淡出。x 为淡入淡出(0 到 1),_y_ 为量化为 16 个级别的淡入淡出,_z_ 和 w 未使用。 |
| _TextureSampleAdd | float4 | 根据所使用的纹理是 Alpha8 格式(值设置为 (1,1,1,0))还是不是该格式(值设置为 (0,0,0,0)),由 Unity 仅针对__ UI__(即用户界面,User Interface)让用户能够与您的应用程序进行交互。Unity 目前支持三种 UI 系统。更多信息 See in Glossary 自动设置。 |