Unity优化大全(五)之 GPU-动态阴影和Shader
发表于2017-12-22
前段时间总结了下CPU方面的优化,现在来谈谈同样重要的优化部分GPU,其主要会包括以下方面,之后会不断完善。在这里你要知道一点,GPU是负责分辨率的!
. 动态阴影
. 复杂的Shader
. 几何体的复杂度
. GPU的显存带宽
. 光照Light
. . . . .
进入主题
上面只是给出了GPU一些方重要的面的优化,之后还会不断对其进行补充。首先我们讲下动态阴影!
动态阴影:
首先我么你来看下灯光,我用的Unity版本4.6.0,虽然下了5.0.1和5.1.2版本,但是没去书经常用,原因呢?因为4.6.0的功能都没熟悉,就算新版本对旧版本的许多功能进行了优化,但是你不去了解他之前的不足,也就不会不能更好的明白他改进后的优点,个人理解而已。这里说说四种灯光:平行光,点光源,聚光灯,还有就是区域光!他们具体的光照原理和用法我在这里就不详细解释了,Unity圣典讲的满详细的!
这里只有平行光才会产生阴影,但是设置摄像机的Rendering Path为Vertex Lit顶点光照时,不会产生阴影,同时这里产生的阴影是动态阴影,但是太耗性能了,不建议使用。可以使用LightMapping去烘培场景,在这里要提醒下,当你LightMapping Realing Only时,阴影烘培失败!而且这里烘培的阴影也不是实时的!在这里有几种方法,如下:
1.RenderTexture
2.简单贴图法
3.投影生成法
4.Shadow Map法
详细的做法请看链接地址:http://bbs.9ria.com/thread-188129-1-1.html 和http://www.xuanyusong.com/archives/2132
在新版本5.0中提供了实时的全区光照,学习它时建议大家最好自己动手去体验下!
Shader:
Shader在这里也许大家都熟悉,但是可能没怎学他,我也知道它蛮难学,但是笔者还在坚持的学!然而学了几个星期依然是个十足的渣渣,现在就简单谈谈Shader方面的优化吧,因为所学有限,大家有什么好的优化方案可以在下面留言哦,谢谢了吐舌头。
1.建议尽量实用Unity自带mobile版本的(built-in)Shader,这些大大提高了顶点处理的性能。当然也会有一些限制。
2.自己写的shader请注意复杂操作符计算,类似pow,exp,log,cos,sin,tan等都是很耗时的计算,最多只用一次在每个像素点的计算,还有有些除法运算尽量该能乘法运算等,不推荐你自己写normalize,dot,inversesqart操作符,因为内置的肯定比你写的好。
3.避免透明度测试着色器,因为这个非常耗时,使用透明度混合的版本来代替,。
4.浮点类型运算:精度越低的浮点计算越快。
5.不要在Shader中添加不必要的Pass.
6.在移动设备上,你应该对充填率绑定(充填率=屏幕像素*着色器复杂度*透支)很敏感,而且过度复杂的着色器是最常见的引发问题的起因。因此,请使用Unity自带的移动平台着色器或者设计你自己的着色器但是使它们尽可能简单。如果可能,为了简化你的像素着色器,把代码移动到顶点着色器中。
......
在CG/HLSL中--
float :32位浮点格式,适合顶点变换运算,但比较慢。
half:16位浮点格式,适合贴图和UV坐标计算,是highp类型计算的两倍。
fixed: 10位浮点格式,适合颜色,光照,和其他。是highp格式计算的四倍。
来自:http://blog.csdn.net/m0_37283423/article/details/72639286