Alembic

以下摘自 Alembic 主页

Alembic 是一个开放的计算机图形交换构架。Alembic 把复杂的、动画的场景提取为非程序化的、与处理软件无关的一套烘焙好的几何体。这种把场景“提取”为烘焙好的几何体的过程完全类似于把灯光和渲染场景提取成渲染出的图像数据。

Alembic 专注于把复杂的程序化的几何体构建的计算结果进行高效的存储。非常明确的一点是,它 存储用来创建计算结果的复杂的程序化工具的依存关系。比如说,Alembic 会高效地储存任意的复杂动画和模拟过程(包括包裹变形、形状校正、恒定体积模拟、布料和肌肉模拟,等等)所产生的动画的顶点位置和动画的变形。

简而言之,Alembic 可用于将动画网格写入驱动器,并快速有效地读回。这意味着网格可以使用 CPU 密集型的装配器进行动画处理,然后 “烘焙” 到 Alembic 文件。最后,它可以加载到镜头文件中,仅使用中等 CPU 进行着色和照明。

由于 Alembic 标准的开放性以及 C++ 库文件的标准化,Blender 可以用于混合的流程。比如说,Houdini 或者 Maya 这样的软件可以把文件输出为 Alembic 格式,然后在 Blender 中载入、贴图、渲染。也可以在 Blender 中对角色(或者其它模型)赋予动画,然后输出为 Alembic 文件,继而在其它软件中加载后进一步处理。

导出为 Alembic 文件

此章节说明不同的输出选项的效果。

Manual Transform

../../_images/files_import-export_alembic_export-panel-scene-options.png

Generic and Scene Alembic Export options.

比例|缩放

设置 Alembic 文件的全局缩放值。使用缺省值 1.0 则采用 Blender 的单位。

场景选项

起始帧、结束帧

设置输出至 Alembic 的帧范围。缺省使用当前场景的帧范围。

子帧采样

这些选项控制动画的子帧采样。

变换采样

变换样本设置每帧的动画变换采样并写入 Alembic 的次数。

几何数据

几何样本设置相同,但随后设置为动画几何体。

快门开启/闭合

快门打开/关闭定义拍摄样本的间隔 [打开,关闭]。有效范围是 -1 到 1,其中 -1 表示前一帧,0 表示当前帧,1 表示下一帧。

例如,如果需要用于详细网格运动模糊的信息,则可以通过使用样本计数 5,快门打开 -0.25 和快门关闭 0.25 来将当前帧周围的一些子帧写入 Alembic。这模仿了一个 “180度” 快门,在当前帧前打开 90 度,在当前帧后打开 90 度。

摊平层级

不勾选此项时,将输出物体间的父/子关系。如果父物体本身不输出而子物体要被输出,则父物体以空物体代替。如果选中此项,则不输出父/子关系,所有的变换都按照世界坐标输出。

使用实例化

关联副本实例出为 Alembic 实例,以加快导出速度,并可以禁用与其他软件的兼容性。

自定义属性

启用后(默认情况下),自定义属性也导出到 Alembic。支持以下自定义属性类型:

  • 数字(int, float)和字符串。这些将导出为单个元素的数组,因此 47 将导出为 [47] 到 Alembic,"Agent"["Agent"]。这与许多其他 DCC 的行为相匹配。

  • 数字和字符串列表。这些按原样导出,因此 [327, 47] 导出为 [327, 47]

  • 矩阵和嵌套的数字数组。这些被平整成一个长列表,因此 3 × 2 的数字矩阵将变成一个 6 个数字的列表。同样,嵌套列表 [[1, 2, 3], [4, 5], [6]] 将导出为 [1, 2, 3, 4, 5, 6]

  • 存储几何形状的形变信息,用于动画。

Only
选定的物体

选中此项时,只输出被选中的物体。否则输出所有物体。

可见物体

输出的物体仅限于当前可见的场景集合内。

Use Settings For

确定物体可见性、修改器设置和其他具有不同设置的视图和渲染区域。

渲染

对物体可见性、修改器设置等使用渲染设置。

视图

对物体可见性、修改器设置等使用视图设置。

Object Options

../../_images/files_import-export_alembic_export-panel-object-options.png

Object options.

UV

选中此项后,将输出 UV。虽然 Alembic 标准只支持单个 UV,Blender 以可以被其它软件读取的方式输出所有的 UV。

Pack UV Islands

Generates an optimized UV layout with non-overlapping islands that tries to efficiently fill the Texture Space. See the Pack Islands operator that works with the same principle for more information.

法向

启用后,将导出物体的法向。有关详细信息,请参阅下文的自定义网格的拆边法向

颜色属性

启用后,导出颜色属性。

面组

按面输出材质名称。仅导出材质名称,不导出材质数据。

细分
应用

在输出 Alembic 前应用表面细分修改器

使用架构

使用 "SubD" 算法架构(而不是 "多边形" 架构)写入多边形网格。这将为用于打开文档的进程设置一个导入选项,以应用其非破坏性细分形式。

三角化

在输出 Alembic 前对网格三角化。具体选项的更多细节见三角化修改器

粒子系统

../../_images/files_import-export_alembic_export-panel-particle-systems.png

粒子系统选项。

Alembic has no support for Particle Systems, in the same way that it does not support armatures. Hair is exported as animated zero-width curves. Particles are exported as animated points.

导入 Alembic 文件

导入 Alembic 文件时,网格序列缓存修改器将自动添加到随时间变化的网格中。对于随时间变化的物体变换(即旋转、位置或缩放的动画),使用变换缓存约束

自定义网格的拆边法向

Blender 支持将自定义法向导入和导出到 Alembic 文件。作为基本的经验法则,完全平滑的网格导出时不附带法向,从而生成最小的 Alembic 文件。这反映在导入器中;没有法向的 Alembic 网格作为平滑网格加载。

导出时,对于每个网格:

  • 如果它具有 自定义循环法向,则导出循环法向。

  • 如果一个或多个面标记为平面,则循环法向也会导出。

  • 否则,不会导出法向。

导入时,当 Alembic 网格包含:

  • Loop normals (kFacevaryingScope) are used as custom loop normals, and enable Auto Smooth to have Blender actually use them.

  • 顶点法向(kVertexScope``或 ``kVaryingScope)转换为循环法向,并如上所述处理。

  • 如果没有法向,则网格将标记为平滑。

  • 不支持的法向类型(kConstantScope, kUniformScope, kUnknownScope)作为 无法向 处理。

When an imported mesh does not contain normals, the final look can be controlled by enabling the Auto Smooth checkbox and altering the threshold angle.

处理时间

Unlike Blender and many other applications and file formats, Alembic files don't have any concept of frames. Alembic works purely with time, and values that are sampled over time. For example, there is no way to distinguish 30 FPS with 2 samples per frame, and 60 FPS with 1 sample per frame. This has caused many developers to just hard-coded 24 FPS when reading Alembic files.

Blender 使用当前场景帧率将帧数(在 Blender 中)转换为以秒为单位的时间(在 Alembic 中)。因此,可以将以 120 FPS 速率生成的 Alembic 文件导入到 30 FPS 的 Blender 场景中,并且仍然看不到任何时间拉伸。