3.4 블렌드 트리 생성 및 설정

Tutorial

Beginner

+10XP

60 mins

(7)

Unity Technologies

3.4 블렌드 트리 생성 및 설정

이 튜토리얼에서 배울 내용은 다음과 같습니다.

  • 블렌드 트리의 세 가지 유형 살펴보기
  • 1D, 2D, 다이렉트 블렌드 트리를 생성하고 설정하는 방법 알아보기

1. 개요

블렌드 트리는 각 애니메이션 클립이 최종 애니메이션에 어느 정도 기여하도록 여러 개의 애니메이션 클립을 동시에 플레이하는 방법입니다.

이 튜토리얼에서는 블렌드 트리가 작동하는 방법을 알아보고, 관련 설정이 애니메이션을 블렌딩하는 방식에 어떤 영향을 주는지 살펴보겠습니다.

2. 시작하기 전에

이 튜토리얼은 '3D 애니메이션 시스템 소개' 교육 과정의 Unity 프로젝트를 활용합니다. 프로젝트를 아직 다운로드하지 않았다면 다운로드 후 계속 진행하세요.

프로젝트를 다운로드한 후에 다음 단계를 따릅니다.

1. Unity 에디터에서 프로젝트를 엽니다.

2. 프로젝트 창에서 Assets > 3.4 - Creating and configuring Blend Trees > Scenes로 이동합니다.

3. 블렌드 트리 기초

블렌드 트리의 기본 기능부터 살펴보겠습니다.

블렌드 트리 및 모션

각 애니메이터 상태는 모션을 플레이합니다. 모션은 애니메이션 클립 혹은 블렌드 트리를 지칭하는 용어입니다.


블렌드 트리는 모션 컬렉션을 플레이합니다. 그렇기 때문에 블렌드 트리는 애니메이션 클립의 조합과 추가로 중첩된 블렌드 트리를 플레이할 수 있습니다.

블렌드 트리 및 정규화된 시간

블렌드 트리는 애니메이션 클립의 정규화된 시간을 사용하여 여러 개의 애니메이션 클립을 동일한 속도로 플레이할 수 있습니다.

정규화된 시간은 애니메이션 클립이 얼마나 많이 진행되었는지에 따라 애니메이션 클립의 현재 시간을 알 수 있는 척도입니다.

정규화된 시간은 값에 따라 다음과 같이 구분됩니다.

  • 0은 애니메이션 클립의 시작을 의미합니다.
  • 0.5중간까지 진행되었음을 의미합니다.
  • 1은 애니메이션 클립의 을 의미합니다.


정규화된 시간을 기준으로 모든 애니메이션 클립을 플레이하면 비슷한 애니메이션 클립을 동기화할 수 있습니다.

캐릭터 애니메이션에 활용할 걷기 애니메이션 클립과 달리기 애니메이션 클립을 블렌딩하는 경우를 예로 들 수 있습니다. 애니메이션 클립마다 플레이 시간이 다를 수 있지만, 동일한 정규화된 시간에서 거의 같은 이동이 발생하는 이상(예: 서로 교차해 움직이는 다리, 바닥에 닿는 발) 최종 모션에서는 애니메이션이 동시에 발생합니다.

애니메이션 클립이 이런 식으로 블렌딩되면 애니메이션 클립의 가중치를 기준으로 최종 플레이 시간이 계산됩니다.

4. 블렌드 트리 유형

블렌드 트리는 다음 5가지 유형으로 구분됩니다.

  1. 1D
  2. 2D 심플 디렉셔널
  3. 2D 프리폼 디렉셔널
  4. 2D 프리폼 카르테지안
  5. 다이렉트

이러한 유형 간의 유일한 차이는 블렌드 트리 내의 애니메이션 클립에 대한 가중치가 계산되는 방식입니다.

모션 한계값

각 블렌드 트리에는 여러 가지 모션이 있고(다른 블렌드 트리 또는 애니메이션 클립) 저마다 한계값을 가집니다. 한계값은 모션이 최대 가중치에 도달한 지점을 말합니다. 모션이 한계값에서 멀어질수록 상대적인 가중치가 떨어집니다.

