원문 : Character Animation: Skeletons and Inverse Kinematics

주의 : 번역이 개판이므로 이상하면 원문을 참조하십시오.

주의 : 허락받고 번역한 것이 아니므로 언제든 내려갈 수 있습니다.



Introduction



자! 당신은 고딕 성을 만들었다 - 이제 영웅이 게임 안으로 달려 들어가 성벽을 방어할 시간이다. 당신의 게임 엔진은 스켈레톤과 역운동학( IK, Inverse Kinematics )라 불리는 애니메이션 시스템, 그리고 제어할 수 있는 복잡한 계층구조 설정을 지원한다. 당신은 그것들을 모두 시도해 보고 싶은 갈망을 가지고 있다. 훌륭하다! 그러나 당신이 이전에 스켈레톤을 써 본적이 없거나 관절이 있는 모델에 IK 를 적용해 본적이 없다면, 당신은 충격에 빠질 것이다. 일부는 당신이 좋아하게 될 것이고, 일부는 그렇지 않을 것이다... 적어도 처음에는 그럴 것이다.


이 문서는, 역운동학과 애니메이션되는 캐릭터들을 움직이기 위한 top-down 회전 시스템인 순운동학( Forward Kinematics )을 위해, 스켈레톤을 사용하기 위한 초급 및 중급 원칙들을 몇 가지 소개할 것이다. 그러다 보면, 그것은 당신이 갈망하는 질문들에 대한 답을 줄 것이다. 당신이 이 글을 모두 읽었을 때, 당신의 앞을 가로 막는 장애물들을 뛰어 넘을 수 있는 충분한 에너지를 느낄 수 있기를 바란다.


Forward Kinematics vs. Inverse Kinematics



얼마 전까지만 해도, 게임 캐릭터들은 a lot like shellfish( 역주 : 조개 껍데기 같이 쌓인 구조? )였다: 그것들은 기본적으로 돌같은 세그먼트( segment )들을 쌓아 놓은 것일 뿐이었다. 애니메이터들이 바랄 수 있는 최고의 것은 기본 계층구조를 다룰 수 있는 플랫폼이었으며, 이는 그들이 모든 세그먼트들의 위치와 키프레임을 한 번에 설정할 수 있도록 해 주었다. 여기에서 현실감있게 팔꿈치를 구부리거나 근육이 움직이는 것은 바라지 말기 바란다 - 이는 일어날 수 없는 일이었다. 실시간 표면 변형( deformation )을 다룰 수 있는 현대의 프로세싱 파워가 없이는, 게임은 단지 로봇이나 갑옷만을 표현했었다.


Advanced Processor Performance Enables Computer-generated Skeletons Animated with inverse kinematics


얼마동안은 게임 개발자들은 불편함을 조용히 감내했다. 그리고 나서 PC 들은 더욱 빠르고 스마트해졌으며, 이는 게임 엔진들을 더욱 빠르고 스마트하게 만들어 줬다. 발전된 처리 성능은 단순히 세그먼트화된 캐릭터를 함께 저장하는 것 뿐만 아니라 그 캐릭터들의 스킨을 실제로 변형하기 위해서 컴퓨터가 생성한 스켈레톤을 사용할 수 있도록 해 주었다. IK 가 선택할 수 있는 제어 시스템이 되었다.


The Scoop on Hierarchies


역운동학을 이해하기 위해서는 기본적인 계층구조 및 순운동학에 대해서 이해하는 것이 중요하다. 직접적으로 target-to-target morphing 을 하는 것 외에, 애니메이터들은 대부분 자신의 캐릭터들을 움직이기 위해서 갖가지 계층구조를 사용한다. 계층은 부모-자식-이웃 관계를 말한다. 하나의 오브젝트에 부모나 자식을 할당하는 작업은 "parenting" 이나 "grouping" 이라 불린다. 인간의 다리같은 경우에, 위쪽 다리( upper leg )의 부모는 엉덩이( hip )이며, 아래쪽 다리( lower leg )은 위쪽 다리의 자식이다. 그리고 발( foot )은 아래쪽 다리의 자식이다. 오른쪽 위쪽 다리는 왼쪽과 이웃 관계를 공유하며, 둘다 엉덩이의 자식들이다( 그림 1 참조 ).



그림 1. 순운동학을 위한 기본적인 아래쪽 몸 설정 및 계층.


또 다른 계층에 대한 학설은 "inverted tree" 모델을 사용한다. 여기에서는 부모( 엉덩이나 허리( pelvis ) )가 "루트( root )"라 불린다. While no part of a hierarchy is ever really referred as the "trunk", the children, and their children, become "branches"( 그림 1 참조 ).


The Trouble with Forward Kinematics


캐릭터의 손이 기본 계층 하에서 움직이기를 원한다면, 먼저 위쪽 팔( upper arm, 상박 )을 회전시키고 나서 아래쪽 팔( forearm, 팔뚝, 하박 )을 회전시키고, 마지막으로 손 자체를 회전시키는 작업을 전체 팔이 올바른 위치에 올 때까지 해야 한다. 이는 회전의 "top-down" 시스템이며 순운동학이라 불리며, 기본 애니메이션을 위한 훌륭한 시스템이다.


애니메이션은 순운동학과 기본 계층구조를 사용하면 단순해 보인다 - 당신의 캐릭터가 발이 바닥 위로 미끌어지지 않게 걷는다든가, 몸이 돌고 있는 동안에 발은 그대로 머물러 있는다든가 하는 특정 행위를 하기 전까지는 단순하다. 그런 경우에, 당신은 미적인 만족을 시켜 주지는 않는 두 가지 선택을 할 수 있다:


    • 전체 계층을 회전시킨다( 이는 불필요하게 말이 미끄러지게 만든다 ).
    • 계층구조의 위쪽( 엉덩이 )만 회전시키고 다른 부분은 그대로 둔다( 보기에 매우 고통스럽다 ).


그 시점에서, 순운동학( 그리고 당신의 캐릭터 )은 분리된다. 걷고 있는 캐릭터의 발을 ( 바닥에 ) 심는 것은 거의 불가능하다. 왜냐하면 오브젝트에 있어서 가장 어려운 것은 계층 구조의 맨 아래쪽이, 그 위쪽이 움직이고 있음에도 불구하고, 그대로 남아 있도록 하는 것이기 때문이다. The illusion of stability actually takes constant readjustment( 그림 2 참조 ).



그림 2. 기본 계층 구조와 순운동학을 사용할 때의 어려움은 전체 계층 구조를 회전시키거나 발을 미끄러지게 할 때 나타난다. 발들을 땅에 그대로 두면 그 결과는 참담할 수 있다.


The Advent of Computer-generated Skeletons using Inverse Kinematics



그림 3. Computer-generated skeleton

다행히도 오늘날의 게임 애니메이터들은 장편 극영화( feature film )을 위해서만 사용되었던 같은 애니메이션 기법들을 사용할 수 있게 되었다. 장편 극영화의 세계에서는, 다이노사우르스의 발목, 무릎, 허벅지, 엉덩이 등의 발가락 위쪽의 관절들이 미세하게 움직이기 때문에 발가락이 화면상에서 미끄러져 보이는 것을 보상하기 위해 발가락들에 대한 지속적인 재조정이 이루어진다. 그 조정은 픽셀보다는 피트 단위로 측정된다. 캐릭터를 현실감있게 움직이기 위해서는 순운동학 이외의 뭔가가 필요하다는 것은 확실해졌다. 또 다른 시네마틱 문제 - 캐릭터가 움직일 때마다 관절이 구겨지거나( crease ) 불룩해지는( bulge ) 그럴듯한 묘사 - 는 연속성있는 메쉬( continuous mesh )로부터 만들어진 모델을 사용해야만 해결될 수 있을 것이다. 그러나 어떻게 solid band 와 walk 를 만들 수 있을까? Turning to an earlier staple of film special effects, 스톱 모션( Stop Motion ) 소프트웨어 개발자들은 아마츄어 시스템이나 스켈레톤을 자신들의 computer-generated( CG ) 모델들에 포함시켰으며, 스켈레톤을 제어하기 위해서 역운동학( Inverse Kinematics )라 불리는 시스템을 개발했다.


개념적으로 볼 때, CG 스켈레톤은 이해하기 쉽다. 그것은 우리의 물리적 뼈대를 흉내낸 것이다 - 각 관절에 있는 힘줄( tendons )을 사용하는 강제 구조가 서로를 연결한다. 이는 inverted tree 구조이며, 부모는 뼈대의 루트라 불린다. 루트는 보통 캐릭터의 무게 중심에 위치한다; 이는 보통 이족 보행 동물의 등뼈( spine )의 시작점이다. 이 시스템을 ( 뼈대 없는, non-skeletal ) 기본 계층 구조보다 더 낫게 만드는 것은 힘줄이며, 이는 존재하기는 하지만 컴퓨터 3D 프로그램에서는 보이지 않는 요소이다. 뼈대 없는 오브젝트로부터 생성된 계층 속에 있으므로, 스켈레톤은 순운동학에 의해 top-down 으로 제어될 수 있다. 그러나 스켈레톤의 가장 큰 이점은 계층구조의 위족에서 아래쪽으로 제어를 전달할 수 있는 기능이다. 그것은 문제를 아래에서 위로 ( 순운동학의 역으로 ) "풀기( solve )" 때문에, 그 과정은 "역운동학" 혹은 IK 라 불린다. 이는 top-down 회전을 다루는 과정보다 더욱 직관적이며 더 적은 시간을 소비한다.



NOTE : 어떤 애니메이션 패키지들은 cube, sphere, 그리고 null object 들과 같은 "뼈대 없는" 오브젝트들에 대한 IK 응용프로그램을 허용한다. 하지만 이런 IK 를 생성하고 운용하는 것은 매우 복잡하다.



그림 4. IK 핸들을 사용하는 단순한 본 설정. 보통 본들은 루트( root )로 갈 수록 두껍고 이펙터( effector )로 갈수록 얇아지는 형태로 묘사된다. 녹색 삼각형은 "팔꿈치"를 구부림으로써 형성되는데, 어깨 위쪽과 손목은 팔꿈치의 회전 평면을 나타낸다. 이 평면은 팔꿈치를 바깥으로 휘두르는 것을 허용하기 위해서 조정된다.


스켈레탈 체인( skeletal chain )에서 가장 아래쪽에 있는 링크( link )는 보통 골( goal )이나 엔드이펙터( end-effector )라 불린다( 그림4 참조 ) ( 이 이름들은 다른 프로그램들에서는 다른 의미로 사용될 수 있다는 점에 주의하라 ). 세그먼트화된 모델의 경우에 캐릭터의 "피부( flesh )", 팔다리( limbs ), 몸통( torso ), 머리( head ) 등은 가장 가까운 스켈레톤의 본( 혹은 관절( joint ) )의 자식으로 붙는다. 단일 메쉬로 된 폴리곤 모델이나 seamless NURBS 모델의 경우에, 당신은 밑에 있는 스켈레톤 위에 모델을 씌우게( skin or envelope ) 될 것이다.


