IK 셋업

Inverse Kinematic 시스템으로 고르지 않은 지형에서의 발딛기같은 반응형 애니메이션이 가능합니다.

Choose your operating system:

Windows

macOS

Linux

IKWithWithout.png

왼쪽의 캐릭터는 IK 셋업을 사용하지 않은 것이고, 중간은 IK 를 사용하여 충돌하는 오브젝트에 발을 딛고 있습니다. 오른쪽은 IK 를 사용하여 캐릭터의 주먹이 움직이는 블록에 닿을 때 애니메이션을 중지시키도록 하고 있습니다.

Inverse Kinematics (IK, 역운동학)은, 조인트 로테이션을 직접 처리하지 않고 End Effector (엔드 이펙터)위치에서 조인트 로테이션을 처리할 수 있는 방편입니다. 실제적으로는, 이펙터 위치를 주면 IK 솔루션에서 조인트의 최종 위치가 그 위치와 가급적 일치되는 로테이션 값을 구합니다. 이 방법은 울퉁불퉁한 땅이나 기타 상황에서의 캐릭터의 발이 제대로 놓일 수 있도록 하여, 월드에 재대로 반응하는 듯한 느낌을 내 줍니다.

언리얼 엔진에서는 팔이나 다리같은 것에 이상적인 2 본 IK 시스템을 사용합니다.

손발 IK 예제는 애니메이션 콘텐츠 예제 문서의 1.8 섹션을 참고하시기 바랍니다.

IK 대 FK

IK 가 무엇이고 그 작동 원리는 어떻게 되는지 이미 잘 알고 계시다면 이 부분은 건너뛰셔도 됩니다!

언리얼의 애니메이션 스켈레톤 대부분은 캐릭터나 스켈레탈 메시의 본에 바로 물려지는 로테이션 데이터로 직접 구동됩니다. 이는 Forward Kinematics , 또는 조인트나 본에 로테이션을 직접 적용하는 것으로 생각해 볼 수 있습니다. 아래는 그 개념을 도표로 나타내 본 것입니다:

diagram_FK.png

이름에서 암시하듯, Inverse Kinematics (역운동학)의 작동방식은 반대입니다. 본에 로테이션을 적용하는 대신, 본 체인에 타깃 (또는 End Effector (엔드 이펙터))를 통해 체인 마지막에서 도달해야 하는 위치를 주는 것입니다. 사용자나 애니메이터는 이펙터를 움직이면 IK 솔버(IK 시스템에서 로테이션을 구동하는 알고리즘)에서 체인 마지막의 최종 본 위치가 타깃 위치에 오도록 본을 회전시킵니다. 아래 그림에서, 엔드 이펙터는 빨강 십자선으로 표시됩니다.

diagramIK.png

UE4 에서 IK 는 기존의 애니메이션을 덮어써 캐릭터나 스켈레탈 메시의 모션이 배경과 더욱 잘 맞아떨어지도록 만드는 데 사용할 수 있습니다.

IK 셋업하기

캐릭터에 IK 를 활용하는 방법은, 사람이나 동물의 발을 땅에 놓는 것에서부터 캐릭터가 움직이는 물체에 매달리거나 붙들고 있는 것처럼 보이게 만드는 것까지, 다양합니다. 이 문서의 목적상 가장 흔히 사용되는 방법: 고르지 않은 땅이나 계단에 발딛기를 다뤄보겠습니다.

IK 를 사용하는 데 있어서 가장 중요한 고려사항은, 일반적으로 여러 곳에서의 셋업이 필요하다는 점입니다. 하이 레벨에서 보자면:

  1. 이펙터 위치 처리를 위한 셋업. 보통 폰 또는 캐릭터 블루프린트에서 이뤄집니다.

  2. 애니메이션 블루프린트 이벤트 그래프에서 폰 또는 캐릭터의 이펙터 위치를 구해오는 셋업. IK 솔버에 사용됩니다.

  3. 캐릭터의 애니메이션 블루프린트 애님 그래프 안에 2-본 IK 노드 셋업.

계획짜기

언제나 그렇듯이, 약간의 계획이 큰 도움이 되는 법입니다. IK 셋업으로 어떤 작업을 하려고 하는지 확실히 정해 두세요. 캐릭터의 발인지, 아니면 손인지, 반응할 것이 생기면 어떻게 할 것인지, 이러한 질문에 대한 대답을 일찍서부터 준비해 둘 수록 셋업도 쉬워집니다. 물론 UE4 의 블루프린트 비주얼 스크립팅 덕에, 나중에 기능을 추가하는 것도 충분히 쉬울 터입니다.

발딛기 IK 셋업

첫 번째 예제로, 고르지 않은 땅에 캐릭터의 발이 제대로 유지되도록 하는 단순한 IK 셋업에 대해 개괄적으로 살펴보겠습니다.

이 예제는 Content Examples 프로젝트에서 찾을 수 있습니다. Animation.umap 이란 이름의 맵을 열고 예제 1.8 을 살펴보세요.

폰 또는 캐릭터 블루프린트 셋업

첫 단계는 폰 또는 캐릭터 블루프린트가 필요한 데이터를 제대로 처리할 수 있도록 셋업해 주는 것입니다. 본질적으로는 발에서 약간의 트레이스를 하여 딛고 설 장애물이 있는지 확인하여 기록해야 한다는 뜻입니다.

