Blender MCP

offiziell

Ein leichtgewichtiger MCP-Server (Model Context Protocol) für Blender. Er bietet eine natürliche Sprachschnittstelle zur Blender-Python-API, verbessert den Zugriff auf die Dokumentation und ermöglicht es Benutzern, komplexe Setups zu erkunden und zu verstehen.

Was kann man mit Blender MCP machen?

  • Szenen-Performance-Analyse — Bitten Sie Ihre KI, die geöffnete Blender-Szene zu analysieren und Objekte mit hoher Polygonanzahl im Verhältnis zu ihrer Bildschirmgröße zu identifizieren, wie bei der Erkennung von Ausreißern im Klassenzimmer-Demo.
  • Data-Block-Umbenennung — Lassen Sie den Assistenten Tippfehler korrigieren oder beschreibende Namen für alle Data-Blocks in der aktuellen Datei vorschlagen, wobei Änderungen nur nach Ihrer Freigabe angewendet werden.
  • Natürlichsprachliche Szenenabfragen — Stellen Sie Fragen zu Objektbeziehungen, z. B. „Welche Objekte verwenden das Material ‚pebbles‘?“ oder identifizieren Sie das Objekt mit der höchsten Polygonanzahl in der Szene.
  • Geometry-Nodes-Dokumentation — Fordern Sie eine Erläuterung des Hauptaufbaus der Geometry Nodes an, mit Inline-Frame-Dokumentation und einem Text-Data-Block, der die Analyse zusammenfasst.
  • Szenen-Debugging — Holen Sie sich Hilfe bei der Fehlerbehebung von Problemen wie nicht einheitlich skalierten Meshes, fehlerhaften Normalen oder Objekten, die sich mit Armatures nicht korrekt verformen.

Dokumentation

Ein leichtgewichtiger MCP-Server (Model Context Protocol) für Blender. Er bietet eine natürliche Sprachschnittstelle zur Python-API von Blender, verbessert den Zugriff auf die Dokumentation und ermöglicht es Benutzern, komplexe Setups zu erkunden und zu verstehen.

Technische Details und Dokumentation zur Architektur finden Sie im Quellcode.

[!warning] Warnung Sicherheitswarnung
Der MCP-Server führt LLM-generierten Code in Blender ohne jegliche Schutzmechanismen aus, die Ihre Daten vor dem Entfernen oder dem Senden an einen entfernten Standort schützen. Um Ihre Daten zu schützen, wird empfohlen, eine virtuelle Maschine oder ein System ohne Zugriff auf sensible Informationen zu verwenden.

Installation

Blender verfügt über keine integrierte Funktionalität zur Verbindung mit LLMs.

Damit Blender eine Verbindung zu LLMs herstellen kann, müssen drei externe Tools manuell heruntergeladen, installiert und ausgeführt werden.


Add-on

Um mit Ihrer Blender-Sitzung zu interagieren, müssen Sie ein spezielles Add-on für die MCP-Server-Integration installieren.

…oder herunterladen und Von Datenträger installieren

Wenn Sie per Drag & Drop in Blender ziehen, müssen Sie dies zweimal tun. Zuerst, um das Blender-Lab-Repository hinzuzufügen, und zweitens, um das Add-on selbst zu installieren. Diese Methode ermöglicht es Ihnen, Update-Benachrichtigungen zu erhalten, sobald eine neue Version dieses Add-ons verfügbar ist.


LLM-Client

MCP-Server folgen einem klar definierten Standard und sind mit einer Vielzahl von Clients kompatibel. Bitte folgen Sie der LLama.cpp-Dokumentation oder installieren Sie einen LLM-Client Ihrer Wahl.


MCP-Server

Es gibt verschiedene Möglichkeiten, den MCP-Server zu installieren, abhängig von den Fähigkeiten Ihres LLM-Clients.

Ausführung

Sobald Sie Ihren MCP-Server in Ihrem LLM-Client eingerichtet haben, können Sie beginnen, Ihre Blender-Szenen zu erkunden.

llama.cpp-Weboberfläche, die den blender-mcp-Server ausführt.


Beispiel 1: Szenenanalyse

MCP kann verwendet werden, um die Szene programmatisch auf Leistungsengpässe zu analysieren. Nehmen Sie zum Beispiel die Classroom-Demodatei:

Classroom-Demodatei.

Diese Szene ist eine der Blender-Benchmark-Dateien. Der Grund, warum diese Dateien im Benchmark enthalten sind, ist, dass sie eine gute Repräsentation realer Produktionsdateien darstellen, die von Künstlern erstellt wurden. Und es ist keine Überraschung, dass sie Objekte enthalten kann, die optimiert werden können.

Während die Überprüfung der Polygonanzahl oft ausreicht, ist es noch interessanter, die Anzahl der Polygone basierend auf ihrer Größe im finalen Render zu plotten. Dies kann mit dem folgenden Prompt erreicht werden.

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

Die geplotteten Ergebnisdaten zeigen deutlich zwei Objekte, die aus der Masse herausstechen: alphabet und coat 1:

Graph analysis of the polycount per screen area

