2018년 10월 3일 수요일

[2012. 9. 15] Maya가 제공하는 쉬운 이족캐릭터 Rigging, Maya의 HumanIK 에 대해 알아봅니다...

2018년 현재 HumanIK는 조금씩 더 발전되어 왔습니다. 아주 최근에는 그다지 바뀌거나 향상되고 있는 것 같지는 않지만, 이 글을 작성했을 당시에 비해서 향상된 부분이 있습니다. ^^

요즘 게임개발과 관련해서 Motion Builder 와 filmBox포맷(FBX) 에 대해 알아보다보니, 이들 Skeleton 구조, Rig effector 등을 비롯해서 애니메이션클립 까지 이들 다른 툴들 사이의 호환 등을 고려하다보니 저절로 Maya안에 포함되어 있는 HumanIK를 살펴보게 되었습니다... 

물론 이 HumanIK(기존엔 Full body IK로 FBIK라고 했었습니다만 지금은 HumanIK라고 부릅니다) 를 사용하지 않고, 기존의 Joint와 Rigging을 하고서 Naming을 한다거나 해서 FBX파일로 export하여 Unity3D , UDK 등등 사용할 수도 있겠습니다만...

기본적으로는 Motion Builder(FBX포맷 자체가 이 툴과의 호환을 위한 것이니 만큼)를 쓰던 안쓰던 이 툴에 맞춘 포맷이라면, FBX를 받아들이는 다른 모든 툴에서 최대한의 호환성을 기대하지 않을까 하는 생각으로 그렇다면, HumanIK를 기본적으로 사용하는 것이 좋을 것이라는 결론까지 도달해서, 그간 슬쩍슬쩍 보기는 했지만, 그저 기존에 작업하던 버릇으로 Joint 구성하고, Rigging 하고 Skinning 하는 흐름으로 항상 작업하던 것에서 벗어나 잠깐이나마 주의깊게 HumanIK를 건드려봤습니다...
그런데 이거 되게 편리하네요 왠지 새로 익히기가 까다로울 줄로 생각하고 나중에 나중에 하면서 미뤄왔는데... 익히기도 정말 간단합니다...

우선 제가 그다지 깊이있게 공부한 단계는 절대 아니라는 점을 염두해 주시구요...
셋팅좀 필요에 맞춰서 바꿔주고, 클릭만 해주면, 두다리 두팔의 사람형식의 캐릭터나 4발 캐릭터의 Joint 구성은 그냥 만들어 줄수 있구요... (기본적으로는 Human 형식의 2족보행 캐릭터입니다... 손을 발로 생각하고 4족보행 캐릭터로 만들어 쓰면 되긴 합니다만...)
Skinning 은 기존에 하듯이 만들어진 Joint에 입혀주고,
다시 Rigging 관련해서 또 클릭 한 번으로 IK-FK를 가진 Rig가 그냥 완성되니깐 정말 편하네요...
애니메이팅 할 때도 내가 만든것보다도 편하게 Pin 시키는 기능도 있고, 기본적으로는 팔을 들어올리면 자동으로 어느정도 어깨가 따라 올라가지는 기능도 탑재되어 있구요...
스트레치&스쿼쉬 Rig까지 들어 있지는 않은 것 같습니다만...

캐릭터마다 해줘야할 이 귀찮은 작업들이 설정-클릭 한 번으로 해결되니 정말 좋습니다... ^^

(1) 우선 Joint 구성하는 것 부터 볼까요?

마야 2013은 마야 2012의 HumanIK와는 시작이 약간 다르게 통합되어 있네요 ^^
실행 후에 안에서의 내용은 거의 같습니다만...


실행하면 마야 오른쪽 부분처럼 Create / Define / Import 가 보이는데요...
사실 Import example은 여기서는 필요없고, 시작할 때, Define으로 Joint나 Rig를 먼저 정의해주고서 Create해야 될 것 같지만, 실제 Define은 joint 들을 이후에 캐릭터로서 정의하는 것을 말하는 것으로 일단 Create를 해주면 되겠습니다...
이 후에 각 부분 joint의 수라거나 형태를 정의할 수 있으니 문제가 없습니다...


