'Joint'에 해당되는 글 2건

  1. 2011.01.10 마야 스켈레톤 렌더링 - Solid Skeleton using Python
  2. 2009.11.07 [Rigging] Stretch IK 만들기 3
posted by cimple 2011. 1. 10. 21:23




캐릭터의 Skeleton 을 렌더링 하고 싶을 때가 있지요. 하지만 조인트는 렌더링 되지 않습니다, 따라서 해당 위치에 sphere 와 cylinder 를 넣어주는 마야 파이썬 스크립트를 짜 보았습니다.

원래 Solid Skeleton 이라는 멜이 있지만, 해당 스크립트는 cone 을 생성하는 방식으로 되어 있어서, 파이썬 버전으로 새롭게 만들었습니다.

사용 방법은 간단합니다.



1. root 조인트를 선택
2. makeSolidSkeleton() 실행



이렇게 하면 됩니다,
(물론, 파이썬 스크립트이므로 스크립트 에디터의 파이썬 탭에서 실행해야 하는 건, 다들 아시죠?)

그리고 파라미터를 조절해서 스켈레톤의 구와 막대의 크기를 조절하는 것이 가능합니다.

makeSolidSkeleton(ballScale, edgeScale)

여기 ballScale 과 edgeScale 의 값을 바꾸어 주면 됩니다. 기본값은 둘다 1.0 으로 되어 있습니다.

ex) makeSolidSkeleton(2, 0.5)
이렇게 하면 구는 두배로 커지고 edge 는 절반으로 가늘어 질 것입니다.


마음껏 사용하시고, 버그나 수정사항이 발견되면 말씀해 주세요!

ThEnd.
posted by cimple 2009. 11. 7. 06:58


squash&stretch 는 애니메이션 10대 법칙중 하나입니다. 디즈니의 카툰풍 애니메이션을 보면, 캐릭터들의 팔, 다리, 얼굴 등등이 무지막지하게 눌렸다가, 쭉쭉 늘어나는 것을 볼 수 있습니다. 캐릭터들의 동작을 더욱 역동적이어 보이게 하고, 오히려 더욱 실재감이 느껴지는 애니메이션을 위한 중요한 요소이지요. 
때문에, 3D 애니메이션에서도 이러한 squash&strech 를 구현할 수 있도록 해 주는 Stretch IK 는 셋업에 있어서 중요한 요소 중의 하나라고 할 수 있습니다.

팔 다리가 이렇게 쭉쭉 늘어나야 재미있겠죠?

그럼 마야에서 어떻게 하면 Strech IK 를 만들 수 있을 것인지, 알아보도록 하겠습니다.

stretch IK 를 위한 준비물들

stretch IK 를 만들기 위해서는 다음과 같은 준비물들이 필요합니다.

1. spline IK
2. arc length
3. multiply divide node

그럼 이러한 준비물들이 필요하다는 사실을 염두에 두고, stretch IK 를 만들어 보도록 하겠습니다.


1. 조인트를 그려줍니다.


일단 조인트를 바닥에 아무렇게나 그려 보도록 하겠습니다.


2. 조인트에 spline IK 를 설치합니다.




spline IK 는 IK 를 nurbs curve 로 contol 할 수 있도록 하여서, 척추 등의 부드러운 움직임을 표현하는 데 효과적으로 사용되는 IK 시스템입니다. spline IK 를 설치하면 그림과 같이 IK 와 함께 nurbs curve 가 생성되는데, 이 nurbs curve 의 control vertex 를 조작하면 조인트를 부드럽게 움직일 수 있습니다. spline IK 를 생성하는 옵션에서 span을 늘려 주면 CV 들이 늘어나면서 좀더 부드러운 curve 를 얻을 수 있는데, 3 정도로 준 후 조작을 간편하게 하기 위해서 CV 들을 2개씩 묶어서 클러스터를 설치하겠습니다.




3. Nurbs curve 의 arc length 를 구합니다.

