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

Object 如何在Blender中有效地更改多个对象上的相同参数?,object,python-3.x,attributes,blender,blender-2.67,Object,Python 3.x,Attributes,Blender,Blender 2.67,从一个立方体开始,我更改了一些属性(材质、颜色、反射属性),然后将对象复制到十几个立方体中,将它们放置在场景中。渲染后,我想更改所有颜色。我如何有效地做到这一点 我已经找到了多种方法: 在对象模式下,选择所有对象(B,然后选择矩形),连接网格ctrl-j,将颜色,选项卡更改为编辑模式,P再次分离对象。这是完全可能的,因为我所有对象的网格都不接触 有人写了一个Python脚本来做类似的事情 数字1容易出错,对于常规使用来说太单调乏味了。第二个更专业,更糟糕。仅选择多个对象并更改值不起作用,因为特性

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

我已经找到了多种方法:

  • 在对象模式下,选择所有对象(
    B
    ,然后选择矩形),连接网格
    ctrl-j
    ,将颜色,
    选项卡
    更改为编辑模式,
    P
    再次分离对象。这是完全可能的,因为我所有对象的网格都不接触
  • 有人写了一个Python脚本来做类似的事情
  • 数字1容易出错,对于常规使用来说太单调乏味了。第二个更专业,更糟糕。仅选择多个对象并更改值不起作用,因为特性选择仅适用于活动对象,而活动对象只是其中一个选定对象


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

    虽然我没有找到更受欢迎的简单按钮或gui解决方案,但事实证明,在Blender中破解自己的Python代码比人们想象的要容易

    我正在使用的立方体更像是多米诺骨牌。随后,所有看起来像多米诺骨牌的物体都有一个以“多米诺骨牌”开头的名字。根据场景中的所有对象的名称更改它们非常容易:

    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”].righted_body.mass
    ,非常容易,因为Blender在鼠标指针悬停在任何表单输入字段上时都会显示这些名称。如果已经识别了一个对象,那么可以使用Python的
    dir()
    函数来获取对象的所有已知方法和属性的列表。gui允许修改或使用的内容可能不止这些


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

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

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


    使用python批量修改对象功能非常强大,适用于许多问题,但有时解决方法更简单。

    如果您只想更改多个对象的一个参数,请单击控件(例如文本字段),然后选择“复制到选定对象”

    激活3D视图:在用户首选项中复制Atributes菜单,并使用ctrl+c调用它 如果你想复制修改器之类的


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

    要使用:,请在三维视图中选择一个或多个目标对象,然后最后选择源对象。按键盘上的“Ctrl-C”键,可以看到可以复制的每个属性类型的菜单。单击一个(例如“比例”),您将看到源对象的比例将应用于以前选定的对象

    这是人工输入

    这是为了回应:


    感谢提醒我跨对象共享材质定义的能力。总有一天我得测试一下。这里的实际应用程序比您想象的要简单得多,因为这些基本上只是多米诺骨牌倾倒的盒子,而不是带有点子的黑白类型的多米诺骨牌。模拟的一个问题是,对于静止和移动的对象,摩擦力的表现不同,我所模拟的有点脱离实际(可能也是用户错误)。最后,我暂时放弃了这个特殊项目。如何在一开始将材质指定给多个对象?如果选择了不同的对象,则只有活动对象可以指定材质。选择多个对象,确保具有您喜欢的材质的对象是活动对象。使用Ctrl-L打开“生成链接”菜单并选择“材质”操作符。对于像我一样对这个问题感到好奇的人,以下是更新版本: