뒤틀림이 없는 Spline IK 를 만들기 위해 생각 했던 아이디어가 어깨 트위스트 셋업에 개선을 가져다 주었습니다.
http://cafe.naver.com/pinksox/2133 이건 뒤틀림이 없는 스플라인 IK 게시물이고요
http://cafe.naver.com/pinksox/1717 이건 어깨 트위스트 및 삼각근쪽 셋업에 관한 게시물입니다.
이번 어깨 트위스트 본 셋팅에서 중요한 아이디어는
http://cafefiles.naver.net/data37/2009/6/23/248/spiknew06_minksox.jpg 이 그림입니다.
쇄골 --> 상박 --> 하박 으로 이어지는 어깨에서
쇄골과 상박이 180도 넘게 꺾이게 되고
동시에 상박에서 트위스트가 발생하게 되는데
이런 상황에서 상박의 트위스트와 무관하게 쇄골과 상박의 중간 각도를 만들어낼 수 있는 방식입니다.
차근 차근 만들어 보겠습니다. (편의를 위해 존칭 생략)
바이패드를 하나 만든다
그리고 보기 편하기 위해 쇄골과 상박을 박스 형태로 바꿔준다
(박스로 보는 방법은 http://cafe.naver.com/pinksox/1976 이쪽 게시물에 있음)
쇄골 위치에 포인트 헬퍼를 하나 만들어준다. (Point01)
그리고 포인트 헬퍼가 쇄골의 자식이 되도록 링크를 걸어준다.
포인트 헬퍼의 축 방향은 쇄골과 일치시킨다
(http://cafe.naver.com/pinksox/2174 이쪽 스크립트로 포인트 헬퍼를 만들면 자동으로 정렬되어서 만들어짐)
같은 방식으로 어깨에도 포인트 헬퍼를 하나 만들어준다. (Point02)
하지만 새로 만든 Point02 는 어깨의 자식이 아니라 쇄골의 자식으로 링크를 걸어준다(Point02 의 부모는 쇄골이 됨)
Point02 의 부모를 Point01 로 해도 상관 없다
이제 위 그림에서 보이는 빨간색 x 축 방향으로 Point02 를 내려줄 차례이다.
내려갈 거리는, 아래 그림처럼 Point01 과 Point02 의 거리만큼이다.
눈 짐작으로 내려도 크게 문제는 없지만
정확하게 같은 거리일 수록 리깅 품질이 더 좋다.
정확하게 같은 거리를 만들기 위해서는...
Point01과 Point02 의 거리를 알 필요가 있다.
그런데 Point01 과 Point02 의 거리는 Point02 의 로컬 x 포지션과 같다 (일부러 그렇게 만들었음)
아래 그림을 보면, 쇄골의 로컬 축과 상박의 로컬 축 방향을 알 수 있는데..
Point02 는 쇄골 (혹은 Point01) 을 기준으로 x 축 방향으로 이동해 있는 상태이다.
Point02 의 부모를 쇄골 (혹은 Point01) 로 했기 때문에 이런 상황이 생겼고
Point02 의 부모가 상박이였다면 Point02 의 로컬 위치 [x,y,z] 는 [0,0,0] 일 것이다.
이제 Point02 의 포지션 컨트롤러를 Position Expression 으로 바꿔보자.
그러면 현재 로컬 포지션 값이 숫자로 표시가 된다.
이처럼 익스프레션 컨트롤러 상태에서는 로컬 위치를 숫자로 직접 표현할 수 있다
x 위치는 3.85318 인데 3 으로 고치거나 다른 숫자로 고쳐서 Evaluate 버튼을 클릭하면 위치가 변하는 것을 확인할 수 있다.
하지만 여기서 필요한 숫자는 3.85318 이다. (쇄골의 길이)
(맥스 헬퍼중에 Tape 라는 줄자 기능이 있긴 하지만 이 방법이 좀더 간단하다.)
y 위치는 1.43051e-006 라고 적혀 있다.
맥스는 내부적으로 복잡한 부동 소숫점 연산을 수행하면서 0에 근접한 숫자를 이런 식으로 이상하게 표시하기도 한다.
y 의 1.43051e-006 대신에 0 을 넣고 Evaluate 를 눌러보면 y 위치에 변화가 없다는 것을 알 수 있다.
물론 이번 리깅에서는 [ 3.85318, 1.43051e-006, 0 ] 이 숫자를 그대로 사용해도 상관 없다
[ 3.85318, 0, 0 ] 이렇게 해도 상관 없고...
이제 Close 를 눌러서 익스프레션 컨트롤러 창을 닫아준다.
시험삼아서 Point02 를 마우스 드래그로 이동시켜보면 전혀 움직이지 않는다
위치가 변하지 않도록 강제로 숫자를 지정했기 때문이다.
그리고 로컬 위치의 숫자가 강제로 정해져 있다는 것은
부모를 바꾸면 새로운 부모의 축에 맞는 로컬 위치로 이동한다는 점이 아주아주아주아주 중요하다.
이제 Point02 의 부모를 상박으로 바꿔보자 (Point02를 상박의 자식으로 링크)
그러면 위 그림처럼 Point02 의 위치가 상박의 축 기준으로[ 3.85318, 0, 0 ] 만큼 이동하게 된다.
좀더 쉽게 표현한다면...
원래 쇄골 축으로부터 떨여져 있던 만큼 어깨를 기준으로 떨어져 있게 된 것이다.
일반적으로 맥스에서 부모 자식 연결을 해 줄때 이처럼 위치 변화가 발생하는 일은 없다
다만 내부적으로 로컬 위치가 달라졌지만 유저가 느끼지 못할 뿐이다.
하지만 익스프레션 컨트롤러에서는 로컬 위치를 강제로 고정했기 때문에
부모가 달라지면서 위치도 변하게 된 것이다.
익스프레션 컨트롤러를 설명하다 보니 '초간단' 이라는 글 제목과 어울리지 않게 말이 좀 길어졌는데
이 부분이 정 복잡하고 모르겠다 싶으면 눈짐작으로 비슷한 위치에 이동시켜도 상관은 없다.
이제 Point01 이 Point02 를 바라보도록 Point01에 LookAt 컨트롤러를 적용한다.
대부분 디폴트 옵션을 그대로 두면 되지만 Select Upnode는 반드시 쇄골을 지정해 주어야 한다.
그래도 혹시 모르니 빨간색으로 체크된 옵션을 확인하도록 하자.
이미 눈치챈 사람도 있겠지만
이 상황에서 Point01 의 각도는 삼각근 본의 역할을 정확하게 수행한다.
일단 어깨 트위스트본 먼저 만들어보자
본을 하나 생성해서 상박의 위치에 정렬시키고 상박의 자식으로 링크를 걸어준다.
이 그림에서 보이는 pin 은 front pin 이다.(y 축 방향)
그리고 LookAt 컨트롤러를 적용한다.
이 경우에도 대부분 디폴트 옵션이 그대로 사용되지만 아래 그림에서 빨간색 부분을 체크해 본다.
역시나 Select Upnode 지정이 무척 중요하고 Point01 의 z 축과 일치하도록 축 정렬을 했다.
이렇게 하면 어깨 트위스트 본 완성~
이제 어깨 삼각근 본을 만들어보자.
설명을 위해서 본이 아니라 Sphere 를 만들었다.
Slice On 을 해서 반쪽짜리 공이 되도록 했다.
(물론 이 오브젝트 역시 Bone Tool 에서 Bone On 을 해주면 본으로 인식된다)
그리고 상박의 자식으로 링크를 걸어준다.(Sphere 의 부모로 상박을 지정)
로테이션 컨트롤러를 Orientation Constraint 로 바꿔주고 Orientation Target 으로 Point01 을 지정한다.
여기까지 하면 Sphere 의 축은 삼각근 역할을 충분히 하고 있으나 보여지는 방향이 90도 틀어져 있다.
Sphere 에 Edit Poly 를 적용해서 메쉬 방향을 90도 돌려주면 완성~
여기까지 셋업한 맥스 파일을 첨부했고 Max 2009 버전 기준이다. (다운로드)
하지만 맥스 8 이전 버전에서도 아무런 문제 없이 적용할 수 있는 방법이다.
'Graphics > Knowhow' 카테고리의 다른 글
Quick CAT Rig (0) | 2011.07.12 |
---|---|
광배근과 대흉근 리깅 샘플 (0) | 2011.02.14 |
익스프레션 사용 샘플 동영상 (0) | 2011.02.14 |
캐릭터 셋업 (0) | 2011.02.13 |
스프링 헤어 본 셋 (0) | 2011.02.13 |