PART 4 · 강의 2/3

Full Body IK와 Control Rig

UControlRig, FullBodyIK 솔버, Backwards Reach의 동작 원리와 Control Rig 프로그래밍을 분석합니다.

SECTION 01

Control Rig 아키텍처

UControlRig 시스템의 구조와 AnimGraph 통합

Control Rig는 UE5의 프로시저럴 본 조작 시스템입니다. 비주얼 스크립팅(Rig Graph)으로 본 트랜스폼을 프로그래밍하며, AnimBP의 Control Rig 노드를 통해 런타임에 적용됩니다.

Control Rig 시스템 구조
UControlRig (Runtime Asset) ├── Rig Graph (Visual Script) │ ├── Rig Units (노드) │ │ ├── FBIK Solver │ │ ├── TwoBone IK │ │ ├── Aim / Look At │ │ ├── Math Operations │ │ └── Custom C++ Units │ │ │ ├── Controls (외부 입력) │ │ ├── IK_Foot_L (Goal) │ │ ├── IK_Foot_R (Goal) │ │ └── IK_Hand_R (Goal) │ │ │ └── Bones (출력) │ └── 수정된 본 트랜스폼 │ └── AnimBP 연동 └── Control Rig 노드로 AnimGraph에 삽입 [AnimGraph] Locomotion → [Control Rig Node] → Output ↑ Input Pose ↑ Modified Pose
Control Rig vs AnimBP IK 노드

AnimBP의 TwoBoneIK/FABRIK 노드는 단일 솔버를 간단히 적용할 때 적합합니다. Control Rig는 여러 솔버를 조합하거나, 복잡한 프로시저럴 로직(스파인 정렬, 시선 추적, 무기 그립 조정 등)을 구현할 때 필수적입니다. 성능은 Control Rig가 약간 더 무겁지만, 유연성이 훨씬 뛰어납니다.

SECTION 02

Full Body IK (PBIK) 솔버

다중 이펙터 전신 IK 솔버의 동작 원리

Full Body IK(Position Based IK, PBIK)는 전신 스켈레톤에 여러 IK Goal을 동시에 적용하는 솔버입니다. 양발, 양손, 골반 등 여러 이펙터를 한 번에 풀어 전체 포즈를 조정합니다.

설정 설명 기본값
Root Bone PBIK 솔버의 루트 (보통 pelvis) pelvis
Iterations 솔버 반복 횟수 (높을수록 정확하지만 느림) 20
Mass Multiplier 본별 질량 가중치 (높은 본이 덜 움직임) 1.0
Stiffness 관절 강성 (높을수록 원래 포즈 유지) 0.0
Pull Chain Alpha 이펙터가 체인을 당기는 강도 1.0
Control Rig 의사 코드
// Control Rig에서 FBIK 설정 [Forwards Solve] // 1. PBIK 솔버 추가 PBIK_Solver: Root = "pelvis" Iterations = 20 Effectors: - foot_l → IK_Foot_L_Goal (Position + Rotation) - foot_r → IK_Foot_R_Goal (Position + Rotation) - hand_r → IK_Hand_R_Goal (Position Only) Bone Settings: - spine_01: Stiffness = 0.8 (스파인은 덜 움직이도록) - pelvis: RotationStiffness = 0.5 // 2. 결과 적용 Set Bone Transform(foot_l, PBIK_Result.foot_l) Set Bone Transform(foot_r, PBIK_Result.foot_r) ...
PBIK vs 개별 TwoBoneIK

양발에 각각 TwoBoneIK를 적용하면 골반이 조정되지 않아 부자연스럽습니다. PBIK는 양발 목표에 맞게 골반과 스파인까지 함께 조정하여 자연스러운 전신 포즈를 만듭니다. 특히 경사면에서 양발 높이가 다를 때 PBIK가 필수적입니다.

SECTION 03

Control Rig 프로그래밍

Rig Graph의 노드 종류와 커스텀 로직 구현

Get/Set Bone Transform

본의 트랜스폼을 읽고 수정하는 기본 노드. Initial(레퍼런스), Current(현재 평가) 중 선택합니다.

Aim / Look At

특정 본이 목표 방향을 바라보도록 회전합니다. 머리 추적, 눈 시선 등에 사용합니다.