NOTE : 캐릭터의 팔다리, 머리, 피부, 혹은 옷은 보통 "지오메트리( geometry )" 이라 불린다. 지오메트리는 렌더링될 수 있지만, 스켈레톤은 렌더링되지 않는다.


지오메트리를 움직이는 대신에 스켈레톤을 사용하면, 스켈레톤 자체가 움직이게 되며, 지오메트리는 그것에 맞춰서 따라 가게 된다. 본들은 그것들 사이에 보이지 않는 힘줄을 가지고 있기 때문에, 계층구조의 일부만 회전하고 있을 때 관절이 분리되지 않는다. 한술 더 떠서, 당신은 스켈레탈 체인에 IK 를 적용할 수도 있다.


Adventage of Inverse Kinematics


자, 지금까지 말한 것들이 애니메이터에게 무슨 의미를 가질까? 그것은 당신이 체인의 말단- 예를 들어 손 - 을 확 잡아당길 수 있으며 손 위쪽에 있는 모든 본들이 자동으로 적절한 위치로 가기 위해 회전된다는 것을 의미한다. 이는 캐릭터가 어딘가에 도달해야만 할 때 정말 플러스 요인이 된다. 예를 들어 나무에서 사과를 딴다는가 하는 것 말이다. 마음속으로 어깨, 위쪽 팔, 팔꿈치, 손목을 그 위치에 도달하기 위해서 얼마나 회전시켜야 하는지를 계산할 필요가 없다. 애니메이터는 단지 손을 사과 위에 올리기만 하면 된다. 그러면 팔의 나머지 부분들은 따라 오게 된다.


기저에 깔린 스켈레톤을 사용하는 것의 부가 효과는 본과 관절이 표면을 변형( deformation )하기 위한 자연스런 제어 구조를 제공한다는 것이다. 변형을 사용하면, 기하 도형상의 각 제어점들은 본과 관절에 대한 상대 위치로 이동한다. 이는 지오메트리의 전체 조각을 한 번에 움직이는 것과 비교했을 때 뚜렷한 개선점이다.


모델이 스켈레톤 위에 입혀졌을 때( skinned or enveloped ), 운동학과 순운동학은 그것을 움직이기 위해서 사용될 수 있다. 스켈레톤의 일부분에 대해 운동학을 사용하는 것에 대한 이점들이 여전히 존재한다. 어떤 패키지들은 순운동학과 역운동학을 같은 스켈레탈 체인에 동시에 사용할 수 있도록 허용하며, 심지어는 실시간에 그것들 사이를 전환할 수 있도록 허용한다. 그리고 어떤 패키지들은 엄청난 노력을 해야지 그것들을 전환할 수 있도록 한다. 이를 위해서 당신은 제약( constraints )( 제약은 키프레임에 들어 가거나 빠질 수 있는 자성같은 것이라 생각할 수 있다 )이나 표현식( 수학적 공식 ), 혹은 그것들의 조합을 도입해야만 한다.


Bone Basics



먼저 소프트웨어 패키지를 살펴 보자. 그리고 나서 우리 본과 관절들을 살펴 보고, 마지막으로 그것들이 제어되는 방식에 대해서 살펴 보자.


Software Packages


모든 응용프로그램에서 스켈레톤이 같은 방식으로 제어되거나 표현되지는 않는다. IZWare Mirai, Alias Wavefront Maya, PowerAnimator 와 같은 패키지에서는, 당신이 완벽하고 완전히 붙어 있는 팔다리를 가진 스켈레톤들을 생성할 수 있었다. 이 문서를 작성한 시점에는 Softimage 3D 와 XSI 는 그런 기능을 지원하지는 않았지만, 그것들은 팔 체인, 다리 체인, 목 체인 등을 결합할 수 있는 도구를 제공하고 있었다. 이는 "제약"이라 불리는 독립된 제어 시스템들과 parenting 을 통해서 수행되었다.



그림 5. 지오메트리가 입혀지면, 서피스 제어점들은 그것들과 가장 가까운 본들에 의해 제어된다. 본들이 서피스에 대한 제어를 공유하면, 부드러운 주름과 구부림이 가능해진다. 그러나 서피스가 변형된 결과가 당신의 의도와 맞지 않는다 하더라도, 스켈레톤은 세그먼트화된 모델을 묶는 데 있어서 훌륭하며, 그것들의 관절들은 모든 조각들을 위한 자연스런 피봇( pivot ) 포인트를 제공한다.


어떤 패키지들은 역운동학 시스템을 제공하지만 본을 전혀 지원하지 않는다. 대신에 당신은 자신만의 스켈레톤을 주요 오브젝트로부터 만들어서 스켈레탈 속성들을 각 캐릭터의 개별 파트들에 부여할 수 있다. Softimage 3D, Hash Animation: Master, Discreet 3d Studio Max 와 같은 다른 패키지들은 두 가지 옵션을 모두 제공하는데, ( 보통 렌더링되지 않는 지오메트리를 사용하는 중심이나 피봇인 ) nulls 나 더미 오브젝트같은 다른 오브젝트들을 일반적인 스켈레탈 계층 구조 내로 포함시킬 수 있도록 허용해 준다. 여기에서 우리는 간략함을 위해 이러한 모든 오브젝트들을 "nulls" 라 부르기로 한다. 이 nulls 는 스케일, 회전, 이동될 수 있으며, 이는 당신의 캐릭터 메쉬의 제어점들을 그것들을 따라서 움직이도록 한다. 이 기법은 보통 근육을 볼록하게 만들거나 흉부를 확대하거나 하기 위해서 Softimage 3D 에서 사용된다( 그림 6 참조 ).



