Python,Alembic.io,Cask:使用write_to_file()时对象的属性不保存

问题描述 投票:1回答:1

我经常为各种3d软件包(3ds max,Maya等)编写脚本,这就是我对Alembic感兴趣的原因,这种文件格式最近受到了很多关注。

对于不了解该项目的任何人的快速解释:alembic - www.alembic.io - 是为包含3d网格和与其连接的数据而创建的文件格式。它正在使用树状结构,如下所示,具有一个根节点及其子节点,子节点的子节点等。此节点的对象可以具有属性。

我正在尝试学习如何在Python中使用此Alembic。

这个项目的docks页面上有一些教程,我遇到了一些问题:http://docs.alembic.io/python/cask.html它是关于使用cask模块 - 一个应该更容易操作文件内容的包装器。

这部分:

a = cask.Archive("animatedcube.abc")
r = cask.Xform()
x = a.top.children["cube1"]
a.top.children["root"] = r
r.children["cube1"] = x
a.write_to_file("/var/tmp/cask_insert_node.abc")

效果很好。如果有新文件“cask_insert_node.abc”并且它具有预期的对象。

但是当我向对象添加一些属性时,像这样:

a = cask.Archive("animatedcube.abc")
r = cask.Xform()
x = a.top.children["cube1"]
x.properties['new_property'] = cask.Property()
a.top.children["root"] = r
r.children["cube1"] = x
a.write_to_file("/var/tmp/cask_insert_node.abc")

结果文件中的“cube1”对象不包含属性“new_property”。保存过程是一个问题,我知道在保存之前该属性已被添加到“cube1”,我已经用另一种方式检查了它,我写的一个函数创建了归档中的对象图。

这个模块的代码是:source

有谁知道我做错了什么?如何保存参数?还有其他方法吗?

python 3d export maya alembic
1个回答
0
投票

可悲的是,木桶并不支持这一点。无法修改存档并保存结果(以某种方式与Alembic如何从磁盘中流出数据)。您要做的是创建输出存档

oArchive = alembic.Abc.CreateArchiveWithInfo(...)

然后将所有需要的数据从输入存档复制到输出存档,包括时间采样(

.addTimeSampling(iArchive.getTimeSampling(i) for i in iArchive.getNumTimeSamplings()

和对象,通过iArchive.getTop()和oArchive.getTop()递归,在iArchive中遇到它们时定义输出属性(alembic.Abc.OArrayProperty或OScalarProperty)。定义这些值后,您可以将新值作为样本插入到属性中。

这是一个真正的野兽,以及木桶真正应该支持的东西。事实上,Alembic社区中的某个人应该只是帮助每个人并写一个cask2(棺材?),它将所有这些包装成简单的调用,就像你本能地试图做的那样。

© www.soinside.com 2019 - 2024. All rights reserved.