블랜더와 파이썬] 파이썬으로 Blender 파일 만들기
▣ 파이썬으로 모델 만들기
Blender의 Python API(bpy)를 사용하여 지름 10, 높이 20인 원기둥을 만드는 코드입니다. Blender의 Python 콘솔이나 스크립트 에디터에서 실행할 수 있습니다.
파이썬 코드 실행 방법: Blender의 Python API를 사용하여 원기둥 메쉬를 생성하는 스크립트입니다.
- Blender를 열고 스크립팅 탭으로 이동합니다.
- 새 텍스트 편집기를 열고 위 코드를 붙여넣습니다.
- 스크립트를 실행하면 지름 10, 높이 20인 원기둥이 장면 중심에 생성됩니다.

파이썬 코드 :
import bpy
# 기존 메쉬 객체 제거 (선택 사항)
bpy.ops.object.select_all(action='DESELECT')
bpy.ops.object.select_by_type(type='MESH')
bpy.ops.object.delete()
# 원기둥 생성
# 지름 10 -> 반지름 5, 높이 20
bpy.ops.mesh.primitive_cylinder_add(
radius=5.0, # 지름 10 / 2 = 반지름 5
depth=20.0, # 높이 20
location=(0, 0, 0) # 원기둥의 중심 위치
)
# 생성된 원기둥 선택
cylinder = bpy.context.object
cylinder.name = "Cylinder_D10_H20"
# 장면 업데이트
bpy.context.view_layer.update()
1. 기존 메쉬 객체 제거 (선택 사항)
이 부분은 스크립트를 실행하기 전에 기존에 있던 모든 메쉬 객체(Mesh Object)를 삭제하는 역할을 합니다. 새로운 원기둥을 만들 때 이전에 만들어진 객체가 방해되지 않도록 깔끔하게 정리 합니다.
bpy.ops.object.select_all(action='DESELECT')
bpy.ops.object.select_by_type(type='MESH')
bpy.ops.object.delete()
- bpy.ops.object.select_all(action='DESELECT'): 현재 선택된 모든 객체를 선택 해제합니다.
- bpy.ops.object.select_by_type(type='MESH'): 씬에 있는 모든 메쉬 타입 객체를 선택합니다.
- bpy.ops.object.delete(): 선택된 모든 객체를 삭제합니다.
2. 원기둥 생성
이 코드가 실제로 원기둥을 만드는 핵심 부분입니다. bpy.ops.mesh.primitive_cylinder_add 함수를 사용해 원기둥을 생성하고, 파라미터(매개변수)를 통해 크기와 위치를 설정합니다.
bpy.ops.mesh.primitive_cylinder_add(
radius=5.0,
depth=20.0,
location=(0, 0, 0)
)
- radius=5.0: 원기둥의 반지름을 5.0으로 설정합니다. 지름이 10이므로 반지름은 5가 됩니다.
- depth=20.0: 원기둥의 **높이(깊이)**를 20.0으로 설정합니다.
- location=(0, 0, 0): 원기둥의 중심 위치를 3D 공간의 원점(X=0, Y=0, Z=0)에 둡니다.
3. 성된 원기둥 정보 설정
새롭게 생성된 원기둥 객체에 접근하여 이름을 설정하는 부분입니다.
cylinder = bpy.context.object
cylinder.name = "Cylinder_D10_H20"
- cylinder = bpy.context.object: 가장 최근에 생성되어 활성화된 객체(방금 만든 원기둥)를 cylinder 변수에 할당합니다.
- cylinder.name = "Cylinder_D10_H20": 이 객체의 이름을 Cylinder_D10_H20로 변경합니다. 이 이름은 '지름 10, 높이 20'을 나타내어 객체의 속성을 쉽게 알 수 있도록 해줍니다.
4. 장면 업데이트
마지막으로 이 코드는 변경 사항을 뷰포트(Viewport)에 반영하여 즉시 확인할 수 있도록 해줍니다. 이 작업을 하지 않으면 뷰포트에 원기둥이 바로 나타나지 않을 수 있습니다.
bpy.context.view_layer.update()
이 스크립트는 지름 10, 높이 20인 원기둥을 만들어 3D 공간의 원점에 배치하고, 그 이름을 명확하게 지정하는 역할을 합니다.
▣ 자동화된 외부 파이썬 코드 만들기
Blender의 Python API(bpy)는 Blender 환경 내에서 동작하도록 설계되어 있어, Blender를 실행하지 않고 독립적으로 Python 스크립트를 통해 Blender 파일(.blend)을 생성하거나 저장하는 것은 기본적으로 불가능합니다.
Blender를 백그라운드 모드로 실행하여 Python 스크립트로 원하는 작업을 수행하고 특정 폴더에 저장할 수 있습니다.
bpy 모듈은 Blender의 내부 데이터 구조와 연동되어 작동하며, Blender 실행 환경 외부에서는 이를 사용할 수 없습니다.
Blender를 백그라운드 모드에서 실행
Blender를 GUI 없이 백그라운드에서 실행하여 Python 스크립트를 실행하고 .blend 파일을 특정 폴더에 저장할 수 있습니다. 이를 위해 Blender의 명령줄 인터페이스(CLI)를 사용합니다.
주의 사항
- Blender 실행 파일이 시스템에 설치되어 있어야 하며, blender 명령어가 PATH에 포함되어 있어야 합니다.
- bpy 모듈은 Blender 외부에서 독립적으로 사용할 수 없으므로, Blender 실행이 필수입니다.
- Python 스크립트는 Blender 내부에서 실행되지만, 백그라운드 모드를 사용하면 GUI 없이 작업이 가능합니다.
▷ 퍼이썬 코드
Blender를 백그라운드에서 실행하여 지름 10, 높이 20인 원기둥을 생성하고 특정 폴더에 .blend 파일로 저장하는 예제 코드입니다.
import subprocess
import os
import argparse
import sys
def create_cylinder_script(save_path):
"""Blender에서 실행할 Python 스크립트를 동적으로 생성"""
script_content = f"""
import bpy
import os
# 기존 메쉬 객체 제거
bpy.ops.object.select_all(action='DESELECT')
bpy.ops.object.select_by_type(type='MESH')
bpy.ops.object.delete()
# 원기둥 생성
bpy.ops.mesh.primitive_cylinder_add(
radius=5.0, # 지름 10 / 2
depth=20.0, # 높이 20
location=(0, 0, 0)
)
# 원기둥 이름 설정
cylinder = bpy.context.object
cylinder.name = "Cylinder_D10_H20"
# 파일 저장
bpy.ops.wm.save_as_mainfile(filepath=os.path.abspath("{save_path}"))
# Blender 종료
bpy.ops.wm.quit_blender()
"""
# 임시 스크립트 파일 생성
temp_script = "temp_cylinder_script.py"
with open(temp_script, "w") as f:
f.write(script_content)
return temp_script
def run_blender(blender_path, script_path, save_path):
"""Blender를 백그라운드 모드로 실행"""
try:
# Blender 명령어 실행
result = subprocess.run(
[blender_path, "-b", "-P", script_path],
check=True,
capture_output=True,
text=True
)
print(f"Blender 작업 완료. 파일이 {save_path}에 저장되었습니다.")
except subprocess.CalledProcessError as e:
print(f"Blender 실행 중 오류 발생: {e.stderr}")
except FileNotFoundError:
print(f"Blender 실행 파일을 찾을 수 없습니다: {blender_path}")
finally:
# 임시 스크립트 삭제
if os.path.exists(script_path):
os.remove(script_path)
def main():
# 명령줄 인자 파싱
parser = argparse.ArgumentParser(description="Blender로 원기둥을 생성하고 .blend 파일로 저장")
parser.add_argument(
"--save-path",
type=str,
required=True,
help="저장할 .blend 파일의 경로 (예: /path/to/cylinder.blend)"
)
parser.add_argument(
"--blender-path",
type=str,
default="blender",
help="Blender 실행 파일 경로 (기본값: 'blender')"
)
args = parser.parse_args()
# 저장 경로 확인
save_path = args.save_path
if not save_path.endswith(".blend"):
save_path += ".blend"
os.makedirs(os.path.dirname(save_path), exist_ok=True)
# Blender 스크립트 생성
temp_script = create_cylinder_script(save_path)
# Blender 실행
run_blender(args.blender_path, temp_script, save_path)
if __name__ == "__main__":
main()
위 코드를 사용하여 크기가 다른 3D 모델을 자동으로 만들수 있습니다. 나무의 크기가 다른 100,000개의 모델을 만들려면 파이썬으로 자동화된 모델을 만들수 있습니다.
Blender를 MCP를 통해 AI와 대화를 하면서 다양한 장면을 만들수 있습니다.
• AI 기반 절차적 콘텐츠 생성
모델 컨텍스트 프로토콜(MCP)을 통해 Claude Sonnet과 Blender를 통합하여 AI 크리에이티브 에이전트를 생성할 수 있습니다. 이러한 에이전트는 기존 모델과 텍스처를 활용하여 대학의 색상이나 경쟁심과 같은 추상적인 아이디어를 기반으로 신발을 디자인하는 등 절차적 콘텐츠를 생성할 수 있습니다.
• 제작 물류 간소화 및 워크플로 최적화
이러한 AI 통합은 일상적이고 시간이 많이 소요되는 작업을 자동화하여 전문가에게 상당한 실질적인 이점을 제공합니다. 예를 들어 메타데이터를 기반으로 3D 모델 구성 요소의 이름을 즉시 변경하고 구성하거나, HDRI와 해당 조명 컬렉션을 동시에 조정하는 조명 스튜디오 도구를 만드는 등 워크플로를 개선하기 위한 맞춤형 Python 플러그인을 생성할 수 있습니다.
• AI 기능을 통한 기존 3D 워크플로 강화
핵심 가치는 AI가 처음부터 모델을 생성하는 것이 아니라, 기존 3D 지식과 워크플로를 보완하는 데 있습니다. 기존 자산과 AI가 프롬프트와 메타데이터를 기반으로 자산을 이해하고 조작하는 능력을 활용함으로써 사용자는 창의적 프로세스를 향상시키고, 반복 시간을 줄이고, 복잡한 물류적 과제를 효율적으로 해결할 수 있습니다.
by korealionkk@gmail.com
