您的位置:首页 > 移动开发 > Unity3D

Unity3D项目优化文档

2017-06-22 17:59 253 查看

Unity3D项目优化文档

@ (优化点)[CUP方面 |GPU方面 |内存方面]

Unity3D项目优化文档
一CPU方面的优化

DrawCalls

物理组件

其他程序功能

二GPU方面的优化

优化方案

三内存方面的优化

一.CPU方面的优化:

优化以下因素来提升CUP的速率:

@(优化点)[DrawCalls |物理组件 ]

DrawCalls :

什么是DrawCalls?

DrawCalls就是对底层图形程序接口的调用。而去调用这个接口的就是CUP。比如有上千个物体,每一个物体都需要去调用一次底层接口,而每一次调用,CPU都要进行很多的计算工作,那么CPU必然会很消耗。但对于GPU来说,图形渲染处理的工作的都是一样的。

优化方案

尽量解放CPU在调用图形接口上的开销,可以使用以下方法优化:

使用Draw Call Batching(即是:“批处理绘制”,被批处理的2个或者以上物体的网格模型需要使用相同的材质),也就是描绘调用批处理。这样U3D在运行的时候可以将一些物体进行合并处理,从而只调用一次图形绘制接口。(其中Draw Call Batching 主要细分为:Static Batching(静态批处理)和Dynamic Batching两种)

通过把纹理打包成图集来减少材质的使用。

尽量减少使用反光,阴影。因为他会使物体进行多刺的渲染。

尽量多的使用预制件(Prefab)。可以极大的优化DrawCals的调用次数。

物理组件 :

优化方案

物理组件,是游戏中模拟计算物理效果的组件。那么物理计算的频率越高,CUP的计算量也就相应的增大。所以把Fixed Timestep调节到合适值会优化物理的运算。

再这就是尽量不要使用网格碰撞器。因为网格碰撞器利用网格资源并在其上构建碰撞检测。所有他的计算量将会很大。

其他(程序功能) :

尽量少使用Foreach,而使用for。

不要直接访问gameobject的tag属性。最好换做CompareTag。因为访问Tag属性会在堆上额外的分配空间。

尽量使用“池”,以实现空间的重复利用。

尽量不要使用LINQ命令。

二.GPU方面的优化:

优化以下因素来提升GUP的速率:

@(优化点)[顶点数量|压缩图片 ]

优化方案:

减少模型的顶点数量(即相应的模型面数,复杂程度)。据了此次测试统计结果,尽量保持是250万面左右最佳。

保持材质的数目尽可能的少。使得Uinty更容易的进行批处理。

使用
4000
纹理图集(一张大图里面包含了很多的字贴图)来代替一系列单独的小贴图。

使用光照纹理而不是非实时灯光。

使用LOD,好处就是离的远,看不清的物体的细节可以忽略。

遮挡剔除(多使用Occlusion culling)

尽量使用mobile 版的shader。因为简单。

使用mipmap。(和LOD类似)

对于模型需求不是很精细的物体,尽量使用曲线细分的功能。

三.内存方面的优化:

优化以下因素来提升GUP的速率:

@(优化点)[Unity3D内部的内存|各种资源|逻辑 ]

通常情况下,Unity游戏引擎的内存中大概需要存储的有:

资源:纹理,网格,音频,动画。

GameObject和各种组件。

引擎内部逻辑需要的内存:渲染器,物理系统,粒子系统等等。

针对以上几点的优化方案有:

处理纹理 :

除非真正需要,否则不要创建面向纹理 的 Mipmap

使用压缩纹理

除非需要,否则不要将纹理设置为可读 状态(CPU 读/写)。 这样可避免额外的 CPU 副本,标记等。

根据屏幕分辨率缩小纹理

动画:删除动画中的冗余关键帧。

网格模型 :

删除网格中的不常用通道(在“Player”设置下方,启用 “Optimized Mesh Data”)。

减少不必要的多余节点,面数,以及碰撞体。

一个整体模型的面数尽量控制在250万。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: