Blender MCP

officiel

Un serveur MCP (Model Context Protocol) léger pour Blender. Il offre une interface en langage naturel avec l'API Python de Blender, améliorant l'accès à la documentation et permettant aux utilisateurs d'explorer et de comprendre des configurations complexes.

Que pouvez-vous faire avec Blender MCP ?

  • Analyser les performances de la scène — Demandez à l’assistant de trouver les objets ayant le nombre de polygones le plus élevé par rapport à leur taille à l’écran depuis la vue de la caméra.
  • Renommer les blocs de données — Corrigez les fautes de frappe ou appliquez des conventions de nommage descriptives aux objets, lumières, caméras, textures et autres blocs de données.
  • Interroger les relations entre données — Utilisez le langage naturel pour demander quels objets utilisent un matériau spécifique ou comment les blocs de données sont connectés.
  • Déboguer les problèmes de scène — Identifiez les objets ayant le nombre de polygones le plus élevé, les maillages non-manifold ou d’autres problèmes courants dans le fichier ouvert.
  • Documenter les configurations Geometry Nodes — Générez des cadres de documentation en ligne et un bloc de données texte expliquant ce que fait un groupe de nœuds et comment il est structuré.

Documentation

Un serveur MCP (Model Context Protocol) léger pour Blender. Il offre une interface en langage naturel avec l’API Python de Blender, facilitant l’accès à la documentation et permettant aux utilisateurs d’explorer et de comprendre des configurations complexes.

Pour les détails techniques et la documentation sur l’architecture, consultez le code source.

Avertissement de sécurité
Le serveur MCP exécutera du code généré par LLM dans Blender sans aucune protection pour empêcher la suppression de vos données ou leur envoi vers un emplacement distant. Pour garantir la sécurité de vos données, il est recommandé d’utiliser une machine virtuelle ou un système sans accès à des informations sensibles.

Installation

Blender ne dispose d’aucune fonctionnalité intégrée pour se connecter aux LLM.

Pour que Blender puisse se connecter aux LLM, trois outils externes doivent être téléchargés, installés et exécutés manuellement.

Prérequis :

  1. Blender 5.1 ou plus récent
  2. Extension (Add-on)
  3. Client LLM
  4. Serveur MCP

Extension (Add-on)

Afin d’interagir avec votre session Blender, vous devez installer une extension spécifique pour l’intégration du serveur MCP.

Glisser-déposer dans Blender

…ou télécharger et installer depuis le disque

Si vous faites un glisser-déposer dans Blender, vous devrez le faire deux fois. La première pour ajouter le dépôt Blender Lab, la seconde pour installer l’extension elle-même. Cette méthode vous permet de recevoir des notifications de mise à jour dès qu’une nouvelle version de cette extension est disponible.


Client LLM

Les serveurs MCP suivent un standard bien défini et sont compatibles avec une multitude de clients. Veuillez suivre la documentation de LLama.cpp, ou installer un client LLM de votre choix.


Serveur MCP

Il existe différentes manières d’installer le serveur MCP selon les capacités de votre client LLM.

  • Bundle MCP : Pour les clients récents qui prennent en charge les fichiers .mcpb, téléchargez le dernier package depuis la page des releases. Llama.cpp ne prend pas encore cela en charge.
  • Serveur MCP : Pour installer à partir du code source, consultez la documentation de Llama.cpp ou les instructions d’installation.

Exécution

Une fois votre serveur MCP configuré dans votre client LLM, vous pouvez commencer à explorer vos scènes Blender.

Interface web de llama.cpp exécutant le serveur blender-mcp.


Exemple 1 : Analyse de scène

MCP peut être utilisé pour analyser programmatiquement la scène afin de détecter les goulets d’étranglement de performance. Prenons par exemple le fichier de démonstration Classroom :

Fichier de démonstration Classroom.

Cette scène est l’un des fichiers de benchmark de Blender. Ces fichiers font partie du benchmark car ils représentent bien des fichiers de production réels créés par des artistes. Il n’est donc pas surprenant qu’ils puissent contenir des objets susceptibles d’être optimisés.

Bien que vérifier le nombre de polygones soit souvent suffisant, il est encore plus intéressant de tracer le nombre de polygones en fonction de leur taille à l’écran dans le rendu final. Cela peut être obtenu avec l’invite suivante.

Analyze the scene and list the outliers: objects with highest polygon count but smaller size from the camera point of view.

Les données résultantes du graphique montrent clairement deux objets qui se démarquent des autres : alphabet et coat 1 :

Analyse graphique du nombre de polygones par surface d’écran pour la scène de démonstration Classroom.

L’objet alphabet a 20 000 polygones. En raison de sa disposition plane, il pourrait être remplacé par une texture avec peu d’impact sur le résultat final. L’objet coat 1 a 37 000 polygones à cause de son modificateur Subsurf. Réduire le niveau de subdivision pourrait alléger la scène si la mémoire était le facteur limitant de votre système.

L’alphabet se trouve à l’arrière de la scène et pourrait facilement être remplacé par une texture. Le manteau est également suffisamment éloigné pour que son maillage puisse être simplifié.

