본문 바로가기
Maya

개 리깅연습5 : tongue rigging (feat. 노드에디터)

by 흘림보 2020. 11. 18.

혀리깅은 두가지 영상을 봤다.

하나는 사람 혀를 리깅하는 영상인데, Spring ik handle하나와 두개의 cluster로 컨트롤러와 연결하며, node eidtor를 이용해서 잡아 당겼을때 늘어나도록 스트래치를 표현한다.
컨트롤러를 옮겼을때 전체적으로 모든 조인트가 늘어나는식의 스트래치이다.

컨트롤러를 혀 끝에 1개 사용한다.

 

youtu.be/iTV5QNjAWv8

 

다른 하나는 그냥 혀만 놓고 리깅하는 영상인데 아마 동물들의 혀리깅에 더 적합한 스트래치 방법이지않을까 싶다.

여기서는 Spring ik handle 하나와 두개의 조인트로 컨트롤러와 연결하며 이후 조금더 복잡한 방법으로 node eidtor를 이용해서 스트래치를 표현한다.

두번째 영상은 위 영상과 스트래치 방식이 다르다.

목안쪽에 숨겨진 혀뿌리부분만 스트래치되고 (텍스쳐 늘어날일 없음), 다른 혀부분은 스케일이 늘어나지 않고 로테이션이 된다.

 

youtu.be/7Glk9ozOoWY

(4분쯤부터 시작)

 

혀조인트 말고 두개의 조인트를 클러스터 대용으로? 사용하는듯 하는데 처음해보는 리깅방식이라서 신기했다.

컨트롤러는 총 3개를 사용하는데 하나는 스트레치용 컨트롤러, 남은 두개는 로테이트 관련 컨트롤러이다.

단점이 있다면 혀에 쓰인 조인트가 딱 4개인 경우에만 적용하기 좋은 튜토리얼이다.

나는 임의대로 더 늘려서 써봤는데 로테이션 컨트롤할때 좀 곤란했다.

그래도 개의 경우 혀를 헥헥 거리는 애니메이션이 필수적이기때문에 두번째 영상을 조인트 4개로 다시 시도해보기로 결정!

 

 

내가 모델링한 개의 혀만 남겨놓고 다 hide시켰다.

1. 먼저 모델링에 4개의 조인트를 만들어줄때, 스트래치될 부분을 생각해서 혀뿌리부분간격을 길게한다.

 

스트래치 되는 부분은 안쪽만 되므로 주로 겉에서 봤을때 숨겨지는 부분으로 하는것!

 

모든 조인트를 잡고 오리엔트 조인트를 한번해줘서 X축이 조인트 진행방향이 되도록 해준다

 

 

2. 조인트와 혀 모델링을 잡고 bind skin 해준다.

 

여기서는 ik handle 하기전에 바인드 스킨을 해주네, 하지만 ik handle작업을 먼저하고 바인드스킨해도 상관없을듯.

혀가 워낙 모델링이 간단하고 길쭉해서 웨이팅작업은 필요없었다.

 

 

 

 

3. spring ik handle로 혀뿌리 조인트와 그다음 조인트를 연결한다.

 

그러면 이렇게 handle 하나와 curve하나가 생김.

여기서 curve도 중요한 역할을 한다.

 

4. 혀뿌리 조인트와 그다음 조인트를 복사해서 Radius를 키운다. 
각각 down_ik_tongue_con, uper_ik_tongue_con 으로 네이밍해줌

 

 

5. down_ik_tongue_con, uper_ik_tongue_con 두 조인트와 ik handle에서 생긴 curve를 skin bind해준다.
 이때 바인드의 옵션을 Selected joints로 바꾸고 Max influences값을 2로 해준다.

스플라인 핸들은 커브를 움직이면 영향을 받기 때문에 복사한조인트를 여기에 바인드해주나보다.

커브에 컨스트레인은 많이 하지만 조인트와 커브의 바인드스킨은 처음해보는 방식이었다.

 

 

selected joints 옵션은 거의 처음 써보는듯,, 이럴때쓰는구나

 

