Skip to Content
Modélisation 3DBlender — Prise en main

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 ffmpeg

Raccourcis essentiels

Ceux qu’un développeur utilise au quotidien, sans se perdre dans les 500+ raccourcis.

RaccourciAction
G puis ZRestreindre le déplacement à l’axe Z (gras)
S puis XRedimensionner selon l’axe X
R puis ZRotation autour de Z
TabBasculer 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 / 7Vues face / droite / dessus
Numpad 5Basculer entre caméra ortho / perspective
ATout sélectionner
Shift + AAjouter un objet (menu contextuel)
Ctrl + TPolygoniser (trianguler les faces en Edit Mode)
F9Ouvrir le dernier panneau d’action (transform, op…)
Ctrl + ZAnnuler
Ctrl + Shift + ZRé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) ou Numpad 1View → Front dans 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ées

Script 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.py

Pitfall : --python-expr ne supporte pas les chaînes multilignes avec des guillemets imbriqués. Pour les scripts complexes, toujours utiliser --python fichier.py avec 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.py

Dé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 rapide

Pitfall : sous Linux sans GPU, Eevee ne rend pas. Il faut basculer vers Cycles avec scene.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.py

Taille de rendu très grande

# Réduire la taille pour un test rapide scene.render.resolution_x = 640 scene.render.resolution_y = 360

Liens utiles


Un script Python, un flag CLI, un rendu en sortie. Pas d’interface graphique, pas de template, pas de boilerplate.