ARM 在Unity3D 中的美术优化解决方案 1, 简介/优化和性能分析
创始人
2025-05-31 21:27:55

1, 课程简介

1.概述

欢迎学习《Arm 和 Unity:适用于移动应用程序的 3D 美术优化》课程!

人们常说,智能手机是我们随身携带的超级计算机。作为创作者,我们努力开发可随时使用的有用工具和沉浸式体验。虽然智能手机确实给我们提供了能够运行复杂应用程序(例如 3D 游戏)的强大硬件,但它们仍有其局限性。

在本课程中,你将了解创建不同类型的 3D 资源的几种最佳实践,以及对移动开发的性能分析/优化工作流程的高层次理解。灵活运用从这些课程中学到的知识将为你的目标受众带来更快、更高效的应用程序和更好的体验。

2.课程的目标受众

本课程专为新生代中级技术美术师和内容创作者制作。我们假定你具有使用 Unity 编辑器和你选择的 3D 内容创作工具的经验。

3.如何使用示例演示

本课程提供了五个示例演示,涵盖每个部分介绍的重要优化。这些演示已通过 Unity LTS 2019 (Unity 2019.4.10f1) 进行了测试。可以在此处下载该项目。打开示例项目时,将显示一个 README 文件,让你能够快速访问每个示例演示。Unity 编辑器也针对这些演示进行了定制 - 内置的 Profiler 和 Frame Debugger 视图已停靠在编辑器中,以方便你访问。如果需要访问介绍 README (Tools > Show Read Me) 或每个性能分析视图 (WIndow > Analysis),你可以在 Unity 编辑器的菜单栏中找到它们。重要注意事项:下载包含示例演示的 Unity 项目后,请确保关闭 SRP Batcher。默认情况下,该功能在支持通用渲染管线的项目中处于启用状态。本课程稍后部分会介绍该功能。导航到 Assets > Content > Settings 并单击 UniversalRenderPipelineAsset,以在 Inspector 中突出显示其属性。SRP Batcher 开关应位于 Advanced 部分下。

优化过程

本课程专为新生代中级技术美术师和内容创作者制作。我们假定你具有使用 Unity 编辑器和你选择的 3D 内容创作工具的经验。

1.什么是优化过程?

优化指的是对软件进行修改以提高其性能的过程。对于移动应用程序,这通常意味着修改应用程序以使其在资源有限的移动设备上更快地运行。在本课程中,我们将专注于优化 3D 美术资源:模型、纹理、材质、着色器和光照。例如,你正在开发的移动游戏可能存在帧速较低、出现画面卡顿、导致手机发热、造成电池寿命大幅下降等情况。这些问题可能是由复杂的模型或未优化的着色器引起的。这会给用户留下不好的印象,并使游戏难以进行。对游戏进行性能分析和优化以提高性能通常可带来更好、更流畅的体验。优化 3D 美术资源时,我们将使用迭代过程指导你找出并消除性能问题。优化过程包含以下步骤:

  1. 性能分析,即使用性能分析器测试应用程序。

  1. 分析数据,查找瓶颈。

  1. 确定要应用的相关优化。

  1. 验证优化是否有效。

  1. 如果性能令人难以接受,则返回步骤 1 并重复该过程。

以下是对上述移动游戏应用优化过程的示例:

  1. 在测试游戏时,你发现存在图形问题或性能不佳。当游戏在测试设备上运行时,可以使用 Unity 性能分析器进行测试以查找问题。

  1. 分析性能分析器的测试结果可以帮助你隔离并确定性能问题的根源。例如,你可能会注意到,在主角进入视野后,Rendering 性能分析器模块中出现了很高的渲染尖峰。

  1. 在发现该较大峰值并对其他情况进行测试后,你确定当某些模型进入视野时,游戏可能渲染了过多的顶点。

  1. 你将这些情况告知团队并建议为某些 3D 模型使用 LOD,以减少从远处观看时网格中的顶点数量。

  1. 在模型上应用 LOD 后,你再次测试游戏以验证优化是否有效!

