HumanAnimation

나무랄데없는·2022년 12월 15일

ComputerGraphics

목록 보기
5/6
post-thumbnail

시작하며

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

사람의 Animation 구현방법

  1. Physical laws
    근육의 특성을 이용하여, 뼈에 근육을 붙이고 시뮬레이션 하기
    장점: 굉장히 정확한 움직임 얻을 수 있음
    단점: 너~무 오래걸림
  2. Hierarchical Modeling
    신체를 계층구조로 나타내어 각 관절의 회전을 받아 시뮬레이션 하기
    각 관절마다 상대적인 회전값을 가지며 여기에 제약사항을 넣어 실제와 가깝게 표현 가! (ex.팔꿈치 회전의 제약)
    팔꿈치를 30도 회전하고, 어깨를 50도 회전해도 상대적인 회전값은 그대로. 전체적으로는 바뀜
    - Articulation object: 관절이 있는 물체
    - Articulation variable: 각도
    - End effector: 가장 끝 부분(손목 또는 손바닥이라고 할 수 있음)
  3. Body Modeling
    Polygon으로 형태를 만들어 표현한다 box로 표현한 경우, 서로 겹치게 만들어 관절을 중심으로 구부리면 빈공간이 생기지 않도록 한다.
    피부로 덮어 표면을 표현한다. 각 부분을 나눠 기능을 부여하기도 한다.
    사람의 몸은 약 7만개의 삼각형으로 구성된다.
    일일이 모든것을 움직이는 것을 불가하여 단순화 작업이 필요하다.
    가장 간단한것을 간단하게 제작된 물체를 움직이고 그려질 때, 나눠진 결과로 보여주는것. Tessellation shader를 이용하여 그릴 때 설명하기도 했다.
    모델링 방법: 그냥 아티스트의 노력/ 3D캡쳐

2. Hierarchies in Animation

  1. 순 운동학(Forward Kinematics) (FK)
    • time 마다 angle을 하나씩 정해주기..
    • 그러고나서 interpolation
    • Art의 영역장: 원하는 움직임 가능단: 사람의 노력이 필요함
  2. 역 기구학(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에서 발생할 수 있는 문제

  1. Damping factor조금만 움직여도 더 움직이는걸로 여겨서, 결국엔 덜 움직이게 하기 위한것!=> 그러면 왔다갔다 하는 현상이 줄어듦
  2. SingularitySingular위치에 goal 있으면 답 안나오는 문제.(일직선상에)기본 해결법: Singular한 곳에 빠지지 않게 하기그래도 안되면: 포기하거나.. 다른 방법을 생각해보거나.. 뒤로 물러나보기
  3. 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의 움직임

  • 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에서 한계가 존재함.

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
  • 이것들은 물리적 현상이 많음 => 역학을 이용해야함
profile
예비 개발자

0개의 댓글