본문 바로가기

ComputerScience/Computer Graphics

CG - 19. Animation

728x90

1. History of Animation

- frame(sequence of image)의 연속

- 형태를 정의하는 것이 modeling이였다. animation은 시간에 따른 shape을 정의하는 것이다.

- 간단히 말하면 시간에 따라 frame을 모델링하는 것

- key frame을 사람이 그리면 컴퓨터로 interpolation을 수행하여 완성한다.

 

- 사진으로 만든 첫 film이다.

- 최초로 손으로 그린 단편 애니메이션이다.

- 배경의 움직임은 적기 때문에 한 배경에 인물이 그려진 투명한 종이를 바꿔가며 만들었다. (cell animation)

- 최초의 3d computer animation

2. The principles of animation

- 공이 바닥에 닿으면 찌그러지고 튀어오를때는 펴지고 하는 것을 표현한 방법이다.

- 캐릭터가 행동을 할때 그 행동의 힌트를 미리 주는 효과이다. (배트를 휘두르기 전에 뒤로 젖힘)

- 관찰자의 시선이 의도대로 사건이 일어나는 무대로 쏠리도록 하는 효과 (중앙이 밝음).

- straight ahead : 동작을 순서대로 그리는 방법

- pose to pose : 중요한 pose인 동작을 먼저 그리고(key frame) 연결 부분을 그림

- 캐릭터가 움직이면 코트는 자연스럽게 관성에 의해 뒤로 펼쳐지다 앞으로 쏠리는 것을 표현하는 방법

- 출발할때 천천히 시작하고 멈출때도 천천히 멈추는 것을 표현

- key frame 사이의 움직임이 직선으로 움직이는 것 보다 arc로 움직이는 것이 더 자연스럽다.

- 그냥 걷는게 아니라 secondary action으로 손으로 머리를 긁는 움직임을 통해 심경을 엿볼 수 있게 한다.

- 같은 거리를 이동하는데 frame을 많이 하면 느리게 움직이고 frame을 적게하면 많이 움직인다.

- 슬프고 우울하면 느린 타이밍 즐겁고 기쁘면 빠른 타이밍을 활용한다.

- 무겁고 가벼운 느낌도 줄 수 있다.

- 액선, 포즈, 표정을 사실적인 것보다 과장된 표현을 활용

- 2차원 그림이지만 volumn을 가정해서 그리는 것이다.

- 밋밋한 캐릭터보다 매력있는 캐릭터를 그려라

3. computer animation techniques

- 1. artist directed : 아티스트가 key frame을 그리고 interpolation으로 중간을 구현

- 2. data driven : 사람이 직점 움직여서 그 움직임을 mark함 (motion capture)

- 3. procedural : 물리 법칙에 의해 simulation이 가능한 움직임을 구현

4. Character animation 

- scene graph/kinematic chain : 몸통, 팔다리, 머리 각각의 transformation을 정의해서 구현

- 이렇게 key frame을 정의하고 나면 interpolation을 사이를 채운다

5. skeletal animation

- transformation을 위한 계층적 뼈대 구조와 modeling을 위한 skin을 분리해서 제작하는 방법이다.

- 뼈들을 정의하고 뼈들을 joint로 연결하고 이런 joint 들의 움직일 수 있는 각도를 정의한다.

- 즉 먼저 뼈대를 정의하고 뼈 사이의 joint들을 찾고 그 joint의 움직이는 각도를 정의하고 계층 구조를 만든다. 그 위에 skin을 뼈의 지점들과 binding하여 완성한다. 이를 rigged character라고 한다.

6. Blend shape

- 뼈대 없이 직접 mash를 움직여서 구현하는 방법

7. Interpolating transformation : Rotation

- 각각의 key frame의 pose 사이사이를 interpolation으로 채운다.

- interpolation으로 사이를 채울때 rotation을 활용할 수 있다.

- x,y,z 축의 회전으로 물체의 회전을 나타내거나 축을 중심으로하는 회전을 나타낼 수 있다.

- gimbal lock (두 axes가 겹쳐져서 degree of freedom을 잃음) 문제가 있다.

- 동일한 rotation이 여러 다른 표현으로 가능하다는 문제도 있다.

- 때문에 unit quaternion을 사용한다. quaternion으로 임의의 축에대한 rotation을 나타낼 수 있다.

