본문으로 건너뛰기

안동민 개발노트

본문 시작

프로시저럴 애니메이션 구현

IK와 물리 기반 애니메이션으로 지형·충돌에 실시간 반응하는 포즈를 만들고 적용 범위와 한계를 이해합니다.

지금까지는 애니메이션 시퀀스, 블렌드 스페이스, 애님 몽타주처럼 미리 제작된 자산을 중심으로 캐릭터를 움직였습니다.

하지만 실제 게임에서는 지형, 충돌, 물리 반응처럼 런타임 상황에 맞춰 즉시 움직임이 바뀌어야 할 때가 많습니다.

이럴 때 사용하는 접근이 프로시저럴 애니메이션(Procedural Animation)입니다.

이번 절에서는 프로시저럴 애니메이션 개념과 언리얼 엔진에서의 기본 구현 방법을 정리합니다.

프로시저럴 애니메이션은 원본 포즈를 지우지 않고 제한된 목표 보정을 더한다

발 접지·손 정렬·조준처럼 런타임 문맥이 필요한 부분만 관측→목표→solver→blend로 닫아야 품질·안정성·비용을 함께 제어할 수 있다.

  1. 1. Base pose

    Base pose locomotion·montage·root motion의 기준 포즈를 먼저 만든다.

  2. 2. Observe

    Observe trace hit, socket, curve, gameplay state를 수집한다.

  3. 3. Goal

    Goal 좌표계를 통일하고 거리·각도·속도를 필터링한다.

  4. 4. Solve

    Solve IK Rig·Control Rig solver가 허용된 bone chain을 보정한다.

  5. 5. Blend

    Blend alpha·bone mask·joint limit로 delta를 제한한다.

  6. 6. Validate

    Validate trace miss·급경사·전환·LOD에서 fallback pose를 확인한다.

  7. AnimGraph node

    간단한 chain IK와 pose blend를 평가 순서 안에서 처리한다.

  8. IK Rig

    goal·solver·bone setting으로 gameplay 포즈를 절차적으로 맞춘다.

  9. Control Rig / FBIK

    여러 effector와 per-bone stiffness·limit가 필요한 복합 보정에 쓴다.

  10. Physics

    후행 흔들림·충돌 반응을 만들되 constraint와 안정성 비용을 측정한다.


프로시저럴 애니메이션이란 무엇인가?

프로시저럴 애니메이션은 입력값으로 매 프레임 포즈를 보정한다

클립을 대체하는 기능이 아니라, 속도·지형·물리 값을 읽어 기존 포즈를 상황에 맞춘다.

  1. Read Input

    속도, 지면 경사, 조준 방향, 충돌 정보를 읽는다.

  2. Solve Rule

    IK, 스프링, 보간, 노이즈 같은 계산을 적용한다.

  3. Clamp

    관절 한계와 보정 강도를 제한한다.

  4. Blend

    기본 애니메이션 클립과 자연스럽게 섞는다.

  5. Validate

    발 미끄러짐과 튐을 플레이 중 확인한다.

기준판정
잘 맞는 사례발 IK, 조준 오프셋, 지형 적응, 보조 흔들림
주의할 점계산 포즈가 원본 클립을 완전히 덮지 않게 강도를 조절한다.

프로시저럴 애니메이션(Procedural Animation)은 미리 제작된 애니메이션 데이터 대신, 알고리즘이나 수학적 계산을 통해 런타임(게임 플레이 중)에 실시간으로 생성되는 애니메이션을 의미합니다.

이는 캐릭터의 뼈대(Bone)를 직접 제어하거나, 물리 시뮬레이션을 적용하여 동작을 만들어내는 방식입니다.

프로시저럴 애니메이션이 필요한 이유:

  • 실시간 반응성: 캐릭터가 지형의 경사에 따라 발의 각도를 맞추거나, 사물과 충돌 시 팔다리가 자연스럽게 움직이는 등, 예측 불가능한 게임플레이 상황에 실시간으로 반응하는 애니메이션을 만들 수 있습니다.
  • 다양성과 변화: 동일한 기본 애니메이션에 프로시저럴 요소를 추가하여 매번 조금씩 다른, 반복되지 않는 움직임을 생성할 수 있습니다. (예: 걷기 애니메이션에 미세한 흔들림 추가)
  • 제작 효율성: 모든 세부 동작을 애니메이터가 만들 필요 없이, 일부 로직을 통해 자동으로 생성되므로 제작 비용을 절감할 수 있습니다.
  • 현실감 증가: 물리 법칙을 따르는 듯한 자연스러운 움직임은 캐릭터의 현실감을 높여줍니다. (예: IK를 이용한 발 맞춤)

