시작하며
- 사람의 애니메이션이 가장 많이 쓰인다.
- 사람의 애니메이션은 상체, 하체, 얼굴로 나눌 수 있다.
- 단순하게 움직이거나, 다른 물체화 상호작용을 하거나, 다양한 움직임이 존재한다.
사람의 Animation 구현방법
- Physical laws
근육의 특성을 이용하여, 뼈에 근육을 붙이고 시뮬레이션 하기
장점: 굉장히 정확한 움직임 얻을 수 있음
단점: 너~무 오래걸림
- Hierarchical Modeling
신체를 계층구조로 나타내어 각 관절의 회전을 받아 시뮬레이션 하기
각 관절마다 상대적인 회전값을 가지며 여기에 제약사항을 넣어 실제와 가깝게 표현 가! (ex.팔꿈치 회전의 제약)
팔꿈치를 30도 회전하고, 어깨를 50도 회전해도 상대적인 회전값은 그대로. 전체적으로는 바뀜
- Articulation object: 관절이 있는 물체
- Articulation variable: 각도
- End effector: 가장 끝 부분(손목 또는 손바닥이라고 할 수 있음)
- Body Modeling
Polygon으로 형태를 만들어 표현한다 box로 표현한 경우, 서로 겹치게 만들어 관절을 중심으로 구부리면 빈공간이 생기지 않도록 한다.
피부로 덮어 표면을 표현한다. 각 부분을 나눠 기능을 부여하기도 한다.
사람의 몸은 약 7만개의 삼각형으로 구성된다.
일일이 모든것을 움직이는 것을 불가하여 단순화 작업이 필요하다.
가장 간단한것을 간단하게 제작된 물체를 움직이고 그려질 때, 나눠진 결과로 보여주는것. Tessellation shader를 이용하여 그릴 때 설명하기도 했다.
모델링 방법: 그냥 아티스트의 노력/ 3D캡쳐
2. Hierarchies in Animation
- 순 운동학(Forward Kinematics) (FK)
- time 마다 angle을 하나씩 정해주기..
- 그러고나서 interpolation
- Art의 영역장: 원하는 움직임 가능단: 사람의 노력이 필요함
- 역 기구학(Inverse Kinematics) (IK)
- 모두 control이 아니라, end effector의 위치를 바꾸려면 얼마나 회전해야할지 계산
- Math의 영역장: 쉬운 제어 가능, 부가적인 움직임(잡기위해 허리 숙이는 등) 가능단: 계산으로 움직여서 부자연스러울 수 있음
FK는 어떻게 하나요?
모든 값을 지정해줍니다.
Joint의 종류
- 회전관절 Revolute Joint: 한 방향 회전 joint
- 프리즘 관절 Prismatic Joint: 이동하는 joint(늘었다, 줄었다)
- 복잡한 관절Complex Joint: 모든 축으로 회전 가능. 하나로 두기 복잡해서 3개의 관절로 나눠 표현하기도함.
Joint-Link표현
- Node(모양)와 Arc(상대거리)값으로 되어있음
- Arc값은 부모로부터 얼마나 떨어져있는지에 대한 값.(거리, 각도)
- 머리에 10cm위로 붙어있는 모자라면, arc는 10을 가짐
- Binary Tree 형태로 표현한다.
IK는 어떻게 하나요?
goal position까지의 회전 과정을 역으로 계산해냅니다.
Spaces
- Configuration space: L과 세타로 구성된 위치
- 도달가능 작업영역(Reachable workspace): 도달할 수 있는 위치(End effector가 있을 수 있는 위치). 넓을수록 어디든 갈 수 있어
- 자유자재 작업영역(Dexterous workspace): 다양한 경우를 가질 수 있는 위치. 넓을수록 움직이기 편함
Numeric(Analytic)
- analtytically하게 문제를 풀기가 어렵다.
- 원하는 위치로 도달할 수 있는 방법이 너무 많음
- 그래서 수치해석적인(Numeric) 풀이를 해보자!
- 우선 사람의 팔은 3-1-3또는 3-2-2 의 DOF를 가짐
- 가장 적게 움직이는 관절(end effector 근처의 관절)을 먼저 움직이도록 하는 방식
- 움직여보고 안되면 더 넓은 범위의 움직임.장: 잘 풀리기는 한다.단: 자연스러운 움직임은 어렵다. 항상 해를 찾는것을 아니다.
Generic math notation
- 일반적인 해를 구하기 위해서는 변화량에 따른 속도를 구해, Jacobian 행렬을 만들어 곱하기
- Jacobian 의 역행렬을 곱하면 goal vector를 얻을 수 있다.장: 정확한 자연스러운 해 구함단: 현재 configuration에서만 정확하므로, 모든 시점에 대해 Jacobian 행렬을 구해야함..하지만.. 이또한 도달할 수 없는경우, 그곳에 가기위해 왔다갔다하며, 발버둥치는 모습을 볼 수 있다.Damping factor를 더해야한다.
IK에서 발생할 수 있는 문제
- Damping factor조금만 움직여도 더 움직이는걸로 여겨서, 결국엔 덜 움직이게 하기 위한것!=> 그러면 왔다갔다 하는 현상이 줄어듦
- SingularitySingular위치에 goal 있으면 답 안나오는 문제.(일직선상에)기본 해결법: Singular한 곳에 빠지지 않게 하기그래도 안되면: 포기하거나.. 다른 방법을 생각해보거나.. 뒤로 물러나보기
- Cyclic Coordinate Descent(CCD)하나씩 움직여보기3차원일 경우, 2차원 상으로 투영시켜서 문제 풀기장: Joint limit주기가 쉬움, 속도 제약도 쉬워짐
정리!
- FK는 자연스럽지만, 손으로 설정해야하는 단점
- IK는 제어가 쉽지만, 자연스럽지 않다는 단점=> 어떻게 해야할까? => Motion capture!
Body Modeling
Rigging
- 모델 전체를 구로 나눈 후에 기술을 이용하여 뼈위치를 찾아낸다.
- 최적화를 통해 계층구조의 연결 그래프를 만든다.
Skinning
- 중심점에 대해 상대적인 위치로 피부를 위치시킨다.
- 주변 영향은 weight에 따라 다르다.
해부학적인 접근
- 매우 정확한 표현이 가능하지만, 계산이 매우 오래걸린다.
Body Control_ 상체
Reaching(물체 잡기)
- 각 Joint의 자유도에 따라 각각 움직임. 3-1-3 또는 3-2-2 DOF
- Reaching은 물체의 위치를 손목에 맞츠는게 자연스러움
- IK를 이용하면, 해가 너무 많거나 해가 안나올수도 있음
- 그래서 최소한만 움직여 Reaching할 수 있는 방법을 찾아야함.(Procedual approach)
- DOF를 줄이면 더 쉬워짐. 어떻게? 평면상의 문제로 바꾸기
- 목표지점과 end effector의 위치, 어깨의 위치를 이용하여 평면을 정의, 그 평면에서의 Procedual한 접근으로 문제를 풀자
- 어깨의 관절은 3DOF를 가짐. 이를 단순하게 표현하기 위해 3개의 관절로 나타내기도함
장애물이 있다면?
- 문제가 어려워짐!
- Potential Field를 계산하기. goal은 당기는 힘을 가지고, 장애물은 미는 힘을 가지도록 하여 계산.
물체에 닿은 후에 잡으려면?
- 각 손가락의 움직임을 별도로 저장해두기
- 물건을 쥘 때, 봉을 잡을 때, 손가락 일부만 사용하여 잡을 때의 모양을 만들어둔다.
물체를 잡기위해 장애물을 짚어야할 때?
- 장애물을 잡고, 물체를 잡는 것을 구현하기 위해서는 역학적인 계산이 필요함(어려움)
Body Control_ 하체
Walking(걷기)
- 하체 대표 움직임
- 무게중심을 왼발-오른발 번갈아가며 바꿈
Run(뛰기)
- 두발이 땅에 닿지않음, 두발 모두 공중에 있기도
Pelvis의 움직임
- 옆에서 볼때, 올라갔다 내려갔다 이동
- 위에서 볼때, 왼쪽이 앞으로갔다 오른쪽이 앞으로갔다 씰룩임
- 앞에서 볼때, 왼쪽이 올라갔다 오른쪽이 올라갔다 씰룩임
Knee의 움직임
Ankle-Toe의 움직임
결국! 모두 하나의 사이클에 대해 반복적인 움직임 가짐
- 이 Curve를 알아내면 된다.
- Pelvis는 빠르게 걸을수록 움직임의 폭이 좁아짐
- Hip은 빠르게 걸을수록 앞으로 더 당겨서 각도가 더 커짐
- Knee는 빠를수록 덜 당겨져
- Ankle은 비슷한 움직임을 가짐
- Toe도 비슷한 움직임. 속도와 큰 상관없음=> 이러한 특성이 있기 때문에, 속도가 변화하면 진폭에 변화를 주면 됨.
Dynamics
- IK를 이용해 땅에 발을 딛게하는것은 보기에는 괜찮으나 물리적으로는 맞지 않을 수 있음
- 균형을 잃어야하는 지점, 맞춘 지점을 알 수 없음
- 이런것을 계산하기 위해서는 중력, 미는 힘, 움직이는 힘을 통해 계산이 이뤄져야함.
넘어지지 않으려면?
- 중력과 지지하는 힘이 평행을 이뤄야한다.
- 거기에 앞으로가는 힘이 있으면 앞으로 균형을 잃지않고 이동할 수 있음
Face Control
- Body Control의 경우, 관절과 링크로 구성되어있어, 회전, 변화를 통해 구현하면됨
- Facial Animation은 뼈가 움직이는것이 아님! 구조 자체가 다르다.
Anatomy
- 해부학적으로 보면, 근육을 통해 표정을 만들어냄 매우 많은 근육이 분포
FACS(Facial Action Coding System)
- 얼굴의 움직임을 관찰했더니 46개의 근육조각(Action Unit)의 움직임으로 나타낼 수 있는것을 알게됨
- 이 근육조각들이 쪼글아들었다가 늘어났다가 하면서 만들어지는것이 표정!
- 0을 찡그린것, 1을 늘인것으로 지정하고 그 사이값으로 조정하며 표정을 만들자.
- 예를들어 무표정이 1번 0.5, 2번 0.5라면, 웃는표정은 1번 0.7, 2번 0.3 이런식
그럼 이걸 다 하나씩 움직여서 표정을 만든다?
NO.
- 한계가 존재.부가적인 정보표현이 어려움(느리게 움직임, 빠르게 움직임)Speech할 때 턱, 볼, 눈 등의 부가적인 움직임 나타내기 어려움개인별로 차이를 두기 어려움. 사람마다 FACS를 만든다? 노..=> FACS는 Expression은 괜찮으나 Speech에서 한계가 존재함.
Animation Structure
Facial Models
- 3D스캔, 직접 만들기
- 주의해야할 점은, 어색한 부분이 보이면 사람들이 보기에 불쾌할 수 있음
- 표준 FACS에 기반하여 animation을 만들어두고, 점점 구체화해가며 model을 만들면, 주변 근육까지 움직여줌으로 수월함.
Model마다 얼굴형이 다른 점은 어떻게 하는가?
- 표준모델과 Mapping을 진행한다.
- 움직이고자 하는 Face에 Fitting(모핑과정으로 보면 됨)장: 캡쳐 후 바로 움직이게 할 수 있음 => 실시간이고 컨트롤이 쉬움.단: 디테일한 표현이 어려움 => 어색함
Animation by FACS
- 일단 표정을 만들어두기. 7가지의 기본 표정이 있음(행복, 슬픔, 화남 ...)
- 만들어둔 표정을 조합함(happy 75%, bad 50%)장: 좀 더 자연스럽고 쉬움단: 그외의 움직임의 표현은 어려움 -> 다양한 parameter필요
Blend Shapes
- 현재 표정을 Basis 표정의 조합으로 만들어냄
- 아이폰의 경우, 표준모델과 비교해서 이 부분이 이런 차이가 있다를 발견하면, 새로운 모델에 그 차이를 적용함.
- 일반적으로 52개의 Blend Shape. 할리우드의 경우 700~1000개까지.장: 자연스러운 표정단: 표정을 모르는 경우 상상력이 필요. 애니메이터의 역량 필요.
얼굴 움직임 캡쳐
- 마커로 캡쳐하기도 함.
- 변화의 정도를 파악하여 역으로 근육의 움직임 알아냄
- FACS, Muscle, Key pose, Blend parameter로 데이터 변환
- Parameter를 통해 표정과 말하는 내용 뽑아낼 수 있음.
- 어색한 경우, 후처리를 통해 수정하기도함. 이부분은 더 움직여야 행복해보일 것 같다. 하면 더 움직이도록 조정
Speech
- 말을 하면, 주변근육이 따라움직여야함
- 움직여야하는 영역을 지정하고, 같이 움직이게 한다.
Lip-sync
- 말하는것에 따라 움직임. 말하는 소리와 입모양이 매칭되지 않으면 부자연스러움.
- 소리를 음절별로 나눔. 여기서 눈으로 봤을 때, 구분되는 입모양을 남기면 Visemes가 됨
- 배우의 말 또는 Script를 통해 Visemes를 뽑고, 그것에 따라 움직이게 함
- Coratculation: abo인 경우, a-b-o따로 보여지는 것이 아니라 연결되어 보이도록 해야함(연음법칙)
Eye movement
- 말하면서 눈도 같이 움직여야 자연스러움
- 눈동자가 고정되어있으면 어색. 조금씩 움직이면 고-퀄리티 애니메이션 완성
이제 남은것은?
- Hair, Cloth
- 이것들은 물리적 현상이 많음 => 역학을 이용해야함