그림 6. Softimage 3D 에서 스켈레탈 구조( 보라색 오브젝트와 박스 )에 직접적으로 parenting 된 "null" 오브젝트를 사용하여 간단하게 근육 부풀리기( bulge ) 설정을 하는 모습. null 의 이동, 회전, 스케일링은 근육의 위치와 부풀림에 영향을 주며, 표현식( expressions )을 통해 팔꿈치 회전에 쉽게 엮일 수 있다. 왼쪽에 보이는 검은색 박스는 이 패밀리의 부모 역할을 하는 팔 지오메트리를 보여 준다. 파란색 박스는 루트, 팔꿈치, 손목의 관절이며 이는 그것들 사이의 "본들"을 회전시킨다. Softimage 3D 에서 관절들은 선택 가능한 오브젝트이며, 본들은 그렇지 않다는 것에 주의하라.  Softimage XSI 에서는 둘 다 선택할 수 있다.


개별 본들은 자신만의 로컬 축들을 가진 상태에서 생성되며, ( 항상은 아니고 ) 보통은 X, Y, Z 이다. 지오메트리를 사용할 때, 이 축들의 위치와 오리엔테이션( 역주 : orientation 은 기저 벡터로 이루어진 하나의 좌표계 공간을 의미함. 예를 들어 y-up 왼손 자표계, z-up 오른손 좌표계 )은 본의 피봇 포인트를 결정할 뿐아니라 그것의 회전 방향도 결정한다. 일반적으로 본들은 용접된 두 개의 조각으로 생각될 수 있다 - 본 자체와 본을 회전시킬 수 있도록 하는 관절. 그러나 모든 패키지들이 이러한 개념을 사용하는 것은 아니라는 것에 주의할 필요가 있다. 예를 들어 Softimage XSI 와 3D 는 전체 본 세그먼트들을 관절이라 부른다. Maya 와 IZWare Mirai 에서는 관절은 ( 본에 ) 붙어있는 것이지만, 개별적으로 선택될 수 있는 오브젝트이다. 이는 "굴근( flexors )"( 역주 : 구부리는데 사용하는 근육 ) 와 같은 변형되는 오브젝트들이 관절 자체나 본의 장축을 따라서 배치될 수 있도록 해 준다. 굴근들은 팔꿈치 안쪽의 주름( 관절 배치를 위한 좋은 후보 )과 같은 현실감있는 주름과 ( 본을 따라 배치된 굴근들의 ) 근육 부풀림을 가능하게 해 준다.


어떤 경우에, 축들은 고정된다 - 사용자는 본의 중심의 오리엔테이션을 변경할 수 없다. Softimage 3D 에서, X 축은 항상 본의 장축을 바라 본다. Maya 와 같은 다른 패키지들은 중심의 오리엔테이션을 선택할 수 있도록 한다. 이러한 패키지들은 본의 방향을 고려하지 않고 중심을 자유롭게 회전할 수 있도록 해 준다. 비록 그렇게 하는 것이 원하지 않는 결과를 나을 수 있기는 하지만 말이다.


피봇과 오리엔테이션이 중요한 이유는 무엇일까? 전문적인 애니메이션은 이것들을 올바르게 하는 것만을 고려하는 것은 아니다 - 그것을 빠르게 하는 것도 고려해야 한다. 만약 당신의 본들이 같은 방식으로 구성되었다면( 우리는 양의 X 축이 각 본의 장축을 바라보도록 설정할 것이다 ), 그것은 당신의 손가락들, 무릎들, 팔꿈치들, 척추가 같은 축을 중심으로 앞뒤로 구부려진다는 것을 의미한다. 대부분의 설정에서 그 축은 Z 축이다. 이는 딱부러진 표현을 창출하도록 한다( This makes creating expressions a snap ). 당신은 캐릭터가 어떤 방향으로 움직일지에 대해서 추측하거나 시도하거나 에러를 검사할 필요가 없다.


An Example of Surface Deformation using Bones


손바닥을 위로 바라보게 한 상태에서 손을 맞잡아 보라. 그리고 아래쪽 팔( forearm )을 보라. 이제 어깨를 움직이지 말고, 엄지 손가락이 천장을 가리키도록 회전해 보라. 만약 아래쪽 팔이 하나의 꽉찬 조각으로서 회전하고 있다면, 손목과 팔꿈치 사이에서 그리 미세하지 않은 회전을 보는 것은 불가능할 것이다( 혹은 적어도 고통스러울 것이다 ). 손과 더 가까운 피부는 손목 관절을 따라서 회전하지만 이 효과는 팔꿈치 쪽으로 갈 수록 낮아진다는 것에 유의하라. 서피스 변형을 사용하면, 덮혀 씌여진 지오메트리의 각 제어점들은 가장 가까운 관절이나 본에 의해서 제어된다.


This means that characters no longer need be loose piles of rock-hard segments. 팔꿈치는 자연스럽게 구부려진다; 심지어 이두박근( biceps )이 부풀려지거나 평평해진다( 그림 5 참조 ).


