Computer Animation Algorithms & Techniques (By Rick Parent)
책을 정리한 내용입니다. (틀린 내용이 있을 수 있습니다)
9.1 Overview of Virtual Human Representation
9.1.1 Representing Body Geometry
- Polygonal Representation
- 다각형 모델은 대부분 꼭짓점과 면의 집합으로 구성
- 여러개의 segment로 구성
- 관절(joint)과 rigid segment의 계층구조로 구성된다.
- 한 관절을 회전시키면, 그 관절의 자손객체들도 다 회전한다.
- 한개의 다각형 mesh로 구성
- 한 관절을 회전시키면 영향을 받는 점을 회전시키고, 관절 주위의 점들을 변형시켜야 한다.
- 다각형 메시의 topology를 통해 다양한 제어가 가능하다.
- 다각형 표현법은 게임과 같이 실시간 시스템에서 속도가 중요하고 토폴로지의 유연성이 필요할 때 많이 사용한다.
- 문제점 : 부드러운 곡면을 표현하기 위해서 많은 다각형이 요구된다.
- Patch Representation
- 시각적으로 높은 품질이 필요할 때 사용한다.(NURBS)
- 패치를 정의하는 제어점을 조작하여 객체의 곡면을 조작할 수 있다.
- 문제점 : 패치의 가장자리에서 연속성이 보장되어야하는데, 해당 과정에서 복잡한 토폴로지 문제가 생긴다.
- 다각형 표현법보다 부드러운 곡면을 만들 수 있지만 그만큼 데이터양이 늘어나게 된다.(계층적 스플라인이 해결책)
- Other Representation
- 분할 곡면 : 낮은 해상도의 다각형 모델을 분할하여 부드럽게 만든다.
- 음함수 곡면(Meta Ball) : 가까이 있는 도형과 섞이는 성질을 가지고 있어서 부드러운 피부와 같은 유기체를 만들 수 있지만 계산이 많이 걸린다.
- 부피 측정 : 인체의 내부 전체의 정보까지 저장하지만 가장 많은 계산이 요구된다.
- layer 사용 : 뼈와 근육이 같이 피부에 미치는 영향을 모델링
-> 모델링 도구의 부족이나 계산 복잡도 때문에 자주 사용하지는 않음
9.1.2 Geometry Data Acquisition
- 아티스트들이 직접 형체를 만들기
- 실제 인간을 디지털화 하기 : 레이저 스캐너, 비디오 이미지를 영상처리하여 데어터 얻기
- 매개 변수 접근법 : 인체 계측법에 기초를 둔 매개 변수 사용
- 인체 모형을 애니메이션 하기 위해서는 신체 부분들이 움직일 수 있어야 한다.
- 인체를 표현하는 방법에 따라 나눔(팔뚝, 머리, 허리 등)
- 관절과 마디의 계층구조에 따라 정리되고 한 관절을 움직이면 해당 관절의 자손부분들이 따라서 움직이게 된다.
- 빠르지만 관절 부분에서 보기에 좋지 않은 결과가 나온다. 특히 텍스쳐를 입혔을때 심해진다.
- 다각형 모델에서는 단일 피부를 사용한다.
- 관절이 회전하면, 주변의 회전을 위해 꼭짓점들이 변형된다.
- 꼭짓점을 뼈 한개에만 연결하는 것
- 빠르다. 뼈가 회전하면 꼭짓점이 따라 움직인다.
- 관절 주변의 꼭짓점들이 여러개의 뼈로부터 가중치 받기
- 꼭짓점이 뼈 한개에만 있는 것보다 좋은 결과를 얻지만 계산량이 늘게 된다.
- 뼈가 회전하는 것이 꼭짓점에 영향을 주도록 가중치 주기
- 결과값이 매끄럽게 나오지만 관절을 심하게 구부릴때 문제가 발생한다.
- FFD(free-form deformation)로 극복
9.1.4 Surface Detail
- 가상 모델의 형태가 만들어진 후 곡면의 특성도 지정해야 한다.
- 모델의 형태처럼 아티스트가 형체를 만들거나 디지털화 하는 방식이 있다.
- 색상뿐만 아니라 하이라이트, 빛의 산란, 범프와 변위맵, 텍스쳐 맵 등도 만들어진다.
9.1.5 Layered Approach to Human Modeling
- 인체 모델을 애니메이션하는 가장 일반적인 접근 방법은 해당 모델을 뼈대, 근육과 피부로 이루어진 레이어로 만드는 것이다.
- 뼈대 레이어는 모델의 연결을 담당
- 근육 레이어는 뼈대의 연결에 따른 근육이 변형되는 것을 담당
- 피부 레이어는 모델의 외형 표현 담당
- 근육 레이어를 표현하는 FFD : 관절의 움직임에 따라 피부가 변하는 것
- 늘어나는 정도를 직접 적용하여 팔 관절의 움직임과 피부의 변화를 표현한 모습(Figure 9.2)
- 최근에는 음함수와 B-스플라인 곡면으로 모델링한 피부를 이용하여 해부학적으로도 유사한 모델을 만들기도 한다.
- Rigging
Rigging은 하나의 특성이나 다른 객체의 애니메이션을 쉽도록 상호적인 제어를 설정하는 것이다.
Animation Rigging In Unity
9.2 Reaching and Grasping
- 팔은 몸에 붙어있지만, 몸의 다른 부분과 독립적으로 움직인다고 생각하면 계산적으로 간단하다.
- 사실적인 동작을 위해서는 다른 관절과의 연결을 생각해야 한다.(해당 장에서는 독립적으로 생각함)
9.2.1 Modeling the Arm
- 손의 관절을 무시할 때 팔의 기본 모델은 DOF가 7인 상태로 나타낼 수 있다.(Figure 9.6)
- 관절의 한계로 인해 여러 문제가 발생한다.
- 팔 하박의 움직임은 팔목과 관련이 있게 되는 등의 문제가 있다.
-> 가상의 관절을 만들어서 해결하기도 한다.
- 한 관절의 한계점은 다른 관절의 위치의 영향을 받는다.
ex) 팔로 발끝을 잡는 동작을 하면 무릎을 완전히 펴기 어렵다.
- 객체의 끝단부(end effector)를 특정 물체에 붙이고 FK를 적용하거나, IK를 이용하여 원하는 애니메이션을 얻을 수 있다.
ex) 어깨, 팔꿈치, 팔목 사이의 평면을 만들고 끝단부의 위치를 통해 팔의 형태를 생성 (Figure 9.8)
-> 여러가지 조건과 조작을 통해 원하는 애니메이션을 얻는다.
9.2.2 The Shoulder Joint
- 어깨 관절은 DOF가 3인 구 관절로 모델링 된다.
- 사실적인 표현을 위해 쇄골과 견갑골을 모델링하여 어깨, 쇄골, 견갑골의 세가지 제한적인 범위를 가지고 어깨 동작을 만들 수 있다.
9.2.3 The Hand
- 손은 기본적으로 아래 그림과 같은 DOF를 사용하지만, 쥐는 동작에 따라 다른 모양으로 표현할 수 있다.
9.2.4 Coordinated Movement
- 한 동작에서 관절들 사이의 상호 연관된 움직임을 모델링 하고 제어하는 것이 어려운 문제이다.
- 신체 부분들의 상호 작용은 특정한 움직임에 어떠한 관절을 사용할 것인가를 결정하는 것 이상의 문제이다.
9.2.5 Reaching Around Obstacles
- 손을 뻗는 동작에 있어서 어려움을 만드는 것 중 하나는 피해야할 장애물이 있는 경우이다.
- 경로를 결정하기 위해 탐색 전략으로 potential field를 local geometry의 함수로 정의하고 문제를 해결한다.
- 목적 장소는 낮은 포텐셜 (기울기가 움직이는 방향을 제시한다)
- local minima 문제에 빠지지 않도록 여러 알고리즘을 사용한다
- genetic algrithms
- genetic fitness function
- 그러나 장애물이 어떤 물체인지 등에 따라 애니메이션이 어색할 수 있으므로 어려움이 남아있다.
9.2.6 Strength
- 동작이 몸에 주는 strain에 따라 동작이 달라지게 된다.
- strain은 동작을 하기 위해 관절에 가해지는 토크를 결정한다.
- 해당 strain이 미치는 영향을 통해 각 관절에서 필요한 토크를 계산하게 되고 애니메이션에서 요구된 토크 허용치와 계산된 토크를 비교하여 동작을 수정하게 된다.
9.3 Walking
- 걷기의 특징은 주기적인 행동이라는 것이다. 그러나 회전이나 장애물에 의해 비 주기적인 요소들이 생길수도 있다.
- 동역학은 걷기에서 필수적인 요소이다.
- 걷기는 동적으로는 앉어된 상태이지만, 정적으로는 안정적이지 못한 상태이다.
9.3.1 The Mechanics of Locomotion
- Walk Cycle
걸음의 주기는 한 발의 버팀(support)과 두 발의 버팀이 교대로 일어나는 것으로 특성지을 수 있다.
- Run Cycle
뛰기의 주기는 비행 기간에 의해 분리된다.
- Pelvic Transport
- Pelvic Rotation
- 골반은 새로운 발의 위치로 다리를 뻗을 때 보폭이 길어지도록 돕는다.
- 골반 중심의 경로는 사인 곡선을 닮는다.
- Pelvic List
- Knee Flextion
- 무릎 관절이 없으면 Figure 9.20처럼 다리가 땅을 뚫게 된다.
- 무릎 관절은 골반의 회전을 고르게 하고 충격 흡수를 도와준다.
- Ankle and Toe Joints
- 발목, 발끝과 발 자체로 된 복합체들은 여러개의 뼈와 DOF로 구성된다.
- 발목과 발끝 관절은 무릎과 같이 충격을 흡수하고 골반의 회전을 고르게 한다.
9.3.2 The Kinematics of the Walk
- 다리 애니메이션은 관절 각을 적당하게 제어하여 얻는 결과이다.
- 걸음의 주기는 디딤(stance) 단계와 흔드는(swing) 단계로 나누어진다.
- 애니메이터가 걷기와 관련된 DOF를 위한 관절각의 리스트를 만드는 것이다.
- 모든 관절각 리스트를 만드는 일은 효율적이지 않으며, 특이한 움직임을 만들때 의미가 없어진다.
- 새로운 걸음을 만들때 골반의 움직임, 발의 위치와 궤적등 다양한 운동학적 값을 지정하게 된다.
- 골반과 발 자취를 따라 시간-공간 곡선을 만든 뒤에 주어진 시간에서 위치를 결정해 줄 수 있다.
-> 데이터의 민감성 때문에 발의 위치가 바닥이 아닐 수 있기에 IK등도 유용하게 쓰인다.
9.3.3 Using Dynamics to Help Realistic Motion
- 동역학의 단순화
1) 균형 잡을 때에 다리를 흔드는 것과 같이 특정 동역학적인 효과를 무시한다.
2) 디딤 다리를 위쪽으로 미는 것과 같이 비교적 짧은 시간동안의 변화는 무시하고 힘은 어떤 시간 구간 내에서 일정하다고 생각한다.
3) 7-DOF 다리와 같이 복잡한 구조는 동역학적인 계산을 위해 1-DOF의 단순한 다리(피스톤 움직임만을 가진)로 대체한다.
4) 임의의 복잡한 동역학적인 효과를 계산하는 것은 수평적인 것과 수직적인 것으로 분리해서 계산하는 것으로 대체한다.
9.3.4 Forward Dynamic Control
- 운동학적(kinematic)인 제어의 경우 특정 운동학적인 상태는 토크와 힘을 유발시키고, 해당 토크와 힘은 다음 상태의 토크와 힘에 영향을 준다. 그러므로 적합한 토크와 힘을 디자인 하기에 어렵다.
- 생체 역학 책에서 찾은 실험적인 데이터를 통해 얻은 토크와 힘을 사용하는 것도 방법이 될 수 있다.
9.4 Covering
9.4.1 Clothing
- 옷감을 모델링하는 가장 간단한 방법중 하나는 한 가지 재질을 가진 조각을 늘어뜨리는 static draping을 사용하는 것이다.
- 이산된 점들을 이용의 옷감의 특정 융기가 생성
- 해당 점들을 차례로 애니메이션 시킴
- 천의 큰 특질을 나타내고 모델링하는데 편리
- 해당 방법은 옷감의 접힘, 주름, 구부러짐 등을 나타낼 수 없다.
- 옷감을 사실적으로 모델링 하는 방법으로 삼각형 메시를 하부 구조로 사용하여 충돌을 지속적으로 테스트 하는 방식이다. (옷감과 인체 사이의 접촉 상태를 확인)
9.4.2 Simple Draping
- 고정된 수의 지점에 옷감을 거는 방식
1) 늘어뜨린 곡면을 제한점들의 볼록한 의복 내에 근사시킨다.
2) 주어진 과정 동안 최대 전위(displacement)가 사용자 정의 한계 아래로 떨어질 때까지 계속되는 완화 과정이다.
- 제한점(constrained points)들 사이에 있는 선(catenary curve)을 따라 놓여있는 꼭지점의 위치를 정하는 것을 가장 먼저 해야한다.
- 두개의 catenary curve가 교차하면, 낮은 곡선이 제거된다.
- 낮은 곡선을 제거하고 삼각 분할을 한다.
- 한 삼각형의 꼭짓점에서 대변 중심을 잇는 현수선을 그어가면서 분할한다.
- 완화법으로 꼭짓점의 위치를 정한다.
- 각 꼭짓점을 인접 꼭짓점과 각 단위 거리만큼 떨어지도록 자리잡는다.
- 주어진 꼭짓점에 대해 인접 꼭짓점들로의 변위벡터가 만들어진다.
- 재질의 딱딱함으로 모델링 하기 위해 이면각 스프링을 사용할 수 있다.
9.4.3 Getting into Clothes
- 인체 모델이 입고있는 사실적인 옷을 시뮬레이션하기 위해서는 물리적인 기법이 필요하다.(충돌탐지와 반응 계산 필요)
- 동적으로 시뮬레이션하기 위해서는 작은 삼각형이 필요하다.(삼각형이 작을수록 계산이 증가하게 되므로, 효율성을 고려해야 한다.)
- Modeling Dynamics
- 사실적인 반응을 위해서 옷감의 특성도 반영해야 한다.(신축성, 굴곡, 비틀림)
- 신축성은 모서리의 길이가 정지상태로부터 얼마나 변화되었는가를 측정한다.
- 스프링의 힘 혹은 에너지 함수를 사용하여 매쉬에 다양한 특성을 부여할 수 있다.
- Collision Detection and Response
- 옷감의 각 면에 바운딩 박스를 만들어서 상향식 구조를 만든다.
- 각 면은 인접 면과 논리적으로 결합하여 연합된 바운딩 박스를 만들고 한 단계 위의 노드를 생성한다.
- 모든 면을 사용하여 계층구조가 균형이 잡히도록 구현한다.
9.4.4 Hair
- 가장 기본적인 방식 : 머리카락 부피를 차지하는 도형을 만들어 머리위에 두기
- 계산 비용이 적게 든다.
- 숱이 적은 경계를 위해 투명도가 있는 텍스쳐맵을 사용한다.
- FFD를 통해 머리카락을 애니메이션 할 수 있다.
- 포니테일과 같은 스타일은 따로 나누어서 애니메이션 할 수 있다.
- 머리가닥의 묶음 단위로 애니메이션 하기
- 머리카락은 묶음 집합으로 모델링 된다.
- 머리가닥의 시트가 사용될 수 있고, 연결되는 스프링에 의해 가까이 유지된다.
- 주요 머리가닥을 애니메이션시키고 중간의 머리가닥은 보간시킨다.
- 개별 머리가닥을 모델링
- 계산 비용이 가장 크다.
- 머리가닥은 기하학적 튜브를 사용하거나, 파티클 꼬리를 통해 구현된다.
- 개별 머리가닥은 질량-스프링-댐퍼 시스템을 이용하거나 강체 연결 역학을 이용한다.
- 계산비용과 효율성을 위해 머리가닥간의 상호작용을 무시하거나, 세부묘사의 다중 단계 접근이 사용될 수 있다.