1.函数
float3 WorldSpaceViewDir(float4 v)
float3 ObjSpaceViewDir(float4 v)
float3 WorldSpaceLightDir(float4 v)
返回世界空间中从该点到光源的光照方向,没有被归一化
float3 UnityWorldSpaceLightDir(float4 v)
返回世界空间从该点到光源的光照方向,没有被归一化
float3 ObjSpaceLightDir(float4 v)
返回模型空间中从该点到光源的光照方向,没有被归一化
float3 UnityObjectToWorldNormal(float3 norm)
float3 UnityObjectToWorldDir(in float3 dir)
float3 UnityWorldToObjectDir(float3 dir)
float3 Shade4PointLights(...)
2.语义
POSITION //模型空间中的顶点位置,通常是float4类型
NORMAL //顶点法线,通常是float3类型
TANGENT //顶点法线,通常是float4类型
TEXCOORDn //该顶点的纹理坐标,TEXCOORD0表示第一组纹理坐标,…,通常是float2或float4类型
COLOR //顶点颜色,通常是fixed4或float4类型
SV_POSITION //裁剪空间中的顶点坐标,结构体中必须包含一个用该语义修饰的变量。等同于DirectX9中的
POSITION,但是最好是使用SV_POSITION
COLOR0 //输出第一组顶点颜色
COLOR1 //输出第二组顶点颜色
TEXCOORD0~TEXCOORD7 //输出纹理坐标
SV_Target //输出值将会存储到渲染目标(render target)中
3.变量
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的逆矩阵
unity_ObjectToWorld(_Object2World) //当前的模型矩阵,用于将顶点/方向矢量从模型空间变换到世界空间
unity_WorldToObject(_World2Object) //用于将顶点/方向矢量从世界空间转换到模型空间
4.摄像机和屏幕参数
loat3 _WorldSpaceCameraPos //该摄像机在世界空间中的位置
float4 _ProjectionParams //x=1.0(或-1.0,如果正在使用一个翻转的投影矩阵进行渲染),
y=Near,z=Far,w=1.0+1.0/Far,其中Near和Far分别是近裁剪平面和远裁剪平面到摄像机的距离
float4 _ScreenParams //x=width,y=height,z=1.0+1.0/width,w=1.0+1.0/height,
其中width和height分别是该摄像机的渲染目标(render target)的像素宽度和高度
float4 _ZBufferParams //x=1-Far/Near,y=Far/Near,z=x/Far,w=y/Far,该变量用于线性化Z缓存中的深度值
float4 unity_OrthoParams //x=width,y=height,z没有定义,
w=1.0(该摄像机是正交摄像机)或w=0.0(该摄像机是透视摄像机),其中width和height是正交投影摄像机的宽度和高度
float4x4 unity_CameraProjection //该摄像机的投影矩阵
float4x4 unity_CameraInvProjection //该摄像机的投影矩阵的逆矩阵
float4 unity_CameraWorldClipPlanes[6] //该摄像机的6个裁剪平面在世界空间下的等式,按左、右、下、上、近、远裁剪平面
5.内置光照变量
_LightColor0 float4 //该Pass处理的逐像素光源的颜色
_WorldSpaceLightPos0 float4 //_WorldSpaceLightPos0.xyz是该Pass处理的逐像素光源的位置。
如果该光源是平行光,那么_WorldSpaceLightPos0.w是0,其他光源类型是1
_LightMatrix0 float4x4 //从世界空间到光源空间的变换矩阵,可以用于采样cookie和光强衰减纹理
unity_4LightPosX0,unity_4LightPosY0,unity_4LightPosZ0 float4
//仅用于Base Pass,前4个非重要的点光源在世界空间中的位置
unity_4LightAtten() float4 //仅用于Base Pass, 存储了前4个非重要的点光源的衰减因子
unity_LightColor half4[4] //仅用于Base Pass,存储了前4个非重要的点光源的颜色
6.LightMode标签支持的渲染路径设置选项
Always //不管使用哪种渲染路径,该Pass总会被渲染,但是不会计算任何光照
ForwardBase //用于前向渲染,该Pass会计算环境光,最重要的的平行光,逐顶点/SH光源和Lightmaps
ForwardAdd //用于前向渲染,该Pass会计算额外的逐像素光源,每个Pass对应一个光源
Deferred //用于延迟渲染,该Pass会渲染G缓冲(G_buffer)
ShadowCaster //把物体的深度信息渲染到阴影映射纹理或一张深度纹理中
PrepassBase //用于遗留延迟渲染,该Pass会渲染法线和高光反射的指数部分
PrepassFinal //用于遗留延迟渲染,该Pass通过合并纹理、光照、自发光来渲染得到的最后的颜色
Vertex,VertexLMRGBM和VertexLM //用于遗留的顶点照明渲染
7.顶点照明渲染路径中可以使用的内置变量
unity_LightColor half4[8] //光源颜色
unity_LightPosition float4[8] //xyz分量是视角空间中的光源位置,如果光源是平行光,那么z分量值为0,
其他光源类型z分量值为1
unity_LightAtten half4[8] //光源衰减因子,如果光源是聚光灯,
x分量是cos(spotAngle/2),y分量是1/cos(spotAngle/4);
如果是其他光源,x分量是-1,y分量是1,z分量是衰减的平分,w分量是光源范围开根号的结果
unity_SpotDirection float4[8] //如果光源是聚光灯的话,值为视角空间的聚光灯的位置,如果是其他类型的光源,值为(0,0,1,0)
8.顶点照明渲染路径中可以使用的内置函数
float3 ShadeVertexLights(float4 vertex,float normal)
//输入模型空间中的顶点位置和法线,计算四个顶点光源的光照以及环境光
float3 ShadeVertexLightsFull(float4 vertex, float3 normal, int lightCount, bool spotLight)
//输入模型空间中的顶点位置和法线,计算lightCount个光源的光照以及环境光
,如果SpotLight值为true,那么这些光源会被当成聚光灯来处理,虽然结果更精确,
但计算更加耗时,否则,按点光源处理