마야 화면의 오른쪽에 제가 빨간색으로 표시한 부분 중 2번째 열쇠 그림이 언락되어 보이죠?
이런 언락 상태여야 아래의 수치들을 설정하는 것이 가능합니다...

이제 설정에 관해서 말씀을 드리자면, 뭐 장황한 설명이 필요없지 않습니까? 보시면 바로 아실 듯 싶습니다... 물론 여러가지 Skeleton drawing에 대한 경험이 있으면 더욱 쉽게 아실 수 있습니다만...
약간 얘기를 해보자면, 초기 Skeleton+Rig의 방식은 아주 간단했는데요... 예를 들면, 지금은 기본적으로 어깨부분을 따로 컨트롤 할 수 있게 Joint와 Rig를 만들지만, 초기 CG 캐릭터의 경우는 이것도 없곤(사실 필요한지를 몰랐다고 할까요?)했습니다...
어깨라는게 무슨 뜻인고 하니, 어깨부분만 으쓱할 수 있게 joint가 있고 컨트롤러도 있어서 지금은 대부분의 캐릭터가 으쓱하는 것을 가능하도록 구성하죠... 근데 전에는 그냥 몸통에서 팔로 바로 뻗어나오고 말았다는 것이죠... 아! 물론 skeleton 자체는 몸형태에 맞추다보니 어깨 joint가 있기는 했으나 Rigging 할 때, 컨트롤러도 붙이지 않았다는 것이죠... 필요가 있는지 자체를 몰랐으니까요^^ 물론 아주 옛날 얘깁니다...
 이 이야기를 장황하게 한 이유가 있습니다... 이렇듯 사람의 몸이라는게 그렇게 간단하지는 않아서 초기엔 잘 몰랐다고 할까, 또는 별 생각없이 기본적인 것만 생각하고, skeleton - Rigging을 했었다는 것입니다... 이 후 하나씩 발전해 왔는데,
 또 하나 예를 들면, 어깨를 한 번 생각해보죠...
 팔을 앞으로 내밀거나 위로 들어올리는 등의 동작은 그 해당 팔 joint를 움직여서 실제 사람의 움직임처럼 만들 수 있습니다만, 팔을 비트는(twist) 동작을 생각해 보세요... 예전에는 당연히 그 팔과 어깨끝에 붙은 joint (팔을 앞으로 하거나 위로 올리거나 할 때 쓰는 것과 같은 그 joint)를 비틀어서 만들었습니다...
그런데 캐릭터가 좀 이상한 거에요... 물론 카툰형식의 심플한 캐릭터나 옷을 입고 있어 가려지면 괞찮아 보이지만, 좀 리얼한 형태의 캐릭터는 팔을 비틀면 이상하게 모델이 변형되어 보이는 것이죠...
이후에 실제 사람은 뻐에 피부가 그냥 붙어 있어서 움직여지는 것이 아니라 근육이 있고, 그 위를 피부가 덮여 있어서 모양의 변형이 CG캐릭터와 많이 다르다는 것을 알고 고려하게 되었죠...
 실제 사람은 근육이 있어서 피부에서 볼때, 팔을 비틀면 어깨부분에서 바로 비틀어 꺽이는 것이 아니라 어깨에서 팔꿈치에 걸쳐 비틀어지는 듯한 느낌이어야 한다는 것을 고려하게 되었죠...
 이건 사실은 어깨를 비트는 것보다도 팔목을 비틀 때 더욱 잘 나타납니다...
 실제 자기의 팔목을 비틀어보면 손목 부분이 바로 비틀어지는 것이 아니고 팔꿈치에서 손목부분까지 비틀어진다는 것을 알 수 있습니다...
 결국 위쪽 팔과 아래쪽 팔뚝에 joint를 하나씩 더 두고 비트는 동작은 이걸로 컨트롤 해야 한다는 것인데, FK만 쓴다는 가정하에는 문제가 없습니다... 하지만, IK를 어깨에서 손목까지 줘서 팔을 움직이는 것을 생각해 보세요...
