【愚公系列】《AIGC辅助软件开发》038-高阶产品应用开发:利用UE创建数字人
标题 | 详情 |
---|---|
作者简介 | 愚公搬代码 |
头衔 | 华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。 |
近期荣誉 | 2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。 |
博客内容 | .NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。 |
欢迎 | 👍点赞、✍评论、⭐收藏 |
🚀前言
随着数字化时代的到来,虚拟角色和数字人逐渐成为各个行业中不可或缺的元素。从游戏开发到影视制作,再到虚拟现实和增强现实应用,数字人不仅丰富了用户体验,也为品牌传播和互动提供了新的可能性。而在这其中,虚幻引擎(Unreal Engine,简称UE)以其强大的实时渲染能力和灵活的开发环境,成为创建数字人的首选工具。
本文将深入探讨如何利用UE进行高阶产品应用开发,特别是创建逼真的数字人。我们将详细介绍数字人的设计流程,包括角色建模、动画制作、表情捕捉以及与用户的交互实现。通过具体的案例分析,我们希望能够揭示数字人在各个领域的应用潜力,以及如何通过技术创新提升用户的沉浸感与参与度。
无论你是游戏开发者、影视制作人,还是对数字人技术感兴趣的爱好者,这篇文章都将为你提供实用的见解与灵感。让我们一起探索数字人技术的前沿,开启创造虚拟世界的新旅程!
🚀一、利用UE创建数字人
程序员在工作和学习中积累了大量宝贵的知识与经验,但有些优秀的程序员在表达能力上可能存在短板。在这种情况下,数字人的出现提供了理想的解决方案,可以有效弥补这一不足。
通过与数字人互动,程序员能够将专业知识和经验传递给更广泛的受众,而无需担心沟通障碍。数字人具备逼真的外貌、流畅的语言表达能力和交互功能,能够以更具吸引力和易于理解的方式呈现复杂的技术概念。这使得程序员能够更好地与其他开发者、学习者和潜在客户交流,建立个人影响力。
随着语音识别和 TTS(文字转语音)等技术的不断发展,创建数字人不仅能显著减轻程序员在镜头前的压力,使他们能够专注于内容创作本身,而不必担心形象和表达,还能迅速输出内容,大大提高创作效率。
使用 UE 的 MetaHuman 制作数字人非常简单,任何人都能免费使用,并通过深度学习制作出效果逼真、动作流畅的人物形象。
🔎1.准备工作
🦋1.1 硬件要求
要使用 Unreal Engine(UE)进行数字人建模,一般需要 NVIDIA 的 GTX 系列显卡。GTX 1060 为入门级配置,推荐使用 GTX 2060 及以上显卡,以及 32GB 内存。这个配置基本能确保软件稳定运行。
🦋1.2 软件安装
UE 是由 Epic Games 开发的游戏引擎。请访问 Epic Games 官网 https://store.epicgames.com/zh-CN/,点击页面右上角的“获取 Epic Games”按钮下载并安装安装包。
🦋1.3 创建账号
安装完成后,打开 Epic Games Launcher 并创建 Epic Games 账号。
🦋1.4 安装引擎
进入软件后,点击左侧菜单中的“虚幻引擎”,然后依次点击“库”和引擎版本后的“+”按钮,此处选择 5.1.x 版本进行安装。
🦋1.5 安装 MetaHuman
在虚幻商城中搜索 MetaHuman 插件和 MetaHuman SDK,购买(免费)并安装到引擎中。
🔎2.使用 MetaHuman 自带的人物
🦋2.1 创建工程
-
新建项目
- 依次选择“游戏” → “空白” → “蓝图”,目标平台选择“桌面”。
- 注意:路径和项目名称中不得含有中文或空格。MetaHuman产品界面见图。
- 新建项目时,引擎需要编译着色器,可能需要数分钟或更长时间,请耐心等待编译完成。
-
添加 MetaHuman 插件
- 在工程中,依次选择“编辑” → “插件”选项,查找“MetaHuman”,勾选“MetaHuman”和“MetaHumanSDK”,然后重新启动工程。
-
引入 MetaHuman 人物
- 第一步:选择“文件”选项,新建关卡,选择“Basic”,并保存。
- 第二步:选择“窗口”选项,单击“Quixel Bridge”,在右上角登录。选择一个 MetaHuman,单击“Download”按钮下载,下载完成后单击“+”将其添加到工程中。点击所有弹出框的“启用缺失”按钮,然后重启工程。
- 第三步:重启后,打开之前创建的关卡,在内容浏览器的“MetaHumans”目录下找到刚才下载的 MetaHuman(BP_***),并将其拖入关卡中。图展示了引入 MetaHuman 人物后的效果。
🦋2.2 接受文字输入并显示
我们用一个带按钮的文本框模拟与数字人交互的界面。首先打开关卡蓝图,图所示为模拟与数字人交互的界面。
从“事件开始运行”开始,添加节点“创建控件”,选择类为“WBPDemo Chat”。在绑定事件时,添加节点“分配 onSend”。注意,有三个同名选项,通常选择第三个。如果类型不匹配,可以尝试选择其他选项。绑定事件后,直接将内容输出到屏幕上。
-
图展示了接受文字输入后的结果页面。
-
图展示了编译后的运行界面。
🦋2.3 数字人连接 ChatGPT 对话
连接 ChatGPT 时我们要用到插件 OpenAI的API。图所示为接人 OpenAI的API的界面。
这样,数字人就具备了对话的能力。图所示为数据人具备对话能力后的界面。
🦋2.4 让数字人开口说话
要让数字人开口说话,首先要将ChatGPT返回的内容变成声音。在UE中我们要用到speech 这个插件。图所示为 AZSpeecch 插件的界面。
另外,AZSpeech 的 “Speech to Text With Default Options” 组件可以进行语音识别,使数字人具备“耳朵”功能。
-
有了声音后,我们可以利用 MetaHumanSDK 根据声音自动生成嘴型动画。图展示了 MetaHumanSDK 的产品界面。
-
将嘴型动画与头部网格体绑定,并同时播放音频,即可实现人物说话的效果。图展示了动画与音频的合成界面。
🔎3.进阶实战
本节先来了解几种人物建模方式,之后我们可以按自己的形象创建特定的数字人。
🦋3.1 创建自己的数字人形象
下面介绍几种常用的建模方式:
-
FaceGen Modeller 建模
- 导入左、中、右三张头像照片即可生成头部模型。图展示了生成头部模型的界面。生成后,将输出为 .obi 文件,以便导入 UE。
- 导入左、中、右三张头像照片即可生成头部模型。图展示了生成头部模型的界面。生成后,将输出为 .obi 文件,以便导入 UE。
-
Blender 建模
-
Blender 是一款免费的建模软件,能够精确控制模型的细节。访问 Blender 官网下载该软件,安装成功后,需要安装 FaceBuilder 插件。图展示了 Blender 界面。
-
在主窗口右侧选择 FaceBuilder,然后单击“新建人头”按钮。图展示了 Blender 新建人头的界面。
-
单击“添加图像”,至少需要一张正面头像。添加左前方、右前方、正左侧、正右侧和背面的照片,可以更准确、方便地调整模型。添加完成后,确保“拓扑”选项设置为 “bighpoly”。
-
选中照片后,单击“对齐面部”按钮,之后可以拖动网格进行精细调整。图分别展示了网格精调界面和精调效果。
-
在网格调整完成后,单击“创建纹理”按钮,选择需要生成纹理的照片,然后单击“确认”按钮。纹理图片可以在 Photoshop 中进行优化处理。在导出前,请将位置和旋转归零。接着,单击“导出为 FBX”按钮导出模型。在弹出的导出窗口中进行如下设置:
- 将“路径模式”设置为“复制”,并选中路径模式下拉框右侧的“内嵌纹理”选项;
- 在“物体类型”选项中,按住 <Shift> 键,同时选中“骨架”和“网格”选项;
- 在“几何数据”设置中,将“平滑”选项设置为“面”;
- 取消勾选“烘焙动画”选项。
最后确认导出。
使用 Blender,同样可以导入 FaceGen Modeller 创建的 .obj 类型模型进行进一步的调整优化。
- MetaHuman Animation 建模
MetaHuman Animation 是 UE 于 2023 年 6 月发布的功能,允许用户通过手机快速创建模型。具体步骤如下:
- 在一台 iPhone 13 以上型号的手机上安装 Live Link Face;
- 打开 Live Link Face,选择模式为 Metahuman Animator,拍摄头部视频;
- 单击左下角的镜头试拍浏览器,选择拍摄的视频,然后单击右上角的“导出”按钮,将视频发送到计算机进行保存。
对于没有 iPhone 13 以上型号手机的读者,可以安装 Polycam 进行建模。建模完成后,将其导入 Blender 进行后期处理。在处理过程中,请注意只保留脸部和脖子裸露皮肤的部分,其余部分全部删除。
🦋3.2 导入模型到 UE,创建 MetaHuman
☀️3.2.1 由 .obj 和 .fbx 文件创建 MetaHuman
-
打开之前创建的工程,在内容目录下新建一个文件夹 ImportedModels,再在 ImportedModels 下新建一个 人物 文件夹。
-
将 .fbx 文件拖入这个 人物 文件夹中,在弹出的窗口中单击“导入”按钮。
-
在 人物 文件夹的文件列表空白处右击鼠标,依次选择 Metahuman → Metahuman 本体文件,为文件命名后将其打开。
-
点击网格体中的组件,选择刚才导入的网格体。此时模型应正对屏幕,如未正对,请手动调整视角,确保头部居中并占据屏幕大部分空间。
-
依次单击 提升帧 → 追踪活动帧 → MetaHuman 本体解算。
-
建议增加左前和右前两个角度的帧,角度不宜过大,可以进行微调。
-
选择合适的身体。
-
单击“网格体转 MetaHuman”,成功后关闭本体窗口。
-
单击“窗口”菜单,打开 Quixel Bridge。在 My Metahumans 中选中第一个,在右下角选择 Highest Quality 选项,并单击 Start MHC 选项。
-
在 MetaHuman Creator 主页选择 UE 5.1 引擎,单击自定义网格体,启用编辑,调整区域影响。图显示了 MetaHuman Creator 自定义网格体界面。
-
单击“雕刻”图标,拖动面部的点以调整面部形态。图显示了面部雕刻界面。
-
设置人物的皮肤、外貌和衣着。图显示了相关设置界面。
☀️3.2.2 由 MetaHuman Animation 创建 MetaHuman
-
配置 MetaHuman Animator:
- 在计算机上配置 MetaHuman Animator。
- 新建一个 5.2 引擎的空白工程。
- 在“内容”目录下右击“MetaHuman 动画器”,然后单击“捕捉源”。
- 打开捕捉源类型的配置文件,在 CaptureSource Type 选项下选择 LiveLinkFace Archives,并将 Storage Path 设置为手机捕捉的面部视频保存目录。
-
管理捕捉视频:
- 单击“工具”菜单,打开捕捉管理器,查看保存的面部视频。
- 单击“添加到队列”按钮,将视频加入工程中。
-
创建 MetaHuman 本体:
- 在内容浏览器中右击“MetaHuman 动画器”,选择“MetaHuman 本体”。
- 打开本体文件,创建组件时选择“从镜头中”选项,导入从 iPhone 中获取的捕获数据。图 11-23 显示了导入捕获数据的界面。
-
设置活动帧:
- 拖动镜头时间轴选择画面,依次创建正面、左前、右前三个角度的活动帧。
- 进行网格体追踪网格标记、本体解算以及网格体转 MetaHuman。
注意:由于 MetaHuman Animation 运行于 5.2 版本的 UE,生成的 MetaHuman 与 5.0 和 5.1 版本生成的 MetaHuman 不兼容。
☀️3.2.3 在工程中使用自建的 MetaHuman
-
下载 MetaHuman:
- 重新打开 Quixel Bridge,单击 Download 按钮下载所需的 MetaHuman。
- 下载完成后,单击 “+” 按钮将其添加到工程中。
- 选择当前人物路径下的网格体。注意,MetaHuman 网格体中,男性人物以 m (male) 开头,女性人物以 f (female) 开头。
-
添加角色到关卡:
- 添加成功后,在 MetaHuman 目录下找到角色,并将其添加到关卡中即可。
🦋3.3 降低数字人响应延迟 90%的必做操作
目前,数字人最大的问题是响应过慢,尤其是当 ChatGPT 的回答较长时,数字人可能需要几十秒才能做出回应。为了解决这个问题,我们可以从以下几个方面进行优化:
-
ChatGPT 流式响应:
- 使用插件 HpGPT 使 ChatGPT 以流式方式逐字回答。当接口有响应时,我们立即开始处理,而不是等待 ChatGPT 完全回答后再进行处理。图展示了 ChatGPT 流式响应路径。
-
分句处理:
- 接收到的回答将以句子为单位向 TTS 请求语音和音素数据。这里使用的插件是 ProgressiveStringSplitter。
- 接收到的回答将以句子为单位向 TTS 请求语音和音素数据。这里使用的插件是 ProgressiveStringSplitter。
-
声音与嘴型同时处理:
- 为了同时获取语音和音素数据,需要发送 SSML(语音合成标记语言)格式的请求。图展示了发送 SSML 格式请求的路径。
- 创建请求后,使用 AZSpeech 插件中的 SSML To Sound Wave with Default Options 组件发送请求。图展示了利用 AZSpeech 插件发送请求的路径。
- 通过这种方式,我们可以同时获得声音和嘴型数据,嘴型数据可直接用于驱动嘴型动画。
- 为了同时获取语音和音素数据,需要发送 SSML(语音合成标记语言)格式的请求。图展示了发送 SSML 格式请求的路径。
经过这些优化后,数字人的响应时间缩短至约 2 秒,基本能够满足各种场合的需求。
🦋3.4 扩展功能
UE是非常强大的开发平台,有很丰富的开发生态资源。我们还可以为数字人加上肢体动作、接受语音输人功能,如果想用数字人来做直播,还可以为他加入读取弹幕的功能。
🦋3.5 其他数字人介绍
☀️3.5.1 视频数字人
视频数字人的原理是通过预先录制的视频,结合语音技术驱动人物嘴型变化。利用文本合成技术(TTS),可以将文本转换为语音。因此,在录制好一段素材视频后,只需编写适当的文案,即可轻松生成新的内容视频。
优点:
- 生成的内容视频基本符合人物的特征和形象。
局限性:
- 只能改变人物的嘴型,无法改变姿态或进行其他身体动作。
我们使用开源项目 Vide0ReTalking 来生成视频。具体步骤如下:
-
准备系统环境:
- 首先安装 Conda 来管理 Python 环境和包,可在 Conda 官网下载。
- 安装完成后,执行以下命令:
git clone https://github.com/vinthony/video-retalking.git cd video-retalking conda create -n video_retalking python=3.8 conda activate video_retalking conda install ffmpeg # 请按照 https://pytorch.org/get-started/previous-versions/ 的说明安装 PyTorch pip install -r requirements.txt
- 有关该开源项目的更多信息,请访问 Vide0ReTalking GitHub 页面。
-
拍摄视频素材:
- 拍摄视频时,确保脸部占比不要过大。脸部占比过大会导致报错并降低视频质量,因此建议拍摄半身或全身视频。
-
根据文案生成 WAV 声音文件:
- 可以使用免费工具 TTSMaker 生成音频文件,工具网址为 TTSMaker。
-
生成新的内容:
- 准备好素材后,可以执行生成代码,具体命令如下:
python inference.py --face projects/norman/norman.mp4 --outfile results/norman-myhometown.mp4 --audio projects/norman/myhometown.wav
- 成功生成视频需要经过 7 个步骤。图 11-27 显示了执行生成代码的过程。生成视频比较耗时
- 准备好素材后,可以执行生成代码,具体命令如下:
☀️3.5.2 图片数字人
图片数字人是以高清图片为素材,通过 D-ID、HeyGen 等工具生成的视频内容。
优点:
- 数字人形象多变
- 简单易学
- 成本低廉
缺点:
- 动作灵活性不足
比尔·盖茨在第一次体验 ChatGPT 时认为,这是自图形用户界面出现以来最重要的技术进步。有了 AI 加持的数字人,不仅能成为有效的助手,还将深刻改变人类与计算机系统的交互方式。程序员如果能掌握和运用数字人技术,将在 AI 时代获得更大的竞争力和更多的成功机会。
- 点赞
- 收藏
- 关注作者
评论(0)