Alterar um nó de valor em muitos materiais com um script Python
Blender e python newbee aqui.
Eu ficaria muito feliz se um de vocês pudesse me ajudar com o seguinte problema que estou encontrando: importei um modelo em escala para o blender, que desejo renderizar em escala real. Quando eu dimensiono o modelo, os materiais não são dimensionados com ele e ficam mal. Todos os materiais, entretanto, têm um nó de valor chamado "Escala", que, se eu editar com a mesma escala que estou escalando o modelo, corrige tudo e fica certo então.

O que consegui encontrar foi esse tipo de problema semelhante resolvido , mas não consegui adaptá-lo para resolver o meu problema, pois não tenho experiência anterior com scripting.
O que eu gostaria de fazer:
- Selecione os objetos que eu quero mudar
- Vá para o script
- copie um script para ele
- edite um número que deve ser colocado no nó de valor denominado "escala" de todos os objetos selecionados
- executar script
- fique feliz em obter resultados de renderização muito melhores.
Estou usando o Blender 2.83.4, no script do console diz PYTHON INTERACTIVE CONSOLE 3.7.4 (padrão, 17 de fevereiro de 2020, 16:23:28) [MSC v.1916 64 bits (AMD64)]
Cada ajuda é muito apreciada!
Respostas
O script abaixo itera sobre todos os objetos selecionados e ajusta os nós de valor nos materiais atribuídos se seu rótulo estiver definido como "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)