3 interface

Posted Leave a commentPosted in Blender, Python

Interface

 

 

Créer un operator

Un opérator sur blender permet d’enregistrer une classe dans une classe blender

Cela peut nous permettre alors d’appeler des fonction par de boutons ou ligne de commande

Je pourrais alors par la suite assigner des operator a des boutons dans une fenêtre afin de faire des opérations plutôt cool.

Creer des interfaces

Voilà la classe qui va nous permettre de créer des panels

https://docs.blender.org/api/blender2.8/bpy.types.UILayout.html

ici pour la doc

Pour le moment on va tout simplement créer un pannel dans la vue 3D histoire de commencer par quelque chose.

“Amazing!”

Ajout d’un bouton

Maintenant on va ajouter un bouton dedans

Nous voilà avec un magnifique bouton pour ajouter des singes(suzanne) dans notre blender.

A Poursuivre…

Par la suite on va voir quels types de boutons nous allons pouvoir implementer dans notre pannel et comment les utiliser

exemple: se servir du float pour créer un cube avec une translation

La source est ici

4 Blender et bat

Posted Leave a commentPosted in Blender, Python

Blender et Bat

Il est possible dans windows de créer des .bat , ce sont des exécutable qui vont faire des commandes du pc.

Par exemple :

-> Ouvrir blender

-> Executer un script à l’intérieur

-> Fermer blender

Cela peut être trés trés utile quand une opération est à réaliser sur une multitude de fichier.

Juste dans l’optique où cela pourrait probablement arriver j’ai simplement prototypé un petit bat qui va nous créer des cube via un script dans un blender qu’il aura ouvert.

Fichier à creer

Le script python

à base de ctrl + C ctrl +V

Je crée des cubes et je sauve

Le .BAT

  • Dans un premier temps : j’ouvre le dossier de version de blender désiré
  • J’exécute blender sur un fichier bat.blend
  • j’exécute un fichier python dans ce fichier blender

Je fais une pause pour apprécier le résultat:

Me voilà avec une ribambelle de nouveaux objet au fur et à mesure des test

Reste à imaginer quelques utilisation et comment exécuter ça récursivement dans plusieurs dossiers et fichier blender. pour par exemple corriger des matériaux dans de multiples fichiers

 

Material Remplace , Hiearchy from View Layer ,Select Double

Posted Leave a commentPosted in Blender, Mes Scripts

Présentation des mes scripts

En apprenant blender je me suis dit de faire aussi le saut dans le python.

Belle décision, en production j’ai eu des réels besoins de scripts pour remédier à des problématiques réelles, concrète.

J’ai donc réalisé des choses fonctionnelle en fonction de mes besoin et dans l’optique de réorganiser ça par la suite j’ai pris des notes de l’avancement et des besoins rencontrés au fur et à mesure de mes accomplissement.

MaterialAsignementUtils.py

Ce script permet de remplacer un material par un autre sur tout les objets de la scene. Il le fait en fonctions des slots materials des objets. Ce qui permet de ne pas remplacer d’autres materials asigné à cet objet.

Dans ce cas precis

Material replace = Le matérial que je veux

Material to replace = Le matérial à remplacer

Tout mes Metal_Copper vont se faire remplacer par mon Aeration_grid

Pour choisir des matériaux, tout ces derniers sont organisé par ordre alphabétique dans une liste.

Bonus : J’ai aussi implémenté un bouton qui vas mettre un backface sur tout les matériaux, étant donné que blender l’à retiré de ses options dans le viewport shading dans la version que j’utilise.

Aussi Maintenant il est possible de remplacer les matériaux en passant par l’outliner > blender file et faire un remap, mais ça reste plus de clique à faire. (et à l’époque ou j’ai fait ce script, ça ne marchait pas).

CollectionToHierarchy.py

Attention: Toujours en développement

Collection to hierarchy permet d’organiser avec des empty une hiérarchie similaire à celle faites grâces aux collections. Dans un export vers unity ça reste sympa d’avoir un fichier lisible.

D’ailleur le système de parenté d’objet de blender n’est pas tout à fait au point et c’est pourquoi ce script est un réel time-saver.

Si des objets sont parentés… Pas de soucis seul le parent sera assigné à un nouvel emplacement et ses enfants le suivrons tout en gardant cette parenté.

Attention : toutes les collections doivent être visible, les duplicate-instance vont poser des soucis !

Voilà un exemple avec des cubes :

Dans mon view layer

Dans l’outliner Scène

Exécution du script

Et voilà.

Problème connu :

  • Les instance mesh peuvent poser des problème
  • Si les view layer sont caché alors le script ne fonctionnera pas

SelDoubleMesh.py

Un missclick , une fausse opération, et vos mesh se sont dédoublé, mais superposé vous ne voyez pas qui est qui !

Sel double vient sélectionner tous les malencontreux objets qui serait l’un sur l’autre.

Pour ce faire, Il fait une liste de chaque objets en prenant

  • Le nombre de vertex de l’objet
  • La position par vertex dans un espace world
  • Additionne les position

Si un objet à le même nombre de vertex et la même addition de position de vertex. Alors c’est un double ! Et on le selection, pour le supprimer ou le réorganiser ailleur.

Projet futurs

