Audio2Face#

注意

在将 Audio2Face 添加到您的应用程序之前,请务必设置用于动画的角色

系统要求#

Windows

  • 64 位 Windows 10 或更高版本

Linux
  • 64 位 Linux 操作系统,libstdc++ 版本 6.0.30 或更高版本

    • Ubuntu 22.04 或更高版本

    • Fedora 36 或更高版本

    • Debian 12.0 或更高版本

Audio2Face 连接设置#

2.1 版本更改:添加了 NVCF API 密钥、函数 ID 和函数版本的设置。

ACE 插件的项目设置有一个选项,用于设置要连接的默认 Audio2Face 服务器:编辑 > 项目设置… > 插件 > NVIDIA ACE > 默认 A2F 服务器配置。该配置有多个字段

  • 目标 URL:服务器地址必须包含 scheme(http 或 https)、host(IP 地址或主机名)和端口号。例如,http://203.0.113.37:52000https://a2x.example.com:52010(均为虚构示例)。要连接到 NVIDIA 云函数 (NVCF),请将服务器地址设置为 https://grpc.nvcf.nvidia.com:443

  • API 密钥:如果您未连接到 NVCF 托管的 Audio2Face 服务,请留空。您可以通过 https://build.nvidia.com/nvidia/audio2face 获取 API 密钥以连接到 NVCF 托管的 Audio2Face 服务。

  • NvCF 函数 Id:如果您未连接到 NVCF 托管的 Audio2Face 服务,请留空。您可以通过 https://build.nvidia.com/nvidia/audio2face 获取 NVCF 函数 ID 以连接到 NVCF 托管的 Audio2Face 服务。

  • NvCF 函数版本:可选。除非您需要指定特定版本,否则请留空。

注意

我们强烈建议您在可能的情况下使用 NVCF 选项。

您可以在运行时通过使用 ACE > Audio2Face > 覆盖 Audio2Face 连接信息 蓝图函数,或通过从 C++ 调用 UACEBlueprintLibrary::SetA2XConnectionInfo 来更改 Audio2Face 连接设置。

您可以在运行时通过使用 ACE > Audio2Face > 获取 Audio2Face 连接信息 蓝图函数,或通过从 C++ 调用 UACEBlueprintLibrary::GetA2XConnectionInfo 来获取当前的 Audio2Face 连接设置。当前设置是项目默认设置和运行时覆盖的组合。

项目设置存储在您项目的 DefaultEngine.ini 文件中。如果您的 API 密钥过于敏感,无法包含在项目文本文件中,请考虑在运行时使用 覆盖 Audio2Face 连接信息 蓝图函数进行设置。

导入语音片段#

NVIDIA ACE 插件的 Audio2Face 功能支持从存储在声音波形资源中的语音动画角色。支持任何采样率作为输入。在发送到 Audio2Face 服务之前,插件会在运行时将剪辑转换为 16000 Hz 单声道。

如果您的项目中还没有声音波形资源,您可以导入要动画的语音音频片段

  1. 打开内容浏览器,然后选择要导入剪辑的文件夹。

  2. 在内容窗格中单击右键,然后选择导入到 [路径]…

  3. 导航到受支持的文件(.wav、.ogg、.flac、.aif)并打开它。

  4. 验证新的声音波形资源是否出现在内容浏览器中。

有关导入选项的更多详细信息,请参阅 Unreal 文档

注意

在某些情况下,声音波形资源可能无法被 ACE 插件使用,除非它已完全加载。建议在声音波形资源的属性上将加载行为覆盖设置为 ForceInline。如果资源由于未完全加载而无法读取,插件会在 LogACERuntime 类别中记录警告。

从声音波形音频剪辑动画角色#

2.3 版本更改:添加了蓝图节点的异步版本。

要从声音波形资源中存储的音频剪辑动画角色,请在角色 Actor 上使用潜在的蓝图节点 从声音波形异步动画角色。这些说明描述了蓝图界面,但您也可以从 C++ 调用 UACEBlueprintLibrary::AnimateCharacterFromSoundWave

根据您的应用程序,有很多方法可以确定要动画的角色。一些选项是

  • 拥有一个要动画的默认角色

  • 自动动画玩家正在查看的角色或最近的角色

  • 提供一些 UI 用于选择角色

在您选择角色 Actor 后,从声音波形资源动画它

  1. 调用 ACE > Audio2Face > 从声音波形动画角色 函数。

  2. 提供与您要动画的角色对应的 Actor。如果 Actor 附加了 ACE 音频曲线源组件,这将把语音剪辑发送到 NVIDIA Audio2Face。

  3. 以声音波形输入形式提供语音剪辑资源。

  4. 可选地,以 ACEEmotionParameters 输入形式提供 Audio2Face 情感结构。

  5. 可选地,提供 Audio2Face 参数输入。

  6. 可选地,提供 Audio2Face 提供程序名称。如果未指定提供程序名称,将选择默认的 Audio2Face 提供程序。有关详细信息,请参阅更改 Audio2Face 提供程序(可选)

  7. 当“音频发送完成”执行引脚在稍后的帧中激活时,该节点通过“成功”返回值指示音频剪辑是否已成功发送到 Audio2Face。