아래 예제에서 유의할 점이 있는데, 문서에서 어지러워 보이지 않도록 블루프린트 와이어 정리를 위해 변수를 조금 추가했다는 점입니다. 이 변수는 실제 Content Examples 프로젝트에서는 찾아볼 수 없습니다.

컨스트럭션 스크립트

캐릭터 블루프린트의 컨스트럭션 스크립트는 딱 두 가지 핵심 데이터에 대한 셋업입니다:

  1. 캐릭터의 Z 높이 계산을 위한 Scale 변수.

  2. 피직스 캡슐의 절반 높이에 Scale 을 곱해 사용하는 IKTraceDistance 변수.

이미지를 클릭하거나 우클릭 - 다른이름으로 저장하여 크게 볼 수 있습니다.

이벤트 그래프

이 셋업의 경우, 이벤트 그래프가 본질적으로 담당하는 부분은, 캐릭터의 발 아래쪽으로 그냥 쏴서 장애물이 있나 찾아보는 트레이스 처리입니다. 뭔가 걸리면 나중에 애니메이션 블루프린트에서 IK 의 이펙터를 움직이는 데 사용할 수 있도록 그 거리를 저장해 둡니다.

이 그래프에서 중요한 점 한 가지는, IKFoottrace 라 불리는 커스텀 함수입니다. 이 함수는 거리와 소켓 이름을 받아 트레이스의 토대로 삼습니다. 그 후 그 결과에 따른 오프셋 값을 반환하며, 이 값은 나중에 IK 이펙터 위치 오프셋에 사용됩니다.

이 그림에서는 IKFoottrace 함수를 볼 수 있습니다. 클릭하거나 우클릭 - 다른 이름으로 저장하여 크게 볼 수 있습니다.

그리고 이건 이벤트 그래프입니다. 위 함수 덕분에, 이 인스턴스에서는 왼발 오른발에서 트레이스를 쏴 주는 일이 거의 전부인 것을 볼 수 있습니다.

이벤트 그래프의 베이스 레벨입니다. 그림을 클릭하거나 우클릭 - 다른 이름으로 저장하여 크게 볼 수 있습니다.

그 결과 게임 매 틱마다 하향 트레이스가 일어나, 땅이 얼마나 고르지 않은가를 나타내는 접점을 찾고 있는 것을 볼 수 있습니다. 걸리면 그 접점을 IK 오프셋에 저장하여 나중에 애니메이션 블루프린트에서 사용합니다.

IKTrace.png

위 그림에서 초록 다이아는 트레이스 시작 지점으로 사용된 소켓 위치를 나타냅니다. 빨강 화살표는 트레이스 자체를 나타냅니다.

애니메이션 블루프린트 셋업

애니메이션 블루프린트에서 처음으로 살펴볼 부분은 이벤트 그래프입니다. 일반적으로 말해서, 애니메이션 블루프린트에서 이벤트 그래프의 주 목적은 캐릭터 또는 폰 블루프린트와 같은 다른 소스에서 데이터를 받은 다음 애님 그래프에서 사용할 수 있도록 변수 업데이트로 변환시키는 것입니다.

이벤트 그래프

여기서 먼저 해 줄 작업은, 현재 폰을 잡아다가 모든 셋업 작업을 해 준 특정 폰 기반 클래스로 형 변환해 주는 것입니다. 그러면 폰 블루프린트의 해당 인스턴스와 직접 통신하여 그 변수에 저장된 데이터를 읽을 수 있게 됩니다.

폰 블루프린트에 저장된 IK 오프셋 데이터를 가지고, 나중에 IK 이펙터에 사용될 위치 벡터를 생성할 수 있습니다.

그림을 클릭하거나 우클릭 - 다른 이름으로 저장하여 크게 볼 수 있습니다.

애님 그래프

애님 그래프는 지금까지 조합한 정보를 적용하여 캐릭터용으로 생성된 기존의 애니메이션을 업데이트하는데 사용하는 것으로 지금까지의 셋업의 마지막을 장식합니다. 이 예제의 경우, 애님 그래프는 정말이지 애니메이션 딱 하나 재생한다는 점에서 매우 간단합니다. 대부분의 경우 Play JumpingJacks 노드를 다른 노드 여러개로 대체시켜 줘야 원하는 동작을 낼 수 있을 것입니다.

중요한 부분은, 현재 스페이스를 로컬에서 컴포넌트로 전환하는 부분입니다. 캐릭터에 재생되는 모든 애니메이션은 로컬 스페이스를 기반으로 합니다. 로컬 트랜스폼 작업은 각 본의 계층구조상 부모를 기준으로 하기 때문에 계산 속도가 가장 빠른 방식입니다. 그러나 2-본 IK 적용같은 본 조작은, 루트 본을 기준으로 하는 컴포넌트 스페이스에서 이루어져야 합니다.

이런 젼차로, 딱 IK 계산을 할 만큼만 데이터를 로컬에서 컴포넌트로 전환해 줘야 합니다. 동시에 Final Animation Pose 노드는 로컬 스페이스 데이터만 받을 수 있기에, IK 적용이 끝나면 다시 역변환해 줘야 합니다.

애니메이션의 좌표계 관련 상세 정보는 좌표계 용어집 문서를 참고해 주시기 바랍니다.

그림을 클릭하거나 우클릭 - 다른 이름으로 저장하여 크게 볼 수 있습니다.

언리얼 엔진 문서의 미래를 함께 만들어주세요! 더 나은 서비스를 제공할 수 있도록 문서 사용에 대한 피드백을 주세요.
설문조사에 참여해 주세요
취소