Blender MCP

공식

Blender용 경량 MCP(Model Context Protocol) 서버입니다. Blender의 Python API와 자연어 인터페이스를 제공하여 문서 접근성을 개선하고, 사용자가 복잡한 설정을 탐색하고 이해할 수 있도록 돕습니다.

Blender MCP(으)로 무엇을 할 수 있나요?

  • 씬 성능 분석 — AI에게 열린 Blender 씬을 분석하고 화면 크기 대비 폴리곤 수가 높은 객체를 식별하도록 요청하세요. 교실 데모 이상치 탐지처럼요.
  • 데이터-블록 이름 바꾸기 — 어시스턴트가 현재 파일의 모든 데이터-블록에 대해 오타를 수정하거나 설명적인 이름을 제안하게 하고, 승인 후에만 변경 사항을 적용하세요.
  • 자연어 씬 질의 — 객체 관계에 대해 질문하세요. 예: "어떤 객체가 'pebbles' 재질을 사용하고 있나요?" 또는 씬에서 가장 높은 폴리곤 수를 가진 객체를 식별하세요.
  • 지오메트리 노드 문서화 — 주요 지오메트리 노드 설정에 대한 설명을 요청하고, 인라인 프레임 문서화와 분석을 요약하는 텍스트 데이터-블록을 포함하세요.
  • 씬 디버깅 — 비균일 스케일 메시, 잘못된 노멀, 또는 아마추어로 올바르게 변형되지 않는 객체와 같은 문제를 해결하는 데 도움을 받으세요.

문서

Blender용 경량 MCP(Model Context Protocol) 서버입니다. Blender의 Python API와 자연어 인터페이스를 제공하여 문서 접근성을 높이고, 사용자가 복잡한 설정을 탐색하고 이해할 수 있게 해줍니다.

아키텍처에 대한 기술적 세부 사항과 문서는 소스 코드를 확인하세요.

[!warning] 경고 보안 경고
MCP 서버는 데이터 삭제 또는 원격 위치로의 전송으로부터 데이터를 보호하는 어떤 보호 장치도 없이 LLM이 생성한 코드를 Blender에서 실행합니다. 데이터를 안전하게 유지하려면 가상 머신이나 민감한 정보에 접근할 수 없는 시스템을 사용하는 것이 좋습니다.

설치

Blender에는 LLM에 연결하기 위한 내장 기능이 없습니다.

Blender가 LLM과 연결하려면 세 가지 외부 도구를 수동으로 다운로드, 설치, 실행해야 합니다.


애드온

Blender 세션과 상호작용하려면 MCP 서버 통합을 위한 특정 애드온을 설치해야 합니다.

…또는 다운로드디스크에서 설치

Blender에 끌어서 놓기(drag & drop)를 사용하는 경우 두 번 수행해야 합니다. 먼저 Blender Lab 저장소를 추가하고, 두 번째로 애드온 자체를 설치합니다. 이 방법을 사용하면 이 애드온의 새 버전이 나올 때 업데이트 알림을 받을 수 있습니다.


LLM 클라이언트

MCP 서버는 잘 정의된 표준을 따르며 다양한 클라이언트와 호환됩니다. LLama.cpp 문서를 따르거나 선호하는 LLM 클라이언트를 설치하세요.


MCP 서버

LLM 클라이언트의 기능에 따라 MCP 서버를 설치하는 방법은 여러 가지가 있습니다.

  • MCP 번들: .mcpb 파일을 지원하는 최신 클라이언트의 경우, 릴리스 페이지에서 최신 패키지를 다운로드하세요. Llama.cpp는 아직 이를 지원하지 않습니다.
  • MCP 서버: 소스 코드에서 설치하려면 Llama.cpp 문서 또는 설정 지침을 확인하세요.

실행

LLM 클라이언트 내에서 MCP 서버를 설정했다면 Blender 장면을 탐색하기 시작할 수 있습니다.

blender-mcp 서버를 실행하는 llama.cpp 웹 인터페이스.


예제 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.

플롯된 결과 데이터는 나머지와 구별되는 두 객체를 명확하게 보여줍니다: alphabetcoat 1:

Graph analysis of the polycount per screen area

Classroom 데모 장면의 화면 영역별 폴리곤 수 그래프 분석.

alphabet 객체는 20,000개의 폴리곤을 가지고 있습니다. 평평한 배치 때문에 최종 결과에 큰 손실 없이 텍스처로 대체할 수 있습니다. coat 1 객체는 Subsurf 모디파이어로 인해 37,000개의 폴리곤을 가지고 있습니다. 시스템에서 메모리가 병목 현상이라면 세분화 수준을 낮추면 장면을 완화할 수 있습니다.

알파벳은 장면 뒤쪽에 있어 쉽게 텍스처로 대체할 수 있습니다. 코트도 충분히 멀리 있어 메시를 단순화할 수 있습니다.

[!info] 정보 이 결과는 얼마나 신뢰할 수 있나요?

LLM이 반환한 초기 분석은 뷰포트에 영향을 주는 모디파이어만 고려했습니다. coat 1 객체에는 폴리곤 수를 두 배로 늘리는 Solidify 모디파이어가 있어 더욱 이상치가 됩니다. 이 장면에는 Simplify가 활성화되어 있지 않았지만, 이 설정도 최종 분석에 영향을 미쳤을 것입니다.


예제 2: 다양한 프롬프트

다음은 테스트된 다른 사용 사례 중 일부입니다. 작동하려면 전체 "프롬프트" 내용을 붙여넣어야 합니다. 시작점으로 해당 데모 파일을 사용해야 합니다. 작업의 성공 여부는 사용된 모델에 따라 달라집니다.

사용 사례프롬프트데모 파일결과
데이터 블록 이름 바꾸기: 오타 수정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 Pebbles4,096개의 면을 가진 GEO-ground.
지오메트리 노드 문서With 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 (장면에는 rocks가 아닌 pebble 객체만 포함되어 있습니다).

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 지오메트리 노드 문서

생성된 새 프레임:

Documentation frames added to the geometry nodes setup.

지오메트리 노드 설정에 추가된 문서 프레임.

텍스트 데이터 블록:

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.