PART 4 · 강의 1/3

IK 기초와 Two Bone IK

Inverse Kinematics의 핵심 원리와 TwoBoneIK, FABRIK 솔버의 구현을 심층 분석합니다.

SECTION 01

Inverse Kinematics 개요

FK vs IK, IK 솔버의 기본 원리

Forward Kinematics(FK)은 루트에서 이펙터(끝점)까지 순방향으로 트랜스폼을 전파합니다. 반면 Inverse Kinematics(IK)는 이펙터의 목표 위치가 주어지면 체인의 본 회전을 역으로 계산합니다.

Forward Kinematics (FK)

각 관절의 회전 값을 지정하면 끝점 위치가 결정됩니다. 키프레임 애니메이션의 기본 방식입니다. 직관적이지만 특정 위치에 손/발을 맞추기 어렵습니다.

Inverse Kinematics (IK)

끝점(Effector)의 목표 위치를 지정하면 관절 회전이 자동 계산됩니다. 바닥에 발 맞추기, 물체 잡기 등 목표 위치 기반 포징에 필수적입니다.

IK 솔버 종류 비교
솔버 본 수 특징 성능 ─────────────────────────────────────────────────────── Two Bone IK 2본 해석적 해법, 정확한 결과 매우 빠름 FABRIK N본 반복 수렴, 체인 길이 자유 빠름 CCD IK N본 반복 수렴, 관절 제한 지원 보통 PBIK 전신 전신 다중 이펙터 느림 Full Body IK 전신 Control Rig 전용 FBIK 느림
IK Goal과 Effector

IK Goal은 이펙터가 도달해야 할 목표 위치/회전입니다. Effector는 IK 체인의 끝 본(예: hand, foot)입니다. IK 솔버는 Goal에 Effector를 가능한 한 가깝게 이동시키도록 체인의 중간 관절들을 회전시킵니다.

SECTION 02

Two Bone IK 솔버

2본 체인의 해석적 IK 솔버 동작 원리

Two Bone IK는 정확히 2개의 본(예: 상완-하완, 대퇴-경골)으로 구성된 체인에 대한 해석적(analytical) 솔버입니다. 삼각법을 이용하여 정확한 해를 한 번에 계산하므로 가장 빠릅니다.

Two Bone IK 수학적 원리
Pole Vector (무릎 방향) ↗ [Root] ──── Bone A (L_a) ──── [Mid] ──── Bone B (L_b) ──── [End/Effector] (Upper Arm) (Elbow) (Hand) ↘ ↓ 거리 D = |Root - Goal| 코사인 법칙으로 각도 계산: cos(θ_a) = (L_a² + D² - L_b²) / (2·L_a·D) cos(θ_b) = (L_a² + L_b² - D²) / (2·L_a·L_b) D > L_a + L_b: 도달 불가 → 체인 완전 펼침 D < |L_a - L_b|: 접힘 → 최소 각도 적용 그 외: 삼각법으로 정확한 각도 계산
C++
// 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의 중요성

Pole Vector는 관절이 꺾이는 평면의 방향을 결정합니다. 무릎이 앞으로 향해야 하는 다리 IK에서, Pole Vector가 잘못되면 무릎이 옆이나 뒤로 꺾일 수 있습니다. 일반적으로 무릎 앞쪽 약간 위 지점을 지정합니다.

SECTION 03

FABRIK 솔버

Forward and Backward Reaching Inverse Kinematics의 동작 원리

FABRIK(Forward And Backward Reaching Inverse Kinematics)는 N개 본 체인에 대해 반복적으로 수렴하는 IK 솔버입니다. 꼬리, 촉수, 긴 체인에 적합합니다.

FABRIK 알고리즘 단계
[Forward Reaching] - 이펙터에서 루트 방향으로 End → Goal 위치로 이동 각 본을 원래 길이 유지하며 역방향 당김 A ─── B ─── C ─── D(End) → A' ── B' ── C' ── D'(=Goal) [Backward Reaching] - 루트에서 이펙터 방향으로 Root를 원래 위치로 고정 각 본을 원래 길이 유지하며 순방향 당김 A(원래위치) ── B'' ── C'' ── D'' [반복] - 오차가 허용 범위 내로 수렴할 때까지 일반적으로 3~10회 반복이면 충분
파라미터 설명 권장값
MaxIterations 최대 반복 횟수 10
Precision 수렴 허용 오차(cm) 1.0
TipBone 체인 끝 본(Effector) -
RootBone 체인 시작 본 -
C++
// 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;
SECTION 04

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 리타겟팅을 혼합하여 최적 결과를 얻습니다.

AnimBP에서 IK 적용 순서

IK는 일반적으로 AnimGraph의 후반부에서 적용합니다. BlendSpace/StateMachine으로 기본 포즈를 만든 후, IK 노드로 발/손 위치를 보정하는 순서입니다. IK를 먼저 적용하면 이후 블렌딩에서 IK 결과가 깨질 수 있습니다.

SUMMARY

핵심 요약

  • IK는 이펙터의 목표 위치에서 관절 회전을 역산하는 기법으로, FK의 반대 방향이다.
  • Two Bone IK는 2본 체인의 해석적 솔버로, 삼각법으로 정확한 해를 한 번에 구하며 가장 빠르다.
  • Pole Vector는 관절이 꺾이는 방향을 결정하며, 올바른 설정이 자연스러운 IK의 핵심이다.
  • FABRIK은 N본 체인에 대해 Forward/Backward Reaching을 반복하여 수렴하는 솔버이다.
  • UE5의 IK Rig 에디터로 솔버를 시각적으로 설정하고, IK Retargeter와 연동하여 리타겟팅에 활용한다.
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: Two Bone IK로 손 위치 고정

AnimBP의 AnimGraph에 Two Bone IK 노드를 추가하세요. IKBone을 hand_r로, Effector Location을 월드 스페이스의 특정 위치(문 손잡이 등)로 설정하고, 캐릭터가 접근할 때 손이 자연스럽게 타겟으로 이동하도록 구현하세요.

실습 2: FABRIK 체인 IK 실험

FABRIK 노드를 사용하여 3개 이상의 본 체인(spine ~ head)에 IK를 적용하세요. 캐릭터가 특정 포인트를 바라보도록 상체 전체가 자연스럽게 구부러지는 Look At 시스템을 FABRIK으로 구현하세요.

심화 과제

양손 무기(소총) 그립 시스템을 Two Bone IK로 구현하세요. 오른손은 무기 그립 소켓에 고정하고, 왼손은 무기의 전방 그립 소켓을 IK 타겟으로 추적합니다. Joint Target(Pole Vector)을 올바르게 설정하여 팔꿈치가 자연스러운 방향을 가리키게 하세요.