Cambiar un nodo de valor en muchos materiales con un script de Python
Blender y python newbee aquí.
Sería muy feliz si alguno de ustedes pudiera ayudarme con el siguiente problema con el que me estoy encontrando: he importado un modelo a escala en Blender, que quiero renderizar en una escala de la vida real. Cuando escalo el modelo, los materiales no se escalan con él y se ven mal. Sin embargo, todos los materiales tienen un nodo de valor llamado "Escala", que, si lo edito con la misma escala, estoy escalando el modelo, arregla todo y se ve bien en ese momento.

Lo que pude encontrar fue este tipo de problema similar resuelto , pero no he podido adaptarlo para resolver mi problema, ya que no tengo experiencia previa con secuencias de comandos.
Qué me gustaría hacer:
- Seleccionar los objetos que quiero cambiar
- Entra en las secuencias de comandos
- copiar un script en él
- editar un número que debe colocarse en el nodo de valor etiquetado como "escala" de todos los objetos seleccionados
- ejecutar guión
- esté feliz de obtener mejores resultados de renderizado.
Estoy usando Blender 2.83.4, en la secuencia de comandos de la consola dice PYTHON INTERACTIVE CONSOLE 3.7.4 (predeterminado, 17 de febrero de 2020, 16:23:28) [MSC v.1916 64 bit (AMD64)]
¡Cada ayuda es muy apreciada!
Respuestas
El siguiente script itera sobre todos los objetos seleccionados y ajusta los nodos de valor en los materiales asignados si su etiqueta está establecida en "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)