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

Posted

技术标签:

【中文标题】如何在 Blender 中有效地更改多个对象的相同参数?【英文标题】:How do I change the same parameter on multiple objects efficiently in Blender? 【发布时间】:2013-05-13 14:54:10 【问题描述】:

从单个立方体开始,我更改了一些属性(材质、颜色、反射属性),然后将对象复制到十几个立方体中,将它们放置在场景中。渲染后,我想更改所有这些的颜色。如何有效地做到这一点?

我已经找到了多种方法:

    在对象模式下,选择所有对象(B,然后选择矩形),加入网格ctrl-j,更改颜色,tab 进入编辑模式,P 再次分离对象。这是很有可能的,因为我所有对象的网格都没有接触。 Basics docs 有人写了一个 Python 脚本来做类似的事情,here

数字 1 容易出错,而且对于常规使用来说太乏味了。 2号更专业,更糟糕。仅选择多个对象并更改值是行不通的,因为属性选择仅适用于活动对象,该对象仅是选定对象之一。

由于这是一个常见的用例,我可能错过了简单的方法。这是什么?

【问题讨论】:

对于像我一样想知道这个问题的人,这里是更新版本:blender.stackexchange.com/questions/6015/… 【参考方案1】:

虽然我没有找到更受欢迎的简单按钮或 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 控制台”(左下窗口类型选择图标),然后粘贴上面的代码放进去。

可以在外部文本编辑器中编辑代码。或者,也可以在 Blender 中打开一个文本编辑器窗口。保存场景后,Python 控制台和内部文本编辑器都沿 3D 模型存储,这使得工作流程非常好。

找到正确的对象名称 - 例如bpy.data.objects["Domino.033"].rigid_body.mass 非常容易,因为当将鼠标指针悬停在任何表单输入字段上时,Blender 会显示这些名称。如果已识别出一个对象,请使用 Python 的 dir() 函数获取对象的所有已知方法和属性的列表。可能有超过 gui 允许修改或使用的内容。

这比我想象的要容易得多。它可能解释了为什么人们可以想到一些没有 gui 元素的复杂操作——它在代码中更容易处理。我可能会使用它来沿线、圆、螺旋线复制和定位对象,而不是使用 Blender 自己的数组属性。这将使以后的位置调整更容易。

【讨论】:

【参考方案2】:

我很好奇为什么你不能只调整材质。 Blender 使重用对象的元素变得非常容易。您可以有 100 个对象共享一个网格。您可以拥有 100 个共享一组 4 种材质的网格。

我想象一组多米诺骨牌将有 21 个网格(对于所有 1-6 x 1-6 组合)。这些网格将有 2 或 3 种材料(一种用于点子,一种或两种以上用于主体)。如果链接正确,您可以通过更改所有网格使用的一种材料来更改所有点的颜色。

使用python批量修改对象非常强大,适用于很多问题,但有时解决起来更容易。

【讨论】:

感谢您提醒我可以跨对象共享材质定义。我得测试一下。这里的实际应用比您想象的要简单得多,因为这些基本上只是多米诺骨牌倾倒的盒子,而不是带有点子的黑白类型的多米诺骨牌。模拟的一个问题是,静止物体和移动物体的摩擦表现不同,而且我所模拟的与现实有点太远了(也可能是用户错误)。最后,我暂时放弃了这个特定的项目。 如何在一开始就将一个材质分配给多个对象?如果选择了不同的对象,则只有活动的对象可以明显分配材料。 选择多个对象,确保具有您喜欢的材质的那个是活动对象。使用 Ctrl-L 调出 Make LInk 菜单并选择 Materials 操作符。【参考方案3】:

如果您只想为多个对象更改一个参数 RMB 点击控件(例如文本字段)并选择复制到选定对象

用户偏好中激活3D视图:复制属性菜单并使用ctrl+c调用它 如果你想复制修饰符之类的

http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/3D_interaction/Copy_Attributes_Menu

【讨论】:

【参考方案4】:

这是一个 Blender 3D 提示:要一次处理一堆对象,请启用 Blender 附带但默认未启用的“复制属性”插件:打开“用户首选项”,单击“插件”,然后搜索“复制属性”以找到“3D 视图:复制属性菜单”插件。启用插件然后关闭首选项。

要使用:在 3D 视图中,选择一个或多个 TARGET 对象,然后最后选择 SOURCE 对象。按键盘上的“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/

【讨论】:

以上是关于如何在 Blender 中有效地更改多个对象的相同参数?的主要内容,如果未能解决你的问题,请参考以下文章

有效地管理多个相同的数据库? [关闭]

从 Blender 加载 Three.js 中的多个对象

如何使用 Blender 脚本删除场景中较小的多个对象?

有效地指定具有相同前缀的多个列名称

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

Blender:对象在变换时消失(抓取,缩放,旋转......)