前言
最近有人问到写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可以帮你快速实现效果。
属性和状态的设置
- 大部分

本文探讨了Unity Shader的优化方法,包括选择Unlit Shader以提高效率,优化属性设置,合理选取数据类型,避免无用计算,以及使用向量计算和内置函数提高性能。通过实例展示了如何用step函数替换条件判断,利用swizzle优化代码,并提到了使用Unity自带的性能分析器和glsl-optimizer工具进行调试和优化。
最低0.47元/天 解锁文章
2172

被折叠的 条评论
为什么被折叠?