Grafikanalyse der Polygonanzahl pro Bildschirmfläche für die Classroom-Demoszene.

Das alphabet-Objekt hat 20.000 Polygone. Aufgrund seiner flachen Anordnung könnte es durch eine Textur ersetzt werden, mit geringen Nachteilen für das Endergebnis. Das coat 1-Objekt hat 37.000 Polygone aufgrund seines Subsurf-Modifiers. Eine Senkung der Unterteilungsstufe könnte die Szene entlasten, wenn der Speicher der Engpass in Ihrem System wäre.

Das Alphabet sitzt im hinteren Teil der Szene und könnte leicht durch eine Textur ersetzt werden. Der Mantel ist ebenfalls weit genug entfernt, dass sein Mesh vereinfacht werden könnte.

[!info] Info Wie zuverlässig sind diese Ergebnisse?

Die anfängliche Analyse, die vom LLM zurückgegeben wurde, berücksichtigte nur die Modifier, die die Ansicht beeinflussten. Das coat 1-Objekt hat einen Solidify-Modifier, der seine Polygonanzahl verdoppelt, was es zu einem noch größeren Ausreißer macht. Und obwohl diese Szene kein Simplify aktiviert hatte, hätten diese Einstellungen auch die endgültige Analyse beeinflusst.


Beispiel 2: Verschiedene Prompts

Dies sind einige der anderen getesteten Anwendungsfälle. Sie müssen den gesamten „Prompt“-Inhalt einfügen, damit sie funktionieren. Als Ausgangspunkt sollten Sie die entsprechende Demodatei verwenden. Der Erfolg der Operation hängt vom verwendeten Modell ab.

AnwendungsfallPromptDemodateiErgebnis
Datenblock-Umbenennung: Tippfehler korrigierenWith the current open Blender file fix the name of all the data-blocks to remove typos. Report back which data-blocks got fixed.Scattering PebblesGRP-rocks → GRP-pebble, LGT-Lights → LGT-lights, Compositing Nodetree → Compositing Node Tree
Datenblock-Umbenennung: bessere NamenWith the current open Blender file suggest descriptive names for all data-blocks, and apply if approved.Scattering PebblesCamera → CAM-main, Area → LGT-sun-key, Area.001 → LGT-sun-fill, Area.002 → LGT-area-rim, GEO-pebble.001 → GEO-pebble-B, …
Abfragen von Datenbeziehungen mit natürlicher SpracheWhich objects are using the following material: pebblesScattering Pebbles7 Objekte: GEO-pebble, GEO-pebble.001, GEO-pebble.002, GEO-pebble.003, GEO-pebble.004, GEO-pebble.005, GEO-pebble.006
Szenen-DebuggingWhat is the object with the highest poly-count on this file? Ignore objects which are not linked to any scene.Scattering PebblesGEO-ground mit 4.096 Flächen.
Geometry-Nodes-DokumentationWith the current open Blender file explain what the main geometry nodes setup is doing. Add inline documentation for it with frame elements. Create a Text data-block with the result of analysis.Scattering Pebbles4 große farbcodierte Rahmen + Textdatei mit Erklärung.

Andere Prompts, die noch zu erkunden sind:

  • Übersetzen Sie alle Datenblöcke von Französisch auf Englisch.
  • Mein Mesh wird nicht von meiner Armature deformiert, wie kann ich das beheben?
  • Blender hat beim Rendern dieser Szene nicht genug Speicher, wie kann ich das optimieren?
  • Dieses Mesh hat seltsame Shading-Artefakte, wie kann ich das beheben?
  • Finden Sie Objekte, die Meshes mit schlechten Normalen haben.
  • Überprüfen Sie meine Szene auf nicht-uniform transformierte Mesh-Objekte.
  • Das exportierte Video spielt nicht in meinen Webbrowsern, welche Einstellungen sollte ich ändern?
  • Welche Sculpt-Pinsel sollte ich für das Erstellen und Detaillieren von Baumzweigen verwenden?
  • Richten Sie Compositing-Knoten ein, um mein Bild sowohl als SDR als auch als HDR zu speichern.
  • Überprüfen Sie diese Checkliste: Meshes müssen manifold sein, alle Objekte müssen Materialien haben, die Benennung muss der Konvention folgen, keine absoluten Pfade, … Datenblock-Umbenennung: Tippfehler korrigieren

GRP-rocksGRP-pebbles (die Szene enthält nur Pebble-Objekte, keine Rocks).

LGT-LightsLGT-lights (inkonsistente Groß-/Kleinschreibung).

Compositing NodetreeCompositing Node Tree (Nodetree ist ein zusammengesetzter Wortfehler).

Datenblock-Umbenennung: bessere Namen

Objekte:

  • 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

Licht-Datenblöcke:

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

Kamera-Datenblock:

  • CameraCAM-main

Texturen:

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

Szene & Welt:

  • WorldWLD-environment
  • SceneSCN-main Geometry-Nodes-Dokumentation

Neue erstellte Rahmen:

Documentation frames added to the geometry nodes setup.

Dokumentationsrahmen, die zum Geometry-Nodes-Setup hinzugefügt wurden.

Text-Datenblock:

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.