Artoke

리깅: 논문 — Skinning Mesh Animations: 본 추정과 웨이트의 최소제곱

애니메이션을 거꾸로 풀면 뼈가 나온다

보통 캐릭터 애니메이션은 리거가 뼈대를 심고, 웨이트를 칠하고, 애니메이터가 뼈를 움직이는 순서로 만들어진다. 그런데 반대 방향의 문제도 있다. 뼈 없이 정점만 프레임마다 움직이는 메시 시퀀스 — 물리 시뮬레이션 결과라든가, 스캔으로 캡처한 변형 데이터 — 가 이미 손에 있을 때, 여기서 뼈와 웨이트를 자동으로 뽑아낼 수 있을까?

James와 Twigg가 SIGGRAPH 2005에 발표한 「Skinning Mesh Animations」는 이 역문제를 정면으로 다룬 논문이다. 답은 "가능하다"이고, 방법의 뼈대는 놀랄 만큼 고전적이다. 클러스터링으로 준강체 덩어리를 찾고, 최소제곱법으로 웨이트를 푼다. 스키닝 수업에서 배우는 그 공식이 실제 연구에서 어떻게 미지수가 되고 방정식이 되는지 보여주는 대표적인 사례라, 수식을 따라가 볼 가치가 충분하다.

출발점: 스키닝 공식을 다시 읽기

선형 블렌드 스키닝(LBS)의 공식은 이렇다.

기호를 하나씩 풀면 이렇다. 번째 정점의 기준 자세(rest pose) 위치를 나타내는 벡터다. 번째 본이 만드는 변환 행렬로, 그 본을 따라가는 점이 어디로 이동·회전하는지를 담는다. 는 정점 가 본 를 얼마나 따라갈지를 정하는 웨이트이고, 는 본의 개수다. 합이 1이라는 제약 은 "각 본이 데려가려는 위치들의 가중 평균"이 되도록 만드는 조건이다.

리깅할 때는 를 사람이 만들고 가 결과로 나온다. 이 논문은 관점을 뒤집는다. 프레임 마다 변형된 정점 위치 주어진 데이터이고, 찾아야 할 미지수다. 미지수 두 종류가 곱으로 얽혀 있어서 한 번에 풀면 비선형 문제가 되지만, 저자들은 이를 두 단계로 쪼개 각 단계를 선형에 가깝게 만든다. 먼저 본을 찾고, 본을 고정한 채 웨이트를 푼다.

1단계: 회전의 지문으로 준강체 덩어리 찾기

뼈란 결국 "함께 강체처럼 움직이는 표면 조각"이다. 그래서 논문은 메시의 삼각형마다, 기준 자세에서 각 프레임으로 갈 때의 회전을 계산한다. 삼각형 하나는 세 정점과 법선으로 자기만의 좌표계를 정의할 수 있으므로, 프레임 에서의 회전을 추정할 수 있다. 이 회전들을 시퀀스 전체에 걸쳐 이어 붙이면 삼각형마다 하나의 긴 특징 벡터 — 말하자면 "움직임의 지문" — 가 생긴다.

같은 뼈에 붙은 삼각형들은 애니메이션 내내 거의 같은 회전을 겪으므로, 이 지문이 서로 비슷하다. 논문은 지문 공간에서 mean shift 클러스터링을 돌려 비슷한 것끼리 묶는다. 이 방식의 좋은 점은 클러스터 개수를 미리 정해줄 필요가 없다는 것이다. 데이터가 스스로 "이 애니메이션에는 준강체 부위가 몇 개 있다"고 말하게 된다. 각 클러스터가 곧 하나의 대리 본(proxy bone)이 되고, 어느 클러스터에도 확실히 속하지 않는 삼각형 — 출렁이는 천이나 살처럼 유연한 부위 — 은 나중에 여러 본의 웨이트 혼합으로 처리된다.

