面向Unity开发人员的ARM指南 v3.1推出 这几大方面给开发带来福音

2017年04月21日 11:22 0 点赞 1 评论 更新于 2025-11-21 21:23
面向Unity开发人员的ARM指南 v3.1推出 这几大方面给开发带来福音

Unity 是一款被大多数游戏开发人员广泛使用的多平台游戏开发引擎。借助该引擎,开发者能够创建并分发 2D 和 3D 游戏以及其他图形应用程序。

ARM 高度重视游戏开发人员。如今,在移动平台上实现游戏机品质的游戏已成为可能,为此 ARM 编写了这份面向 Unity 开发人员的指南。该指南汇集了各类最佳实践和优化技术,旨在帮助开发者充分利用 ARM 移动平台的优势。无论开发者是初学者还是高级 Unity 用户,都能从中获取在图形应用程序中提高 FPS 所需的建议。

优化过程

指南开篇介绍了优化过程,让开发人员了解最佳质量设置和优化过程的原理。其中详细演示了如何使用 Unity Profiler 和 Debugger 以及各种 ARM 开发工具,如 Mali Graphics Debugger 和 Streamline。

具体优化步骤如下:首先,使用性能分析器对图形应用程序进行测量;接着,分析测量数据,找出代码中的瓶颈;然后,确定要应用的相关优化措施;最后,开发人员需要验证优化是否生效。

此外,指南专门开辟了一个章节介绍 Mali Offline Shader Compiler,这是一款对 Unity 开发人员非常实用的 ARM 工具。它可以将顶点、片段和计算着色器编译为二进制形式,同时提供每个 Mali GPU 管道中所需的着色器循环执行次数的信息,方便开发人员针对 ARM Mali GPU 进行分析和优化。

优化

优化章节涵盖了多个方面的内容,从 ARM Cortex 应用程序处理器优化(提供代码片段和设置示例)到 ARM Mali GPU 优化以及资产优化。

ARM Mali GPU 优化技术

  • 静态批处理:这是一种常用的优化技术,通过减少绘图调用数量,降低对应用程序处理器的使用。
  • 4x MSAA:ARM Mali GPU 能够实现 4x 多重采样抗锯齿 (MSAA),且计算开销极低。

LOD 组设置

  • 细节层次 (LOD):该技术使 Unity 引擎能够根据对象与摄像机的距离,为同一对象渲染不同的网格。
  • 光照贴图和光照探测:光照贴图预先进行光照计算,并将结果烘焙成纹理。虽然使用光照贴图会使开发人员失去完全动态光照环境的灵活性,但能获得高质量图像且不影响性能。而光照探测可以为光照贴图场景增加一些动态光照,光照探测数量越多,光照效果越精确。
  • ASTC 纹理压缩:这是可供 Unity 开发人员使用的最有效且最灵活的纹理压缩格式,具有高质量、低比特率以及多种控制选项,指南中会详细说明。
  • Mip 贴图技术:可以提高视觉质量,并增强图形应用程序的性能。Mip 贴图是各种规格纹理的预计算版本,Unity 可以自动生成从原始大小的第 1 个层次到 1x1 像素版本的完整层次集合。
  • 天空盒:使用单个立方体贴图绘制摄像机背景,只需一个立方体贴图纹理并执行一次绘图调用。
  • 实时阴影效果:Unity 支持用于计算实时阴影的变换反馈。对于高级开发人员,指南在“高级图形技术”一章中演示了如何使用局部立方体贴图实现自定义阴影。
  • 遮挡剔除:当对象不在摄像机视野范围内时,不渲染该对象,从而节省 GPU 处理能力。
  • 回调函数的高效使用:介绍了如何高效地使用 OnBecameVisible() 和 OnBecomeInvisible() 回调。
  • 渲染顺序:对于性能至关重要,最好从前到后渲染不透明对象,有助于减少过度绘制。开发人员还将了解到如何利用最新硬件技术(如提前 Z 拣选和正向像素剔除 (PFK))减少过度绘制,以及 Unity 引擎提供的相关选项。

开发人员还可以通过资产优化进一步提升应用程序性能。指南中有专门章节介绍如何高效地准备纹理、纹理贴图集、网格以及动画。

Enlighten

