MetaHuman集合资产在虚幻引擎5.8中作为实验性功能提供,并且仍在积极开发中。
MetaHuman集合资产是一个容器,包含所有可用于组装MetaHuman的模块化部件。 每个部分都是一个衣柜物品,分配给由集合管线定义的插槽。
集合协同工作 MetaHuman Instances资产可为你提供一种非破坏性、管线驱动的方法来组装MetaHuman,替代MetaHuman Creator中的组装按钮。
创建MetaHuman集合
要创建新的MetaHuman集合,请在内容浏览器(Content Browser)中右键点击,导航至MetaHuman类别,然后选择MetaHuman集合(MetaHuman Collection)。 新资产将在集合编辑器中打开。
集合编辑器
集合编辑器是一个专门的资产编辑器,包含四个主要区域:
| 区域 | 用途 |
|---|---|
项目 | 集合中所有项目的平铺视图,按插槽排列。 每个图块显示一个缩略图,并按插槽进行颜色编码。 顶部设有筛选按钮,可显示特定插槽中的项目或同时显示所有插槽中的项目。 |
视口 | 组装好的MetaHuman的3D预览。 随着你的修改而更新,可实时查看结果。 |
项目细节 | 当前所选项目的构建参数。 仅在编辑集合时可见,编辑实例时不可见。 |
项目实例参数 | 所选项目的实例参数重载,例如毛发颜色或材质着色。 |
细节(Details) | 标准细节面板,显示集合的属性,包括已分配的管线。 |
将项目添加到集合
将资产从内容浏览器(Content Browser)拖到项目(Items)面板,即可将项目添加到集合中。 编辑器会检查拖入的资产是否与集合的任何管线插槽兼容。 示例:若管线设有接受Groom绑定资产的毛发插槽,拖入Groom绑定资产会将其添加到该插槽。
如果资产与多个插槽兼容,则会出现一个放置区覆层,供你选择将该资产分配到哪个插槽。
选择项目
双击项目图块,选择该项目用于当前实例。 高亮显示选中项目的缩略图,3D预览将同步更新以显示结果。
根据管线规则确定与当前选择不兼容的项目将显示为灰色,并且无法选择。 例如,管线可能会阻止你选择与当前所选身体不匹配的头部。
每个单选插槽(例如毛发或上衣插槽)一次只能有一个激活的项目。 管线还可以定义支持多选的插槽,例如,可同时穿上多件服装。
构建集合
构建集合会在每个项目上运行管线的构建逻辑,生成网格体、纹理及其他所需资产,以便在运行时组装这些项目的任意组合。 以下是两种构建质量等级:
| 质量 | 用途 |
|---|---|
预览 | 快速构建,以便迭代。 每当你做出更改时,在编辑器中自动应用。 |
生产 | 全质量构建。 当你在存在未应用的集合编辑时点击应用(Apply)时,或者直接点击工具栏上的重建(Rebuild)按钮时,将触发此质量等级。 |
工具栏包括多个用于控制构建行为的选项:
| 选项 | 说明 |
|---|---|
应用 | 将编辑器中的更改提交到资产,如果集合已更改,则触发生产构建。 |
重建 | 强制对集合进行完全的生产重建。 如果源资产自上次构建以来发生更改,则使用此选项。 |
自动构建预览 | 启用后,每次编辑时,集合在预览质量下自动重建。 在同时进行多项更改时关闭此选项。 |
编辑时构建所有项目 | 启用后,所有项目在预览期间构建,无需等待即可在项目之间切换。 关闭时,仅构建当前选中的项目,对于大型集合来说速度更快。 |
对于大型集合,在执行批量编辑时,请关闭自动构建预览(Auto Build Preview)和编辑时构建所有项目(Build All Items On Edit),然后在准备好查看结果时运行应用(Apply)。
生成的资产
构建集合时,生成的资产(例如网格体、纹理和材质)存储在集合资产本身中。 这可以防止你意外编辑生成的资产,因为这些编辑会在下一次集合构建时丢失。
如需检查生成的资产以进行调试,请右键点击内容浏览器(Content Browser)中的集合,然后选择解压资产(Unpack Assets)。 这会将生成的资产从集合解压到项目中,从而在内容浏览器中显示。
解压的资产不是副本。 它们与集合引用的资产相同,并在组装过程中使用。 你对它们所做的任何编辑都会影响从该集合组装的MetaHuman,但这些编辑会在下次构建集合时丢失。 应通过管线修改生成的资产,而不是手动修改。
插槽
集合中可用的插槽完全取决于分配给它的管线。 管线定义自己的一组插槽,每个插槽都有一个名称、接受的资产类型和处理逻辑。 常见示例如下:
| 插槽 | 接受的资产类型 | 说明 |
|---|---|---|
角色 |
| 提供面部和身体的基础MetaHuman角色资产。 |
毛发 |
| 头部毛发Groom。 |
眉毛 |
| 眉毛Groom。 |
上衣 |
| 上半身服装。 |
下装 |
| 下半身服装。 |
这些仅为示例。 创建自定义管线时,你可以精确选择要公开的插槽以及它们接受的资产类型。 管线可以包括用于纹身、粒子效果、静态网格体配饰或项目所需的任何其他内容的插槽。
虚拟插槽
管线可以定义虚拟插槽:在用户界面中显示为单独类别的插槽,但在内部馈入共享插槽。 其优势在于:
该管线可以分组批量处理某些资产。 示例:如果上装、下装和鞋子使用相同的组装逻辑,则可以将它们作为服装项目数组进行处理,而不是三个单独的命名插槽。
用户在用户界面中获得离散的单选插槽。 当他们选择一件新的上装时,自动取消选择所有现有上装。
添加重复使用相同处理逻辑的新服装插槽,只需创建一个指向主服装插槽的新虚拟插槽,无需任何新逻辑。
MetaHuman集合管线
管线驱动集合系统。 它定义了两件事:
有哪些可用插槽——集合可以包含的命名项目类别,以及每个插槽接受的资产类型。
项目的处理方式——构建逻辑(从源资产生成游戏就绪资产)和组装逻辑(将构建的资产组合成可渲染的角色)。
每个集合都分配有一个管线。 你可以在集合的细节面板中查看和更改管线。 管线在C++中定义。
构建和组装的工作方式
管线的工作分为两个不同阶段:
构建在编辑器中运行。 它通过其项目管线处理集合中的每个项目。 这是资产生成的地方:创建网格体、烘焙纹理和生成LOD。 结果将作为构建数据存储在集合中。
组装在实例需要生成可渲染角色时运行:在编辑器预览中、将实例放置在关卡中时或在运行时。 组装会获取构建数据和实例的插槽选择,并将它们组合成最终输出,例如面部网格体、身体网格体、Groom、服装以及管线产生的任何其他元素。
构建过程会消耗大量资源,并且仅在编辑器中运行一次。 组装速度很快,可以在运行时按需运行,这使得运行时角色自定义和程序化人群生成成为可能。
管线的功能
管线的项目处理逻辑可以执行任何可用C++表达的操作。 管线构建和组装步骤可处理的内容举例:
调整Chaos服装资产的大小,从而适配角色的身体。
将Groom的发片网格体转换为骨骼网格体,以便与实例化蒙皮网格体组件配合使用。
移除隐藏在服装下的身体几何体。
将复杂材质烘焙成纹理,以提高运行时性能。
将静态网格体附件附加到插槽上。
创建自定义管线
管线通过在C++中创建UMetaHumanCollectionPipeline的子类创建。 在你的子类中,你需要定义:
插槽——每个插槽都有一个名称、接受的资产类型、UI颜色,以及一个描述插槽输出如何馈入管线整体组合输出的映射。
项目管线——
UMetaHumanItemPipeline的子类,包含管线支持的每种项目类型的构建和组装逻辑。组合输出结构体——一个自定义结构体,包含管线生成的每种输出类型的字段。
例如,要添加一个接受纹理资产的纹身插槽:
创建
UMetaHumanCollectionPipeline的UMyProjectPipeline子类。在构造函数中,向管线规范添加一个插槽条目,并将
SupportedPrincipalAssetTypes设置为你的纹身资产类。创建
UMetaHumanItemPipeline的UMyTattooItemPipeline子类,并实现BuildItem()和AssembleItem(),用于处理纹身。将你的管线类分配给一个集合。
在虚幻引擎5.8中,MetaHuman Creator不支持自定义管线。 自定义管线可以在MetaHuman集合编辑器中使用。
管线插槽属性
管线中的每个插槽具有以下属性:
| 属性 | 说明 |
|---|---|
支持的资产类型 | 此插槽接受的资产类,例如 |
组合输出映射 | 插槽的组合输出如何映射到管线的整体组合输出结构体。 声明此映射可减少管线类中所需的样板代码量。 |
允许多选 | 此插槽中是否可以同时激活多个项目。 |
对用户可见 | 该插槽是否在集合编辑器用户界面显示。 |
插槽颜色 | 用于在用户界面中标识该插槽的颜色,以项目缩略图上的彩色条带显示。 |
目标插槽(仅限虚拟插槽) | 如果设置,则此插槽为虚拟插槽:选中项将转发到目标插槽。 |
项目管线
每个插槽的项目都由一个项目管线处理,项目管线是一个C++类,它知道如何构建和组装特定类型的资产。 例如,Groom资产的项目管线在构建步骤中处理发束数据并应用毛发材质参数,然后在组装过程中将结果附加到角色头部。
资产类型专用逻辑可在集合管线中重复使用。 只要你的项目管线实现了集合管线规范中声明的接口,你就可以自定义项目管线,并在现有的集合管线中使用。
集合中的每个衣柜物品都可以分配一个明确的项目管线。 如果没有,集合管线会根据资产类型提供备用方案。
创建自定义管线时,你需要编写自己的项目管线子类,以处理项目所需的资产类型。 BuildItem()方法在集合构建期间运行,以生成资产。 AssembleItem()方法在实例组装期间运行,将结果组合成最终角色。