Bone Control


자, 이제 우리는 시작점으로 되돌아 왔다: 당신은 완벽한 스켈레탈 시스템과 IK 시스템을 지원하는 응용프로그램을 구입했다 치자. 당신의 문제는 끝났다. 맞나? 글쎄, 정확히 그렇진 않다. 나쁜 소식은 IK 시스템이 항상 순운동학 시스템보다 직관적이지는 않다는 것이다. 사과를 집거나 걷고 있는 동안에 바닥에 발을 붙이거나 하는 경우를 위해서는, IK 가 직관적이고 사용하기 쉬우며, 당신이 적절하게 그것을 설정할 수 있도록 해 준다. 그 "설정"은 본과 함께 동작하며 IK 가 시도되는 곳이다. 그 설정을 이해하는 데는 시간이 좀 걸린다.


Where to Begin


당신의 관절을 살펴 보라. 너무 깊이 들어 가기 전에, 당신의 몸이 작동하는 방식을 고려하고 컴퓨터가 생성해 준 스켈레톤은 인간의 스켈레톤과 완벽하게 같지 않음을 기억하라 - 그것은 하나의 표현일 뿐이다. 애니메이션 툴이 사실성을 반영하기 위해 점점 발전해 가고 있다고는 하지만, 애니메이션을 그럴싸하게 만드는 것은 여전히 애니메이터인 당신에게 달려 있다. 


관절이 동작하는 다양한 방식을 생각해 보라. 팔꿈치와 무릎은 어깨나 엉덩이와는 다르게 움직이는데, 그것들도 서로 조금씩 다르게 움직이며, 이 모든 것들은 등이나 목이 구부려지는 것과는 또 다르다. 일반적으로, 애니메이션 패키지들은 당신에게 하나나 혹은 두 가지 유형의 본들을 제공한다. 그것들은 본을 제어하기 위한 몇 가지 옵션들을 제공하기도 한다. 비록 우리 인간들은 발, 다리, 손, 장기들을 위한 수 백개의 본들을 가지고 있지만, CG 스켈레톤을 만들 때는 우리의 내부 본들은 거의 매칭될 필요가 없다. 모든 것을 매칭하려는 기법은 보통 애니메이션의 관점에서 역효과를 낸다: 서피스 제어를 위해서 너무 많은 본들을 가지는 것은 식당에서 너무 많은 메뉴를 가지고 있느 것과 같다. 타협하라. 가능한한 적은 개수의 본들만 사용하라. 다시 말하지만, 이는 그럴싸한 것을 만드는 것이지 실제를 만드는 것이 아니다.


Joint Types and Control


편의를 위해, 당신은 두 종류의 관절만을 가지고 있으면 된다: 하나는 소켓에서 모든 방향으로 휘두를 수 있는 것이고( which is really more than any of yours do without excruciating pain ), 다른 하나는 팔꿈치처럼 한 방향으로 구부릴 수 있는 것이다. Softimage 3D 는 모든 방향으로 회전할 수 있는 기능을 가진 모든 스켈레탈 체인에 대한 첫 번째 관절( root )과 절구공이 관절( ball-and-socket joint )을 제공함으로써 이를 다룬다. 그러면 당신은 "3D" 스켈레톤을 선택할지 "2D" 스켈레톤을 선택할지 결정하게 된다. 3D 스켈레톤은 루트처럼 모든 관절을 다루고 2D 스켈레톤은 볼소켓 관절처럼 특정 축을 따라서만 구부릴 수 있게 한다. 볼소켓 관절에서 시작해서 팔꿈치같은 관절에서 끝나는 "2D" 스켈레톤은 팔이나 다리를 위해서 최고이다. 또한 동시에 두 개 이상의 링크를 사용하지 않는 것이 최선이다.


Dealing with Challenges



동시에 두 개 이상의 링크를 사용하면 어떤 일이 벌어질까? 발과 같은 것을 위한 세 번째 링크를 추가한다거나 캐릭터가 사과를 집는 움직임을 만들기 위해서 IK 를 사용한다거나 하는 일반적인 도전들에 대해서 이야기해 보자.


The Third Link Dilemma: What About Adding Feet?


IK 에 의해서 제어되는 체인에서 두 개의 링크는 충분히 직관적이다. 하지만 발은 세 번째 링크를 표현한다. 발을 추가하는 것을 어떻게 다룰 것인가? Softimage 3D 에서, 발목은 실제로는 두 개이다: 다리 체인의 끝과 발 체인의 시작이다. 이 두개를 같이 넣으려면 당신은 발 체인을 다리 체인의 엔드 이펙터의 아래로 parenting 하거나 "제약"을 사용해야 한다. 제약에 대해서는 나중에 다루도록 하겠다. 두 개의 링크 다음에 IK 를 사용해 제어하는 것이 왜 어려운지에 대해서 이야기해 보자.


엄격히 말하자면, IK 에 의해 제어되는 체인은 체인의 가장 아래쪽에 있는 링크나 관절에 의해서 제어된다. 그 바닥 관절이나 엔드 이펙터의 모든 움직임은 계층구조상 최상위까지에 있는 모든 본들을 조금씩 회전시키게 된다.