언리얼 엔진의 주요 프로시저럴 애니메이션 기법

언리얼 엔진의 애님 그래프에서는 다양한 프로시저럴 애니메이션 노드를 제공합니다.

가장 대표적인 것은 IK (Inverse Kinematics)와 물리 기반 시뮬레이션입니다.

IK (Inverse Kinematics) - 역운동학

IK (Inverse Kinematics)는 프로시저럴 애니메이션에서 가장 자주 쓰이는 핵심 기법입니다.

일반 애니메이션은 정운동학(Forward Kinematics, FK)처럼 부모 뼈대부터 자식 뼈대 순서로 회전을 적용해 포즈를 만듭니다.

반대로 IK는 발이나 손 같은 자식 뼈대의 목표 위치/회전을 먼저 정하고, 시스템이 부모 뼈대 회전을 역으로 계산해 목표를 맞춥니다.

활용 예시
  • 발 IK (Foot IK): 경사진 지형을 걷거나 계단을 오를 때 캐릭터의 발이 땅에 딱 붙도록 자동으로 조절합니다.
  • 손 IK: 캐릭터의 손이 문손잡이나 벽에 있는 스위치 등 특정 오브젝트에 정확하게 닿도록 합니다.
  • 조준 IK: 총을 든 캐릭터가 조준 방향에 따라 손과 팔의 자세를 자연스럽게 변경합니다.
IK 구현의 기본 개념 (Foot IK 예시)
애님 그래프에 IK 노드 추가
  • 애님 블루프린트의 애님 그래프 탭으로 이동합니다.
  • 기존의 Output Pose (혹은 Slot 노드)와 Final Animation Pose 사이에 Two Bone IK 노드 또는 Fabrik 노드(더 유연한 IK 솔루션)를 추가합니다. Two Bone IK는 말 그대로 두 개의 뼈대에 대해 IK를 적용합니다. Fabrik은 더 많은 뼈대에 적용 가능합니다.
IK 노드 설정 (예: Two Bone IK for Foot IK)
  • IK Bone: IK를 적용할 최종 자식 뼈대 (예: foot_l, foot_r)
  • Effector Location: IK Bone이 목표로 할 월드 공간의 위치 (예: 발이 닿아야 할 지면의 위치)
  • Joint Target Location: 중간 뼈대(무릎)가 꺾이는 방향을 결정하는 위치 (무릎이 바깥쪽으로 꺾이게 유도)
  • Alpha: IK의 영향력 (0.0은 IK 적용 안 함, 1.0은 IK 100% 적용). 보통 캐릭터가 땅에 발이 닿을 때만 IK를 적용하므로 이 값을 동적으로 제어해야 합니다.
이벤트 그래프에서 IK 목표 위치 계산
  • 이벤트 그래프 탭으로 이동합니다.
  • Event Blueprint Update Animation에서 캐릭터의 발이 닿아야 할 지면의 위치를 계산합니다. 이는 주로 라인 트레이스(Line Trace)를 사용하여 구현됩니다.
    • 캐릭터의 발 뼈대 위치에서 아래로 라인 트레이스를 쏘아 지면과의 교차점을 찾습니다.
    • 이 교차점의 Z값(높이)을 Effector Location으로 사용하고, 이 위치를 저장할 변수(예: IK_Foot_L_Location)를 애님 블루프린트에 추가합니다.
    • 발이 땅에 닿았는지 여부(라인 트레이스 히트 여부)를 기반으로 IK_Foot_L_Alpha와 같은 Float 변수를 0.0 ~ 1.0 사이로 업데이트합니다. 이 변수를 Two Bone IK 노드의 Alpha 핀에 연결합니다.
  • 컴파일 및 저장합니다.

Physics Based Animation

언리얼 엔진의 피직스 에셋(Physics Asset)은 캐릭터의 뼈대에 물리 시뮬레이션(Ragdoll Physics)을 적용할 수 있게 해줍니다.

이를 통해 캐릭터가 외부 충격에 의해 쓰러지거나, 팔다리가 중력에 따라 자연스럽게 늘어지는 등의 효과를 구현할 수 있습니다.

활용 예시
  • 래그돌(Ragdoll) 효과: 캐릭터가 죽거나 큰 충격을 받았을 때, 애니메이션을 중단하고 물리 시뮬레이션으로 전환하여 자연스럽게 쓰러지도록 합니다.
  • 부분 물리 시뮬레이션: 옷자락, 머리카락, 작은 장신구 등에만 물리 시뮬레이션을 적용하여 미세한 흔들림을 만듭니다. (PhysX Clothing, Cable Component 등)
  • Procedural Aiming (부분적인 IK와 Physics 혼합): 조준 시 어깨나 팔의 움직임에 미세한 물리적 관성을 추가하여 좀 더 현실적인 느낌을 줍니다.
