Alembic

以下摘自 Alembic 主页:

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

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

TL;DR :Alembic 可以把动画网格写入硬盘,然后再迅速高效地读取出来。这意味着可以把需要巨大的 CPU 消耗的绑定动画的网格,'烘焙'到一个 Alembic 文件里,然后再加载入拍摄文件中进行着色和灯光设置,这样 CPU 的占用会比较小。

对 Alembic 文件格式的支持始于 Blender 2.78.

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

导出为 Alembic文件

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

手动设置变换

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

Alembic导出选项。

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

场景选项

起始和结束帧
设置输出至 Alembic的帧范围。缺省使用当前场景的帧范围。
子帧采样

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

变换采样
变换样本设置每帧的动画变换采样并写入Alembic的次数。
几何采样
几何样本设置相同,但随后设置为动画几何体。
快门开/关

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

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

仅选中物体
选中此项时,只输出被选中的物体。否则输出所有物体。
仅可渲染物体
此选项很有用,比如用来避免输出自定义的骨骼形状。
仅可见层
输出的物体仅限于当前可见的场景层内。
摊平层级
不选此项时,将输出物体间的父/子关系。如果父物体本身不输出而自物体要被输出,则父物体以空物体代替。如果选中此项,则不输出父/子关系,所有的变形都按照世界坐标输出。

物体选项

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

物体选项。

UV
选中此项后,将输出UV。虽然Alembic标准只支持单个UV,Blender以可以被其它软件读取的方式输出所有的UV。
拼排UV孤岛
生成优化过的,无重叠孤岛的 UV 布局,尝试有效填充 纹理空间 。 请参阅使用相同的原理的 拼排UV孤岛操作 以获取更多信息。
法向
启用后,将输出物体的 法向
顶点颜色
选中此项时,将输出顶点颜色。此时只支持静态的顶点颜色,而不是动态的带动画的顶点颜色。
面集合
按面输出材质名称。仅导出材质名称,不导出材质数据。
使用细分模式
使用 "SubD" Alembic图表输出多边形网格,而非 "PolyMesh"图表,即告知程序打开文件时应用其非破坏细分。
应用表面细分
在输出 Alembic 前应用 表面细分修改器
三角化
在输出Alembic前对网格三角化。具体选项的更多细节见 三角化修改器

粒子系统

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

粒子系统选项。

Alembic不支持粒子系统,正如它不支持骨骼。毛发输出为带动画的零宽度曲线。粒子输出为带动画的点。

Importing Alembic Files

When importing an Alembic file, Mesh Sequence Cache modifiers are automatically added to time-varying meshes. For time-varying object transforms (so animation of rotation, location, or scale) the Transform Cache Constraint is used.

Custom Split Normals of Meshes

Blender supports the import and export of custom normals to Alembic files. As a basic rule of thumb, a completely smooth mesh will be exported without normals and thus produce the smallest Alembic file. This is reflected in the importer; an Alembic mesh without normals is loaded as a smooth mesh.

On export, for every mesh:

  • If it has Custom Loop Normals then the loop normals are exported.
  • If one or more polygons are marked flat then loop normals are also exported.
  • Otherwise, no normals are exported.

On import, when the Alembic mesh contains:

  • Loop normals (kFacevaryingScope) are used as custom loop normals, and enable Auto Smooth to have Blender actually use them.
  • Vertex normals (kVertexScope or kVaryingScope) are convert to loop normals, and handle as above.
  • If there are no normals then the mesh is marked as smooth.
  • Unsupported normal types (kConstantScope, kUniformScope, kUnknownScope) are handled as no normals.

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.

Handling Time

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 uses the current scene frame rate to convert a frame number (in Blender) to a time in seconds (in Alembic). As a result, you can import an Alembic file that was produced at 120 FPS into a Blender scene that is 30 FPS and still not see any time stretching.