IK 기초와 Two Bone IK
Inverse Kinematics의 핵심 원리와 TwoBoneIK, FABRIK 솔버의 구현을 심층 분석합니다.
Inverse Kinematics 개요
FK vs IK, IK 솔버의 기본 원리
Forward Kinematics(FK)은 루트에서 이펙터(끝점)까지 순방향으로 트랜스폼을 전파합니다. 반면 Inverse Kinematics(IK)는 이펙터의 목표 위치가 주어지면 체인의 본 회전을 역으로 계산합니다.
Forward Kinematics (FK)
각 관절의 회전 값을 지정하면 끝점 위치가 결정됩니다. 키프레임 애니메이션의 기본 방식입니다. 직관적이지만 특정 위치에 손/발을 맞추기 어렵습니다.
Inverse Kinematics (IK)
끝점(Effector)의 목표 위치를 지정하면 관절 회전이 자동 계산됩니다. 바닥에 발 맞추기, 물체 잡기 등 목표 위치 기반 포징에 필수적입니다.
IK Goal은 이펙터가 도달해야 할 목표 위치/회전입니다. Effector는 IK 체인의 끝 본(예: hand, foot)입니다. IK 솔버는 Goal에 Effector를 가능한 한 가깝게 이동시키도록 체인의 중간 관절들을 회전시킵니다.
Two Bone IK 솔버
2본 체인의 해석적 IK 솔버 동작 원리
Two Bone IK는 정확히 2개의 본(예: 상완-하완, 대퇴-경골)으로 구성된 체인에 대한 해석적(analytical) 솔버입니다. 삼각법을 이용하여 정확한 해를 한 번에 계산하므로 가장 빠릅니다.
// AnimGraph에서 Two Bone IK 노드 설정
USTRUCT()
struct FAnimNode_TwoBoneIK : public FAnimNode_SkeletalControlBase
{
// IK 대상 본 (Effector 본)
UPROPERTY(EditAnywhere, Category = "IK")
FBoneReference IKBone; // 예: foot_l
// 이펙터 위치 (Component Space)
UPROPERTY(EditAnywhere, Category = "Effector")
FVector EffectorLocation;
// Pole Vector (관절 꺾이는 방향)
UPROPERTY(EditAnywhere, Category = "Joint Target")
FVector JointTargetLocation;
// 적용 강도 (0~1)
UPROPERTY(EditAnywhere, Category = "IK", meta = (ClampMin = "0", ClampMax = "1"))
float Alpha = 1.0f;
// Take Rotation from Effector Space
UPROPERTY(EditAnywhere, Category = "Effector")
TEnumAsByte<EBoneControlSpace> EffectorLocationSpace;
};
Pole Vector는 관절이 꺾이는 평면의 방향을 결정합니다. 무릎이 앞으로 향해야 하는 다리 IK에서, Pole Vector가 잘못되면 무릎이 옆이나 뒤로 꺾일 수 있습니다. 일반적으로 무릎 앞쪽 약간 위 지점을 지정합니다.
FABRIK 솔버
Forward and Backward Reaching Inverse Kinematics의 동작 원리
FABRIK(Forward And Backward Reaching Inverse Kinematics)는 N개 본 체인에 대해 반복적으로 수렴하는 IK 솔버입니다. 꼬리, 촉수, 긴 체인에 적합합니다.
| 파라미터 | 설명 | 권장값 |
|---|---|---|
MaxIterations |
최대 반복 횟수 | 10 |
Precision |
수렴 허용 오차(cm) | 1.0 |
TipBone |
체인 끝 본(Effector) | - |
RootBone |
체인 시작 본 | - |
// FABRIK 노드 설정 예시
FAnimNode_FABRIK FABRIKNode;
FABRIKNode.TipBone = FBoneReference(FName("tail_08"));
FABRIKNode.RootBone = FBoneReference(FName("tail_01"));
FABRIKNode.EffectorLocation = TargetLocation; // 목표 위치
FABRIKNode.MaxIterations = 10;
FABRIKNode.Precision = 1.0f; // 1cm 이내 수렴
FABRIKNode.EffectorLocationSpace = EBoneControlSpace::BCS_WorldSpace;
IK Rig 시스템 (UE5)
UE5의 IK Rig 에디터와 IK Retargeter 활용
UE5에서는 IK Rig 에디터를 통해 스켈레톤에 IK 솔버를 시각적으로 설정합니다. IK Rig는 IK 솔버 설정을 애셋으로 관리하며, IK Retargeter의 기반이 되기도 합니다.
IK Goal 설정
IK Rig 에디터에서 본을 선택하고 Goal을 추가합니다. Goal은 AnimBP나 Control Rig에서 동적으로 위치를 제어할 수 있습니다.
솔버 체인
하나의 IK Rig에 여러 솔버를 추가할 수 있습니다. 예: 왼발 TwoBoneIK + 오른발 TwoBoneIK + 스파인 FABRIK.
IK Retargeter
소스와 타겟 스켈레톤의 IK Rig를 매핑하여 애니메이션 리타겟팅을 수행합니다. IK Goal 위치를 기반으로 리타겟팅하면 체형이 달라도 자연스러운 결과를 얻습니다.
Chain Mapping
IK Rig의 체인 정의를 기반으로 소스-타겟 본 체인을 자동/수동 매핑합니다. FK/IK 리타겟팅을 혼합하여 최적 결과를 얻습니다.
IK는 일반적으로 AnimGraph의 후반부에서 적용합니다. BlendSpace/StateMachine으로 기본 포즈를 만든 후, IK 노드로 발/손 위치를 보정하는 순서입니다. IK를 먼저 적용하면 이후 블렌딩에서 IK 결과가 깨질 수 있습니다.
핵심 요약
- IK는 이펙터의 목표 위치에서 관절 회전을 역산하는 기법으로, FK의 반대 방향이다.
- Two Bone IK는 2본 체인의 해석적 솔버로, 삼각법으로 정확한 해를 한 번에 구하며 가장 빠르다.
- Pole Vector는 관절이 꺾이는 방향을 결정하며, 올바른 설정이 자연스러운 IK의 핵심이다.
- FABRIK은 N본 체인에 대해 Forward/Backward Reaching을 반복하여 수렴하는 솔버이다.
- UE5의 IK Rig 에디터로 솔버를 시각적으로 설정하고, IK Retargeter와 연동하여 리타겟팅에 활용한다.
도전 과제
배운 내용을 직접 실습해보세요
AnimBP의 AnimGraph에 Two Bone IK 노드를 추가하세요. IKBone을 hand_r로, Effector Location을 월드 스페이스의 특정 위치(문 손잡이 등)로 설정하고, 캐릭터가 접근할 때 손이 자연스럽게 타겟으로 이동하도록 구현하세요.
FABRIK 노드를 사용하여 3개 이상의 본 체인(spine ~ head)에 IK를 적용하세요. 캐릭터가 특정 포인트를 바라보도록 상체 전체가 자연스럽게 구부러지는 Look At 시스템을 FABRIK으로 구현하세요.
양손 무기(소총) 그립 시스템을 Two Bone IK로 구현하세요. 오른손은 무기 그립 소켓에 고정하고, 왼손은 무기의 전방 그립 소켓을 IK 타겟으로 추적합니다. Joint Target(Pole Vector)을 올바르게 설정하여 팔꿈치가 자연스러운 방향을 가리키게 하세요.