Unity3D shader优化技巧集合

请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com

一些优化的tips,基于2019.3版本

  1. 只做需要的计算,比如一直在shader设置某个固定颜色,就等于白做计算
  2. 能给vs做的,就不要给fs做,能在脚本设置的,就不要在shader里做,比如在shader代码里面用 if-else ,就不如在脚本中用 keyword
  3. 优化surface shader:启用 approxview 编译指示符,在光照计算时,在vs中而不是在fs中做视线向量的规格化
  4. 优化surface shader:启用 halfasview 编译指示符,在光照计算时,使用半角向量做光照计算,且半角向量的计算在vs中执行
  5. 优化surface shader:启用 noforwardadd 编译指示符,确保在 Forward rendering 模式中, 只使用一个有向平行光光源 在fs中执行光照计算,其他的实时光源都只在vs中进行计算,此指示符确保只在一个pass中执行渲染操作
  6. 优化surface shader:编译指令 noambient 禁用着色器上的环境照明和球谐光。这样可以使性能稍快一些。
  7. 数据精度的优化:世界坐标系下的坐标值,纹理映射坐标值,用 float
  8. 数据精度的优化:除了HDR颜色之外的数据,使用 half
  9. 数据精度的优化:纹理数据的相关的一些简单操作用 fixed
  10. 各种GPU的区别: 桌面GPU ,内部都会统一用 float 计算
  11. 各种GPU的区别: 移动GPU 内部能真正支持half精度,大胆地使用它
  12. 各种GPU的区别: 老旧的GPU 才内部实现了 fixedOpenGL ES3 及后续的都内部把 fixed 处理为 half
  13. Alpha Testing :在iOS等等使用了PowerVR芯片的平台,表现不佳。
  14. ColorMask :在某些平台上(大多数是在iOS和Android设备的移动GPU),使用 ColorMask 忽略某些通道(例如 ColorMask RGB )可能会占用大量资源,因此仅在确实需要时才使用它。

参考网页:

https://docs.unity3d.com/Manual/SL-ShaderPerformance.html

https://www.cnblogs.com/sifenkesi/p/4716791.html