【行业知识】Alembic文件格式简介–设计思想和理念 2

10 九月, 2016
22
0

Alembic

Alembic中容器的层级关系

上面说了,下面继续

层级是Alembic的核心概念,并反映在容器的结构上。为了此章,除了直接写出命名空间,例如,
AbcA::chorno_t,其他所有类都来自Abc层。同时,这里提到的容器不会冠以“O”或者“I”的
前缀,除非重要到必须显式区分读写(如,当提到Abc::OCompoundProperty时,我会用
CompoundProperty)。

那就是说,这儿是从高层来看Alembic的容器层级。一旦建立容器间的总体关系,会逐个容器详细介绍。

Archive

Alembic中的Archive是最上层容器,实际上C++类直接对应了硬盘上的文件。Archives包含Objects。

Object

Alembic层级中的主要单元是Object。你可以把Archive当做典型的Unix风格文件系统(如ext2fs),Object是文件系统中的文件夹。这个类
比不完美,不久就会看到,但也不赖。Objects不直接包含数据,但为其他直接存储数据的接口提供结构。Objects是封装的首要单元。
Objects包含Properties。

Property

Alembic中有两种Properties,简单的(Simple)和复合的(Compund)。 一个CompoundProperty用来保存其他properties。这将是你最常
打交道的容器类型。 简单Properties保存样本(samples),可为标量(scalar)或者数组(array)。事实上这些样本保存了你的数据。

Scalar Property

ScalarProperty是一个简单property,其样本(sample)的类型和元素数量(extent)是固定的,并在写之前就知道了。FloatProperty就是
一个例子(每个样本都是一个32位浮点数;extent=1), StringProperty(每个样本都是一个字符串,无论大小,extent=1),或者
M44dProperty(每个样本都是16个64位的浮点数;extent=16)。ScalarProperty的最大extent为256.

Array Property

ArrayProperty是一个简单property,其包含的样本在写入之前都是已知的,但其extent是变量。DoubleArrayProperty就是一个
ArrayProperty的例子(每个样本都是一个变长数组,每个数组元素都是64位浮点数),V3fArrayProperty(每个样本都是变长数组,每
个元素都是Imath::Vec3f,为3个32位浮点数),M44fArrayProperty(每个样本都是变长数组,每个元素都是Imath::M44f,或者16个32
位浮点数)。

Sample

样本就是原始数据和时间标签的混合体。和property一起,样本可以使标量(Scalar)或者数组(Array)。

To Recap

Archives包含Objects,Objects包含Properties,Property可以是简单(simple)或者复合的(compound),Compound Porperties包含
Properties,其可以是简单(simple)或者复合(compound);Simple Property包含样本(samples),其可以是标量(scalar)或者数
组(Array)。样本包含数据。

以上的内容有些微妙的东西,随后会用代码解释。