Alembic文件导入器

介绍Alembic文件导入过程以及导入选项。

Windows
MacOS
Linux

Alembic文件格式(.abc)是一个开放的计算机图形交换框架,它将复杂的动画化场景浓缩成一组非过程式的、与应用程序无关的烘焙几何结果。虚幻引擎4(UE4)允许您通过 Alembic导入器 导入您的Alembic文件,这让您可以在外部自由地创建复杂的动画,然后把它们导入UE4并实时渲染它们。

导入Alembic文件的方式类似于其他几种导入内容到UE4的形式。

您还可以观看动画主题的虚幻引擎实时流送,其中包括Alembic文件导入器:

导出Alembic缓存

当选择从首选的DCC包导出Alembic缓存文件时,需要考虑一些选项:

选择3D美术工具

Autodesk Maya

Autodesk 3ds Max

  1. 文件菜单(File Menu) 中,在 缓存(Cache)Alembic缓存(Alembic Cache) 下,根据需要选择 全部导出到Alembic...(Export All to Alembic...)(或 选择(Selection))。

    Maya_01.png

  2. 导出(Export) 窗口中,在 高级选项(Advanced Options) 下,启用 UV写入(UV Write)写入面集(Write Face Sets) 选项,然后单击 导出(Export)

    Maya_02.png

    如果打算在导入虚幻引擎4的过程中创建材质,您需要启用 写入面集(Write Face Sets),因为材质是基于找到的面集名称创建的。

导入Alembic文件

要将Alembic文件导入到虚幻引擎4,请执行以下操作:

  1. 内容浏览器(Content Browser) 内,单击 导入(Import) 按钮并指向您的 .abc 文件。
    AlembicImport_00.png

  2. 将显示 Alembic缓存导入选项(Alembic Cache Import Options) 窗口,可以在其中定义用于导入的方法/选项。

    AlembicImport_01.png
    如窗口顶部高亮显示,您将看到文件的名称和要导入的位置。您还将看到在文件中的资源复选框选项,您可以选择在导入过程中包含或排除这些资源(您还可以使用顶层复选框来包含/排除所有轨迹)。

导入为静态网格体

在导入过程中,可以定义如何导入内容。默认情况下,Alembic导入类型(Alembic Import Type) 设置为 静态网格体(Static Mesh)

ImportType_01.png

将Alembic缓存作为 静态网格体(Static Mesh) 导入时,只会将第一帧导入为一个或多个静态网格体。来自Alembic动画的单个帧将作为静态网格体资源导入,不应用动画。以下设置也可用:

静态网格体选项

选项

说明

合并网格体(Merge Meshes)

是否在导入时合并静态网格体(这可能会导致重叠UV集出现问题)。

传播矩阵变换(Propagate Matrix Transformations)

在合并网格体之前是否对它们应用矩阵变换(见下文)。

生成光照贴图UV(Generate Lightmap UVs)

有关是否应生成光照贴图UV的标记。

将Alembic文件作为静态网格体导入时,如果您的数据包含多个网格体,您可以选择 合并网格体(Merge Meshes) 以将网格体合并到虚幻引擎中的单个静态网格体中。如果不勾选此选项,Alembic文件中的每个网格体将作为单独的静态网格体导入UE4,而不是连接在一起。

传播矩阵变换

启用 合并网格体(Merge Meshes) 时要考虑的另一件事是,在合并网格体之前是否 传播矩阵变换(Propagate Matrix Transformations)。这将获取包含在Alembic文件中的变换数据,并在合并时将其传播到网格体,使它们保留其变换数据。

考虑下面创建的示例场景,我们将其作为Alembic缓存导出。

MayaObjects.png

当我们用 合并网格体(Merge Meshes)传播矩阵变换(Propagate Matrix Transformations) 将文件作为静态网格体导入UE4时,我们得到以下结果:

ImportMesh1.png

