横向各向同性软组织的本构方程及有限元实现

|2021-06-03T17:04:02+08:006月 3rd, 2021|Creative|

前言 软组织的力学研究在近几十年内已经成熟,各种理论层出不穷,但总体来讲经历了三个阶段: 第一阶段,1940年Mooney提出了一个具有很强变形能力的超弹性材料的力学模型,1948年Rivlin对它做了改良,也就是现在流行的Mooney-Rivlin超弹性模型,目前对于超弹性材料的仿真都使用了Mooney-Rivlin。 第二阶段,1994年,Jeffrey Weiss 定义了纤维增强型Mooney-Rivlin,通过向量场控制当前构型的变形,这个理论为肌肉的力学仿真奠定了基础,并发表了论文(他博士读了九年,都在搞这个)。 第三阶段,2003年-2018年,在斯坦福大学跟工业光魔的共同努力下,肌肉仿真成功在数字人上应用,大幅提升了数字形象的真实感,目前 Ziva Dynamics,FACEGOOD 等公司也是类似技术路线。 我在2016年看到了Weta Digital一篇专访,放了这段肌肉仿真的视频( Weta Digital Horse FEM Simulation)它们从内到外做了一匹“真马”:骨骼层->肌肉层->筋膜层->脂肪层->皮层,深深被其震撼,了解到他们用到了有限元法(FEM),随后就沉迷这个技术了。我个人来讲喜欢写一些有难度的玩意,编译器、虚拟机、3D引擎、渲染器、物理引擎之类的都写过,这么牛逼的物理引擎不搞一下自然心痒得很,很幸运,是兴趣又跟自己的创业方向吻合,肌肉仿真的研发就这样开始了。刚开始对计算力学一窍不通,只好从头学起,一开始就像个无头苍蝇学习路线比较乱,有限元的书买了一堆,发现它只是个数值工具,想搞明白原理需要先看力学,力学里面又有经典力学、理论力学、固体力学、结构力学、材料力学、弹性力学,不知道从哪里出发,于是干脆全都看了一遍,最后范围逐渐缩小,聚焦之后学习起来自然就很高效了,现在已经在手撸有限元的C++实现了。 图(2)计算力学知名学者吴建营老师(左) 2017年FACEGOOD上线了表情捕捉产品,但当时对计算力学方向还是很迷惘,有幸遇见了吴建营老师,我把这个课题给他看了之后他给的反馈是“都是技术问题,没有理论问题,但是工程化方面人才比较缺”。听了这一番话我反倒是觉着靠谱了,工程化是我们的专长,这些年一直在做工程化的急先锋。FACEGOOD 搞仿真主要是提升数字人的真实感,例如只有从力学上模拟表情产生的全过程才能做到Physically Correct,这里面最核心的是解决人体软组织的力学建模问题,也就是需要得到韧带、肌腱、脂肪、皮层等软组织的精确力学模型。本文主要介绍软组织的数学建模以及其有限元的实现,读者需要具备变分法(Caculus of Variations)、计算力学(Computional Mechanics)、有限元法(Finite Element Method)等知识,熟悉横向各向同性(Transverse Isotropy)、不可压缩超弹性材料的应力、弹性张量等理论特性。按照本栏目一向硬核风格,直接给出完整思路,最后附上一段小DEMO。 认识韧带与肌腱 图(3) 人体有206块骨头,大部分骨头是不能直接向接触的,这样会有很大的摩擦,也没法运动。骨与骨之间并没有榫卯结构,也没有机械齿轮,把骨与骨连结起来的就是韧带和关节。从解剖学角度讲,韧带是骨与骨之间的直接连结,指的就是连接骨与骨之间的致密结缔组织。 每一块骨骼肌都分成肌腹和肌腱两部分,肌腹由肌纤维构成,色红质软,有收缩能力,肌腱由致密结缔组织构成,色白较硬,没有收缩能力。肌腱为肌肉末端的结缔组织纤维索,肌肉藉此附着于骨骼或其它结构。 材料初步(超弹性,横向各向异性的Strain Energy方程推导) 大部分生物材料的力学特性都是各向同性的,他们对载荷的变形反应取决于材料的分布方向,这种材料变形行为是材料内部超微小结构造成的结果,也就是跟纤维束有关,最常见的是胶原纤维、弹性纤维。弹性纤维主要存在于韧带和脉管壁,它与胶原纤维共同存在, 赋予组织以弹性和抗张能力。弹性纤维如同橡皮带一样,它的长度能够伸展到正常长度的几倍,当收缩时又能恢复到原始长度。组织的弹性则是通过改变散布在弹性纤维中胶原的数量来控制。 图(4)肌肉结构 [...]

FACEGOOD 提出高精度表情解算算法

|2021-06-04T11:09:29+08:006月 3rd, 2021|Creative|