如果执行上述过程后,应用程序仍未按预期运行,则可以通过再次对应用程序进行性能分析来找出其他导致问题的原因,以重新开始这一过程。

2.总结

在游戏开发的某个阶段,你可能需要多次重复优化过程。优化是一个迭代过程,可以帮助你发现许多不同方面的性能问题。在下一个教程中,我们将介绍在对移动应用程序进行性能分析时可以使用的各种工具。

性能分析工具

1.在 Unity 中进行性能分析

可以使用多种工具测试游戏在移动设备上的性能,例如性能分析器和图形调试器。这些工具可为你提供关于游戏如何使用给定设备(例如开发计算机或手机)资源的详细视图。

Unity 内置的性能分析器 (Window > Analysis > Profiler) 可在 Unity 编辑器或连接的设备中运行时分析游戏中的场景,并显示你的应用程序将时间花在了什么地方。性能分析器以图表形式显示数据,直观说明设备是如何处理 CPU 和 GPU 工作负载的。在这里,你可以确定游戏中的问题区域,并发现优化性能的机会。

Unity 内置的帧调试器 (Window > Analysis > Frame Debugger) 可帮助你探索游戏进行的 OpenGL ES 或 Vulkan API 调用,深入分析每次绘制调用,让你能够识别渲染缺陷、评估场景中的细节级别并找出开销巨大的着色器以进行优化。

下面的屏幕截图显示了某应用程序运行期间性能分析器的图形化测量结果,在图中可以直观地看到 CPU 使用率、内存占用以及每个 CPU 线程上的具体操作:

2.在 Unity 编辑器中进行性能分析与在设备上进行性能分析

对于制作期间遇到的问题,在开发计算机上使用内置性能分析器对应用程序进行性能分析十分便捷。但要确切了解移动应用程序的性能和潜在瓶颈,我们强烈建议你针对目标设备构建应用并在目标设备上进行性能分析。

在开发计算机上进行性能分析有用、便捷,但该过程会产生在 Unity 编辑器中渲染移动应用程序的开销以及编辑器本身的开销。当针对目标移动设备进行构建时,可以隔离整个应用程序,同时获得内置性能分析器的好处,从而在更准确的情况下进行性能分析和测试。

有关针对所选平台创建开发构建的更多信息,请参阅 Unity 文档。

3.使用 Arm Streamline 进行性能分析

虽然 Unity 性能分析器可在运行时向你显示某些作业的排程,但它不显示可用的 CPU 或 GPU 资源,也不显示这些资源在你进行分析的移动设备上的使用情况。

Arm Streamline 是一个性能分析器,作为 Arm Mobile Studio 的一部分提供。Arm Mobile Studio 是一个免费的性能分析工具套件,用于在使用 Arm Mali GPU 的设备上调试和优化 Android 应用程序。当在未取得 root 权限的设备上运行时,Streamline 可对你的游戏进行分析并提供性能计数器数据,以帮助你了解你的移动应用程序如何使用该设备的资源。

Streamline 衡量 CPU 活动,以查找可降低使用率的区域,并分析移动应用程序问题区域的活跃 GPU 工作负载。你可以探索 GPU 如何处理太小而无法渲染、不在屏幕上或过度绘制的三角形。此外,Streamline 还可以帮助你评估着色器性能和纹理使用情况。

下面的屏幕截图显示了 Streamline 的时间轴视图,该视图呈现了 Android 设备资源(例如 CPU 和总线活动)的详细测量结果:

有关如何使用 Arm Streamline 对移动应用程序进行性能分析的更多信息,请单击此处。

4.总结

性能分析和优化工作流程是一个有用的迭代过程,可用于在收集和分析移动应用的性能数据时查找潜在瓶颈。Unity 内置的性能分析器和帧调试器是分析应用程序如何使用资源的良好起点。当需要更精细的测量时,Arm Streamline 等工具是在目标移动设备上进行性能分析的绝佳解决方案。