Quelle est la fiabilité de ces résultats ?

L’analyse initiale retournée par le LLM ne prenait en compte que les modificateurs influençant la vue 3D. L’objet coat 1 possède un modificateur Solidify qui double son nombre de polygones, ce qui en fait une valeur encore plus aberrante. Et bien que cette scène n’ait pas la simplification activée, ce paramètre aurait également affecté l’analyse finale.


Exemple 2 : Invites diverses

Voici quelques autres cas d’usage testés. Vous devrez coller l’intégralité du contenu de l’« Invite » pour qu’ils fonctionnent. Comme point de départ, vous devez utiliser le fichier de démonstration correspondant. Le succès de l’opération dépendra du modèle utilisé.

Cas d’usageInviteFichier de démonstrationRésultat
Renommage de blocs de données : corriger les fautesAvec le fichier Blender actuellement ouvert, corrigez le nom de tous les blocs de données pour supprimer les fautes de frappe. Signalez quels blocs de données ont été corrigés.Scattering PebblesGRP-rocks → GRP-pebble, LGT-Lights → LGT-lights, Compositing Nodetree → Compositing Node Tree
Renommage de blocs de données : meilleurs nomsAvec le fichier Blender actuellement ouvert, suggérez des noms descriptifs pour tous les blocs de données, et appliquez-les si approuvé.Scattering PebblesCamera → CAM-main, Area → LGT-sun-key, Area.001 → LGT-sun-fill, Area.002 → LGT-area-rim, GEO-pebble.001 → GEO-pebble-B, …
Interroger les relations de données en langage naturelQuels objets utilisent le matériau suivant : pebblesScattering Pebbles7 objets : GEO-pebble, GEO-pebble.001, GEO-pebble.002, GEO-pebble.003, GEO-pebble.004, GEO-pebble.005, GEO-pebble.006
Débogage de scèneQuel est l’objet avec le plus grand nombre de polygones dans ce fichier ? Ignorez les objets qui ne sont liés à aucune scène.Scattering PebblesGEO-ground avec 4 096 faces.
Documentation des Geometry NodesAvec le fichier Blender actuellement ouvert, expliquez ce que fait la configuration principale de Geometry Nodes. Ajoutez de la documentation en ligne avec des éléments de cadre. Créez un bloc de données Texte avec le résultat de l’analyse.Scattering Pebbles4 cadres principaux codés par couleur + fichier texte avec explication.

Autres invites à explorer :

  • Traduire tous les blocs de données du français vers l’anglais.
  • Mon maillage n’est pas déformé par mon armature, comment puis-je résoudre cela ?
  • Blender manque de mémoire lors du rendu de cette scène, comment puis-je l’optimiser ?
  • Ce maillage présente des artefacts d’ombrage étranges, comment puis-je résoudre cela ?
  • Trouver les objets dont les maillages ont de mauvaises normales.
  • Vérifier ma scène pour les objets maillés transformés de manière non uniforme.
  • La vidéo que j’ai exportée ne se lit pas dans mes navigateurs web, quels paramètres dois-je modifier ?
  • Quels pinceaux de sculpture dois-je utiliser pour créer et détailler des branches d’arbre ?
  • Configurer les nœuds de composition pour enregistrer mon image à la fois en SDR et HDR.
  • Vérifier cette liste de contrôle : les maillages doivent être manifold, tous les objets doivent avoir des matériaux, la nomenclature doit suivre la convention, pas de chemins absolus, … Renommage de blocs de données : corriger les fautes

GRP-rocksGRP-pebbles (la scène ne contient que des objets cailloux, pas de rochers).

LGT-LightsLGT-lights (casse incohérente).

Compositing NodetreeCompositing Node Tree (Nodetree est une erreur de mot composé).

Renommage de blocs de données : meilleurs noms

Objets :

  • CameraCAM-main
  • AreaLGT-sun-key
  • Area.001LGT-sun-fill
  • Area.002LGT-area-rim
  • GEO-pebble.001GEO-pebble-B
  • GEO-pebble.002GEO-pebble-C
  • GEO-pebble.003GEO-pebble-D
  • GEO-pebble.004GEO-pebble-E
  • GEO-pebble.005GEO-pebble-F
  • GEO-pebble.006GEO-pebble-G

Blocs de données de lumière :

  • AreaLGT-sun-key
  • Area.001LGT-sun-fill
  • Area.002LGT-area-rim

Bloc de données de caméra :

  • CameraCAM-main

Textures :

  • TextureTEX-ground-clouds
  • Texture.001TEX-ground-image

Scène & Monde :

  • WorldWLD-environment
  • SceneSCN-main Documentation des Geometry Nodes

Nouveaux cadres créés :

Cadres de documentation ajoutés à la configuration de Geometry Nodes.

Bloc de données Texte :

GEOMETRY NODES ANALYSIS -- "Pebble Scattering Nodes"
Applied to object: GEO-ground   |   Modifier: Pebbles
========================================================

OVERVIEW
--------
This node group scatters three size categories of pebble meshes across
the faces of a ground mesh.  Each category uses its own density mask
and a global Factor multiplier so that coverage can be art-directed
per-layer without touching the raw mask textures.  The three resulting
instance layers are merged with the original ground geometry and sent
to the Group Output.

