Blender — Prise en main
Cheatsheet concret pour installer Blender, se repérer dans l’interface, scripter avec bpy, et rendre une scène minimale en headless.
Installation rapide
Téléchargement (Linux, macOS, Windows)
Se rendre sur blender.org/download et
récupérer l’archive pour sa plateforme. Aucune commande apt n’est nécessaire
(fourni en version portative).
Lancement
# Extraction
tar -xJf blender-4.1.0-linux-x64.tar.xz
cd blender-4.1.0-linux-x64
# Lancement en GUI
./blender
# Lancement headless (pas d'affichage graphique)
./blender --background --python-expr "import bpy; print('Blender OK')"Pitfall : sous Linux, le binaire headless nécessite des bibliothèques OpenGL libres. Sur les distributions récentes :
sudo apt-get install mesa-utils libgl1. Pour un rendu CPU (serveur sans GPU), configurer le moteur Cycles dans le script :scene.cycles.device = 'CPU'(Eevee ne supporte pas le rendu CPU nativement).
Dépendances pour le rendu CLI
# ffmpeg est requis pour l'export vidéo (Eevee/Cycles)
sudo apt-get install ffmpegRaccourcis essentiels
Ceux qu’un développeur utilise au quotidien, sans se perdre dans les 500+ raccourcis.
| Raccourci | Action |
|---|---|
G puis Z | Restreindre le déplacement à l’axe Z (gras) |
S puis X | Redimensionner selon l’axe X |
R puis Z | Rotation autour de Z |
Tab | Basculer entre Object Mode et Edit Mode |
3 (clavier numérique) | Activer X-Ray pour voir à travers les objets |
Numpad . | Centrer la vue sur l’objet sélectionné |
Numpad 1 / 3 / 7 | Vues face / droite / dessus |
Numpad 5 | Basculer entre caméra ortho / perspective |
A | Tout sélectionner |
Shift + A | Ajouter un objet (menu contextuel) |
Ctrl + T | Polygoniser (trianguler les faces en Edit Mode) |
F9 | Ouvrir le dernier panneau d’action (transform, op…) |
Ctrl + Z | Annuler |
Ctrl + Shift + Z | Rétablir |
Pitfall : les numéros du pavé numérique (
Numpad) ne fonctionnent pas sur les claviers sans pavé numérique (claviers compact, laptops, serveurs). L’alternative complète : dans la vue 3D, utiliser le menu d’orientation (icône en haut à droite) ouNumpad 1→View → Frontdans le menu.
Pipeline Python — bpy
Blender intègre un interpréteur Python complet. L’API s’explore via bpy.
Structure de base
bpy.data → collections globales (scènes, matériaux, meshs, images...)
bpy.context → contexte d'exécution (sélection, scène active, objet actif)
bpy.ops → opérateurs Blender (créer, modifier, exporter...)
bpy.props → registre de propriétés personnaliséesScript minimal — créer un objet
import bpy
# Créer un mesh cube
bpy.ops.mesh.primitive_cube_add(size=2, location=(0, 0, 0))
cube = bpy.context.active_object
# Renommer
cube.name = "MonCube"
# Appliquer la rotation (sinon le rendu peut être déformé)
bpy.ops.transform.resize(value=(1, 1, 1))
bpy.ops.object.transform_apply(location=False, rotation=True, scale=True)Script minimal — matériau Eevee + rendu CLI
import bpy
# Activer le moteur Eevee
scene = bpy.context.scene
scene.render.engine = "BLENDER_EEVEE"
# Lumières
light = bpy.data.lights.new("Light", "SUN")
light_data = bpy.data.objects.new("Sun", light)
light_data.location = (5, -3, 5)
light_data.rotation_euler = (0.5, 0, 0)
scene.collection.objects.link(light_data)
# Matériau simple pour le cube existant
mat = bpy.data.materials.new("CubMat")
mat.use_nodes = True
bsdf = mat.node_tree.nodes["Principled BSDF"]
bsdf.inputs["Base Color"].default_value = (0.2, 0.4, 0.8, 1.0) # bleu
bsdf.inputs["Roughness"].default_value = 0.3
# Appliquer le matériau à l'objet actif (dernier créé)
obj = bpy.context.active_object
if obj and obj.data.materials:
obj.data.materials[0] = mat
else:
obj.data.materials.append(mat)
# Paramètres de rendu
scene.render.filepath = "/tmp/rendu_blender"
scene.render.image_settings.file_type = "PNG"
scene.render.resolution_x = 1920
scene.render.resolution_y = 1080
# Lancer le rendu
bpy.ops.render.render(write_still=True)Lancement en headless avec un fichier .py
# Script inline
./blender --background --python-expr "
import bpy
bpy.ops.mesh.primitive_cube_add(size=2)
bpy.ops.render.render(write_still=True)
"
# Script depuis un fichier
./blender --background --python mon_script.py
# Raccourci : --python permet aussi de passer des arguments via --
./blender --background mon_scene.blend --python mon_script.pyPitfall :
--python-exprne supporte pas les chaînes multilignes avec des guillemets imbriqués. Pour les scripts complexes, toujours utiliser--python fichier.pyavec un fichier externe.
Pitfall : en mode
--background, Eevee utilise le GPU détecté. Sur un serveur sans carte graphique, changer de moteur dans le script :scene.render.engine = "BLENDER_CYCLES" scene.cycles.device = "CPU"Sans cette modification, le rendu échoue silencieusement ou plante.
Scène minimale — code copiable
Voici un script unique qui crée une scène complète et la rend :
import bpy
# 1. Nettoyer la scène par défaut
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(use_global=False)
# 2. Ajouter un cube et le positionner
bpy.ops.mesh.primitive_cube_add(size=2, location=(0, 0, 0))
cube = bpy.context.active_object
cube.name = "CubeCentral"
# 3. Ajouter une lumière directionnelle
light_data = bpy.data.lights.new("Lumiere", "SUN")
light_obj = bpy.data.objects.new("LumiereObj", light_data)
light_obj.location = (4, -2, 6)
light_obj.rotation_euler = (0.7, 0, 0)
bpy.context.collection.objects.link(light_obj)
# 4. Matériau bleu avec roughness basse
mat = bpy.data.materials.new("Bleu")
mat.use_nodes = True
bsdf = mat.node_tree.nodes["Principled BSDF"]
bsdf.inputs["Base Color"].default_value = (0.1, 0.3, 0.8, 1.0)
bsdf.inputs["Roughness"].default_value = 0.25
cube.data.materials.append(mat)
# 5. Configurer le rendu
scene = bpy.context.scene
scene.render.engine = "BLENDER_EEVEE"
scene.render.filepath = "/tmp/blender_quickstart.png"
scene.render.image_settings.file_type = "PNG"
scene.render.resolution_x = 1280
scene.render.resolution_y = 720
scene.render.resolution_percentage = 100
# 6. Rendu
bpy.ops.render.render(write_still=True)
print(f"Rendu final : {scene.render.filepath}.png")Commande d’exécution :
./blender --background --python rendu.pyDépannage
Rendu entièrement noir
Causé par l’absence de lumière ou un angle de caméra bizarre.
# Vérifier la configuration de la scène
python3 -c "
import bpy
scene = bpy.context.scene
engine = scene.render.engine
nb_lights = len([o for o in scene.objects if o.type == 'LIGHT'])
cam = scene.camera.name if scene.camera else 'aucune'
print('Engine :', engine)
print('Lumières :', nb_lights)
print('Caméra :', cam)
"Solutions :
- Ajouter une lumière directionnelle (
bpy.data.lights.new("L", "SUN")) - Orienter la lumière vers l’objet (
light_obj.rotation_euler = (0.7, 0, 0)) - Vérifier que la caméra pointe vers l’objet (coordonnées
location+rotation_euler)
Erreurs GLSL / texture manquante
# Vérifier les erreurs GLSL dans le terminal
./blender --background --python mon_script.py 2>&1 | grep -i "glsl\|error\|shader"Si les erreurs persistent, passer à Cycles avec rendu CPU (évite les drivers GPU) :
scene.render.engine = "BLENDER_CYCLES"
scene.cycles.device = "CPU"
scene.cycles.samples = 64 # réduire pour un test rapidePitfall : sous Linux sans GPU,
Eeveene rend pas. Il faut basculer versCyclesavecscene.cycles.device = "CPU"avant tout appel àbpy.ops.render.render().
Démarrage headless sans écran
# Option 1 : avec un faux serveur X (pour les scripts qui en ont besoin)
Xvfb :99 -screen 0 1024x768x24 &
DISPLAY=:99 ./blender --background --python mon_script.py
# Option 2 : script Python qui bascule vers Cycles/CPU
# (nécessaire sur un serveur sans GPU)
./blender --background --python mon_script.pyTaille de rendu très grande
# Réduire la taille pour un test rapide
scene.render.resolution_x = 640
scene.render.resolution_y = 360Liens utiles
- Documentation Blender : https://docs.blender.org
- Référence API bpy : https://docs.blender.org/api/current/
- Guide Blender Python : https://docs.blender.org/manual/fr/latest/editors/python/index.html
- Issue tracker GitHub : https://github.com/blender/blender/issues
Un script Python, un flag CLI, un rendu en sortie. Pas d’interface graphique, pas de template, pas de boilerplate.