그럼이제 컨트롤러 역할을 하는 복사한 조인트를 움직이면 전체를 움직일 수 있다. 
여기서 노드에디터로 스트래치와 커브를 이용한 컨트롤러를 제작해준다.

 

+ 이때 curve의 옵션 중, inherits Transform의 체크박스를 해제해준다.

 

무슨차이 인줄은 잘 모르겠지만 오토데스크문서검색을 해보면 아래와같이 나온다.

 

inherits Transform이 켜져 있으면 현재 오브젝트는 상위 오브젝트의 변형 (변환, 회전, 비율 및 기울이기 값)을 상속한다.

_출처 오토데스크

 

 

6.  window - node editor


노드에디터 창을 띄운다음 미들마우스로 tongue_curve와 tongue_root 조인트를 가져온다.

 


Arc Length정보를 가져오기위해 Tab을 눌러 curveinfo 노드를 띄운다.

*curve info의 attribute창을 보면 화면에서 움직일때 Arc Length값이 변하는것을 볼 수 있다. 

 


tongue_curve의 world space를 curveinfo에 input Curve로 연결하고 다시 탭을 이용해 multiplyDivide노드를 띄워서 연산한다.
 


multiplyDivide노드에는 Operation이 세가지 있는데, 맨처음 divide를 이용해 Arc Length를 같은 값으론 나눠주기위해 input 1x로 연결후 input2에 같은 값을 입력해준다.
*조인트의 x방향이 늘어나는쪽의 방향이므로 x값을이용함

multiply노드는 총 3개를 이용하는데,
첫번째 멀티노드는 Output X값을 tongue_root의 ScaleX (X방향으로 늘어나야하니까)와 두번째 멀티노드의 input 1X에 연결한다.

 


두번째 멀티노드는 Operation을 power로 하고 input2에 0.5를 입력한다.
두번째멀티노드의 Output X에서 세번째 멀티노드의 input 2X에 연결한다.

*이것만 두번째 인풋에 넣음!

 


이때 세번째 멀티노드는 오퍼레이션을 Divide로 해주고 Output X값을 tongue_root 조인트의 Scale Y,Z에 연결해주면 연산이 끝난다.

 

 

 

7. 추가적으로 로테이션 컨트롤러를 사진처럼 스피어 두개와 curve하나로 만들어준다.

그리고 두 스피어는 채널창에 Rotate만 남도록 스케일과 이동부분을 우클릭해서 잠금&숨김을 해서 비틀기 외에는 다른 정보를 만질 수 없도록 해준다

 

 


큰스피어는 세번째 tongue조인트에, 작은스피어는 두번째 tongue조인트에 로테이션만 페어런츠를 해준다.

8.  마찬가지로 curve는 Translate만 남기고 나머지를 잠금&숨김해준 후 
uper_ik_tongue_con조인트와 Translate영역만 페어런츠 컨스트레인을 해준다.
*콘스트레인할때 항상 컨트롤러 먼저 누르기!

 



컨트롤러커브와 스피어는 네이밍을 tongue_R_con(로테이션만 컨트롤하니까)으로 제대로해주고 그루핑해준다


9. 그룹의 피봇은 턱조인트로 이동시키고, 턱컨트롤러랑 Global_tongue_Con_GRP그룹을 페어런츠컨스트레인으로 로테이션만 연결해서 입을 벌릴때 같이 따라가게만든다.

 



10. Global_tongue_Con_GRP은 jaw 컨트롤러 아래에 넣어주면 컨트롤러에 연결된 혀는 자동으로 따라온다.

 

꼭 조인트에 모델링을 넣을 필요는 없다. 
모델링 파츠가 따로 떨어져있어도, 컨트롤러끼리만 연결되어있으면 가능하다. 

그리고 꼭 컨트로러들 사이에 조인트가 있지말란법도 없다.  

이런고정관념있으면 리깅할때 헷갈림 ,, 나처럼 ㅋㅋㅋ 

조인트가 하이어라키 밖에 있어도 상관없지만 정리를 위해 글로벌 혀컨트로러 안에 넣어주었다. 
이제 진짜 혀까지 리깅 끝! 인줄알았지만  

블랜드쉐입이 남아있다 ㅋㅋㅋㅋ  
다음포스팅에,,