超写实虚拟人制作教程

news2024/11/28 10:55:47

最近突然吹起一阵虚拟人直播风潮,大概就是找一个虚拟人物,用主播的面部动作来驱动虚拟人来完成头部和表情动作,但我看大部分都是下载的UE5Unreal Eigine 5(Epic公司出品的一款强大的3D创作平台,很多大型3A大作都是用其开发的),比如我们熟悉的绝地求生、黑神话:悟空等。

我最近研究了下,这里面主要的模块主要包括:
1、UE5里的Metahuman提供了丰富的虚拟人库,可以下载作一个独立的蓝图(Blueprint)在UE5的场景中使用
在这里插入图片描述
2、苹果手机前置深度传感器,可以实时捕捉人脸的三维数据,这需要Iphone X以上的型号才支持。【You’ll need to have a model of iPhone that has both a depth camera and ARKit. These capabilities are typically included in iPhone X and later.】
3、Epic公司开发的IOS APP: Live Link Face通过Lidar传感器实时捕捉人脸三维数据并识别关键部位,主要包括整体头部、眼睛和嘴巴。
在这里插入图片描述
但是,以上三个模块,只能完成非写实的虚拟人驱动,如果说要完成写实虚拟人驱动,则我们还需要加两个模块:
4、通过手机视频/拍照的方式采集人脸的数据,再使用摄影测量软件进行人脸的三维重建
5、使用UE5的Metahuman插件进行写实虚拟人制作

最终我们的成品如下:

面部捕捉

小板凳准备好,我下面来说一下详细步骤:

里面有很多细节的操作,有直接可跳转的链接我会尽量贴链接,不然此篇教程会非常庞大(我就是有点懒不想再写一份)

文章目录

    • 0 准备工作
    • 1 采集人脸数据并重建三维模型
    • 2 Metahuman捏脸
    • 3 Metahuman资产导入UE5
    • 4 使用Live Link Face面部驱动虚拟人

0 准备工作

1、下载安装一款摄影测量软件,如DJI Terra、Reality Capture、Metashape、ContextCapture等,如果你不是英伟达显卡,则你可能只能使用Metashape
2、下载安装三维模型处理软件Meshlab
2、IPhone X以上型号苹果手机一部,并下载APP Live Link Face
3、下载安装Unreal Engine 5
4、电脑一台,显存>=4G、内存>=8G

1 采集人脸数据并重建三维模型

1、保持人脸静止不动,找其他人帮忙或自拍人脸一圈,拍摄的过程中人脸需要静止,否则无法完成建模,比如我自拍的视频:(自拍的有点随意,但是大概表达一个拍法),拍摄视频和图片都可以,图片的拍法是差不多每隔半秒按一次快门,同时尽量在拍摄的时候距离保持一致,不要忽近忽远,容易触发自动对焦,这对建模来说是不利的。

2023-04-22 231932

2、将图片/视频导入摄影测量软件,这里有个问题是大部分摄影测量软件都只支持图片,只有ContextCapture支持视频,我们通过ContextCapture来对视频抽帧,再把抽出来的图片导入其他软件来建模(其实也可以全程使用ContextCapture,但这个软件试用版模型结果有水印很蛋疼),我比较习惯用DJI Terra。(如果你不是英伟达显卡,则你可能只能使用Metashape)
视频抽帧的教程为:ContextCapture视频抽帧
抽帧完成后,在输出目录里找到图片,打开DJI Terra软件,新建可见光重建任务,导入图片,打开三维开关,并在输出格式中将ply格式勾上,注意下面图中红圈位置就是一些关键步骤提示
在这里插入图片描述
在这里插入图片描述

点击开始重建,等待重建完成,完成后如下图:
在这里插入图片描述
打开软件输出目录,找到obj模型文件,目录路径是models/pc/0/terra_obj/Block/Block.obj

在这里插入图片描述
在这里插入图片描述
用Meshlab打开该obj文件,打开软件后,把obj文件直接往软件窗口里拖动,打开后如下:
在这里插入图片描述
我们用Meshlab做一些编辑,只保留模型的人脸部分,其他全部删除掉,完成后如下:(怎么删除我就不在此介绍了,不然过于繁琐,这步是一个比较简单的操作,大家上网搜索自己鼓捣鼓捣就能搞定)
在这里插入图片描述
保存结果到另一个文件夹,在保存选项中把存储纹理图选项勾上
在这里插入图片描述
就此,第一步人脸模型重建完成,接下来是使用UE5的Metahuman插件导入重建的人脸模型进行写实虚拟人制作。

2 Metahuman捏脸

