天天看点

Unity Shader 系列笔记一:内置变量

作为对shader的深入了解的第一步,需要了解Unity给了我们什么佐料和食材,现在将其罗列于下。

变量均保存在UnityCG.cginc文件中,请include这个文件。

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. 

不适用xyz分量,而是通过w分量包含的缩放值等比缩放物体。

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]

.

在纯粹的ShaderLab中,你可以利用下面这些属性,只要在末尾增加一个零数:例如 灯光的物体*灯光颜色是_ModelLightColor0.在Cgshader中这些变量更像是一个包含单一元素的数组。所以在Cg中他们是这样的_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 

物体空间中的灯光为,平行光w分量为零其灯光为1;

_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 

    时间: 用于Shasder中可动画的地方。

  • 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 

    x为1.0 或者-1.0如果当前渲染使用的是一个反转的投影矩阵那么为负。 

    y is camera's near plane y是摄像机的近剪裁平面

    z is camera's far plane z是摄像机远剪裁平面

    w is 1/FarPlane. w是1/远剪裁平面

  • float4 _ScreenParams : 屏幕参数

    x is current render target width in pixels x是当前渲染目标在像素值中宽度

    y is current render target height in pixels y是当前渲染目标在像素值中的高度

    z is 1.0 + 1.0/width z是1.0+1.0/宽度

    w is 1.0 + 1.0/height w是1.0+1.0/高度

继续阅读