두 개의 다리 본( 허벅지와 종아리 )으로 구성된 체인을 고려해 보자. 여기에서 발목은 바닥 관절이고 엔드 이펙터이다. 발목을 밀면 그 결과로 무릎이 구부려지고 허리에서 허벅지가 회전한다. 매우 직관적인 모션이다. 여기에다가 다른 링크를 추가하자: 발을 위한 본. 이번에는 발의 볼에 있는 엔드 이펙터를 밀어 보자. 그러면 발목이 구부려지고 무릎이 구부려지고 허리에서 허벅지가 회전한다. 그러나 각 관절이 구부려지는 순서와 각각이 회전하는 양이 약간의 조절만으로도 크게 달라진다. 이는 설정을 제어하기 어렵게 만든다( 그림 7 참조 ).



그림 7. 본이 많아질 수록 변형이 더 부드러워지기는 하지만, 그 본들에 대한 실제 IK 제어는 2 개의 링크를 넘어 가지 않는 체인으로 분리하는 것이 최선이다. 가장 왼쪽의 설정( 보라색 화살표 )은 Softimage 3D 에서 two-link 다리 체인에 대해 제출된 one-link 발 체인을 가지고 있다. 이 설정은 발목에 대해 하나의 엔드 이펙터를 제공하고, 발가락에 대해 다른 엔드 이펙터를 제공한다. 이는 three-link 체인에 대해 하나의 엔드 이펙터만을 사용하는 것보다 좋다.  일반적으로 IK 에서, 더 많은 본을 사용하는 것은 더 적은 제어를 한다는 것을 의미한다.


얼마나 직관적인가. 두 개의 본을 사용해서 쉽게 제어되는 모션은 세 개 이상의 본을 사용하게 되면 완전히 망가지게 된다. 이것이 Softimage 3D 스켈레탈 설정에서 많은 체인들이 서로 parenting 되거나 제약을 가지게 되는 현상을 보게 되는 하나의 이유이다. 당신의 소프트웨어에서 IK 솔루션들을 고려해야 하는 부분이 여기이다. 그것이 요구하는 제약과 parenting 을 창조적으로 사용함에도 불구하고, Softimage 3D 는 3D figure 애니메이션을 위한 확고한( solid ) IK 솔루션을 제공한다.


다른 패키지들은 다른 솔루션들을 제공한다. Maya 와 Mirai 는 허리에서 발가락까지 완전한 뼈대를 생성하는 기능을 제공한다( 그림 8 참조 ). Maya 는 체인들 자체에 배치된 분리된 "솔버( solver )" 들을 사용함으로써 긴 체인들의 예측불가성을 제어한다. 애니메이터는 필요한 곳에 솔버를 배치함으로써 솔버의 영향이 미치는 범위( 시작과 끝 )를 선언한다. 팔을 제어하기 쉽게 만들기 위해, 어깨에서 손목까지 솔버를 늘릴 수 있다. 손목에서 중지의 시작부분까지 솔버를 배치할 수도 있다. 손과 팔의 애니메이션은 각 솔버를 개별적으로 조작하는 것을 포함한다.


Maya 는 "스플라인( spline )" 솔버라는 특별한 솔버를 제공해 긴 목을 가진 생명체를 애니메이션할 수 있도록 하기도 한다. 이 솔버를 사용하면, 커브( 스플라인 )이 목의 척추뼈를 관통해 그려진다. 커브가 수정될 때마다, 척추뼈는 커브의 모양을 고려해 회전한다 - 해양 생물체를 위한 굉장한 솔루션이다.


IZWare( 공식적으로는 Nichimen ) 애니메이션 소프트웨어는 Walt Disney 의 Tron 을 만들 때부터 막후에서 사용되어 왔다. 그리고 이는 그것의 polygonal modeling package 로 유명하다. IZWare Mirai, a newcomer on the "off-the-shelf" animation package scene, helps beginning character animators get up and animating in no time( 역주 : IZWare Mirai 는 초보들이 시작하기 졶은 도구라는 의미인듯 ). The is because IZWare Technologies has done so much work up front( 역주 : 선불이 아니라는 의미인듯 ). Mirai 는 Maya 에서 처럼 완전한 branching skeletons 를 제공할 뿐만 아니라, 많은 캐릭터 솔루션들에 완벽히 걸맞는 이미 만들어진 뼈대들을 제공하기도 한다( 인간, 개, 심지어는 진드기도 ).


IZWare 는 매우 많은 공식( expressions )들과 팔다리 움직임을 자동으로 미러링( 혹은 뒤집기, mirroring or opposing )하기 위한 캐릭터 제어들을 추가함으로써 테크니컬 디렉터들의 두통을 해소해 주기도 한다. 이러한 움직임들의 예를 들면 걷거나 뛰는 사이클에서 팔과 다리를 흔드는 것을 뒤집는( 한 팔은 앞으로 한 팔은 뒤로 ) 것과 팔을 드는 컨덕터( conductor ) 등이 있다. 당신은 한 팔과 다리만 애니메이션시키고, 그 다음에 반대 팔다리를 자동으로 애니메이션시킬지 말지만 결정하면 된다. 이는 다른 프로그램들에서 스켈레톤들을 절반만 생성한 후에 거울면으로 복사( mirror-copied )하면 발생하는 음의 방향 회전( negative-rotation ) 문제도 교정해 준다.



그림 8. Mirai 에서 이미 만들어진 모델과 뼈대.소년, 개, 그리고 엄청 큰 진드기! 
자동 미러링과 음의 방향 회전 문제를 해결.


Dealing with IK Constraints


