리깅: 리깅 수학 로드맵 — 리깅은 선형대수 + 기하학 + 최적화다

리깅은 왜 수학인가 — 선형대수, 기하학, 최적화라는 세 개의 기둥
캐릭터 리깅을 오래 하다 보면 어느 순간 도구의 한계에 부딪힌다. 스킨 웨이트가 왜 이렇게 섞이는지, 조인트를 회전시켰는데 왜 메시가 찌그러지는지, IK 핸들이 왜 갑자기 팔꿈치를 반대로 꺾는지 — 이런 질문의 답은 전부 수학 안에 있다. 리깅 소프트웨어가 내부에서 하는 일을 수식 수준에서 따라가 보면, 리깅은 결국 세 분야의 조합이라는 사실이 드러난다. 점을 움직이는 규칙을 다루는 선형대수, 공간 속 방향과 거리를 다루는 기하학, 그리고 "원하는 자세에 가장 가까운 해"를 찾는 최적화다. 이 글은 그 세 기둥을 수식과 함께 단계별로 짚어 본다.
1. 출발점: 일차방정식과 선형성
선형대수(linear algebra)는 이름 그대로 일차방정식을 다루는 수학이다. 가장 일반적인 형태는 다음과 같다.
a1x1 + a2x2 + ⋯ + anxn = b
여기서 x1, …, xn은 우리가 구하려는 미지수, a1, …, an은 각 미지수에 곱해지는 계수, b는 결과값이다. 핵심은 미지수가 제곱되거나 서로 곱해지지 않고 오직 상수배와 덧셈으로만 결합된다는 점이다. 이 성질을 선형성이라 부르고, 수식으로는 함수 f가 두 조건을 만족한다는 뜻이다.
f(u + v) = f(u) + f(v), f(c·u) = c·f(u)
u와 v는 임의의 벡터, c는 임의의 스칼라(숫자)다. "더한 다음 변환해도, 변환한 다음 더해도 결과가 같다"는 이 성질 덕분에, 아무리 복잡한 변형도 각 정점(vertex)에 독립적으로 적용할 수 있다. 리깅에서 수만 개의 정점을 실시간으로 움직일 수 있는 근본 이유가 바로 선형성이다.
2. 연립방정식의 기하학적 의미 — 평면들이 만나는 곳
일차방정식 하나 a x + b y + c z = d 는 3차원 공간에서 평면 하나를 그린다. 방정식을 세 개 모으면 평면 세 장이 되고, 연립방정식의 해는 그 평면들이 공통으로 지나는 점이다. 세 평면이 한 점에서 만나면 해가 유일하고, 두 평면이 평행하면 해가 없으며, 세 평면이 한 직선을 공유하면 해가 무한히 많다.
리깅에서 이 구조는 생각보다 자주 등장한다. 예컨대 "이 정점은 조인트 A를 따라가되, 특정 평면 위에 머물러야 한다"는 제약을 걸면, 소프트웨어는 내부적으로 연립 일차방정식을 세우고 그 교집합을 푼다. 폴 벡터가 팔꿈치 평면을 고정하는 것도, 여러 제약 조건이 동시에 만족되는 교차점을 찾는 문제다.
3. 변환 행렬 — 조인트 하나가 곧 행렬 하나
3D 소프트웨어의 조인트는 본질적으로 4×4 행렬 M이다. 정점 v를 새 위치 v′으로 옮기는 연산은 행렬-벡터 곱으로 쓴다.
v′ = M · v
여기서 v는 위치 (x, y, z)에 1을 덧붙인 동차좌표 (x, y, z, 1)이다. 1을 덧붙이는 이유는 이동(translation) 때문이다. 회전과 크기 조절은 3×3 행렬로 표현되지만, 이동은 덧셈이라 3×3 곱셈만으로는 담을 수 없다. 좌표를 한 차원 올려 4×4로 만들면 이동까지 곱셈 하나로 통합된다. 조인트의 최종 행렬은 보통 다음 순서로 합성된다.
M = T · R · S
T는 이동 행렬, R은 회전 행렬, S는 스케일 행렬이다. 행렬 곱은 교환법칙이 성립하지 않으므로(A·B ≠ B·A) 순서가 곧 동작의 순서다. 스케일을 먼저, 회전을 그다음, 이동을 마지막에 적용한다는 뜻이며, 이 순서를 바꾸면 "회전한 뒤 찌그러진" 전혀 다른 결과가 나온다. 조인트 계층 구조도 같은 원리다. 손가락 정점의 월드 위치는 부모 행렬들의 연쇄 곱이다.
M월드 = M어깨 · M팔꿈치 · M손목 · M손가락
4. 스키닝 방정식 — 리깅의 심장
메시가 뼈대를 따라 움직이는 가장 표준적인 방식인 선형 블렌드 스키닝(LBS)은 한 줄의 수식으로 요약된다.
v′ = Σi wi · Mi · Bi−1 · v
기호를 하나씩 풀면 이렇다. v는 바인드 포즈(초기 자세)에서의 정점 위치, Bi는 바인드 시점의 조인트 i의 월드 행렬, Bi−1은 그 역행렬로 "정점을 조인트 i의 로컬 공간으로 끌고 들어가는" 역할을 한다. Mi는 현재 프레임의 조인트 i 월드 행렬로, 로컬 공간의 점을 다시 월드로 내보낸다. wi는 스킨 웨이트, 즉 조인트 i가 이 정점에 미치는 영향력이며 모든 웨이트의 합은 1로 정규화된다(Σ wi = 1).
이 식이 말해 주는 것은 명확하다. 스키닝이란 여러 조인트가 계산한 후보 위치들의 가중 평균이다. 관절 안쪽이 부풀지 않고 오히려 수축하는 "캔디 래퍼" 문제도 이 식에서 바로 읽힌다. 두 회전 행렬을 선형으로 평균 내면 그 결과는 더 이상 순수한 회전이 아니라 크기가 줄어든 행렬이 되기 때문이다. 듀얼 쿼터니언 스키닝은 평균을 행렬이 아니라 회전을 보존하는 다른 대수 구조 위에서 수행해 이 문제를 완화한다.
5. 기하학 — 내적, 외적, 그리고 회전
조인트의 방향을 다룰 때는 벡터 기하가 주역이 된다. 두 벡터 u, v의 내적은
u · v = |u| |v| cos θ
로, |u|와 |v|는 각 벡터의 길이, θ는 두 벡터 사이 각도다. 내적은 "두 방향이 얼마나 같은 곳을 보는가"를 숫자 하나로 알려 주므로, 각도 기반 보정 조인트나 포즈 리더의 핵심 연산이다. 외적 u × v는 두 벡터 모두에 수직인 벡터를 내놓는데, 에임 컨스트레인트가 업 벡터로부터 나머지 축을 만들어 좌표계를 완성할 때 쓰는 것이 바로 이 연산이다.
회전 자체는 쿼터니언으로 표현하는 편이 안전하다. 축 u(단위 벡터) 둘레로 각도 θ만큼 도는 회전은
q = cos(θ/2) + sin(θ/2)(uxi + uyj + uzk)
라는 4개의 숫자로 쓴다. i, j, k는 허수 단위를 확장한 기저이고, 각도의 절반이 들어가는 것이 특징이다. 오일러 각처럼 축이 겹쳐 자유도를 잃는 짐벌락이 없고, 두 회전 사이를 구면 위에서 균일하게 보간(slerp)할 수 있어 애니메이션 블렌딩의 표준이 됐다.
6. 최적화 — IK는 방정식이 아니라 최소화 문제다
FK가 "각도를 주면 손끝 위치가 나온다"는 순방향 계산이라면, IK는 그 역이다. 손끝을 목표 지점 t에 두려면 각 관절 각도 θ = (θ1, …, θn)가 얼마여야 하는가. 관절이 세 개만 넘어가도 해가 무한히 많거나 아예 없기 때문에, 이 문제는 방정식 풀기가 아니라 오차를 최소화하는 문제로 바꿔 푼다.
minimize E(θ) = ‖ p(θ) − t ‖2
p(θ)는 현재 각도에서의 말단(엔드 이펙터) 위치, t는 목표 위치, ‖ · ‖는 벡터의 길이이므로 E는 "목표까지 남은 거리의 제곱"이다. 이를 풀 때 등장하는 것이 자코비안 행렬 J다. J의 각 성분은 "관절 j를 아주 조금 돌리면 말단이 어느 방향으로 얼마나 움직이는가"라는 편미분 ∂p/∂θj를 모아 놓은 것이다. 그러면 각도의 작은 변화와 말단의 작은 변화가 선형 관계로 근사된다.
Δp ≈ J · Δθ → Δθ = J+ · Δp
J+는 유사역행렬(pseudo-inverse)로, J+ = JT(J JT)−1처럼 계산하며 "무한히 많은 해 중 각도 변화가 가장 작은 해"를 골라 준다. IK 솔버는 이 갱신을 목표에 충분히 가까워질 때까지 반복한다. 비선형 문제를 매 단계 선형 문제로 근사해 푸는 것 — 최적화의 표준 전략이 IK 안에 그대로 들어 있다. 스킨 웨이트 자동 계산, 델타 머시 같은 스무딩, 페이셜 블렌드셰이프 피팅도 모두 같은 틀, 즉 "제약을 지키며 오차 제곱을 최소화"하는 문제다.
7. 로드맵 — 무엇을 어떤 순서로 공부할까
이 글의 흐름이 곧 공부 순서다. 첫째, 벡터·행렬·연립방정식·역행렬까지 선형대수의 기본기를 다진다. 둘째, 동차좌표와 4×4 변환, 행렬 곱의 순서를 손으로 계산해 보며 조인트 계층과 연결한다. 셋째, 내적·외적·쿼터니언으로 방향과 회전을 다룬다. 넷째, 미분의 개념을 빌려 자코비안과 최소제곱을 이해하고 IK를 직접 구현해 본다. 각 단계마다 파이썬 몇 줄로 수식을 코드로 옮겨 보면, 리깅 툴의 노드 하나하나가 수식 한 줄과 대응한다는 사실을 몸으로 확인하게 된다. 도구는 바뀌어도 이 수학은 바뀌지 않는다 — 그것이 리거가 수학에 투자해야 하는 이유다.
함께 읽기 — 이 글이 쓰는 기초 수학
출처
리깅 파이프라인 자동화 도구
반복 작업은 스크립트에게. 현업에서 쓰는 리깅 툴 모음.
리깅 도구 보기