[Computer Animation] Human Animation

후이재·2020년 11월 25일
0

시작하며

  • 사람의 애니메이션이 가장 많이 쓰인다.
  • 사람의 애니메이션은 상체, 하체, 얼굴로 나눌 수 있다.
  • 단순하게 움직이거나, 다른 물체화 상호작용을 하거나, 다양한 움직임이 존재한다.

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의 움직임

  • 90도였다가 둔각이었다가 반복

결국! 모두 하나의 사이클에 대해 반복적인 움직임 가짐

  • 이 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
  • 이것들은 물리적 현상이 많음 => 역학을 이용해야함
profile
공부를 위한 벨로그

0개의 댓글