基础篇
Unity内置的变换矩阵:
UNITY_MATRIX_MVP
当前的模型观察投影矩阵,用于将顶点/方向矢量从模型空间变换到裁剪空间
UNITY_MATRIX_MV
当前的模型观察矩阵,用于将顶点/方向矢量从模型空间变换到观察空间
UNITY_MATRIX_V
当前的观察矩阵,用于将顶点/方向矢量从世界空间变换到观察空间
UNITY_MATRIX_P
当前的投影矩阵,用于将顶点/方向矢量从观察空间变换到裁剪空间
UNITY_MATRIX_VP
当前的观察投影矩阵,用于将顶点/方向矢量从世界空间变换到裁剪空间
UNITY_MATRIX_T_MV
UNITY_MATRIX_MV的转置矩阵
UNITY_MATRIX_IT_MV
UNITY_MATRIX_MV的逆转置矩阵,用于将法线从模型空间变换到观察空间,也可用于得到UNITY_MATRIX_MV的逆矩阵
_Object2World
当前的模型矩阵,用于将顶点/方向矢量从模型空间变换到世界空间
_World2Object
_Object2World的逆矩阵,用于将顶点/方向矢量从世界空间变换到模型空间
Unity内置的摄像机和屏幕参数:
_WorldSpaceCameraPos
float3
该摄像机在世界空间中的位置
_ProjectionParams
float4
x = 1.0(或−1.0,如果正在使用一个翻转的投影矩阵进行渲染),y = Near,z = Far,w = 1.0 + 1.0/Far,其中Near和Far分别是近裁剪平面和远裁剪平面和摄像机的距离
_ScreenParams
float4
x = width,y = height,z = 1.0 + 1.0/width,w = 1.0 + 1.0/height,其中width和height分别是该摄像机的渲染目标(render target)的像素宽度和高度
_ZBufferParams
float4
x = 1− Far/Near,y = Far/Near,z = x/Far,w = y/Far,该变量用于线性化Z缓存中的深度值(可参考13.1节)
unity_OrthoParams
float4
x = width,y = heigth,z 没有定义,w = 1.0(该摄像机是正交摄像机)或w = 0.0(该摄像机是透视摄像机),其中width和height是正交投影摄像机的宽度和高度
unity_CameraProjection
float4x4
该摄像机的投影矩阵
unity_CameraInvProjection
float4x4
该摄像机的投影矩阵的逆矩阵
unity_CameraWorldClipPlanes[6]
float4
该摄像机的6个裁剪平面在世界空间下的等式,按如下顺序:左、右、下、上、近、远裁剪平面
ShaderLab属性类型和Cg变量类型的匹配关系:
Color,Vector ---- float4, half4,fixed4
Range,Float ---- float,half,fixed
2D ---- sampler2D
Cube ---- samplerCube
3D ---- sampler3D
Unity中一些常用的包含文件:
UnityCG.cginc
包含了最常使用的帮助函数、宏和结构体等
UnityShaderVariables.cginc
在编译Unity Shader时,会被自动包含进来。包含了许多内置的全局变量,如UNITY_MATRIX_MVP等
Lighting.cginc
包含了各种内置的光照模型,如果编写的是Surface Shader的话,会自动包含进来
HLSLSupport.cginc
在编译Unity Shader时,会被自动包含进来。声明了很多用于跨平台编译的宏和定义
UnityCG.cginc中一些常用的结构体:
appdata_base
可用于顶点着色器的输入
顶点位置、顶点法线、第一组纹理坐标
appdata_tan
可用于顶点着色器的输入
顶点位置、顶点切线、顶点法线、第一组纹理坐标
appdata_full
可用于顶点着色器的输入
顶点位置、顶点切线、顶点法线、四组(或更多)纹理坐标
appdata_img
可用于顶点着色器的输入
顶点位置、第一组纹理坐标
v2f_img
可用于顶点着色器的输出
裁剪空间中的位置、纹理坐标
从应用阶段传递模型数据给顶点着色器时Unity支持的常用语义:
POSITION
模型空间中的顶点位置,通常是float4类型
NORMAL
顶点法线,通常是float3类型
TANGENT
顶点切线,通常是float4类型
TEXCOORDn ,如TEXCOORD0、TEXCOORD1
该顶点的纹理坐标,TEXCOORD0表示第一组纹理坐标ÿ