本页面介绍了关于优化着色器以提高运行时性能的信息,尤其针对 GPU 性能有限的移动平台。
要避免复杂的计算,请执行以下操作,例如:
pow、log 和 sin。normalize 和 dot,而不是编写自己的函数。这可以确保驱动程序生成更好的代码。要避免着色器重复计算,请执行以下操作,例如:
对除世界空间坐标和纹理坐标之外的所有变量使用 half 而不是 float。详情请参阅在着色器中使用 16 位精度。
Unity 不支持后缀,因此 2.0h 之类的值将成为完整的 float。这意味着当 GPU 进行计算时,可能需要将其他值来回转换为 float。这可能会减慢着色器的速度。
要防止这种情况,请使用类型转换 (Cast) 而不是后缀。例如,使用 half(2.0) 而不是 2.0h。
要避免着色器变慢,请避免以下资源密集型方法:
discard 方法。为确保移动端 GPU 可以使用早期深度测试来加快渲染速度,请勿在片元着色器中的深度缓冲区进行写入。
如需详细了解深度测试,请参阅 ShaderLab 命令:ZTest。