如何在Blender中高效地更改多个对象上相同的参数?

17
从一个单一的立方体开始,我改变了一些属性(材料、颜色、反射属性),然后将对象复制成十几个立方体,并将它们放置在场景中。渲染后,我想改变它们所有的颜色。如何高效地做到这一点?
我已经找到了多种方法:
1. 在对象模式下,选择所有对象(B,然后矩形选择),加入网格(ctrl-j),更改颜色,切换到编辑模式(tab),再次分离对象(P)。由于我所有对象的网格都没有接触,所以这是完全可能的。基础文档 2. 有人写了一个Python脚本来完成类似的工作,在此处 第一种方法容易出错且对于常规使用来说太过繁琐。第二种方法更为专业化且更差。仅仅选择多个对象并改变值是不起作用的,因为属性选择仅适用于活动对象,而这只是所选对象之一。
作为一个常见的用例,我可能错过了简单的方法。那是什么?

2
对于像我一样想了解这个问题的人,这里是更新版本:https://blender.stackexchange.com/questions/6015/applying-numeric-input-attribute-changes-on-multiple-objects-at-the-same-time - Artur Czajka
5个回答

28

13

虽然我没有找到很受欢迎的简单按钮或GUI解决方案,但结果证明,在Blender中自己编写Python代码比想象中要容易。

我正在处理的立方体更像多米诺骨牌。因此,所有看起来像多米诺骨牌的对象都以“Domino”开头命名。根据它们的名称更改场景中的所有对象非常容易:

for o in bpy.data.objects:
    if not "Domino" in o.name:
        continue
    o.rigid_body.mass = 500
    o.rigid_body.friction = 0.4
    o.rigid_body.restitution = 0.95
    o.rigid_body.angular_damping = 0.2
    o.rigid_body.linear_damping = 0.05

为了使用这段代码,我只是打开了一个新窗口(在任何现有的 Blender 窗口上拖动小的右上角三角形图标),将窗口类型更改为“Python Console”(左下角窗口类型选择图标),然后将上面的代码粘贴到其中。

该代码可以在外部文本编辑器中进行编辑。另外,也可以在 Blender 内部打开文本编辑器窗口。在保存场景时,Python 控制台和内部文本编辑器都会存储在 3D 模型中,这使得工作流程非常好。

查找正确的对象名称 - 如 bpy.data.objects["Domino.033"].rigid_body.mass 很容易,因为当用鼠标指针悬停在任何表单条目字段上时,Blender 确实会显示这些名称。如果已经识别出一个对象,则可以使用 Python 的 dir() 函数获取对象的所有已知方法和属性列表。可能会有比 GUI 允许修改或使用的更多内容。

这比我想象的要简单得多。这可能解释了为什么人们可以想出一些复杂的操作,而没有 GUI 元素-在代码中处理它们要简单得多。我可能会使用它来沿着线、圆、螺旋复制和定位物体,而不是使用 Blender 自己的数组属性。它将允许更容易地进行位置调整。


5
这是Blender 3D的提示:要同时处理一组对象,请启用随Blender一起提供但默认未开启的“复制属性”插件:打开“用户首选项”,点击“插件”,然后搜索“copy attributes”以找到“3D视图:复制属性菜单”插件。启用插件,然后关闭首选项。
使用方法:在3D视图中,选择一个或多个目标对象,最后选择源对象。键盘上按“Ctrl-C”并查看可复制的每种属性类型的菜单。单击其中一个(例如缩放),您将看到源对象的比例将应用于先前选择的对象。
这是手册入口 http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/3D_interaction/Copy_Attributes_Menu 的内容。
此为回复内容:

http://obasandbox.wordpress.com/2011/10/23/cg-blender-setting-properties-on-multiple-objects/


3
这个答案可以改变所有对象的属性,无需复制粘贴和编写脚本
  • 首先,仅选择需要更改的一个对象(否则可能会显示一些选项卡)。
  • 然后选择所有需要更改的对象(顺序无关紧要)。
  • 当您现在更改所需的属性时(无论是单击还是拖动),同时按住Alt键。这将为所有选择的对象更改属性。

请注意,即使对于像在转换工具箱中的x、y、z字段中输入值这样的事情,也可以使用此方法。只需在单击该字段时按住Alt键,松开Alt键,输入所需的值,按Enter键,完成。


1
我很好奇为什么你不能只调整材质。Blender使得重复使用物体元素非常容易。你可以有100个共享单个网格的物体,也可以有100个共享一组4个材质的网格。
我想象一组多米诺骨牌会有21个网格(用于所有1-6 x 1-6的组合)。这些网格会有2或3个材质(一个用于点数,另外一个或两个用于身体)。如果正确链接,你可以通过更改所有网格使用的一个材质来更改所有点数的颜色。
使用Python批量修改对象非常强大,适用于许多问题,但有时解决方案会更简单。

感谢您提醒我可以在对象之间共享材料定义。我得试一下。这里的实际应用比您设想的要简单得多,因为它们基本上只是用于多米诺骨牌的箱子,而不是带有点数的黑白多米诺骨牌。模拟的一个问题是,静止和移动物体的摩擦行为不同,而我模拟的结果与现实有些偏差(可能也是用户错误)。最后,我已经放弃了这个特定的项目。 - cfi
如何在开始时将材质分配给多个对象?如果选择了不同的对象,则只有活动对象可以明显地分配材质。 - mins
选择多个对象,确保你喜欢的材质是活动对象。使用<kbd>Ctrl-L</kbd>呼出“创建链接”菜单,选择“材质”运算符。 - Mutant Bob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接