前言 表情动画方面在ilm、weta digital等为首的特效公司目前都已经在使用肌肉了,这里说的表情肌肉不是ziva dynamics那种计算果冻效果的,例如在用力摇头的时候,口轮轧肌会抖动,这类高频motion就是果冻效果,利用有限元分析可以对这类弹性力学现象仿真,ziva的肌肉是基于这类理论实现的。表情动画的肌肉方案有两个路线,根据人脸从内到外建立肌肉模型,解决肌肉运动后,再推算出皮肤的形变,最终产生表情,理论上,只要肌肉的运动足够接近真实,这种做法的效果是最好的,在2016年研究过这个方向,有篇论文做了一些初步研究:http://run.usc.edu/cs520-s12/facial/facial-survey.pdf。当时判断这个方向太理想化,难度非常大,就放弃继续深入了,而且目前看起来学术界在这个方向上也没有继续发展。第二个路线,也就是我们目前采用的路线,ilm跟weta digital也用了同样的技术路线,在alita、avenger、the planet of apes里面大放异彩,效果甩blendshape动画好几个维度,我简单介绍一下思路,人的同一个表情,在每次出现时幅度跟形状都是不同的,我们只要保证计算出来的表情跟实际误差最够小,就可以接近演员的表情了,怎么做到这一点呢? 传统绑定的问题 我们先看一下Blendshape绑定的问题,bs绑定有个巨大缺陷,就是我们假设了人的每个表情只是幅度的不同,形状都是一样的。但实际情况是,同一个表情,每次做的时候形状也是不同的,如果微分到人脸上的每个点,这个解基本上是无穷的。试图解决这个问题,只能把bs数量放大,但实际上到了几百个bs后人工绑定的要求就非常高了,1k以上的绑定需要手艺很好的老师傅才能完成,而且国内这种人非常少,国外的绑定成本高得离谱,而且最终问题还是解决不了,因为bs动画无论加到多少,它都是一维的。 粗暴一点,拿iphonex举个例子,51个bs,bs动画的数学原理就是对这些表情求和,最终得出表情,每次只是变化幅度不一样,形状完全一样,线性组合嘛,问题就在这个线性,每次变化都是一维的,就算加到10w个bs,它也是一维的。给出公式: F(w)是最终表情,Base是自然pose,对其余表情求和,w就是权重,很显然这个过程是线性的。第一代表情捕捉技术就是对w求值,这个公式的逆过程,因此像facegood P1、faceware、dynamixyz这类产品非常依赖于绑定,绑定做不好,算出来的表情是没法看的。上面指出了bs绑定的理论缺陷,但也并非bs完全没用,我们的解决方案是这样的,在bs绑定的基础上计算了一次肌肉,保留bs主要是为了方便动画师对动画二次加工,保留bs绑定,看一下我们是怎么解决这个缺陷的。 首先第一步是bs权重的计算,bs绑定,w的计算就是表情捕捉要计算的结果,计算公式就是求和公式的逆过程,把上面换个形式,如下图: faceware跟dynamixyz在算这个权重w的时候也是有很大缺陷的,给到一个视频后,需要用户k几个关键pose,然后跟当前帧做线性回归,当用户k的pose超过个位数后,回归的结果会变得混沌,精度变得非常差,这就是为什么当台词多的时候,尤其是对白超过30秒后,效果非常差,另外还有个致命弱点,因为是根据pose来推算权重w,就导致人脸的局部肌肉的运动是算不出来的,例如苹果肌,一般只能由嘴部表情联动,这种效果是不精确的,容易导致僵尸脸。 FACEGOOD 方案 我们的做法是不用用户k关键pose,我们根据当前表情,计算出所有bs的权重,最终得出当前表情的粗解,如上图公式。为什么叫粗解,因此此时的结果是无法完全匹配到演员的,原因我们开始已经解释过了,人的表情,每次的形状都是有差异的,bs只记录的某个时刻的外观。我们要做的就是在bs权重计算完之后再做一次修正,如下图: 此时计算完bs权重后,可以看到内嘴唇是没有完全匹配到演员的,我们在这个基础上计算肌肉,这一步已经完全脱离了bs的一维线性空间变成顶点动画了。 肌肉计算完后,可以看到嘴唇已经完全匹配了,这时bs动画变为顶点动画,这是全自由度解,完美匹配真人的表情。尤其是细微的、高频的微表情,例如嘴唇的粘连、眼轮匝肌四周微小高频的motion等。第一步bs权重的粗算得到了八九不离十的大表情,最终算完肌肉后,演员的“神情”就被计算出来了,尤其是眼睛中的情绪,都可以还原,下图为完整算法。 以下这种级别的匹配度,可以说100%匹配,bs绑定就算细分到1k也是做不到的。因为人的维表情变化是无穷的,表演的灵魂恰恰都在这些微表情中。

FACEGOOD 推出10万点人脸关键点跟踪,重新定义工业级人脸3D重建

|2021-06-04T11:22:20+08:006月 3rd, 2021|Creative|

