Modification d'un nœud de valeur dans de nombreux matériaux avec un script python
Blender et python newbee ici.
Je serais très heureux si l'un de vous pouvait m'aider avec le problème suivant que je rencontre: j'ai importé un modèle réduit dans Blender, que je veux rendre à l'échelle réelle. Lorsque je redimensionne le modèle, les matériaux ne sont pas mis à l'échelle avec lui et semblent mauvais. Cependant, les matériaux ont tous un nœud de valeur nommé "Echelle", qui, si je le modifie avec la même échelle, je redimensionne le modèle, corrige tout et il semble correct alors.
Ce que j'ai pu trouver, c'est ce genre de problème similaire résolu , mais je n'ai pas été en mesure de l'adapter pour résoudre mon problème, car je n'ai aucune expérience préalable avec les scripts.
Ce que je voudrais faire:
- Sélectionnez les objets que je souhaite modifier
- Entrez dans le script
- copier un script dedans
- modifier un nombre qui doit être mis dans le nœud de valeur intitulé «échelle» de tous les objets sélectionnés
- script de lancement
- soyez heureux d'obtenir de meilleurs résultats de rendu.
J'utilise Blender 2.83.4, dans le script, la console dit PYTHON INTERACTIVE CONSOLE 3.7.4 (par défaut, 17 février 2020, 16:23:28) [MSC v.1916 64 bits (AMD64)]
Chaque aide est très appréciée!
Réponses
Le script ci-dessous itère sur tous les objets sélectionnés et ajuste les nœuds de valeur dans les matériaux affectés si leur étiquette est définie sur "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)