언리얼 엔진에서 애니메이션의 IK, Two-Bone IK, FABRIK, CCD
언리얼 엔진에서 애니메이션 시스템은 매우 강력하고 정교한 기능을 제공한다. 그 중에서도 IK(Inverse Kinematics)는 캐릭터 애니메이션에서 현실감을 높이는 핵심 기술 중 하나이다. IK는 특히 캐릭터가 환경과 상호작용할 때 큰 차이를 만들어낸다. 예를 들어, 캐릭터가 울퉁불퉁한 지형을 걸을 때 발이 자연스럽게 땅에 붙도록 조정하거나, 벽에 손을 올리는 등의 동작을 구현할 수 있다. 거의 모든 3D게임에는 포함되어있다해도 과언이 아닌 IK는 뭘까?
이번 글에서는 IK가 무엇인지 기본 개념을 설명하고, 언리얼 엔진에서 자주 사용되는 Two-Bone IK, FABRIK, CCD IK 세 가지 IK 기법에 대해 자세히 살펴보도록 하겠다.
IK(Inverse Kinematics)란 무엇인가?
IK는 애니메이션에서 "역운동학"이라고 불리는 개념이다. 우리가 일반적으로 아는 키프레임 기반 애니메이션은 "Forward Kinematics(순방향 운동학, FK)" 방식으로, 상위 관절(예: 어깨)을 움직이면 하위 관절(예: 팔꿈치, 손목)이 함께 따라 움직인다. 반면 IK는 반대로, 손이나 발처럼 말단 관절의 위치를 먼저 지정하면, 그에 따라 나머지 관절들이 자동으로 움직여 최종 위치에 도달하도록 계산된다. 즉, 내가 원하는 관절의 위치를 지정하고, 그에 따른 나머지 관절들을 자연스럽게 위치시키는 역계산이라고 생각하면 된다.
즉, 목표 지점(Target)이 정해지면 IK 알고리즘이 해당 지점에 도달할 수 있도록 관절을 자동으로 조정하는 방식이다. 이러한 방식은 자연스럽고 동적인 움직임을 만들기에 매우 효과적이다.
IK를 다루게 되면 꼭 알아야하는 기본적인 개념이 있는데, 바로 Component공간, Local(Bone)공간, Mesh공간이 있는 공간 개념이다. 이 개념에 대해서는 다음 글에서 자세하게 다뤄보도록 하겠다. 이번 글에서는 IK의 개념과 종류에 대해서 간단하게 알아보고 가자. IK는 계산이 들어가는 쉽지 않은 개념이기 때문에 한번에 이해가 어려울 수 있다. 천천히 가자.
Two-Bone IK란 무엇인가?
Two-Bone IK는 언리얼 엔진에서 가장 자주 사용되는 IK 솔버(Solver) 중 하나이다. 이름에서 알 수 있듯이 이 방식은 두 개의 본(Bone), 즉 일반적으로 팔(어깨-팔꿈치-손) 또는 다리(엉덩이-무릎-발)의 구조에 적용된다.
Two-Bone IK는 목표 지점(Target Point)과 힌트(Hint 또는 Pole Vector)를 기준으로 손이나 발이 목표 지점에 정확히 도달하도록 상위 두 개의 본을 회전시킨다. 이 방식은 성능이 매우 좋고 안정적이기 때문에, 대부분의 게임에서는 걷기, 달리기, 점프 착지 등에 자주 사용된다.
장점:
- 빠르고 효율적인 연산
- 구현이 간단하다
- 애니메이션 블렌딩이 용이하다
단점:
- 두 개의 본만 제어할 수 있으므로 복잡한 구조에는 적합하지 않다
- 목표 위치가 본의 최대 길이를 벗어나면 제대로 도달하지 못한다
FABRIK란 무엇인가?
FABRIK는 "Forward And Backward Reaching Inverse Kinematics"의 약자이다. 이름에서 알 수 있듯이, 이 방식은 목표 지점까지 관절을 이동시키기 위해 전방향과 역방향으로 반복적으로 관절을 조정하는 방식을 사용한다.
FABRIK는 거리 기반 IK 알고리즘으로, 각 본을 회전이 아닌 위치 기준으로 조정하는 특징이 있다. 각 반복마다 체인의 끝에서부터 루트 방향으로, 다시 루트에서 끝까지 이동하며 위치를 재조정한다. 이렇게 하면 자연스럽고 부드러운 움직임이 구현된다.
장점:
- 여러 개의 본을 가진 체인에도 적용 가능
- 부드럽고 안정적인 결과 제공
- 구부러진 자세나 복잡한 형태의 구조에도 잘 작동
단점:
- 반복 연산이 필요하므로 Two-Bone IK보다 연산 비용이 높다
- 반복 횟수가 많을 경우 성능 이슈 발생 가능성 있음
위 이미지는 총에 손의 위치가 맞지 않아 FABRIK를 사용하여 Anim Blueprint에서 총과 손을 붙이는 연산을 하는 이미지이다. 이처럼 IK를 활용하면 다양한 분야에서 미세하게 맞지 않는 애니메이션들을 나의 프로젝트에 맞게 변환하여 사용할 수 있다.
CCD란 무엇인가?
CCD는 "Cyclic Coordinate Descent"의 약자로, 또 다른 반복 기반 IK 알고리즘이다. 이 알고리즘은 체인의 끝에서부터 시작하여 각 본을 회전시켜 목표 지점에 가까워지도록 만든다. 한 번의 루프마다 각 관절은 목표를 향해 조정되고, 이 과정을 여러 번 반복하면서 점차 목표 지점에 도달하게 된다.
CCD 방식은 FABRIK보다 계산이 단순하지만, 회전만을 사용하기 때문에 체인의 움직임이 다소 급격할 수 있다. 그럼에도 불구하고 구현이 간단하고 비교적 성능이 좋아 다양한 상황에서 사용된다.
장점:
- 간단하고 직관적인 알고리즘
- 여러 본의 체인에도 적용 가능
- 구현이 쉬우며 빠른 반복 처리 가능
단점:
- 움직임이 부자연스럽거나 튀는 현상이 발생할 수 있다
- 관절의 회전 각도 제한 처리 필요
언리얼 엔진에서 IK의 실제 사용 예
언리얼 엔진에서는 Anim Blueprint에서 위에서 소개한 IK 솔버들을 손쉽게 사용할 수 있다. 예를 들어 FABRIK는 ‘FABRIK’ 노드를 통해 사용할 수 있고, Two-Bone IK는 ‘Two Bone IK’ 노드를 통해 간단하게 세팅할 수 있다. 이 노드들을 활용하면 캐릭터의 손이나 발이 동적인 환경에도 자연스럽게 반응하도록 만들 수 있다.
예를 들어:
- Two-Bone IK로 캐릭터의 발이 지형에 맞게 정확히 놓이도록 조정
- FABRIK를 사용해 손이 동적인 오브젝트를 따라가도록 설정
- CCD를 활용해 다관절 로봇 팔 움직임 구현
IK 알고리즘 요약 및 비교
알고리즘 | 본 개수 지원 | 특징 | 장점 | 단점 |
Two-Bone IK | 2개 | 단순하고 빠름 | 빠른 연산, 쉬운 구현 | 본 수 제한, 최대 거리 제약 |
FABRIK | 무제한 | 위치 기반 반복 | 부드러운 움직임, 다양한 체인 지원 | 연산 비용 높음 |
CCD | 무제한 | 회전 기반 반복 | 단순한 구조, 빠른 처리 | 부자연스러운 움직임 가능성 |
이처럼 언리얼 엔진의 IK 시스템은 다양한 방식으로 구현 가능하며, 상황에 따라 적절한 알고리즘을 선택해 사용하는 것이 중요하다. 단순한 캐릭터의 발 위치 조정부터, 복잡한 로봇의 팔 움직임까지, IK는 게임의 몰입도를 높이는 중요한 요소임을 기억해야 한다.
앞으로 언리얼 엔진으로 게임을 개발할 계획이라면, IK 시스템을 제대로 이해하고 활용하는 것이 큰 자산이 될 것이다.