- q = cos + v sin : cos이 real number, sin이 imaginary number가 된다. v가 rotation axis이다.

- 결국 quaternion은 unit space 위의 한 점이라고 볼 수 있고 즉 interpolation은 그 unit space 위의 두 점사이에서 이루어지면 된다.

\- 이렇게하면 직선위에서 같은 시간에 같은 거리를 이동하기 때문에 시작과 끝부분은 느리고 중간이 빠른 일정하지 못한 속도로 interpolation이 수행된다.

- 따라서 구 위에서의 shortest path를 찾도록하여 구의 중심으로부터 일정한 각도로 interpolation이 수행된다.

- 이를 slerp라고 부른다.

- 만약에 위치를 interpolation한다고 하면 아래처럼 linear하게 수행할 수 있다.

- 좀 거칠게 interpolation이 될 수 있으니 높은 차수의 polynomial을 활용해서 spline curve로 fitting할 수 있다. 더 나은 연속성을 보장한다.

8. Interpolating transformation : Position

9. Forward Kinematics

- 각 부분들과 joint 등의 구조들이 다 정해졌을때 포즈를 계산하는 방법을 말한다.

- x,z 축에서 두 joint들과 그 각도, 길이가 주어졌을 때 p의 위치를 잡을 수 있다. (px, pz)

- bone의 hierarchy를 따라가면서 transformation을 적용하여 pose를 계산한다.

- 각 joint들의 angle을 받아서 최종 포즈를 나타낼 수 있다.

- 이렇게 bone의 움직임을 나타냈으나 결국 우리가 원하는건 skin의 움직임이다.

- bone의 움직임에 따라 skin의 vertex들이 따라서 움직여야 한다.

- skin의 각 vertex가 어느 bone에 따라서 움직이는지 정해주는  방법이다.

- skin이 어느 하나의 bone에게만 영향을 받는게 아니라 여러 bone에 의해 영향을 받을 수 있기 때문에 각 bone마다 가중치를 주는 방법이다.

- 위 예시 : wi,1는 팔 bone이 영향을 미치는 weight를 나타낸다 붉은 부분에 가장 큰 영향을 미친다.

- 아래 예시 : wi,2는 윗 팔 bone이 영향을 미치는 weight를 나타낸다. 

- 이렇게 하면 중간부분은 두 bone의 영향을 받아서 더 자연스러운 구현이 가능해진다.

10. Rigging

- mesh의 크기에 따라 bone의 크기를 조절해주고 joint의 특성도 정의하고 skinning을 위해 skin의 bone에 대한 weight를 정의하는 것을 말한다.

11. Different ways to obtain joint angle

- 아티스트가 직접 joint를 정의할 수 있다.

- data driven : 사람이 직점 움직여서 그 움직임을 mark함 (motion capture)

- bone structure에 따라서 마커의 위치를 정하고 여러개의 카메라로 이를 촬용하여 마커의 위치를 잡는다. 이 마커의 위치들로 bone의 위치를 찾는다.

- 먼저 마커들을 구별하는 작업을 수행한다. 그 다음 calibration을 통해서 bone의 parameter를 계산한다. 

- 많은 양의 motion을 사실적으로 생성 가능해진다. 

- 후처리나 setup 시간이 많이든다. 

 

- blend shape도 있다. key pose들을 직접 정의하고 interpolation으로 구현한다. 

12. Inverse kinematics

- forward kinematics의 반대 동작이다.

- position(pose)이 정해졌을 때 parameter를 계산하는 것을 말한다.

- 예를들면 주먹의 점이 저 상대 얼굴 위치에 닿아야 한다! 면 그 동작을 위한 parameter를 계산하여 애니메이션을 구현할 수 있다. (게임 같은데서 종종 활용)

- 즉 p의 위치가 주어졌을 때 세타1,2를 구하는 것이다.

- 이게 어려운 이유는 같은 위치 p에 대해서 여러 동작이 가능하다는 점이다. (여러 solution 존재 가능)

- 복잡할수록 실제 값을 구하기 어려워지기 때문에 numerical한 접근을 해야할 수 있다.

- 혹은 불가능한 위치에 p가 존재해서 solution이 없을 수도 있다.

728x90
반응형