编写着色器时的性能提示

运用常识;)

只计算您需要的内容;任何实际不需要的内容都可清除。例如,支持每个材质颜色以使着色器更加灵活易用固然很好,但如果总是将该颜色设置为白色,那么在屏幕渲染的每个顶点或像素执行的计算都是无用的。

另外需要注意的是计算频率。通常情况下,渲染的像素(像素着色器执行)个数要比渲染的顶点(顶点着色器执行)个数更多;而要渲染的顶点个数比要渲染的对象多。所以,一般来说,尽可能将计算从像素着色器移到顶点着色器,或者从着色器中完全移出,并在脚本中再次赋值。

较少通用的表面着色器

表面着色器非常适于编写与光照相互作用的着色器。但是,其默认选项是为“一般情况”设置的。在许多情况下,您可以对着色器进行调整,使其运行速度更快,或者至少使其更小:

计算精度

使用 Cg/HLSL 写着色器时,主要有三种基本的数字类型:floathalffixed (以及由它们的向量和矩阵变量,如 half3 和 float4x4):

尽可能使用最低的精度,这对像 iOS 和 Android 一样的移动平台尤为重要。较好的经验法则是:

在移动平台上,关键是尽可能确保在片段着色器中保持较低精度。在大多数移动 GPU 上,在低精度 (fixed/lowp) 类型上应用拌合花费较高;同时,在 fixed/lowp 和高精度类型之间进行转换也是相当昂贵的。

Alpha 测试

固定函数 AlphaTest 或与其等同的可编程函数 clip() 在不同的平台上拥有不同的性能特点:

颜色遮蔽图

在某些平台(主要为 iOS 和 Android 设备上找到的移动 GPU)上,使用 ColorMask 删除某些通道(如 ColorMask RGB) )会比较昂贵,因此,请在真正必要时才使用。

Page last updated: 2013-06-25