在下一个项目中,我们将介绍如何在保障性能的情况下为 3D 移动应用程序创建几何体,自此踏上我们的美术优化之旅。

上一篇:JDBC下篇

下一篇:Redis基础知识

相关内容

热门资讯

【实验报告】实验一 图像的... 实验目的熟悉Matlab图像运算的基础——矩阵运算;熟悉图像矩阵的显示方法࿰...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
大模型落地比趋势更重要,NLP... 全球很多人都开始相信,以ChatGPT为代表的大模型,将带来一场NLP领...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
kuernetes 资源对象分... 文章目录1. pod 状态1.1 容器启动错误类型1.2 ImagePullBackOff 错误1....
STM32实战项目-数码管 程序实现功能: 1、上电后,数码管间隔50ms计数; 2、...
TM1638和TM1639差异... TM1638和TM1639差异说明 ✨本文不涉及具体的单片机代码驱动内容,值针对芯...
Qt+MySql开发笔记:Qt... 若该文为原创文章,转载请注明原文出处 本文章博客地址:https://h...
Java内存模型中的happe... 第29讲 | Java内存模型中的happen-before是什么? Java 语言...
《扬帆优配》算力概念股大爆发,... 3月22日,9股封单金额超亿元,工业富联、鸿博股份、鹏鼎控股分别为3.0...
CF1763D Valid B... CF1763D Valid Bitonic Permutations 题目大意 拱形排列࿰...
SQL语法 DDL、DML、D... 文章目录1 SQL通用语法2 SQL分类3 DDL 数据定义语言3.1 数据库操作3.2 表操作3....
文心一言 VS ChatGPT... 3月16号,百度正式发布了『文心一言』,这是国内公司第一次发布类Chat...
CentOS8提高篇5:磁盘分...        首先需要在虚拟机中模拟添加一块新的硬盘设备,然后进行分区、格式化、挂载等...
Linux防火墙——SNAT、... 目录 NAT 一、SNAT策略及作用 1、概述 SNAT应用环境 SNAT原理 SNAT转换前提条...
部署+使用集群的算力跑CPU密... 我先在开头做一个总结,表达我最终要做的事情和最终环境是如何的,然后我会一...
Uploadifive 批量文... Uploadifive 批量文件上传_uploadifive 多个上传按钮_asing1elife的...
C++入门语法基础 文章目录:1. 什么是C++2. 命名空间2.1 域的概念2.2 命名...
2023年全国DAMA-CDG... DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义...
php实现助记词转TRX,ET... TRX助记词转地址网上都是Java,js或其他语言开发的示例,一个简单的...
【分割数据集操作集锦】毕设记录 1. 按要求将CSV文件转成json文件 有时候一些网络模型的源码会有data.json这样的文件里...
Postman接口测试之断言 如果你看文字部分还是不太理解的话,可以看看这个视频,详细介绍postma...
前端学习第三阶段-第4章 jQ... 4-1 jQuery介绍及常用API导读 01-jQuery入门导读 02-JavaScri...
4、linux初级——Linu... 目录 一、用CRT连接开发板 1、安装CRT调试工具 2、连接开发板 3、开机后ctrl+c...
Urban Radiance ... Urban Radiance Fields:城市辐射场 摘要:这项工作的目标是根据扫描...
天干地支(Java) 题目描述 古代中国使用天干地支来记录当前的年份。 天干一共有十个,分别为:...
SpringBoot雪花ID长... Long类型精度丢失 最近项目中使用雪花ID作为主键,雪花ID是19位Long类型数...
对JSP文件的理解 JSP是java程序。(JSP本质还是一个Servlet) JSP是&#...
【03173】2021年4月高... 一、单向填空题1、大量应用软件开发工具,开始于A、20世纪70年代B、20世纪 80年...
LeetCode5.最长回文子... 目录题目链接题目分析解题思路暴力中心向两边拓展搜索 题目链接 链接 题目分析 简单来说࿰...