这段时间作unity3d的优化,主要的入手是减小draw call。
一、代码上主要是把一些零碎的同材质的合并成一个大的mesh。
二、减小没必要要的全屏后期处理。把摄像机的rendering path,由deferred修改成forward。这样修改的缘由是,咱们场景中只是使用了一个灯光,延迟渲染并无颇有发挥其优点,另外使用向前渲染的话,引擎的动态合并会有很好的做用。
通过上面两部分的操做,draw call 减小的很是多,而且游戏在目标平台上也能流畅的运行。可是发现一个很是明显的问题: 在两个物体牢牢挨着的边缘会明显的有裂痕在闪烁,好比一个赛段拼接另外一个赛段的链接处。
一开始觉得是depth buffer 的精度问题致使的 depth fighting。因此调整了摄像机的near clip,但也仍是会出现,只是调整near clip也有限制,不然会影响游戏,在调整near clip和把抗锯齿anti aliasing设置调整4* 或8* 裂缝的闪现会没那么明显,可是一样存在。想使用w buffer 来代替depth buffer来试下,可是无奈不清楚unity怎么处理,(当时想,若是最后没办法就程序把链接的网格本身合并,这样就不会出现裂缝了)因此先停下作其余的了。后来想到以前这种裂缝现象怎么没注意到呢,至少是不明显的。因此以为会不会是rendering path,不一样致使的呢。
分别build两个程序,使用不一样的rendering path。确实是使用延迟渲染的不会有裂缝闪现的现象,而向前渲染会有,这真是令人摸不着头脑呀,两种不一样的渲染方式 怎么会出现这样的状况呢?仍是不相信是因为不一样的渲染方式致使的,继续找缘由,发现两个有裂缝闪现的mesh,是用的相同材质,想到会不会是动态批处理的缘由呢?
使用向前渲染时在play setting中去掉Dynamic batching 裂缝闪烁的现象就不会出现了,最终肯定是引擎提供的动态批处理致使的问题。那为何用延迟渲染时没呢,那是由于用延迟渲染的话,引擎对动态批处理颇有限,(你在4.x版本的unity上,每添加一个cube,就要增长两个draw call,而向前渲染的话,会帮你动态批处理,并不会每一个cube都增长draw call)。
知道问题所在,修改也比较容易了,可是为何其Dynamic batching 会致使裂缝闪烁,这个问题仍是有待研究,可是unity内部是如何实现的不知道。但愿了解这方面的人能指点一二!优化