使用blender使用python更改材质颜色

使用blender使用python更改材质颜色,python,colors,blender,Python,Colors,Blender,我有一个关于blender的模型,有一个具有多种材质的对象(名称为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

我有一个关于blender的模型,有一个具有多种材质的对象(名称为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)

注意:材质(“carpaint.Black”)可以控制汽车的颜色。

看起来您正在修改现有的“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

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

这可能是一个更好的问题,因为它涉及blender api,而不是一般编程问题谢谢您的回答,我使用“bpy.ops.object.make\u single\u user”(object=True,obdata=True,material=True,texture=True)”,可以区分新对象的材质和旧对象的材质,新材质的名称与旧材质的名称不同,我不需要创建新材质,请帮助我。