그 사이에 joint가 4개나 있으니 구부렸을 때, 당연히 이상하게 되겠죠...
 이것을 해결하는 Rigging기술도 정말 참신한 기술 일 때가 있었는데 ^^ ㅋㅋㅋ 전 이것을 빙고라고 Chris Landreth 님이 Maya초기에 제작할 때, 쓰신 것을 보고 알았습니다... Bingo the clown! 이라고 너무나 유명했던 작품이었고, Chris님은 아카데미 상도 받았었는데 ^^
 그러고 보니 요즘 Facebook에서 활동이 잘 안보이시네요... 다른 유명 아티스트들이 활발하게 활동하는데 비해서는... 작년까지는 활발하셨었는데...
 어쨌거나 그에 대해서 다시 말씀을 드리자면, 해결방법은 IK용 joint와 FK용 joint를 따로 겹쳐 그려서 필요에 따라 FK/IK를 전환해 가면서 애니메이팅 작업을 할 수 있도록, Rig를 구성하는 것이었습니다.
 장황하게 얘기했는데요...
 설정중에서 첫 부분은 보면 또 살짝 수치 바꿔보면 쉽게 어떤건지 알 수 있는 거고, Roll-Bones 라는 부분중에서 위에서 말한 것과 같은 부분을 잘 모르시는 분이 계실 수도 있을 것 같아 얘기했습니다.. 요즘 Rigging에선 많이 볼 수 있는 것이지만요...
 사실 다리쪽은 그닥 필요하다고 느낀적은 없는데, HumanIK에선 다리쪽도 가능하도록 만들어져 있습니다.
 나머지 세팅들 중에서도 위의 경우와 같이 이런저런 이유로 사용되는 joint-Rig 가 가능하도록 유연하게 세팅을 해 줄 수가 있습니다... ^^ 좋네요...
 다른건 그렇고, 마지막의 Hips Translation 의 체크같은 경우는 체크하면, joint가 같은 자리에 하나더 추가되서, 엉덩이의 이동/회전 등이 다리, 허리의 움직임과 연관해서 좀 더 편리하게 해주죠...

<Youtube에서 가져온 것인데 Maya2013버전이 아니고 이전 버전이라 메뉴는 약간 다르죠>

Skeleton 구성부터 Control Rig를 붙이고 Skinning(간단히) 해서 살짝 움직여 보는 것까지 나와 있는데요... 사실 자세한 설명은 없고 Overview정도네요...

Pin 하는 것 IK/FK 블렌딩이라거나 Fullbody / Body Part의 컨트롤이 다른점, 그리고 키생성도 그렇고...
여러가지 중요사항은 없지만, Joint를 생성후에 캐릭터에 어떻게 맞추는지는 살짝 보여줍니다만...

Skinning 전에 joint를 캐릭터에 맞추어줄 때, 한가지 팁을 말씀드리면, Mirror기능이 있다는 것입니다... 캐릭터의 왼쪽(유저입장에서 오른쪽) joint를 먼저 맞추어 주고,
(Maya2012) - Edit > Mirror Left -> Right
(Maya2013) - Edit > Skeleton > Mirror Left -> Right
하면, 캐릭터의 오른쪽 skeleton들이 왼쪽에 Mirror되는 형식으로 맞추어집니다.


(2) 다음은 Definition을 대략이나마 알아보겠습니다... 사실 저도 그닥 다뤄보질 않았습니다...
의미에 대해 우선 간략히 말씀드리면, HumanIK란 것이 일종의 형식Form 이라고 볼 수 있는데, 사람형식의 캐릭터에 대해서 사전 정의된 Skeleton과 Control Rig를 제공해서 Motion Builder 같은 범용 S/W 나 그런 포맷으로 호환성을 높이고, 모션캡쳐 데이터 같은 것을 적용할 때, 쉽게 범용적인 캐릭터로서 적용하려고 형식Form을 가지도록 하는 것이죠...

