函数
//将顶点位置从模型空间转换到剪裁空间
float4 UnityObjectToClipPos(float4 v)
//输入一个模型空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向
float3 WorldSpaceViewDir(float4 v)
//输入一个模型空间中的顶点位置,返回模型空间中从该点到摄像机的观察方向
float3 ObjSpaceViewDir(float4 v)
//仅用于前向渲染中(ForwardBase),输入一个模型空间中的顶点位置,返回世界空间中从该点到光源的光照方向,没有被归一化
float3 WorldSpaceLightDir(float4 v)
//仅可用于前向渲染中,输入一个世界空间的顶点位置,返回世界空间从该点到光源的方向,没有被归一化
float3 UnityWorldSpaceLightDir(float4 v)
//仅可用于前向渲染中,输入一个世界空间的顶点位置,返回世界空间从该点到摄像机的方向,没有被归一化
float3 UnityWorldSpaceViewDir(float4 v)
//仅用于前向渲染中(ForwardBase),输入一个模型空间中的顶点位置,返回模型空间中从该点到光源的光照方向,没有被归一化
float3 ObjSpaceLightDir(float4 v)
//把法线从模型空间转换到世界空间中
float3 UnityObjectToWorldNormal(float3 norm)
//把方向矢量从模型空间转换到世界空间中
float3 UnityObjectToWorldDir(in float3 dir)
//把方向矢量从世界空间转换到模型空间中
float3 UnityWorldToObjectDir(float3 dir)
//仅可用于前向渲染中,计算四个点光源的光照,它的参数是已经打包进矢量的光照数据。前向渲染通常会使用这个函数来计算逐顶点光照
float3 Shade4PointLights(...)
//传入一个从切线空间下的法线贴图读取的fixed3颜色值,得到法线
float3 UnpackNormal()
语义 tips:如果用于应付用户自定义的变量,语义可以同时出现于顶点函数的结构体参数和片源函数的结构体参数中,比如a2v和v2f都可以同时出现COLOR0
//模型空间中的顶点位置,通常是float4类型,因为第四位要用来做变换运算
POSITION
//顶点法线,通常是float3类型
NORMAL
//顶点切线,通常是float4类型
TANGENT
//该顶点的纹理坐标,TEXCOORD0表示第一组纹理坐标,一般有七套纹理坐标。通常是float2或float4类型 一些在同个shader用不到的语义也可以用来放用户自己需要的临时数据,比如shader处理里面系统用到的只有TEXCOORD0 则后面的可以用来给用户数据作为临时语义
TEXCOORD0~TEXCOORD7
//输出第一组顶点颜色,通常是fixed4或float4类型 COLOR0相当于COLOR,同一个shader文件里面同时使用这两个变量会报错,同上,用不到的语义也可以用来作为用户数据的临时语义
COLOR0
//裁剪空间中的顶点坐标,如果传给片元函数的是结构体, 结构体中必须包含一个带有这个语义的变量,如果是单个变量参数则这个参数就必须是用这个语义修饰,一般给系统调用,在shader里面用不到
SV_POSITION
// 这里的值一般仅用于片元函数的返回值 将会存储到渲染目标(render target)中
SV_Target
变量
//环境光变量 在window->rendering->light setting里面的环境光设置可以影响到这个变量提供的值
UNITY_LIGHTMODEL_AMBIENT
//当前的模型*观察矩阵,用于将顶点/方向矢量从模型空间转换到观察空间
UNITY_MATRIX_MV
//当前的观察矩阵,用于将顶点/方向矢量从世界空间转换到观察空间
UNITY_MATRIX_V
//当前的投影矩阵,用于将顶点/方向矢量从观察空间转换到裁剪空间
UNITY_MATRIX_P
//当前的观察*投影矩阵,用于将顶点/方向矢量从世界空间转换到裁剪空间
UNITY_MATRIX_VP
//UNITY_MATRIX_MV的转置矩阵
UNITY_MATRIX_T_MV
//UNITY_MATRIX_MV的逆转置矩阵,用于将发现从模型空间转换到观察空间,也可以用于得到UNITY_MATRIX_MV的逆矩阵
UNITY_MATRIX_IT_MV
//作为mul的第一个参数 用于将顶点/方向矢量从模型空间变换到世界空间 作为第二个参数则得到相反的结果 注意不对于模型物体的尺寸的xyz不是1:1:1的物体不能直接用这个变量来达到法线从本地坐标系转到世界坐标系
unity_ObjectToWorld
//作为mul的第一个参数 用于将顶点/方向矢量从世界空间转换到模型空间 作为第二个参数则得到相反的结果 注意对于模型物体的尺寸的xyz不是1:1:1的物体不能直接用这个变量来达到法线从世界坐标系转到本地坐标系
unity_WorldToObject
参数
float3 _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个裁剪平面在世界空间下的等式,按左、右、下、上、近、远裁剪平面
float4 _LightColor0 //第一个直射光 可以去使用.rgb取得其颜色