피직스 에셋 기본 사용법 (래그돌 전환)

피직스 에셋 생성: 콘텐츠 브라우저에서 캐릭터의 스켈레톤을 우클릭 > 생성(Create) > 피직스 에셋(Physics Asset)을 선택하여 생성합니다.

피직스 에셋 에디터에서 각 뼈대에 콜리전 메시와 조인트 제한을 설정할 수 있습니다.

애님 블루프린트에서 물리 시뮬레이션 활성화
  • 애님 그래프 탭으로 이동합니다.
  • Final Animation Pose 바로 앞에 RigidBody 노드를 추가합니다.
  • RigidBody 노드의 Physics Asset 핀에 여러분이 만든 피직스 에셋을 연결합니다.
  • Blend in Time, Blend out Time 등을 설정하여 물리 시뮬레이션으로 전환될 때의 블렌딩 시간을 조절합니다.
  • Simulate Physics 불리언 핀을 노출시켜 이벤트 그래프에서 제어할 수 있도록 합니다.
이벤트 그래프에서 물리 시뮬레이션 트리거
  • 이벤트 그래프 탭으로 이동합니다.
  • 캐릭터가 사망하거나 큰 충격을 받았을 때(예: Event AnyDamage 후 체력이 0이 되었을 때), Set Simulate Physics 노드를 사용하여 RigidBody 노드의 Simulate Physics 핀에 True 값을 연결합니다.
  • 이렇게 하면 캐릭터가 물리적으로 쓰러지는 래그돌 상태로 전환됩니다.
  • 컴파일 및 저장합니다.

프로시저럴 애니메이션의 장점과 한계

프로시저럴 애니메이션은 계산 결과를 그대로 최종 포즈에 덮어쓰는 것이 아니라, 기준 애니메이션 위에 필요한 보정만 섞는 방식으로 설계해야 안정적입니다.

프로시저럴 애니메이션 적용 경계

IK와 물리 보정은 기본 애니메이션을 대체하는 기능이 아니라 런타임 상황에 맞춰 필요한 부분만 보정하는 후처리 계층입니다.

  1. 프로시저럴 적용 경계

    경계 예측 가능성 플레이어가 자주 보는 동작은 보정 범위를 작게 둡니다. 성능 비용 트레이스, IK, 물리는 필요한 캐릭터와 거리에서만 켭니다.

  2. 런타임 보정 흐름

    pose stack 기준 포즈 스테이트 머신 또는 몽타주가 기본 움직임을 만듭니다. 환경 측정 라인 트레이스, 표면 노멀, 충돌 상태를 계산합니다. 보정 계산 Foot IK, Aim Offset, 물리 노드의 목표 값을 정합니다. 알파 블렌딩 상황에 따라 0에서 1까지 영향력을 부드럽게 섞습니다.

  3. 실패를 줄이는 장치

    guard 보정 한계 발 위치나 손 위치가 너무 멀면 보정을 끄거나 캡을 둡니다. 전환 완충 점프, 낙하, 래그돌 전환 때 IK 알파를 천천히 낮춥니다. LOD 정책 멀리 있는 캐릭터는 세부 보정을 줄여 프레임 비용을 낮춥니다.

장점
  • 높은 유연성: 게임플레이 상황에 따라 실시간으로 변화하는 애니메이션을 구현할 수 있습니다.
  • 제작 비용 절감: 특정 유형의 애니메이션을 수작업으로 만들 필요가 줄어듭니다.
  • 사실감 증대: 물리 법칙을 따르는 듯한 자연스러운 움직임은 캐릭터의 현실감을 높입니다.
한계
  • 복잡한 구현: 수학적 계산과 물리 시뮬레이션에 대한 이해가 필요하며, 로직 구현이 까다로울 수 있습니다.
  • 예측 불가능성: 물리 시뮬레이션은 때때로 의도치 않은 결과를 초래할 수 있어 세밀한 제어가 어려울 수 있습니다.
  • 성능 부하: 복잡한 물리 시뮬레이션은 런타임 성능에 부담을 줄 수 있습니다.

따라서 프로시저럴 애니메이션은 기존 키프레임 애니메이션을 완전히 대체하기보다는, 키프레임 애니메이션의 부족한 부분을 보완하거나 특별한 효과를 구현하는 데 활용됩니다. (예: 기본 걷기 애니메이션에 Foot IK를 추가하여 지형에 발을 맞추는 등)

