Body 리깅(2) 허리 컨트롤러 생성


 CG의 즐거움 '상상력 표현'에 있다. 확장성이 뛰어난 방식으로 리깅된 캐릭터는 애니메이터의 상상력에 날개를 달아준다. 따라서 리거(리깅 아티스트)는 애니메이터의 상상력을 극대화시켜 줄 수 있도록 장치를 구성해야 한다. 그중의 하나가 바로 '스트래치'이다. 


스트래치는 말 그대로 늘어나는 것을 의미한다. 실제 사람의 신체가 늘어나는 경우는 없지만 CG에서는 모든게 가능하다. 리거는 모든 가능성을 염두에 두고 캐릭터를 개발할 의무감이 필요하다.

__1컨트롤러 생성

 넙스 커브로 사각형 컨트롤러를 만든다. 컨트롤러 위치를 v스냅으로 Waist_Bottom_jnt와 Waist_Top_jnt조인트에 v스냅하고, freeze를 실행한다.


__2constrain설정

 Waist_Top_컨트롤러를 먼저 선택하고, Waist_Top_jnt를 선택한 후에 constrain parent를 한다. 곧바로, Waist_Bottom_컨트롤러를 선택하고, Waist_Bottom_jnt를 constrain parent까지 실행하자.


__3노드 에디터 설 

 노드 에디터(window메뉴)를 열고, Waist_ik_Crv_shape노드를 불러온다. ( waist_ik_spline으로 생성된 커브) 탭 키를 이용해서, curveinfo노드를 검색하고, 노드 에디터 창에 불러온다. 


캐릭터 전체를 움직이거나 크기를 조절할 수 있는 Main컨트롤러를 아래처럼 생성한다. (nurbs 커브 이용)


- Waist_ik_Crv_shape노드의 world space[0]노드를 curveinfo의 'input Curve'와 연결한다

- multiplyDivide노드를 생성한다. (operation:divide)


- curveinfo노드에서 Arc Length노드를 multiplyDivide노드의 input 1X에 연결한다. 

- Main 컨트롤러를 불러온 후에(shape노드 아님) scale X 노드를 multiplyDivide의 input 2X에 연결한다. 


- multiplyDivide1을 복사해서 multiplyDivide2를 만든다. (operation : divide) 

- multiplyDivide1의 output 1X 노드를 multiplyDivide2의 input1X와 연결한다. 

- multiplyDivide2의 input1 수치값을 복사해서 input2에 붙여넣기 한다.


- Waist_ik_jnt1~4까지 불러온다.

- multiplyDivide2의 outputX값과 각 Waist_ik_jnt1~4까지의 scaleX값을 연결한다.


__4main컨트롤러 구조정리 

 지금까지 생성한 조인트와 컨트롤러 그리고 ikHandle 및 curve를 모두 main_Ctrl 아래로 parent한다. (아래사진 참고)


 main 컨트롤러를 움직이면, 커브가 밖으로 튀어나가는데, 이는 상위노드의 영향값을 중복으로 받고 있기 때문이다. 이 문제를 해결하려면, Waist_ik_Crv의 Attribute창으로 가서, inherit Transform을 체크해제하면 된다.


main컨트롤러 아래에 각 신체부위에 해당하는 조인트와 컨트롤러 그리고 Etc를 그룹화한다. (아래사진 참고)