Изменение узла значения во многих материалах с помощью скрипта Python
Blender и python newbee здесь.
Я был бы очень рад, если бы один из вас помог мне со следующей проблемой, с которой я столкнулся: я импортировал в блендер масштабную модель, которую хочу визуализировать в реальном масштабе. Когда я масштабирую модель, материалы не масштабируются и выглядят плохо. Однако все материалы имеют узел Value с именем «Scale», который, если я редактирую его с тем же масштабом, что и масштабирую модель, исправляет все, и тогда все выглядит правильно.

Я смог найти решение подобной подобной проблемы , но я не смог адаптировать ее для решения моей проблемы, так как у меня нет предыдущего опыта работы со сценариями.
Что бы я хотел сделать:
- Выберите объекты, которые я хочу изменить
- Зайти в сценарии
- скопируйте в него скрипт
- отредактируйте число, которое должно быть помещено в узел значений с пометкой «масштаб» всех выбранных объектов
- запустить скрипт
- будьте счастливы получить намного лучшие результаты рендеринга.
Я использую Blender 2.83.4, при написании сценария консоль говорит PYTHON INTERACTIVE CONSOLE 3.7.4 (по умолчанию, 17 февраля 2020 г., 16:23:28) [MSC v.1916, 64 бит (AMD64)]
Любая помощь очень ценится!
Ответы
Приведенный ниже скрипт выполняет итерацию по всем выбранным объектам и корректирует узлы значений в назначенных материалах, если для их метки установлено значение "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)