毛发渲染

概述在虚幻引擎内如何导入、渲染和模拟发束。

Choose your operating system:

Windows

macOS

Linux

传统的实时毛发渲染采用基于发片的渲染方案(或其他类似技术)。 在基于发片的工作流中,通过使用大量卡片状的发片来近似模拟大量毛发的形状和运动。而虚幻引擎的Groom系统和工具允许你单独渲染每一根发丝/发束,从而大幅提高毛发实时模拟的视觉逼真度。

虽然毛发Groom当前尚无标准文件格式,但Groom系统提供了一种基于Alembic(.abc)文件格式和特定命名规范的方案,帮助引擎从建模软件导出的毛发文件中提取数据。Groom系统还提供了对单个Alembic文件中的多个毛发组(例如头发、绒毛、胡须、睫毛和眉毛)、一流的毛发着色器和渲染系统,以及使用Niagara的动态集成的支持。

Groom系统旨在最低限度地实现发束导入、渲染和模拟。本更新不提供毛发梳理解决方案。毛发的定型或梳理需在外部DCC工具中执行,例如Maya中的XGenOrnatrixYeti刮脸和理发Houdini

在项目中启用毛发

要在项目中使用毛发,必须启用以下设置和插件。

要使其中每一项生效,需要重启编辑器。

项目设置

转至 编辑(Edit) > 项目设置(Project Setting) ,打开项目设置。在 渲染(Rendering)> 优化(Optimizations) 中,启用 支持计算皮肤缓存(Support Compute Skin Cache)

HairProjectSettings.png

插件浏览器

转至 编辑(Edit) > 插件(Plugins) ,打开插件浏览器窗口。在 几何体(Geometry) 类别下,启用这些插件:

GroomPlugins.png

  • Alembic Groom导入器

  • Groom

基本工作流

以下流程图描述将自己的毛发Groom导入UE4,并连接到可动画化的骨骼网格体角色的高级流程。

HairBasicFlow.png

  1. 在喜好的DCC应用程序中创建毛发Groom。

  2. 将毛发Groom导出为Alembic (*.abc)文件。

  3. 将该Alembic Groom文件导入UE4。

  4. (可选)在内容浏览器中为你的骨架网格体创建一个绑定资产(Binding Asset)。

  5. 将Groom资产置于世界场景中(作为蓝图中的Actor)。

  6. 使用转移蒙皮将Groom组件(Actor)连接到骨骼网格体插槽。

  7. 设置并指定毛发材质

完成这些步骤后,就获得了交互式groom,可用于正在动画化的已连接骨骼网格体。

请参照

[毛发渲染与模拟快速入门](working-with-content/Hair/QuickStart)
指南,详细了解这些步骤。

有关设置毛发Groom以从/向UE4导出/导入的更多详情,参见

[Alembic for Grooms规格](working-with-content/Hair/AlembicForGrooms)
参考页面,其中包含有关启用UE4以直接导入groom的方案。

Groom资产

Groom 资产表示你导入的Alembic(.abc)文件的毛发Groom,并且存储在内容浏览器(Content Browser)中。双击Groom资产将打开 Groom资产编辑器(Groom Asset Editor)

GroomAssetEditor.png

你可以使用Groom资产编辑器管理和编辑Groom的各个部分。你将能够执行以下操作:

  • 分配材质

  • 创建表示发束、发片或网格体的细节级别网格体

  • 启用和配置物理设置

  • 使用不同的视图模式调试Groom

右键点击内容浏览器中的Groom资产后,有多个额外的 Groom操作 可用于:

GroomAsset_ContextMenu.png

  • 根据Groom导入选项 重建(Rebuild) 所选Groom的构建设置。

  • 创建绑定(Create Binding) 以生成用于将Groom附加到骨骼网格体的绑定资产。

  • 使用所选Groom为毛囊和发束 创建纹理(Create Textures)

如需了解更多信息,请参阅Groom资产编辑器

生成发束纹理

使用 Groom 资产,你可以根据导入的Groom中的发束数据创建纹理。你可以为骨骼网格体生成毛囊遮罩,更好地将毛发与其网格体表面混合。你还可以创建多个发束纹理,以用于创建毛发网格体或发片。