INPUTS (Group Interface)
------------------------
  Geometry           -- The ground mesh to scatter pebbles on.
  Large Pebbles Mask -- Float mask (e.g. vertex colour / texture) that
                       defines WHERE large pebbles may appear.
  Medium Pebbles Mask-- Float mask for medium pebble placement regions.
  Small Pebbles Mask -- Float mask for small pebble placement regions.
  Factor             -- Global density multiplier shared by all three
                       lanes (appears three times in the interface,
                       one per lane).

NODE GRAPH -- LANE BY LANE
--------------------------

+- LARGE PEBBLES LANE -----------------------------------------------------+
|  Source object : GEO-pebble                                              |
|  Group Input.001                                                         |
|    +- Geometry ------------------------> Distribute Points on Faces      |
|    +- Large Pebbles Mask ------------> Distribute Points on Faces        |
|    |                                     (Density Factor socket)         |
|    +- Factor --> Math.003 (x)  -------> Distribute Points on Faces       |
|                                          (Density Max socket)            |
|  Distribute Points on Faces ----------> Instance on Points               |
|  Object Info (GEO-pebble) -----------> Instance on Points (Instance)     |
|  Random Rotation.001 [-pi, +pi] -----> Instance on Points (Rotation)     |
|  Random Value [0.25 - 0.60]   -------> Instance on Points (Scale)        |
|  Instance on Points ------------------> Join Geometry.003                |
+--------------------------------------------------------------------------+

+- MEDIUM PEBBLES LANE ----------------------------------------------------+
|  Source object : GEO-pebble.004                                          |
|  Group Input.002                                                         |
|    +- Geometry ------------------------> Distribute Points on Faces.001  |
|    +- Medium Pebbles Mask -----------> Math.004 (x) --> Math.005 (x)     |
|    +- Factor ------------------------> Math.005 (x)                      |
|         Math.005 output --------------> Distribute Points on Faces.001   |
|                                          (Density socket)                |
|  Distribute Points on Faces.001 -----> Instance on Points.001            |
|  Object Info.001 (GEO-pebble.004) --> Instance on Points.001             |
|  Random Rotation.002 [-pi, +pi]  ----> Instance on Points.001            |
|  Random Value.002 [0.25 - 0.45] -----> Instance on Points.001            |
|  Instance on Points.001 -------------> Join Geometry.003                 |
+--------------------------------------------------------------------------+

+- SMALL PEBBLES LANE -----------------------------------------------------+
|  Source object : GEO-pebble.002                                          |
|  Group Input.003                                                         |
|    +- Geometry ------------------------> Distribute Points on Faces.002  |
|    +- Small Pebbles Mask -----------> Math.006 (x) --> Math.007 (x)      |
|    +- Factor ------------------------> Math.006 (x)                      |
|         Math.007 output --------------> Distribute Points on Faces.002   |
|                                          (Density socket)                |
|  Distribute Points on Faces.002 -----> Instance on Points.002            |
|  Object Info.002 (GEO-pebble.002) --> Instance on Points.002             |
|  Random Rotation [-pi, +pi]      ----> Instance on Points.002            |
|  Random Value.003 [0.10 - 0.35] -----> Instance on Points.002            |
|  Instance on Points.002 -------------> Join Geometry.003                 |
+--------------------------------------------------------------------------+

+- MERGE & OUTPUT ---------------------------------------------------------+
|  Group Input.004                                                         |
|    +- Geometry (pass-through) --------> Join Geometry.003                |
|  Join Geometry.003                                                       |
|    (inputs: large instances + medium instances +                         |
|             small instances  + original ground geo)                      |
|    +- Geometry -----------------------> Group Output                     |
+--------------------------------------------------------------------------+

SCALE RANGES (uniform, per lane)
---------------------------------
  Large  pebbles : 0.25 - 0.60
  Medium pebbles : 0.25 - 0.45
  Small  pebbles : 0.10 - 0.35

ROTATION (all lanes)
---------------------
  All three axes randomised independently over [-pi, +pi],
  giving each pebble instance a fully random orientation.

DENSITY CONTROL PATTERN (Medium & Small lanes)
-----------------------------------------------
  The mask value and the Factor are first multiplied together
  (Math.004 / Math.006), then that product is multiplied again
  by a second value (Math.005 / Math.007) before being fed into
  the Density socket.  This two-stage multiply gives a non-linear
  response curve, making the density fall off more aggressively
  near the mask edges.

  The Large lane uses a different (single-stage) approach:
  the Density Factor socket receives the mask directly, and the
  Factor is only used to scale Density Max via Math.003.

NOTES & SUGGESTIONS
--------------------
  * The node group has no Seed input exposed; adding one would allow
    re-randomising all three layers simultaneously without touching
    individual nodes.
  * The Factor input currently appears three times (once per lane).
    Merging them into a single shared socket would simplify the
    modifier panel.
  * Consider labelling the unlabelled Math nodes (Math.003-.007)
    and Random Value nodes to aid future maintenance.