【Unity】Shader优化

来源:互联网 发布:用c语言编写科学计算器 编辑:程序博客网 时间:2024/04/29 02:23

Shader可优化的几个方面:

》优化变量类型;half 放UV值和颜色值,fixed用于光照计算、颜色、单位向量等;

  • float — 完整的 32 位浮点格式,适合用于顶点变换,但性能最慢。
  • half — 简化的 16 位浮点格式,适用于纹理 UV 坐标,颜色值等。比 float 大约快两倍。
  • fixed — 10位定点格式,适合光照计算、颜色和其它高性能操作,速度大约比 float 快 4 倍

》充分利用内置光照模型;

》共享UV,使用了Main Texture的UV坐标来代替法线贴图的UV坐标;

》开启特定的某些渲染工作,让Shader只工作在特定的渲染器上;


》减少处理的光源个数

               把其他所有光源当成了顶点光源,而在计算像素颜色时只计算一个主平行光作为像素光源。

》使用近似值代替精确值;

》减少或压缩贴图;


移动平台的Shader优化

一,排除延迟渲染的pass(通道)。

二,不支持unity自带的贴图系统提供的光照贴图;

三,添加noforwardadd,只对一个方向光进行逐像素文理运算,其他所有灯光都被强制转换成逐顶点的光照;

四,使用半角向量(half vector)作为视线方向并用于高光计算,因为半角向量是基于逐顶点计算的;



1.复杂的数学函数(如 powexplogcossintan 等等)会大大增加 GPU 负担,所以一个好的经验法则是,此类运算在每个像素中不得超过一个。考虑在合适时使用查找纹理作为替代选择。

2.alpha 测试运算会让片段速度变慢。(on PowerVR GPUs found in iOS and some Android devices)

3.编写自定义的着色器时,应始终指定浮点变量精度。为获得最佳性能,挑选精度尽可能小的浮点格式至关重要。很多台式机 GPU 均完全忽略运算精确,但是它对于大量移动 GPU 的性能具有重大影响。

4.大部分shader都有_Color属性,但如果你并没有使用,那么就应该去掉,避免无谓的计算。

5.通用的表面着色器虽然通用,但性能其实并不好。因为我们没有光照,所以我建议采用顶点着色器和片段着色器。




参考:unity3d移动平台性能优化专题(8):shader优化

【Unity Shaders】Mobile Shader Adjustment—— 什么是高效的Shader

【Unity Shaders】Mobile Shader Adjustment —— 为手机定制Shader

0 0
原创粉丝点击