Inverse Kinematics (IK)는 3D 애니메이션과 로보틱스에서 주로 사용되는 기법으로, 최종 목표 지점을 지정하면 중간 조인트(관절)들을 자동으로 계산하여 목표 지점에 도달하는 방법을 결정하는 알고리즘이다.
쉽게 말하면, 끝 점(예: 손, 발)이 특정 위치로 이동할 때, 그에 맞춰 팔꿈치, 어깨와 같은 중간 관절들을 계산하여 자연스러운 동작을 구현하는 기법이다.
IK(Inverse Kinematics)에서 쿼터니언(Quaternion)과 오일러 각(Euler Angles)은 회전(rotation)을 표현하는 두 가지 방법이다. 둘은 수학적으로 비슷한 목적을 가지고 있지만, 차이점과 각 방법이 IK 시스템에서 어떻게 활용되는지 이해하는 것이 중요하다.
오일러 각은 3차원 공간에서 물체의 회전을 세 개의 축(x, y, z)을 기준으로 나타내는 방식이다. 오일러 각은 각 축에 대해 roll, pitch, yaw라는 세 가지 값을 사용하여 회전을 표현한다.
Roll: x축을 중심으로 회전 (주로 좌우 회전)
Pitch: y축을 중심으로 회전 (주로 상하 회전)
Yaw: z축을 중심으로 회전 (주로 좌우 회전)
장점:
직관적이고 사람이 이해하기 쉬운 방식이다. 각 축에 대한 회전 값이 명확하게 구분된다.
단점:
Gimbal Lock: 오일러 각은 특정한 각도(90도)에 도달하면 회전이 "잠긴" 상태가 되어, 자유로운 회전이 불가능해지는 문제가 있다.
회전 순서 문제: 오일러 각은 회전 순서에 따라 결과가 달라질 수 있다.
예를 들어, X, Y, Z 순으로 회전하는 것과 Y, X, Z 순으로 회전하는 것은 다르게 동작할 수 있다.
IK에서의 활용:
직관적인 조정: 특정 축에 대한 회전을 제어하는 데 유용할 수 있다. IK 시스템에서 팔, 다리의 움직임을 오일러 각으로 설정하는 경우, 축별로 명확하게 회전 값을 제어할 수 있다.
간단한 회전 구현: 작은 각도 회전에서는 오일러 각이 더 간단하게 사용할 수 있다.
쿼터니언은 4차원 수학적 객체로, 3D 회전 문제를 해결하는 데 사용된다. 회전 축과 회전 각도를 함께 나타내며, 회전의 계산이 더 간단하고 안정적이다. 쿼터니언은 w, x, y, z의 네 개의 값으로 회전을 표현한다.
장점:
Gimbal Lock이 없다: 쿼터니언은 회전의 표현에서 Gimbal Lock이 발생하지 않기 때문에 회전이 자유롭게 가능하다.
회전 계산이 효율적: 회전의 합성, 보간 등 연산이 간단하고 빠른 계산을 제공한다.
회전의 연속성: 오일러 각과 달리, 회전 순서에 의존하지 않고 회전의 연속성이 유지된다.
단점:
직관적이지 않음: 사람이 이해하기 어려운 방식으로, 쿼터니언 회전은 시각적으로 바로 확인할 수 없어서 디버깅이나 직관적 조정이 어렵다.
IK에서의 활용:
부드러운 회전: 쿼터니언은 IK 시스템에서 부드러운 회전을 구현할 때 유용하다.
예를 들어, 팔꿈치나 무릎의 방향을 자연스럽게 보간하는 데 적합하다.
회전 보간(Interpolation): IK에서는 회전 보간이 중요한데, 쿼터니언을 사용하면 회전의 보간이 부드럽고 안정적이다. Slerp(Spherical Linear Interpolation) 같은 보간 방식을 사용하면 자연스러운 회전이 가능하다.
오일러 각:
오일러 각은 각 축을 기준으로 독립적인 회전을 다루기 때문에 간단한 회전 조정에 유리하다.
단순한 동작이나 제어가 직관적인 경우에 사용할 수 있다.
하지만, 복잡한 회전이나 여러 축을 포함하는 회전에서는 Gimbal Lock 등의 문제로 예상치 못한 결과가 나올 수 있다.
쿼터니언:
쿼터니언은 부드러운 회전과 회전 보간이 중요할 때 유용하다.
복잡한 IK 계산에서 쿼터니언을 사용하면, 회전 합성이나 보간이 안정적이고, 여러 축을 한 번에 처리할 수 있기 때문에 회전이 자연스럽고 안정적이다.
또한, Gimbal Lock 문제를 피할 수 있기 때문에, 복잡한 회전 계산에서 매우 유리하다.
추가)
Forward Kinematics(FK, 순방향 운동학)는 IK의 반대 개념이다.
Forward Kinematics (FK, 순방향 운동학)
부모 관절에서 자식 관절로 순차적으로 회전하여 최종 위치(손, 발)를 결정하는 방식이다.
각 관절의 회전값을 직접 조정해야 한다.
손이나 발을 특정 위치에 놓고 싶을 때, FK에서는 각 관절을 직접 조정해야 하므로 번거로울 수 있다.
예제 (팔 움직임)
어깨 → 팔꿈치 → 손 순으로 회전시키며 손의 위치를 결정.
손의 위치를 바꾸려면 각 관절을 직접 조정해야 한다.
Inverse Kinematics (IK, 역운동학)
목표 위치(손, 발)를 정해두면, 시스템이 자동으로 각 관절의 회전값을 계산하여 자연스러운 움직임을 만들어준다.
캐릭터가 어떤 물체를 잡거나 발을 특정 위치에 고정할 때 자동으로 관절이 조정된다.
자연스럽고 부드러운 움직임을 제공할 수 있다.
예제 (팔 움직임)
손을 특정 위치로 이동시키면, 시스템이 어깨와 팔꿈치의 회전값을 자동으로 계산하여 손이 그 위치에 도달하도록 한다.

FK 활용 예제
애니메이션 키프레임 제작: 예를 들어, 펀치 애니메이션을 만들 때 팔꿈치와 어깨를 직접 회전시키며 조정.
로봇 팔 제어: 로봇이 특정한 각도로 움직여야 할 때, FK를 이용해 각도를 하나씩 조정.
IK 활용 예제
게임에서 캐릭터 손으로 물체 잡기: IK를 사용하면 손의 위치를 설정하면 자동으로 팔꿈치와 어깨의 위치가 조정된다.
캐릭터 발 고정 (지형 적응): 경사진 지형에서 캐릭터가 발을 자연스럽게 배치하도록 IK 적용.