检测 Blender 对象中的更改以更有效地导出脚本

Posted

技术标签:

【中文标题】检测 Blender 对象中的更改以更有效地导出脚本【英文标题】:Detect changes in Blender object for more efficient export script 【发布时间】:2016-09-18 04:01:37 【问题描述】:

我有一个名为 Assets.blend 的 Blender 文件,其中包含我在 Unity 中开发的游戏的 100 多个对象。 每当我进行修改时,我都会运行一个脚本,将每个根对象导出为单独的 fbx 文件。 但是我无法检测到哪些已经更新,所以每次我都必须重新导出每个对象,即使我只创建/修改了 1。 运行脚本大约需要 10 秒,但 Unity 会检测到更改并花费 30 多秒来处理大部分未更改的预制件。

如何改进我的脚本,以便它知道自上次导出以来哪些对象已被更改? 对象或网格似乎没有任何 date_modified 变量。

【问题讨论】:

使用玛雅。问题解决了!您可以从 Maya 更新场景。没有脚本什么的。一键更新所有对象。 是的,得到玛雅。开源很烂 Blender 是免费的,而 Maya 不是。对于一些独立开发者来说,这很重要。 【参考方案1】:

Blender 不会记录对象修改的时间戳。我的第一个建议是将每个对象保留在它自己的混合文件中,或者可能在每个文件中保留更小的项目组。

另一种方法是更改​​您的导出脚本,而不是导出每个对象,只导出选定的对象。更改一两个项目后,选择您更改的项目,然后仅导出这些项目。

for obj in bpy.context.selected_objects:
    bpy.ops.export_scene.fbx(obj.name+'.fbx')

【讨论】:

【参考方案2】:

另一种方法是在有意义的值(网格几何体、材质、您经常更改的任何内容)上计算类似 CRC 的签名并将其存储在某处(例如,在每个对象中作为自定义属性)。 然后,您可以轻松跳过自上次导出以来签名未更改的对象。

【讨论】:

以上是关于检测 Blender 对象中的更改以更有效地导出脚本的主要内容,如果未能解决你的问题,请参考以下文章

导出在 Blender 中创建并在 libgdx 中使用的 fbx 对象的选项

如何根据上下文更改 Blender 2.63 中操作员的标签?

Blender 导出 three.js 动画 - 骨骼奇怪地旋转

如何导出 Blender 模型以在 THREE.js 中显示颜色

Three.js 的导出 Blender 模型中的材料不起作用

无法将动画从 Blender 导出到 Unity