따라서 유저가 직접 만든 Skeleton의 경우 아래와 같은 HumanIK의 형식에 각Part에 해당 skeleton을 연결해 정의해 주므로써 HumanIK형식에 유저의 사용자 Skeleton이 맞추어 지게 되는 것입니다...
물론 (1)번의 과정으로 HumanIK자체를 통해 만들어진 skeleton은 자동적으로 HumanIK의 형식에 정의되어져 있습니다...
그러기에 제가 그닥 다루어보질 않았다고 말씀드린 겁니다...
제가 원하는 Skeleton 형식이 (1)번 과정의 HumanIK skeleton 을 세팅해서 만들수 없는 경우라면, 어쩔 수 없이 제가 직접 Skeleton을 구성하고서, Definition으로 정의를 해 주어야 하겠지만 한마디로 그럴일이 거의 없었기 때문입니다...
이족 캐릭터라는게 거의 거기서 거기라서요 ^^

그래도 필요에 의해 만든 skeleton과 HumanIK의 형식에 맞출 때, 수정이 좀 필요하면, 여기서 다시 연결해 정의해 줄 수 있습니다...
위 그림을 더블클릭하고 해당 그부분에 다시 할당하고 싶은 joint를 클릭하시면 되구요...
joint를 먼저 선택한 상태에서 위 HumanIK의 원하는 part위에서 오른쪽 마우스를 클릭하면 나오는 리스트에서 assign selected bone 같은 것을 실행해서 할 수 있는 것이죠...
Mirror 기능 같은 것은 자동으로 하게 할 수 있습니다...(mirror matching이 켜져 있는 것이 Default임)

이렇게 joint를 사람형식캐릭터의 각 부분에 잘 인식되도록 정의해 주면, 모션캡쳐 데이터 등과 연결시에도 도움이되겠죠...

그리고 HumanIK는 이 skeleton이 적합한 상태인지 아니면 더 정확히 정의해서 validate 즉, 적합한 상태가 되어야하는 현재 부적합한 상태인지도 알려줍니다.

Key frame 애니메이션을 행하게 될 때, 이제부터 알아볼 Control Rig가 중요합니다...
Key frame animation에서 작업을 편하게 하기위해 Rigging을 하는 것이니까요...

(3) 다음처럼 간단한 클릭으로 컨트롤러를 붙여줄 수 있습니다... (당연히 Validate 상태여야 겠죠)


그러면 아래 이미지처럼 Controller가 붙은 Rig가 자동생성되는데 이 컨트롤러가 왠만한 Key frame 애니 하기엔 충분하고 편리할만큼 잘 만들어져 있습니다... 오른쪽에 캐릭터의 그림과 함께 직관적으로 선택과 옵션바꿔주기도 편하게 볼 수 있고 조작할 수 있고요...


크게 설명이 필요없죠... 뷰포트에서 컨트롤러 선택해서 움직여 보시면 알 수 있구요...


Show/Hide IK 또는 Show/Hide FK 는 말 그대로라 굳이 설명드릴 필요없이 버튼 눌러보시면 아실거구요...
그래도 설명이 필요한게, Fullbody, Body part, Pin Translate, Pin Rotation 등등입니다.
Full body - Full body 상태에서 컨트롤러를 움직여 보면, 예를 들어 오른쪽 손목 컨트롤러를 잡고, 오른쪽으로 움직여보면, 팔을 잡아늘리는 듯한 상태인것인데, 팔이 최대한 뻗치고, 움직임이 없는 것이 일반적일 것입니다... Fullbody가 적용되어 있으면, 이러한 Control이 몸 전체에 미치기 때문에 캐릭터의 몸이 영향을 받아 딸려 옵니다... (Pin으로 고정되어 있지 않은 부분이라면...)

Body Part - Full body와 반대로 IK 핸들이 적용되어 있는 부분적으로 control이 됩니다...

Pin translation - 이것을 적용한 controller 는 핀으로 찍어놓은 것처럼 해당 Controller의 이동이 고정되어집니다.
Pin Rotation - 위와 마찬가지지만, 회전이 고정되는 것이구요...

