杨净 萧箫 发自 凹非寺
量子位 报道 | 公众号 QbitAI

最近,我身边的朋友,突然一个个都变成了圣斗士!

像这种比较炫酷的“飞天”黄金圣斗士,连影子都惟妙惟肖的:

打开网易新闻 查看更多图片

还有这种在办公室偷偷变身双子座圣斗士,想要拯救世界的:

又或者是在自家小花园里变成处女座圣斗士,打破次元壁的:

打开网易新闻 查看更多图片

还有白羊座、天秤座、射手座圣斗士……怎么回事?

原来,这是一群程序员做出的移动端3D圣衣特效,现在只用一部手机,就能随时随地“变身”圣斗士。

又一童年梦想被实现了有木有!

如果不想打开摄像头,也可以只用一张照片,就能成功“变装”:

不过,要实现这样贴合的效果并不容易,单从技术本身来看,就充满了挑战性。

在他们之前,甚至根本就没有人将这类技术应用到手机上。

而整个项目也是联合渲染、设计两个团队,一鼓作气耗时10个月才完成。

毕竟要守护心中的雅典娜,多少付出都是值得。

电影游戏界的“重金特效师”

这项耗时10个月打造的技术,就是好莱坞大片和3A(高开发成本)游戏大作中才会用到的动作捕捉

说到这项技术,或许有的人还会感到陌生,但像《阿凡达》《指环王》这样的好莱坞电影、或是《刺客信条》《生化危机》这样的3A游戏,你一定听说过。

没错,这其中的许多经典特效、角色动作设计,都采用了动作捕捉技术。

由于能直接记录动作,这项技术能大幅缩短制作特效的时间,同时能让角色表情、动作看起来更真实。

对手K动画设计师来说,能降低设计工作量;对虚拟直播(Vtuber)、体育和医疗等领域来说,动作捕捉不仅能实现逼真的动作还原,还能实现实时动作记录

听起来非常诱人,但这其实是一项高门槛技术

首先,要想实现逼真的动作还原效果,就必须对硬件提出高要求,主流的惯性和光学动作捕捉技术,基本都需要传感器,便宜的效果还不好

以(惯性捕动)游戏《舞力全开》为例,虽然硬件成本低廉(甚至能用手机当传感器),但由于只有手部传感器,无法检测腿部活动,体验并不好,还诞生出了像“轮椅舞王”这样的梗。

打开网易新闻 查看更多图片

其次,为了将干扰、延迟降至最低,需要预留空间。以专业的Vtuber(虚拟主播)为例,他们直播所采用的动作捕捉技术,基本都需要10×10米的大房间来降低干扰。

最后,数据计算量大。动作捕捉系统获得的只是一大堆坐标数据,后期不仅要进行专业数据处理,同时还需要高性能计算机显卡来实现。

集硬件成本、环境、计算量等限制为一身的动作捕捉,要是之前说要把它用到手机上,可能立刻会有人说这是痴人说梦。

然而科技的发展总能给我们带来意想不到的效果。

微视团队中一群做计算机视觉的程序员,就只用一部手机将黄金圣斗士的铠甲贴合在人物身上,而且确实成功了,实现了实时的处理效果。

但手机端动作捕捉技术,并不好做。

自研移动端算法,筛选7k+顶点

只用一部普通的手机,意味着两个难点:计算量受限坐标深度只能靠预测

相机生成的照片,通常只有2D信息。要想从2D中还原出3D信息,需要找到一个能够预测坐标深度的函数,使之预测的3D信息尽可能逼近真实值。

对于真实度要求很高的动作捕捉技术而言,这意味着精度和实时性都要受到挑战。

目前已有的移动端AI技术,只能实现实时动作捕捉的一部分功能,包括人体/人脸检测、和基于2D/3D骨骼关键点的姿态估计技术,也就是我们常见的“火柴人”算法。

但“火柴人”算法显然没有3D Mesh贴合度高,因此团队决定,将3D Mesh搬到移动端上,自研一套基于3D Mesh的移动端姿态估计算法。

这套算法相当于重建人体表面的7000多个特征点,以及15000多个三角面片,不仅能够还原人体的基本动作,还能预测出人体的高矮胖瘦。

打开网易新闻 查看更多图片

除此之外,团队还从3个方面,对模型进行了整体优化。

其一,从动作捕捉精度和模型大小两方面,对自研模型进行调试。

据微视团队表示,移动端已有的基于3D骨骼关键点的驱动法,虽然可以驱动虚拟人体,在同一场景下做各种动作,但这套算法存在一些不足,需要自行调整。

