文章目录
1.函数2.语义3.变量4.摄像机和屏幕参数5.内置光照变量6.LightMode标签支持的渲染路径设置选项7.顶点照明渲染路径中可以使用的内置变量8.顶点照明渲染路径中可以使用的内置函数
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,那么这些光源会被当成聚光灯来处理,虽然结果更精确,
但计算更加耗时,否则,按点光源处理