스테이트 머신 개요

State Machine, 스테이트 머신 작동 방식 및 그 내부에 사용되는 핵심 시스템에 대한 분석입니다.

Windows
MacOS
Linux

애니메이션 State Machines (스테이트 머신)을 통해 애니메이션 블루프린트 를 보다 모듈식으로 작업할 수 있습니다. 사용자는 캐릭터나 스켈레탈 메시가 있을 수 있는 다양한 일련의 상태를 정의합니다. 다음, 그 캐릭터나 스켈레탈 메시가 각각의 상태에 들어가고 나가는 상황을, 흐름도와 비슷한 방식으로 정의합니다.

예를 들어, 다음과 같은 모습의 캐릭터 애니메이션 프로세스를 정의하는 흐름도가 있을 수 있습니다:

AnimationFlowChart.png

위 흐름도에 대한 스테이트 머신을 구성하한다면, 다음과 같을 것입니다:

StateMachine.png

스테이트 머신 해부도

스테이트 머신은 주로 여러가지 스테이트(상태), 그 스테이트로 드나드는 트랜지션(전환), 그 상황을 정의하는 룰(규칙) 등의 망으로 이루어집니다. 각 스테이트는 각각의 룰 세트와 함께, 응축되어 독립된 블루프린트 망으로 간주됩니다. 이로 인해 과도히 복잡한 애님 그래프 를 사용하지 않고도 매우 쉽게 복잡한 애니메이션 블렌딩이 가능합니다.

스테이트

개념적으로 스테이트란, 캐릭터나 스켈레탈 메시가 정기적으로 블렌딩하여 드나드는 애님 그래프의 조직화된 한 부분으로 생각하면 좋습니다. 그런 다음 그래프의 이 부분으로 트랜지션(전환)하여 드나들 수 있습니다. 예를 들어 캐릭터 애니메이션의 Idle (빈둥) 스테이트가 있고, 그 스테이트에는 애니메이션이 하나만 있을 수 있습니다.

그 스테이트 머신에서 볼 수 있는 Idle 스테이트는 다음과 같습니다.

State.png

그 스테이트에 더블클릭 하면 그래프가 열리는데, 여기서 최종 애니메이션 포즈 가 결정됩니다.

IdleStateInside.png

그러나 캐릭터가 이동을 시작하면, Movement (이동) 스테이트로 전환 가능한데, 이는 걷기나 달리기처럼 표면을 좌우로 이동하는 상태를 말합니다.

MoveState.png

이 스테이트에는 BlendSpace (블렌드스페이스)가 있을 수 있고, 거기서 캐릭터의 이동 속력과 방향을 정의할 수 있습니다.

MovementInside.png

스테이트 자체적으로는 핀이 없는데, 자유도가 높은 형태로 디자인되었기 때문입니다.

그 외부 테두리에서 선을 끌어 (블루프린트와 비슷하게) 스테이트를 연결하거나 새로운 스테이트를 만들 수 있습니다.

DragWire.png

트랜지션 룰

스테이트를 정의했으면, 스켈레탈 메시가 한 상태에서 다른 상태로 어떻게 전환되는지 제어할 수 있어야 하는데, 그 때 Transition Rule (트랜지션 룰, 전환 규칙)이 쓰입니다. 트랜지션 룰은 스테이트를 연결하는 와이어를 따라 자동 생성됩니다.

TransitionRule.png

트랜지션 룰은 True/False 값 출력을 위한 목적으로 변수 값에 대한 검사와 테스트를 몇 번이든 할 수 있습니다. 이 부울 출력값은 애니메이션이 그 트랜지션을 통해 전환할 수 있는지 없는지를 결정합니다.

TransitionRuleInside.png

위에서는 캐릭터의 Speed (속력) 값을 테스트했습니다. 값이 10 보다 커지면, 전환이 가능하도록 합니다. 이 경우 캐릭터는 Idle (빈둥) 상태에서 Movement (이동) 상태로 넘어갈 수 있는 것입니다. 그 후 빈둥 상태로 돌아올 때는 완전히 다른 규칙을 사용할 수 있습니다.

예를 들어 이동 상태에서 빈둥 상태로 돌아가는 트랜지션 룰이 다음과 같다 칩시다.

TransitionRuleReturn.png

이 안에서, 이동 상태로 전환하기 위해 테스트했던 동일한 값이 더이상 true 가 아닌지 검사합니다.

TransitionRuleReturnInside.png

컨듀잇

Conduits (도관, 컨듀잇)은 보다 고급의 공유가능 트랜지션 리소스 역할을 합니다. 트랜지션 룰은 한 상태에서 다른 상태로의 단순한 일대일 대응관계라면, 컨듀잇은 일대다, 다대일, 다대다 등이 가능합니다. 컨듀잇은 그래프상에 스테이트와 비슷하게 나타나지만, 컨듀잇 이름 앞에 있는 아이콘이 다릅니다 (아래).

ConduitNode.png

컨듀잇의 사용 예라면 캐릭터가 죽었을 때 재생할 수 있는 애니메이션이 여럿 있는 상황인 경우입니다.

캐릭터의 생명력이 0 이하이면 Death (사망) 상태로 전환되는 단순한 트랜지션 룰을 가지고 시작합니다. 그러나 그 트랜지션이 스테이트가 아니라 컨듀잇으로 이어지면, 플레이어의 사인(총상, 자상, 폭발상, 차에 치임, 모루에 깔림 등)에 대한 여러가지 검사를 거쳐 다양한 별개의 사망 스테이트로 분기시킬 수 있습니다.

그 그래프를 단순화시켜 보면 아래와 같을 것입니다:

ConduitGraph.png

그 안의 컨듀잇 그래프는 트랜지션 룰과 똑같아 보입니다:

ConduitInside.png

컨듀잇을 나가는 실제 트랜지션 룰은 그 후로 사인을 결정하여 적합한 상태로 블렌딩하도록 할 수 있습니다.

마우스 오버 프리뷰

스테이트 머신의 기능 중 하나로, 스테이트 머신 또는 그 컴포넌트 노드 중 하나 위에 마우스 커서를 올렸을 때 바로 미리보기를 할 수 있습니다. 예를 들어 하나의 스테이트 머신에 마우스 커서를 올리면, 프리뷰 창이 떠 해당 스테이트 머신의 하이 레벨 뷰를 확인할 수 있습니다. 접힌 블루프린트 망과 비슷합니다.

StateMachineHoverPreview.png

이러한 프리뷰는 스테이트 머신 내 다양한 스테이트 및 트랜지션 룰에도 확장 적용됩니다. 그 위에 커서를 올리면 그 안에 있는 내용을 미리볼 수 있습니다.

IdleStatePreview.png

트랜지션 룰의 경우, 그 안의 노드 뿐만 아니라, 그 규칙에 대한 설명도 확인할 수 있습니다.

TransitionRulePreview.png

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback