Version: 2017.1
移动平台优化实用指南
脚本和游戏方法

图形方法

移动设备有多大的功能?应该如何相应规划游戏?如果游戏运行缓慢,且性能分析器表明游戏存在渲染瓶颈,那么如何知道应该修改什么?如何让游戏既有好看的外观又能快速运行?本页面将专门就这些方法做一般性和非技术性的说明。如果需要了解具体细节,请参阅渲染优化页面。

可合理期望在当前消费者移动设备上运行:

  • 光照贴图的静态几何体。但要注意:
    • 使用大量 Alpha 测试着色器
    • 凹凸贴图,特别是使用内置着色器。
    • 庞大的多边形数量
  • 动画角色,甚至使用复杂的着色器!但要注意:
    • 庞大的群体或复杂多边形角色
  • 带有精灵的 2D 游戏。但要注意:
    • 过度绘制,或大量图层彼此层叠绘制。
  • 粒子效果。但要注意:
    • 高密度大型粒子。(大量粒子彼此层叠绘制。这是另一种过度绘制情况)
    • 数量奇多的粒子或粒子碰撞体。
  • 物理组件。但要注意:
    • 网格碰撞体。
    • 大量活跃体。

不能合理期望在当前消费者移动设备上运行:

  • 全屏幕图像效果,如发光和景深。
  • 动态每像素光照(多个光源标记为 Important 且未烘焙到光照贴图中)
    • 对于使用的每个动态光源,每个受影响的对象都会被额外绘制一次,这很快就会导致变慢。
  • 全体实时阴影
    • Unity 支持移动平台上的实时阴影,但使用时必须非常明智,可能仅限用于高端设备。

示例 - 如何制作一流的移动端游戏

暗影之枪 (Shadowgun)

Shadowgun 是体现当前移动端硬件能力的令人印象深刻的例子。但更确切地说,这款游戏充分说明了移动端硬件的限制以及如何克服这些限制。特别是因为这款游戏的一小部分已在此博客文章中公开发布,所以得出了这样的结论。

下面概要列出了 Shadowgun 为了确保性能而进行的优化:

  • 动态光照 - 几乎不使用。
    • 使用模糊阴影和光照贴图代替所有真实阴影。
    • 对角色使用光照探针代替真正光源。
      • 通过脚本将枪口闪光添加到光照探针数据中。
    • 唯一的动态每像素光照是用于计算角色上 BRDF 的任意光线方向。
  • 凹凸贴图 - 几乎不使用。
    • 仅对角色使用真正的凹凸贴图。
    • 尽可能将对比度和细节烘焙到漫射纹理贴图中。来自凹凸贴图的光照信息将烘焙到其中。
    • 一个很好的例子是他们的雕像纹理,或者闪亮的墙壁(如右图所示)。未使用凹凸贴图进行渲染,通过烘焙到纹理中来伪造镜面反射。光照贴图与基于顶点光照的镜面高光相结合,为这些模型提供了闪亮的外观。
    • 如果想了解如何创建这样的纹理,请查看渲染优化页面。
  • 密集粒子 - 避免使用。
    • 使用 UV 滚动纹理代替密集粒子效果。
  • 雾效 - 避免使用。
    • 他们的神光是手工建模实现的。
    • 使用淡入和淡出的单个平面实现电影雾效,而不实际渲染任何雾。
      • 这样会加快速度,因为平面很少而且相距很远,这意味着不必在每个像素上和每个着色器中计算雾。
  • 发光 - 避免使用。
    • 使用混合的精灵平面在某些对象上呈现发光的外观。

天空城堡演示 (Sky Castle Demo)

此演示旨在展示 Unity 在高端 Android 设备上的功能。

  • 动态光照 - 未使用。
    • 仅使用光照贴图。
  • 凹凸贴图 - 使用
    • 砖块全都采用凹凸贴图,由方向光照贴图照亮。这正是“高端设备”的用武之地。
  • 实时反射 - 受限。
    • 他们小心地将实时反射表面分开放置在隔离的区域中,这样一次只能运行一个,并可轻松剔除需要渲染两次的环境。

底线 - 对游戏的意义

越是遵从和理解移动设备的局限性,游戏外观就越好,而且表现也会越流畅。如果要制作一款适用于移动设备的高规格游戏,您将会因为了解 Unity 的图形管线并能够编写自己的着色器而受益。但是如果想要立即使用某些现成的着色器,ShadowGun 的着色器(可从此处获取)是一个很好的起点。

不要进行模拟而是进行烘焙!

游戏试图遵循自然规律是没有问题的。每个抛射物的抛射运动以及闪亮铬金属每个像素的颜色都是从先用于模拟现实世界观察结果的公式推导而来的。但是,游戏的一部分涉及科学模拟,另一部分涉及图形绘制。您不会因为物理上准确的渲染就能在移动市场中赢得竞争;如果试图自始至终模拟现实世界,硬件根本就不存在,最终游戏会变得很受限、单调和迟钝。

必须充分利用多边形和混合模式,就像它们是画笔一样。

Shadowgun 中显示的烘焙凹凸贴图就是很好的例子。纹理中已经存在镜面高光,人眼不会注意到它们实际上没有与反射光和视图方向对齐,它们只是纹理上的高对比度细节,完全是伪造的,但最终看起来很棒。这是一种常见的作弊技术,已在许多成功的游戏中使用。通过比较曾经发布的第一个 Halo 截屏中的头盔罩与此发布截屏中的头盔罩,看起来头盔顶部突起的盔甲在头盔罩中反射,但实际上反射被烘焙到头盔罩纹理中。在《英雄联盟》中,魔法效果似乎附加了像素光源,但实际上是一个混合平面,其纹理可能是通过对地面上闪烁的像素光源进行截屏而生成的。

表现良好的方面:

  • 光照贴图的静态几何体
    • 夸张的光照和动态性很强的环境不能一起使用。二者选其一。
  • 用于移动对象的光照探针
    • 当前的移动端硬件并不真正支持大量动态光源,也无法实现阴影。对于具有静态光照的复杂游戏世界,光照探针是一种非常简洁的解决方案。
  • 专用着色器和细节化的高对比度纹理
    • ShadowGun 中的着色器最大限度减少了每像素计算并利用了复杂和高质量的纹理。请参阅渲染优化页面以了解如何在着色器很简单的情况下使纹理看起来很出色。
  • 卡通图形
    • 谁说游戏必须看起来像照片?如果让光照和氛围表现成为纹理美术师的工作,而不是依托于引擎,那么几乎就不用担心优化渲染的问题了。

表现不良的方面:

  • 发光和其他后期处理效果
    • 如果可能,使用混合四边形来模拟这样的效果,请查看 Shadowgun 项目了解这方面的示例。
  • 凹凸贴图,特别是使用内置着色器
    • 谨慎使用,仅限于最重要的角色或对象。任何可能占据整个屏幕的对象都不应该采用凹凸贴图。
    • 应将更多细节和对比度烘焙到漫射贴图中,而不是使用凹凸贴图。《英雄联盟》的效果便是在业内成功运用此方法的一个有趣例子。

但该怎么做呢?

请参阅渲染优化页面。

移动平台优化实用指南
脚本和游戏方法