**
顶级工程师教你移动端游戏性能优化!Unity官方教程!
**
本期将给大家介绍如何提高资源、项目配置和图形的性能。所有教程均来自Unity官方,感兴趣的朋友可以去Unity官网查看完整教学内容。
降低或禁用 Accelerometer Frequency(加速度计频率)
Unity每秒钟是会以一定次数统计移动设备的加速度计状态的。如果我们的程序不会用到加速度计的话,我们完全可以禁用这个功能或降低统计的频率以获得更好的性能。
禁用不必要的 Player 或 Quality 设置
在 Player 设置中,对不支持的平台禁用 Auto Graphics API,以便防止生成过多着色器变体。如果应用程序不支持,对较旧的 CPU 禁用 Target Architectures。
在 Quality 设置中,禁用不需要的质量级别。
禁用不必要的物理设置
如果游戏不使用物理设置,可以取消Auto Simulation和AutoSyncTransforms。它们开启后会降低应用程序运行速度,但是貌似没什么用。
选择正确的帧率
移动端项目必须在帧率和电池续航时间以及热节流之间获得平衡。其实不需要将设备限值拉到60 fps这么高,可以用30 fps 运行。因为Unity 默认移动端帧率就是30 fps。
我们也可以通过Application.targetFrameRate 在运行时动态调整帧率。比如,可以将缓慢或相对静止的场景降至30 fps以下,将玩游戏时的 fps 值设置保留为高一些。
变换一次,而非两次
移动变换 (Transform) 时,可以使用 Transform.SetPositionAndRotation 这样就可以一次就同时更新位置和旋转。这样可以避免两次修改变换(Transform)的额外支出。
如果需要在运行时初始化游戏对象,一项简单的优化是在初始化过程中父子化和重新定位:
GameObject.Instantiate(prefab, parent);
GameObject.Instantiate(prefab, parent, position, rotation);
假设 Vsync 已启用
移动平台是不会渲染半帧的。即使在编辑器中禁用 Vsync (Project Settings > Quality),Vsync 在硬件级别也处于启用状态。如果 GPU 无法足够快地刷新的话,将保持当前帧,从而有效降低每秒帧数。
资源
资源管线可以大幅影响应用程序的性能。经验丰富的技术美术师可以帮助团队定义和增强资源格式、规范以及导入设置。
不要过渡依赖于默认设置。使用平台特定的覆盖选项卡可以优化纹理和网格几何体等资源。如果设置不正确,则可能造成较大的编译版本大小、较长的构建时间,以及较差的内存使用量。这个时候可以考虑使用预设功能来帮助为特定项目自定义基准设置,以确保设置的最优化。
正确导入纹理
纹理会占用很大一部分内存,因此,导入设置非常重要。通常,请遵循以下指导原则:
●减小 Max Size:使用能生成视觉上可接受的结果的最低设置。这种非破坏性方式,可以快速降低纹理内存。
●使用 2 的幂 (POT) :Unity 要求移动端纹理压缩格式(PVRCT 或 ETC)采用 POT 纹理尺寸。
●制作纹理图集:将多个纹理放置到单个纹理中,可以减少绘制调用和加快渲染速度。使用 Unity 精灵图集或第三方 Texture Packer可以制作纹理图集。
●关闭 Read/Write Enabled 选项:如果启用的话,这个选项会在 CPU 和 GPU 可寻址内存中都会创建副本,纹理会占用双倍的内存。绝大多数情况下,这个是应该保持为禁用状态的。如果要在运行时生成纹理的话,可以通过 Texture2D.Apply强制执行,然后传入设置为true的makeNoLongerReadable
●禁用不必要的 Mip Map:对于在屏幕上大小保持不变的纹理(如 2D 精灵和 UI 图形),Mip Map 是可以不要的,对于与摄像机的距离会变化的 3D 模型,那就要保持 Mip Map 为启用状态。
压缩纹理
考虑以下使用相同模型和纹理的两个实例。左侧的设置几乎使用右侧设置八倍的内存量,但并没有改善视觉质量。对 iOS 和 Android 来说都可以使用自适应可伸缩纹理压缩 (ATSC)。市面上绝大多数的开发目标它们最低的规格设备游戏都是支持 ATSC 压缩的。
唯一的例外是:
●适用于面向 A7 设备或更低规格的 iOS 游戏(例如 iPhone 5、5S 等)— 使用 PVRTC
●适用于面向 2016 之前的设备的 Android 游戏 — 使用 ETC2(Ericsson 纹理压缩)
如果压缩格式(如 PVRTC 和 ETC)的质量不够高,并且目标平台不完全支持 ASTC,可以尝试采用 16 位纹理而不是 32 位纹理。
调整网格导入设置
这个跟纹理很像,如果导入时不小心的话,网格可能会占用过多的内存。所以要尽可能减少网格占用的内存,我们可以参照以下操作 :
*●压缩网格:*高性能压缩可以减少占用磁盘空间(但不会影响运行时的内存)。需要注意的是,网格量化可能造成不准确,因此需要试验不同的压缩级别,从而找到最适合模型的压缩级别。
*●禁用 Read/Write:*如果启用此选项,内存中会有重复网格,网格的一个副本在系统内存中,另一个在 GPU 内存中。在大多数情况下,我们需要将其禁用(在 Unity 2019.2 以及更早版本中,此选项默认为选中状态)。
*●禁用骨骼和 BlendShape:*如果网格不需要骨架或 BlendShape 动画,禁用这些选项。
*●尽可能禁用法线和切线:*如果确保网格的材质不需要法线或切线,那就取消选中这些选项,以节省更多内存空间。
检查多边形数量
分辨率越高的模型,需要的内存使用量就越大,并且很可能会占用更长的 GPU 时间。这时候需要考虑我们的背景几何体是否需要这么多个多边形?考虑减少所选 DCC 包中的模型。删除摄像机的视角看不到的多边形。使用纹理和法线贴图而不是高密度网格来实现精细的细节。
使用 AssetPostprocessor 自动执行导入设置
利用 AssetPostprocessor 可以在导入资源时运行脚本。这样,就可以在导入模型、纹理、音频等之前和或之后对设置进行自定义。
使用可寻址资源系统(Addressable Asset System)
可寻址资源系统提高一种简化的方法来管理内容,按“地址”或别名加载资源包。这种统一的系统从本地路径或远程内容分发网络 (CDN) 执行异步加载。
使用 AssetPostprocessor 自动执行导入设置
利用 AssetPostprocessor可以在导入资源时运行脚本。这样,您可以在导入模型、纹理、音频等之前和 / 或之后对设置进行自定义。
使用可寻址资源系统(Addressable Asset System)
可寻址资源系统提高一种简化的方法来管理内容,按“地址”或别名加载资源包。这种统一的系统从本地路径或远程内容分发网络 (CDN) 执行异步加载。
如果将非代码资源,比如:模型、纹理、预制件、音频,甚至整个场景拆分为资源包,这时候就可以将它们分为可下载内容 (DLC) 分开分发。
然后,使用 Addressables 为移动端应用程序创建较小的初始构建版本。云端资源分发可承载我们的游戏内容并随着玩家的游戏进展将内容分发至玩家。
图形和 GPU 优化
每一帧,Unity 都需要确定必须渲染哪些对象,然后创建绘制调用。绘制调用是调用图形 API 来绘制对象(如三角形),而批处理是要一起执行的一组绘制调用。
随着项目变得更加复杂,就需要用管线来优化 GPU 的工作负载。通用渲染管线 (URP) 目前使用单通道前向渲染器将高质量图形传输给移动平台(未来版本中会提供延迟渲染功能)。来自游戏主机和 PC 的、基于物理的光照和材质也可以缩放为适合手机或平板电脑。
下面的指导原则可以帮助大家提高图形处理速度。
批处理执行绘制调用
将要绘制的对象组合为批次,可以尽可能减少在批次中绘制每个对象所需的状态更改。这种方式通过减少渲染对象的 CPU 开销,可以改善性能。Unity 可以使用以下几种方法将多个对象组合为较少的批次:
●*动态批处理:*对于小网格,Unity 在 CPU 上分组和转换顶点,然后一次性绘制它们。注意:只在有足够低复杂度网格(少于 900 个顶点属性和不超过 300 个顶点)时使用这一方法。动态批处理程序不会对更大的网格进行批处理,如果启用会浪费 CPU 时间在每一帧都去查找要批处理的小网格。
*●静态批处理:*对于不移动的几何体,Unity 可以减少所有共享相同材质的网格的绘制调用。它比动态批处理更有效,但使用更多内存。
*●GPU 实例化:*如果有大量相同的对象,这种方法通过图像硬件对它们进行更有效的批量处理。
*●SRP 批处理:*在 Advanced 下面的 Universal Render Pipeline Asset 中启用 SRP Batcher。这样可以大幅提高 CPU 渲染速度,具体取决于场景。
使用帧调试器 (Frame Debugger)文章来源:https://www.toymoban.com/news/detail-830750.html
帧调试器会介绍每一帧是如何通过各绘制调用构建的。这是非常重要的工具,可以解决着色器属性问题,帮助我们分析游戏的渲染方式。
游戏简历自测表, 游戏开发Unity不同职级技能表,游戏大厂面试题库等资料可以扫描下方二维码进行领取文章来源地址https://www.toymoban.com/news/detail-830750.html
到了这里,关于顶级工程师教你移动端游戏性能优化!Unity官方教程!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!