OVRLipSync 是Oculus为Unity开发的一个口型同步插件, 能够实时处理语音数据转换成相应的口型, 按照它的规范, 一共有15个口型:
上面的截图是基于MorphTarget的, 这个插件也提供了基于贴图的表现形式:
通过分析插件可以知道, 核心算法封装在OVRLipSync.dll里, 这个dll经过我测试是可以独立运行的:
之前也有个人尝试把它整合进UE4: https://github.com/ChairGraveyard/ovrlipsync-example 不过这个人没有把效果调对, 因为OVRLipSync.dll是个完全没有任何文档说明的东西, 一些参数的意思只能靠猜. 好在可以与Oculus的人进行邮件上的沟通, 搞懂了所有函数的参数的意义后终于把效果调试正确了. 在此基础上, 我也参考Unity插件的功能, 重写了一些代码, 支持多个实例对象, 并且把处理音频的接口暴露出来, 以便于使用自定义的音源来驱动口型, 如使用一段录音.
这是在UE4中运行的效果:
有几个需要注意的地方:
并在BP里设置嘴的Material和TextureName
功能没有多复杂, 使用起来也很方便. 但是UE4这边因为没有像Unity那样OnAudioFilterRead的回调和DSP Buffer, 所以只能设置一个固定的采样率, 这样就对我们的音频数据有了很多限制. 不管怎么说, 能够在运行时进行LipSync计算的免费插件, 目前来说应该就这么一个选择. 好了, 有问题就提到github吧: https://github.com/xoyojank/ovrlipsync-example