打开UE5软件,新建一个空白项目,
在这里插入图片描述
在编辑菜单中点击插件,搜索Metahuman并安装,安装完重启UE5生效。
在这里插入图片描述
在这里插入图片描述
然后在左下角打开内容侧滑菜单,点击导入,找到obj文件并导入:
在这里插入图片描述
导入后在窗口中可以看到我们的人脸模型:
在这里插入图片描述
接下来点击在内容侧滑窗口右上角的添加按钮,找到Metahuman菜单,点击Metahuman本体。
在这里插入图片描述
这时内容窗口内会出现一个Metahuman本体,可以修改一下它的名字,比如MyFace(不改也可以),
在这里插入图片描述
然后双击打开,这时需要登录Epic账号,可以即时注册一个。
打开后,在新的窗口中,点击网格体中的组件,选择我们重建的人脸三维模型,

在这里插入图片描述
窗口中会出现一个人脸模型,点击它按F可以自动调整到窗口中间来,再调整下模型的位置和缩放,使脸部正面位于窗口中心
在这里插入图片描述
可以调整这里的摄像机摄影使得人脸缩放到合适的尺度,以及关掉光照使得追踪更成功。
在这里插入图片描述

然后选中左侧的Neutral Pose,依次点击 提升帧-追踪活动帧,自动追踪眼睛嘴巴和关键线条,
在这里插入图片描述
完成后可以点击窗口正上方的B,查看配对的虚拟人体,
在这里插入图片描述

然后点击Metahuman本体解算,解算完成后在右侧面板中点击身体,选中一款中意的,
在这里插入图片描述
然后点击网格体转Metahuman,等待完成。
在这里插入图片描述

完成后,打开浏览器,输入网址 https://metahuman.unrealengine.com/,在打开的界面中,点击运行最新版本的Metahuman Creator
在这里插入图片描述
稍作等待后,即可进入Metahuman捏脸页面,可以看到我们刚才制作的人脸模型已经出现在列表中(服务器在国外,网络链接不舒畅的话,画面有时候会比较模糊),可以看到此时模型还只是一个底模,没有皮肤毛发,所以我们选中后,点击编辑已选项进入编辑页面。
在这里插入图片描述
编辑页面里可以添加不同类型的头发、设定皮肤颜色、眼球颜色、睫毛类型等,总之可以按照你的想法DIY你的虚拟人,但样貌会一直保持神似。
详细的编辑方法,我这里不再详细说明了,大家可以查看Metahuman的官方文档:https://docs.metahuman.unrealengine.com/zh-CN/creating-a-metahuman-in-metahuman-creator/
我这个视频可以参考下

Metahuman虚拟人体验

3 Metahuman资产导入UE5

用Metahuman制作完虚拟人后,下一步是导入UE5,我们打开UE5软件,还是载入前面的空白项目,点击主菜单中的窗口-Quixel Bridge

在打开的Bridge主窗口右上角点击登录前面注册的Epic账号,
然后在左侧的侧边栏中点击MetaHumans,里面有两类资产,一类是MetaHuman Presets,是MetaHuman官方的虚拟人资产;一类是My MetaHumans,是我们自己捏的虚拟人,也就是我们前面制作的虚拟人会出现这一栏中。
在这里插入图片描述
选中My MetaHumans后,在右侧的资产窗口中,找到我们前面制作的虚拟人并鼠标点击,这里我就选一个我之前做好的,这里会有4步操作1、点击选中要导入UE的虚拟人资产
2、在右下角选项中切换质量类型,推荐Highest Quality
3、下载资产到Bridge
4、导入资产到UE
如下图所示,
在这里插入图片描述
在点击导入后,等待进度条执行完毕,会出现缺失插件的提示,全部选择启用缺失即可,然后会让你重启UE,按照提示重启。

重启后切换到UE主界面,在下方侧滑菜单的内容窗口中新出现了一个MetaHumans的文件夹,里面就有刚才导入的虚拟人资产,名字是你在MetaHumans创作平台中的命名,我这里是自己改成了Yingsong,选中它后右侧内容窗口中有一个BP_Yingsong的蓝图类,这表明你已经导入成功了。
在这里插入图片描述

4 使用Live Link Face面部驱动虚拟人

要用手机驱动电脑上的虚拟人,必须让手机和电脑产生连接,首先让手机电脑连接到同一个局域网(有/无线连接同一个路由器即可),然后手机打开Live Link Face,点击左上角的齿轮样工具,再点击LiveLink,在目标栏点击添加目标,输入电脑的IP地址。

查找电脑IP地址的方法:
在Windows中,执行以下步骤:
1、右键点击 任务栏中的 连接图标。然后,在弹出的菜单中,选择 打开网络和互联网设置。