Arc length 는 nurbs curve 의 길이입니다. 만약 유저가 spline IK 의 nurbs curve CV 를 조작한다면, curve 의 arc length 가 달라지게 될 것입니다. 원래 길이에서 달라진 길이의 변화량을 측정해서, 그 값을 조인트의 size 에 곱하면 조인트가 효율적으로 stretch 된다는 것이 stretch IK 의 기본 개념입니다.

마야 메뉴의 Creates > Measure Tools > Arc Length Tool 로 이 nurbs curve 의 arc length 를 구할 수 있습니다.




자, 저는 24.456062 라는 값이 나왔군요. 이 값은 꼭 필요한 값입니다.


4. multiply divide 노드를 만듭니다.

그럼 아까 설명했던 대로 nurbs curve 의 arc legnth를 가지고, (변화량/절대값) 을 구해야 할 것입니다. 이러한 나눗셈을 하기 위해 필요한 것이 multiply divde 노드입니다.

multiply divide 노드를 만드는 방법은 2가지가 있습니다. Maya>Hypershade 에서 multiply divide 노드를 찾아서 생성할 수 있습니다.




또는 간단하게 마야 커맨드 창에 다음과 같이 입력해도 multiply divide 노드를 생성할 수 있습니다. 물론 이렇게 하면 노드의 이름까지 정해주면서 만들 수 있겠지요.


이렇게 만들어진 multiply node 에, 이제 '변화량' 과 '절대값' 에 해당하는 값을 입력해 주어야 할 것입니다.

multiply divide 노드는 input 1X-input 2X 에 들어온 값을 계산해서 output X 로 내보내는 기능을 하고 있는 노드입니다. (물론 마찬가지로 input 1Y, input 2Y 를 계산해서 output Y 로 내보냅니다.) 나눗셈을 할 때에는 1X 를 2X 로 나누어서 몫을 출력합니다. 즉 변화량을 1X 에 입력하고, 절대값을 2X 에 입력하면 되는 것입니다.

먼저, multiply divide 노드를 attribute editor 로 열어서 계산을 divide 로 바꾸어줍니다. 그리고, input2X 에 아까 계산했던 arc length 의 길이. 24.456062 를 입력합니다.



그리고 난 후, outliner 와 connection editor 를 엽니다. outlinder 의 display 에서 DAG object only 를 해제하면 DAG object 들이 아닌 노드들도 확인할 수 있습니다. 그리고 Shapes 를 체크하면 감추어져있던 shape 노드들도 확인할 수 있습니다.

먼저 arc length 노드는 spline IK 를 만들면서 생성된 nurbs curve 의 shape 노드로 존재합니다. 찾아서, connection editor 의 Outputs(from) 위치에 둡니다.
다음 우리가 아까 만들었던 multiplyDivide 노드를 찾아서 connection editor 의 Inputs(to) 위치에 둡니다.



그리고 난 후, connection editor 에서 arcLength 와 inputX 를 연결시켜 줍니다.


이렇게 하면, 아마 channel box 에서 다음과 같이 바뀌어 있는 것을 볼 수 있을 것입니다. 이제 input1X 를 input2X 로 나누어준 계산값이 outputX 로 출력되게 됩니다.


5. 계산된 값을 각 조인트의 scale 에 연결시킵니다.

이제 계산된 값을 조인트의 scale 에 연결시켜서 쭉쭉 늘이는 일만 남았습니다.
connection editor 에서 이제 우리가 만든 multiply divide 노드를 Outputs(from) 위치에 불러들이고, 각각의 조인트들을 Inputs(to) 위치에 불러들입니다. 그리고, outputX 와 각각 조인트들의 scaleX 에 연결시켜줍니다.



이제 다 되었습니다. 결과물을 확인해봅시다.





이런 식으로 간단한 stretch IK 를 만들어 보았습니다. 물론 좀더 발전적인 방법이 있을 수 있습니다. 그래도 혹시라도 어떤 분들이 도움을 받을 수 있다면, 보람된 포스팅이 될 것입니다.

쭉죽 늘어나는 팔다리를 만들어 봅시다!

stretch 하면 빼놓을 수 없는 이분.


ThEnd.