การเปลี่ยนโหนดค่าในวัสดุจำนวนมากด้วยสคริปต์ python

Aug 16 2020

Blender และ python newbee ที่นี่

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

มันจะง่ายกว่ามากที่จะมีสคริปต์ในการทำแบบกึ่งอัตโนมัติเนื่องจากโมเดลใช้วิธีมากกว่า 100 วัตถุด้วยวัสดุที่แตกต่างกัน ...

สิ่งที่ฉันพบคือปัญหาที่คล้ายกันนี้ได้รับการแก้ไขแล้ว แต่ฉันไม่สามารถปรับให้เข้ากับปัญหาของฉันได้เนื่องจากฉันไม่มีประสบการณ์ในการเขียนสคริปต์มาก่อน

สิ่งที่ฉันอยากจะทำ:

  • เลือกวัตถุที่ฉันต้องการเปลี่ยนแปลง
  • ไปที่การเขียนสคริปต์
  • คัดลอกสคริปต์ลงไป
  • แก้ไขตัวเลขที่ควรใส่ในโหนดค่าที่มีข้อความ "มาตราส่วน" ของวัตถุที่เลือกทั้งหมด
  • เรียกใช้สคริปต์
  • ยินดีที่ได้รับวิธีการแสดงผลที่ดีขึ้น

ฉันใช้ Blender 2.83.4 ในการเขียนสคริปต์คอนโซลบอกว่า PYTHON INTERACTIVE CONSOLE 3.7.4 (ค่าเริ่มต้น 17 ก.พ. 2020, 16:23:28 น.) [MSC v.1916 64 บิต (AMD64)]

ทุกความช่วยเหลือชื่นชมมาก!

คำตอบ

1 RobertGützkow Aug 16 2020 at 18:07

สคริปต์ด้านล่าง iterates "Scale"มากกว่าวัตถุที่เลือกไว้ทั้งหมดและปรับโหนดค่าในวัสดุมอบหมายถ้าป้ายชื่อของพวกเขาถูกตั้งค่าให้

import bpy
      
       
def set_scale_nodes_selected_objects(scale_val):
    for obj in bpy.context.selected_objects:
        for mat_slot in obj.material_slots:
            set_scale_nodes_material(mat_slot.material, scale_val)
    

def set_scale_nodes_material(mat, scale_val):
    if mat is not None and mat.use_nodes and mat.node_tree is not None:
        for node in mat.node_tree.nodes:
            if node.label == "Scale" and node.type == "VALUE":
                node.outputs["Value"].default_value = scale_val  


if __name__ == "__main__":
    scale_val = 1.0
    set_scale_nodes_selected_objects(scale_val)