image.png
虽然特效的吸引力和质量很重要,但它们也应该在各种设备上表现良好。
这篇文章涵盖了一系列提高特效性能的方法,它还概述了导入对象和纹理的技术准则。
你可以做最大的改变是减少项目中的能力数量,减少 3D 对象的大小,并优化你对纹理的使用。

技术准则

这些是 3D 对象的数量、纹理分辨率和三角形数量的最大限制。你应该遵循下面的这些限制,以及本篇的优化指南,以便平衡质量与性能。
我们建议在一个场景中添加不超过 50 个物体。
纹理的最大分辨率是 1024 px * 1024 px。你添加到项目中的任何纹理如果大于这个尺寸,将被自动调整大小。
当导入 3D 对象时,请注意:

  • 每个对象的最大顶点数应少于 20000
  • 一个特效中每个对象的总三角形数应低于 50000
  • 一个特效中所有对象的总三角形数应保持在 150000 以下
  • 高度应该在 1 厘米(最小)和 5 米(最大)之间。

减少功能和特性的影响

功能和特性会在你建立一个特效时自动添加到项目中,例如脸部跟踪和音频。添加的功能越多,对性能的影响就越大。
要检查项目中有哪些功能:

  • 在菜单栏中选择项目 Project
  • 选择编辑属性…. Edit Properties….
  • 选择功能 Capabilities

    1. 移除不同的功能

    在导出项目之前,确保你已经删除了特效中没有使用的任何功能。

    2. 使用分割

    分割对性能的影响很大。我们发现,同时使用分割和脸部追踪器的特效表现并不理想。最好避免在同一个特效中使用这些功能。分割只在较新的设备上运行。iOS 设备必须是 iPhone 6S 或更高版本。安卓设备必须是三星 Galaxy S6、索尼 Xperia Z2 或同等设备,或更高版本。

优化 3D 对象

了解更多关于减少 3D 对象对特效表现的影响。你还应该阅读关于为 Spark AR Studio 创建 3D 对象的文章,以获得最佳特效。

1. 用 Spark AR Toolkit 优化 3D 物体

如果你用 Blender 创建 3D 对象,在将对象导出到 Spark AR Studio 之前,使用 Spark AR Toolkit 来优化你的对象。

2. 减少三角形数量

3D 物体包含三角形,3D 物体中的三角形数量(或称三角形计数)是判断一个对象大小的有效方法。这个计数对3D 模型的大小和性能影响最大,因此,为了实现高性能的特效,最好将三角形计数保持在尽可能低的水平。
我们建议将每个对象的最大三角形数量保持在 50000 以下,将一个特效中所有对象的总三角形数量保持在 150000以下。
你可以在三维建模软件中检查三角形的数量。
你也会听到一些艺术家提到多边形的数量。因为多边形是由三角形组成的,所以最好关注三角形的数量,以便最详细、准确地了解网格的大小。
一般来说,在你的特效中,有少量的物体具有较多的三角形和顶点,比有许多物体具有较少的三角形和顶点更有利于性能。
在可能的情况下,你也应该:

  • 镜像几何
  • 将多边形保持在三角形和四边形
  • 请记住,如果将 3D 对象与其他 Spark AR Studio 功能相结合,即使你减少了多边形数量,特效可能仍然帧速率较低

    3. 使用混合形状

    尽可能地避免使用复杂的混合形状。

    4. 用动画优化 3D 对象

    为了减少带有动画的 3D 物体对特效的影响,尽可能使用骨骼的数量。

优化纹理

除了本篇的建议外,试验不同的压缩设置可以对特效的特效产生很大的影响。了解更多关于 Spark AR Studio 中压缩的信息

1. 降低纹理分辨率

尽可能地把纹理做得很小。
当决定纹理的大小时,应当考虑纹理在设备上的实际特效。例如,如果纹理不会被使用特效的人近距离看到,可能就不需要太高的分辨率。
纹理的最大分辨率是 1024x1024。如果添加到项目中的纹理大于这个尺寸,将被自动调整大小。

