Zmiana węzła wartości w wielu materiałach za pomocą skryptu w języku Python
Blender i python newbee tutaj.
Byłbym bardzo szczęśliwy, gdyby ktoś z was pomógł mi z następującym problemem, z którym się spotykam: zaimportowałem model w zmniejszonej skali do blendera, który chcę wyrenderować w skali rzeczywistej. Kiedy skaluję model, materiały nie skalują się z nim i źle wyglądają. Jednak wszystkie materiały mają węzeł wartości o nazwie „Skala”, który, jeśli edytuję go z tą samą skalą, skaluję model, naprawia wszystko i wtedy wygląda dobrze.

Udało mi się znaleźć tego rodzaju podobny problem , ale nie byłem w stanie dostosować go do rozwiązania mojego problemu, ponieważ nie mam wcześniejszego doświadczenia ze skryptami.
Co chciałbym zrobić:
- Wybierz obiekty, które chcę zmienić
- Przejdź do skryptów
- skopiuj do niego skrypt
- edytuj liczbę, która powinna być umieszczona w węźle wartości oznaczonym „skala” wszystkich wybranych obiektów
- uruchom skrypt
- ciesz się z lepszych wyników renderowania.
Używam Blendera 2.83.4, w skrypcie konsola mówi PYTHON INTERACTIVE CONSOLE 3.7.4 (domyślnie, 17 lutego 2020 r., 16:23:28) [MSC v.1916 64 bit (AMD64)]
Każda pomoc jest mile widziana!
Odpowiedzi
Poniższy skrypt wykonuje iterację po wszystkich wybranych obiektach i dostosowuje węzły wartości w przypisanych materiałach, jeśli ich etykieta jest ustawiona na "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)