从第 5 版开始,Unity 引擎采用 Enlighten 支持全局照明 (GI)。Enlighten 是 ARM Geomerics 的实时 GI 解决方案。

在 Unity 中,Enlighten 可用于烘焙光照贴图和光照探测,并提供实时的间接光照效果。虽然 Enlighten 组件在 Unity 中未明确公开,但在用户界面中有引用,指南详细介绍了这些组件的含义及其协同工作的方式。

Enlighten 相关章节还解释了如何在自定义着色器中配置 Enlighten,阐述了代码流,并说明了开发人员在顶点和片段着色器代码中设置 Enlighten 时需要完成的操作。其中展示了一个经过修改以包含定向全局照明的 Unity 标准着色器版本。

高级图形技术

第 6 章是指南中篇幅最长的一章,主要介绍高级图形技术。这些技术大多通过“自定义着色器”实现,因为 Unity 内置着色器的源代码无法实现大多数高级效果。

本章首先介绍了如何编写和调试自定义着色器,然后详细说明如何实现冰洞和棋牌室演示中使用的高级图形技术,并提供了源代码片段:

  • 反射(使用局部立方体贴图):在 Unity 第 5 版及更高版本中,使用反射探测实现反射。开发人员可以将这些反射探测与其他类型的反射(如运行时使用自定义着色器渲染的反射)结合使用。
  • 组合静态反射:根据局部立方体贴图,将静态反射与动态生成的反射相结合。
  • 动态柔和阴影:可在有物体移动的游戏场景以及房间等静态环境中使用。基于局部立方体贴图技术,开发人员可以使用纹理表示阴影,用 alpha 通道表示进入房间的光照量。
  • 折射:根据局部立方体贴图进行折射,这是一种使用高度优化的局部立方体贴图技术的光照效果,开发人员可在运行时将折射与反射结合使用。
  • 高光效果:使用高效的 Blinn 技术实现。在冰洞演示示例中,使用 alpha 通道确定高光强度,确保高光效果仅应用于光照表面。
  • 提前 Z 拣选:通过消除过度绘制的片段来提高性能。
  • 脏镜头光晕效果:可带来戏剧般的感受,通常与镜头光晕效果一起使用,可通过耗费资源较少的简单方式实现,适合移动设备。
  • 容积光:可以模拟粒子射线、大气散射或阴影的效果,为场景增添深度和真实感。这种效果基于截锥几何体,通过脚本使用太阳位置计算下横截面锥形展开的幅度以及横截面移位的方向和幅度。
  • 雾效果:可为场景增添气氛,有程序线性雾和以粒子为基础的雾两种版本。
  • 泛光:用于再现在明亮环境中拍摄照片时真实摄像机中出现的效果,在强烈光照条件下非常醒目。指南使用简单的平面方法高效地演示了该效果。
  • 冰墙效果:由于光会根据冰表面的微小细节以不同方式散射,冰墙效果较难制作。在冰洞演示中,该效果融合了视差效应,更加逼真。
  • 程序天空盒:为实现昼夜动态效果,冰洞演示天空盒结合了程序生成的太阳、一系列淡入淡出的天空盒背景立方体贴图(代表昼夜更替)以及一个天空盒云立方体贴图。
  • 萤火虫:在冰洞演示中使用的发光飞行昆虫,增添了场景活力,同时演示了使用 Enlighten 提供实时全局照明的优势。

移动虚拟现实

指南的最后一章介绍了为移动虚拟现实开发图形应用程序时的最佳代码编写实践。

Unity 本身支持一些 VR 设备,如 Samsung Gear VR,也可通过各种插件实现对 Google Cardboard 等其他设备的支持。指南详细介绍了如何将图形应用程序移植到本机 Unity VR 上。

与在智能手机或平板电脑上运行图形应用程序相比,VR 能创造更身临其境的用户体验,但摄像机动画可能会让 VR 用户感到不适。此外,VR 可以借助通过蓝牙连接到 VR 设备的控制器。指南中提供了打造终极用户体验的技巧和方法。

有一个完整的章节专门讨论如何在 VR 中实现反射。可以使用“高级图形技术”一章中介绍的局部立方体贴图技术,但需要对该技术进行修改,以适应立体视觉输出。本章解释了如何实现立体反射以及将不同类型的反射结合使用。

作者信息

孟子菇凉

孟子菇凉

共发布了 3994 篇文章