如果我们 合并网格体(Merge Meshes),但不选中 传播矩阵变换(Propagate Matrix Transformations),我们得到以下结果:

ImportMesh2.png

每个网格体在原点0,0,0处合并。

采样选项

选项

说明

采样类型(Sampling Type)

导入动画时执行的采样类型。

选项

说明

每帧(Per Frame)

根据导入的数据(默认选项)对动画进行采样。

每X帧(Per X Frames)

按帧步长确定的给定间隔对动画进行采样。

每时间步(Per Time Step)

按时间步长决定的给定间隔对动画进行采样。

帧起始(Frame Start)

开始对动画进行采样的开始索引。

帧结束(Frame End)

停止对动画进行采样的结束索引。

在Alembic序列开始时跳过空帧(Skip Empty Frames at Start of Alembic Sequence)

跳过空白(滚动之前)帧,从实际包含数据的帧开始导入

法线计算选项

选项

说明

每个对象强制一个平滑组(Force One Smoothing Group Per Object)

是否强行平滑每个单独对象的法线,而不计算平滑组。

硬边角度阈值(Hard Edge Angle Threshold)

确定两条法线之间的角度是否应该被视为硬角的阈值(越接近于0意味着越平滑)。

重新计算法线(Recompute Normals)

确定是否应该强制重新计算法线。

无视退化三角形(Ignore Degenerate Triangles)

确定计算切线/法线时是否应无视退化三角形。

如何计算法线

下面简要介绍如何基于 导入类型(Import type) 计算法线,以及如何在要导入的文件中使用法线。

  • 当导入一个包含所有帧法线的文件时(When importing a file that contains normals for all frames):

    • 对于静态网格体/几何体缓存(For Static Meshes / Geometry Cache) - 使用现有法线。

    • 对于骨架网格体(For Skeletal Meshes) - 第一帧的法线用于确定平滑组,它将用于计算平均帧和所有基础/变换目标的法线(我们在所有情况下都这样做)。

  • 当导入只包含第一帧法线的文件时(When importing a file that contains normals for only the first frames):

    • 对于静态网格体(For Static Meshes) - 如果使用帧0,则我们使用现有的法线。否则,我们为请求的帧计算平滑组和法线。

    • 对于几何体缓存(For Geometry Cache) - 我们计算所有帧的平滑组和产生的法线。

  • 当导入一个不包含法线的文件时(When importing a file that contains no normals):

    • 我们计算非平滑法线,根据计算法线生成平滑组,并用平滑组重新计算法线。

启用 重新计算法线(Recompute Normals) 时,使用上述指定路径(对于无法线的情况)。

当导入为 骨架网格体(Skeletal Mesh) 时,如果您的动画有较大的法线增量,您可能会在获得正确外观法线上遇到问题。这是一个因变换目标改变面/顶点法线的方式而导致的已知问题。作为一种变通方法,您可以使用(实验性的)皮肤缓存功能来绕过这个问题。

您可以使用 支持计算皮肤缓存(Support Compute Skincache)强制所有蒙皮网格体重新计算切线(Force all skinned meshes to recompute tangents)项目设置(Project Settings) 中启用此功能。 

这将在您下次启动编辑器时重新编译着色器。当您打开骨架网格体资源,您应该能够为每个材质/分段勾选 重新计算切线(Recompute Tangent) 选项。

如何计算平滑组

如果您正在导入的网格体上获得硬边,您可能想要查看 硬边角度阈值(Hard Edge Angle Threshold) 以及如何执行平滑组计算。

1.0 Hard Edge Angle

0.0 Hard Edge Angle

要计算平滑组,首先计算顶点/面法线,然后使用这些法线来查看特定面的所有连接面。通过计算法线之间的角度,我们可以确定边缘是硬边还是软边(类似于Maya中的软/硬边工具)。下面左边的图像我们认为是软边,而右边的图像是硬边。这是因为左边图像中两条法线的夹角小于右边图像中两条法线的夹角。