2. 减少纹理的使用

修剪纹理很重要。例如,使用一个嘴唇纹理来创造一个口红特效,而不是一个全脸纹理。你也可以尝试多次使用同一个纹理。例如,平铺、镜像或旋转它,以产生更多的细节和变化。使用纹理图集是减少纹理数量的一个好方法。使用 TexturePacker 这样的软件,将多个小纹理打包成一个正方形的纹理。

3. 选择一个有效的纹理尺寸

确保纹理是正方形的,并且大小为 2 的幂(例如:2x2、4x4、16x16、32x32)。一些纹理压缩选项,如 PVR,要求纹理是这种格式。你可以将任何比例的纹理导入Spark AR Studio,但它如果不是 2 的幂的比例,纹理将不会被有效地使用,也将无法使用平铺以及某些可以提高性能的 LOD 功能。

4. 用阿尔法通道减少纹理的影响

Alpha 通道增加了纹理的大小。只有特效需要 Alpha 通道时才打开。例如,如果纹理有一个切出来的形状。
如果你使用 Alpha 通道进行 Alpha 混合,则更值得尝试加法或乘法混合。实验一下将混合模式 Blend Mode 改为加法 Add 或乘法 Multiply。如果特效看起来还不错,这是一个改善性能的好方法。
你也可以修改压缩设置以减少 alpha 通道的影响。
如果一个纹理包括完全可见或完全不可见的像素,之间没有任何过渡,使用 1-bit 阿尔法的 ETC1/ETC2,它的大小是带有全阿尔法的 ETC2 的一半。你也可以使用 ETC1/ETC2 RGB(无 alpha)来代替 ETC2 RGBA,它只有一半的大小。

5. 使用动画纹理

使用精灵片 sprite sheets 或图集纹理 atlas textures,而不是动画纹理的序列。这有助于提高性能,因为特效只需要加载一个纹理,而不是几个。
你也应该避免很长的 2D 纹理序列。如果可能的话,每隔一帧渲染你的序列,避免制作 24 或 30 FPS 的序列。
使用程序性纹理动画 procedural texture animation 而不是序列也会提高性能。

6. 使用可视化着色器来提高性能

可视化着色器允许你创建复杂的视觉特效,而不会对性能产生很大影响。

缩小和优化场景对象

这些是在场景标签中列出的对象。

1. 检查你的场景中物体的数量

不要在场景中添加超过 50 个对象。
这个数字指的是在场景选项卡中列出的对象,包括所有列出的东西,例如空对象、灯光和文字,还包括面部网格。
这个数字不包括资产,比如在资产面板中列出的纹理和材料。
3D 模型越复杂,场景中包括的对象就应当越少。在一个场景中包含几个高质量的对象,比添加大量低质量的对象更有利于性能。

2. 优化粒子系统

首先尝试减少粒子的寿命 Lifespan,尤其确保粒子不会超出相机可以看到的范围,你可以通过比较视窗中的可见部分和 Spark AR Studio 模拟器中的可见部分来检查这一点。
你也可以:

  • 设置一个较低的出生率 Birthrate
  • 使用两个粒子系统,放置在相同的位置,而不是使用一个高出生率的粒子系统。

减少灯光的影响

1. 使用多种光源

场景中的光源越多,对性能的影响就越大。有些光源对特效性能的影响比其他光源大。下面,我们列出了 Spark AR Studio 中的每个光源,按照影响由小到大排列:

  • 环境光 Ambient light
  • 方向性光 Directional light
  • 点光源 Point light
  • 点光 Spot light
  • 环境光 Environment light

    2. 从 2D 特效中移除灯光

    尽可能删除项目中自动包含的环境光 ambient light,例如,不需要真实照明的 2D 物体的特效。

节点与脚本

1. 如果你正在使用节点

将节点打组可以提高性能。你还应该避免重复的逻辑,比如多次计算同一个数值。

2. 如果你正在使用脚本

尽可能:

  • 避免使用订阅
  • 将变量铸成常量
  • 避免每一帧都有大量的回调和函数的脚本