자, 이제 뼈대를 만들고 발을 제어하기 위해서 IK 를 사용하고 바닥에 발이 닿도록 했다. 손에도 IK 를 적용했다. 캐릭터가 앞으로 걷게되면 팔에 어떤 일이 벌어지는지 확인해 보자( 그림 9 참조 ).



그림 9. IK 에서 엔드 이펙터를 위한 위치들은 ( 단순한 계층 구조에서 처럼 ) 부모 공간의 위치에 대한 참조가 아니라 월드 공간에서 keyframed 되었다. 이는 실제로 IK 를 사용한 발이 쉽게 땅에 붙게 만드는 요인이다 - but it doesn't work well for wrist positions, which need to relate back to the skeleton( 역주 : 손목은 상대 위치여야 한다는 의미인듯 ). 이를 쉽게 해결하는 방법은 손목 엔드 이펙터를 null 오브젝트나 로케이터( locator )를 사용해 제약하는 것이다( 오른쪽 그림에서 십자 표시 ). 그리고 그 로케이터들을 계층 구조 내부로 다시 parenting 하는 것이다( 역주 : 월드공간에서 위치잡고 다시 그것을 부모 공간으로 돌리라는 의미인듯 ).


여기가 제약이 발생하는 곳이다. 엔드 이펙터를 keyframe 하는 것은 별로 좋은 생각이 아니라는 것이 밝혀졌다. 그렇게 하는 것은 실제로는 IK 를 사용할 때 발견할 수 있는 대부분의 문제를 발생시키며, 당신이 고민해서 만든 훌륭한 움직임들을 수행하는 것을 방해할 수 있다.


제약은 의지에 의해서 껐다 켰다 할 수 있는 강력한 자성이라고 설명하는 것이 최선일 것이다. 그것들은 하나의 오브젝트( 심지어는 null 오브젝트라도 )가 다른 오브젝트들에 영향을 미치도록 만든다. 서로 다른 제약들은 서로 다른 일을 수행할 수 있다. 제약은 거의 대부분 오브젝트의 중심이나 피봇에 대해서 작동하는데, 이는 오브젝트의 중심이나 피봇의 배치를 매우 중요하게 만든다. 어떤 패키지들은 다른 것들보다 더 많은 제약들을 포함하고 있지만, 세 개의 기본 제약들이 핵심이다:


    • Aim or directional.
    • Orientation.
    • Point or positional.


Aim or Directional


Aim 혹은 Directional 제약은 "영향을 받는" 오브젝트가 "대상" 오브젝트의 중심이나 피봇에서 지속적으로 어떤 축( 어떤 패키지들은 그것을 당신이 선택하도록 함 )을 바라보도록 만든다. 영향을 받는 오브젝트의 오리엔테이션은 대상 오브젝트의 오리엔테이션과 일치한다.


Orientation


Orientation 제약은 싱크로나이징을 하는 선수와 비슷하다. 한 선수가 돌면, 다른 선수도 돈다. 영향을 받는 오브젝트의 중심 오리엔테이션은 대상 오브젝트의 오리엔테이션과 일치한다.


Point or Positional


Point 혹은 positional 제약은 IK 를 위해 가장 자주 사용된다. 이 제약은 한 오브젝트를 직접적으로 다른 오브젝트에 가져다 붙이는데, 각각의 중심 위치에 맞춘다. 한 오브젝트가 움직이면, 다른 것도 강제로 움직여진다.


제약 대상으로 사용되는 오브젝트들은 다른 오브젝트들의 부모일 수도 있는데, 이는 그것들이 기본 계층 구조의 룰을 따른다는 것을 의미한다. 계층 구조에서 그것들의 위치와 움직임은 부모에 대해 상대적이다.


The Apple-picking Problem


제약은 그림 9 에서 내 뼈대의 손이 뒤로 회전하는 이유를 제공한다. 이는 스켈레탈 계층 구조와 기본 오브젝트 혹은 지오메트리 계층구조 사이의 중요한 차이들 중 하나 때문이다. 이는 성공적인 IK 애니메이션이 보통 두 종류의 계층 구조를 포함하고 있는 이유이기도 하다. 계층 구조에서 몇 개의 오브젝트들의 예로 비행 편대를 들어 보자. 이 비행 편대에는 부모로 선도기( lead plane )가 있다. 만약 한 비행기가 그룹보다 높거나 낮게 날도록 하자고 결정했다면, 우리는 움직임을 keyframe 할 수 있으며, 그것은 교묘하게 움직이면서 계속해서 그룹과 함께 날것이다. 이는 그것의 움직임이 부모 오브젝트인 선도기의 움직임에 대해 상대적이기 때문이다.


기본 계층 구조에서, 자식의 위치는 자식의 부모의 위치에 대해 상대적이다. That's why the feet slide when a character held together solely by hierarchies ( without bones ) rotates his or her hips( 역주 : 순운동학에서는 발이 땅에 닿지 않고 끌리는 것을 의미하는듯 ).


역운동학에서는 그렇지 않다. 엔드 이펙터( IK 계층 구조에서 가장 아래의 자식 )의 위치는 월드 공간에 대해 상대적이다. 그것이 IK 를 사용해서 애니메이션된 발이 그대로 남아 있는 이유이다. 불행히도 이는 IK 를 사용해서 애니메이션된 손들이 그것이 keyframe 된 공간의 위치에 도달하지 못하는 이유이기도 하다.


IK 는 발 배치를 위해서는 자연스럽다. 하지만 캐릭터가 사과를 집을 때는 어떨까? 그 액션은 IK 를 사용해서 하는 것보다 쉽지 않은가? 그렇다. 그것은 기본 계층 구조와 제약들의 도움을 받으면 최상이다.


