Infoforall

3D ET BLENDER

Voici le menu général de la partie Blender.

LOGO BLENDER

Récapitulatif des notions par activité

Cette partie concerne la prise en main du logiciel et son interaction avec Python, qui va permettre de gérer par le calcul certains aspects de vos réalisations 3D. Vous pourrez ainsi réaliser des images en vue 3D, des animations en 3D ou même des jeux en 3D.

Activité Description
Vous trouverez ici la liste des différentes notions abordées ou réabordées dans l'activité. Il ne s'agit pas de faire un bilan ou un résumé. Pour cela, allez voir la partie Fiche du site qui regroupe les résumés des différentes activités.
Blender-Python 01 - Première utilisation de Python

Console Python, Script Python et console système de Blender

Importation de module

Module bpy pour gérer Blender via du Python : import bpy

Création d'un cube 3D : bpy.ops.mesh.primitive_cube_add()


Tuples : ensemble de données séparées par des virgules

Elément séparateur : parenthèses d'ouverture  (  et de fermeture  ) 


Opérateurs +-*/ et % et // et **

Fonctions natives print et type


Les INTEGERS et les FLOATS

Les STRING :

Eléments délimitateurs : guillemets

Caractères particuliers : \" \t \n

Concaténation de string


Déroulement séquentiel du programme

Commentaires avec #


Variable, premier contat : simple boîte de stockage ?

Affectation d'une variable avec le signe =


BLENDER :

Afficher des objets en utilisant une variable pour gérer la position

Blender-Python 02 - Boucle FOR

Présentation de la configuration scripting


FOR numérique

in range

FAQ : break pour sortir avant la fin

FAQ : continue pour éviter de finir l'une des itérations


Fonction native chr : transforme un nombre en caractère en suivant l'ASCII puis l'UNICODE

Fonction native len : renvoie le nombre d'éléments dans une struture itérable


STRING : itérable, séquentiel, non mutable

Eléments délimitateurs : guillemets

Lecture d'un caractère d'un string à l'aide des crochets


Fonction native input renvoyant toujours un string

Fonction native type

Fonctions natives int, float et str


Importation de module

Module math : fonctions cos, sin, tan, radians


BLENDER :

Afficher des objets en translation ou en rotation

Convertir les angles en degrés et radians


break et continue en FAQ

Blender-Python 03- Les images

Notion de pixel

Intensité codée en 1 octet (8 bits) (0-255)

Couleur codée en 3 couches RGB (3 octets)

Couleur codée en 4 coucehs RGBA (4 octets)

Taille théorique d'un fichier

BMP - GIF - JPEG - PNG

Blender-Python 04- Gestion des objets 3D

Raccourci clavier ALT+P dans la vue Script pour lancer le script en cours

Module bpy pour gérer Blender via du Python : import bpy

Création d'un cube 3D : bpy.ops.mesh.primitive_cube_add()

Création d'une sphère 3D : bpy.ops.mesh.primitive_uv_sphere_add()

Création d'un cone 3D : bpy.ops.mesh.primitive_uv_cone_add()

Récupérer des références d'objets 3D

Récupérer la référence de l'objet sélectionné : objet3DSelectionne = bpy.context.object

Récupérer la référence d'un objet déjà créé : monObjet = bpy.data.objects['Cylinder.001']


Récupérer les données d'un objet monObjet

Récupérer le TUPLE des coordonnées : mesInfos = monObjet.location

  • Récupérer la coordonnée x : xObjet = monObjet.location[0]
  • Récupérer la coordonnée y : yObjet = monObjet.location[1]
  • Récupérer la coordonnée z : zObjet = monObjet.location[2]

Récupérer le TUPLE des échelles : mesInfos = monObjet.scale

Récupérer le TUPLE des rotations : mesInfos = monObjet.rotation_euler

Récupérer le TUPLE des dimensions : mesInfos = monObjet.dimensions

Savoir si l'objet est visible : mesInfos = monObjet.hide

Récupérer le type de l'objet : mesInfos = monObjet.type qui peut renvoyer : MESH, CAMERA, LAMP ...

Récupérer le nom de l'objet dans l'interface: mesInfos = monObjet.name


Modifier les données d'un objet monObjet

Modifier le TUPLE des coordonnées : monObjet.location = (1,2,3)

Modifier le TUPLE des échelles : monObjet.scale = (2,3,4)

Modifier le TUPLE des rotations : monObjet.rotation_euler = (2,3,4)

Récupérer le TUPLE des dimensions : monObjet.dimensions = (2,3,4)

Rendre un objet non visible : monObjet.hide = True

Changer le nom de l'objet dans l'interface: monObjet.name = "nouveauNom"


Gérer les matériaux

Création d'un nouveau matériau : bpy.data.materials.new( 'couleur_1' )

Modifier les couleurs RGB d'un matériau : bpy.data.materials['couleur_1'].diffuse_color = (0.8, 0.8, 0.8)

Changer le matériau d'un objet : monObjet.active_material = bpy.data.materials[ 'couleur_1' ]

Changer le matériau sur l'objet sélectionné : bpy.context.object.active_material = bpy.data.materials[ 'couleur_1' ]

Stocker la référence d'un matériau : monMaterial = bpy.data.materials['couleur_1']

Obtenir la référence du matériau d'un objet : monMaterial = monObjet.active_material

Obtenir le nom d'un matériau dans l'interface : leNom = monMaterial.name


Gérer les keyframes

Placer la timeline sur une frame (20 ici) : bpy.context.scene.frame_set(20)

Créer une keyframe LOCATION sur l'objet à la frame actuelle : monObjet.keyframe_insert(data_path="location")

Créer une keyframe LOCATION sur l'objet à la frame 10 : monObjet.keyframe_insert(data_path="location", frame=10)

Créer une keyframe ROTATION sur l'objet à la frame actuelle : monObjet.keyframe_insert(data_path="rotation_euler")

Créer une keyframe SCALE sur l'objet à la frame 50 : monObjet.keyframe_insert(data_path="scale", frame=50)

Blender-Python 05 - Test IF

IF ELIF ELSE

Tests logiques AND, OR, NOT


Objet 3D text :

Changer le texte affiché : refTexte.data.body = "Voici le message à afficher"


Collections :

Récupérer la référence de la collection des materials : bpy.data.materials

Récupérer la référence de la collection des objets 3D : bpy.data.objects

Voir la collection des objets 3D : bpy.data.objects.items()

On obtient alors des tuples contenant la clé et la référence visée de chacun des objets

Stocker la référence d'un objet déjà créé : monObjet = bpy.data.objects['Cylinder.001']

Vérifier la non-existence d'un matériau : if (not('Nom_du_materiau' in bpy.data.materials)) :


Destruction d'objet 3D :

objets = bpy.data.objects

refCube = bpy.data.objects['Cube']

objets.remove( refCube, True)


Module random

Fonction du module : randint

random.randint(20,80) va fournir un nombre entier aléatoire entre 20 inclus et 80 inclus.

random.randrange(20,80,10) fait de même mais uniquement pour 20, 30, 40, 50, 60, 70 et 80.

random.choice(liste) choisit un élément de la liste, par exemple liste = ['red','green','blue','yellow'].


Blender-Python 05 - Test IF