这是我参与8月更文挑战的第25天,活动详情查看: 8月更文挑战
Spark AR 是 Facebook 免费创作 AR 作品的平台,使用户能够为 Facebook 和 Instagram 创建交互式增强现实体验,超过 40 万名创作者,190个国家/地区,使用 Spark AR 来创作自己的AR作品
由于该软件无需任何编码知识即可使用,因此任何人现在都可以在 AR 世界中几乎没有经验地制作下一个疯狂式传播的 Instagram AR 特效,引领世界潮流。
专门的 AR 滤镜设计师单价甚至可达到 1000 美元到 3 万美元不等。
优化纹理
除了本系列之前的建议外,试验不同的纹理压缩设置也会对效果的性能产生很大的影响。
减少纹理分辨率
使纹理尽可能的小。
当你决定纹理大小时,有必要考虑纹理在设备上的实际效果。例如,如果使用效果的人不能近距离看到的一张纹理,那么可能就没有必要使用高分辨率。
纹理的最大分辨率是 1024x1024 。任何你添加到一个项目的纹理,比该尺寸大的话,则将自动调整大小。
减少纹理的使用
如果可以的话,修剪纹理是非常重要的。例如,使用嘴唇纹理来创造口红效果,而不是整个面部纹理。
你也可以尝试使用多次使用相同的纹理。例如,平铺,镜像或旋转它来生成更多的细节和多样性。
使用纹理图集是减少纹理数量的一个很好的方法。使用像 TexturePacker 这样的软件将多个小纹理打包到一个方形纹理中。
纹理压缩的同时,保留图像质量,如下图所示
- 左:Original, 32 bits/pixel
- 中:Dithering, 16 bits/pixel
- 右:Compression, 4 bits/pixel
选择一个高效的纹理尺寸
确保纹理是正方形的,大小为 2 的次方(例如:2x2, 4x4, 16x16, 32x32)。一些纹理压缩选项,如PVR,要求纹理是这种格式。
你可以在 Spark AR Studio 中导入任意比例的纹理,但如果不符合 2 的幂次的比例,纹理就不能尽可能有效地使用。您也无法访问某些有助于提高性能的平铺和 LOD 特性。
通过 alpha 通道减少纹理影响
alpha 通道增加纹理的大小。只有当你知道你的效果需要它们时才打开它们,例如,如果一个纹理有一个被切割出来的形状。
如果您使用 alpha 通道进行 alpha 混合,则值得尝试加法或相乘混合,即尝试改变 Blend Mode 为 Add 或 Multiply 。如果你的效果看起来仍然不错,这是一个提高性能的好方法。
您还可以更改压缩设置,以减少 alpha 通道的影响。
如果一个纹理包含完全可见或完全不可见的像素——它们之间没有任何过渡——使用带有 1 位 alpha 的 ETC1/ETC2。它的大小是 带有完整的 alpha 的 ETC2 的一半。你也可以使用 ETC1/ETC2 RGB(没有alpha) 而不是 ETC2 RGBA - 也可以节省一半大小。
纹理在 iOS 设备的使用情况
以下格式选项可用于 iOS 设备:
- PNG -当选择此选项时,质量设置为高,无损重新压缩用于确保小文件大小。当加载到内存中,这些纹理将采用 24 或 32 位每像素,这取决于是否存在 alpha 通道。
- JPEG -使用 MozJPEG 优化 JPEG 文件。当加载到内存中,这些纹理将采用 24 位每像素,没有 alpha 通道。
- PVRTC RGB(2位- 2位每像素,没有 alpha 通道。
- PVRTC RGBA(2位-每像素2位,带有 alpha 通道。
- PVRTC RGB(4位)-每像素4位,没有 alpha 通道。
- PVRTC RGBA(4位)-每像素4位,带有 alpha 通道。
iOS 上的 PVR 格式具有最好的渲染性能,尽管它们的文件大小往往比 PNG 略大。
纹理在 Android 设备的使用情况
以下格式选项适用于 Android 设备:
- PNG -当选择此选项时,质量设置为高,无损重新压缩适用于确保文件更小些。
- 当加载到内存中,这些纹理将采用 24 或 32 位每像素,这取决于是否有 alpha 通道。
- JPEG -使用 MozJPEG 优化 JPEG 文件。
- 当加载到内存中,这些纹理将采用 24 位每像素,没有 alpha 通道。
- ETC2 RGB(4位)-每像素4位,没有 alpha 通道。
- ETC2 RGBA(8位)-每像素8位,alpha 通道。
- ETC2 RGB A1(4位)-每像素4位,1 位 alpha 通道。
像素可以是完全透明的,也可以是完全不透明的。 ETC 格式在 Android 上实现了最佳的渲染性能(尽管它们的大小往往比 PNG 稍大一些)。
如果是旧的 Android 设备的话,可以选择以下格式选项:
- PNG -通过 Zopfli 使用无损压缩,以确保小文件大小。当加载到内存中,这些纹理将采用 24 或 32 位每像素,这取决于是否有 alpha 通道。
- JPEG -使用 MozJPEG 优化 JPEG 文件。当加载到内存中,这些纹理将采用 24 位每像素,没有 alpha 通道。
使用带动画的纹理
使用子画面表单(Sprite Sheets,有的会离谱地误译成 “雪碧图”“精灵图” =_=)或纹理图集而不是动画纹理序列。这有助于提高性能,因为效果只需要加载一个纹理,而不是多个纹理。
你也应该避免长 2D 纹理序列。如果可能的话,每隔一帧渲染你的序列,避免制作 24 或 30 帧的序列。
使用程序纹理动画代替序列也将提高性能。
使用视觉 shader 来优化性能
视觉 shader 允许你创建复杂的视觉效果,而不会对性能有很高的影响。