Spine 2D 캐릭터 아트: AI 메시 자동 바인딩과 뼈대 웨이트 연산 적용법
Spine 2D 캐릭터 메시를 AI로 자동 바인딩하고 뼈대 웨이트를 안정적으로 보정하는 방법을 정리합니다. 거리·히트맵 기반 가중치, 정규화, 품질 검수, 런타임 최적화까지 실무 절차와 수식을 제공합니다.

Spine 2D의 AI 메시 자동 바인딩은 정점마다 가까운 뼈를 찾고 거리·영향 범위·파츠 경계를 기준으로 웨이트를 계산한 뒤 합계를 1로 정규화하는 과정이다. 자동 결과는 초안으로 사용하고 관절 주변의 보정 규칙과 애니메이션 검수를 더하면 수작업 시간을 줄이면서도 안정적인 변형 품질을 얻을 수 있다.
Spine 2D 메시 자동 바인딩이 필요한 이유
Spine의 메시는 정점(Vertex)에 하나 이상의 뼈(Bone)와 가중치(Weight)를 연결한다. 단일 뼈에만 연결된 리지드 메시와 달리, 웨이티드 메시(Weighted Mesh)는 팔꿈치·무릎·목처럼 회전이 이어지는 부위를 자연스럽게 변형할 수 있다.
하지만 정점 수가 많거나 코스튬 파츠가 많은 캐릭터에서는 수동 웨이트 작업이 반복된다. AI 자동 바인딩의 목표는 애니메이터를 대체하는 것이 아니라 예측 가능한 초기 웨이트를 생성하고 사람이 중요한 구간만 수정하게 만드는 데 있다.

AI 메시 자동 바인딩은 어떻게 동작하는가?
자동 바인딩은 보통 후보 뼈 선정, 점수 계산, 정규화, 제약 적용의 네 단계로 구성한다.
flowchart LR
A[메시 정점과 뼈 입력] --> B[후보 뼈 검색]
B --> C[거리·영향 범위 점수 계산]
C --> D[웨이트 정규화]
D --> E[관절·파츠 제약 적용]
E --> F[Spine 웨이티드 메시 출력]
1. 정점별 후보 뼈를 제한한다
모든 뼈를 후보로 두면 몸통 정점이 손가락이나 장식 뼈의 영향을 받기 쉽다. 정점 v에 대해 다음 조건으로 후보를 줄인다.
- 같은 파츠 그룹에 속한 뼈만 허용한다.
- 정점에서 뼈 선분까지의 거리가 영향 반경
r보다 작은 뼈만 선택한다. - 최대 영향 뼈 수
k를 2~4개로 제한한다. - 무기, 머리카락, 망토처럼 독립성이 필요한 파츠는 별도 리그 그룹으로 분리한다.
2. 거리 기반 초기 웨이트를 계산한다
가장 단순한 초기 점수는 정점과 뼈 사이 거리 d_i의 역수다. ε은 뼈 위 정점에서 0으로 나누는 문제를 방지한다.
여기서 p가 클수록 가장 가까운 뼈에 웨이트가 집중된다. 2D 캐릭터의 팔·다리에는 p = 2부터 시험하는 편이 무난하다. 점수 합을 1로 맞추면 Spine이 요구하는 정점별 웨이트 조건을 만족한다.
뼈의 끝점만 기준으로 거리를 계산하면 긴 뼈 중앙에서 오차가 커진다. 반드시 정점과 뼈 선분 사이의 최소 거리를 사용한다.
for vertex in mesh.vertices:
candidates = bones.sameGroup(vertex).withinRadius(vertex, radius)
nearest = candidates.takeNearest(4)
scores = []
for bone in nearest:
d = distancePointToSegment(vertex.position, bone.start, bone.end)
scores.add(1 / pow(d + 0.001, 2))
weights = normalize(scores)
vertex.setWeights(nearest, weights)
3. 관절 부위에는 방향성과 히트맵을 반영한다
거리만으로는 팔꿈치 정점이 상완 뼈와 하완 뼈에 고르게 배분되지 않거나 어깨의 몸통 웨이트가 부족해질 수 있다. 이때 관절 중심 c와 뼈 방향 벡터를 추가 특성으로 사용한다.
| 부위 | 권장 영향 뼈 수 | 자동 보정 규칙 |
|---|---|---|
| 몸통 | 1~2 | 골반·가슴 뼈 중심으로 제한 |
| 어깨·엉덩이 | 2~3 | 몸통 뼈의 최소 웨이트 보장 |
| 팔꿈치·무릎 | 2 | 관절 양쪽 뼈에 분배하고 반대쪽 뼈는 차단 |
| 손·발 | 1~2 | 손목·발목 뼈를 우선 적용 |
| 머리카락·장식 | 1~3 | 독립 체인 외 뼈의 웨이트를 0으로 설정 |
히트맵 기반 방식은 아티스트가 파츠 마스크에 색 또는 그레이스케일 값을 칠해 뼈별 영향도를 지정하는 방식이다. AI 모델은 이 마스크, 정점 좌표, 뼈 위치를 입력으로 받아 웨이트를 추정할 수 있다. 다만 모델 출력도 아래 제약을 통과시켜야 한다.
- 음수 웨이트는 0으로 자른다.
- 상위
k개 이외의 웨이트는 제거한다. - 남은 웨이트를 다시 정규화한다.
- 잠긴 파츠와 독립 파츠에는 허용된 뼈만 남긴다.
Spine 2D 자동 웨이트를 실무에 적용하는 방법
Step 1. 메시와 뼈 구조를 먼저 정리한다
자동화 전에 메시 경계와 뼈 계층이 명확해야 한다. 팔 소매와 몸통이 하나의 메시라면 파츠 마스크 또는 정점 그룹을 준비한다. root → hip → torso → chest → upper_arm → forearm → hand처럼 변형 의도가 드러나는 계층을 유지하고 장식물은 별도 체인으로 분리한다.
Step 2. 자동 바인딩 결과를 Spine에서 가져온다
생성 도구는 정점 위치, 뼈 이름, 뼈별 웨이트 목록을 내보내야 한다. Spine에서는 해당 메시를 웨이티드 메시로 변환한 뒤 뼈 이름이 리그와 정확히 일치하는지 확인한다. 리그 생성 단계에서 뼈 이름을 변경했다면 매핑 테이블을 두어 내보내기 전에 변환한다.
Step 3. 극단 포즈로 웨이트를 검수한다
Setup 포즈만 보면 문제가 숨는다. 다음 포즈를 만들어 확인한다.
- 팔·다리를 각 축으로 크게 회전한다.
- 팔꿈치와 무릎을 최대한 접는다.
- 몸통을 좌우로 기울이고 목을 회전한다.
- 슬롯 교체와 스킨 변경 뒤에도 같은 검수를 반복한다.
특히 관절이 접힐 때 메시가 찢어져 보이면 관절 중앙 정점의 양쪽 뼈 웨이트를 조정하고 불필요한 세 번째 뼈 웨이트를 제거한다. 메시가 과도하게 뭉개지면 관절 주변에 변형을 받을 정점을 추가하는 편이 웨이트만 복잡하게 늘리는 것보다 효과적이다.

