koodev

Blender Vertex ID 지정해서 선택하기

Computer

특정 Vertex ID(번호)에 해당하는 점이 모델에서 어디에 위치해 있는지 알아야 할 필요가 있어서 그런 툴을 만들어 봐야 하나 생각해 봤는데, Blender에서 파이썬 스크립트 사용하여 해결할 수 있었다. 이에 대한 내용을 정리해 보았다.

우선 정점 인덱스가 잘 선택되었는지 알아보기 위해 Blender를 디버그 모드로 띄웠다. https://koodev.tistory.com/39 참고. 그리고 대상 모델을 로드하자.

Blender의 좌상단 메뉴 막대 Help 옆에 보면 "Choose Screen layout." 콤보박스에 "Default" 가 선택되어 있다. 이것을 "Scripting" 으로 바꾸자.

그러면 위와 같이 3분할된 화면 구성으로 바뀔 것이다. 이 3분할에서 좌상단이 Text Editor 인데, "+ New" 버튼을 누른 다음 입력창에 아래 코드를 입력한다.

import bpy
import bmesh

def select(*args):
    obj = bpy.context.object
    me = obj.data
    bm = bmesh.from_edit_mesh(me)

    vertices= [e for e in bm.verts]
    oa = bpy.context.active_object

    for vert in vertices:
        if vert.index in args:
            vert.select = True
        else:
            vert.select = False

    bmesh.update_edit_mesh(me, True)

(참고로 이 코드는 하단의 "Console" 창에 입력하면 바로 사용할 수 있다. 그런데, 인터프리터에서 들여쓰기를 자동으로 해 주기 때문에 한 번에 붙여넣을 수 없고 한줄씩 붙여넣어야 한다.)

이제 텍스트 에디터의 코드를 하단의 콘솔로 가져와야 한다. 콘솔창에 아래 명령어를 차례로 입력한다.

import bpy
code = bpy.data.texts['Text'].as_string()
exec(code)

이제 준비가 완료되었다. 콘솔에서 select 함수를 실행하여 정점 번호를 지정해 주면 된다.

참고

Blender Wavefront(obj) 모델의 정점 인덱스 출력하기

카테고리 없음

3D 모델의 정점 인덱스를 알아야 할 경우가 종종 있다. 그런 툴을 만들어 볼까도 생각했었는데, Blender의 디버그 모드에서 그런 기능을 제공해주고 있었다.

우선 Blender를 디버그 모드로 실행해야 한다. 커맨드 라인에서 -d 옵션을 주어 실행하면 디버그 모드로 실행된다. 예를 들어 macOS에서 아래와 같이 실행하면 된다.

/Applications/Blender/blender.app/Contents/MacOS/blender -d

그리고 원하는 모델을 임포트 하는데, 임포트 옵션 중에 'Keep Vertex Order' 라는 항목이 있다. 이를 반드시 체크해 준다. 그렇지 않으면 Blender 내부에서 원본 인덱스를 수정하게 된다.

모델을 로드한 다음 그 모델을 마우스로 선택한 다음 'TAB'을 누르거나 해서 Edit Mode 상태로 바꾼다.

그리고 'N' 키를 누르면 오른쪽에 뭐라고 하는지 잘 모르겠지만 선택된 모델에 대한 여러가지 정보같은게 나오는 창이 뜬다. 이 창의 좀 아랫부분에 보면 Mesh Display 그룹에 Edge Info 라는 항목이 있다. 여기에 Indices 체크박스를 체크하면 정점 인덱스 정보가 화면에 표시된다.