顶点渲染路径
一、顶点照明渲染路径处理光照的方式
顶点照明渲染路径仅仅只是前向渲染路径的一个子集 所有在顶点照明渲染路径中能实现的效果在前向渲染中都能实现
它对硬件的要求最低,运算性能最高,但是效果最差 不支持那些逐像素才能实现的效果,比如阴影、法线纹理、高精度高光反射等
基本思想: 所有的光都按照逐顶点的方式进行运算 在内置的渲染管线中,它最多只会记录 8 个光源数据,会根据光源类型、强度、距离等因素来决定
注意:
- Unity 中的顶点照明选好人路径只会将光相关的数据填充到那些逐顶点相关的内置光源变量中 即:不能像前向渲染路径中那样使用逐像素相关的内置变量
- 顶点照明渲染路径使用场景较少,我们目前主要做了解即可
二、顶点照明渲染路径在哪里进行光照计算
要进行光照计算,肯定是 Shader 中的 Pass 中进行 顶点照明渲染路径通常是在一个 Pass 中就可以完成对物体的渲染
渲染路径为顶点照明时,光照模式要设置为 Vertex Tags{"LightMode" = "Vertex"}
这个 Pass 当中会计算我们关心的所有光源对该物体的影响 并且会按照逐顶点的方式一次性对所有光源去进行计算 因此它是内置渲染管线当中最快速的渲染路径,并且具有最广泛的硬件支持,只是渲染效果最差
三、顶点照明渲染路径的内置光照变量和函数
1.常见的内置光照变量
| 变量名 | 类型 | 描述 |
|---|---|---|
| unity_LightColor | half4[8] | 光源的颜色,最多 8 个 光源小于 8 个时,数组多出来的颜色默认是黑色 |
| unity_LightPosition | half4[8] | xyz 是视角空间中光源的位置 w 代表光源类型,平行光为 0,其他光源类型为 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) |
2.常见的内置函数
| 变量名 | 返回值类型 | 描述 |
|---|---|---|
| ShaderVertexLights(float4 vertex,float3 normal) | float3 | 输入模型空间中的顶点和法线,计算四个逐顶点光源以及环境光 |
| ShaderVertexLightsFull(float4 v,float3 normal,int lightCount,bool spotLight) | float3 | 输入模型空间中顶点位置和法线,计算 lightCount 个光源的光源以及环境光 如果 spotLight 为 true,那么这些光源会被当做聚光灯来处理(结果更精准,但是更耗时);否者为点光源 |