Animate Character From Sound Wave node

注意

还有一个非异步的 从声音波形动画角色 蓝图节点,它仅用于与早期插件版本的兼容性。建议使用异步版本,以避免在将音频数据发送到 Audio2face 时阻塞应用程序逻辑。

从本地 WAV 文件动画角色(可选)#

2.3 版本更改:添加了蓝图节点的异步版本。

该插件支持在运行时从本地 WAV 文件动画角色。

例如,这可以用于您可以提供自己的音频文件用于角色语音的应用程序中。它类似于从声音波形资源动画,但在 WAV 文件的情况下,音频不会存储在 Unreal 资源中,也不会烘焙到应用程序的内容中。

在角色 Actor 上使用潜在的蓝图节点 从 Wav 文件异步动画角色。您也可以从 C++ 调用 UACEBlueprintLibrary::AnimateCharacterFromWavFile

Animate Character From Wav File node

注意

还有一个非异步的 从 Wav 文件动画角色 蓝图节点,它仅用于与早期插件版本的兼容性。建议使用异步版本,以避免在将音频数据发送到 Audio2face 时阻塞应用程序逻辑。

从原始音频样本动画角色(可选)#

在 2.3 版本中添加。

如果您的应用程序需要将运行时生成的音频馈送到 ACE Unreal 插件,则提供如上所述的声音波形资源或 WAV 文件可能不是一个选项。对于这些情况,插件公开了一个 C++ API。支持任何音频采样率,并且样本可以是 PCM16 或 float32 格式。

  1. "ACERuntime" 添加到您的模块 .Build.cs 文件中的 PrivateDependencyModuleNames 中。

  2. 在您的源文件中 #include "ACERuntimeModule.h"

  3. 从您的代码调用 FACERuntimeModule::Get().AnimateFromAudioSamples()FACERuntimeModule::Get().EndAudioSamples()

公开的 C++ API 的签名是

// Receive animations using audio from a float sample buffer.
// If bEndOfSamples = true, pending audio data will be flushed and any subsequent call to SendAudioSamples will start
// a new session.
bool AnimateFromAudioSamples(IACEAnimDataConsumer* Consumer, TArrayView<const float> SamplesFloat, int32 NumChannels,
  int32 SampleRate, bool bEndOfSamples, TOptional<FAudio2FaceEmotion> EmotionParameters,
  UAudio2FaceParameters* Audio2FaceParameters, FName A2FProviderName = FName("Default"));

// Receive animations using audio from an int16 PCM sample buffer.
// If bEndOfSamples = true, pending audio data will be flushed and any subsequent call to SendAudioSamples will start
// a new session.
bool AnimateFromAudioSamples(IACEAnimDataConsumer* Consumer, TArrayView<const int16> SamplesInt16, int32 NumChannels,
  int32 SampleRate, bool bEndOfSamples, TOptional<FAudio2FaceEmotion> EmotionParameters,
  UAudio2FaceParameters* Audio2FaceParameters, FName A2FProviderName = FName("Default"));

// Indicate no more samples for the current audio clip. Any subsequent call to AnimateFromAudioSamples will start a
// new session.
// Use this if your last call to SendAudioSamples had bEndOfSamples = false, and now the audio stream has ended.
bool EndAudioSamples(IACEAnimDataConsumer* Consumer);

参数描述

  • Consumer:将接收动画的组件。这通常是附加到角色的 UACEAudioCurveSourceComponent。

  • SamplesFloatSamplesInt16:包含音频样本的缓冲区。

  • NumChannels:1 表示单声道,2 表示立体声。

  • SampleRate:源音频缓冲区的每秒样本数。

  • bEndOfSamples:如果您一次拥有整个音频剪辑,请将其设置为 true。否则,将其设置为 false,并在音频块可用时多次调用 AnimateFromAudioSamples

  • EmotionParameters:与默认推断的情感行为的可选覆盖。

  • Audio2FaceParameters:模型特定的 Audio2face 面部动画行为的可选覆盖。

  • A2FProviderName:要使用的 Audio2face 提供程序。您可以使用 UACEBlueprintLibrary::GetAvailableA2FProviderNames() 在运行时获取可用提供程序的列表。有关详细信息,请参阅更改 Audio2Face 提供程序(可选)

调整角色情感(可选)#

