Unity 性能优化一:性能标准、常用工具

性能标准

推荐耗时:

性能提现到玩家直观感受,就是帧率,为了达到要求的帧率,就要控制CPU的耗时,不同类型的游戏,对帧率要求不一样。下面是推荐耗时:

推荐内存:

避免游戏闪退的重点在于控制PSS内存(实际物理内存Proportional set size)峰值。而PSS内存的大头又在于Reserved Total中的资源内存和Mono堆内存。对于使用Lua的项目来说,还应关注Lua内存。

只有当PSS内存峰值控制在硬件总内存的0.5-0.6倍以下的时候,闪退风险才较低。举例而言,对于2G的设备而言,PSS内存应控制在1G以下为最佳,3G的设备则应控制在1.5G以下。

而对于大多数项目而言,PSS内存大约高于Reserved Total 200MB-300MB左右,故2G设备的Reserved Total应控制在700MB以下、3G设备则控制在1G以下。

渲染模块推荐值:

随着游戏对画质效果的要求越来越高,越来越多的项目遇到的性能瓶颈会来自于GPU的压力,GPU的压力会受到帧率,分辨率,三角形面片数,后处理,Shader复杂度,Overdraw等多方面的影响,因此我们对于不同分档的机型需要做一些对应的调整,在不同档位的机型上要做较为细致的区分,从而达到越高端的机型画质表现越好,而在低端机型上又能保证一定的流畅性。下表中可以当做一个模板,对于不同的游戏类型的需求可以再进一步调整,其中绿色的数值如果能达到的话会更优。

推荐工具

Unity Profiler

建议真机调试、快捷键A(把当前帧的数据,自适应到窗口)、F(Timeline 下选中一个,快速聚焦到合适窗口)

Profiler Modules 可以按需加减,Frame 默认记录300帧的数据,可以在Preference->Analysis->Profiler中更改,最高是2000,高了会增加profile的消耗

Rendering 的数据,影响其中的很大原因是 摄像机视角的改变

Unity Frame Debugger

  • 查看当前帧画面的渲染流程,它可以列出所有的绘制调用,并能够按照顺序逐步执行每个调用。
  • 查看Draw Call的调用次数,并通过顶点/索引数量来间接衡量场景的渲染代价。
  • 还能够检查Batch是否正常合批,以及检查不合批的原因。
  • 还可以访问着色器属性以获得关于材质和着色器的更多信息,也可以得到被对象使用的数据的引用。

Mali Offline Compiler

Documentation -- Arm Developer 官方文档

a. 该工具主要用来计算Shader的复杂度,结合分档的高中低数值来判断Shader是否过于复杂。

b. 它是一个命令行工具,提供静态分析GPU着色器。它主要可以用于验证着色器的语法、识别性能瓶颈、衡量任何变化对性能的影响。

选中shader,编译成文件后,选择其中的片元着色器或顶点着色器代码,用mali命令行分析

c. 从Unity编辑器中获得FRAGMENT Shader。

从它的报告中我们能得到一些优化的建议:

  • 尽量不要使用if、discard语句
  • 减低相关运算量,减少反三角函数等复杂函数的使用
  • 避免类型转换
  • 减少使用32位的高精度浮点数,不过position和depth最好还是用332位
  • 避免触发spilling等等

Xcode FrameDebugger

它只支持metal 型号的机器测试,即iPhone,在Edit Scheme 中,选中GPU为metal,既可以截取对应帧的信息,和Unity Frame Debugger类似,但功能更全一些

开启后,在真机上运行时,通过下方工具栏,截取:

相关推荐
REDcker26 分钟前
WASM 软解 H.265 性能优化详解
性能优化·wasm·h.265
居7然8 小时前
ChatGPT是怎么学会接龙的?
深度学习·语言模型·chatgpt·性能优化·transformer
悟道|养家12 小时前
广域网往返(WAN RTT)优化案例(6)
性能优化
Dr.勿忘12 小时前
MUMU模拟器adb连接失败:cannot connect to 127.0.0.1:16384: 由于目标计算机积极拒绝,无法连接。 (10061)
游戏·unity·adb·游戏程序·调试·模拟器
没有bug.的程序员13 小时前
Java 并发容器深度剖析:ConcurrentHashMap 源码解析与性能优化
java·开发语言·性能优化·并发·源码解析·并发容器
没有bug.的程序员19 小时前
HashMap 源码深度剖析:红黑树转换机制与高并发性能陷阱
java·性能优化·并发编程·源码分析·红黑树·hashmap·技术深度
chaofan98019 小时前
高并发环境下 API 性能优化实践 —— API 接口技术解析
性能优化
砚边数影20 小时前
Java基础强化(三):多线程并发 —— AI 数据批量读取性能优化
java·数据库·人工智能·ai·性能优化·ai编程
垂葛酒肝汤20 小时前
Unity中的协程的原理
unity·游戏引擎
霖霖总总20 小时前
[小技巧35]深入 InnoDB 的 LRU 机制:从原理到调优
数据库·mysql·性能优化