전통적으로 많이 사용되던 것
✔ Key frame animation
애니메이터, 디자인을 직접 만드시는 분들이 key 단위로 애니메이션 생성
특정 시간에 어떤 포즈를 가질 것인지 정의하는 것
linear interpolation만으로 정의할 수 없는 특징적인 움직임을 따로 정의하고 나머지는 interpolation 하는 것
well-suited for animating non-humanoid characters, fantastical creatures, or highly stylized movements.
✔ Procedural animation
도저히 애니메이터가 붙어서 할 수 없는 기괴한 것들 그런 것을 수학적으로 잘 모델링 하면 되는 것들.
알고리즘이나 룰, 시뮬레이션에 의존, 직접 만드는 것이 아니라 수학적인 계산을 통해 이런 움직임을 가질거야라고 정의하는 것
대표적으로 코사인, 사인과 같은 움직임이 있다. 이걸 다 키마다 움직이려면 힘드니까 주기 함수를 이용한 알고리즘을 통해 계산해 만든다
자동적으로 수행되거나 반복작업을 통해 시간과 노력을 줄일 수 있지만 목표를 달성하기 위해너는 추가적인 fine-tuning이 필요하다
ex) 촉수 괴물
요즘 들어 핫해진 것
Mocap
(Key frame animation 을 대체)
✔ Advantages
✔ Disadvantages
There are mainly five types of motion capture methods
Triangulation
→ 내가 어떤 마커의 삼차원 공간 상의 위치를 추정하고 싶다. 여러 카메라를 기준으로 얻은 distance 들을 가지고 마커가 붙어 있는 삼차원 공간 상에서 x y z 를 얻어내는 것.
→ 움직임을 하다보면 마커를 가리게 되기 때문에 카메라가 여러개 있어야 한다.
Passive : 빛을 쏘지 않거나 파워를 필요로 하지 않는 것
external light sources에 의존한다. 스스로 발광하지 않으니 카메라가 나를 향해 쏘는 빛을 이용
retroreflective material 반사를 잘하는 물질로 되어 있다. 카메라가 나한테 빛을 쏘면 이를 반사해서 돌려 주어 카메라가 마커를 감지하도록 한다.
마커들은 빞을 단순히 반사하는 역할을 한다.
카메라들이 빛을 쏘고 받기 위해 그 자리에 존재
빛이 reflective markers를 때리면 카메라를 향해 튕겨져 나간다. (detect and track 하기 위해)
캡쳐된 이미지는 각 프레임마다 프로세스 되어서 각각 어떤 마커인지 판단 해주어야 한다.
그 이후엔 Triangulation을 이용해 위치를 찾아나간다.
→ x y z 값만 가지고 만들기는 힘들다. 원래 머리인지 어깨인지 어디 붙어있던 것인지를 찾는 과정을 푸는 것이 쉽지 않다.
Active : 마커가 능동적으로 빛을 방출
마커에서 light를 액티브하게 뿜는다
마커는 power source가 필요하다 → 전자 회로가 필요하다.
마커는 unique IDs를 가진다.
→ Passive 방식은 마커가 id를 가지지 않았다. 그래서 x y z 포지션으로부터 내가 어디에 달려 있는 것인지 추정을 해야했는데 Active 방식에서는 빛을 쏘는 패턴 같은 것을 조종해서 나 몇번째 마커야 하는 것이 가능하다. → post processing이 필요가 없다
각가의 마커가 어디에 붙어 있는것인지 실시간을 바로 추적할 수 있다.
카메라는 마커가 쏘는 빛을 받아들이는 역할
Cost
: Passive > Active
→ Active는 마커가 더 비싸다
Marker Complexity
: Passive > Active
→ Passive 방식은 마커를 액터의 몸에 달기도 쉽고 가볍다. Active 마커는 빛이 잘 분산되게 잘 달아야 하고 하니 좀 더 복잡하다
Lighting dependency
: Passive < Active
→ Passive 마커는 어두운 공간에서는 잘 되지만 빛이 많으면 잘 감지하고 트랙킹하기가 어렵다. 반면에 active는 이러한 것으로부터 영향을 덜 받는다.
Marker occlusion
: Passive < Active
→ Active 마커가 occlusion issue(카메라에 마커가 안 보이는 것)에 좀 더 잘 핸들링 한다. passive는 추정을 해야하는데 occlusion이 일어난다는 것은 놓쳤다는 이야기인데 놓친 것이 다른 것을 추정하는데 영향을 준다. 이것이 내가 놓친 것인지 팔꿈치인지 헷갈린다는 것이다.
Advantages
Disadvantages
⇒ 모션캡쳐실을 구현하기 힘들 때
Why does passive optical motion capture (POMC) require postprocessing?
- 내가 얻은 point cloud (x y z ) 가 어떤 layout 마커에서 오는거지? 를 연결시켜주는 작업
- POMC가 AOMC보다 좀 더 많이 쓰인다
→ 저렴하고 사용하기 간단하고, 많은 전문가들이 이미 해봤기 때문에 그들을 그냥 고용해서 쓰면 되서 친숙하다- POMC는 post-processing 을 필요로 한다
→ accuracy, data quality를 올리기 위해
Resolving marker ambiguity
(marker labeling)
Reducing noise
Gap filling
Rigging and retargeting
Constraint enforcement
Cleanup and optimization
occlusion & Ghost Marker
POMC 가 각각의 마커들이 어떤건지 구별하는것이 어려웠다. → 이게 문제
distinguishing 하는 것도 어려워 죽겠느데 id도 없다.
이 문제가 실제 모션 데이터와 다른 결과물이 나오게 된다.
이 문제를 해결하기 위해 manual or automatic labeling methods 를 사용
→ SOMA: Solving Optical Marker-Based MoCap Automatically, 2021 CVPR 이 논문에서 자동으로 해결하는 것 제시
A mocap point cloud (MPC) is a time sequence with T frames of 3D points
MPC
: mocap point cloud / Point Cloud SetP
: MPC에 있는 한 점T
: P가 나와야 하는 총 개수 Goal : MPC가 있을 때 이 친구가 내가 실제로 촬영할 때 쓴 marker layer와 연결을 해주는 것
가 L에 어디에 연결되어야 하는지
l
ㅁ : Marker Lable / L : 몸에 달린 총 Marker Label의 수To process such data, SOMA exploit multiple layers of self-attention
⇒ 중요한 것 같은 데이터에 조금 더 focusing을 하겠다.
focus to the small but important parts of the data
⇒ 무엇이 중요한지는 학습하는 것은 gradient descent를 통해 훈련된다.
⇒ word embedding : 비슷한 특징을 가지는 것들이 비슷한 영역에 있도록 만들어 주는 것.
⇒ attention : 벡터화 한 다음에 나와 연관이 있는 것을 찾는 것
✅ 용어 정리
weight가 높다는 것이 나와 연관이 높다는 뜻
- Q : 들어오는 data, 판단할 녀석
- K : Q랑 관계가 어떻게 돼?
- V : Q랑 관계가 어떻게 돼?
- : 벡터의 dimesion을 몇 차원으로 했는가
→ 앞의 예시에서는 7
“The animal didn’t cross the street, because it was too tired”
- it은 animal과 연관이 깊다. didnt 이런 애들은 weight가 낮다.
Query : 구하고자 하는것 → it과 연관된것이 궁금
it을 word embedding을 통해 3차원 벡터로 보낸다.
Key, Value : animal도 3차원 벡터로 보낸다.
를 계산 → Attention Score 를 만듬
→ animal을 traspose 해야하니 세로로 눞힌다. 그리고 곱한다. 1x1 결과
→ it 과 animal를 통해 attetion score (둘 사이의 관계) 를 구함
이걸 구하고 SoftMax 를 해준다.
→ SoftMax : 데이터를 넣으면 0과 1사이로 적당히 분류해주는 필터 함수
⇒ 최종 결과 : **it**
과 문장 전체에 해당하는 attention에 대해 뭉개진 value
Self attention
ex) animal은 문장 내에 누구와 가장 연관이 있지?
앞에서는 Query와 얼마나 연관이 있는지 찾는 것이었다. self는 이 문장 내에서 내가 어디와 가장 연관이 있는지 찾는 것이다.
SOMA에서 이것을 왜 사용할까?
→ 데이터를 판단하는데 있어 이거 들어왔는데 이 친구 머리일까? 찾아야하한다. self-attention에서는 주변 데이터를 보아 하거니 얘랑 연관이 많은 데이터는 이 친구 인 것 같은에 얘네를 미루어 보아 판단했을 때 이 녀석은 얘가 맞는 것 같아요 라고 판단을 하면 안된다. 이게 셀프를 사용하는 이유이다. 얘네는 다른 데이터가 필요가 없고 주어진 point cloud 데이터에서 머리와 연관이 많은 데이터는 어깨하고 목 주변에 있는 데이터 였다. 근데 걔네 구해 놓은 것 보니까 너 이거 머리 데이터 맞는 것 같아 라고 판단을 내려주길 원함.
self- attention을 multi layer로 사용한다.
→ self attention을 사용한다는 것은
데이터를 1234를 판단 했는데 1은 2하고 연관이 있는 것 같아를 찾는 것.
이것을 한 번 더 self-attiontion한다는 것은 3이 2 하고 연관이 있는데 2하고 연관이 있다는거야. 그래서 나는 3을 판단하는데 있어서 2를 0.5만큼 쓰고…
해당 포스트는 강형엽 교수님의 게임공학[GE-23-1] 수업을 수강하고 정리한 내용입니다.