使用搅拌机改变材料颜色与python

Posted

技术标签:

【中文标题】使用搅拌机改变材料颜色与python【英文标题】:Use blender change material color with python 【发布时间】:2017-12-06 06:40:53 【问题描述】:

我有一个搅拌机模型,有一个物体(名字叫car_AudiA8)有多种材质,我想从物体(“car_AudiA8”)复制一个新物体,然后改变新物体的颜色,旧物体的颜色不是受影响,我的方法是:

obj = bpy.data.objects["car_AudiA8"]
mesh = obj.data
new_obj = bpy.data.objects.new("car_AudiA8", mesh)
bpy.context.scene.objects.link(new_obj)
bpy.ops.object.make_single_user(object = True, obdata = True, material = True,texture = True )
for slot in bpy.data.objects[new_obj.name].material_slots:
    if (slot.name.startswith("carpaint.Black")):
        bpy.data.materials[slot.name].diffuse_color = (1,0,0)

注意:material("carpaint.Black") 可以控制汽车的颜色。

【问题讨论】:

这对于blender.stackexchange.com 来说可能是一个更好的问题,因为它涉及搅拌机 api 而不是一般的编程问题 【参考方案1】:

您似乎正在修改现有的“carpaint.Black”材质,这将影响使用该材质的所有对象。相反,请尝试为该插槽分配新材质

for slot in bpy.data.objects[new_obj.name].material_slots:
    if (slot.name.startswith("carpaint.Black")):
        new_mat = bpy.data.materials.new(name="carpaint.NewRed")
        new_mat.diffuse_color = (1,0,0)
        slot.material = new_mat

我不确定这是否会按原样工作,但你明白了。您最好复制黑色材质,而不是从头开始创建新材质。

【讨论】:

谢谢你的回答,我使用“bpy.ops.object.make_single_user(object = True, obdata = True, material = True,texture = True)”,它可以分离新对象的材质和旧物体的材质,新材质的名称与旧材质的名称不同。我不需要创建新材料,请帮助我。 diffuse_color 在元组中应该有 4 个元素,RGB 颜色和 Alpha 强度:(1, 0, 0, 1)

以上是关于使用搅拌机改变材料颜色与python的主要内容,如果未能解决你的问题,请参考以下文章

导出到统一时,搅拌机模型不导出材料。请帮忙?

Python:将搅拌机与 WinTracker 2 连接

从搅拌机导入模型到统一时,我得到奇怪的材料结果

Blender 2.79 材料导出到 gltf 失去光泽

反应材料如何主题化身体颜色

为啥我无法将 3D 动画对象的颜色从搅拌机导出到 Unity?