1D 블렌드 트리에는 하나의 한계값 플로트 값이 있습니다. 2D 블렌드 트리 한계값은 Pos XPos Y라는 두 개의 플로트 값으로 표현됩니다.

다이렉트 블렌드 트리는 한계값을 갖지 않으며, 모션의 가중치를 특정한 파라미터로 직접 설정합니다.

애니메이터 파라미터 및 차원

또한 각 블렌드 트리는 하나 이상의 애니메이터 파라미터를 사용합니다. 이 파라미터의 값이 모션 한계값과 얼마나 가까운지에 따라 결과에 추가되는 각 애니메이션 클립의 가중치가 결정됩니다.

블렌드 트리의 차원은 애니메이터 파라미터가 몇 개나 사용되는지 나타냅니다.

  • 1D 블렌드 트리는 플로트 파라미터 하나를 사용하며, 이 값을 블렌딩 값이라고 합니다.
  • 2D 블렌드 트리는 플로트 파라미터를 두 개 사용하며, 두 값이 함께 블렌딩 위치를 정의합니다.
  • 다이렉트 블렌드 트리는 플로트 파라미터로 임의의 숫자를 사용하는 특수한 유형입니다.

5. 1D 블렌드 트리

가장 단순한 블렌드 트리 타입은 1D입니다. 한계값이 블렌딩 값과 인접하는 모션에만 가중치를 부여하여 최종 생성되는 애니메이션을 계산합니다.

블렌딩 값이 한계값과 같으면 모션에 가중치 1이 부여되고 나머지는 모두 가중치 0을 받습니다.

블렌딩 값이 양 극단의 한계값을 하나라도 초과하면, 초과하는 극단의 모션에 가중치 1이 부여되고 나머지는 모두 가중치 0을 받습니다.

파라미터가 두 모션의 한계값 사이에 있으면 모션의 가중치가 한계값 사이에 있는 블렌딩 값의 정규화된 거리를 기준으로 계산됩니다.

예시

한계값이 1과 2인 두 개의 모션이 있고 블렌딩 값이 1.7일 경우 가중치는 다음과 같습니다.

  • 한계값이 1인 모션의 경우 가중치가 0.3입니다.
  • 한계값이 2인 모션의 경우 가중치0.7입니다.

6. 1D 블렌드 트리 생성

1D 블렌드 트리를 생성하는 방법은 다음과 같습니다.

1. 프로젝트 창에서 Assets > 3.4 - Creating and configuring Blend Trees > Scenes로 이동하고 1DBlendTrees를 클릭하여 씬을 엽니다.

2. 계층 구조에서 MazeLowMan 게임 오브젝트를 선택합니다.

3. 인스펙터에서 Animator 컴포넌트를 찾습니다.

4. Controller 프로퍼티에서 WalkRunBlending Animator 컨트롤러를 더블 클릭해 Animator 창을 엽니다.

5. Animator 창에서 그리드 배경을 오른쪽 클릭하고 Create State > From New Blend Tree를 선택합니다.

6. 새로 생성된 애니메이터 상태를 더블 클릭해 검토합니다.

7. 새로운 Blend Tree를 선택해 인스펙터에서 설정을 검토합니다.

7. 블렌드 트리 설정 검토 및 구성

새로운 1D 블렌드 트리에 모션을 추가하기 전에 블렌드 트리 설정을 살펴보겠습니다.

이름

애니메이션 클립과 블렌드 트리를 통틀어 모든 모션에는 이름이 있습니다. 애니메이션 클립에 고유한 이름이 있기 때문에 블렌드 트리의 이름은 따로 설정해야 합니다. 이 필드에 입력하는 이름은 블렌드 트리가 포함된 애니메이터 상태의 이름과 달라야 합니다.

블렌드 트리에 이름을 추가하는 방법은 다음과 같습니다.

  • 인스펙터 창 상단에서 이름 필드에 이름을 추가합니다.

Blend Type

이름 필드 아래에 Blend Type 설정이 있습니다.

  • Blend Type1D 블렌드 트리로 설정되어 있는지 확인합니다.

블렌딩 값 파라미터

