常见问题 / 特效性能优化建议 /

特效性能优化建议

2D/3D特效性能优化建议

一、认识性能

特效道具的「性能」是综合测试的结果,测试范围往往包括其录制帧率、内存增量、加载耗时、CPU消耗等,这些都可能导致道具在手机上表现异常。

因为性能是个统称的综合概念,所以并不是说确定加某一个东西就性能不佳,需要设计师综合考虑。

  1. 认识录制帧率

特效道具里常说的在手机上的「录制帧率」可以简单理解为:该特效在手机上每秒可显示的帧数。目前平均每秒30帧是满帧(即帧率为30),我们测试通过标准是「Android中端机型达到15帧,iOS达到8帧」,也就说我们需要让特效至少达到Android15帧、iOS8帧的帧率。如果帧率过低,主观感受就是卡顿了。

测试常遇到9帧、12帧,这些在中端机上就能明显感觉到卡顿。

注意:性能里提到的「帧率」跟软件制作动画的「帧率」并不是一个意思哦,性能里的录制帧率跟道具素材里是否有需要播放的动画,以及动画的播放速率无关。

  1. 认识内存增量

假设用户的手机未使用这个特效道具,内存为300MB,使用了之后内存变为400MB,那么该道具内存增量为100MB。

内存增量是性能的重要指标之一,如果内存增量偏高,就容易导致崩溃,而低端机型上内存增量尽量不超过100MB,如果内存增量到200MB,则线上崩溃的风险会大幅提升。

内存增量跟「图片」的分辨率有很大的关系,所以尽可能减少同时间加载的图片的分辨率,避免大量使用全屏素材。

  1. 认识加载耗时、包大小

加载耗时则是用户在使用这个特效的时候,从「点击使用」到「特效加载显示在手机屏幕上」的时间。加载耗时往往跟特效的「包大小」相关。

常说的「包大小」其实就是这个道具资源包的大小,目前道具包大小不允许超过5MB;而在 像塑 内也可以通过预览窗口的右下方实时看到该道具的包大小;在保证素材清晰度的情况下,尽可能减少包大小。

特别提醒

特效性能是一个综合测试的结果,性能测试不过关并不一定是3D特效的问题,有些特效即使没有用到3D效果,但是使用太多2D效果一样会导致性能问题。

二、如何优化性能

  1. 3D性能综合优化建议

影响因素

给设计师建议

模型

在保证效果的前提下尽量选择面数和顶点数少的3D模型,尽量精简骨骼数;

材质

多材质球对性能消耗明显,多个模型表现同样效果尽量使用同一个材质球(比如人的两只耳环、两双鞋等等)

降低导入的贴图尺寸大小;

尽量避免大量使用带复杂法线贴图、纹理贴图的材质球;

如无需要,关闭材质的「Alpha Test」;

尽量不要使用过于丰富的骨骼+物理效果来模拟「毛发、绒毛抖动效果」,官方正在推进相关材质的建设;


在不带阴影的情况下,多个平行光源可以合并成一个平行光源;

没有光影需求的情况下,可以关闭所有模型/蒙皮渲染组件下的「投射阴影」选项;

多人脸

多个模型均挂在到同一个人脸下,跟踪人脸越多越耗费性能;

关键帧动画

制作关键帧动画时,降低FPS和帧率;

  1. 2D性能综合优化建议

影响因素

给设计师建议

素材大小(直接影响内存增量)

在保证人脸贴纸、美妆的清晰度情况下,尽可能压缩素材(如基于800*800像素的图片基础上尽可能的压缩大小,建议压缩到512*512px;);

能合并的图层,尽可能合并图层;

