센로그
7. Motion Capture and Character Animation 본문
◆ Motion Capture란?
Motion Capture는 물체나 사람들의 움직임을 기록하는 것을 의미함.
초당 몇번씩 움직임을 샘플링해서, 디지털 데이터로 바꾼다.
이 기록 데이터는 2D 또는 3D 캐릭터 애니메이션을 만드는 데 쓰임!
만약 얼굴이나 손가락, 또는 미묘한 표정이 포함되면 performance capture라고도 불림.
(구분하는 이유는, 얘네는 캡쳐하기 까다롭기 때문. 세밀하고 정교한 캡쳐가 필요함.)
보다 진짜같고 자연스러운 애니메이션을 만드는 것을 목표로 Motion Capture을 사용한다.
◆ Character Animation을 만드는 몇가지 방법들
캐릭터 애니메이션을 생성하는 방법들로는 몇가지가 있다.
- key frame animation
- procedural animation
- motion capture
■ Key frame animation
전통적으로 애니메이터들이 많이 사용하는 방법으로, 키 프레임(주요한 프레임)마다의 포즈를 정해주고 그 사이는 보간함으로써 애니메이션을 만들어내는 방법
■ Procedural animation
수학적인 구현(알고리즘, 규칙, 시뮬레이션, 수식 등)을 통해서 캐릭터의 움직임을 결정하는 방법.
유체 및 섬유 시뮬레이션, IK.. 등을 포함함. 수학적으로 모델링할 수 있는 괴물 움직임(촉수 같은거)도 될 수 있음.
■ Motion Caputre [NEW!]
실제 움직임을 샘플링해서 애니메이션으로 만드는 방법
▶ 장점:
- Realism. 사실적임. 움직임의 미묘한 느낌이나 차이도 그대로 캡쳐하기 때문.
- Efficiency. 효율적임. 애니메이터가 한땀한땀 만드는 게 아니라, 실제 행동을 찍는 것이기 때문.
- Consistency. 일관성 있음. 같은 액터가 같은 상황에서 연기를 하면 되기 때문.
- Performance-driven. 행동이 직접적으로 애니메이션에 적용됨. 과장된 애니메이션을 만들고 싶으면, 과장된 행동을 하면 됨!
▶ 단점:
- Cost. 특수 수트, 마커, 카메라들, 소프트웨어, 액터.. 비용이 높음.
- Limited Flexibility. 실제 사람이나 동물은 괜찮은데, non-human인 경우는 쉽지 않음. 다리 7개 달린 괴물은 캡쳐 못 함.
- Cleanup and refinement. 한번에 쓸만한 데이터가 나온다기 보다는, 후처리를 많이 해줘야 함.
- Dependence on performer. 연기하는 액터에 따라서 퀄리티가 좌우됨
◆ Motion Capture Methods and Systems
모션 캡쳐에는 다양한 방법들이 있음.
대표적으로 다섯가지 정도를살펴볼 것임.
- OMC (Optical Motion Capture)
- POMC (Passive OMC)
- AOMC (Active OMC) - IMC (Intertial Motion Capture)
- Magnetic Motion Capture
- Mechanical Motion Capture
- Markerless Motion Capture
◆ Motion Capture Methods and Systems
- OMC (Optical Motion Capture)
여러 대의 카메라로 액터의 몸에 단 마커를 트래킹
- capture space 주변의 여러 대의 카메라들을 사용해, 액터의 몸에 달린 마커들을 트래킹함으로써 movement를 캡쳐함.
- Triangulation 사용해서 3D상의 위치 추정
- 두 종류가 있음!
- POMC (Passive Optical Motion Capture)
- AOMC (Active Optical Motion Capture)
※ Tiangulation (삼각 측량법)
여러 대의 카메라를 통해 얻은 distance를 이용해 어떤 마커의 3차원 공간상 위치를 추정하는 것.
1) POMC
액터의 몸에 달려있는 마커가 빛(특히 카메라가 쏘는 빛) 반사
마커가 액터의 몸에 붙어있긴 하는데, 스스로 뭔갈 하는 건 아니고 그냥 붙어있긴만 함. 수동적임(passive)
대신 외부의 빛(특히 카메라가 쏘는 빛)을 반사함으로써, 나 여기있어~ 하고 알려줌.
- 카메라는 반사된 빛을 통해서 detect(마커를 감지)하고, tracking함. (연속된 몇 프레임동안의 마커의 움직임을 트래킹. traklet이 여기 쓰이는듯). (두 개념 차이 구분하자)
- 캡쳐된 이미지는 각 프레임마다 처리되어 마커의 위치를 식별함.
- 움직이다보면 마커를 가릴 수 있기 때문에, 카메라가 많음.
- 이 여러 대의 카메라 뷰로부터 얻은 정보를 기반으로, 시스템에서 triangulation을 통해 마커들의 3D 포인트를 추정함.
그리고 digital skeleton을 만듦!
2) AOMC
마커가 스스로 빛을 내면서 위치를 알려줌
마커가 스스로 라이트(보통은 적외선 LED)를 쏴서, 자신의 위치를 알려줌. 능동적임(active)
- 스스로 라이트를 쏘는 만큼 당연히 파워가 필요함. 그리고 빌트인 회로를 가지고 라이트를 제어하기도 함.
- 이 마커들은 유니크한 ID를 가지고 있다!! 따라서 passive처럼 이 마커가 어디에 붙어있는 마커인지 열심히 추정할 필요가 없음. => post processing이 불필요함.
- 당연하게도 이 LED 마커들을 track하기 위해서, 주변에 적외선(infrared) 카메라가 둘러싸고 있어야 함.
- 이 여러 대의 카메라 뷰로부터 얻은 정보를 기반으로, 시스템에서 triangulation을 통해 마커들의 3D 포인트를 추정함.
그리고 digital skeleton을 만듦!
■ POMC vs AOMC
- Cost: 당연히 LED나 파워가 필요없는 passive가 더 저렴함
- Marker Complexity: 당연히 active가 더 복잡함
- Lighting dependency: passive는 어두운 곳에서 해야 잘됨. 카메라 빛 이외의 다른 빛이 들어오면 그 빛도 반사하기 때문.
- Marker occlusion: 복잡한 동작을 하면 마커가 가려진다. passive의 경우 누가 가려졌는지 추정하기 어렵지만, active의 경우 고유한 ID가 있기 때문에, 누가 가려졌는지 추정할 수 있음.
◆ Motion Capture Methods and Systems
- IMC (Inertial Motion Capture)
카메라 없이 IMU센서가 붙은 옷을 직접 입고 모션캡쳐
- 가속도, 각속도, 자기장 방향
키워드는, "카메라 없이!!"
움직임을 캡쳐하기 위해서 카메라를 사용하는 대신에, 작은 센서(IMU 센서)들이 붙은 옷을 착용함.
이 센서들이 가속도, 각속도, 자기장 방향을 측정해서, 액터의 position과 방향을 결정함!
▶장점 :
-Portability and flexibility. 휴대하기 쉽고 유동성이 좋다.
-No occlusion issue. 입음으로써, 액터의 몸에 붙어있는 센서를 직접 감지하기 때문에 센서가 가려져있어도 occlusion 이슈가 없다.
-Faster setup. 카메라의 정확한 배치와 보정, 특수 조명이 필요하지 않아서 세팅이 쉽고 빠르다.
-Real-time feedback. 실시간 모션 데이터를 제공할 수 있어서, 캡처 세션 중 즉각적인 피드백이 가능하다.
▶단점 :
-Positional accuracy. IMU센서는 지구의 중력장을 이용하는 것이기 때문에, 정교하게 다루기가 힘듦! <-이게 젤 문제
-Magnetic interference. IMC 시스템은 자성을 이용하기 때문에, 주변 자석 물체나 metal 물체에 영향을 받을 수 있음.
-Battery life. 배터리를 사용하기 때문에 모션캡쳐를 오래 진행할 때는 도중에 충전이나 교체가 필요함.
◆ Motion Capture Methods and Systems
- 기타 실험적인 모션캡쳐 기술들
■ Magnetic Motion Capture
IMC에서 가속도, 각속도 빼고 자기장만 써서 하는 느낌.
센서가 송신기가 생성하는 자기장 변화를 감지해 3D position 데이터로 바꿈.
■ Mechanical Motion Capture
그림과 같은 기계적인 장치를 착용해서, 이 기계의 움직임을 추정해서 움직임 데이터를 캡쳐함.
불편하고 움직임이 제한되어서 인기가 덜함.
■ Markerless Motion Capture
마커 굳이 있어야 돼? 그냥 마커 안쓰고 한번 해보자~ 하는 아이디어.
depth-sensing 카메라나, 기계학습을 통해 구현함. 또는 그 둘을 합쳐서 구현함.
잠재력이 높아서, 굉장히 활발하게 진행되고 있는 연구이다.
월드컵 해설 뷰 정도로 멀리 있는 축구선수 움직임 따와서 애니메이션으로 만들기도 함!! wow
◆ Post-processing of POMC
POMC의 후처리 과정에는 어떤 게 있냐? 에 관한 이야기.
POMC가 AOMC보다 마니 쓰임. 더 저렴하고, 쓰기 간편하고, 좀 더 친숙하기 때문.
POMC를 쓰려면, 정확도를 높이기 위한 Post processing이 필요하다고 했었다!
그럼 어떤 Post processing들이 있을까?
1) marker ambiguity
마커 모호성을 풀어야 한다. 마커가 각자 id가 없기 때문에 추정해서 구분을 해줘야 한다는 것. 빠르거나 복잡한 움직임을 하면, 어디에 있는 마커인지 구분하기 어려워짐. 그래서, 마커들을 정리하는 과정에서 에러가 적도록 해줘야 한다.
2) Reducing noise
센서를 이용해서 모션을 캡쳐하면, 노이즈가 심하게 들어가기 때문에 해결을 해줘야 함.
카메라 해상도, 라이팅 컨디션, 마커의 잘못된 반사 등으로 인해 노이즈가 끼는데, 이런 부분을 해결해줘야 함.
3) Gap filling
마커가 가려지는 경우, 3차원 position이 정확히 계산되지 않아서, 결과 데이터 사이에 갭이 생김.(없는 녀석이 생김)
이런 경우 보간을 해주거나 수동으로 마커 위치를 조정해서 연속적인 움직임을 만들어줄 수 있음.
4) Rigging and retargeting
모션 캡처 데이터를 애니메이션에 사용하려면 데이터를 디지털 스켈레톤에 매핑해야 함.
이를 위해 리깅(Rigging) 과정을 거쳐 디지털 스켈레톤에 관절과 뼈를 생성하고, 리타겟팅(Retargeting) 과정을 통해 마커의 motion 데이터를 디지털 스켈레톤의 해당 관절과 뼈에 매핑함.
5) Constraint enforcement
내가 지금 모션 데이터를 통해 3차원 데이터를 얻는 과정 자체는, 우리 몸이 구조상 할 수 있는 모션인지 고려한 게 아닌것임! 따라서 constraint를 향상해서 구조상 불가능한 친구들을 없애거나 조정해줘야 함
6) Cleanup and optimization
초기의 후처리 작업 이후에도, 추가적인 모션 데이터 정제 및 최적화 작업이 필요함.
예를 들자면 마커가 없어지기도 하지만, 여러 개를 반사할수도있고, 혼선이 일어나서 여러 카메라에서 다양하게 반사할수도잇음.. 이런애들을 ghost marker라고 부르는데, 얘네를 수동으로 없애주거나 자동으로 없애는 알고리즘을 써야 함
◆ Motion Capture Labeling Problem
marker들의 occlusion 이슈, 빠르고 복잡한 움직임, 또는 시각적 모호성으로 인해서,
POMC 시스템은 마커들 사이에서 누가 누군지 구분하기 힘들어 함.
그래서 실제와는 좀 다른 결과가 나오는 문제가 발생하기도 함.ㅠㅠ
=> 자동으로 이 문제를 해결하려는 방법(자동 라벨링)이 연구되고 있음!! 대표적으로, 다음 논문을 살펴볼 것임.
"SOMA: Solving Optical Marker-Based MoCap Automatically, 2021 CVPR"
◆ SOMA: Mocap Labeling Problem
각 마커에 자동으로 라벨을 할당하는 방법론
우리의 목적은, 모션캡쳐 데이터의 각 marker들에다 정확한 라벨을 할당하는 것이다.
우선 사용되는 용어정리부터~
[ 용어 정리 ]
ㆍMPC
모션 캡쳐 결과 데이터 형태를 의미함.
Timestep t는 1~T 사이에 존재함.
ㆍPt,i
MPC의 한 점으로, P몇프레임, 몇번째 의 형태로 이루어져 있음.
마커를 의미하고, 포인트 클라우드의 형태.
P3,7이면, 3번째 프레임에서의 7번째 데이터를 의미함.
ㆍnt
t 프레임에서 데이터의 개수
ㆍL
마커 라벨의 집합을 의미함. 마커가 M개 있다 하자.
n번째 마커 라벨을 ln이라고 할 때, 마커 라벨의 집합 L = {l1, ... , lM, null}로 표현될 수 있다. (null은 ghost marker의 라벨)
이때 L의 크기는 M+1이 될 것. (하나는 고스트)
※ 유효한 포인트 라벨들과 해당 포인트의 tracklet들은 다음 세 가지 constraint들을 따른다.
C1. 각 Pt,i (t프레임에서의 i번째 포인트 클라우드)는 단 하나의 label에만 연결될 수 있다. (반대도 성립)
C2. 각 Pt,i는 단 하나의 tracklet에만 연결될 수있다. (tracklet은, 연속된 프레임에서의 움직임을 의미. 이 움직임은 이 P꺼야! 를 알려줌.)
C3. 고스트 마커 라벨에는 여러 개의 포인트가 연결되어도 된다.
◆ SOMA: Self-Attention on MPC
SOMA의 input은, sparse(드문드문)하고, 순서가 없는 point들로 구성된 단일 frame이다.
이들은 occlusion과 ghost point로 인해서, 각각 timestamp마다 cardinalilty가 다양할 수있다.
(cardinality란, 집합 원소의 개수. 즉 겹치지 않는 원소의 개수를 의미함.)
이런 데이터를 처리하기 위해, SOMA는 self-attention을 이용한다.
◆ Attention 이란?
token을 word embedding해서 벡터를 만들고, 해당 토큰에 대한 가중치 계산.
Q, K, V를 사용해 weighted된 평균을 구함.
우리가 무언가를 이해할 때 사용하는 '집중' 을 모방한 것이다. 우리가 뭔가에 집중하면, 그 집중한 물체는 또렷하게 보이지만 주변 환경은 비교적 흐려보임. 이와 비슷하게, 가장 중요해보이는 것에 더 집중을 해서 데이터를 식별하는 기술을 Attention 이라고 함!
※ 어떤 데이터 부분이 다른 부분보다 중요한지를 학습하는 것은 맥락에 따라 달라지며, 이는 경사 하강법(gradient descent)을 통해 학습됨.
토큰 ti가 주어지면, 인공 신경망은 각 ti에 대해 가중치 wi를 계산합니다. (여기서 wi는 음이 아닌 값이며, ∑𝑤i = 1의 속성을 가집니다.) 각 ti에는 word embedding으로부터 계산된 값 벡터 vi가 할당됩니다.
예를 들어보자. token cat을 넣었을 때, word embedding을 통해서, 맨 왼쪽 그림과 같이 벡터로 만들어줌
Cat을 living being, feline, human…등의 기준으로 평가했을 때 점수를 판단한 것. (0.6, 0.9, 0.1...)
이를 통해 token을 벡터화 할 수 있음. 그림에서는 7개의 축 상에 있도록 한 것 ㅇㅇ
Cat하고 kitten은 비슷비슷 할것임~ 따라서 가운데 그림처럼 공간상 비슷한 영역에 있음.
이처럼 비슷한 애들을 비슷한 영역에 있도록 하는 게 word embedding 과정
token으로부터 얻은 워드 임베딩된 벡터가 주어졌을 때, Attention의 output은 weighted된 평균(∑ wi vi)이다.
다음과 같이 Query(Q), Key(K), Value(V)값을 사용해, Query의 attention을 구할 수 있다.
dk는 워드 임베딩 벡터의 차원을 의미함. token cat의 dk는 7차원.
※ softmax 함수는 값을 0~1 사이로 만드는 필터 함수를 의미함.
정규화함수, 활성화함수로도 불림
"The animal didn't cross the street, because it was too tired" 라는 문장이 주어졌다고 하자.
위 문장에서 "it"은 "animal"과 연관이 많다. "animal"에 관한 "it"의 attention을 계산해보자.
일단, it과 animal을 3차원 공간으로 임베딩해보자.
it이랑 관계있는 애가 누구야~? 를 구할거니까, 구하려는 it을 Query로 둠.
를 계산해보자. 이 값은 Q와 K사이의 유사도를 나타내는 점수로, Attention Score이라고 불림.
이때 너무 큰 Value 때문에 gradient가 사라지는 걸 방지하기 위해서,
로 나누어주도록 함. (위에서 언급한 Query's Attention 수식 참고~)
(key 벡터의 차원 수가 증가할수록 내적 값이 커지기 때문)
이렇게 하면 animal에 대한 it의 attention을 구한 것! (1:1 Attention)
그런데 우리는, animal에 대해서만 구해야 하는 게 아니라 모든 Key들에 대해서 it의 attention score를 구해야 함.
그리고 그중에서 가장 높은 Attention score를 가진 Key를 뽑아서 it과 관련이 가장 많구나! 를 알아야 하는 것.
그러므로 아래와같이 1:N Attention을 통해, 모든 Key에 대해서 Query의 attention score를 측정함.
그러고나서 Sofrtmax로 정규화해줌으로써, Attention Probability를 구할 수 있음. (도합 1)
이 값들(Attention Score이나, Attention Prob)은 Q가 얼마나 K와 관련이 있는지를 나타낸 값임!
Attention Prob과 Value를 다시 곱해주면, 최종적으로 Query "it"의 Attention을 구할 수 있음.
이는 attention 확률을 고려한 단일 벡터를 의미함.
이걸 it에만 하는 게 아니고, 모든 token으로 다 함.
그러면 결국 그림과 같은 N:N Attention이 될 것~
◆ Self-Attention 이란?
Q,K,V를 모두 동일하게 사용하는 Attention을 의미함.
Q와 다른 데이터를 가져와서 K,V로 사용하는 게 아니라, 내 자신 안에서 사용하는 것.
물론 Q, K, V의 기원은 같으나 최종 값은 학습을 통해 달라진다.
■ SOMA와 Self-Attention
self-attention을 통해서 어떤 point cloud P와 가장 관련있는 L을 찾아서, Labeling해줌.
다시 SOMA로 돌아와보자!
빨간색이 attention의 양을 나타냄.
SOMA에서는 self-attention을 통해서 어떤 point cloud P와 가장 관련있는 L을 찾아서, Labeling 해줌.
그림에서 보여지듯이, self-attention 네트워크는 몸의 공간 구조와 부위 간의 상관관계를 파악했음.
SOMA는 self-attention을 멀티 레이어로 사용함.
즉, 3이 2와 연관이 있는데, 2와 연관있는 걸 보니 1도 있네?
그럼 3을 판단하기 위해서 2를 0.5만큼 참조하고, 1을 0.05만큼 참조할게! 이런 느낌.
그림에서는 k개의 self-attention 레이어를 거쳐서 attention 확률을 출력하는 것~
관련있는 것의 관련있는 것까지 판단할 수 있기 때문에 정확도가 더 올라가게 됨.
'게임 > Inverse Kinematics' 카테고리의 다른 글
6. Heuristic Inverse Kinematics Algorithms (0) | 2023.05.30 |
---|---|
5. Quasi-Newton Method for Inverse Kinematics (0) | 2023.05.29 |
4. Newton Method for Inverse Kinematics (0) | 2023.05.29 |
3. Jacobian Inverse Methods for Inverse Kinematics (0) | 2023.05.27 |
2. Numerical Solution of Inverse Kinematics (0) | 2023.04.25 |