Blend Type1D 블렌드 트리로 설정하고 나면 다음으로 블렌딩 값에 사용되는 파라미터가 표시됩니다.

다음 중 어떤 것을 생성하는지에 따라 결과가 달라집니다.

  • 2D 블렌드 트리의 경우 다음 설정이 블렌딩 위치(수평에서 수직 순서)에 사용되는 파라미터가 됩니다.
  • 다이렉트 블렌드 트리의 경우 파라미터가 모션 위가 아니라 모션과 함께 나열됩니다. 모션당 하나의 파라미터만 사용하기 때문입니다.


사용할 플로트 파라미터가 없으면 블렌드 트리를 생성할 때 Blend라는 파라미터가 자동으로 생성됩니다.

8. 블렌딩 그래프 살펴보기

가중치 분포를 보고 블렌딩 파라미터의 프리뷰 값을 기준으로 애니메이션을 미리 보는 데 사용할 수 있는 또 다른 유용한 툴이 있습니다.

1D 블렌드 트리

1D 블렌드 트리의 경우 그래프가 십자형 패턴으로 각 모션의 가중치를 보여 줍니다.

모션을 나타내는 선을 드래그해 한계값을 변경할 수 있지만, 모션에 정확한 한계값을 적용해야 한다면 이 방법을 권장하지 않습니다. 여기에 적용할 정확도는 작업 중인 프로젝트별로 조정해 가게 됩니다.

2D 블렌드 트리

2D 블렌드 트리의 경우 그래프에 각 모션이 점으로 표시되고 각 모션의 가중치가 파란색으로 펼쳐져 표시됩니다.


모션을 클릭해서 해당 모션의 가중치를 볼 수 있습니다. 그래프에서 모션의 한계값을 드래그해 변경할 수도 있지만, 이 역시 모션에 정확한 한계값을 원한다면 권장되지 않습니다.

다이렉트 블렌드 트리

다이렉트 블렌드 트리는 모션별로 완전히 독립적인 가중치가 적용되므로 그래프가 없습니다.

애니메이션 미리 보기

1D 및 2D 블렌드 트리

1D와 2D 블렌드 트리 중 어떤 것을 생성했든 상관없이, 그래프를 따라 빨간색 핸들을 드래그하면 블렌딩 파라미터의 프리뷰 값을 기준으로 애니메이션을 미리 볼 수 있습니다.


프리뷰는 인스펙터 하단의 프리뷰 상자 안에 표시됩니다.

다이렉트 블렌드 트리

다이렉트 블렌드 트리의 경우 사용되는 파라미터 각각에 대해 슬라이더가 제공되므로 가중치에 해당하는 여러 개의 값을 미리 볼 수 있습니다.

9. 1D 블렌드 트리에 모션 추가

그래프 아래에 모션 목록이 있습니다. 블렌드 트리에 모션을 추가하는 방법은 다음과 같습니다.

1. 인스펙터에서 추가(+)를 클릭하고 Add Motion Field를 선택합니다.


2.
모션 필드가 두 개가 되도록 위의 단계를 반복합니다.

1D 블렌드 트리를 선택했기 때문에 먼저 모션에 해당하는 필드가 표시되고, 모션의 한계값에 대한 플로트, 속도에 대한 두 번째 플로트가 차례로 표시됩니다.


3.
프로젝트 창에서 Assets > 3.4 - Creating and configuring Blend Trees > AnimationClips로 이동합니다.


4.
HumanoidWalkHumanoidRun 모델을 모두 확장합니다.

5. 프로젝트 창에서 인스펙터의 Motion 필드로 Walk Run 애니메이션 클립 서브 에셋을 드래그합니다. 다음과 같이 설정합니다.

  • Walk의 한계값을 0으로
  • Run의 한계값을 1



순서를 바꿔야 할 경우 모션을 드래그해 위치를 변경할 수 있습니다. 기본적으로 모션의 한계값이 모두 자동화됩니다. 이를 해제하려면 목록에 모션이 두 개 이상 있을 경우 Automate Thresholds 체크박스를 비활성화합니다.

