blender/blender python

BPY 스크립트로 Blender에 기능 추가

monstro 2025. 6. 25. 12:36
728x90
반응형

- 개요

3D 애니메이션 제작 툴인 Blender는 오픈소스 프로그램으로서 파이썬을 사용하여 기능을 확장하는 것이 가능하다

이때 Blender에서만 사용가능한 규격이 존재하는데, 이를 Blender Python 줄여서 BPY라고 부른다

따라서 BPY를 사용하여 블렌더의 패널을 확장하고 기능을 추가한다

 

- 작성방법

 

Blender의 여러 편집기중에서 Text Edtior에 코드를 작성하여 기능을 추가할 수 있다

 

import bpy

class TestPanel(bpy.types.Panel):
    bl_label = "Test Panel"
    bl_idname = "PT_TestPanel"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"
    bl_category = "My First Addon"
    
    def draw(self, context):
        layout = self.layout
        
        row = layout.row()
        row.label(text = "Add an Object", icon = "CUBE")
        row = layout.row()
        row.operator("mesh.primitive_cube_add", icon = "CUBE")
        row = layout.row()
        row.operator("mesh.primitive_uv_sphere_add", icon = "MESH_UVSPHERE")
        row = layout.row()
        row.operator("object.text_add", icon = "FILE_TEXT")

 

BPY에서 기능의 확장은 클래스로서 이뤄진다

따라서 클래스 TestPanel을 추가하고 위와 같이 구성하였다

 

추가한 클래스는 패널에서 동작해야 하므로 부모 클래스로 bpy.types.Panel을 상속받도록 하였다

설정한 프로퍼티는 다음과 같이 사용된다

 

그 외의 프로퍼티의 사용은 다음과 같다

  • bl_idname : 추가한 클래스(기능)의 고유한 id
  • bl_space_type : 해당 클래스(기능)을 사용할 수 있는 뷰포트 타입
  • bl_region_type : 해당 클래스(기능)를 사용하기 위한 위치

 

함수의 경우 다음과 같이 구현하였다

우선, BPY 스크립트를 작성하기 위해서는 반드시 bpy 모듈을 추가해야 한다

이후 작성한 Draw 함수에서 눈여겨볼 요소는 다음의 2개의 코드이다

row = layout.row()
row.operator("mesh.primitive_cube_add", icon = "CUBE")

 

우선, 첫번째 코드의 경우 팝업되는 패널에서 한줄을 추가하는 역할을 한다

따라서 시각적으로 세로로 정렬된 패널을 만들 수 있다

 

두번째 코드의 경우 다음 줄로 밀려진 기능을 정의하는 역할을 한다

operator 연산자수행할 기능기능의 아이콘등인자로 넣어주어 작성한다

 

팁 - 수행할 기능 탐색과 아이콘

1) 수행할 기능의 탐색

 

Info 패널에서 수행할 기능을 찾을 수 있다

 

 

3D Viewport에서 작업을 실행하고 Info 패널에서 팝업되는 메세지에서 해당 기능의 코드를 찾아서 복사하면 된다

 

2) 아이콘

 

 

아이콘을 찾는 방법Icon Viewer 애드온을 켜주면 된다

 

 

Text Editor에서 ctrl + T를 눌러 Icon Viewer를 열고 아이콘을 찾아 좌클릭하면 해당 아이콘의 이름을 복사한다

 

def register():
    bpy.utils.register_class(TestPanel)
    
def unregister():
    bpy.utils.unregister_class(TestPanel)
    
if __name__ == "__main__":
    register()

 

위와 같이 클래스로 추가한 기능을 사용하기 위해서는 반드시 register 함수unregister 함수가 필요하다

두 함수는 스크립트로 작성한 기능실제 Blender 에디터에 등록 / 등록해제하는 역할을 수행한다

마지막으로 작성한 스크립트 파일을 직접 실행한다

 

- 최종 실행 결과

 

 

728x90
반응형

'blender > blender python' 카테고리의 다른 글

텍스트 Add-On  (0) 2025.07.09
대화 상자  (0) 2025.07.09
BPY를 이용한 키프레임 모디파이어 추가  (0) 2025.07.02
다이아몬드 쉐이더 Add-On  (0) 2025.07.02
BPY 스크립트를 Add-On으로 완성  (0) 2025.06.25