- 对所有需要的组件进行缓存。因为调用例如 transform, renderer之类的组件。内部会调用getComponent。效率非常低。缓存外部GameObject。道理相同。find很慢。gameObject 则不用。哪里访问都一样。
- 用缓存池,而不是永远都初始化新的。因为内存越大,GC要扫描(从而发现无引用的对象)的越多。
- 共用material。因为batching机制会把材质相同的对象合并为一个drawCall。像2D用atlas。
- 尽量不用灯光,而用烘焙贴图。
- 减少面、减少UV mapping接缝和硬边(hard edge)。建模软件通常显示几何顶点数,而在U3D中,如果某些点拥有多个法线(on a ”hard edge"),或者多个UV坐标、顶点颜色。则要被分成多个顶点。所以U3D中的顶点数会与建模软件中的不同。
游戏效率分为GPU,CPU两部分。
- GPU通常受限于显卡填充率和内存带宽。
- CPU通常受限于需要渲染的对象的数目,也就是draw call。如果在PC上达到好几千或者移动平台上达到好几百。就需要优化了。
- 点数太多。PC上不要超过百万,移动上不要超十万。
Draw Call优化:
每次Draw Call的耗费很大。CPU要找到和对象作用的灯光,准备shader和其输入参数,向GPU发出绘制请求,准备请求所需数据。
- 把邻近的物体合并,手动也可以。用U3D自带的draw call batching也可以。(只有共享材质的才可合并draw call
- 减少materail的使用。比如把多个纹理放进一个Atlas中。
- 避免让对象被渲染多次,如阴影,反射。(如果对象被N个灯光照。则要多渲染N次)
- 虽然大部分图形是和GPU相关的,但例如mesh skinning,也和CPU相关。
纹理优化:
- 使用Compressed Textures,16bit位图也优于32bit、勾选Generate Mip Maps(允许CPU使用低分辨率纹理,除非纹理像素严格与屏幕分辨率1:1,或者是用来做UI和2D游戏)
- 使用Level-Of-Detail系统、手动为相机设置每个layer的裁剪距离。像石头这种在远距离就不用显示了
public class ExampleClass : MonoBehaviour { void Start() { float[] distances = new float[32]; distances[10] = 15; camera.layerCullDistances = distances; } }
角色模型优化
- 少用骨骼,并且尽量模型共用材质,除非材质类型不同。
- 移动游戏,骨骼尽量在30以下。越少越好
- 移动游戏,面数在300-1500为好,PC,面数在1500-4000
相关推荐
unity3d优化总结篇1
unity3d优化总结篇2
unity性能优化(pdf).rar
适配于Unity开发优化画质技术,可以适配pc版软件,OCULUS平台开发,HTCvive开发,非常方便,直接挂载就能使用
Unity性能优化.pptx
此总结由自己经验及网上收集整理优化内容 包括: 1.代码方面; 2.函数使用方面; 3.ngui注意方面; 4.数学运算方面; 5.内存方面; 6.垃圾回收方面 等等... 本着相互交流 共同进步的原则
Unity游戏开发优化
Unity植被优化插件The Vegetation Engine 3.2.1 仅供学习,请勿商用。
如何优化基于Unity开发的3D移动游戏 培训资料 PPT 讲座
unity图片优化的理论,以及怎么进行优化的指导方案。操作性极强。
文档资料:unity大场景优化;unity大场景优化;unity大场景优化;unity大场景优化;unity大场景优化;unity大场景优化;
Unity开发和C++开发有什么区别Unity开发和C++开发有什么区别Unity开发和C++开发有什么区别Unity开发和C++开发有什么区别Unity开发和C++开发有什么区别Unity开发和C++开发有什么区别Unity开发和C++开发有什么区别...
这个思维导图很全面的讲解了Unity性能优化的各个方面,对于想了解Unity性能优化的人提供的探索的方向。
unity开发工具集
Unity开发HTCFocus一体机SDK Unity开发HTCFocus一体机SDK
Unity开发规范(201701修订),详细记录了游戏开发中用到的开发规范。近10年的开发经验总结。
Unity5实战 使用C#和Unity开发多平台游戏 书中的源码和资源
可以在unity中进行模型的减面优化,节约内存等等。
该文档来自MDCC 2016中国移动开发者大会。杨栋发表了题为“Unity PSVR开发优化”的主题演讲,欢迎下载!