前言 目前无论是学术界还是工业界对人脸的研究有两个方向,其一民用级,通过技术泛化为用户提供低精的产品,这些技术在工业级高精度上是无法满足需要的,主要因为算法泛化丢失了人脸的低频信息(五官的细微差别)。其二工业级,从人脸生物力学仿真层面,持续提高精度,FACEGOOD走在这个方向,在技术适当泛化的基础上,其将人脸关键点跟踪推向了极致,目前已将精度推到10万级,该技术可用于工业级换脸、表情捕捉等场合。 人脸关键点检测在安防、金融、娱乐等领域具有广泛的应用,可以说已经成为非常基础的算法,我们先来回顾一下它的发展历史,Tim Cootes & Chris Taylor在1995提出了一种新的方法(Active Shape Model)开创了人脸关键点对齐的先河,ASM引入了统计模型来解决对齐问题,紧接着三年之后,他俩在此基础上发展出了Active Appreance Model,这个方法有很重的历史地位,要知道当时人脸对齐问题是个很棘手的事,传统的CV算法太粗暴,难以应付人脸这种高纬特征,AAM之后算是进入了一个正确的方向,为后来神经网络方法奠定了基础,基本思想是ASM并没有考虑到纹理特征,只是对landmark训练了一个统计模型出来,AAM进一步优化了ASM,在回归的过程中加入了纹理特征,这样就解决了特征的泛化匹配的问题,使得人脸对齐更加鲁棒。20年之后,在众多研究者不断推动下2D人脸对齐问题已经彻底解决了,算法也已经白菜化,随便在github都有大量的精度不错的开源项目。 3DMM 与此同时,在1998年有两位研究人员又开辟了一条新赛道,他们提出了3D对齐算法,将人脸对齐推向了一个全新的维度,这套方法目前已经成为现在工业界主流的算法流程,现在工业界习惯上把它叫做3DMM,虽然并不严谨,但我们姑且沿用这样一个定义,3DMM计算结果是在人脸上拟合并投影出一个3D点云,它的应用就非常丰富了,美颜、表情捕捉、通过照片生成一张人脸等等都用了类似的技术。 公式1 如上图所示基本思想是:一张脸可以由多个不同的人脸通过线性组合得出,换句话说,给出一张人脸,要得出3D模型,就是一个系数的回归问题,了解AAM的同学一眼就看出来这个公式就是AAM公式,也可以说这是AAM的另一种应用,其中S是平均脸,s是特征向量,ai是权重系数。Tmodel是用来拟合人脸纹理,同样使用线性组合得出。3DMM是一个非常初期的idea,他的计算结果并不理想,现在来看只能算玩具级,主要是PCA在精度上的丢失是很严重的。 2008年,一篇论文的发表将3DMM的精度进一步推广,公式1只采样了人脸在某一时刻的表情,因此在表情上没有考虑到其他情况,导致精度丢失。这篇论文增加了一个维度,因此叫“双线性模型”,在人脸基础上加上了表情因素,这样的计算结果更加可信。 公式2 这个双线性公式在公式1的思路上增加了一个系数a,表示不同表情,b表示不同的个体,w是人脸数据库,到此3DMM在算法流程上完整了,为日后Facewarehouse等应用奠定了基础,后面的故事大家都知道了Facewarehouse推出了自己的数据库及应用思路,讲到这里我们对前面这些研究做个总结。 3DMM缺点是很明显的,在技术泛化这条路上一路狂奔,忽略了人脸非常多的细节,尤其是高频低幅度的表情细节,在个体上体现非常明显,造成这个局面的原因有两个,基于统计的回归并不精确,是一个模糊解,3D数据库模型的采集多数用成本低廉的设备生成,精度不高,两者加起来,3DMM在高精应用场景可以说完全无法满足需求,更不可能达到工业级超高精度需要。 FACEGOOD 3DMM 图示1 BFM & SFM 模型 图示2 FACEGOOD 模型 为了更精确的计算人脸的3D信息,并能适用于工业级业务场景,FACEGOOD团队采用相机阵列方式采集了100个不同个体的3D模型,每个人有43个不同的表情,以及他们对应的高精度皮肤材质数据,至于这些数据建立了FACEGOOD 3DMM模型。 目前开源的数据库主要有BFM跟SFM两个,同时还有一个Facewarehouse仅供学术研究使用,对比这些数据库,FACEGOOD 3DMM主要体现在精度上,抛弃kinect这类民用级扫描技术,使用相机阵列的方式,可以完全重建人脸的所有肖像特征,如上图所示,图示2是FACEGOOD数据,图示1是SFM数据,后者在细节上损失很大,基本上只保留了人脸的大概特征。 神经网络的优势主要在技术泛化上有很好的表现,但在高精度场合并非理想选择,为了达到高精度跟踪人脸的3D特征,包括脸型、五官的深度、微表情的变化等,FACEGOOD研发人员使用传统算法实现了这一套方案,目前已经在超写实数字人上开始应用。 公式3 [...]

返回顶部