우리는 어깨를 회전시키고 나서 위쪽 팔을 회전시키고 나서 아래쪽 팔을 회전시키는 등의 행동을 하는 것보다 사과에 손을 배치하는 것이 더 쉽기 때문에 IK 를 사용하기를 원한다. 하지만 우리는 캐릭터의 손이 등 뒤로 넘어 가지 않고 사과 나무로 올라 가는 것을 원한다. 어떻게 해야 할까?


The Apple-picking Solution


우리는 IK point 제약을 기본 계층구조와 함께 사용한다:


    • 정사각형과 원인 두 오브젝트를 선택하는 것이 좋다. 왜냐하면 그것들은 스플라인일 뿐이고 렌더링되지 않을 것이기 때문에, 나중에 그것을 감추기 위해서 기억할 필요가 없다. 우리는 원을 사용할 것이다.
    • 원 하나를 ( 팔 체인의 엔드 이펙터인 ) 손목에 배치한다. 그리고 다른 원 하나를 다른 손목에 배치한다. If you're really into it, point 제약을 사용해서 원들을 손목들에 직접 연결하고 그 제약들을 꺼 둔다. 
    • 그 원들을 캐릭터 몸통의 자식으로 만들어라( 몸통에 grouping 하거나 parenting 한다 ). 이는 그것들이 몸통이 가는 곳을 따라 가고 원들의 모든 움직임들은 몸통에 대해 상대적임을 의미한다. 이제 손목 엔드 이펙터들을 각각의 원들에 대해 제약한다. 이 아이디어는 엔드 이펙터가 아니라 제약 오브젝트들을 keframe 하는 것이다.

최종 결과는 두 세계에 있어 최상이다: 손들은 캐릭터가 움직일 때 몸통을 따라서 움직이게 되고, 당신이 제약을 가진 원을 사과에 배치할 때 손은 그것을 따라 간다. 이는 당신에게 IK 의 이점을 제공한다.


IK-driven 뼈대를 개선하기 위해서 제약 오브젝트의 계층 구조를 사용하는 것은 캐릭터 애니메이션 문제를 95% 정도 해결해줄 것이다. Everything from two characters playing catch to a rider falling from or jumping up onto a horse can be done with some form of animated constraint hierarchies and IK( 역주 : IK 와 애니메이션되는 제약 계층구조를 사용하면 말에서 떨어지거나 뛰는 행위들에 대한 문제들도 해결할 수 있다는 의미인듯 ). With the addition or a little math in the form of expressions to control complex behaviors like foot rotation, you'll have the tools you need to handle just about anything.


Conclusion



자 로봇의 전원을 끄고 방어구만으로 구성된 캐릭터는 벽에 걸어 두자. 그리고 이제는 서피스 변형을 해 보자. 우리는 계층 구조, 역운동학 대 순운동학, 그리고 그것들을 제공하는 주요 애니메이션 패키지들에 대해서 다뤘다. 또한 IK 와 제약을 사용하여 일반적인 애니메이션 문제들도 해결했다.


이제 당신만의 것을 경험하는 것은 당신에게 달렸다. 먼저 엔진이 IK 와 제약 계층 구조를 지원하는지 확인하고, 그것들을 해 보라. 이 문서에서 언급되지 않은 3D 소프트웨어 패키지라고 할지라도, 가격과 상관없이 IK 시스템, 계층 구조, 어떤 종류의 제약 혹은 링크들은 가지고 있음을 기억하라. 어떤 것을 얻을 수 있는지 확인해 보고 나가서 움직여라!


For More Information



아래의 리스트에서, 당신은 앞에서 언급한 소프트웨어 패키지와 도구들에 대한 URL 들을 찾을 수 있다. 또한  Intel® Software Directory and Software Download Store 를 확인해서 도구들과 솔루션들의 리스트들을 찾아보기를 원할 것이다.


About the Author



A professional animator and technical marketing engineer for Intel Corporation, Steve Pitzel has been a computer graphics instructor and animator for six years. He began his graphic arts career in college as an editorial cartoonist and courtroom sketch artist. After converting from pencil to mouse, he went on to convert others, teaching 3D applications such as Softimage, PowerAnimator, and Maya to traditional cell animators and computer graphic artists for Disney Feature Animation, Sony Pictures Imageworks, VIFX/Rhythm & Hues and UCLA. He was a lead animator for the CBS feature, The Nuttiest Nutcracker*, and a senior artist for Mattel. 


When he isn't animating, he's usually writing. His first novel, Wizrd, was published by St. Martin's Press in 1994 under his pen name, Steve Zell. He is currently working on his second novel.


'물리_수학_기하학' 카테고리의 다른 글

중력과 수직항력  (10) 2019.07.07
장력( Tension )  (13) 2019.06.26
Matrix major & multiplication  (2) 2018.08.12
[ 번역 ] The Perils of Floating Point  (0) 2018.08.10
[ 번역 ] Depth Precision Visualized  (11) 2017.06.04
[ 번역 ] Moment of inertia 일부 번역  (0) 2016.11.07
모멘트( moment )  (22) 2016.01.06
Curve  (0) 2015.10.04
[ 일부 번역 ] CLIPPING USING HOMOGENEOUS COORDINATES  (0) 2013.04.29
Arc length of curve  (0) 2012.09.21

+ Recent posts