[Unity] Unity编码规范

查看:744 |回复:7 | 2017-10-27 14:31:03

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 成林 于 2018-5-16 21:07 编辑

4.jpg

最近,使用U3D开发的游戏核心部分功能即将完成,中间由于各种历史原因,导致项目存在比较大的问题,这些问题在最后,恐怕只能通过一次彻底的重构来解决现在的游戏跑起来会有接近130-170个左右的DrawCall,游戏运行起来明显感觉到卡,而经过一天的优化,DrawCall成功缩减到30-70个,这个效果是非常显著的,并且这个优化并没有通过将现有的资源打包图集来实现,图集都是原有的图集,如果从全局的角度对图集再进行一次优化,那么DrawCall还可以再减少十几个
本次优化的重点包括:层级关系和特效
对于U3D,我是一个菜鸟,对于U3D的一些东西是一知半解,例如DrawCall,我得到的是一些并不完全正确的信息,例如将N个纹理打包成一个图集,这个图集就只会产生一个DrawCall,如果不打成图集,那么就会有N个DrawCall,这个观点在很多人的认识里都是正确的,因为可以通过简单的操作来验证,但严格来说,这个观点是错误的,因为它还受层级关系影响!
【一】渲染顺序
U3D的渲染是有顺序的,U3D的渲染顺序是由我们控制的,控制好U3D的渲染顺序,你才能控制好DrawCall
一个DrawCall,表示U3D使用这个材质/纹理,来进行一次渲染,那么这次渲染假设有3个对象,那么当3个对象都使用这一个材质/纹理的时候,就会产生一次DrawCall,可以理解为一次将纹理输送到屏幕上的过程,(实际上引擎大多会使用如双缓冲,缓存这类的手段来优化这个过程,但在这里我们只需要这样子认识就可以了),假设3个对象使用不同的材质/纹理,那么无疑会产生3个DrawCall
接下来我们的3个对象使用2个材质,A和B使用材质1,C使用材质2,这时候来看,应该是有2个DrawCall,或者3个DrawCall。应该是2个DrawCall啊,为什么会有3个DrawCall???而且是有时候2个,有时候3个。我们按照上面的DrawCall分析流程来分析一下:
1.渲染A,使用材质1
2.渲染B,使用材质1
3.渲染C,使用材质2
在这种情况下是2个DrawCall,在下面这种情况下,则是3个DrawCall
1.渲染A,使用材质1
2.渲染C,使用材质2
3.渲染B,使用材质1

评分

参与人数 2活跃度 +15 展开 理由
雾切酱 + 3 看到一半怎么没了呢...
那肯 + 12 阅贴无数,楼主最强!

查看全部评分

2017-10-27 14:31:03  
 赞 赞 0

使用道具 登录

7个回答,把该问题分享到群,邀请大神一起回答。
2#
额...最后一个点的意思是,在连续渲染的过程中, 渲染同一个材质只有一个 DrawCall,要是中间断开渲染了其他的材质再跑回去渲染前面的材质就又会重新渲染(多一个DrawCall)的意思是吧
回复 收起回复
2017-10-30 08:47:14   回复
 赞 赞 0

使用道具 登录

3#
额 楼主是没发完吗  编码规范 。。。怎么扯到 drawcall上啦。。。 额 那就看drawcall吧 可刚说了一个开头 怎么又截然而止了呢? - -。困惑了
回复 收起回复
2017-10-30 19:09:04   回复
 赞 赞 0

使用道具 登录

4#
不错
回复 收起回复
2018-3-16 09:55:43   回复
 赞 赞 0

使用道具 登录

5#
感谢楼主分享
回复 收起回复
2019-3-1 13:33:07   回复
 赞 赞 0

使用道具 登录

6#
感谢楼主分享
回复 收起回复
2019-3-1 13:33:09   回复
 赞 赞 0

使用道具 登录

7#
不错
回复 收起回复
2019-3-5 10:19:18   回复
 赞 赞 0

使用道具 登录

8#
谢谢谢谢
回复 收起回复
2019-3-21 10:54:27   回复
 赞 赞 0

使用道具 登录

CG 游戏行业专业问题

Unity3D技术手机游戏引擎手游引擎
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表