Alembic#
以下摘自 Alembic 主页:
Alembic 是一个开放的计算机图形交换构架。Alembic 把复杂的、动画的场景提取为非程序化的、与处理软件无关的一套烘焙好的几何体。这种把场景“提取”为烘焙好的几何体的过程完全类似于把灯光和渲染场景提取成渲染出的图像数据。
Alembic 专注于把复杂的程序化的几何体构建的计算结果进行高效的存储。非常明确的一点是,它 不 存储用来创建计算结果的复杂的程序化工具的依存关系。比如说,Alembic 会高效地储存任意的复杂动画和模拟过程(包括包裹变形、形状校正、恒定体积模拟、布料和肌肉模拟,等等)所产生的动画的顶点位置和动画的变形。
简而言之,Alembic 可用于将动画网格写入驱动器,并快速有效地读回。这意味着网格可以使用 CPU 密集型的装配器进行动画处理,然后 “烘焙” 到 Alembic 文件。最后,它可以加载到镜头文件中,仅使用中等 CPU 进行着色和照明。
由于 Alembic 标准的开放性以及 C++ 库文件的标准化,Blender 可以用于混合的流程。比如说,Houdini 或者 Maya 这样的软件可以把文件输出为 Alembic 格式,然后在 Blender 中载入、贴图、渲染。也可以在 Blender 中对角色(或者其它模型)赋予动画,然后输出为 Alembic 文件,继而在其它软件中加载后进一步处理。
导入 Alembic 文件#
导入 Alembic 文件时,网格序列缓存修改器将自动添加到随时间变化的网格中。对于随时间变化的物体变换(即旋转、位置或缩放的动画),使用变换缓存约束。
通用#
- 比例|缩放
指定围绕世界原点放大或缩小物体的数值。
选项#
- 相对路径
选择相对于 blend 文件的文件路径。
- 设置帧范围
若开启,更新场景的起始帧和结束帧以匹配 Alembic 文档的内容。
- 是否序列
如果缓存拆分为单独的文件,则设置为真。
- 检查网格
检查导入的网格是否有损坏的数据,并在必要时修复它。如果禁用,错误数据可能会导致网格显示或编辑崩溃。该选项会降低导入速度,但建议使用,因为数据错误并不总是很明显。
- 始终添加缓存读取器
将缓存修改器和约束添加到导入对象中,即使它们不是动画,以便在重新加载 Alembic 文档时可以更新它们。
导出为 Alembic 文件#
此章节说明不同的输出选项的效果。
通用#
- 比例|缩放
设置 Alembic 文件的全局缩放值。使用缺省值 1.0 则采用 Blender 的单位。
- 包括
- 选定的物体
选中此项时,只输出被选中的物体。否则输出所有物体。
- 可见物体
输出的物体仅限于当前可见的场景集合内。
场景#
- 起始帧、结束帧
设置输出至 Alembic 的帧范围。缺省使用当前场景的帧范围。
- 子帧采样
这些选项控制动画的子帧采样。
- 变换采样
变换样本设置每帧的动画变换采样并写入 Alembic 的次数。
- 几何数据
几何样本设置相同,但随后设置为动画几何体。
- 快门开启/闭合
快门打开/关闭定义拍摄样本的间隔 [打开,关闭]。有效范围是 -1 到 1,其中 -1 表示前一帧,0 表示当前帧,1 表示下一帧。
例如,如果需要用于详细网格运动模糊的信息,则可以通过使用样本计数 5,快门打开 -0.25 和快门关闭 0.25 来将当前帧周围的一些子帧写入 Alembic。这模仿了一个 “180度” 快门,在当前帧前打开 90 度,在当前帧后打开 90 度。
- 使用实例化
- 自定义属性
启用后(默认情况下),自定义属性也导出到 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]
。存储几何形状的形变信息,用于动画。
- 摊平层级
不勾选此项时,将输出物体间的父/子关系。如果父物体本身不输出而子物体要被输出,则父物体以空物体代替。如果选中此项,则不输出父/子关系,所有的变换都按照世界坐标输出。
- 设置
确定物体可见性、修改器设置和其他具有不同设置的视图和渲染区域。
- 渲染:
对物体可见性、修改器设置等使用渲染设置。
- 视图:
对物体可见性、修改器设置等使用视图设置。
几何数据#
- UV 坐标
选中此项后,将输出 UV。虽然 Alembic 标准只支持单个 UV,Blender 以可以被其它软件读取的方式输出所有的 UV。
- 合并 UV
启用后,共享相同顶点和位置的 UV 将合并为一个 UV。导出的文件可能会稍小一些。
- 法向
启用后,将导出物体的法向。有关详细信息,请参阅下文的自定义网格的拆边法向。
- 颜色属性
启用后,导出颜色属性。
- 面组
按面输出材质名称。仅导出材质名称,不导出材质数据。
- 细分
- 应用
在输出 Alembic 前应用表面细分修改器。
- 使用架构
使用 "SubD" 算法架构(而不是 "多边形" 架构)写入多边形网格。这将为用于打开文档的进程设置一个导入选项,以应用其非破坏性细分形式。
- 三角化
在输出 Alembic 前对网格三角化。具体选项的更多细节见三角化修改器。
粒子系统#
Alembic 不支持粒子系统,正如它不支持骨架。
- 导出毛发
毛发导出为带动画的零宽度曲线。
- 导出粒子
粒子导出为带动画的点。
自定义网格的拆边法向#
Blender 支持将自定义法向导入和导出到 Alembic 文件。作为基本的经验法则,完全平滑的网格导出时不附带法向,从而生成最小的 Alembic 文件。这反映在导入器中;没有法向的 Alembic 网格作为平滑网格加载。
导出时,对于每个网格:
如果它具有 自定义循环法向,则导出循环法向。
如果一个或多个面标记为平面,则循环法向也会导出。
否则,不会导出法向。
导入时,当 Alembic 网格包含:
循环法向(
kFacevaryingScope
)用作自定义循环法向。顶点法向(
kVertexScope``或 ``kVaryingScope
)转换为循环法向,并如上所述处理。如果没有法向,则网格将标记为平滑。
不支持的法向类型(
kConstantScope
,kUniformScope
,kUnknownScope
)作为 无法向 处理。
当导入的网格不包含法向时,可以使用法向的着色控制最终外观。
处理时间#
与 Blender 和许多其他应用程序和文件格式不同,Alembic 文件没有任何框架概念。Alembic 仅仅与时间以及随时间采样的值打交道。例如,无法区分每帧 2 次采样的 30 FPS 和每帧 1 次采样的 60 FPS。这导致许多开发人员在读取 Alembic 文件时只能硬编码 24 FPS。
Blender 使用当前场景帧率将帧数(在 Blender 中)转换为以秒为单位的时间(在 Alembic 中)。因此,可以将以 120 FPS 速率生成的 Alembic 文件导入到 30 FPS 的 Blender 场景中,并且仍然看不到任何时间拉伸。