背景
之前我不是说我去搞UE开发了吗?现在已经即将告一段落了(芜湖!!),我又能回去搞Android了,现在我想通过这篇文章来说一下我这个UE开发是在开发什么,分享一下在这个过程中我的一些思考。
数字人
我当前是通过Ue这个引擎来开发一款数字人的项目,至于数字人是什么呢?其实如果有关注元宇宙或是经常看直播的人就应该知道是什么,首先在我看来数字人其实就是"皮套人",在B站的有一个虚拟偶像直播专区,在这一个专区中就是那些主播通过数字人的形象来进行直播,当然啦,数字人也有高低之分,其中比较低级的就是"纸片人",大部分虚拟偶像直播间就是这种制片人,只有2d的形式,并且只有上半身可以动,不能旋转,不能活动双手,只有头部的活动和一些表情的变化。其中比较高级的一块,就是像"星瞳"、字节的"七海纳米"、“codemiko”这些,如果不了解的话可以在b站中搜索一下这些视频看一看,就知道这是什么了,仅是贴图片是说不清楚的,所以这里我就不贴图了(嗯,绝对不是我偷懒)。
驱动
然后数字人的驱动方式当前常见有
光学摄像头方式
光学摄像头方式(这种方式可以参考漫威的电影,大部分人是在绿幕摄影棚中进行表演,在里面的人大部分都是脸上画满白色的标记点(用于跟踪脸部表情),然后身上的衣服也是涂满的白点(动作捕捉),不同的就是在电影中是后期制作模型,而在这里则是实时驱动模型),这种光学摄像头的方式在我看来是最好的也是最贵的。
参考视频:https://www.youtube.com/watch?v=NW6mYurjYZ0
动捕设备方式
动捕设备方式,这种方式就是人们通过穿戴一些传感器,如三轴陀螺仪,惯性传感器等则好像传感器,然后把传感器装到人的四肢、头部、胸部等地方(越多越好,得到的数据越多,位置信息越准确),然后通过这些传感器的数据知道了真人在现实中时间中的坐标位置,和运动的旋转角度(首先在三维世界中是由3个维度的,就是x,y,z通过这三个维度可以知道某个东西在真实世界的位置,当然啦参考坐标需要你自己来定的,然后在现实世界中还有一个旋转坐标轴,yaw、pitch、roll,我们是通过这个旋转坐标系来知道我们在空间中的旋转运动,有了位置坐标系、旋转坐标系,我们就能表示物体在世界中的运动)。
当然啦这种方式是比较廉价的,其中也有分高低之分,最低成本是可以自己去淘宝买一些运动传感器,自己纯手工打磨制作,驱动自己写,运动算法自己写,这个算是最低的成本了,当然也是最累人的,这里我推荐是使用一些成熟的方案,在这里我会贴出业界两种常用的方式,一种比较便宜,一种比较贵
便宜的就是使用一些VR设备如使用Vive 的VR设备来进行动捕
vive 实例视频:https://www.youtube.com/watch?v=Khoer5DpQkE
这种方式比较便宜效果也过的去但有没有那么好(其实价格也不是很便宜),这种方式我是尝试过的,里面也有很大的坑,后面我会出文章来说的
Xsense:https://www.youtube.com/watch?v=UTXGaSZ6hf4tongz
这种是比较贵的,效果非常好(贵是真的贵,国内好像要十几万rmb...)这个我就没有尝试了
但是这种动捕设备有一个很大的痛点就是需要耗费较多的时间进行穿戴、定位(个人感觉比较麻烦)
AI摄像头驱动
这种方式算是最便宜的,效果也不差,仅是通过摄像头就可以实现了
摄像头的方式:https://www.youtube.com/watch?v=Qtjqti3AQ6s
这种方式我也做过,我也是最推荐使用这种方式来做。当然摄像头的方式也是有很多种的,其中也有很多使用的方式。
尽管在某一些比较精细的效果上比较差,但是整体效果是不错的,胜在够方便和够便宜
好的经过上面一些介绍,你应该对数字人有了一定的了解,下面我会说一下我对这一产业的一些想法,不用担心看不懂,我会尽可能用一下直白的语言去描述,尽量减少专业的术语,如果真的有兴趣去了解的话,又看不懂的点可以在下面留言或是自行去百度、Google。
感悟
数字人项目即将走向尾声,但是这个尾声仅是是对使用来讲,但如果是对于打通整个整个过程(从AI识别引擎选择、AI动作识别后的身体数据传输、在哪一个平台进行识别(web、android、IOS、python、c++)、Ue根据动捕数据驱动,模型形象创建、模型衣服、模型权重、服装碰撞、模型碰撞)仅仅只是一个开始而已,但是如果要打通这些关节的话要的成本太高了,不仅仅是Ue端可以做到的事情了,还是要求多种技术一起打通才可以做到的,并且即使是全部打通,但要做到工业级的水平还是需要每一个地方花费巨量的时间,如识别后获取到的动捕数据需要与相应模型进行参数调整,如IK算法,虚拟人物的形象创建还要花费更多时间的打磨,衣服的材质制作、衣服的折痕打磨,这些仅是冰山一角。所以整个项目停在这里是合理的。
在这里我想分享一下我对数字人这个项目的一点看法,首先在业内还是比较冷门的,用的人群还是偏少的,而相应的制作的公司也是不多,大多都是提供上面环节的某几环,能真正做完上述的整个工作流程还是偏少的(其实如果在不外包的情况下完成上述所有环节,那么这家公司的实力绝对不会名不经传,在这个领域是有分量的(不仅是数字人这一块,可以是游戏、虚拟制片、影视特效这一些))。所以绝大部分的公司都是提供其中一环,如乐道师提供AI驱动一块(当然也有传感器驱动这一块,个人感觉不是很行)、Marvelous公司提供传感器驱动的(就是卖设备的),大名鼎鼎的Xsens,这些公司都是提供数字人驱动服务的。至于其他环节就比较多的厂商提供了,这里我就只提及提供驱动服务的厂商(这个比较贴合我所做的事情),另外我不得不提一家厂商就是VUP,这一家真的很特别,他是专门做平台的,集成了市面上的一些驱动方式(不是自己做的),如一些免费的SDK驱动,然后可以让用户自己选择用哪一种方式进行驱动,而模型也是由用户自己去提供的。
所以我感觉以后这一块的发展也是这样,不会独自打通所有的环节,而是通过集成每个厂商的服务做成产品,然后向客户提供服务的。
上面就是当前的一些发展背景,当前的数字人生态的一些发展情况。
当前我们其实是有能力打通AI引擎识别,在Android平台、PC(Python)平台进行识别,获取动捕数据发送到Ue中进行模型的动捕驱动的,甚至将其封装成SDK来供客户使用,但是我目前是不推荐这么做,接下来我来讲一下原因和我自己的一些考虑。
1、首先当前我们的能力也仅是做完这个过程,而模型的精度、形状、服装、物理碰撞都是没有太大的能力的,但想效果出的来,上面的条件缺一不可,我们也没有能力打通所有关节,我后面会提及为什么当前缺一不可。
关于模型制作的大致过程可以参考下面这个视频
https://www.youtube.com/watch?v=xSn8d613eN4
这个视频基本是囊括了一个模型大致的制作过程,但是还有很多细节和点都没有展现出来。
其实我整个过程都大致走过一遍,当前我感觉模型制作这一块是最难的(走完之后发现自己真的没有什么美术天赋),而且又是最重要的,后面有机会的话我可能会出一些关于这些流程中的文章。
2、当前的环节是用户比较少的,没有太多的用户去关注这一块的发展,所以用户更多的是去关注产品的本身,也就是说是关注产品最终呈现出来的效果,而不是太多去关注产品背后的技术,如果模型的外表不佳,甚至可能认为就是你的技术不行(相信每个产品经理都会遇到这种情况,用户会因为你的UI设计不行而认为你的技术不行),这个就是为什么我上面说的整个流程缺一不可的原因。
用户少,做的公司不多,即使封装成SDK也不会有太多的公司去买,并且早期探索的这一些公司都是比较有实力的,是愿意尝试去打通整个流程的。所以当前的主流是将其做成一个完整的产品,直接提供给用户去使用。那么什么时候可以做成SDK呢?那个时候就是当用户数量激增的点,开始有新的公司想去做一块的服务,想入场,但却发现门槛这么高,他们就想去集成一些SDK服务,将其封装成产品提供给用户,而SDK就是起到降低门槛的作用。
那么这一切的前提是用户开始增加,关注这一块的人开始多了,那么如何增加关注的人呢?
(我自己的想法是提供一些低门槛的免费软件给人们用,如VSeeFace这些,先把市场做大,而用的人多了自然关注的人开始多了,他们会开始追求一些更高水准更高门槛的产品了,不再是这些烂大街的低门槛软件提供的效果了,这个时候客户就出来了,SDK应该就有市场了)
但是我相信随着时间的发展,更多的人会关注这方面,更多的人会加入进来,上面我所说的每一环的难度都会逐渐降低,会出现更多的技术,更多的方式,整个数字人的门槛会逐渐降低。我身在其中很能感受到这一点,我就举个例子,在5月之前有关数字人衣服制作的视频屈指可数,但是到了现在的9月份,有关数字人衣服的制作视频大量涌现出来。如果有更多的人参与进来,其中有部分人能分享他们的一些想法,分享他们的一些方法,相信这个过程会大大加速。这个就是为什么开源运动会成功的本质,更多人参与进来,分享他们的方法,分享他们的想法,更多的灵感,制作更多的轮子工具,更多的封装,进一步降低门槛,再次吸引更多的人进来,甚至有可能在其他的领域也会涉猎到。整个过程形成了一种正循环,然后爆发出更强的活力在这一个圈子中。这个就是开源的运动动力之处,后面我会继续进行数字人这一块的分享,希望这一块也能爆发出更强的活力。
最后在这里放一下早期的这个项目的一个测试视频连接: https://www.bilibili.com/video/BV1md4y1u7TX?spm_id_from=333.999.0.0&vd_source=43c0685941c01c19b322dc149929e541
大家也可以猜一猜这个是用哪一种方式来驱动的
最近的感想
这里是我自己个人最近做的事一些分享和心里的一些感悟分享,不感兴趣的话可以跳过这里。
首先我距离上一篇文章已经过去了好几个月了,没办法太忙了,而且自己的时间大部分都花在了Android上面和NDK上面(NDK真的是大坑啊,而且感觉本质也是算法和c的东西,和Android的关联都不太大了),没有太多时间出来写文章,最近临近项目的尾声,没有那么忙了,所以抽出点时间来写一下文章。
还有一个就是我之前一直说的一个"大活",从年前说到了现在,现在这个东西已经算是做好,但是卡在了性能这一块上面,所以最近在学一些算法的东西,看一下能不能提高一下性能。哎,大学算法没有学好,没想到这么快就要用到了。。。,我最近在学那些该死的算法,学到我头都大了,脑瓜子不好,只能一点一点来(该死的红黑树、B+树),真的是书到用时方恨少,感觉无论你从事哪一个方向,只要一直往前走最后都会学到这些底层的知识,网络协议就是最显著的。算法大家都是走不了的,只要你继续往下走,最终你都会遇到的。估计这篇大动作文章的出炉又要继续拖拖拖了。。。,没事好事多磨,相信各位都会理解的,期间我就补一下Ue相关文章吧。
既然我写了文章,那是不是可以催更康师傅的调试源码的文章了?