자동 바인딩 품질은 무엇으로 판단할까?
정량 지표는 빠른 회귀 검사에 유용하지만 최종 판단은 애니메이션 재생 화면에서 해야 한다.
| 검사 항목 | 확인 방법 | 권장 기준 |
|---|---|---|
| 웨이트 합 | 정점별 웨이트 합계 계산 | 1.0, 오차는 부동소수점 허용 범위 내 |
| 영향 뼈 수 | 정점별 비영(非零) 웨이트 수 확인 | 일반 파츠는 최대 4개 |
| 파츠 침범 | 허용되지 않은 뼈 연결 탐지 | 0건 |
| 접힘 손상 | 극단 관절 포즈 재생 | 눈에 띄는 찢김·역변형 없음 |
| 런타임 비용 | 대상 플랫폼 프로파일링 | 정점 수와 가중치 수 예산 충족 |
자주 묻는 질문 (FAQ)
AI가 만든 웨이트를 그대로 출시해도 될까?
권장하지 않는다. 자동 웨이트는 초기값으로 유용하지만 관절 접힘, 스킨 교체, 공격·피격 같은 극단 포즈에서 반드시 검수해야 한다.
정점 하나에 몇 개의 뼈를 연결해야 할까?
대부분의 2D 캐릭터는 2개면 충분하고 관절이나 유연한 장식 파츠만 3~4개를 사용한다. 영향 뼈 수를 무조건 늘리면 품질과 런타임 비용이 함께 좋아지지 않는다.
거리 기반 방식과 AI 모델 중 무엇을 선택해야 할까?
리그 규칙이 일정한 프로젝트는 거리 기반 방식에 파츠 제약을 더한 방법이 재현성과 디버깅 면에서 유리하다. 다양한 화풍과 복잡한 마스크 데이터를 이미 보유했다면 AI 모델을 후보 생성기로 사용하고 동일한 제약·검수 단계를 뒤에 둔다.
정리
Spine 2D 자동 바인딩의 핵심은 AI 모델 자체보다 입력 구조와 후처리 규칙이다. 뼈 그룹을 제한하고 거리 기반 웨이트를 정규화하며 관절과 독립 파츠에 명시적 제약을 적용하면 자동화 결과를 안전한 초안으로 활용할 수 있다. 마지막으로 극단 포즈 검수를 파이프라인에 고정해 두면 캐릭터와 스킨이 늘어나도 변형 품질을 일관되게 관리할 수 있다.



