시작하며
- 사람의 애니메이션이 가장 많이 쓰인다.
- 사람의 애니메이션은 상체, 하체, 얼굴로 나눌 수 있다.
- 단순하게 움직이거나, 다른 물체화 상호작용을 하거나, 다양한 움직임이 존재한다.
Virtual Human
- Body와 Behavior를 가진다.
- 실시간으로 각 part의 animation이 가능해야한다.
Body Modeling
- Polygon으로 형태를 만들어 표현한다 box로 표현한 경우, 서로 겹치게 만들어 관절을 중심으로 구부리면 빈공간이 생기지 않도록 한다.
- 피부로 덮어 표면을 표현한다. 각 부분을 나눠 기능을 부여하기도 한다.
- 사람의 몸은 약 7만개의 삼각형으로 구성된다.
- 일일이 모든것을 움직이는 것을 불가하여 단순화 작업이 필요하다.
- 가장 간단한것을 간단하게 제작된 물체를 움직이고 그려질 때, 나눠진 결과로 보여주는것. Tessellation shader를 이용하여 그릴 때 설명하기도 했다.
- 모델링 방법: 그냥 아티스트의 노력/ 3D캡쳐
Joint는 어떻게 생성할까
- 표준 위치구조가 존재. 이것에 맞게 만들고 이름까지 같으면 매핑이 쉬움.
- 뼈를 심는것은 직접할수도 있지만 요즘은 자동화 시스템이 있음
요약
- Body Model을 만든다.
- 뼈를 심는다.
- Rigging을 진행한다.
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에서 한계가 존재함.
Animationi 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를 뽑고, 그것에 따라 움직이게 함
- Coartculation: abo인 경우, a-b-o따로 보여지는 것이 아니라 연결되어 보이도록 해야함(연음법칙)
Eye movemnet
- 말하면서 눈도 같이 움직여야 자연스러움
- 눈동자가 고정되어있으면 어색. 조금씩 움직이면 고-퀄리티 애니메이션 완성
이제 남은것은?
- Hair, Cloth
- 이것들은 물리적 현상이 많음 => 역학을 이용해야함