特效性能优化建议
一、认识性能
特效道具的「性能」是综合测试的结果,测试范围往往包括其录制帧率、内存增量、加载耗时、CPU消耗等,这些都可能导致道具在手机上表现异常。
因为性能是个统称的综合概念,所以并不是说确定加某一个东西就性能不佳,需要设计师综合考虑。
- 认识录制帧率
特效道具里常说的在手机上的「录制帧率」可以简单理解为:该特效在手机上每秒可显示的帧数。目前平均每秒30帧是满帧(即帧率为30),我们测试通过标准是「Android中端机型达到15帧,iOS达到8帧」,也就说我们需要让特效至少达到Android15帧、iOS8帧的帧率。如果帧率过低,主观感受就是卡顿了。
测试常遇到9帧、12帧,这些在中端机上就能明显感觉到卡顿。
注意:性能里提到的「帧率」跟软件制作动画的「帧率」并不是一个意思哦,性能里的录制帧率跟道具素材里是否有需要播放的动画,以及动画的播放速率无关。
- 认识内存增量
假设用户的手机未使用这个特效道具,内存为300MB,使用了之后内存变为400MB,那么该道具内存增量为100MB。
内存增量是性能的重要指标之一,如果内存增量偏高,就容易导致崩溃,而低端机型上内存增量尽量不超过100MB,如果内存增量到200MB,则线上崩溃的风险会大幅提升。
内存增量跟「图片」的分辨率有很大的关系,所以尽可能减少同时间加载的图片的分辨率,避免大量使用全屏素材。
- 认识加载耗时、包大小
加载耗时则是用户在使用这个特效的时候,从「点击使用」到「特效加载显示在手机屏幕上」的时间。加载耗时往往跟特效的「包大小」相关。
常说的「包大小」其实就是这个道具资源包的大小,目前道具包大小不允许超过5MB;而在 像塑 内也可以通过预览窗口的右下方实时看到该道具的包大小;在保证素材清晰度的情况下,尽可能减少包大小。
二、如何优化性能
- 3D性能综合优化建议
影响因素 | 给设计师建议 |
模型 | 在保证效果的前提下尽量选择面数和顶点数少的3D模型,尽量精简骨骼数; |
材质 | 多材质球对性能消耗明显,多个模型表现同样效果尽量使用同一个材质球(比如人的两只耳环、两双鞋等等) |
降低导入的贴图尺寸大小; | |
尽量避免大量使用带复杂法线贴图、纹理贴图的材质球; | |
如无需要,关闭材质的「Alpha Test」; | |
尽量不要使用过于丰富的骨骼+物理效果来模拟「毛发、绒毛抖动效果」,官方正在推进相关材质的建设; | |
在不带阴影的情况下,多个平行光源可以合并成一个平行光源; | |
没有光影需求的情况下,可以关闭所有模型/蒙皮渲染组件下的「投射阴影」选项; | |
多人脸 | 多个模型均挂在到同一个人脸下,跟踪人脸越多越耗费性能; |
关键帧动画 | 制作关键帧动画时,降低FPS和帧率; |
- 2D性能综合优化建议
影响因素 | 给设计师建议 |
素材大小(直接影响内存增量) | 在保证人脸贴纸、美妆的清晰度情况下,尽可能压缩素材(如基于800*800像素的图片基础上尽可能的压缩大小,建议压缩到512*512px;); |
能合并的图层,尽可能合并图层; | |
全屏素材(540*960 | |
美妆 | 如果眼妆有两层或者多层,尽可能绘制在一张图上再导入; |
尽可能使用性能耗费较小的美妆素材; | |
尽量不要使用美妆来做人脸贴纸效果; | |
将美妆组合,这样道具自动合并美妆图层; | |
形变 | 尽可能少叠加使用人脸形变; |
序列帧 | 尽可能的少使用序列帧,或者减少帧数; |
多人脸 | 尽可能把一个工程文件中的人脸贴纸、美妆均跟踪同一个人脸; |
多效果 | 尽量少使用耗性能的2D效果,如背景抠图、分屏、Blingbling、染发; |
手部贴纸 | 无需手部精准跟随的贴纸,请选择「非精准跟随」,减少手部关键点算法开启; |
- 「帧率/内存不通过」优化建议
影响道具帧率的核心元素是「图片分辨率」,其次是「序列帧张数」。
- 降低图片分辨率
针对道具里所有图片资源,在不影响效果的情况下做到最小尺寸。
举个例子,美妆的腮红素材图片,可以降低到640*640px以下(建议压缩到512*512px)。
- 减少序列帧张数
2D贴纸使用序列帧的时候,在保证效果的情况下尽量减少序列帧张数。
举个例子,尽量将2D贴纸的序列帧张数,控制在20张以内,最多不要超过50张。
- 美妆特别优化建议
- 美妆合组:使用多个美妆效果的时候,将美妆效果创建在同一个组内,这样能够减少美妆的性能消耗。
注意该组内,仅能有美妆效果,请不要把其他的效果也放入该组,否则不能减少美妆的性能消耗。
- 眼妆合并:如果有多层眼妆,尽可能在一张图上绘制,变成一个眼妆图层。
- 使用性能消耗小的美妆:性能耗费情况:美瞳>眉毛>面具>白牙>眼妆。
- 「加载耗时优化」建议
减少加载耗时的最佳方式,就是减少包大小;而减少包大小的最佳方式,就是压缩每个素材的大小。
比如说同样是「512 * 512px」分辨率的图片,A图片大小为0.2MB,B图片大小为0.5MB,那么使用A图片的包大小就会减少;
又比如说,同一个3D模型文件,A模型是1MB,B模型是2MB,那么使用A模型的包大小就会减少;
因此建议在保证效果的情况下,尽可能压缩素材的大小。
三、3D资源规范
一个3D效果的基本组成
在了解一个3D效果组成之前,我们需要先了解一些基础的概念:
- 模型:通过专业的3D绘图软件制作而成的三维物体,并有其对应的格式文件;
- 纹理(Texture ):可简单理解为每个物体表面不同的样子(比如说木头上的木纹),通过纹理可以让模型看起来更真实;
- 贴图(Map):贴图不是「图」,而是一种映射技术,是把纹理通过UV坐标的映射关系,将其映射到三维物体上,最简单的形式是将一张纹理图片( PNG格式 )贴到模型的表面以表现其纹理;
- 材质( Material):是模型表面可视属性的组合体,能够整体表现光照对物体的影响,展示其光学特性(比如反射、折射等);
这是一个3D的模型文件 | 然后给它贴上表面的纹理贴图 | 或者使用材质球 |
只有模型的效果,可以看见整个是灰色的,没有表面的效果 | 将一张贴图文件贴在模型表面 (一张纹理贴图文件) | 使用某个材质球,并对该材质球的参数进行调整 |
概念介绍
在绘制3D素材之前,我们需要准备相应的3D绘图软件,最常用的则为(如 Cinema 4D、Maya、3D Max、Blender等。
文件格式 |
|
关于网格 |
|
关于骨骼 |
|
导入规范
模型相关
模型制作 |
不支持在 Docs 外粘贴 block |
模型文件格式 |
|
模型面数 |
|
骨骼动画 |
|
也可参考以下图例进行模型制作和导出:
(以下两张图解由一位认证特效师制作提供,在此提出感谢~)
导入EC的设置可参考:
材质/贴图相关
材质Material |
|
纹理贴图文件 |
|
其他 |
|