'스키닝 트랜스퍼'에 해당되는 글 1건

  1. 2011.05.09 Skin Weight Map 사용하기
posted by cimple 2011. 5. 9. 16:47

특정 캐릭터의 잘 된 스키닝을 다른 캐릭터로 옮겨줄 수 있을까?

이 질문에 대한 한 가지 방법으로, Skin Weight Map 을 사용하는 방법을 소개한다. 이 방법은 Maya 에 있는 Skin>Edit Smooth Skin 안에 있는 Export Skin Weight Maps... 와 Import Skin Weight Maps... 를 사용하는 방법으로, 다음과 같은 케이스일 때 사용할 수 있다.


1. 두 캐릭터의 Joint Hierarchy 구조가 동일하다.

2. 두 캐릭터 메쉬의 UV 맵이 동일하다.


즉, 두 캐릭터의 리깅이 똑같고, 메쉬 구조도 똑같으며, 두 캐릭터의 UV 맵도 동일한 경우. 즉 단지 메쉬를 deform 시켜서 만든 새로운 캐릭터인 경우라면 이 방식을 사용한 Skinning Transfer 가 최적의 성능을 보인다고 할 수 있다.

그렇게 보면 비교적 심한 제약조건이라고 볼 수 있지만, 대신 그만큼 스키닝은 잘 옮겨진다;

리깅이 완료된 여자 캐릭터의 스키닝을 남자 캐릭터로 옮겨 줄 것이다.



1. Export Skin Weight Maps

Step 1)
먼저 여자 캐릭터의 잘 된 스키닝에서 Skin Weight Map 을 뽑아준다. Export Skin Weight Maps... 메뉴를 사용하는데, 옵션 박스를 눌러 옵션을 조절할 수 있다.

여성 캐릭터 mesh 를 선택한 다음 Export Skin Weight Maps...




Alpha 와 Luminance 가 이곳에서 어떻게 적용되는지는 추후에 더 구체적으로...

맵 사이즈를 조절할 수 있는데, 맵 사이즈를 크게 뽑으면 해상도가 높은 만큼 스키닝을 그대로 정확하게 옮겨줄 수 있고 대신 맵 파일의 용량이 커진다. 맵 사이즈가 작아지면 스키닝이 옮겨졌을 때 따라오지 말아야 할 버텍스가 따라오는 등 에러가 발생하기도 한다. 경험상 대략 1024x1024 정도면 무리가 없을 듯 하다.


Step 2)
그럼 Write Map 이라는 창이 뜨는데, 현재 프로젝트 폴더의 sourceimages 폴더 안에 weight map 을 생성하게 된다. 적절한 이름을 넣고 save 를 누르면 저절로 맵을 생성한다.



생성한 다음 폴더 안에 들어가 보면 다음과 같이 Weight Map 파일이 생성되었음을 볼 수 있다.



Weight Map 의 예


그리고 아까 지정한 이름에 .weightMap 이라는 확장자를 가진 파일도 생성된 것을 확인할 수 있는데, 어떤 내용을 가지고 있는지 메모장 등에서 확인해 볼 수 있다.

생성된 .weightMap 파일 (test.weightMap)

.weightMap 의 내용

위 그림과 같이


mesh 이름          조인트 이름        해당 조인트의 weightMap 이미지파일


형태로 이루어져 있음을 볼 수 있다. 이렇게 weightMap 을 export 하는 과정은 종료되었다.



2. Import Skin Weight Maps

Step 1)
Import 하는 방법도 어렵지는 않다. 일단, smoothbind 만 되어 있는 타겟 캐릭터의 메쉬를 선택하고 -> Skin>Edit Skin>Import Skin Weight Maps... 에서 Import 하면 된다.

target 이 되는 캐릭터. 물론 리깅&SmoothBind 까지 되어있어야 한다.



Import Map 창이 뜨면 일단 아무것도 보이지 않는데, 맨 아래 Files of type: 탭을 All Files 로 바꾸어준 다음, 아까 생성했던 .weightMap 파일을 선택해주면 된다.

아까 생성했던 test.weightMap 을 import 하면 된다.

그럼 잠시 현란한 스키닝 기술을 보여주며 마야가 캐릭터를 스키닝하는 것을 볼 수 있다. 이 때 스키닝하는 방식은, 마야 스스로 Paint Skin Weights Tool 을 실행시켜서 자동으로 스키닝을 한다.

이후, 스키닝이 잘 옮겨진 것을 볼 수 있다.


3. 참고사항들

이 방식을 사용하는 데 있어서 몇 가지 참고사항이 있어서 적어본다.

1) 마야 스크립트(MEL, Python script) 로 해당 프로세스를 수행하고 싶을 경우, 타겟이 되는 캐릭터를 'bindSkin' 스크립트를 이용해서 bind 하면 이 skinWeight 명령어를 사용할 수가 없다. 'SmoothBindSkin' 이라는 스크립트를 사용해서 초기 smoothBind 를 해야 한다.

2) 남자 캐릭터의 리깅을 처음부터 다시 하는 것은 낭비가 심하다. 여자 캐릭터의 리깅을 남자 캐릭터에 옮겨줄 때, joint 와 컨트롤러 위치 정도만 바꾸어 주는 것으로 리깅을 그대로 사용할 수 있다. 이 때 조인트나 컨트롤러 상위에 NULL 노드들을 삽입해서 해당 NULL 노드들을 움직여 주는 것으로 리깅을 간편하게 옮겨줄 수 있다.



ThEnd.