Spring / Damper

물리 기반 스프링 동작을 시뮬레이션합니다. 보조 본(귀, 꼬리)의 자연스러운 흔들림에 활용합니다.

Distribute Rotation

여러 본에 걸쳐 회전을 분배합니다. 스파인 꺾임을 여러 본에 균등 분배할 때 사용합니다.

C++ - 커스텀 Control Rig Unit
// 커스텀 Rig Unit 구현 USTRUCT(meta = (DisplayName = "Custom Spine Solver")) struct FRigUnit_CustomSpineSolver : public FRigUnitMutable { GENERATED_BODY() UPROPERTY(meta = (Input)) FRigElementKey SpineStart; // spine_01 UPROPERTY(meta = (Input)) FRigElementKey SpineEnd; // spine_03 UPROPERTY(meta = (Input)) FVector TargetDirection; // 상체가 향할 방향 UPROPERTY(meta = (Input)) float Alpha = 1.0f; RIGVM_METHOD() virtual void Execute() override { // Spine 체인의 본들을 순회하며 // TargetDirection을 향해 균등 회전 분배 // Alpha로 적용 강도 조절 } };
SECTION 04

AnimBP와 Control Rig 통합

Control Rig 노드의 AnimGraph 배치와 데이터 연동

Control Rig AnimGraph 배치 위치
State Machine
Blend/Slot
Control Rig
Output Pose
C++
// AnimBP에서 Control Rig 입력 데이터 전달 void UMyAnimInstance::NativeUpdateAnimation(float DeltaSeconds) { Super::NativeUpdateAnimation(DeltaSeconds); // Control Rig의 IK Goal 위치 계산 // 발 IK 타겟 (지면 트레이스 결과) IK_Foot_L_Location = CalculateFootIKTarget(FName("foot_l")); IK_Foot_R_Location = CalculateFootIKTarget(FName("foot_r")); // 손 IK 타겟 (무기 그립 위치) IK_Hand_R_Location = WeaponGripTransform.GetLocation(); } // Control Rig 노드에서 이 프로퍼티를 Input으로 바인딩 // AnimBP → Control Rig → 본 수정 → Output
성능 최적화

Control Rig는 모든 본을 순회하므로 비용이 높습니다. LOD에 따라 Control Rig를 비활성화하거나, Alpha를 0으로 설정하여 먼 거리 캐릭터에서는 IK를 스킵하세요. bIsEnabled 프로퍼티로 전체 비활성화하면 평가 비용이 0이 됩니다.

SUMMARY

핵심 요약

  • Control Rig는 Rig Graph(비주얼 스크립트)로 본 트랜스폼을 프로시저럴하게 제어하는 시스템이다.
  • Full Body IK(PBIK)는 다중 이펙터를 동시에 풀어 골반/스파인까지 전신을 자연스럽게 조정한다.
  • Control Rig의 Rig Unit으로 커스텀 솔버를 C++로 구현하고, Rig Graph에서 조합할 수 있다.
  • AnimGraph에서 Control Rig 노드는 State Machine/Blend 이후, Output 직전에 배치한다.
  • LOD 기반 비활성화로 Control Rig의 성능 비용을 관리해야 한다.
PRACTICE

도전 과제

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

실습 1: Control Rig 기본 생성

Control Rig 에셋을 생성하고, Forwards Solve 그래프에서 Get Transform / Set Transform 노드로 특정 본의 위치를 수정하세요. AnimBP에서 Control Rig 노드를 연결하여 런타임에 적용되는지 확인하세요.

실습 2: Full Body IK 솔버 설정

Control Rig에 Full Body IK 솔버를 추가하세요. Root, Effector(양손, 양발, 머리)를 설정하고, 각 Effector의 Goal Transform을 외부 변수로 받아 캐릭터가 벽에 기대거나 물건을 잡는 포즈를 생성하세요.

심화 과제

Control Rig에서 커스텀 솔버 로직을 구현하세요. Aim, Spring, Math 노드를 조합하여 호흡에 의한 미세한 상체 움직임, 피격 시 리액션 오프셋, 가방 무게에 의한 어깨 기울임 등의 절차적 애니메이션을 만드세요.