Audio2Face 从音频输入中检测情感,从而适当地影响角色动画。但是,如果您的应用程序具有关于角色情感的信息,您也可以将其提供给 Audio2Face,以将应用程序提供的情感覆盖与检测到的情感混合。用于动画角色的函数接受 Audio2FaceEmotion 类型的 ACEEmotionParameters 输入,其中可以覆盖各个情感值。每个情感覆盖值必须介于 0.0 和 1.0 之间。超出该范围的值将被忽略。值 0.0 表示中性情感。

Audio2FaceEmotion 结构可以更改检测到的情感的处理方式。下表显示了可用选项的摘要

参数

描述

有效范围

默认值

整体情感强度

在完成情感混合后全局应用的乘数

0.0 - 1.0

0.6

检测到的情感对比度

通过将检测到的情感值推高或拉低来增加其范围

0.3 - 3.0

1.0

最大检测到的情感

对检测到的情感值的数量的严格限制

1 - 6

3

检测到的情感平滑

用于平滑随时间检测到的情感的系数

0.0 - 1.0

0.7

情感覆盖强度

检测到的情感 (0.0) 和覆盖情感 (1.0) 之间的混合

0.0 - 1.0

0.5

情感覆盖

各个情感覆盖值,每个值在 0.0 - 1.0 范围内

禁用或 0.0 - 1.0

禁用

Audio2FaceEmotion struct

注意

对于小于 0.5 秒的音频剪辑,情感和面部参数输入将不起作用。

更改 Audio2Face 提供程序(可选)#

在 2.2 版本中添加。

基本 NVIDIA ACE 插件 (NV_ACE_Reference.uplugin) 支持在运行时选择 Audio2Face 提供程序。其他 Unreal 插件可能会实现其他 Audio2Face 提供程序。

使用 获取可用 Audio2Face 提供程序名称 蓝图函数在运行时获取可用提供程序的列表。这些提供程序名称可以作为参数传递给本文档中描述的任何 Audio2Face 函数,以选择您要使用的提供程序。

基本 NVIDIA ACE 插件包括以下提供程序

  • “RemoteA2F”:默认的 Audio2Face 提供程序,在所有受支持的平台上都可用。通过连接到 NVCF 托管的服务或单独部署的服务来远程执行 Audio2Face。当前与动画流功能不兼容。“RemoteA2F”提供程序不能与动画流在同一应用程序中使用。

  • “LegacyA2F”:另一种远程 Audio2Face 提供程序,仅在 Windows 上可用。提供与“RemoteA2F”相同的功能,但使用早期插件版本中的实现。如果您在升级到插件版本 2.3.0 或更高版本时看到新问题,您可以尝试“LegacyA2F”以查看是否有帮助。请联系 NVIDIA 支持部门,报告使用“LegacyA2F”可以解决的“RemoteA2F”的任何问题。预计此提供程序将在未来的插件更新中删除。

调整 Audio2Face 参数(可选)#

某些 Audio2Face 服务参数可以被应用程序覆盖。这些参数往往与部署到服务的模型紧密耦合。通常,不建议在应用程序中更改这些参数。如果您认为需要更改任何这些参数,请参阅 Audio2Face 服务文档以了解有关它们作用的详细信息。

按字符串名称设置参数。可用参数可能会因您部署的服务版本而异。v1.0 Audio2Face 服务的可用参数集为

参数

描述

有效范围

默认值

skinStrength

控制皮肤的运动范围

0.0 – 2.0

1.0

upperFaceStrength

控制面部上部区域的运动范围

0.0 – 2.0

1.0

lowerFaceStrength

控制面部下部区域的运动范围

0.0 – 2.0

1.0

eyelidOpenOffset

调整眼睑张开-闭合的默认姿势(-1.0 表示完全闭合。1.0 表示完全张开)

-1.0 – 1.0

取决于部署的模型

blinkStrength

0.0 – 2.0

1.0

lipOpenOffset

调整嘴唇闭合-张开的默认姿势(-1.0 表示完全闭合。1.0 表示完全张开)

-0.2 – 0.2

取决于部署的模型

upperFaceSmoothing

对上部面部运动应用时间平滑

0.0 – 0.1

0.001

lowerFaceSmoothing

对下部面部运动应用时间平滑

0.0 – 0.1

取决于部署的模型

faceMaskLevel

确定面部上部区域和下部区域之间的边界

0.0 – 1.0

0.6

faceMaskSoftness

确定面部上部区域和下部区域在边界上平滑混合的程度

0.001 – 0.5

0.0085

tongueStrength

0.0 – 3.0

取决于部署的模型

tongueHeightOffset

-3.0 – 3.0

取决于部署的模型

tongueDepthOffset

-3.0 – 3.0

取决于部署的模型

Audio2FaceParameters object

注意

对于小于 0.5 秒的音频剪辑,情感和面部参数输入将不起作用。