着色器的性能
有一些因素能影响你的游戏的总体的性能,本章节将会讲述关于内置着色器的性能注意事项。着色器的性能和两件事情直接有关,着色器本身和被项目或者特定摄像机的渲染路径。关于你自定义着色器的性能问题,请查阅ShaderLab Shader Performance。
渲染路径和着色器性能
Unity支持的渲染路径中,延迟光照和顶点关照路径有着可以预测的性能。在延迟光照中,每一个对象同城被描绘两次,不管光线是否影响到它。而在顶点光照中,简单来说,每一个对象通常只被描绘一次。因此,纹理如何被使用和需要的计算量最大程度的影响着色器性能,而产生了性能的差别。
前向渲染路径的着色器性能
在前向(理解为在渲染过程的前期阶段,不必要的计算较多)渲染路径中,着色器的性能取决于着色器自身和场景中的灯光数量有关。接下来的章节将描述这些细节。从两个基本的角度来描述着色器的性能,分别是顶点光照和像素光照。
前向渲染路径中的顶点照明着色器总是比像素着色器要廉价。这些着色器通过基于网格节点一次使用所有光照来计算光照。因此,不管多少光照正照射着物体,它总是只绘制一次。
像素着色器为每一个将被绘制的像素计算最终的光照。因此,物体将被环境光或主要的方向性光照绘制一次,然后为每一个额外的能照射到它的光源再绘制一次。这将是N次渲染通路。N是在照射在物体上的像素光照的最后数量。这增加了CPU的处理负担和发送到显卡的命令苏亮,在显卡处理顶点和绘制像素的处理。像素光照的物体在屏幕上的尺寸也会影响到其绘制的速度。物体越大,绘制越慢。
因此像素照明着色器 带来了性能开销,却开销却带来了一些特殊的效果,阴影,法线贴图,好质量的高光和光线饼干(…),等等。
光照能被强制进入像素模式(重要)或是顶点模式(\不重要\)。任何顶点光源在一个像素光照着色器中会被基于物体的顶点或是整个物体来计算,而不会增加渲染开销或是和像素光照相关的视觉特效。
通常的着色器性能
在内置着色器以外,他们会根据复杂度的增加,依次排列下去。
? ? ? ? ? ? ?
不发光。这只是一个纹理,不被任何光照影响 顶点光照 漫反射
法线贴图,比漫反射更昂贵:增加了一个或更多纹理(法线贴图)和几个着色器结构 高光。这增加了特殊的高光计算 高光法线贴图。这比高光更昂贵一点
视差法线贴图。这增加了视差法线贴图计算
16 / 276
? 视差高光法线贴图。这增加了视差法线贴图和镜面高光计算
额外的,Unity为手机平台准备了几种简单着色器,在\类别下面。这些着色器工作在其他平台也一样工作,因此你能简单的使用它们(例如,近似的高光,非每材质的颜色支持等等),尽可能使用它们。
Normal Shader Family
These shaders are the basic shaders in Unity. They are not specialized in any way and should be suitable for most opaque objects. They are not suitable if you want your object to be transparent, emitting light etc.
Vertex Lit
Assets needed:
? One Base texture, no alpha channel required
Diffuse
Assets needed:
? One Base texture, no alpha channel required
Specular
17 / 276
Assets needed:
? One Base texture with alpha channel for Specular Map
Normal mapped
Assets needed:
? ?
One Base texture, no alpha channel required One Normal map
Normal mapped Specular
Assets needed:
? ?
One Base texture with alpha channel for Specular Map One Normal map
Parallax
Assets needed:
? ? ?
One Base texture, no alpha channel required One Normal map
One Height texture with Parallax Depth in the alpha channel
18 / 276
Parallax Specular
Assets needed:
? ? ?
One Base texture with alpha channel for Specular Map One Normal map
One Height texture with Parallax Depth in the alpha channel
Decal
Assets needed:
? ?
One Base texture, no alpha channel required
One Decal texture with alpha channel for Decal transparency
Diffuse Detail
Assets needed:
? ?
One Base texture, no alpha channel required
One Detail grayscale texture; with 50% gray being neutral color
19 / 276
标准着色器家族
这些着色器都是Unity基本的着色器。适用于大多数的不透明物体,如果想要物体有透明、发光效果等,它们并不适用。
Vertex Lit 顶点光照着色器
资源需要:
? 一个基本纹理,无alpha通道
Diffuse 漫反射着色器
资源需要:
? 一个基本纹理,无alpha通道
Specular 高光着色器
资源需要:
20 / 276