본문 바로가기

PMX용 블렌더 튜토리얼

모델에 기본 Bone을 박아서 PMX로 내보내기 - 1

레퍼런스 - Pymeshio(변종) 다운로드 및 사용법 요약

튜토리얼 - 모델에 기본 Bone을 박아서 PMX로 내보내기 - 1

튜토리얼 - 모델에 기본 Bone을 박아서 PMX로 내보내기 - 2

튜토리얼 - 모델에 기본 Bone을 박아서 PMX로 내보내기 - 3

튜토리얼 - 모델에 기본 Bone을 박아서 PMX로 내보내기 - 4


pymeshio에서 내보내기에 적합한 인체 모델의 기본적인 준비물에 대해 간단히 안내하고자 작성했습니다.


※이것은 블렌더 초보자용 튜토리얼이 아닙니다.

블렌더에 대해 잘 모르시는 분들은 아래 과정을 중간중간 포함하는 PMX 모델만들기 프로젝트라는 개인적인 목표를 세우시고, 다른 여러 커뮤니티와 가이드를 통해서 필요한 것들을 느끼고 공부하면서 천천히 도전해보시길 바랍니다.


▼ 블렌더를 처음 접한 사람들이 볼만한 것들을 무명P님이 잘 정리해두셨습니다.

http://mmdguide.tistory.com/861



여기서는 모델에 본(bone)을 적용시키는 리깅(rigging)을 가장 간단한 방법으로 하고 그것을 PMX로 내보내는 과정을 진행해보겠습니다.

이 튜토리얼에서 재료 또는 텍스쳐를 설정하는 부분은 제외되어 있으니 이 부분은 자유롭게 하시면 됩니다.


1회차는 Armature를 만들고 기본적인 Bone을 배치하는 법을 적어둡니다.



▲ 블렌더 켜면 반겨주는 화면입니다.



▲ 대충 인체 모양에 맞게 모델을 만듭니다. 처음엔 T-pose로 만드는 것이 좌표를 길이로써 1:1대응시킬 수 있으므로 편합니다.

기본상태에서 PMX의 좌표와 블렌더의 global 좌표의 비율은 동일하므로, 다른 MMD 모델을 참고하면서 자리를 잡으면 됩니다.

PMX에서 Y좌표는 블렌더에서 Z좌표라는 것을 잊지마세요. 제 경우는 엉덩이 부분 좌표가 대략 z=10, 어깨 부분 좌표를 대략 z=16정도 잡았습니다. 이정도면 대충 다른 모델들하고 비슷비슷하더군요.


모델은 직접만들어도 좋고, MakeHuman같은 오픈소스 프로그램에서 생성한 뒤에 가져오는 것도 좋고, 다른 모델 리소스를 끌어다 사용해도 좋습니다.

저는 튜토리얼 용도로 기본 도형을 활용해서 무진장 단순하게 만들었습니다. 각자 원하는 모델을 원하는 디테일로 만들어보세요.

처음 리깅을 테스트하기 위한 모델은 물리 시뮬레이션이 불필요한 알몸까지면 충분합니다.

더 만들면 오히려 번거로워지므로 딱 알몸 또는 몸 위에 붙는 의상까지만 만들면 됩니다.



▲ (0,0,0) 위치에 Armature 개체를 하나 만듭니다.



▲ 그리고 armature의 bone의 이름을 표시하도록 설정하고, 모델에 가리지 않게 표시해주도록 하는 편이 편리합니다.

모션이 적용되는 bone의 이름의 경우 오타없이 정확하게 일치해야 하므로 대단히 엄청나게 매우 중요합니다.

강체를 편집할 때에도 bone의 이름을 사용하니까 매우 중요하므로 쉽게 확인할 수 있게 합니다.



▲ extrude(단축키 E)로 child bone을 생성하고, 이름을 결정해줍니다. 일단 센터 본을 만들었습니다. bone을 만들면 bone 패널에서 부모관계를 확인할 수 있고, properties 패널(단축키 N)에서 head와 tail의 위치를 정밀하게 확인하고 조정할 수 있습니다.



