与人工智能驱动的详细 3D 头像交谈。使用大型语言模型 (LLM)、文本转语音 (TTS)、Unity 游戏引擎和口型同步使角色栩栩如生。
在视频中,我们询问角色“谁是迈克尔·乔丹?”。短暂延迟后,化身“回答”了问题。使用之前的消息作为上下文,我们可以进行完整的对话。注意头发的物理特性和眨眼!
展示从网络浏览器触发的远程事件。选择每个 VFX 后,就会播放相应的粒子系统。流行的用法是当有人在 Twitch 等上捐赠 5 美元时产生烟花粒子效果。在下雨 VFX 期间,您甚至可能会注意到当水滴与角色(头发顶部)相互作用时飞溅和弹跳。
核心功能是会“说话”的定制 3D 模型。它会发出声音并使用 Oculus 的唇形同步库来给人留下(希望是令人信服的)印象。这是一个功能集:
该流程不依赖于任何特定的实现。随意混合和匹配 LLM、TTS 或任何合适的 3D 模型(需要特定的形状键)。您可能会注意到,这种架构为我们提供了极大的灵活性。正如您可能想象的那样,前一句话是轻描淡写的。
没有语音识别,提示仅是文本。使用 Whisper Fast 添加此功能非常简单。请参阅下面的说明。 TL;DR 将 GET 或 POST 发送到
/prompt
端点。
使用带有流媒体和 DeepSpeed 的 TTS,我通常会得到 <4 秒的响应(从发送提示到第一个声音)。它足够小,对话感觉是实时的。此时,瓶颈就是LLM。在单个 GPU 上,您无法同时运行 LLM 和 TTS(我已经尝试过,请查看有关tts.chunk_size
配置选项的常见问题解答)。我们必须首先生成所有文本标记,然后才生成声音。我尝试过将 TTS 卸载到 CPU,但这也很困难。
流式传输意味着我们将生成的文本分割成更小的块。有一个小的交叉淡入淡出来掩盖块的过渡。第一个块较小意味着首个声音的时间较快。 DeepSpeed是一个用于加速 GPT 推理的 Microsoft 库。流式传输和 DeepSpeed 都是可选的,但建议使用。
服务器启动后的第一个问题总是花费最长的时间(约 10 秒),因为服务器必须加载 AI 模型。在 Unity 编辑器中使用时,您很少会出现垃圾收集暂停(对于音频来说有点明显)。但如果您在生产版本中确实遇到了 GC 问题,我会感到惊讶。
我不得不说,我很有趣。我预计在使用相同的 GPU 进行 Unity 渲染和 AI 时会出现一些问题。我知道 Android/iOS 应用程序是一个简单的后备方案,可以将 Unity 成本转移到单独的设备上。但在我的硬件上没有必要。有点出乎意料的是,竟然运行顺利。不会抱怨。我还将 Unity 限制为 30FPS(以防万一)。
如果您转到控制面板,您将看到每个响应阶段的时间。对于 Unity,请使用内置分析器。
请参阅 INSTALL_AND_USAGE.md。它还包括有关如何使用/扩展当前功能的说明。
以下问题是关于此应用程序的一般理念。有关更多面向使用的常见问题解答,请参阅 INSTALL_AND_USAGE.md。
这个应用程序表明我们已经拥有渲染详细 3D 头像并在单个消费级 GPU 上实时运行一些中性网络的技术。它是可定制的,不需要互联网连接。它还可以在客户端-服务器架构中工作,以方便在移动设备上进行渲染等。
我本可以使用标准 Sintel 模型。我创造了自己的角色,因为我可以。从拖动顶点、绘制纹理、设置嘴巴动画、调整头发物理到“会说话”的 3D 头像。如果我自己这么说的话,那真是一种令人愉快的消遣。
我还想测试稳定的扩散生成图像的纹理重投影。例如,您可以在积极提示中添加“秃头”,在消极提示中添加“头发”。它确实大大加快了工作流程。唉,重投影会有镜面高光等需要手动删除。
我使用 Sintel 作为基础网格,因为它已经有了基本的形状键。特别是要控制嘴的每个部分 - 只需添加 Blender 4.0 兼容的驱动程序即可。这使得创建视位形状键变得微不足道。我过去已经多次使用 Sintel 的模型,所以对于这个项目来说这是理所当然的。
附言。我讨厌操纵。
您可能见过“会说话”的实时稳定扩散生成的虚拟角色。它是一张静态图像,每帧都会根据声音重新生成嘴部区域。您会注意到它不稳定。如果你每一帧都扩散牙齿,它们就会不断移动。我经常使用稳定扩散。我看到了我那部分被毁坏的身体部位(手!)。牙齿……很明显。一个流行的实现是 SadTalker。它甚至还有稳定扩散 Web UI 扩展。
相反,我的应用程序使用了视频游戏中多年来一直存在的无聊旧技术。如果您有数百小时的对话(《博德之门 3》、《赛博朋克 2077》等),您无法手动制作所有内容的动画。每个主要游戏都使用 JALI 等系统。
如果你想要实时动画角色,为什么只使用人工智能?为什么不寻找世界上最大的娱乐行业所使用的解决方案呢?至少你可以使用它作为 img2img 的基础。近年来,我们也出现了 VTuber,他们每天都在挑战极限。其中很多东西都是基于初音未来粉丝开发的技术。
Neuro-sama 是一位流行的虚拟主播。它是一个人工智能驱动的角色,可以玩视频游戏并与其创造者 Vedal 交谈。以下是我的应用程序与它的对比:
该应用程序包含其他人创建的源代码/资产。每个此类实例的子文件夹中都有一个专用的 README.md 来解释许可。例如,我已承诺“Oculus Lipsync”库的此存储库源代码,该库有自己的许可证(使用前接受它!)。 XTTS v2.0 也仅供非商业用途。以下段落仅影响我创建的内容。
它是 GPLv3。这是 Copyleft 许可证之一。大多数来自 Blender 或 Linux 内核的程序员应该熟悉 GPL/copyleft 许可证。这是相当极端的,但它是由应用程序的性质决定的。特别是可能的用途之一。
最近我看了 Eddy Burback 的《Apple 的 3500 美元噩梦》。这是对 3500 美元(!)Apple Vision Pro 的评测。所展示的应用程序之一允许用户与人工智能“女朋友”约会。该界面的左侧有一个稳定的扩散生成图像(我闻到了 PastelDiffusedMix 与 Seraphine LoRA 的味道?)。右侧文字聊天。这是此类软件的最新技术吗?它很懒。
办公室。移动约会应用程序从一开始就充满了争议。 Tinder 和 Co. 不想失去回头客。在我们开始学习机器学习之前,骗局就已经层出不穷。 Tinder 上有数百万个 AI 个人资料。而对于直接的人工智能约会来说,这是一个完全不同的问题。
您可以使用任何您喜欢的模型。口型同步使用与 ovrlipsync 视位相对应的形状键。通过“敌人”技术演示,Unity 已经证明它可以渲染逼真的人类。
就我个人而言,我会使用虚幻引擎的超人类。您将不得不重写我的 Unity 代码。为此,您将获得最先进的设备和免费的高保真资产。您还可以尝试将超人类导入到 Unity 中。
由于某种原因,Unity 没有针对人类角色的内置管道。即使在制作上面链接的“敌人”电影时,他们也没有费心使其在社区中可行。它是专为 Autodesk Maya 定制的一组自定义工具。我从未听说过 4D 剪辑文件格式。恭喜项目负责人!这是一个令人困惑的决定。例如,他们有用于头发渲染和模拟的 HairFX。它基于 TressFX。我已将 TressFX 移植到 OpenGL、WebGL 和 Vulkan。我很明白。然而这个应用程序使用发卡!原始 Sintel 具有基于样条的头发,这应该是一个简单的导出操作。这些系统需要适当的文档。
归根结底,工具只是工具。我希望 Unity 能按顺序安排好他们的优先事项。我想说,在当今的市场上,渲染人是非常重要的。
是的,但请确保您了解为什么要使用 3D 引擎来实现 2D 渲染技术。对于 Guilty Gear Xrd,作者必须在每帧的基础上调整法线。即使在今天,3D 仍然受到动漫迷的反对。唯一的例外(据我所知)是光泽之地。这得益于其令人惊叹的镜头构图。
看看西方的实时动画,例如《无主之地》。它使用平面照明、柔和的颜色和粗墨线复制了漫画风格。 YouTube 上有大量有关平面着色的教程,但如果不擅长绘制纹理,就无法获得接近的结果。
虽然这听起来可能令人沮丧,但我希望您考虑一下您的目标。其他人都使用 VTubeStudio 和 Live2D 是有原因的。创建 2D 和 3D 模型在复杂性上没有可比性,甚至不是同一种艺术形式。
如果您为 Riot Games、Fortiche、Disney/Pixar DreamWorks 或 Sony Pictures Animation 工作,请忽略我上面所说的一切。
Unity安装尺寸更小。它针对的是爱好者。您只需编写一个 C# 脚本并将其拖放到一个对象上即可添加新行为。虽然用户体验可以无处不在,但在核心方面却是毫无摩擦的。
Unity 在易用性和迭代时间方面击败了 UE5。切换到 UE5 的主要原因是超人类 (!)、虚拟制作或行业标准动作捕捉。
取决于LLM模型。默认的gemma:2b-instruct
很小(30 亿个参数)。它可以创造出连贯的句子,但这就是它能做到的程度。如果您可以使用最先进的 7B 模型(即使具有量化)或更大的模型,那就去吧。您也可以随时将其替换为 ChatGPT。或者使用多 GPU 设置。或者,在手机上运行 Unity,在 Raspberry PI 上运行 TTS,并为 LLM 提供完整的 VRAM。
我没有添加这个。这需要将特殊情况添加到 3D 模型中。例如,在口型同步期间可能很难使嘴部动起来。使用 3D 头像进行脸红处理通常是通过在着色器图中混合特殊纹理来完成的。
但基本技术已经存在。如果你想检测文本中的情感,可以使用LLM进行情感分析。我还添加了使用 WebSocket 触发事件的技术。 ATM 正在启动粒子效果。一半的 C# 代码涉及触发形状键。闪烁是每隔几秒调用一次的函数。在 3D 模型上创建交互后,您可以随时启动它。只是创建起来很费时间。
是的,我尝试过(未添加到此存储库中)。最初的计划是将渲染帧风格转移到稳定的扩散生成图像。从我的快速实验来看,除了性能问题之外,最简单的解决方案也不具备必要的质量或时间稳定性。
我们没有运行 VGG16/19 的性能预算。这不包括“艺术风格的神经算法”[Gatys2015]或“实时风格转移和超分辨率的感知损失”[Johnson2016]等“原始”技术。他们也没有人看向闪烁。它们仅针对静态图像而不是视频而设计。还有其他研究研究了这个问题:[Jamriska2019]、[Texler2020]。
我知道Unity在2020年也尝试过实时风格传输:“Real-time style transfer in Unity using deep Neural Networks”。
之后,我们就进入了变形金刚领域(惊喜!)。去年,“使用扩散模型进行数据增强 (DATUM)”[CVPR-W 2023] 使用了扩散(再次令人惊讶!)。如果您想跟踪最新技术,有一个名为“合成到真实翻译”的带有代码的论文类别。
此时,我决定尝试将其融入到应用程序中,这是一种功能蠕变。
《两分钟论文》有一集研究了类似的技术:“英特尔的视频游戏看起来像现实!”。基于英特尔的“增强照片真实感增强”[Richter2021]。
是的,检查 unity-project/Assets/Sintel 内的 .fbx。
我所有的项目都有实用的名字。这一次,我想要一些更独特的东西。鸢尾花是紫蓝色的花。虹膜是眼睛的一部分。看起来合适吗?尤其是眼睛和头发是CG角色的问题。