Modifica di un nodo valore in molti materiali con uno script python
Blender e python newbee qui.
Sarei molto felice se uno di voi potesse aiutarmi con il seguente problema che sto incontrando: ho importato un modello in scala in Blender, che voglio renderizzare in scala reale. Quando ridimensiono il modello, i materiali non si adattano ad esso e hanno un brutto aspetto. I materiali, tuttavia, hanno tutti un nodo Valore chiamato "Scala", che, se lo modifico con la stessa scala sto ridimensionando il modello, aggiusta tutto e sembra a posto.

Quello che ho trovato è stato risolto questo tipo di problema simile , ma non sono stato in grado di adattarlo per risolvere il mio problema, poiché non ho alcuna esperienza precedente con lo scripting.
Cosa vorrei fare:
- Seleziona gli oggetti che voglio modificare
- Entra nello scripting
- copia uno script in esso
- modificare un numero da inserire nel nodo valore etichettato "scala" di tutti gli oggetti selezionati
- eseguire lo script
- essere felice di ottenere risultati di rendering molto migliori.
Sto usando Blender 2.83.4, nello script la console dice PYTHON INTERACTIVE CONSOLE 3.7.4 (impostazione predefinita, 17 febbraio 2020, 16:23:28) [MSC v.1916 64 bit (AMD64)]
Ogni aiuto è molto apprezzato!
Risposte
Lo script seguente esegue l'iterazione su tutti gli oggetti selezionati e regola i nodi del valore nei materiali assegnati se la loro etichetta è impostata su "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)