ue4 命名插件_Faceware Live Client插件开发

  Hey~ 

我们又见面啦~

ab1de6dfbc4d1e094ab91f3e3cb0e789.png b33e46b476e7a7b9030f08f00cbd6301.gif

2019.08.16

Faceware Live简介 Faceware Live 是一套面部实时捕捉的方案,广泛用于 3A 游戏和动画制作。 Faceware Live 是一个由两部分组成的软件系统,用于跟踪实时面部表演,并根据表演来驱动数字角色。视频源输入到运行 Live  Server 的 PC , Live Server 会实时分析和跟踪演员的面部,并将跟踪数据流式传输到对应的 Live Client 插件。插件会解析 Live Server 发送过来的数据,并驱动角色面部以匹配演员的表演。   Live Server 虽然是商业软件,但是你可以在官网上申请免费试用,官网上还可以下载到 Live Client 的插件,使用文档、和测试用的资源等。 Live Client 插件支持主流的工具,包括 Maya, MotionBuilder , Unity 和 UE4 等。 Faceware Live  软件系统: •  L ive Server •  Live Client  

Faceware Live Server的截图:

553a26690fded0863732a00811e55b4f.png     标准的 Faceware Live 工作流包含了下列步骤: •  运行 Live Server ,并设置好相机源。 •  校准角色,为了最佳的跟踪。 •  加载 Live Client 插件,并设置好角色。 •  数据流传输跟踪数据到 Live Client 插件。   Faceware 官方的 Unity 的插件是免费的,但是官方没有提供 UE4 版的插件,只有第三发公司( GlassBox )开发了一款收费的插件 Live Client for UE4 。为了 UE4 项目需求和后期扩展, R&D 组编写了 UE4 版的 Live Client 插件,功能和收费版插件相同。开发 UE4 版的 Live Client 插件看似很复杂,实际上在你熟悉 UE4 和 Faceware 之后,开发的工作并没有想象中的复杂。在这里分享下大致的过程,希望对大家开发类似插件时有帮助。插件开发 首先要创建基础的 UE4 插件,先把插件的大体结构搭建好。包括创建 Module ,注册相关的 Settings ,因为 Live Client 需要设置的参数不是很多,不需要创建定制的编辑器,使用 ActorComponent 就能满足要求。 Live Server 是通过 TCP 发送控制器数据的,所以接下来需要创建处理网络通信的类 LiveConnection 。网络通信使用了线程来处理,所以这个类需要继承于 FRunnable 。接下来就是创建基本的网络消息处理的循环,包括创建 Socket 对象,连接到服务器,读取数据,处理网络异常等。这部分和通常的网络编程没有太多区别,网上也有很多教程和例子。由于网络通信是独立的线程,写入数据时注意加锁,也要防止死锁。   网络部分需要注意的是,为了简化调用, Socket 使用的是 Blocking 模式。但 Blocking 模式在某些情况下会造成阻塞,比如在连 接服务器时,如果服务器连不上, Socket 的 Connect 方法会阻塞很长时间,直到超时返回,这样会造成 UE4 失去响应很长时间。为了避免这个问题,可以在 Connect 调用前,切换成 NonBlocking 的模式,然后循环检测是否连接成功,成功后再切换回 Blocking 模式。 aa938de3d6a6bf88cf466623928312e4.png Live Server 发送的控制器数据是基于 Json 的,在 UE4 里处理 Json 最简单的方法就是调用 FJsonObjectConverter::JsonObjectToUStruct ,直接将 Json 字符串转换成对应的结构体。 Json 的数据结构可以参考 Live Server 的文档,在定义结构体时,建议直接采用 Json 中控制器的 名字作为成员变量的名字,这样 Json 序列化会自动设置成员变量,而不用手工解析。为了支持录制功能,成员变量还需要添加 Interp 的,这样可以支持 SequenceRecorder 的录制。   2ebd2714c54aecd5dab0e3e9f2e8d04f.png 代码部分介绍的就差不多了,我们可以发现需要编写的代码其实并不多。 以下是完成后的代码目录,其中包含了一些调试用和工具类的代码文件。 be4b7e7fefd9b81a17963e53010a7d98.png 现在已经得到了 Live Server 发送过来的控制数据 LiveData ,接下来是设计如何将数据应用到对应的角色上。 Faceware 的控制器数据很简单, Faceware 定义了一个角色的很多基础表情,这些控制数据和这些表情是一一对应的,比如 eyes_leftEye_blink 的数值如果是 0.5 ,就表示 eyes_leftEye_blink 这个表情的混合权重是 0.5 。同一时间点会有多个表情的数值,动画需要根据这些数值,混合对应的基础表情,来实现最终的结果。   有很多种方法可以实现表情的混合,在这里我们介绍下 UE4 中推荐的方式,基于 PoseAsset 来实现表情混合。 PoseAsset 的介绍和使用可以参考 UE4 的文档。接下来介绍下如何准备美术资源,以及 Faceware Live 在 UE4 中的工作流。美术资源设置 Faceware 需要有带 BlendShape ( MorphTarget )数据的 SkeletalMesh: dd0d6bb67b9d081cacf15ea855c4b5a8.png