全屏素材(540*960

美妆

如果眼妆有两层或者多层,尽可能绘制在一张图上再导入;

尽可能使用性能耗费较小的美妆素材;
性能耗费情况:美瞳>眉毛>面具>白牙>眼妆;

尽量不要使用美妆来做人脸贴纸效果;

将美妆组合,这样道具自动合并美妆图层;

形变

尽可能少叠加使用人脸形变;

序列帧

尽可能的少使用序列帧,或者减少帧数;
单个素材帧数不超过30帧,且最多不超过70帧;

多人脸

尽可能把一个工程文件中的人脸贴纸、美妆均跟踪同一个人脸;

多效果

尽量少使用耗性能的2D效果,如背景抠图、分屏、Blingbling、染发;
如果需要使用,请不要同时添加多个分屏、多个Blingbling;

手部贴纸

无需手部精准跟随的贴纸,请选择「非精准跟随」,减少手部关键点算法开启;

  1. 「帧率/内存不通过」优化建议

影响道具帧率的核心元素是「图片分辨率」,其次是「序列帧张数」。

  1. 降低图片分辨率

针对道具里所有图片资源,在不影响效果的情况下做到最小尺寸。

举个例子,美妆的腮红素材图片,可以降低到640*640px以下(建议压缩到512*512px)。

  1. 减少序列帧张数

2D贴纸使用序列帧的时候,在保证效果的情况下尽量减少序列帧张数。

举个例子,尽量将2D贴纸的序列帧张数,控制在20张以内,最多不要超过50张。

  1. 美妆特别优化建议
    • 美妆合组:使用多个美妆效果的时候,将美妆效果创建在同一个组内,这样能够减少美妆的性能消耗。

注意该组内,仅能有美妆效果,请不要把其他的效果也放入该组,否则不能减少美妆的性能消耗。

    • 眼妆合并:如果有多层眼妆,尽可能在一张图上绘制,变成一个眼妆图层。
    • 使用性能消耗小的美妆:性能耗费情况:美瞳>眉毛>面具>白牙>眼妆。
  1. 「加载耗时优化」建议

减少加载耗时的最佳方式,就是减少包大小;而减少包大小的最佳方式,就是压缩每个素材的大小。

比如说同样是「512 * 512px」分辨率的图片,A图片大小为0.2MB,B图片大小为0.5MB,那么使用A图片的包大小就会减少;

又比如说,同一个3D模型文件,A模型是1MB,B模型是2MB,那么使用A模型的包大小就会减少;

因此建议在保证效果的情况下,尽可能压缩素材的大小

三、3D资源规范

一个3D效果的基本组成

在了解一个3D效果组成之前,我们需要先了解一些基础的概念:

  1. 模型:通过专业的3D绘图软件制作而成的三维物体,并有其对应的格式文件;
  2. 纹理(Texture ):可简单理解为每个物体表面不同的样子(比如说木头上的木纹),通过纹理可以让模型看起来更真实;
  3. 贴图(Map):贴图不是「图」,而是一种映射技术,是把纹理通过UV坐标的映射关系,将其映射到三维物体上,最简单的形式是将一张纹理图片( PNG格式 )贴到模型的表面以表现其纹理;
  4. 材质( Material):是模型表面可视属性的组合体,能够整体表现光照对物体的影响,展示其光学特性(比如反射、折射等);

这是一个3D的模型文件

然后给它贴上表面的纹理贴图

或者使用材质球

只有模型的效果,可以看见整个是灰色的,没有表面的效果

将一张贴图文件贴在模型表面

(一张纹理贴图文件)

使用某个材质球,并对该材质球的参数进行调整

概念介绍

在绘制3D素材之前,我们需要准备相应的3D绘图软件,最常用的则为(如 Cinema 4D、Maya、3D Max、Blender等。

文件格式

  • 常见的模型文件格式有 obj、fbx: obj 格式是静态模型文件,不包含动画、材质特性、贴图路径等信息; fbx 格式则是更为通用的模型文件,包含动画、材质特性、贴图路径、灯光、摄像机等信息;

关于网格

  • 网格(Mesh)是由顶点、边和面构成的集合,网格看上去就是一个三维物体的轮廓。

关于骨骼

  • 在模型里增加骨骼,能让每根骨骼跟模型的某些顶点相关联,所以当产生运动的时候这些顶点会随骨骼姿势变化而变动,从而产生骨骼动画;

导入规范

模型相关

模型制作

  • 统一软边处理,统一法线制作;
  • 制作完成的模型要居中枢轴(世界坐标系中心点)、清除历史和冻结变换;
  • 支持所有mesh导出一个fbx文件,导入Creator会自动拆分为独立的mesh文件;
  • 导出勾选【几何体:切线/副切线和三角化】、【动画:动画】、【变形模型:蒙皮、混合变形】;
  • 模型的scale(缩放)参数禁止为负数;
  • 如果需要制作3D头饰,请先下载头模:

不支持在 Docs 外粘贴 block

模型文件格式

  • 仅支持fbx格式(2014-2020版本)
  • 暂不支持导入obj;
  • 文件名不可包含空格、中文和特殊符号,可以使用"_"或者"-";
  • 尽量压缩fbx文件的大小,建议单个不超过10M;

模型面数

  • 每个模型的子mesh面数不得超过20000面
  • 仅支持三角面(Triangle);

骨骼动画

  • fbx模型文件中可以包含骨骼动画,导入Creator后自动解析,不支持骨骼镜像;
  • 导入Creator后,有骨骼动画的模型根结点「RootNode」不能重命名;
  • 单个网格骨骼数量建议不得超过40个
  • 一个顶点最多受4根骨骼控制
  • 默认fps30帧,导出前需要烘焙每一帧骨骼动画信息;
  • 绑定骨骼前需将模型移动到居中枢轴(世界坐标系中心点)、清除历史和冻结变换;
  • 支持dynamic joint物理抖动,只需绑定骨骼,在对应entity添加动力学组件即可。

也可参考以下图例进行模型制作和导出:

(以下两张图解由一位认证特效师制作提供,在此提出感谢~)

导入EC的设置可参考:

材质/贴图相关

材质Material

  • 不支持解析模型材质,均需要在Creator调试材质
  • 或者直接导入纹理贴图;

纹理贴图文件

  • 贴图源文件需为 .png 格式;
  • 单张图长宽乘积不超过1024px*1024px
  • 仅支持8位图;
  • 为了保证效果,宽高尺寸请均设置为 4 的倍数;
  • 请在保证清晰度的情况下,压缩贴图大小

其他

  • 不支持Shader编辑;