Unity实验室之Shader优化

前言

最近有人问到写Shader需要注意哪些地方及如何优化,正好笔者也在研究这方面,这里主要针对Unity来说,其它平台或引擎也可以参考,本文主要分如下几个方面来说:Shader的选择属性和状态的设置数据类型选择代码编写举例调试

Unity中Shader的选择

Unity中现在可以新建4种Shader,分别是Standard Surface Shader,Unlit Shader,Image Effect Shader,Compute Shader.
- Standard Surface Shader: 主要用于光照,Unity封装好了许多光照模型,如果项目中需要比较多的光照,可以选用这个类型的Shader
- Unlit Shader:就是普通的Vertex&Fragment Shader,可以用CG语言来写,这种Shader封装的比较少,效果,光照都要自己码代码。
- Image Effect Shader:主要用于后期处理,和Unlit Shader一样,唯一有点区别的是,关闭了Cull,ZWrite,打开了ZTest。
- Compute Shader:这个主要是GPU计算,这个不太熟悉,也就不探讨这个了。

笔记的建议是尽量用Unlit Shader来写,一方面封装的少,可以更深入了解底层,一方面可以自己动手实现任何想要的效果。也没有引入好多光照方面的变量,效率上会比Surface Shader高
如果想省时间,又不想了解光照具体实现的,Surface Shader可以帮你快速实现效果。

属性和状态的设置

  • 大部分shader都有_Color属性,但如果你并没有使用,那么就应该去掉,避免无谓的计算,其它的自动生成的属性或无用的属性也都应该去掉。
  • Alpha Test,Cull,Zwrite,ZTest等能关的都关掉,需要时再打开。
  • 排除延迟渲染的pass(通道)
  • 关闭渲染附加通道&#x

你可能感兴趣的:(Unity3D,unity,shader优化)