查看: 1053|回复: 0
打印 上一主题 下一主题

[其他] Unity3D 性能优化

[复制链接]
may    

8830

主题

81

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52336
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2016-2-28 00:32:44 |只看该作者 |倒序浏览
性能优化一直一来都想发表一篇属于自己的文章,最近在整理unity相关的技术文档,于是针对目前项目的优化问题查阅了很久前找的资料,针对之前的资料做出新的整理,这里参考了部分大神总结的优化解决方案,但是由于之前都是复制的文本,因此也找不到连接了,在此深表感谢,别怪我盗贴啊,废话不多说,开始正题。

Unity性能优化

本文主要从三个方面进行说明:CPUGPU、和内存
一、CPU的方面的优化:
CPU优化方向:
1、DrawCalls
2、物理组件(Physics)
3、GC(GC为处理内存,此项为CPU使用GC处理内存时产生的性能损耗)
4、程序代码

Drawcalls:
Drawcall是啥?其实就是对底层图形程序(比如:OpenGL ES)接口的调用,以在屏幕上画出东西
如何优化:
1)使用Draw Call Batching,也就是描绘调用批处理。Unity在运行时可以将一些物体进行合并,从而用一个描绘调用来渲染他们。
静态批处理Static Batching,只要是静态不动的物体且具有相同材质的话就可以使用静态批处理来降低描绘调用(注:shader不同则会增加纹理的拼合降低渲染效率)
动态批处理Dynamic Batching:动态批处理是引擎自动进行,无需设置,当物体共享相同的材质,则引擎就会自动对Drawcall进行优化,也就是动态批处理(如实例化预制件)。动态批处理存在约束,稍有不慎就会增加Drawcall
动态批处理的约束:
1、批处理动态物体需要在每个顶点上进行一定的开销,所以动态批处理仅支持小于900顶点的网格物体。
2、如果你的着色器使用顶点位置,法线和UV值三种属性,那么你只能批处理300顶点以下的物体;如果你的着色器需要使用顶点位置,法线,UV0,UV1和切向量,那你只能批处理180顶点以下的物体。
3、不要使用缩放。分别拥有缩放大小(1,1,1) 和(2,2,2)的两个物体将不会进行批处理。
4、统一缩放的物体不会与非统一缩放的物体进行批处理。
5、使用缩放尺度(1,1,1) 和 (1,2,1)的两个物体将不会进行批处理,但是使用缩放尺度(1,2,1) 和(1,3,1)的两个物体将可以进行批处理。
6、使用不同材质的实例化物体(instance)将会导致批处理失败。
7、拥有lightmap的物体含有额外(隐藏)的材质属性,比如:lightmap的偏移和缩放系数等。所以,拥有lightmap的物体将不会进行批处理(除非他们指向lightmap的同一部分)。
8、多通道的shader会妨碍批处理操作。比如,几乎unity中所有的着色器在前向渲染中都支持多个光源,并为它们有效地开辟多个通道。
9、预设体的实例会自动地使用相同的网格模型和材质。
所以尽量使用静态批处理。
2)NGUI和UGUI需将同一界面的UI元素打包图集。


分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-30 23:55 , Processed in 0.090918 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部