例如,算法偶尔会出现不正常的抖动,包括虚拟人物突然“形变”的情况,如下图脚掌翻转。为此,团队还给算法加上了平滑滤波,使得人物动作看起来更真实,进一步提升模型精度,避免像下面这种抖动。

△脚掌不正常的翻转抖动

同时,在精度以外,团队还要保证在移动端实现3D Mesh。为了做到这一点,除了在其他模型方面尽可能整合压缩以外,团队也对模型本身进行了一个简化。

其二,从数据采集来看,团队也下了不少功夫。

由于移动端3D Mesh数据需针对性采集,微视团队搭建了自动化的数据采集系统,帮助快速采集到高质量动捕数据。

虽然Kinect的实时动作捕捉效果一般,但用于数据采集还是非常不错的,三台结合起来就能获得完整的深度信息。

为了确保模型的泛化性,除了尽可能多找18~60岁的不同人物数据进行采集以外,程序员们还采用了数据增强和半监督学习来增强模型的泛化能力。

数据增强这块,为了加强模型辨认人体与周围环境的能力,程序员们将获取到人体的mask信息进行提取,随机贴到其他背景的图片上,创造出更多不同背景信息的图片;同时,团队也采用了神经渲染、GAN等技术,来生成更多的训练数据。

半监督学习上,程序员们结合辅助任务,对2D关键点模型进行训练、提升模型的泛化能力。

其三,就是团队对实时性和特效渲染做的兼顾。

模型结构的整体设计和优化都只是“基本操作”,例如将串联运行的模型改成并联运行等;在推理上,团队还基于优图的TNN移动端深度推理框架,实现了模型的高效推理,最终将模型的推理时间从15ms降低到了11ms

这里面的一个难点,就是要确保渲染效果和移动端性能(实时性)的兼顾,既要让画面看起来比较精致,又不能让软件运行速度太慢。

因此,团队先采用了自研3D渲染引擎增强光影效果,并利用SSAO、IBL等技术增强阴暗角落处的阴影质量,使得整体渲染效果与目前主流手游非常接近;

同时又进一步适配不同机型,采取分级策略,确保在各种手机上都能取得不错的运行性能。

显然,要想实现上面这些技术,呈现出最终的圣斗士特效,微视的设计师们同样功不可没。

甚至可以说,微视团队中,就连设计师也都是“技术硬核”的存在。

设计师也学代码?

从最初产生想法、打磨研发,一直到最终呈现,10个月的时间,对于一个研发团队来说并不短。

当中,除了技术本身的实现难度之外,还牵涉到整个系统的协同配合。

从最开始的CV技术研发、到移动端的部署,以及渲染,最后制作成一个特效工具……整个技术生产链条的打通需要各个团队充分合作。

就比如,像把盔甲穿在人身上,这样一个看似简单的动作,就需要开发、算法、设计三个组的同学协同调整。

一位设计组的旁友直呼:这部分的钻研和调整超过了制作模型的时间。

但即便如此,他们也有自己的制胜法宝。

首先,目标一致

大概也是因为围绕圣斗士这一主题,团队内部也有很多的年轻人,所以整个技术磨合阶段并没有出现过什么Battle

嗯,为了同一个梦想,各自都在燃烧自己的小宇宙!

另外小小剧透一下,由于整个链条已经打通,接下来团队会用技术做一些发散,尝试其他IP角色。

(疯狂暗示)

其次,就是技术思维

即便是与核心技术没有那么强关系的设计组,也坦言前沿技术的更迭很快。

可能去年学的新技术,可能到今年就已经过时了,要多花时间一些时间钻研前沿技术。

尤其是在被问到给当前要毕业的设计同学建议时,更是言简意赅:

学点代码,很有帮助

确实很技术,很硬核。

一边不断接触各种前沿技术,享受着从研发到落地整个链条,另一边还能完成“拯救世界”和“守护女神”的梦想,这是团队内部提及最多的成就感。

也唯因如此,才能将硬核技术攻克下来,成为每个人都能触达的好玩特效。

最后还想再替相信「光」的年轻人问一句:

奥特曼,真的不打算安排上么?

(PS:想要变身黄金圣斗士的朋友,带上照片戳下方地址即可玩耍~)

传送门:

https://h5.weishi.qq.com/weishi/account/login?r_url=https%3A%2F%2Fisee.weishi.qq.com%2Fiseev2%2F1%2FwZm2wHfO0%2Findex.html%3F_wwv%3D4096%26h5material_id%3Dshengdoushi_h5%26h5material_category%3Dh5_activity%3Fchid%3D401003001%26attach%3Dcp_reserves3_4040010001%26upload_from%3D2770