목록에 있는 각 모션에는 여러 개의 모션별 설정이 있습니다. 이 설정은 사용 중인 블렌드 트리 유형에 따라 달라집니다.

시간 스케일 설정

블렌드 트리 유형에 관계없이 모든 모션에는 시간 스케일 설정이 있습니다. 이 설정은 시계 아이콘으로 표시됩니다.


시간 스케일은 해당하는 모션에만 적용된다는 사실을 제외하면 애니메이터 상태의 속도와 동일하게 작동합니다. Speed0.5이면 모션 플레이 속도가 절반으로 느려져 플레이 시간이 2배 길어집니다.

모션이 휴머노이드 애니메이션 클립인 경우에도 모션의 애니메이션을 미러링할 수 있습니다.

블렌드 트리 중첩

블렌드 트리 안에 또 다른 블렌드 트리를 중첩하려는 경우 추가(+) > New Blend Tree를 선택하면 됩니다.

기술적으로 블렌드 트리 안에 많은 블렌드 트리가 존재할 수 있습니다. 그러나 복합적인 가중치 계산이 이루어짐에 따라 애니메이션 성능이 영향을 받을 수 있습니다.

10. 블렌드 트리 테스트

1D 블렌드 트리를 테스트하는 방법은 다음과 같습니다.

1. 계층 구조에서 MazeLowMan 게임 오브젝트를 선택합니다.

2. 플레이 버튼을 눌러 플레이 모드를 시작합니다.

3. 인스펙터에서 Speed Control 컴포넌트를 찾습니다. Speed 슬라이더를 사용하여 걷기와 뛰기의 블렌딩을 조정합니다.

4. 플레이 버튼을 다시 눌러 플레이 모드를 종료합니다.

11. 2D 블렌드 트리: 심플 디렉셔널

다른 블렌드 트리 유형의 정확한 가중치 계산은 이 입문용 튜토리얼의 범위에 속하지 않습니다. 지금은 각 유형을 언제 사용해야 하는지만 알고 있으면 됩니다.

블렌딩 위치 축 하나에 애니메이션이 두 개밖에 없을 경우(양 끝에 하나씩) 2D 심플 디렉셔널 블렌드 트리를 사용해야 합니다. 또한 한 방향에 애니메이션이 하나밖에 없을 경우에는 심플 디렉셔널만 사용할 수 있습니다.

예를 들어, 상하좌우 네 방향으로 각각 걷는 애니메이션이 4개 있다면 2D 심플 디렉셔널 블렌드 트리를 사용할 수 있습니다.

2D 블렌드 트리의 경우 한계값에 Pos XPos Y라는 레이블이 지정됩니다. 이 레이블은 사용 중인 두 개의 파라미터가 정의하는 블렌딩 위치를 의미합니다.

이러한 유형의 블렌드 트리를 사용할 경우 중앙 블렌딩 위치 (0, 0)에 모션을 하나 넣어 방향이 없는 상태나 중립적인 방향을 표현할 수도 있습니다. 이 방법은 옵션이지만 권장되는 방법입니다.

중앙 모션을 넣을 경우 출력 가중치의 기준이 다음과 같은 선형 보간 두 개의 조합이 됩니다.

  1. 샘플링한 지점 양쪽의 두 방향 사이 보간으로, 중심점에서 샘플링된 지점까지의 각도를 기준으로 정해집니다.
  2. 결과와 중앙 모션 간 보간으로, 중앙에서부터의 거리를 기준으로 정해집니다. 샘플링된 지점이 중앙에 가까울수록 할당된 가중치가 높아집니다.

중앙 모션을 넣지 않을 경우, 중앙 모션을 사용할 법한 상황이 발생할 때마다 블렌딩된 결과에서 모든 모션의 평균을 사용합니다. 그 결과 더 많은 애니메이션이 한 번에 샘플링되기 때문에 결과로 생성되는 애니메이션을 예측하기가 더 어려워집니다.

12. 2D 블렌드 트리: 프리폼 디렉셔널

2D 프리폼 디렉셔널 블렌드 트리는 심플 디렉셔널과 비슷하지만, 한 방향에 여러 개의 애니메이션이 허용된다는 차이가 있습니다.