▲ 필수는 아니지만 종종 사용되는 그루브 본을 만들었습니다. 부모가 센터 본이며, head의 위치가 센터 본을 따라가지 않도록 Connected 체크박스를 해제했습니다.

bone의 head 또는 tail이나 블렌더의 여러가지 개체들은 3D커서를 그 위치로 스냅하거나 3D커서가 있는 자리로 개체를 스냅하는 기능을 가지고 있습니다.

스냅 메뉴를 호출하려면 3D View에서 Shift+S를 누르면 호출됩니다. 스냅 기능을 다양하게 이용하면 bone의 정렬 뿐만 아니라 캐드에 버금가는 수준으로 여러가지 정밀한 배치작업을 할 수 있습니다.

이 스냅샷에서는 그루브 본의 head를 적당하면서도 정확한(?) 위치에 배치하고 있는 장면입니다.



▲ 필수적인 본들을 다 배치했습니다. 왼쪽 또는 오른쪽 한쪽만 완성하면 됩니다. 나머지는 미러링을 하면 되니까요.

거의 필수인 본들의 영문 명칭은 다음과 같습니다.


lower body
upper body
upper body2
neck
head
eye_L
shoulder_L
arm_L
arm twist_L
elbow_L
wrist twist_L
wrist_L
thumb1_L
thumb2_L
fore1_L
fore2_L
fore3_L
middle1_L
middle2_L
middle3_L
third1_L
third2_L
third3_L
little1_L
little2_L
little3_L
leg_L
knee_L
ankle_L
leg IK_L


팔꼬임 본이 추가로 필요하다면 이용할 수 있습니다.


arm twist1_L
arm twist2_L
arm twist3_L
wrist twist1_L
wrist twist2_L
wrist twist3_L


▼ 위 본들의 필수적인 부모관계도는 다음과 같습니다.



▲ 본을 만들면서 꼬리(tail) 붙잡고 이리저리 흔들다보면 꼬임(Roll) 각도 값이 들어가면서 본들이 돌아갑니다. Python(파이썬)을 이용해서 깔끔하게 이 값들을 죄다 0으로 바꿔보도록 합시다.

마우스 커서를 올려놓고 조금 기다리면 설명 툴팁이 나오는데, 그 밑에 Python: ... 하면서 나오는게 해당 데이터에 접근하기 위한 힌트입니다.



▲ 파이썬 패널을 만들고 어떤 경로로 접근할 수 있는지 테스트합니다. bpy 클래스안에 data 클래스안에 armatures 튜플(tuple)에서 우리가 편집중인 아마추어 개체를 찾을 수 있어요.

지금은 아마추어 개체가 한 개뿐이므로 첫번째 개체일 것으로 생각해서 0번을 출력해봤습니다.

bpy.data 클래스는 많이 쓰이기 때문에 콘솔의 처음 안내문(Convenience Variables)에도 등장하네요.


개체를 변수에 할당해서 호출하기 쉽게 만들었고, (a값 선언) a.뒤에 작성될 수 있는 내용을 알아보기 위해서 Autocomplete를 눌러보는 장면입니다.



▲ 우리가 다루고 있는 아마추어 개체 안에서 edit_bones라는 튜플(tuple)을 추가로 찾았고, 이 튜플의 아이템들이 회전값을 가지고 있는지 추적해서 확인하는 장면입니다.



▲ Text editor 패널을 추가로 열고 매우 간단한 파이썬 스크립트를 작성해봅니다.

내용은 매우 단순합니다. 'Armature'안의 편집본들의 roll값을 깡그리 0.0으로 만들어라...

실행전에 오탈자와 버그가 없을것으로 확신이 되면 일단 blend파일을 저장 한 번 해주고 Run Script를 누르면 원하는 동작이 조용히 완료됩니다.


1회차는 여기까지 입니다. 수고하셨습니다.

튜토리얼 - 모델에 기본 Bone을 박아서 PMX로 내보내기 - 2