移动优化实用指南 – 图形方法

移动设备具有哪些功能?如何按照这些功能规划游戏?如果游戏运行很慢,且分析器显示渲染正处于瓶颈,如何知道该做哪些更改,又如何做到让游戏外观精美且运行流畅呢?本页专门对这些方法作出一般及非技术阐述。如果需要更多细节,请参阅渲染优化页面。

您可以合理预期当前的消费者手机可以运行的功能:

  • 有光照映射的静态几何体。但需注意:
    • 使用大量 alpha 测试的着色器。
    • 凹凸贴图 (Bumpmapping),尤其是使用内置着色器。
    • 高面多边形计算。
  • 动画角色,设置带有奇幻效果的着色器!但需注意:
    • 大规模人群或高模 (high-poly) 角色。
  • 子画面二维游戏。但需注意:
    • 过度绘制,或者大量图层在其他图层上方绘制。
  • 粒子效果。但需注意:
    • 大颗粒高密度。(大量粒子在其他粒子上方绘制。这是另一种过度绘制的情况)
    • 粒子数目很离奇,或者粒子碰撞体。
  • 物理。但需注意:
    • 网格碰撞体。
    • 大量活跃主体。

不能合理预期的当前消费者手机上可以运行的功能:

  • 全屏屏幕效果,如光晕和景深。
  • 动态逐象素光照(多种光源标记为重要,且不会烘焙成光照贴图)
    • 每种受影响的对象会为您使用的每种动态光照吸引更多的时间,这将很快变慢。
  • 所有对象实时阴影
    • Unity 4 为移动平台的实时阴影提供 本地支持,但是必须谨慎使用,且此功能可能仅限于更高端的设备。

示例 – 如何制作一流的手机游戏

Shadowgun

Shadowgun 是一个很好的示例,可以证明目前的手机硬件可以运行哪些功能。更具体地说,它也是手机不支持的功能,以及如何规避这些限制的良好示例。尤其是由于一小部分游戏在这篇博客中已经成为公开可用

下面是为了保持良好性能,Shadowgun 所进行的操作基本纲要。

  • 动态光照 — 几乎不使用。
    • 使用投射圆阴影 (Blob shadows) 和光照贴图,而不是实时阴影。
    • 角色使用 Lightprobes 而不是实时光照。
      • 枪口闪光已通过脚本添加至 lightprobe 数据。
    • 唯一的动态逐像素照明是一种用来计算角色的 BRDF 的任意光照方向。
  • 凹凸贴图 (Bumpmapping ) — 几乎不使用。
    • 仅在角色身上使用实时凹凸贴图 (Bumpmapping)。
    • 将尽可能的对比和细节烘焙至漫反射纹理贴图。凹凸贴图中的光照信息将烘焙到其中。
    • 一个很好的例子是其雕像纹理,或闪亮墙面,如右图所示。没有凹凸贴图可以用来渲染这些效果,将其烘焙到纹理中便可制造高光效果。光照贴图结合基于定点光照的反射高光可以给这些模型带来光亮的外观。
    • 如需了解如何创建这样的纹理,请参阅渲染优化页面
  • 密集粒子 — 无效。
    • 使用 UV 滚动纹理而非密集粒子效果。
  • 烟雾效果 — 无效。
    • 其“神光 (god rays)” 效果为手动模式。
    • 淡入淡出的单个平面用来获得电影般的烟雾效果,而无需实际上渲染任何烟雾。
      • 这样更快,因为每个平面彼此相距甚远,这意味着无需在每个像素和每个着色器上计算烟雾。
  • 光晕 — 无效
    • 混合子画面平面用来给某些对象带来光晕效果。

Sky Castle Demo

此演示用来说明 Unity 在高端 Android 设备上可执行哪些功能。

  • 动态光照 — 未使用。
    • 仅光照贴图 (Lightmaps)。
  • 凹凸贴图 (Bumpmapping ) — 已使用
    • 所有砖块都已经凹凸贴图,通过定向光照贴图照亮。这正是“高端设备”发挥作用的地方。
  • 实时反射 — 有限
    • 它们会谨慎地将实时反射表面分开放置于隔离的区域。因此,一次只能运行一个表面,需要渲染两次的环境也可以轻松剔除。

最低限度 — 这对您的游戏来说意味着什么

更好地尊重并理解移动设备的限制,游戏外观将更加精美,运行也将更加流畅。如果想要为手机构建一流的游戏,理解 Unity 的图形管线并能够编写自己的着色器,这将给您带来诸多裨益。但是,如果您希望立即可以使用,此处的 ShadowGun 着色器将成为一个非常好的开始。

切勿模拟,而要烘焙!

毫无疑问,所有游戏都必须遵循自然规律。每颗抛物线炮弹的运动,闪亮镀鉻每一个像素的颜色,都通过第一次编写的公式获得,以模拟对现实世界的观测。但是,游戏一部分是科学的模拟,另一部分则是绘画。仅使用物理上精确的渲染不足以让您在移动市场立足;因为这个市场的硬件有限,如果您想要原封不动地模拟现实世界,最终将导致游戏受限制、单调且延迟。

必须将多边形以及混合模式当成画笔,学会使用。

Shadowgun 中展示的完成烘焙的凹凸贴图就是一个很好的示例。纹理中已经存在镜面高光,人眼不会注意到它实际上与反射的光线和视图方向不一致。它们只是纹理上的高对比细节,是完全伪造的效果,但是看起来非常精美。这是一种常见的欺骗技术,并已应用于多款成功的游戏。比较有史以来发布的首张 Halo 截屏中的遮阳板与此发布截屏中的遮阳板。头盔顶部的盔甲突出物看起来似乎反射到了遮阳板中,但是该反射事实上已经烘焙成遮阳板纹理。在 League of Legends 中,法术效果似乎附着有像素光照,但这事实上是一个混合平面,其纹理可能由截取对决中的像素光照屏幕而生成。

有效的功能:

  • 有光照映射的静态几何体
    • 舞台照明和大型动态环境不能混合。只能选择其中一种。
  • 移动的对象使用 Lightprobes
    • 当前,移动硬件实际上并不支持大量动态光照,并且不能使用阴影。Lightprobes 是用于设计有静态光照的复杂游戏世界的灵活解决方案。
  • 专用着色器和精细、高对比度的纹理。
    • ShadowGun 中的着色器将逐像素计算降至最低,并开发了复杂、高质量的纹理。请参阅渲染优化页面,了解如何使用简单着色器制作外观精美的纹理。
  • 卡通图形
    • 谁规定游戏一定要像张照片一样?如果您认为光照和气氛是纹理设计师的职责,而不是引擎,那么您基本无需担心优化渲染。

无效的功能:

  • 光晕和其他后期处理效果
    • 通过使用混合四边形,在可能的时候获得近似效果。Shadowgun 工程可作为一个示例。
    • 凹凸贴图 (Bumpmapping),尤其是使用内置着色器。
    • 请节约使用,仅用于最重要的角色或工程。任何可能占据整个屏幕的对象都不应使用凹凸贴图 (bumpmapped)。
    • 将更多细节和对比烘焙进漫反射纹理,而不使用凹凸贴图。League of Legends 中的效果就是一个有趣的示例,它展示了该功能在行业内的成功应用。

但我应该如何进行实际“操作”呢?

请参阅渲染优化页面。

Page last updated: 2013-06-29