Blender MCP

официальный

Легковесный MCP-сервер для Blender. Предоставляет интерфейс на естественном языке для работы с Python API Blender, улучшает доступ к документации и позволяет пользователям изучать и понимать сложные настройки.

Что можно делать с Blender MCP?

  • Анализ производительности сцены — Попросите вашего ИИ проанализировать открытую сцену Blender и определить объекты с высоким количеством полигонов относительно их размера на экране, как в примере с обнаружением выбросов в классе.
  • Переименование дата-блоков — Помощник исправит опечатки или предложит описательные имена для всех дата-блоков в текущем файле, применяя изменения только после вашего одобрения.
  • Запросы к сцене на естественном языке — Задавайте вопросы о взаимосвязях объектов, например: «Какие объекты используют материал 'pebbles'?» или определите объект с самым высоким количеством полигонов в сцене.
  • Документация по Geometry Nodes — Запросите объяснение основной настройки геометрических узлов, с встроенной документацией во фреймах и текстовым дата-блоком, резюмирующим анализ.
  • Отладка сцены — Получите помощь в устранении таких проблем, как меши с неравномерным масштабом, неправильные нормали или объекты, которые неправильно деформируются с арматурами.

Документация

Легковесный MCP-сервер (Model Context Protocol) для Blender. Он предоставляет интерфейс на естественном языке для Python API Blender, улучшая доступ к документации и позволяя пользователям исследовать и понимать сложные настройки.

Технические детали и документацию по архитектуре смотрите в исходном коде.

[!warning] Предупреждение Предупреждение о безопасности
MCP-сервер будет выполнять сгенерированный LLM код в Blender без каких-либо защитных механизмов, предохраняющих ваши данные от удаления или отправки в удаленное расположение. Чтобы сохранить ваши данные в безопасности, рекомендуется использовать виртуальную машину или систему без доступа к конфиденциальной информации.

Установка

В Blender нет встроенной функциональности для подключения к LLM.

Чтобы Blender мог подключаться к LLM, необходимо вручную загрузить, установить и запустить три внешних инструмента.


Аддон

Для взаимодействия с вашим сеансом Blender необходимо установить специальный аддон для интеграции MCP-сервера.

…или скачайте и установите с диска

Если вы перетаскиваете файл в Blender, вам нужно сделать это дважды. Сначала для добавления репозитория Blender Lab, затем для установки самого аддона. Этот метод позволяет получать уведомления об обновлениях при появлении новой версии аддона.


LLM-клиент

MCP-серверы следуют четко определенному стандарту и совместимы с множеством клиентов. Следуйте документации LLama.cpp или установите LLM-клиент по вашему выбору.


MCP-сервер

Существуют разные способы установки MCP-сервера в зависимости от возможностей вашего LLM-клиента.

Запуск

После того как вы настроили MCP-сервер в вашем LLM-клиенте, вы можете начать исследовать свои сцены Blender.

Веб-интерфейс llama.cpp, запускающий blender-mcp сервер.


Пример 1: Анализ сцены

MCP можно использовать для программного анализа сцены на предмет узких мест производительности. Возьмем, например, демонстрационный файл Classroom:

Демонстрационный файл Classroom.

Эта сцена — один из файлов бенчмарка Blender. Причина, по которой эти файлы включены в бенчмарк, в том, что они хорошо представляют реальные производственные файлы, созданные художниками. И неудивительно, что в них могут содержаться объекты, которые можно оптимизировать.

Хотя проверки количества полигонов часто бывает достаточно, еще интереснее построить график количества полигонов в зависимости от того, насколько крупно они отображаются в финальном рендере. Это можно получить с помощью следующего запроса.

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

Построенные данные четко показывают два объекта, которые выделяются на фоне остальных: alphabet и coat 1:

Graph analysis of the polycount per screen area

Графический анализ количества полигонов на площадь экрана для демонстрационной сцены Classroom.

Объект alphabet имеет 20 тысяч полигонов. Из-за его плоского расположения его можно заменить текстурой с минимальным ущербом для конечного результата. Объект coat 1 имеет 37 тысяч полигонов из-за модификатора Subsurf. Снижение уровня подразделения могло бы облегчить сцену, если бы память была узким местом вашей системы.

Алфавит находится в задней части сцены и его легко можно заменить текстурой. Пальто также находится достаточно далеко, чтобы его сетку можно было упростить.

[!info] Информация Насколько надежны эти результаты?

Первоначальный анализ, возвращенный LLM, учитывал только модификаторы, влияющие на вьюпорт. У объекта coat 1 есть модификатор Solidify, который удваивает количество его полигонов, делая его еще более заметным выбросом. И хотя в этой сцене Simplify не был включен, эти настройки также повлияли бы на окончательный анализ.


Пример 2: Различные запросы

Вот некоторые другие протестированные варианты использования. Вам нужно вставить весь «Prompt» для их работы. В качестве отправной точки следует использовать соответствующий демонстрационный файл. Успех операции будет зависеть от используемой модели.

Вариант использованияPromptДемонстрационный файлРезультат
Переименование блоков данных: исправление опечатокWith 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
Переименование блоков данных: лучшие именаWith 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, …
Запрос связей данных на естественном языкеWhich objects are using the following material: pebblesScattering Pebbles7 объектов: GEO-pebble, GEO-pebble.001, GEO-pebble.002, GEO-pebble.003, GEO-pebble.004, GEO-pebble.005, GEO-pebble.006
Отладка сценыWhat is the object with the highest poly-count on this file? Ignore objects which are not linked to any scene.Scattering PebblesGEO-ground с 4 096 гранями.
Документация Geometry NodesWith 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 основных цветовых рамки + текстовый файл с пояснениями.

Другие запросы, которые еще предстоит изучить:

  • Перевести все блоки данных с французского на английский.
  • Моя сетка не деформируется арматурой, как это исправить?
  • Blender не хватает памяти при рендере этой сцены, как ее оптимизировать?
  • У этой сетки странные артефакты затенения, как это исправить?
  • Найти объекты с сетками, имеющими неправильные нормали.
  • Проверить сцену на объекты с неравномерным масштабированием.
  • Экспортированное видео не воспроизводится в моих браузерах, какие настройки следует изменить?
  • Какие кисти для скульптинга использовать для создания и детализации ветвей деревьев?
  • Настроить композитинг-ноды для сохранения изображения в форматах SDR и HDR.
  • Проверить этот чек-лист: сетки должны быть замкнутыми, все объекты должны иметь материалы, имена должны соответствовать соглашению, никаких абсолютных путей, … Переименование блоков данных: исправление опечаток

GRP-rocksGRP-pebbles (сцена содержит только объекты-гальку, а не камни).

LGT-LightsLGT-lights (непоследовательный регистр).

Compositing NodetreeCompositing Node Tree (Nodetree — ошибка сложного слова).

Переименование блоков данных: лучшие имена

Объекты:

  • 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

Блоки данных света:

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

Блок данных камеры:

  • CameraCAM-main

Текстуры:

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

Сцена и мир:

  • WorldWLD-environment
  • SceneSCN-main Документация Geometry Nodes

Созданные новые рамки:

Documentation frames added to the geometry nodes setup.

Рамки документации, добавленные в настройку geometry nodes.

Текстовый блок данных:

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.