导入参数需要勾选MorphTarget:

76571e5eda590fe4ec758bcbed217ebd.png   Faceware 还需要一段特殊的动画,需要在 Maya 或者其他 DCC 工具里制作,这段动画包含了所有 Faceware 需要的基础表情,每个表情是一帧。基础表情的列表可以参考文档。 c075bf32fdb6b61eb682740ad9cd040a.png   然后在 UE4 里创建 PoseAsset ,使用当前动画。 df61aff687d8c832198ba16f8ed100f9.png 修改 PoseAsset 的参数,选择叠加模式。 Base Pose 的选择:如果有 Neutral Pose 的话就选,没有的话就用 Reference Pose 。 0094c8b54181f95c5c87a50a2402a001.png 生成一个 RefPose 的动画 Animation Sequence ,一帧的这种。有 Neutral Pose 的话,就用那个 Pose ,没有的话就用 Referenc ePose 。 5f0237a6be5fe4356212f3807fba4308.png 以下是生成的 PoseAsset ,默认的名字是数字编号,需要命名成有意义的,比如表情名 。 336f9599261a29cb069be049fecfe918.png    

准备好对应表情序列的名字,复制到剪切板。

6057b33e1b0e3707c85f427d6c89799c.png

然后点右键,选择粘贴所有名字。

94b90073bf5797f2a4bf4eadbf629c8c.png   修改好名字后就可以在 ABP 里调用了。 e55d463138f5c83ab55e798b24c65e70.png   到这里 Faceware 的美术资源就准备好了,接下来我们使用 ABP 来驱动表情动画,不需 要写代码,动画蓝图就可以支持。角色ABP设置 在 EventGraph 里获取 LiveData ,包括 Faceware 控制器的数值和附加的参数,比如 HeadRotation 等,把这些值设置到 ABP 的变量里,这样 AnimGraph 可以直接读取这些参数。 3865a38425ed29dd70668c6b06e45d29.png   参数列表: 0b524638d2346e9544f1cb985e7f8eb7.png   在 AnimGraph 里提取对应的参数,然后设置对应 Pose 的权重,将输出级联到下一个叠加节点。混合方式是 Additive 。 528447d879e51470be33fec1cd9fb105.png   完整的混合图: fe2b085036d85b5559aa1b79db0d1c07.png   节点比较多的话,可以创建 Cache 。这里创建一个 Cache 节点。 263cb763474088d4eb63c1cb0476b53f.png   然后在最终输出的时候,直接混合所有 Cache 。 a4ec99842b9458aae0454b3e37c61d33.png  Faceware组件设置 将 SkeletalMesh 拖放到关卡中,会自动创建对应的角色,只需要添加 FacewareLive 组件。然后设置连接参数。 79f1a483f55317dfbc58ce36ee4e75d7.png   •  Address Faceware Live Server 的 IP ,不能使用 hostname 。 •  Port Faceware Live Server 的端口,多个 LiveServer 同时使用时,需要设置不同的端口。 •  Connect on Begin Play 设置是否在开始运行时,自动连接。   以上就是 Faceware Client 插件开发的介绍, Faceware 的使用相对其他面捕设备要更简单,简单的校准既可以正常工作了。但是想达到很好的效果,需要绑定师细心的调整,包括对控制器数据的操作,比如我们这里只是 简单的将数据一比一的绑定到表情,实际上需要在 ABP 里对参数进行处理,包括叠加,重映射,或者控制额外的表情等。这些可以参考 Faceware 的官方说明文档,这里就不再重复了。

1c50bc6878b372be1387861a5587d1ea.png

ddc7af50f379ace39212bb6444bd7963.png

数天技术

让技术·更有趣

354a094b9e7d91a9168b2f785a9fb387.png喜欢我们就点击关注吧~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值