前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >移植了OVRLipSync到UE4

移植了OVRLipSync到UE4

作者头像
逍遥剑客
发布2018-05-09 16:45:10
3.2K1
发布2018-05-09 16:45:10
举报

OVRLipSync 是Oculus为Unity开发的一个口型同步插件, 能够实时处理语音数据转换成相应的口型, 按照它的规范, 一共有15个口型:

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

上面的截图是基于MorphTarget的, 这个插件也提供了基于贴图的表现形式:

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

通过分析插件可以知道, 核心算法封装在OVRLipSync.dll里, 这个dll经过我测试是可以独立运行的:

这里写图片描述
这里写图片描述

之前也有个人尝试把它整合进UE4: https://github.com/ChairGraveyard/ovrlipsync-example 不过这个人没有把效果调对, 因为OVRLipSync.dll是个完全没有任何文档说明的东西, 一些参数的意思只能靠猜. 好在可以与Oculus的人进行邮件上的沟通, 搞懂了所有函数的参数的意义后终于把效果调试正确了. 在此基础上, 我也参考Unity插件的功能, 重写了一些代码, 支持多个实例对象, 并且把处理音频的接口暴露出来, 以便于使用自定义的音源来驱动口型, 如使用一段录音.

这是在UE4中运行的效果:

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

有几个需要注意的地方:

  • 由于UE4的麦克风录音是写死的16000的采样率, 所以我在OVRLipSyncInitialize时就设置成了固定的16000的采样率, 至于BufferSize是参考Unity的默认设置1024, 为了延迟也可以自行改小一些
  • OVRLipSyncProcessFrame目前的版本(1.0.1)是有Bug的, 被坑了很久, 跟Oculus的人确认现在的版本只有OVRLipSyncProcessFrameInterleaved才能正常工作. 不过使用者是不需要关心这个的, 只需要保证传入UOVRLipSyncContextComponent::ProcessFrame的是16000采样率的单声道音频数据, 并保证BufferSize不小于VISEME_BUF_SIZE. 另外, 音频处理是比较消耗时间的, 所以这个函数设计成线程安全的, 对性能有要求的人可以把ProcessFrame放到另一个线程去调用
  • ULipSyncTextureFlipComponent使用前需要设置15张口型贴图
这里写图片描述
这里写图片描述

并在BP里设置嘴的Material和TextureName

这里写图片描述
这里写图片描述
  • ULipSyncMorphTargetComponent使用前需要设置MorphTarget的动画名字, 另外SkeletonMesh上也要打上Tag, 默认是”Mouse”
这里写图片描述
这里写图片描述

功能没有多复杂, 使用起来也很方便. 但是UE4这边因为没有像Unity那样OnAudioFilterRead的回调和DSP Buffer, 所以只能设置一个固定的采样率, 这样就对我们的音频数据有了很多限制. 不管怎么说, 能够在运行时进行LipSync计算的免费插件, 目前来说应该就这么一个选择. 好了, 有问题就提到github吧: https://github.com/xoyojank/ovrlipsync-example

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年09月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档