2、向下滚动到 属性(Properties) 部分(或者点击 属性(Properties) 按钮,取决于操作系统版本)。然后记下或者复制 IPv4地址 数值。
在这里插入图片描述
在macOS中,执行以下步骤:
1、打开 网络偏好。
2、双击 网络 图标。
3、选择你当前连接的 网络。
4、点击 高级 按钮。
5、在打开的窗口中,点击 TC/ICP 选项卡,然后记下或者复制 IPv4地址 数值。

然后回到UE5主界面,在主菜单找到 编辑(Edit) > 插件(Plugins) 并确保为项目启用了以下插件:

  • Live Link Live
  • Link Control Rig
  • Apple ARKit
  • Apple ARKit Face Support

向项目中导入至少一个MetaHuman后,这些插件应该默认自动启用。如果没有则手段启动一下。

然后在窗口菜单中点击虚拟制片-Live Link

在弹出窗口中看到一个Apple AR面部追踪的选项,选中它。

然后我们打开下方的内容侧滑菜单,找到前面导入的虚拟人资产:BP_Yingsong蓝图类,双击它,在弹出的窗口右侧细节栏中找到LiveLink设置栏,按照下图所示进行设置,设置完依次点击左上角的编译和保存,然后退出此窗口。
在这里插入图片描述
回到UE主界面,在内容侧滑窗口中,找到BP_Yingsong蓝图类,用鼠标拖进关卡窗口中,调整模型的位置和视角,使其面朝屏幕前方,能够清晰地看到虚拟人的面部。
然后在你的iOS设备上,打开LiveLink Face app并将前置摄像头对准你的面部。你应该能够看到追踪网格覆盖在你的脸上,并且会根据你的表情和头部移动做出反应。这一步就完成了。

到这里全部步骤就基本结束了,后面的就自己探索啦,包括灯光控制啥的,自己搜搜教程,也比较简单了。最终效果如下视频所示:

面部捕捉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/474489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

google.common的guava依赖的partition分割产生的浅拷贝问题解决方案

google.common的guava依赖的partition分割产生的浅拷贝问题解决方案 问题背景解决方案Lyric&#xff1a; 说你不爱我 问题背景 使用google.common的guava依赖的partition分割产生的浅拷贝问题&#xff0c;如: 把userList集合分割成每个10000的小集合 List<List> partiti…

vue+gin—— GetcharZp

vuegin—— GetcharZp vuegin—— GetcharZpP1-项目介绍【03:51】P2-项目梳理【29:59】problemusercategorysubmit P3-环境搭建【05:27】P4-整合GIN、GORM【16:20】P5-整合 Swagger【10:01】P6-接口-问题列表【19:34】P7-接口-问题详情【24:06】P8-接口-用户详情【05:36】P9-接…

C++菱形继承(再剖析)

当子类对象给父类对象的时候&#xff0c;怎么找公共的虚基类&#xff08;A&#xff09; 就得通过偏移量来算虚基类的位置 ---------------------------------------------------------------------------------------------------------------------------- 我们来分析一下B…

DBi-Tech Studio Controls 1.6 for .NET Crack

Studio Controls for .NET 为 Windows 开发人员提供了 18 个 .NET 控件&#xff0c;用于 Outlook 风格的调度到管理单元报告、Windows 应用程序导航到现代 UI 设计演示以实现自然的最终用户功能。 Appointment Scheduling、Time Tabling、Day Timer ... 应…

【Unity入门】20.三维向量

【Unity入门】三维向量 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity入门系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;空间向量 &#xff08;1&#xff09;什么是三维向量 为什么会有这么一篇博客呢&#xff1f;主要是三维向量在unity中…

[Redis] 数据结构zset压缩列表实现和跳表实现讲解

&#x1f61a;一个不甘平凡的普通人&#xff0c;致力于为Golang社区和算法学习做出贡献&#xff0c;期待您的关注和认可&#xff0c;陪您一起学习打卡&#xff01;&#xff01;&#xff01;&#x1f618;&#x1f618;&#x1f618; &#x1f917;专栏&#xff1a;算法学习 &am…

多级缓存建设方案

项目背景 xx系统中对容量和耗时有较高要求&#xff0c;以支付优惠立减为例&#xff0c;每个用户咨询可用立减时&#xff0c;都会过一遍全量生效活动。目前日常活动数3000&#xff0c;目标2w&#xff1b;日常秒级咨询量1w&#xff0c;大促22w。所以如何支撑日常和大促的业务非常…

Unity利用UGUI RawImage组件制作转场动画

Unity利用UGUI RawImage组件制作转场动画 最近接到了一个unity全景图的小项目&#xff0c;由于在不同的场景之间转场时直接转会太过生硬&#xff0c;因此要求有个Alpha转场的动画。于是想到两种可行的方案&#xff1a; 一、UGUI方案 用UGUI显示当前屏幕纹理&#xff0c;然后…