MaterialAsignementUtilsLinkedMat.py

Si, on ajoute une biliotheque de linked material, et qu’un material-non linked à le même nom que ces dernier alors qu’ils se convertissent en ce denier.

Add-on et UV-Set Utils

Créer une interface pour tous mes scripts dans un panel bien à lui sur un deuxième écrans.

Vérifier que je respecte la convention <Pep8> Partager ça avec la communauté pour quelques retour et publier mon petit add-on.

Avec quelques outils commencé pour les uv, je vais me faire un petit set qui va m’indiquer si mes objets ont des uv set de nom differents. et à quel index pour reorganiser tout ça et garder une belle unité entre les lightmap uv et les uv normaux, ainsi que les pivot-Painter uv

2 Syntaxe

Posted Leave a commentPosted in Blender, Python

Python Syntaxe

Python Syntaxe

sources

Syntaxe

Indentations

Commenter

Docstrings

Variables

Nombre

Casting

Strings

Operators

Syntaxe

Indentations

l’indentation de blender se fait via des tabulation ou 4 espaces. C’est ce qui permet d’indiquer des blocs de codes.

Commenter

# Ceci est un commentaire

 

La dièse ou Hashtag pour les plus vieux permet de faires des commentaires

Docstrings

"""Aujourd'hui j'ai mangé des pommes.


Il me semble que cette information est très importante pour la lecture de ce document.




Cela brisera un peu sa routine lui permettra une réflexion quant à sa vie. Et dans le meilleur des cas lui fera penser à manger 5 fruits et légumes pour un équilibre irréprochable. Et une meilleure santé.


Espèce de Nerd! """

c’est “”” permettent de faire un long texte qui permet de documenter son code

Variables

x = 5 #int
y = 8
z = "michel" #string

print(x + y)
print(str(y) + z) 



""" Il faut convertir le int en string pour pouvoir le retourner avec une autre string.
Sinon cela créera une erreure
 """

Les variables n’ont pas de typage, c’est automatique. Le typage spécifie à une variable ce qu’elle est.

Nombre

x = 1    # int
y = 2.8  # float
z = 1j   # complex

je ne connais pas les complex

Casting

Il est possible de spécifier quand même le type de sa variable. Ou de lui attribuer un autre type.

En informatique la conversion de type est le fait de convertir une valeur d’un type (source) dans un autre (cible). 🙁wiki)

x = int(1)   # x will be 1
y = int(2.8) # y will be 2

x = float(1)     # x will be 1.0
y = str(2)    # y will be '2'

Strings

ici plusieurs opérations possible sur une variable de type string

a = "Hello, World "

print(a[1]) #retourne " H "
print(a[2:6]) # retourne " llo W "
print(a.strip) # Enleve l'espace a la fin
print(len(a)) #retourne la taille du fichier
print(a.lower()) #retourne le texte en minuscule
print(a.upper()) # retourne le texte en majuscule
print(a.replace ("H" , "J") # va remplacer le texte maj en minuscule
print(a.split(",")) #va faire un tableau qui va sepparer les mots entre les virgule ( pratique pour du json ) 

Operators

#Addition
 #Soustraction
 #Multiplication
 #Division
 #Modulo ( reste d'une division au maximum des entier )
            ''' pour le modulo 7%4 la division maximum de 7 par 4 pour
               . rester entier est de 1. donc 4*1 + 3 = 7 donc le modulo .
               est de 3 car c’est le reste du maximum de cette . division''' 

 **  #Puissance 4**4 = 256

      //  #Floor Division , Arrondi au minimum

sources

W3C, Blender.org

1 Environnement de travail

Posted Leave a commentPosted in Blender, Python

Environnement de travail Blender pour Python.

Tout d’abord créons nous un environnement de travail.

Afin de créer un environnement de travail idéal pour créer des scripts sur blender il faut 4 fenêtres: Console, Info, Text-editor qui sont dans des editor-type (icone à gauche de chaque panels). Et aussi le System console qui est une fenêtre externe qui va bien nous aider.

Fenêtres

Console/ Info / text editor /

Console

la console Permet de tester des lignes de pythons. Par exemple lorsque l’on tape dans la console :

bpy.

Et qu’on y ajoute un Cntrl + Espace on développe l’auto-complétion, les suggestion de la suite de notre commande

Info

Permet d’écouter blender. Lorsque je fais une commande sur blender le tout est retourné dans cette fenêtre info. Par exemple quand je créé un cube voilà ce qui s’y passe

Text editor

la petite fenêtre d’édition de texte sur laquelle nous pouvons faire nos petits scripts

Il faut créer un fichier. un simple clique droit sur un texte pleins d’imagination et pouf ! on peut lancer notre script

System console

Pour debugger sereinement il faut aller dans window > toggle system console.

Ce qui va nous ouvrir une fenêtre d’exécution qui va pouvoir nous retourner des prints et encore plus d’informations sur les erreures.

Window> Toggle System Console

ça permet de voir les retours de blender

(ho mon dieux ! une fenêtre de blender me dit bonjour)

Pour le moment c’est tout ce qu’il nous faut pour commencer à faire du python sur blender.

Par la suite des Ide seront beaucoup plus pratique mais pour le moment ça suffit pour faire le café.