1. 개요[편집]
| 애니메이션 블렌딩 Animation Blending | |
|---|---|
| 대상 | 포즈(본별 T·R·S 집합) |
| 연산 공간 | 로컬(부모 상대) 공간 |
| 회전 보간 | slerp / nlerp |
| 대표 구조 | 블렌드 트리, 블렌드 스페이스, 레이어 |
| 고질병 | 발 미끄러짐(foot sliding) |
걷기 클립과 뛰기 클립을 0.5씩 섞으면 “조깅”이 나온다. 나오면 다행이고, 보통은 발이 얼음판 위에서 미끄러진다.
애니메이션 블렌딩(animation blending)은 둘 이상의 애니메이션 포즈를 가중 결합해 하나의 최종 포즈를 만들어내는 기법으로, 유한한 개수의 클립으로 연속적인 동작 공간을 커버하기 위한 실시간 캐릭터 애니메이션의 핵심 연산이다. 스켈레탈 애니메이션이 “뼈를 움직여 메시를 변형하는 법”이라면, 블렌딩은 “그 뼈의 자세를 어디서 가져올 것인가”를 다룬다.
발상은 단순하다. 속도 0~2 m/s의 모든 걸음걸이를 다 캡처할 수는 없으니, 걷기와 뛰기 두 개만 모션 캡처로 찍고 사이는 수학으로 메꾼다. 자유도 축소 위에 다시 얹은 두 번째 압축인 셈이다. 문제는 인간의 보행이 두 자세의 선형 결합이 아니라는 것이고, 이 문서의 대부분은 그 사실을 우회하는 요령들이다.
2. 포즈 블렌딩의 수학[편집]
포즈 는 본 마다 이동 , 회전 , 스케일 를 갖는 배열이다. 두 포즈를 가중치 로 섞는 연산은 채널별로 다르다.
스케일은 이동과 마찬가지로 선형, 혹은 로그 공간에서 기하평균으로 섞는다. 회전만 사원수의 slerp를 쓰는 이유는 명확하다 — 회전군은 볼록집합이 아니라서 성분별 선형 보간을 하면 결과가 회전이 아니게 된다.
여기서 실무적으로 중요한 두 가지가 있다.
- 반드시 로컬 공간에서 섞는다. 모델 공간(루트 기준 절대 좌표)에서 두 포즈의 본 위치를 평균 내면 뼈 길이가 짧아진다. 팔을 뻗은 포즈와 접은 포즈를 반씩 섞으면 팔뚝이 줄어드는 참사가 그것. 부모 상대 회전을 섞으면 뼈 길이는 자동으로 보존된다.
- 개 포즈 블렌딩은 순서에 의존한다. slerp를 연쇄로 적용하면 결합순서에 따라 결과가 달라진다. 그래서 3개 이상을 섞을 때는 부호 정렬(반구 통일) 후 가중 nlerp — 가중합 하고 정규화 — 를 쓰는 것이 표준이다. 각속도 등속성은 포기하지만 순서 무관성과 속도를 얻는다.1
3. 블렌드 스페이스와 동기화[편집]
가중치를 어디서 얻느냐가 다음 문제다. 블렌드 스페이스(blend space)는 파라미터 공간에 클립을 배치해 두고, 현재 파라미터 위치에서 가중치를 뽑는 구조다.
- 1D — 속도 축 위에 정지·걷기·달리기를 놓고 인접 두 클립을 선형 보간.
- 2D — (전후 속도, 좌우 속도) 평면에 8방향 클립을 뿌리고 들로네 삼각분할로 삼각형을 찾아 무게중심 좌표를 가중치로 쓴다. 삼각분할 대신 각 샘플의 영향 반경을 겹치게 두는 그래디언트 밴드 방식도 흔하다.
그런데 가중치만 맞춘다고 되지 않는다. 걷기 클립이 1.2초, 달리기 클립이 0.7초일 때 각자 제 속도로 재생하면서 섞으면, 한쪽이 오른발을 디딜 때 다른 쪽은 왼발을 디디고 있다. 결과는 다리가 네 개 달린 듯 흐물거리는 포즈다. 그래서 동기화 그룹(sync group)을 묶어 클립을 정규화 시간 로 재생하고, 발 접지 지점을 마커로 표시해 위상을 강제로 맞춘다. 재생 길이는 가중 평균으로 정한다.
이 위상 정합을 빼먹으면 아무리 가중치를 잘 잡아도 걸음이 이상해진다. “블렌딩이 이상해요” 티켓의 절반은 여기다.
4. 가산 블렌딩과 레이어[편집]
가중 평균만으로는 표현이 안 되는 것이 있다. 달리면서 조준하고, 조준하면서 숨을 쉬고, 그 와중에 피격당하는 조합을 전부 클립으로 찍을 수는 없다.
가산 애니메이션(additive)은 클립을 절대 포즈가 아니라 기준 포즈와의 차이로 저장한다. 회전은 뺄셈이 아니라 켤레를 곱한다.
항등 사원수에서 차이 회전 쪽으로 slerp 한 뒤 베이스에 곱하는 것이 강도 의 가산 적용이다. 이렇게 하면 “상체를 8도 뒤로 젖히는 반동” 하나를 걷기·뛰기·앉기 위에 전부 재사용할 수 있다. 다만 기준 포즈가 어긋난 채로 캡처된 가산 클립은 캐릭터를 영구히 삐딱하게 만든다.
레이어는 본별 가중치 마스크를 둔 블렌딩이다. 하체는 이동 상태 기계가, 상체는 사격 상태 기계가 지배하고, 척추 근처에서 가중치를 서서히 떨어뜨려 이음매를 감춘다. 마스크 경계가 급하면 허리가 꺾인 것처럼 보이므로, 본 계층을 따라 가중치를 부드럽게 감쇠시키는 것이 요령이다.
5. 전이 — 크로스페이드와 관성 블렌딩[편집]
상태가 바뀔 때(걷기 → 구르기) 포즈가 순간 튀지 않게 하는 것이 전이 블렌딩이다. 상태 전환 자체는 보통 유한 상태 기계나 행동 트리가 관장한다.
전통적 방법인 크로스페이드는 전이 시간 동안 양쪽 클립을 모두 평가해 가중치를 0→1로 넘긴다. 단순하지만 대가가 있다. 전이가 겹치면 동시에 평가해야 하는 클립이 계속 늘어나고(전이 중에 또 전이가 걸리면 3개, 4개…), 무엇보다 두 동작의 산술 평균은 물리적으로 존재하지 않는 자세를 만든다. 가중치 곡선을 선형 대신 완만한 ease 곡선(베지어 곡선 핸들로 저장하는 게 흔하다)으로 바꾸는 것은 증상 완화일 뿐이다.
그래서 근래에는 관성 블렌딩(inertialization)이 표준으로 자리 잡았다. 전이 순간의 포즈 차이와 그 시간 미분(속도)을 한 번만 붙잡아 두고, 이후로는 새 클립 하나만 평가하면서 그 차이를 5차 다항식으로 감쇠시켜 얹는다.2 이전 클립을 계속 돌릴 필요가 없으니 비용이 전이 개수와 무관하고, 위치와 속도가 모두 연속이라 전환이 관성처럼 자연스럽다. 소스를 둘 유지하지 않으므로 “평균 포즈” 문제도 원천적으로 사라진다.
6. 루트 모션과 발 미끄러짐[편집]
블렌딩의 최종 보스는 발 미끄러짐이다. 원인은 구조적이다. 클립마다 보폭이 다른데 캐릭터의 실제 이동 속도는 게임 로직이 정하므로, 애니메이션이 그리는 보폭과 실제 이동량이 어긋나면 발바닥이 지면을 긁는다.
- 루트 모션(root motion) — 이동량을 게임 코드가 아니라 애니메이션의 루트 본 변위에서 뽑아낸다. 보폭과 이동이 정의상 일치하므로 미끄러짐이 사라지지만, 캐릭터가 애니메이터의 손에 조종당해 반응성이 떨어진다. 네트워크 동기화도 골치 아파진다.
- 재생 속도 워핑 — 이동 속도에 맞춰 클립 재생률을 조절한다. 싸지만 과하면 캐릭터가 종종거린다.
- 풋 IK — 역운동학으로 접지 구간의 발을 강제로 고정한다. 사실상 필수 후처리이며, 경사면 대응도 여기서 같이 한다.
7. 성능과 현실[편집]
포즈 평가 비용은 대략 (본 개수) × (활성 클립 수)에 비례하고, 여기에 블렌드 트리 노드마다 임시 포즈 버퍼가 필요하다. 군중 시뮬레이션처럼 캐릭터가 수백 나오면 이 비용이 스키닝보다 커지는 일이 흔하다.
- 애니메이션 LOD — 먼 캐릭터는 레이어를 끄고, 블렌드 트리를 가장 가중치 큰 클립 하나로 축약하고, 갱신 주기를 격프레임으로 낮춘다.
- 압축 — 키프레임을 양자화해 저장하고 디코딩 시 압축을 푼다. 대형 프로젝트에서 애니메이션 데이터는 텍스처 다음가는 용량 항목이다.
- 잡 병렬화 — 캐릭터 단위로 포즈 평가를 워커 스레드에 뿌린다. 본 계층 순회는 캐릭터 내부에서는 순차지만 캐릭터끼리는 완전 독립이다.
그리고 클립을 아무리 늘려도 조합 폭발을 못 이기겠다는 결론에 도달한 팀들은 모션 매칭 으로 넘어간다. 상태 기계와 블렌드 트리를 걷어내고, 매 프레임 모션 데이터베이스 전체에서 (현재 포즈 + 원하는 미래 궤적)에 가장 가까운 프레임을 검색해 그리로 짧게 블렌딩하는 방식이다. 리깅 노동을 데이터 용량과 검색 비용으로 바꾼 것이고, 그 짧은 전이를 감당하는 것이 결국 위의 관성 블렌딩이다.
8. 여담[편집]
- 블렌드 트리가 30개 노드를 넘어가면 아무도 그 그래프를 이해하지 못한다. 애니메이션 그래프는 게임 프로젝트에서 가장 조용히 썩어가는 자산이다.
- “달리기가 어색하다”는 피드백의 원인은 대개 클립이 아니라 전이 시간 0.2초라는 숫자 하나다.3
- 상체 조준 레이어의 가중치를 1.0으로 놔두면 캐릭터가 뒤를 돌아볼 때 척추가 사람이 낼 수 없는 각도로 꺾인다. 관절 한계 클램프는 블렌딩 뒤에 걸어야 한다.
9. 관련 문서[편집]
- 스켈레탈 애니메이션 · 모션 캡처
- 사원수 · 오일러각
- 역운동학 · 래그돌
- 유한 상태 기계 · 행동 트리
- 보간과 근사 · 베지어 곡선 · 들로네 삼각분할
- 군중 시뮬레이션 · 실시간 렌더링
10. Footnotes[편집]
-
nlerp는 가중합 후 정규화라 교환·결합법칙이 성립해 항 확장이 자명하다. 대신 보간 경로는 여전히 최단 호지만 각속도가 일정하지 않다. 전이 각도가 작은 애니메이션 블렌딩에서는 그 차이가 눈에 안 보이므로 실무는 대부분 nlerp로 산다. 부호 정렬(내적이 음수면 뒤집기)을 빼먹으면 캐릭터가 먼 길로 돌아 회전하는 고전적 사고가 난다. ↩
-
Bollo, D. (2016/2018). “Inertialization: High-Performance Animation Transitions in Gears of War”. GDC. 5차 다항식을 쓰는 이유는 시작점에서 값·1차 미분·2차 미분을 모두 지정하고 끝점에서 0으로 떨어뜨리려면 계수 6개가 필요하기 때문이다. 요컨대 애니메이션 전이를 감쇠 진동 문제로 다시 쓴 것. ↩
-
사람의 동작 전이는 등속이 아니다. 0.2초 선형 크로스페이드는 시작과 끝에서 속도가 불연속이라 “미끄러지듯 자세가 바뀌는” 느낌을 준다. 여기서 아티스트가 요구하는 것은 대개 더 짧은 전이가 아니라 더 부드러운 곡선이다. ↩