0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

汽车玩家 来源:CSDN 作者:Duke教授 2020-03-13 16:47 次阅读

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所需的内存(非重点)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10301

    浏览量

    206122
  • gpu
    gpu
    +关注

    关注

    27

    文章

    4309

    浏览量

    126220
  • Unity
    +关注

    关注

    0

    文章

    125

    浏览量

    21479
收藏 人收藏

    评论

    相关推荐

    光学3D表面轮廓仪可以测金属吗?

    重建物体的维模型。这种测量方式具有非接触性、高精度、高速度等优点,非常适合用于金属等材料的表面测量。 光学3D表面轮廓仪可以测量金属的形状、表面缺陷、几何尺寸等多个方面: 1、形状测量。光学
    发表于 08-21 13:41

    ARM Unity开发者优化指南

    Unity是一软件平台,使您能够创建和分发2D游戏、3D游戏和其他应用程序。 本书旨在帮助您创建应用程序和内容,最大限度地利用Unity
    发表于 08-08 06:37

    _如何在Unity中制作3D格斗游戏-完整教程_第15节 #硬声创作季

    游戏开发Unityunity 3d
    充八万
    发布于 :2023年08月04日 00:09:20

    _如何在Unity中制作3D格斗游戏-完整教程_第10节 #硬声创作季

    游戏开发Unityunity 3d
    充八万
    发布于 :2023年08月04日 00:05:05

    _如何在Unity中制作3D格斗游戏-完整教程_第9节 #硬声创作季

    游戏开发Unityunity 3d
    充八万
    发布于 :2023年08月04日 00:04:14

    _如何在Unity中制作3D格斗游戏-完整教程_第7节 #硬声创作季

    游戏开发Unityunity 3d
    充八万
    发布于 :2023年08月04日 00:02:32

    _如何在Unity中制作3D格斗游戏-完整教程_第4节 #硬声创作季

    游戏开发Unityunity 3d
    充八万
    发布于 :2023年08月03日 23:59:59

    _如何在Unity中制作3D格斗游戏-完整教程_第3节 #硬声创作季

    游戏开发Unityunity 3d
    充八万
    发布于 :2023年08月03日 23:59:07

    _如何在Unity中制作3D格斗游戏-完整教程_第2节 #硬声创作季

    游戏开发Unityunity 3d
    充八万
    发布于 :2023年08月03日 23:58:16

    _如何在Unity中制作3D格斗游戏-完整教程_第1节 #硬声创作季

    游戏开发Unityunity 3d
    充八万
    发布于 :2023年08月03日 23:57:25

    优化Unity程序的方法

    的帧速率,使其成为更好、更流畅的体验。 本指南介绍了优化Unity程序的方法,尤其是它们的GPU使用。 本指南将优化分为章: •应用程序处理器优化
    发表于 08-02 18:52

    实时3D艺术最佳实践-灯光指南

    的照明技术下看起来更糟。 Unity游戏引擎使灯光工作简单易懂。的手机游戏的表现受到你的照明决定的影响,所以需要使用照明高效。 本指南也可在统一学习课程的格式-手臂和统一呈现:3D艺术 移动应用程序
    发表于 08-02 08:34

    实时3D艺术最佳实践-纹理技术解读

    、mipmapping和法线贴图。 本指南也以Unity学习课程的形式提供-Arm&Unity Presents:移动应用程序的3D艺术优化
    发表于 08-02 06:12

    实时3D艺术最佳实践-材料和着色器用户指南

    材质和着色器决定3D对象在屏幕上的显示方式,了解它们做什么,以及如何优化它们。 本指南涵盖了多种不同的材质和着色器优化,可以帮助您的游戏 跑步效率更高,看起来更好。 本指南也以Unity
    发表于 08-02 06:11

    iMX8QM安卓平台支持3D游戏吗?

    我使用 Unity Hub 和 android runtime 开发了一 3D unity 游戏。我可以在基于 Android 的手机上玩这个游戏,但不能在 iMX8QM 上玩。而且
    发表于 04-04 07:42