여기서 사용되는 보간 알고리즘을 폴라 그레디언트 밴드(Polar Gradient Band) 보간이라고 합니다. 아주 복잡하기 때문에, 이번 교육 과정에서는 출력 가중치 계산이 심플 디렉셔널과 비슷하게 이루어진다는 사실만 알고 있으면 됩니다. 다른 점은 블렌딩 공간에서 더 자유롭게 배치되는 모션을 사용할 수 있다는 것입니다.

13. 2D 블렌드 트리: 프리폼 카르테지안

모션이 여러 방향을 나타내지 않는다면 2D 프리폼 카르테지안 유형을 사용해야 합니다. 프리폼 카르테지안의 경우 X 및 Y 파라미터가 여러 개념을 나타낼 수 있기 때문입니다. 출력 가중치 계산이 각도에 기반을 두지 않으며, 중앙 위치 (0, 0)이 특수하게 처리되지 않습니다.

2D 프리폼 카르테지안은 1D 블렌드 트리를 사용할 때와 비슷한 상황에서 사용할 수 있는데, 이때 각 모션은 1D 블렌드 트리이기도 합니다. 단, 프리폼 카르테지안의 경우 카르테지안 그레디언트 밴드(Cartesian Gradient Band) 보간이라는 더 복잡한 보간 알고리즘을 사용한다는 차이가 있습니다. 바꿔 말하면 파라미터 공간에서 보다 자유롭게 배치된 모션을 사용할 수 있습니다.

속도와 각속도가 둘 다 변화하는 캐릭터를 대상으로 프리폼 카르테지안 블렌딩 트리를 사용할 수 있습니다.

14. 2D 프리폼 카르테지안 블렌드 트리 테스트

2D 프리폼 카르테지안 블렌드 트리를 설정하려면 1D 블렌드 트리를 생성할 때 따른 일반 프로세스와 동일한 단계를 수행하되, 추가로 한계값이 필요합니다.

사전에 만들어 놓은 예제를 살펴보겠습니다.

1. 프로젝트 창에서 Assets > 3.4 - Creating and configuring Blend Trees > Scenes 로 이동하고 2DFreefromCartesianBlendTrees 씬을 더블 클릭해 엽니다.

2. 계층 구조에서 MazeLowMan 게임 오브젝트를 선택합니다.

3. 플레이 버튼을 눌러 플레이 모드를 시작합니다.

4. 인스펙터에서 Speed Turn Control 스크립트 컴포넌트를 찾습니다.

5. SpeedTurn 필드를 모두 조정해 캐릭터에 어떤 영향을 주는지 살펴봅니다.

6. 플레이 버튼을 다시 눌러 플레이 모드를 종료합니다.

15. 2D 프리폼 카르테지안 블렌드 트리 설정 살펴보기

이 블렌드 트리가 어떻게 설정되었는지 살펴보는 방법은 다음과 같습니다.

1. 인스펙터에서 Animator 컴포넌트를 찾습니다.

2. Controller 프로퍼티에서 WalkRunTurnBlending Animator 컨트롤러를 더블 클릭해 엽니다.

3. Animator 창에서 Locomotion 상태를 더블 클릭해 엽니다.

4. LocomotionBlendTree를 선택해 설정 구성을 확인합니다.

16. 다이렉트 블렌드 트리

다이렉트 블렌드 트리는 가장 단순하지만 사용 빈도가 가장 낮은 블렌드 트리 유형입니다. 각 가중치가 애니메이터 파라미터로 직접 제어되는 모션이 임의의 개수만큼 허용됩니다. 여기에는 한계값 설정 대신 파라미터 선택이 있습니다. 즉, 가중치가 1인 모션이 여러 개 있을 수 있습니다.

다이렉트 블렌드 트리는 각 블렌드 셰이프가 독립적인 블렌드 셰이프 애니메이션 같은 경우에 사용해야 합니다. 블렌드 셰이프는 일반적으로 얼굴 애니메이션과 같은 경우에 사용됩니다. 예를 들어, 미소에 대한 블렌드 셰이프와 찡그린 눈썹에 대한 블렌드 셰이프가 따로 존재할 수 있습니다. 이처럼 별도의 모션이 있으면 미소와 눈썹을 독립적으로 제어할 수 있습니다.

