Unity 3D优化三个的注意方面

unity优化是一个很大的概念,我们优化时需要注意三个方面:cpu优化,gpu优化,内存优化。
cpu方面的优化:
(1) 减少drawcall.
(2) 物理组件(physics)。
(3) 减少gc(垃圾回收)次数。
(4) 脚本的代码质量。
一、对drawcall的优化
1、什么是drawcall ?
答:draw call就是cpu调用图形编程接口,比如directx或opengl,来命令gpu进行渲染的操作。
2、 如何减少drawcall ?
答: 思路就是每个物体尽量减少渲染次数,多个物体最好一起渲染。所以有三个方案:
(1)使用批处理,unity在运行时将物体合并一次渲染。这里分为动态批处理和静态批处理。
(2)通过把文理打包成图集尽量减少材质的使用。
(3)尽量减少反光,阴影之类的效果,因为那会使物体多次渲染。
静态批处理就是将没有生命的不同物体设置为static。
动态批处理是引擎自动进行的,例如动态实例化prefab(预制体)如果动态物体共享相同的材质,引擎会自动批处理。动态批处理有很大限制,网格物体顶点数不能超过900。
二、对物理组件的优化
1、设置一个合适的fixedtimestep。
2、尽量不要使用网格碰撞器,占用cpu计算。
三、处理gc的优化
虽然gc是用来处理内存的,但是的确会增加对cpu的开销,因此对于gc的优化目标就是尽量减少gc的触发。
gc是何时触发的?
1、堆的内存不足时,自动调用gc。
2、编程人员手动调用gc。
gc的优化说白了就是代码的优化,主要注意一下5点:
(1)字符串连接的处理。。
(2)尽量不要使用foreach,减少迭代器产生。
(3)不要直接访问gameobject的tag属性。换成“if(obj.comparetag(”player“))”
(4)使用对象池,以实现空间的重复利用。
(5)不要使用linq。
四、对代码质量的优化
(1)transfrom组件获取一次就保留引用,而不是每次都获取。
(2)不用频繁的getcomponent
(3)使用内建数组,如vector3.zero而不是new vector(0,0,0)。
(4)对方法的参数优化,善于使用ref关键字。
gpu方面的优化:
gpu瓶颈:
(1)填充率,可以简单理解为图形处理单元每秒渲染的像素数量
(2)像素的复杂度,比如动态阴影、光照、复杂的shader等
(3)几何体的复杂度(顶点数量)
(4)gpu的显存带宽
影响gpu性能的无非就两大方面,一方面顶点数量过多,像素计算过于复杂;另一方面就是gpu的显存带宽。
优化方法:
① 减少顶点数量,简化计算复杂度。
② 压缩图片,以适应显存带宽。
一、减少顶点数量,简化计算复杂度
(1)保持材质的数目尽可能少,更容易批处理。
(2)使用纹理图集,代替小贴图。
(3)如果使用了纹理图集和共享材质,使用renderer.sharedmaterial来代替renderer.material。
(4)使用光照贴图(lightmap)而非实时灯光。
(5)使用lod(多层次细节),好处就是那些离得远看不清的细节可以忽略。
(6)遮挡剔除
(7)使用mobile版的shader,因为简单。
二、压缩图片,减小显存带宽压力
(1)opengl es2.0使用etc1格式压缩等,在打包设置里有。
(2)使用mipmap,小图集
内存方面的优化:
(1)unity3d的内部内存
(2)mono的托管内存
(3)若干自己引入或第三方dll所需的内存(非重点)

内网安全的六大弊病
什么是石英晶体振荡器_石英晶体振荡器频率受外界环境的影响
彩电是弯的好还是直的好?
斯坦福携手MIT发布巨大量级X光胸片数据集
rs232串口通信原理
Unity 3D优化三个的注意方面
韵达利用Cloud Pak for Security构建行业领先的企业级安全体系
差分放大器的原理,和差分放大器的应用
阿里云饿了么联合研发ET人工智能
变频挂机内风机堵转是怎么回事
万众期待的代码解释器上线了!
超实用的汽车电路接线10条规律
禾多科技积极推动自动驾驶大规模量产落地
iPhone7Plus拆解发现增加两个立体扬声器 iPhone7美版用Intel基带
中国人工智能大赛完美收官
功放芯片知识介绍
华为路由BE3Pro发布 引领WI-Fi7新时代
带你了解散热器的种类及选择
兆易创新2020年MCU出货量近2亿颗
首颗国产车规级AI芯片即将量产 国产汽车芯片即将迎来一大突破