blender python 24

머티리얼 생성과 할당

- 개요BPY를 사용하여 오브젝트에 머티리얼을 할당하고 또 패널 UI를 통해 할당한 머티리얼을 설정한다머티리얼의 적용 과정은 다음과 같다머티리얼 생성 및 설정머티리얼의 노드 설정머티리얼의 노드 연결 1) 메인 패널 클래스import bpyclass ms_PT_main_panel(bpy.types.Panel): bl_label = "Add Shader Panel" bl_idname = "ms_PT_main_panel" bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_category = "New Tab" def draw(self, context): layout = self.layout layout.op..

클래스 네이밍 컨벤션

- 개요블렌더 파이썬에서 클래스를 작성하는 경우 가급적 지켜야 하는 네이밍 컨벤션에 대해 알아본다 1) Operator 클래스class TEXTTOOL_OT_add_cube(bpy.types.Operator): bl_label = "Hello World Operator" bl_idname = "tt.add_cube" def execute(self, context): return {'FINISHED'} Operator 클래스의 이름은 네이밍 컨벤션을 따라 "AddOn이름_OT_동작"의 형태로 작성하는 것이 좋다또한 Opeator 클래스의 bl_idname 어트리뷰트의 경우 "AddOn의약자_동작"으로 정의해야 한다 2) Menu 클래스class TEXTTOOL_MT_m..

드롭다운 메뉴

- 개요드롭다운 메뉴를 추가하여 사용할 수 있는 옵션을 나타나는 여러개의 행에서 하나를 선택할 수 있도록 하고선택한 옵션에 따라 각각 다른 동작을 수행할 수 있도록 구현한다 1) 메인 패널 클래스import bpyclass ADDONNAME_PT_TemplatePanel(bpy.types.Panel): bl_label = "Name of the Panel" bl_idname = "ADDONNAME_PT_TemplatePanel" bl_space_type = "VIEW_3D" bl_region_type = 'UI' bl_category = "Template Tab" def draw(self, context): layout = self.layout ..

BPY 코드 작성 시 유용하게 사용할 수 있는 팁

1) Python Console 에디터 블렌더의 에디터 중에서 Python Console 에디터는 스크립트 작성 시에 사용할 수 있는 유용한 기능을 제공한다 1 - 1) 모듈에 존재하는 어트리뷰트 확인 실제 Add-On을 이식하기 이전에 디버깅하는 용도 외에도 Console - AutoComplete 기능을 사용하여특정한 BPY 모듈에 어떤 어트리뷰트가 존재하는지 확인할 수 있다 위의 이미지는 bpy.types.NodeSocket 모듈에 AutoComplete 기능을 사용한 결과이다 1 - 2) 뷰포트에 존재하는 오브젝트 확인 bpy.data.objects 어트리뷰트를 사용하여 뷰포트에 존재하는 오브젝트를 확인할 수 있다위의 코드는 list 함수를 사용하여 출력 결과를 list로 출력하였다 1 - 3)..

register 함수 / unregister 함수 개선

- 개요Add-On 클래스를 등록 / 등록해제하는 register 함수와 unregister 함수를 개선하는 방법을 알아본다 1) 배열의 사용...classes = [TestPanel, PanelA, PanelB, WM_OT_myOp]def register(): for cls in classes: bpy.utils.register_class(cls) def unregister(): for cls in classes: bpy.utils.unregister_class(cls) if __name__ == "__main__": register() Add-On을 구성하는 클래스들을 하나의 배열에 저장하고 저장한 배열을 순회하면서 등록 / 등록해제할 수 있다 실..

단축키

- 개요대화상자를 통해 오브젝트를 추가하는 Add-On에 단축키를 추가하여 대화상자를 띄우도록 설계한다단축키는 register 함수에서 등록하고, unregister 함수에서 등록해제한다 - 메인 Add-On 클래스import bpyimport random class WM_OT_dialogop(bpy.types.Operator): bl_label = "Add Cube Menu" bl_idname = "wm.dialogop" name : bpy.props.StringProperty(name= "Name", default= "") scale : bpy.props.FloatVectorProperty(name= "Scale: X,Y,Z", default= (1,1,1)) cou..

커스텀 레이아웃

- 개요이번에는 이전에 만든 텍스트 Add-On으로 생성하는 대화상자의 레이아웃을정해진 모양이 아닌 설계자가 원하는 모양으로 디자인하는 방법을 알아본다레이아웃의 디자인은 레이아웃을 포함하는 클래스의 draw 함수를 오버라이드함으로써 수정할 수 있다 - 코드 수정...class WM_OT_TextOp(bpy.types.Operator): ... def draw(self, context): # layout setting layout = self.layout layout.label(text="Sample Text") layout.prop(self, "text") layout.prop(self, "scale") ..

커스텀 노드 그룹

- 개요컴포지터는 렌더링이 끝난 이미지나 동영상에 추가적인 보정과 편집을 수행하는 공간이다이와 같은 컴포지터를 구성하는 커스텀 노드 그룹을 생성할 수 있는 Add-On을 만들어본다 1) 메인 패널 클래스import bpyclass NODE_PT_MAINPANEL(bpy.types.Panel): bl_label = "Custom Node Group" bl_idname = "NODE_PT_MAINPANEL" bl_space_type = "NODE_EDITOR" bl_region_type = "UI" bl_category = "New Tab" def draw(self, context): layout = self.layout row ..

텍스트 Add-On

- 개요원하는 텍스트를 생성하는 Add-On을 만들어본다기능은 다음과 같이 구성하였다입력한 텍스트를 생성텍스트의 Scale 조정텍스트의 첫번째 단어가 아닌 텍스트의 중심을 생성 기준으로 결정할지 선택텍스트를 Extrude할지 선택하고 설정한 비율만큼 Extrude 텍스트를 생성하고 설정하는 과정은 다음과 같다텍스트를 입력하는 동작은 Edit Mode에서만 수행이 가능한데, 따라서 다음과 같이 진행한다텍스트 생성Edit Mode를 열고 텍스트 입력Edit Mode를 닫고 이후 텍스트 설정 1) Add-On으로 확장하기 위한 bl_info 정의bl_info = { "name": "Text Tool", "author": "Monstro", "version": (1, 0), "blender..

대화 상자

- 개요이전에 만든 오브젝트 추가 Add-On에 대화상자를 추가하여 오브젝트의 이름을 설정하는 기능을 추가한다대략적인 구성은 다음과 같다execute 함수를 통한 오브젝트의 이름과 스케일 설정invoke 함수를 통한 대화 상자의 팝업 - 대화 상자 클래스 구성...class WM_OT_myOp(bpy.types.Operator): bl_label = "Add Cube Dialog Box" bl_idname = "wm.myop" # Use ":" in Blender 3.4+ versions # This property can change Cube`s name text : bpy.props.StringProperty(name="Enter Text", default="") ..