• Faire un script en Python

    Bonjour!

     

    Aujourd'hui, je vous explique comment faire un script en langage Python dans Blender.

     

    Ce script permettra de faire une pyramide.

     

    La première étape pour faire notre script sera de subdiviser l'écran 3D en 2 écrans.

    Ensuite réassigner une des 2 écrans au Text Editor.

     

    Pour réaliser dans Blender des opérations en utilisant un script Python, il faut utiliser une interface API.

     

    API signifie Application Programming Interface.

     

    En français cela donnerait quelque chose comme Interface de programmation pour une application.

     

    Puisque cette interface API fait un pont entre Blender et le langage Python, l'interface s'appelle bpy.

    bpy est donc b = blender et py = python. Tout le monde a compris. 

     

    Pour appeler cette interface API dans le script la première ligne sera donc

    import bpy.

     

    La seconde étape consiste à initialiser une liste puis à mettre la position des 5 vertices qui formeront la pyramide.

    Vous devez comprendre ici ce qu'est une liste. Une liste, en anglais on appelle cela un array, est une variable

    qui peut contenir du data comme dans une base de donnée.

     

    Vous avez un format, par exemple numéro, nom du client, adresse, téléphone.

    Chaque fois que vous avez un nouveau client, vous ajoutez un enregistrement à votre fichier de data.

     

    Ici c'est un peu la même chose.

    Chaque enregistrement de votre variable ou array, contiendra la position X, la position Y et la position Z d'un vertex.

     

    Pour faire une pyramide, il faut 5 vertices. Quatre vertices servent à faire le base de la pyramide.

    Le cinquième vertex sert à indiquer le sommet de la pyramide.

     

    Donc l'initialisation de la variable liste ou array qui s'appellera vertices est fait ainsi

    vertices = []

     

    Pour charger la variable vertices avec la position des 5 vertices, on procédera comme ci-dessous

     

    vertices.append((-2, -2, 0)) # Position X Y Z Base 1

    vertices.append((-2,  2, 0)) # Position X Y Z Base 2

    vertices.append((2, 2, 0))   # Position X Y Z Base 3 

    vertices.append((2, -2, 0))  # Position X Y Z Base 4 

    vertices.append((0, 0, 3))   # Position X Y Z Sommet 

     

    Le symbole # indique que ce qui suit jusqu'à la fin de la ligne est du commentaire.

     

    Même si nous n'avons pas besoin d'utiliser les edges (côtés), il faut initialiser une variable pour les edges

    car elle sera passée en paramètre dans une commande utiliser à la fin du script. 

    Il faut croire que la commande, dans l'API bpy qui crée un nouvel objet exige lors de la création d'un objet

    les 3 paramètres vertices, edges et faces. Alors, on initialise la variable edges comme ci-dessous.

     

    edges = []

     

    Cela crée la variable edges mais elle sera vide. Elle ne contiendra aucune valeur.

     

    Maintenant pour former une pyramide, il faut faire des faces en utilisant la position des vertices.

     

    Pour cela on initialise puis on chargera la variable faces qui est aussi une liste ou un array.

    Ce que chaque enregistrement de la variable faces contiendra, c'est trois position d'index de la variable vertices.

     

    Les valeurs de la variable vertices serait comme dans le dessin ci-dessous.

    L'index va de 0 à 4 et non de 1 à 5 comme on pourrait penser.

     Valeur de l'enregistrement (array)  

    Pour faire un mur, il faut 2 positions à la base de la pyramide (Index 0, 1, 2, 3) et son sommet (Index 4).

    Mur A = Index 0 + Index 1 + Index 4

    Mur B = Index 1 + Index 2 + Index 4

    Mur C = Index 2 + Index 3 + Index 4

    Mur D = Index 0 + Index 3 + Index 4

     

    Ce qui donne comme ci-dessous quand on le code en Python (noter que les commentaires sont optionnels).

     

    faces = []   # Initialise la variable faces

    faces.append((0, 1, 4)) # Mur A

    faces.append((1, 2, 4)) # Mur B

    faces.append((2, 3, 4)) # Mur C

    faces.append((0, 3, 4)) # Mur D

     

    Nous avons défini la position des vertices avec la variable vertices.

    Nous avons défini comment joindre les vertices pour faire les faces avec la variable faces.

     

    Mais l'objet n'est pas encore fait. Il faut dire à Blender de faire l'objet.

    Il faut premièrement créer un maillage vide puis deuxièmement lui refiler nos valeurs et troisièmement créer l'objet.

     

    pyramide_maillage = bpy.data.meshes.new("pyramide_maillage") # Création du maillage vide

    pyramide_maillage.from_pydata(vertices, edges, faces)  # Transfert de nos valeurs dans le maillage vide

    pyramide_objet = bpy.data.objects.new("pyramide_objet", pyramide_maillage) # Création de la pyramide

     

    N'oublier pas les guillemets sinon vous aurez des messages d'erreur.

    Le mot pyramide_maillage lors de la création du maillage vide

    et le mot pyramide_objet lors de la création de l'objet doivent être entre guillemet.

    Sinon, on obtient un message que ces mots ne sont pas définis.

     

    Il reste maintenant à trouver le nom de la scène active et relier notre objet à cette scène pour le voir dans l'écran 3D.

     

    scn = bpy.context.scene # Charge le nom de la scène active

    scn.objects.link(pyramide_objet) # Relie l'objet qu'on vient de créer à la scène active

     

    L'image ci-dessous montre mon écran, à gauche l'écran 3D et à droite l'écran du Text Editor affichant le script.

    Mon écran de travail dans Blender 

    Je vous donne mon fichier blend mais il est vide. Il ne contient que le script.

     

    Il suffit d'ouvrir le fichier, de diviser l'écran 3D en 2, d'assigner le Text Editor à un écran.

     

    Dans la barre au bas de l'écran du Text Editor, cliquer sur le bouton juste à droite du mot Template.

    Une liste s'ouvrira avec le seul choix Text. Cliquez sur le mot Text pour ouvrir le script.

    Ouvrir le script dans l'écran du Text Editor

    Vous devez ensuite utiliser la barre de défilement sur la droite de l'écran du Text Editor

    et faire défiler vers le haut pour voir le script.

     

    Pour exécuter le script, il suffit de cliquer sur le bouton Run Script dans le bas de l'écran du Text Editor.

    Cliquer sur le bouton Run Script pour exécuter le script

    Vous verrez aussitôt apparaître dans l'écran 3D une petite pyramide.

    La pyramide créée par le script

    Si vous êtes en mode affichage fil de fer il faudra appuyer sur la touche Z pour voir les faces de la pyramide.

     

    Voici le lien vers la référence du API pour Blender 2.75.

     

    Une autre page sur l'apprentissage du langage Python pour Blender.

     

    Vous pouvez aussi trouver des vidéos sur Youtube qui explique comment utiliser le langage Python avec Blender.

    Il suffit de mettre Blender 2.7 python dans la zone de recherche sur le site Youtube.

     

    Pour ceux qui veulent s'y mettre à fond dans l'apprentissage du langage Python voici un fichier PDF sur ce thème.

     

    Si vous avez Blender sur votre ordinateur, vous avez aussi le langage Python d'installer car lors de l'installation de Blender

    sur votre ordinateur, on installe également le langage Python.

     

    Mais si vous préférez utiliser un environnement de programmation en ligne, cela est aussi possible.

     

    En voici un qui vous offre des exemples de bout de code : Python  Fiddle

    Ici, c'est juste l'interface pour écrire son code et l'exécuter.

     

    Pour trouver d'autre endroit sur le web, taper dans Google : ide online python.

     

    **************************** Mise à jour *************************

    Suite au commentaire de CMO j'ai corrigé le code dans mon post.

    Noter que par contre le code était correct dans mon fichier blend.

    C'est seulement en transposant le code dans le post que je me suis fourvoyé avec l'expression bpy.

     

    Pour ce qui concerne la base de la pyramide, on peut effectivement l'ajouter avec faces.append((0,1,2,3)).

    Selon le rendu qu'on veut faire de la pyramide, faire la face de la base de la pyramide peut être nécessaire ou non.

    ***************************************************************

    Mes amis!

    Les grands penseurs parlent d'idées.

    Les moyens penseurs parlent d'événements.

    Les petits penseurs parlent des autres.

    À la prochaine!

    « Faire une boîte d'expéditionUtiliser le "pie menu" »
    Yahoo!

  • Commentaires

    1
    cmo
    Lundi 18 Avril 2016 à 22:35

    merci pour le super tuto il m'a vraiment aidé

    seulement il y a une erreur dans 2 lignes:

    pyramide_maillage = body.data.meshes.new("pyramide_maillage") # Création du maillage vide

    il faut remplacer Body par bpy

     

    pyramide_objet = bpi.data.objects.new("pyramide_objet", pyramide_maillage) # Création de la pyramide

    il faut remplacer Bpi par bpy

     

    et pour ajouter la base du pyramide j'ai ajouté la ligne suivante

     

    faces.append((0, 1, 2,3))

      • Lundi 10 Juillet 2023 à 15:40

        Merci!

        J'ai corrigé les erreurs dans le post

        Matrius

    • Nom / Pseudo :

      E-mail (facultatif) :

      Site Web (facultatif) :

      Commentaire :


    Suivre le flux RSS des commentaires


    Ajouter un commentaire

    Nom / Pseudo :

    E-mail (facultatif) :

    Site Web (facultatif) :

    Commentaire :