이 둘을 적절히 혼합하여 사용하는 것이 가장 효과적인 애니메이션 구현 전략입니다.

프로시저럴 보정은 효과가 강한 만큼 안전장치를 함께 설계해야 안정적입니다.

아래 다이어그램은 측정, 제한, 블렌딩, 비활성화 조건을 구현 전에 점검하는 기준으로 정리한 것입니다.

런타임 보정은 측정값과 안전 한계를 같이 둔다

Foot IK, 손 IK, RigidBody 보정은 기준 애니메이션 위에 얹는 값입니다. 계산이 틀렸을 때 꺼질 조건까지 함께 설계해야 합니다.

  1. 라인 트레이스 값을 신뢰하기 전에 검증한다

    Measure 발 아래 히트 여부, 표면 노멀, 거리 차이를 저장하고 실패 시 이전 값을 쓰지 않습니다.

  2. 보정 거리는 최대치를 둔다

    Clamp 발이나 손 목표가 너무 멀면 뼈대가 늘어나 보이므로 위치와 회전을 제한합니다.

  3. Alpha로 천천히 들어오고 나간다

    Blend 점프, 낙하, 공격 중에는 IK Alpha를 낮춰 기준 애니메이션을 해치지 않게 합니다.

  4. 거리와 LOD 기준으로 비용 축소

    Disable 멀리 있는 NPC는 트레이스 주기와 물리 보정을 줄여 프레임 비용을 관리합니다.


IK나 물리 기반 보정을 추가할 때는 입력값을 검증하고, 보정 강도를 제한하고, 원본 애니메이션과 블렌딩한 뒤 비활성화 조건을 함께 둬야 예측 가능한 결과를 얻을 수 있습니다.

프로시저럴 보정은 제한과 블렌딩이 안전장치다

IK나 물리 보정은 상황 반응성을 높이지만 입력값이 튀면 포즈도 바로 튀므로 보정 범위와 해제 조건을 같이 둡니다.

  1. 입력
    측정값을 먼저 검증

    입력 발 위치, 표면 노멀, 충돌 결과가 유효한지 확인한 뒤 보정에 사용합니다.

  2. 제한
    과한 회전은 자른다

    제한 관절 각도와 이동 거리에 상한을 두어 비정상 포즈로 튀지 않게 합니다.

  3. 혼합
    원본 포즈와 섞는다

    혼합 키프레임 애니메이션을 기준으로 필요한 보정만 weight로 더합니다.


이번 절에서는 프로시저럴 애니메이션의 개념과 IK, 물리 시뮬레이션을 이용한 기본 구현 방법에 대해 알아보았습니다.

프로시저럴 애니메이션은 캐릭터에게 생동감과 반응성을 불어넣는 고급 기법입니다.

이로써 7장 애니메이션 블루프린트의 모든 내용을 마쳤습니다.

마지막으로 프로시저럴 애니메이션을 적용할 때 Trace, IK 노드, Alpha 제한을 함께 보는 기준을 정리합니다.

Procedural Animation 보정 단계

IK와 물리 기반 보정은 기본 애니메이션 위에 얹는 레이어입니다. 추적값, Alpha, 제한 범위를 함께 조절합니다.

  1. 먼저 추적하고, 작게 섞고, 제한합니다

    발 IK는 바닥 Trace로 목표 지점을 찾고, Effector Location과 Alpha를 통해 원본 포즈를 과하게 깨지 않게 보정합니다. 01 Line Trace로 발밑 위치와 노멀을 읽고, 손 IK는 무기 소켓이나 상호작용 지점을 기준으로 목표를 잡습니다. 02 Two Bone IK, FABRIK, Transform Bone을 Anim Graph 뒤쪽에 배치해 기본 Locomotion 포즈를 보정합니다. 03 속도, 점프, 경사도에 따라 IK Alpha를 줄이고 관절 꺾임이 심한 위치는 Clamp로 제한합니다.

  2. 먼저 추적하고, 작게 섞고, 제한합니다

    발 IK는 바닥 Trace로 목표 지점을 찾고, Effector Location과 Alpha를 통해 원본 포즈를 과하게 깨지 않게 보정합니다.

  3. 목표 계산

    Line Trace로 발밑 위치와 노멀을 읽고, 손 IK는 무기 소켓이나 상호작용 지점을 기준으로 목표를 잡습니다.

  4. 포즈 보정

    Two Bone IK, FABRIK, Transform Bone을 Anim Graph 뒤쪽에 배치해 기본 Locomotion 포즈를 보정합니다.

  5. 블렌드 제한

    속도, 점프, 경사도에 따라 IK Alpha를 줄이고 관절 꺾임이 심한 위치는 Clamp로 제한합니다.