NormalsExample.jpg

知道了这一点,我们使用点乘积来生成0-1之间的范围作为阈值来定义何时应该是硬边,何时应该是软边。例如,越接近1的值表示角度越大,导致硬边,而越接近0则意味着是软边。然后使用这些信息生成共享软边的法线组。对于这些组,我们平滑这些面上的法线,创建平滑的面。

强制每个对象一个平滑组将使每个单独的对象完全平滑(所有都是软边)。

导入为几何体缓存

当导入为 几何体缓存(Geometry Cache) 时,将创建一种新类型的动画资源,允许回放顶点不同的序列。

Import04_gc.png

导入的Alembic动画将作为一个帧的Flipbook播放,性能将随您网格体的复杂性而变化。

这可能并非适用于所有情况,它被认为是一个实验性的导入选项。

此类导入方法的导入选项包括与 静态网格体(Static Mesh) 导入选项相同的 采样(Sampling)法线计算(Normal Calculation) 选项。导入为几何体缓存还包括根据找到的 面集(Face Set) 名称创建 材质(Materials) 的功能(如果没有在外部应用程序中定义,并随Alembic缓存一同导出的面集(Face Set),此方法无效)。

到目前为止,几何体缓存资源不支持曲面细分设置所需的邻接缓冲区。作为一种变通方法,您可以使用变换目标将动画导入为 骨架网格体(Skeletal Mesh)(这是一种压缩程度更高的导入方式),因为这将支持曲面细分。

导入为骨架

该方法将Alembic文件导入为 骨架网格体(Skeletal Mesh),其中包含基础姿势作为变换目标,并混合它们以实现正确的动画帧。只要顶点数不变,导入为骨架网格体是播放Alembic动画的最有效方法。

Import04_sk.png

在导入过程中,将使用主成分分析(PCA)方案对您的动画序列进行压缩,在该方案中,提取常见姿势(基础)并对其进行加权,以便在播放期间组成原始动画。当导入为骨架网格体时,除了 采样(Sampling)法线计算(Normal Calculation)创建材质(Create Materials) 选项,您还可以定义百分比(或使用的固定基数)来调整压缩级别。

压缩选项

选项

说明

合并网格体(Merge Meshes)

是否应合并单独的网格体以用于压缩用途。

烘焙矩阵动画(Bake Matrix Animation)

是否应该将纯矩阵动画烘焙成顶点动画(或跳过)。

基础计算类型(Base Calculation Type)

确定如何计算存储为变换目标的最终基数。

选项

说明

基于百分比(Percentage Based)

确定应与给定百分比(默认选项)一起使用的基数数量。

固定数量(Fixed Number)

设置要导入的固定基数数量。

总基数的百分比(最大数量)(Percentage (Max Number) of Total Bases)

这将生成给定(百分比或固定数量)的基数作为变换目标。

这对压缩级别来说是一个比较重要的方面。输入较小的基数将使动画压缩程度更高,但精细的动画细节可能会丢失。相反,输入较大的基数会降低压缩程度,但会保留更多的动画细节。

顶点影响最小百分比数(Minimum Number Of Vertex Influence Percentage)

为了使变换目标生效,所需的受影响顶点的最小百分比。

此设置允许您根据定义的影响百分比确定何时导入基础/变换目标。例如,如果我们有一个有1000个顶点的模型,其中一个基础目标只影响10个顶点。如果我们将该值设置为10,前面提到的基础/变换目标将不会被导入。

欢迎来到全新虚幻引擎4文档站!

我们正在努力开发新功能,包括反馈系统,以便您能对我们的工作作出评价。但它目前还未正式上线。如果您对此页面有任何意见与在使用中遭遇任何问题,请前往文档反馈论坛告知我们。

新系统上线运行后,我们会及时通知您的。

发表反馈意见