Blender scripting: วิธีเปลี่ยนสีพื้นผิว

Jan 07 2021

ฉันกำลังพยายามสร้างรูปภาพใน Blender โดยใช้ Python / scripting เท่านั้น (ไม่มีภาพเคลื่อนไหว) ฉันมีโมเดลที่โหลดไว้และฉันสามารถเปลี่ยนสีพื้นฐานได้โดยใช้ active_material.diffuse_color แต่ตอนนี้ฉันต้องการใส่พื้นผิวบนโมเดลแล้วเปลี่ยนสีพื้นผิว ฉัน googled มาระยะหนึ่งแล้วและไม่พบแหล่งข้อมูลที่ดีในการทำเช่นนั้น

นี่คือสิ่งที่ฉันมีจนถึงตอนนี้:

mat = bpy.data.materials.new(name="Material")
mat.use_nodes = True
bsdf = mat.node_tree.nodes["Principled BSDF"]
texImage = mat.node_tree.nodes.new('ShaderNodeTexImage')
texImage.image = bpy.data.images.load("../textures/texture.png")
mat.node_tree.links.new(bsdf.inputs['Base Color'], texImage.outputs['Color'])

color_ramp = mat.node_tree.nodes.new("ShaderNodeValToRGB")
mat.node_tree.links.new(bsdf.inputs['Base Color'], color_ramp.outputs['Color'])

ob = bpy.data.objects['model']
if ob.data.materials:
    ob.data.materials[0] = mat
else:
    ob.data.materials.append(mat)

รหัสวางพื้นผิวบนโมเดลอย่างถูกต้อง แต่ฉันไม่แน่ใจว่าจะใช้โหนด color_ramp เพื่อเปลี่ยนสีจริง ๆ หรือว่ามันเป็นสิ่งที่ถูกต้องหรือไม่ ขอบคุณ!

คำตอบ

1 Sydney Jan 08 2021 at 02:01

ขอบคุณ brockmann ฉันคิดออกจากลิงก์ของคุณ

mat = bpy.data.materials.new(name="Material")
mat.use_nodes = True
bsdf = mat.node_tree.nodes["Principled BSDF"]
color_ramp = mat.node_tree.nodes.new("ShaderNodeValToRGB")
color_ramp.color_ramp.elements[0].color = (0.2,0.8,0.7,1)
mat.node_tree.links.new(bsdf.inputs['Base Color'], color_ramp.outputs['Color'])
texImage = mat.node_tree.nodes.new('ShaderNodeTexImage')
texImage.image = bpy.data.images.load("../textures/Fabric.png")
mat.node_tree.links.new(color_ramp.inputs[0], texImage.outputs['Color'])

ob = bpy.data.objects['model']
if ob.data.materials:
    ob.data.materials[0] = mat
else:
    ob.data.materials.append(mat)
```