클러스터가 정해지면 본의 변환은 쉽게 나온다. 클러스터에 속한 정점들이 기준 자세에서 프레임 의 위치로 가장 잘 옮겨지도록 하는 강체 변환 를 프레임마다 맞추면 된다. 점 대응이 이미 알려져 있으므로 이는 절대 방향(absolute orientation) 문제라 불리는, 닫힌 형태의 해가 있는 고전 문제다.

리깅: 논문 — Skinning Mesh Animations: 본 추정과 웨이트의 최소제곱 도식

2단계: 웨이트는 정점마다 하나의 최소제곱 문제

본의 변환 가 모두 정해지고 나면, 남은 미지수는 웨이트뿐이다. 여기서 문제가 갑자기 다루기 쉬워진다. 정점 하나에 대해, 모든 프레임에서의 재현 오차를 최소화하는 웨이트를 찾으면 된다.

여기서 는 프레임 수, 는 프레임 에서 관측된 정점 위치, 는 벡터의 길이(오차의 크기)다. 핵심은 — "본 가 이 정점을 데려갔을 위치" — 가 이제 전부 계산 가능한 상수라는 점이다. 미지수는 뿐이고, 식은 웨이트에 대해 선형이다. 즉 정점 하나마다 작은 최소제곱 문제 하나가 생기고, 이것들은 서로 독립이라 병렬로 풀 수 있다.

다만 제약이 붙는다. 웨이트 합이 1이어야 하고( ), 논문은 여기에 비음수 조건 까지 요구한다. 수학적으로만 보면 음수 웨이트를 허용할 때 오차가 더 줄어들 수 있는데도 굳이 막는 이유가 재미있다. 음수 웨이트는 학습에 쓴 프레임에서는 오차를 줄이지만, 새로운 자세로 외삽할 때 메시가 괴상하게 뒤집히는 과적합을 일으키기 때문이다. 그래서 이 문제는 보통의 정규방정식 대신 비음수 최소제곱(NNLS) 솔버로 푼다.

또 하나의 실용적 제약은 희소성이다. 정점 하나가 수십 개 본의 웨이트를 다 갖게 두지 않고, 오차를 잘 줄여줄 후보 본을 소수(예컨대 네 개 이하)만 골라 그 안에서만 웨이트를 푼다. GPU 스키닝이 정점당 본 4개를 가정하는 관행과 맞아떨어지고, 저장량도 크게 준다.

완벽하지 않은 근사, 그래서 좋은 근사

클러스터로 잡은 본과 최소제곱 웨이트만으로는 원본 애니메이션이 정확히 재현되지 않는다. 유연한 부위의 미묘한 출렁임은 강체 변환의 블렌딩으로 표현하는 데 한계가 있어서다. 논문은 남은 오차를 프레임별 잔차로 계산해 두고, 필요하면 주성분 분석으로 저차원 보정 기저를 만들어 얹는다. 원본 시퀀스가 정점 수 × 프레임 수만큼의 데이터였다면, 결과물은 "본 몇 개의 변환 시퀀스 + 정점당 웨이트 몇 개 + 작은 보정항"으로 줄어든다. 같은 애니메이션을 훨씬 적은 숫자로 담는 압축이면서, 동시에 그래픽 하드웨어가 바로 재생할 수 있는 표준 스키닝 형식으로의 변환이기도 하다.

이 논문이 지금도 자주 인용되는 이유는 결과 자체보다 문제를 쪼갠 방식에 있다. "본과 웨이트를 동시에 찾는다"는 비선형 문제를, "움직임이 비슷한 것끼리 묶으면 본이 보인다"는 기하적 직관과 "본이 고정되면 웨이트는 선형이다"라는 대수적 관찰로 분리했다. 스키닝 공식 를 정방향으로 쓰는 법만 알던 사람에게, 같은 식이 데이터를 설명하는 모델이 되고 그 계수를 데이터로부터 추정할 수 있다는 걸 보여주는 — 리깅과 수치최적화가 만나는 지점의 고전이다.

함께 읽기 — 이 글이 쓰는 기초 수학

출처

광고

리깅 파이프라인 자동화 도구

반복 작업은 스크립트에게. 현업에서 쓰는 리깅 툴 모음.

리깅 도구 보기