17. 블렌드 트리의 자동 설정 옵션

루트 모션이 있는 모션을 포함하는 1D 및 2D 블렌드 트리의 경우 모션 목록 아래에 자동화 옵션이 있습니다. 1D 블렌드 트리는 컴퓨팅 한계값, 2D 블렌드 트리는 컴퓨팅 위치가 자동화 옵션에 해당합니다.

이 같은 설정은 루트 모션을 기반으로 모션의 한계값을 특정한 값으로 설정하는 방법입니다. 한계값은 설정한 후에 언제든지 변경할 수 있습니다.

다음과 같은 루트 모션의 요소를 한계값 설정에 사용할 수 있습니다.

  • Speed: 애니메이션이 초당 이동하는 평균 거리(미터)
  • Velocity X: 애니메이션이 로컬 X축에서 초당 이동하는 평균 거리(미터)
  • Velocity Y: 애니메이션이 로컬 Y축에서 초당 이동하는 평균 거리(미터)
  • Velocity Z: 애니메이션이 로컬 Z축에서 초당 이동하는 평균 거리(미터)
  • Angular Velocity: 로컬 Y축을 기준으로 애니메이션의 초당 평균 회전. 라디안 혹은 도 단위로 계산할 수 있습니다.

옵션 선택

블렌딩하는 애니메이션에 따라 최적의 옵션이 다를 수 있습니다.

예를 들면 다음과 같습니다.

  • 전방으로 걷고 뛰는 다양한 사이드스텝/스트레이프 애니메이션을 블렌딩하려면 Velocity X와 Z를 선택하는 것이 유리할 수 있습니다. 이 같은 프로퍼티에서 애니메이션이 달라지기 때문입니다.
  • 다양한 회전 애니메이션을 블렌딩하려는 경우 Angular Velocity가 적절한 선택입니다.


이 옵션은 블렌딩 값이나 블렌딩 위치를 설정하는 데 사용하는 파라미터의 기준을 애니메이션의 물리적 특징에 둘 수 있기 때문에 유용합니다.

속도 파라미터가 있고 속도에 기반한 모션이 포함된 블렌드 트리가 있는 경우, 속도 파라미터의 값을 원하는 캐릭터의 이동 속도로 설정하면 만족스러운 결과를 얻을 수 있습니다. 이때 블렌드 트리에 속도를 수용할 수 있는 애니메이션이 있다는 조건을 충족해야 합니다.

시간 스케일 조정

블렌드 트리의 모션 중에 자식 블렌드 트리가 하나도 없으면 시간 스케일을 조정할 수 있는 옵션이 나타납니다.

컴퓨팅 한계값/위치와 마찬가지로 이러한 설정을 사용하면 시간 스케일 값을 설정할 수 있으며, 이 값은 언제든지 조정이 가능합니다. 그러나 컴퓨팅 한계값/위치와 달리 시간 스케일을 조정하면 한계값이 아니라 모션의 속도가 바뀝니다.

시간 스케일 설정을 통해 애니메이션의 속도를 설정할 때 다음 두 옵션 중에 선택할 수 있습니다.

  1. Homogeneous Speed: 루트 모션 속도가 0이 아닌 애니메이션의 속도가 동일하도록 모든 속도를 설정합니다. 대기 상태 같은 애니메이션을 고려하며, 이러한 애니메이션의 속도는 변경하지 않습니다.
  2. Reset Time Scale: 모든 속도를 1로 다시 설정합니다.

18. 요약

이 튜토리얼에서는 세 가지 유형의 블렌드 트리를 살펴보았습니다. 1D, 2D, 다이렉트 블렌드 트리를 생성하고 설정하는 방법을 배웠고, 각 유형을 언제 사용해야 하는지 알아보았습니다.

이어지는 다음 튜토리얼에서는 전환에 대해 더 자세히 살펴보고 생성 및 설정 방법을 배워 보겠습니다.

Complete this Tutorial