大家好,我是EpicGames中国的技术美术孙丹璐,明天为大家带来的分享是Metahuman原理及流程浅析。
当初数字人是个十分炽热的题材,不论是游戏、影视、直播、工业、广告等畛域都有着大量需要。然而传统数字人的制作在设施,人力和工夫老本上都十分昂扬的,每个流程,每一个环节比方扫描角色、绑定,动捕和面捕进行驱动,也都须要肯定的技术门槛能力达到的。所以在市面上的大多数案例中,比方大家看到的AAA游戏中,基于老本,个别只有无限的配角会采纳残缺的高精度数字人成果,其余角色的精度都绝对低很多。
基于此,咱们提供了一套计划叫做MetaHuman Creator,疾速和容易地创立独特高保真的数字人类的工具,你能够间接操纵面部特色,调整肤色,并且从预设的身材类型、发型、服饰等范畴中抉择,在metahuman中甚至能够编辑角色的牙齿,在角色制作实现后,你的角色会蕴含残缺的绑定并能够间接在空幻引擎或者maya中制作动画。
为了达到零门槛创立数字人,可见即所得的指标,咱们提供了基于Epic生态的三个套件进行协同工作,通过MHC疾速在线制作数字人,利用Quixel Bridge导出数字人,在空幻引擎中利用到游戏或者影视当中。
https://v.qq.com/x/page/s3312...
我想先为大家展现下通过MHC进行捏人,MHC依靠于网络,通过Pixel Streaming在网页端交互应用,在这个视频演示中,我捏出一个全新的数字角色理论只用了4分钟,大家能够看到操作也很直观易懂,上手门槛非常低。在捏脸的局部,面部混合提供三种模式 。
第一种是混合模式,最粗粒度的捏脸,通过左上方的混合圈,增加3~6个角色区进行插值,你每管制一个特色点进行捏脸,就是采样这几个预设角色的特色点去做插值。
第二种模式是挪动模式,依照五官划分了特色点,在这个模式下能够疾速的批改五官。
第三种模式是雕刻工具,是Creator提供的最细粒度的工具,能够针对最小特色点,比方鼻尖,来区进行细节调整,Creator中大家须要留神到这里的雕刻和Zbrush中的雕刻是存在一些不同,MHC中的雕刻, 是通过你冀望雕刻的状态,在基因库中索引一组面部特色点再进行交融。另外Creator中常见的一个误区是,挪动和雕刻工具,实际上与你左上角预设好的几个角色是无关的。它挪动和雕刻都是在整个基因库中进行索引,并不依赖于左上角预设好的角色。
另外,其实挪动工具和雕刻工具,是能够一一对应起来的,比方挪动模式的眉弓处控件,对应的是雕刻工具下 ,眉心、眉头、眉峰、眉尾、这四个特色点。
另外在Creator中也能够调整肤色和纹理细节,皮肤的纹理选项岂但能够减少脸部外表的细节,也会对面部的状态产生影响,比方皱纹对于面部状态其实是有一个形变的。
Creator中也提供了绝对灵便的妆容设置,比方粉底,眼影和眼线,各部位的腮红、口红,可能进一步缩小用户对于数字角色进行二次批改的需要和开销。
在身材的塑造上,MHC提供了预设好的18种体型进行抉择,头部目前并不会随着身材的高度或体型抉择主动的产生扭转。所以其实有的时候你抉择体型之后,可能看起来身材和头的比例有些奇怪,所以咱们提供了头部缩放性能。
头部的缩放并不是齐全等比缩放,而是会更符合人体特色,你能够看到,你当初缩放头部的时候,你的脖子并不会随之有限的增粗,这样缩放也能较好的解决头颈和身材的连接。
咱们来看下MHC背地的技术,首先咱们会通过4D扫描大量的事实人类面部,通过人工和ML解决数据,提取出每个角色的特色点信息,存入一个叫做DNA的数据格式中,而DNA用于形容角色的外观、骨骼绑定,最初咱们把这些信息寄存到GenePool中,GenePool是咱们的一个数据库,用户每一下捏脸操作,实际上就是在GenePool的数据库中进行索引,混合,最初基于你捏好的数字角色,也会生成一份举世无双的DNA数据。
在体型方面,采纳了传统流程制作的体型。次要是目前咱们还没有较为欠缺的身材数据库,所以没有方法和头部一样能够交融不同体型的特色点来捏体型,另外当初咱们也不提供利用缩放进行任意的体型调整的设置,次要起因是整体成果不能达标,比如说部分调整过体型之后,你的身材和脖子的接缝处并不是一个很好解决,另外服饰也是很大的问题,部分放过的身材很难做到布料贴合。
在纹理方面,皮肤的纹理是通过扫描数据中的纹理进行合成来生成制作,以确保达到更实在的成果,扫描的纹理拆散成低、中、高频率的细节纹理,用于在Creator中自定义的混合,而其余中央应用的纹理,则应用更传统的管道去进行制作。
另外MHC是一个基于云端的APP,咱们把MHC放在了云端。次要是因为以上数据量,尤其是面部GenePool和纹理数据的数据量十分十分微小的,而且将来会不停裁减,单就数据量和运算压力恐怕不太适宜放在个人电脑上进行运算,所以咱们采纳了基于云端的计划,同时云端还有个益处,更新迭代很快,很多问题和改善能够间接后盾实现,不须要每一位用户都进行频繁的更新。为了把云端的MHC输送到浏览器,咱们采纳了Pixel streaming,Pixel streaming是一个基于空幻引擎的流送技术,在云端服务器上运行空幻引擎应用程序,通过WebRTC将渲染的帧和音频流送到浏览器和挪动设施,不晓得大家有没有意识到,应用了pixel streaming意味着,后盾跑的也是空幻引擎,在云端的空幻引擎中制作数字人,导出到本地的空幻引擎里进行应用,所有参数,模型,毛发,布料,纹理,材质,LOD参数都能够一一匹配,这是真正的所见即所得。
从MHC捏好之后,就能够通过Bridge下载你制作的数字角色了,关上Bridge能够看到Metahuman的分栏,外面会实时更新你捏的MH,在Bridge须要配置你心愿下载的纹理分辨率。在点击download的时候,会有一个主动步骤是生成,生成是依据捏人时候设置的数据,比方皮肤,以及download设置的参数,基于这些数据生成纹理和LOD,因为后盾跑的是空幻引擎,所以模型以及骨骼的LOD,都是基于规定,应用引擎内LOD减面和骨骼LOD剔除达成的,而对于毛发的LOD,为了保障成果,是手动生成的插片和模型LOD,MetaHuman的资产生成可能须要一点工夫来解决,这次要取决于所抉择的资产是什么,它们的纹理分辨率以及你当初的网速,还有就是会思考到你当初的Bridge队列中有多少资产须要生成,均匀来说,如果你下载的是一个有1K纹理的MetaHuman,须要大概20分钟来生成和下载。
在下载的时候抉择的纹理分辨率,并不是一个相对分辨率,而是一个指引的分辨率,也就是说如果抉择下载8K的,实际上只有奉献最大的normal和cavity纹理是8K的,而皮肤albedo是2K的. 这其实和皮肤自身的个性无关,个别SSS皮肤散射的成果靠近于低频的滤波,成果有点相似于blur之后的纹理,所以albedo的高频细节自身就会被SSS的shading个性抹掉,咱们对albedo的奉献做了成果和效率上的评估,发现8K 4K的albedo绝对于2K的成果改善简直是肉眼不可辨别的,所以在这里应用了2K的分辨率。而roughness纹理,是应用空幻中一个自带流程将法线转换为粗糙度,通过Bridge导出能够导出到maya和空幻引擎中,接下来咱们来剖析在空幻引擎中的MH。
导入引擎后,会有一个专门的Metahuman文件夹,对于所有Metahuman生成的数字角色来说,无论是男性还是女性,有些资产内容都是共通的,咱们把这些存储在MetaHuman/Common文件夹中,而每个人特有的资产则存储在相应名字的文件夹下。
位于Metahuman文件夹下,Metahuman的身材各部件会以一个蓝图组合到一起,蕴含躯干,面部,面部各种毛发,出于性能和成果的均衡,并且为了适配不同的平台,不论躯干还是毛发,都有本人的LOD信息。
比方头部咱们设置了8层LOD,咱们为每层LOD设置了肯定规定,每层LOD都有独立的,顶点量、blendshape,、关节数、动画纹理、蒙皮影响等区别,blendshape因为性能开销比拟高,所以从LOD1开始就没有在应用,而纹理动画则是因为须要读入的纹理十分多,所以LOD2开始没有在用,当然从屏幕上看这些头部,可能LOD3或者LOD4开始 ,之后的成果会显得有点毛糙,然而LOD的抉择肯定是要综合思考到屏占比来去掂量成果的。
比方我在对应LOD的屏占比下来截了这三张图,别离是拉到最近时候的LOD0,中距离看到全身时候会切换到的LOD3,以及远距离切换到的LOD7。
我在雷同间隔下,把模型强制按LOD0渲染作为比照,也就是图上当初新增的LOD3和LOD7旁边的对应的头部和全身,能够看到两者的区别并不是特地大,也就是在这样的间隔下,在这样的屏占比下,LOD切换对于画面的成果并不会影响太大,LOD其实不光是对于性能有晋升,对于画面成果也是会有肯定改善的,比方大家常见的画面失真摩尔纹,引入LOD就能够改善这种状况。
这是身材模型的LOD数据,身材只有4层LOD,以画面上的裤子为例LOD0是有一万五千面左右,而LOD4 大略是一千五百面左右。
对于骨骼而言,骨骼模型的LOD能够大量缩小skinning的开销,然而他还须要骨骼的LOD,骨骼的LOD能够很大缩小动画Evaluation中采样、插值、混合的开销。那么身材骨骼LOD0是150根骨骼,LOD4是55根骨骼。
大家其实留神到,每个不同的局部可能LOD层数不统一,比如说方才的头部是8层LOD,而身材的LOD只有4层,同时要思考到,因为身材和头部的屏占比不统一,所以计算出来的LOD也会不统一。那就会导致成果上呈现一些不匹配的问题,比方身材和头部的接缝处没有方法齐全匹配,或者说,咱们思考毛发的话,屏占比很小的眉毛groom可能永远没有方法渲染到LOD0,而只有很近处才须要的汗毛groom,却因为突围盒是整个面部,所以会在中距离处也会渲染到LOD0,这是一个性能上的节约。那么为了解决这个状况,引擎退出了LODSync component,通过配置LODSync component在这外面配置不同部位的奉献和计算形式,能够让不同部位也能够做到共享一套LOD。
因为工夫关系,可能没有方法剖析引擎中metahuman每一个细节,上面我会以绝对动态和动静资产为辨别,联合可伸缩性,次要介绍上面几个次要的局部。
首先是毛发,毛发包含:头发,眉毛,面部的绒毛,睫毛以及胡子。
毛发采纳了引擎的Groom毛发零碎,这里不会细开展groom自身,而是介绍Groom对于Metahuman的一些解决,以及值得注意的中央。
Groom毛发的所有LOD,不论是插片还是mesh,都应用同一个母材质。
毛发的材质参数与MHC中的参数是一一对应,能够看作MHC的“开展版本”。比方能够看到材质中,有红色素,黑色素,如果你在MHC调整头发色彩的时候留神过,这些参数就是MHC中的调整参数及数值。
另外Groom毛发的参数是通过Hair Attributes传入到毛发材质中的。
将深度纹理输出到hair attributes的形式,是在groom asset中,cards分页下指定对应纹理,比如说深度纹理,个别输送到插片毛发中是会用于、pixel、depth、offset,他是改善头发与头皮穿插的成果,另外是Coverage用于毛发的opacity,外面比拟非凡的是Attribute纹理,Attribute纹理对应的是Root UV和Seed,Seed也就是毛发的unique ID,个别是用于在材质中增强头发的发丝感。
大家晓得,后续咱们会为挪动端减少多种shading model,然而以后挪动端还不反对,所以以后只能fall back到default lit。
毛发在成果上是有肯定特殊性的,他基本上来自于两个大的性能,一方面来源于毛发的各向异性个性,另外一个是层层毛发会具备肯定的透射散射,那为了改善挪动端的成果,毛发材质中为挪动端独自减少了各向异性的成果,就是当初截图中的这一段,至于毛发透射散射的局部,因为挪动端只采纳了一级LOD采纳插片毛发,其余都是Mesh毛发,在mesh毛发上比拟难以体现毛发间细腻的透射散射,所以综合考量,咱们并没有在挪动端去解决这块。
方才其实是多种shading model,然而都写在同一个材质中,这其实是源于引擎最近几个版本提供的新机制,材质零碎并不锁定整个材质的shading model,而是把shading model作为一个参数去进行一个输出,而后不同的material attribute输出到不同的feature level下,这样子就能够做到一个材质实现针对不同平台,依照不同的shading model去进行渲染。
毛发的多级LOD,Groom, 插片,mesh,这些不同状态的资产是通过Groom文件中的LOD零碎联合到一起,通过LOD分页,能够对这些LOD进行对立治理。
这是MH毛发的LOD数据,LOD 0–1 应用strand based hair,个别用于高端平台,比如说次世代主机和高端PC,LOD 2–4 基于插片毛发,LOD 5-7 是基于简化的mesh毛发。
这是MH中一个角色的毛发LOD展现,咱们能够看到其实有几层因为面数比拟少,所以会变得稠密。
这个解决方案之一是应用遮罩纹理放在头顶皮肤,引擎也提供了对应工具,就是说右键groom asset, 能够生成毛囊纹理,此外,对于十分短的短发,其实并不适宜创立插片或者mesh来做为LOD,这个时候也能够通过groom asset生成发束纹理,等会讲到皮肤,咱们也会提到这张发束纹理。
皮肤和头发的设计是有一些相似的:比方只有一个材质资产。材质属性与MHC中是一一对应的,在中高端设施上,皮肤的渲染模式采纳了Burley SSS,挪动端因为没有这样的shading model,所以会主动回退到Default Lit。
皮肤的纹理方面,非凡点在于有一套表情纹理,是一个根底姿势和三个表情姿势,通过在做表情时交融表情纹理,它能够进步整体的细节成果。
表情纹理次要用于形容皮肤在表情比拟大、皮肤褶皱比拟深的时候的状态,比方左图是根底姿势,右图是致力抬眉毛或者额头,有显著抬头纹时的状态。
能够看到,表情纹理会用到大量的纹理数,因而对于带宽和渲染都会造成肯定压力,挪动端是没有应用表情纹理的。
对于皮肤,除了绘制皮肤自身的成果和妆容信息,有时候还须要绘制毛囊或者发束,比如说演示的这个角色,头发十分短,头发是没有制作插片毛发或者Mesh毛发而是把短发的发束纹理,绘制到了皮肤的头皮部位。
头皮上绘制短发和毛囊的这张纹理,就是通过方才提到的Groom asset生成的发束纹理。
下面介绍的groom毛发,还有皮肤都是引擎中已有的机制,可能很多用过虚构引擎开发的同学都曾经十分相熟了,上面着重介绍下表情。
为了实现数字角色真实可信的表情,metahuman采纳了骨骼形变,blendshape材质中退出表情纹理的混合计划,表情自身来自于骨骼形变,而blendshape用于补充轻微肌肉细节,表情纹理次要用于增强皮肤呈现褶皱时候的体现,大家可能还记得,在metahuman面部LOD0有600多根骨骼,同时又要保障不同LOD的体现基本一致,还要管制这三套参数,整体加起来是非常复杂繁琐的。所以咱们采纳了来自3Lateral的Rig Logic零碎,Rig Logic是一个十分非常复杂的规定集,能够从简略的输出来驱动数以千计的Blendshape和骨骼,表情纹理,Rig Logic运作须要一些模型的额定信息,比如说模型的特色数据,以及模型的rigging行为,提供这个数据的,就是咱们在一开始提到的每个模型独有的DNA文件,DNA文件用于形容角色的外观和骨骼绑定,基于这些,即便是不同的metahuman面部的骨骼,蒙皮,面数等信息有所差别。也能够通过应用这样一套的RigLogic,用一套驱动数据驱动所有metahuman的表情,你不须要对每一个角色都去从新的制作。
如果你在引擎中关上模型头部,能够看到details中有指定了一个DNA asset文件,这个文件来源于你在捏脸的时候,依据捏脸的数据生成的,DNA 文件是与捏的MH一一对应的关系。另外如果你把metahuman导出到Maya中,也会看到提醒,是否要装置RigLogic,包含指定这套DNA。
RigLogic驱动表情采纳的是RigLogic表情曲线,每个RigLogic表情曲线, 对应一组骨骼和blendshape还有表情纹理。
比方我通过sequence生成这样一个打哈气的表情,生成好之后是基于你K的数据,生成了RigLogic表情曲线,而RigLogic表情曲线再进一步驱动骨骼,blendshape,以及你的表情纹理,并且这套曲线能够在动画中二次调整,你能够看到我方才扭转这条曲线,模型会随之发送扭转,另外Rig logic表情曲线在runtime下也能够做出调整。
方才提到面部表情是由骨骼、blendshape、面部表情纹理独特形成,对于根底的面部表情都是基于骨骼的blendshape奉献轻微的肌肉变动。表情纹理奉献做表情时皮肤的褶皱,对于面部表情的品质,这里做了个简略的比照,从左到右别离是LOD0,1,2,4,除了面数和纹理自身精度的升高导致的影响外,表情方面,最右边是蕴含所有信息的表情,也就是说骨骼、blendshape、表情纹理这些所有信息的表情,第二张去除了blendshape的奉献,第三张去除了表情纹理的奉献。那么能够看到,比照起来,第二张和第一张的区别不是那么大,只在眼周有一点点渺小的变动,而对于第三张和第二张的比照其实差异是蛮大的,她的鱼尾纹都会消失掉,也就是说对最终品质而言,大多时候表情纹理的奉献是大于blendshape的。第四张是绝对于第三张做了进一步的减面,自身的面数只有1400面,同时也没有表情纹理的改善,在表情的体现上会弱一些。那么在引擎中制作表情,不论是通过录制或者是手调,都是通过Control Rig操作RigLogic表情曲线来做到的,咱们来看下Metahuman中的Control Rig。
Metahuman中,Control Rig能够认为是分为了3个绑定分层,首先是木偶绑定,也就是MetaHuman的第一个绑定分层,用于动画师通过Control Rig来发明动画和表情的。
身材和面部的Control Rig都位于Common文件夹下,关上能够看到残缺的ControlRig实现,身材Control Rig是比拟惯例,是间接驱动骨骼,而面部的Control Rig则是驱动Rig Logic 表情曲线。
当然对于动画师而言,不太须要关注Control Rig的实现,理论须要的还是一套好用的K动画工具,对于动画师在引擎中K动画,应用办法也很简略,就是间接把角色蓝图或者角色拖到sequencer中,因为模型身上有Control Rig信息,就会主动呈现身材和面部的Control Rig界面,对于身材而言,你还能够用Metahuman中预设好的Editor Utility Widget,疾速抉择Control Rig以及切换 IK FK。
对于面部Control Rig,Face Control Rig中分为三块,一块是用于面部捕获的backwards solve,一块是forwards solve,也就是用于咱们在sequencer中K动画,另外还又一个比拟小的模块是setup event中增加了一个眼部关注点的模块,因为方才介绍了面部表情是非常复杂的,面部的Control Rig是驱动Rig Logic 表情曲线,Rig Logic这套零碎会依据模型对应的DNA asset信息,把Rig Logic 表情曲线映射到blendshape和面部骨骼以及动画纹理上。
对于面部咱们提供了一套预设好的Control Rig面板,这里做个简略的操作演示,在这里每个控制器对应一组肌肉群,另外面部Control Rig提供了watch的小模块,你的眼睛会始终盯着这个模块,在模块挪动时不止眼球会一直产生转变,眼周的肌肉也会做出正确的扭转。
另外咱们也提供了一套繁难的面部Control Rig,间接附丽在面部上,这样能够更直观的进行表情制作。
如果你是为了在游戏中应用,在Sequencer用Control Rig作好动画后,为了性能思考,最好把K好的数据以动画文件生成进去,引擎默认提供了这样的工具,右键模型,能够生成animation文件,身材的animation保留是骨骼的transform信息,而面部的animation, 保留的是rig logic表情曲线。
接下来是Control Rig的第二个绑定分层,变形绑定 :变形绑定用于驱动所有的旋转和构造关节,模型身上会指定post process animation blueprint,运行一套用于runtime的Control Rig。
以头部为例,应用了RigLogic在runtime运行,这里容许各种动画接口驱动或者运行RigLogic表情曲线,造成最终的面部表情动画。
最初一个绑定分层是服饰,服饰次要是采纳Control Rig来去修改体现,但也不是每一个服饰体现都会用Control Rig,比如说连帽衫的帽线和脖子前方的帽子褶皱,其实是采纳了Rigid Body作为物理模仿计划。
在身材骨骼方面,为了体现更真实可信,绝对于之前大家比拟相熟的小白人,MetaHuman的身材骨骼方面减少了一些额定的关节,减少的这些关节大多数是肢体末端的叶子关节或是辅助关节,根本只会影响到体现,然而须要额定留神的是减少了额定的脊椎关节,这样会导致骨骼层级有所变动,所以如果要复用小白人制作的动画资产的话,是须要做一个重定向的操作。
对于肢体末端关节,咱们对于手指的骨骼进行了一个细化,另外减少了新的脚趾关节。
方才提到如果你想要让metahuman复用商场中基于小白人制作的动画,你须要重定向的操作,重定向的话,你是须要重新制定脊椎骨骼的映射关系,对于其余的新增骨骼局部,因为小白人没有对应骨骼,就会跳过这节骨骼的计算,所以并不会受到影响。
最初还有两点补充,表情DCC只能应用maya,而不能应用motion builder和3Dmax,这其实是因为3Lateral本人外部始终应用的maya,也就只有针对maya的RigLogic插件,所以如果须要在DCC中制作表情,因为依赖于rig logic,所以只能应用有rig logic插件的Maya。其次是咱们倡议把Maya作为动画制作工具,而不是批改工具,我晓得,其实很多用户心愿能去二次批改metahuman,咱们实际上是不举荐这么做的,起因在之前也提到过,批改模型可能会让你模型的DNA文件是没有方法做到齐全匹配的,从而rig logic驱动的表情依赖于DNA,然而他通过这样的驱动的话,会呈现一些不那么匹配的状况,所以在有一些表情下边会看起来有些假,所以咱们举荐的流程是只有Maya作为动画制作工具。当然我也晓得当初社区中曾经有很多人做过尝试,用RigLogic驱动本人的模型,能够看到真人的部分和非真人的成果还是很棒的,这里筛选了两个来自中国开发者的分享。
这是来自北理工数字表演与仿真实验室的尝试,他们有一套本人的扫描角色库。
这是David Jiang的分享,他应用的是本人创作的兽人形象。然而这里仍然要强调,其实咱们并不举荐这样的流程,能够给大家分享的是咱们其实也在外部感知到客户的这样的需要,所以咱们也在踊跃的尝试这件事,不远的将来会给大家提供一套更灵便的捏脸包含二次批改的一个机制。
谢谢大家,明天我的分享就到这里。
Q & A
Q:为什么Metahuman Creator捏不出明星脸的亚裔女性?
孙丹璐:因为Metahuman Creator中的捏脸,取决于数据库中扫描的人脸数据,目前尽管数据库中亚裔是占了四分之一,然而因为疫情起因,整体数据库的总量并不是特地大,所以有些脸型或者面部特色并没有收录到库中,那么这些脸型和面部特色就比拟难捏进去了,那么基于此,其实在利用方面,尤其是游戏行业的利用,咱们更倡议把Metahuman Creator用于捏公众脸的NPC下面,目前 咱们第一优先级就是裁减数据库,并且咱们会征集这些数据起源笼罩各个行业与民族,争取增加更多类型的数据特色到这个库中。
Q:Metahuman Creator为什么不建设本地库?
孙丹璐:其实这个问题在方才的演讲中曾经简略提到过了,先是这个数据库 数据库中的数据是十分十分宏大的,你在捏脸的时候须要解决的数据量也十分大,那么 思考到你的硬盘或者是内存 cpu和gpu的运算压力,它都是十分大的 对于电脑的配置要求是很高的,咱们的冀望是让每个用户都能比拟低门槛的去打造数字人,这个低门槛当然也包含了硬件设施,另外就是Metahuman还是一个绝对晚期的状态,它的更新迭代是比拟快的,间接放在云端能够防止每个用户去频繁的进行更新,次要是出于以上这两个思考,咱们最终把Metahuman Creator放在了云端。