게임을 즐기다 보면 캐릭터가 참 자연스럽게 움직인다는 느낌을 받습니다. 플레이어가 버튼을 누르면 캐릭터는 즉각 반응하여 칼을 휘두르거나 달리기를 시작하죠. 화면 속에서는 매끄럽게 보이지만 내부에서는 아주 복잡한 연산이 쉼 없이 돌아갑니다. 이 일련의 처리 과정을 우리는 애니메이션 파이프라인(Animation Pipeline)이라고 부릅니다.
이 과정은 데이터를 읽고 계산해서 화면에 그려내는 작업의 연속입니다. 매 프레임마다 이 모든 단계가 반복되어야 비로소 움직임이 만들어집니다. 그래서 프로그래머는 항상 성능과 품질 사이에서 고민을 거듭합니다. 어느 한쪽도 놓칠 수 없기 때문에 밸런스를 잡는 것이 중요합니다.

데이터를 메모리로 불러오는 로딩 단계
가장 먼저 해야 할 일은 디스크에 저장된 움직임 정보를 꺼내는 것입니다. 이 단계에서는 애니메이션 클립(Animation Clip)을 메모리로 불러옵니다. 여기에는 각 관절이 언제 얼마나 움직였는지에 대한 기록이 담겨 있습니다. 크기 변화나 회전 그리고 이동 같은 정보들이 포함되어 있죠.
로딩 과정에서는 이 데이터를 계산하기 편한 형태로 미리 정리해 둡니다. 압축을 풀고 빠르게 읽을 수 있도록 최적화하는 작업이 필요합니다. 또한 각 데이터가 어떤 뼈대에 맞는 것인지 짝을 맞춰 주기도 합니다. 그래야 엉뚱한 뼈대에 움직임이 적용되는 실수를 막을 수 있습니다.
현재 자세를 계산하는 샘플링 과정
데이터 준비가 끝났다면 이제 특정 시점의 포즈를 알아내야 합니다. 이 단계를 흔히 샘플링(Sampling)이라고 부릅니다. 저장된 데이터는 보통 띄엄띄엄 존재하는 키프레임 형태로 되어 있습니다. 그래서 현재 시간이 키프레임 사이에 있다면 중간 값을 채워야 합니다.
이때 위치나 크기는 부드럽게 이어 주는 방식으로 계산합니다. 회전 값 역시 각도가 자연스럽게 연결되도록 보간 처리를 하죠. 처음에는 이 계산 개념이 조금 낯설게 느껴질 수 있습니다. 이 과정을 마치면 각 관절이 자신의 기준에서 어떤 상태인지 알게 됩니다.
여러 동작을 자연스럽게 섞는 블렌딩
구해진 포즈를 그대로 화면에 내보내지는 않습니다. 상황에 따라 여러 애니메이션을 섞어서 하나의 결과를 만들어야 하기 때문입니다. 걷기와 달리기 사이를 오갈 때 동작이 뚝 끊기면 어색하겠죠? 이렇게 동작을 부드럽게 섞는 과정을 블렌딩(Blending)이라고 합니다.
상체는 공격 동작을 취하고 하체는 걷는 동작을 할 때도 이 기술이 쓰입니다. 각 동작에 가중치를 두어 얼마나 섞을지를 결정하는 방식입니다. 다만 여기까지는 아직 관절들이 서로 어떻게 연결되었는지 모르는 상태입니다. 각자 자기 위치에서 어떤 자세인지만 알고 있을 뿐입니다.
뼈대를 연결하고 스킨 행렬 만들기
이제 흩어져 있던 관절들을 하나의 뼈대로 연결할 차례입니다. 부모 관절이 움직이면 자식 관절도 따라 움직여야 자연스럽겠죠? 계층 관계를 따라 차곡차곡 계산을 쌓아 나가는 과정이 필요합니다. 이렇게 하면 각 관절이 월드 공간에서 정확히 어디에 있는지 알게 됩니다.
이어서 스킨 행렬(Skin Matrix)이라는 중요한 정보를 계산합니다. 이것은 원래의 기준 자세에서 현재 자세로 얼마나 변형되었는지를 나타냅니다. 피부가 뼈를 따라 올바르게 움직이려면 이 행렬이 반드시 있어야 합니다. 모든 관절에 대한 행렬을 미리 준비해 두는 것이 일반적입니다.
정점을 움직이고 화면에 그려내기
마지막으로 캐릭터의 외형을 담당하는 정점을 움직일 차례입니다. 이를 정점 스키닝(Vertex Skinning)이라고 하며 매우 많은 연산이 필요합니다. 팔꿈치 안쪽 살을 예로 들어보면 이해가 쉽습니다. 이곳은 위팔과 아래팔의 움직임에 동시에 영향을 받아야 자연스럽습니다.
그래서 각 정점은 연결된 여러 관절의 행렬을 가중치에 따라 섞어서 위치를 잡습니다. 예전에는 CPU가 했지만 요즘은 속도를 위해 GPU가 주로 처리합니다. 덕분에 화면에 많은 캐릭터가 등장해도 부드러운 움직임을 유지할 수 있습니다. 이렇게 변형된 정점들이 최종적으로 화면에 그려지게 됩니다.
성능과 자연스러움을 위한 끊임없는 최적화
이 모든 과정이 끝나면 비로소 플레이어는 캐릭터가 움직인다고 인식합니다. 입력에 즉각 반응하면서도 동작이 매끄러운 게임 뒤에는 이런 노력이 숨어 있습니다. 애니메이션 파이프라인은 정교하게 설계된 움직임의 생산 라인과도 같습니다. 각 단계가 물 흐르듯 이어져야 좋은 결과가 나옵니다.
프로그래머는 이 파이프라인이 얼마나 빠른지 그리고 얼마나 그럴듯한지 늘 고민합니다. Dark Souls 같은 게임의 묵직하면서도 빠른 반응은 우연히 나온 것이 아닙니다. 여러분도 이 흐름을 이해하면 게임 속 움직임이 새롭게 보일 것입니다. 복잡해 보이지만 하나씩 뜯어보면 참 흥미로운 기술입니다.