Release all pinning - 말 그대로입니다... pin 적용했던거 다 해제시킵니다...

Stance pose - Skinning 했을 때, Go to bind pose 처럼 Control Rig 첨 만들었을 때의 똑바로 서서 팔벌린 자세로 돌립니다...

컨트롤러 가지고 이리저리 놀아보시면, 다 이해하실 것이고, 제가 잠시 이해하지 못해서 헤매이던 부분을 저같은 분들이 틀림없이 계실 것 같아 말씀드리면, spine 즉 척추부분의 컨트롤러는 뷰포트에서 보시면 없죠?
보통 3개정도를 수직으로 나란히 컨트롤러를 두어서 유연하게 척추부분을 움직이게 컨트롤 하는데 그게 없단 말이죠...
그래서 척추부분은 custom controller를 붙여야 하나 왜 그렇게 만들어 놨을까 잠시 고민했었습니다 ^^
컨트롤러는 없는데, 컨트롤러를 붙일 필요도 없어서 그랬던거 같습니다...
오른쪽의 Character Controls 창에서 보시면 아래 이미지 처럼 척추를 선택할 수 있습니다.


그러고 Rotation tool을 쓰시면 위 그림의 뷰포트처럼 나오로 회전을 시키면 그 방향으로 전체 척추에 걸쳐 부드럽게 구부려집니다...
그런데 척추의 특성상 S자 형식도 가능해야 하는데 이런 컨트롤은 어떻게 하는가 하면 다들 이미 예상하셨겠지만, 척추의 바로 위쪽의 컨트롤러가 있죠? 그것을 척추를 구부린 반대방향으로 회전시키면 됩니다...
제가 spine count를 단지  3개만 주고 skeleton을 구성하는 바람에 좀 뻣뻣합니다만, 대략 S자로 꺽인것을 아래 이미지에서 느낄 수는 있을 겁니다.


다음의 관건은 까치발들기 입니다...


위 이미지는 발부분인데요...
걷기, 뛰기같은 많은 동작들을 만들다보면, 발뒤꿈치만 들고, 발앞부분이 바닥에 붙어있는 포즈가 많이 나오는데 이것을 쉽게 수행하기위해서 뒤꿈치를 들어올리는 Controller를 많이 만들어 쓰죠?
이를 위해서 순방향 IK와 역방향 IK가 서로를 구속하는 형식의 Rig를 만들잖아요? effector를 역방향 joint의 child로 만들고 하는 등의 Rig요...
많이 쓰는거니깐 아실거라고 보고 넘아가구요... 몰라도 그냥 HumanIK에서 어떻게 하는가를 배우는게 중요한 거니까요...

HumanIK에선 약간은 불편할 수도 있지만, 위 이미지에서 선택되어 보이는 발끝 컨트롤러를 pin시켜서 합니다... 이동,회전 모두 pin으로 고정해 놓고서, 발목컨트롤러를 위로 살짝 이동시켜보세요...
발끝은 고정되어 있고, 발목만 올라가므로서 까치발동작이 쉽게 구현됩니다...


위에서 보시면 오른쪽 Character controls 패널에 핀이 꽂힌 이미지로 보이고, 뷰포트에도 해당 controller에 작게 나마 TR(Translation/Rotation) 마크가 있습니다...
사실 제가 joint구성할 때, 발가락을 만들지 않아서 좀 이상해 보이지만, skinning 할 때, 발 끝자락의 joint에다가 모든 발가락 부분을 skinning의 weight를 주면 까치발이 되겠죠...

이상 대략 알아봤습니다...
HumanIK로 인해서 Joint drawing, skeleton 구성, Rigging까지 정말 쉽고 빠르게 할 수 있어서 대단히 작업능률이 향상될거 같습니다...
Custom controller 등을 붙여서 더욱 커스터마이징 할 수도 있겠구요...

HumanIK 해볼 수록 왜 이제야 써봤나 싶네요^^;
제가 만들어 쓰던거 보다 더 좋아서...

댓글 없음:

댓글 쓰기