Bir python betiği ile birçok malzemede bir değer düğümünü değiştirme
Blender ve python newbee burada.
Karşılaştığım şu problemde biriniz bana yardımcı olabilirse çok mutlu olurum: ölçekli bir modeli blendere aktardım, bunu gerçek hayat ölçeğinde işlemek istiyorum. Modeli ölçeklendirdiğimde, malzemeler onunla ölçeklenmiyor ve kötü görünüyor. Bununla birlikte, malzemelerin hepsinin "Ölçek" adında bir Değer düğümü vardır , bu, aynı ölçekte düzenlersem, modeli ölçeklendiriyorum, her şeyi düzeltir ve o zaman doğru görünür.
Bulabildiğim şey, bu tür benzer bir sorunun çözülmesiydi , ancak komut dosyasıyla daha önce hiç deneyimim olmadığı için, problemimi çözmek için onu uyarlayamadım.
Yapmak istediğim şey:
- Değiştirmek istediğim nesneleri seçin
- Komut dosyası oluşturmaya gidin
- içine bir komut dosyası kopyala
- Seçilen tüm nesnelerin "ölçek" etiketli değer düğümüne yerleştirilmesi gereken bir sayıyı düzenleyin
- komut dosyasını çalıştır
- daha iyi render sonuçları elde ettiğiniz için mutlu olun.
Blender 2.83.4'ü komut dosyası oluştururken konsolda PYTHON INTERACTIVE CONSOLE 3.7.4 yazıyor (varsayılan, 17 Şubat 2020, 16:23:28) [MSC v.1916 64 bit (AMD64)]
Her yardım çok takdir edilmektedir!
Yanıtlar
Aşağıdaki komut dosyası, seçilen tüm nesneler üzerinde yinelenir ve etiketleri olarak ayarlanmışsa, atanan malzemelerdeki değer düğümlerini ayarlar "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)