你的Groom可用于生成可以应用于网格体的纹理。

DepthTextureOutput.png

TangentTextureOutput.png

HairMeshResult.png

深度纹理

切线纹理

带生成的纹理的毛发网格体

如需了解更多信息,请参阅生成Groom纹理

设置毛发材质

为使毛发几何体正确渲染,它需要分配有 着色模型(Shading Model) 设置为 毛发(Hair) 的材质。

Material_Settings.png

你还需要在用法(Usage)类别下启用 用于发束(Use with Hair Strands) 。这应该会在首次应用于Groom时自动启用,但如果未启用,你可以手动将其启用。

下面是使用 毛发属性(Hair Attributes) 表达式的示例毛发材质:

Material_HairExample.png

绑定资产

绑定资产用于将Groom组件添加并蒙皮到骨骼网格体上。通过这种方法,Groom可以指定给需要用到它的骨骼网格体,还能指定给享有相同拓扑的骨骼网格体。

BindingAsset.png

在内容浏览器中右键点击 Groom资产(Groom Asset) 并在快捷菜单中选择 创建绑定(Create Binding) 。在创建绑定时,请使用 Groom绑定选项(Groom Binding Options) 窗口指定 目标骨骼网格体(Target Skeletal Mesh)源骨骼网格体(Source Skeletal Mesh)

创建绑定资产时,必须指定 目标骨骼网格体(Target Skeletal Mesh) ,否则在此期间不会创建任何绑定。

启用物理模拟

打开 Groom资产编辑器(Groom Asset Editor) ,并从 物理(Physics) 面板选中 解算器设置(Solver Settings) 下的 启用模拟(Enable Simulation) 旁边的复选框,启用Groom上的物理。

HairPhysicsGroomSettings.png

启用后,你可以浏览影响Groom组件的各种物理设置。请参阅毛发属性参考,详细了解每个属性。

调试毛发

使用以下控制台变量调试项目中的毛发:

控制台变量

说明

r.HairStrands.DebugMode

启用以下命令模式之一,将有关毛发渲染的各种统计信息和调试信息绘制到屏幕:

  • 0 - 关闭

  • 1 - 群集信息

  • 2 - 所有DOM光源边界

  • 3 - 屏幕投影群集

  • 4 - 深度不透明贴图

  • 5 - 亚像素样本计数

  • 6 - TAA解析类型(常规/响应)

  • 7 - 毛发覆盖类型

  • 8 - 毛发密度体积

  • 9 - 毛发切线体积

  • 10 - 毛发底色体积

  • 11 - 毛发粗糙度体积

  • 12 - 毛发网格体投影

  • 13 - 毛发覆盖

r.HairStrands.StrandMode

启用此命令以渲染场景中发束的选定调试模式:

  • 0 - 关闭

  • 1 - 模拟发束

  • 2 - 渲染发束影响

  • 3 - 根UV

  • 4 - 根UV UDIM纹理索引

  • 5 - 毛发UV

  • 6 - 毛发种子

  • 7 - 毛发尺寸

  • 8 - 毛发半径变体

  • 9 - 毛发顶点颜色

  • 10 - 毛发顶点粗糙度

已知限制

  • 帧率取决于groom大小、分辨率,以及采用的底层硬件。例如,对于1080p的人类groom,底层硬件应为2080Ti,帧率30Hz或更高。

  • 视图模式尚不支持毛发。

  • 多视图(毛发在多个开放窗口上可见)尚不受支持,或会导致出现瑕疵。

HairWorks用户

有些人会使用NVIDIA的毛发解决方案 HairWorks ,它包含DCC工具集成以及实时毛发渲染和模拟,需要注意的是,虚幻引擎自4.16版本开始就废弃了HairWorks。我们的长期计划是让Groom系统功能帮助为目前使用HairWorks集成的人提供迁移路径。

虽然NVIDIA通过其GitHub分支为UE4提供的最后一个正式HairWorks版本是4.16版本,但有各种补丁和升级已创建并在线提供,不过它们不受官方支持。

本文基于此前的虚幻引擎版本编写,未针对当前的虚幻引擎5.0版本更新过。