python处理图像的各种技术镜像、旋转、遮挡、叠加、条带化

2.6 图像镜面对称 1、将图像水平镜面转换。 2、将图像垂直镜面转换。 import random #导入模块 import numpy as np import matplotlib.pyplot as plt a plt.imread("1.jpg") # 将图像沿着水平方向重复三次。 ba.copy() da.copy() # 将图像水平镜面转换。&…

【笔记】cuda大师班1-4

一.基本概念 进程&#xff08;process&#xff09;一个正在被执行的计算机程序的实例 上下文&#xff08;context&#xff09;&#xff1a;待处理数据的集合&#xff0c;允许处理器暂停&#xff0c;保持处理的执行和恢复处理 并发&#xff1a;上下文切换&#xff0c;主要应用于…

AIGC - 生产力新工具 Copilot

文章目录 介绍能干啥IDEA 安装 介绍 https://github.com/features/copilot 能干啥 Copilot的主要功能包括: 代码补全和提示:Copilot会根据上下文,智能提示您可能需要的变量,函数,参数等。快速生成代码:Copilot可以快速生成if语句,for循环,类定义,函数定义等代码模板。代码优…

Unity之OpenXR+XR Interaction Toolkit实现 传送

前言 VR中由于走动比较容易头晕&#xff0c;所以基本上玩家移动都是靠传送&#xff0c;这样用户更加直观&#xff0c;传送过去也不会感觉头晕。 好了&#xff0c;那么我们一起来说实现一下OpenXR的传送功能。 准备 我们新建一个3D&#xff08;URL&#xff09;项目&#xff0…

git 撤销add/commit,以及更换源命令

前言&#xff1a;主要是为了自己方便记录&#xff0c;省的每次都查找一下这些命令 1、当我们只是想撤回commit&#xff0c;保留add .的时候&#xff0c;可以用下方代码 git reset --soft HEAD^ 2、当我们想撤回commit以及add .的时候&#xff0c;可以用下方代码 git reset…

Mesh形变算法

前言&#xff1a; 作者正好因为动画、模拟仿真等等的重大需求需要预先研发离散形的模型Mesh的形变算法&#xff0c;并且要验证、研究适用的范围、特别是性能等等&#xff0c;摸着石头过河别喷&#xff0c;毕竟我主要是渲染、动画、引擎的对于计算几何、三维重建不是很熟悉&…

Python小姿势 - Python使用Jupyter Notebook

Python使用Jupyter Notebook Jupyter Notebook是一个开源的Web应用程序&#xff0c;可以用来创建和共享包含 live code&#xff0c;公式&#xff0c;可视化和解释性文本的文档。 安装Jupyter Notebook 首先&#xff0c;确保你安装了正确的Python版本和包管理器&#xff08;pip&…

(6)elasticsearch的分词器

1 文档规范化&#xff08;normalization&#xff09; 是为了提高召回率。 停用词 、时态转换、大小写、同义词、语气词。 以下的doc1\doc2&#xff0c;经过normalization之后&#xff0c;在搜索的时候是可以匹配到这两个doc。 我们可以看到&#xff0c;normalization就是把一…

带你认识什么是BMS(电池管理系统)

文章目录 概述BMS的硬件拓扑BMS的电气架构BMS的功能BMS的总压采集&#xff08;主板功能&#xff09;BMS的电流采集&#xff08;主板功能&#xff09;BMS的电芯电压和温度采集&#xff08;从板功能&#xff09;BMS的SOC、SOP和SOH&#xff08;ASW计算&#xff09;BSM的绝缘检测B…

ES6新特性(1)

目录 一、字符串扩展 &#xff08;1&#xff09;字符串遍历器接口&#xff08;for...of...&#xff09; &#xff08;2&#xff09;模板字符串 二、字符串新增方法 &#xff08;1&#xff09;包含方法 &#xff08;2&#xff09;重复方法 &#xff08;3&#xff09;补全方…

MySQL数据库,JDBC连接数据库操作流程详细介绍

前言&#xff1a; 在学完 MySQL 和 Java 后&#xff0c;我们通常会尝试使用 Java编译器 连接 MySQL数据库&#xff0c;从而达到使用编译器来操作数据库的效果。连接的这个过程会用 JDBC 相关知识&#xff0c;因此我把 JDBC 包的下载及导入流程&#xff0c;以及 JDBC 的使用流程…

Arduino驱动L298N控制直流电机的正反转和调速

Arduino驱动L298N控制直流电机的正反转和调速 一、前言二、产品参数三、驱动直流电机三、接线图四、程序五、实验结果总结 一、前言 本模块使用ST公司的L298N作为主驱动芯片&#xff0c;具有驱动能力强&#xff0c;发热量低&#xff0c;抗干扰能力强的特点。LN&#xff12;&am…