본문으로 건너뛰기

안동민 개발노트

본문 시작

블렌드 스페이스 기본 사용법

1D·2D 블렌드 스페이스의 축과 샘플을 설정하고 속도·방향 값으로 이동 애니메이션을 자연스럽게 섞습니다.

지난 절에서는 애니메이션 상태 전환을 관리하는 스테이트 머신을 다뤘습니다.

스테이트 머신은 상태가 바뀔 때 전환에 효과적이지만, 이동 속도처럼 연속적으로 변하는 값마다 상태를 새로 만들 수는 없습니다.

이처럼 연속 값 변화에 따라 여러 애니메이션을 부드럽게 섞어야 할 때 사용하는 것이 블렌드 스페이스(Blend Space)입니다.

이번 절에서는 블렌드 스페이스의 기본 개념과 생성/활용법을 정리합니다.

블렌드 스페이스 기준

블렌드 스페이스는 Speed와 Direction처럼 연속적으로 변하는 축 값을 받아 여러 이동 포즈를 보간해 상태 수를 늘리지 않고 움직임을 이어 줍니다.

  1. 블렌드 스페이스 개념

    상태 1 블렌드 스페이스(Blend Space)는 1D 또는 2D 공간 내에서 여러 개의 애니메이션 시퀀스(Animation Sequence)를 보간(Interpolate)하여 연속적이고 자연스러운 애니메이션을 생성하는 애니메이션 애셋입니다.

  2. 블렌드 스페이스 종류

    상태 2 언리얼 엔진에는 두 가지 주요 블렌드 스페이스가 있습니다.

  3. 블렌드 스페이스 생성 및 설정

    상태 3 Idle, Walk, Run 샘플을 Speed 축에 배치하고, 축 범위가 실제 이동 속도와 맞는지 프리뷰에서 확인합니다.


블렌드 스페이스란 무엇인가?

Blend Space는 연속 입력값을 포즈 사이에 보간한다

상태를 많이 늘리는 대신 Speed와 Direction 축 값을 안정적으로 계산하면 움직임 전환이 부드러워진다.

구성 요소역할확인 기준
Axis SettingsSpeed와 Direction의 최소/최대 범위를 정한다.실제 캐릭터 이동값 범위와 맞는지 본다.
SamplesIdle, Walk, Run, Strafe 시퀀스를 축 위치에 배치한다.빈 구간 없이 자연스럽게 보간되는지 확인한다.
Anim BP Input이벤트 그래프에서 계산한 값을 Player 노드에 연결한다.Speed가 0일 때 Idle로 안정적으로 돌아오는지 본다.
Output Pose계산된 포즈를 최종 애니메이션 그래프에 합친다.급격한 방향 전환에서 발 미끄러짐을 확인한다.

블렌드 스페이스(Blend Space)는 1D 또는 2D 공간 내에서 여러 개의 애니메이션 시퀀스(Animation Sequence)를 보간(Interpolate)하여 연속적이고 자연스러운 애니메이션을 생성하는 에셋(Asset)입니다.

캐릭터의 이동 속도, 방향, 자세 등의 파라미터 값에 따라 자동으로 적절한 애니메이션을 섞어주는 역할을 합니다.

블렌드 스페이스가 필요한 이유
  • 연속적인 애니메이션 변화: 캐릭터의 속도나 방향처럼 연속적으로 변하는 값에 따라 애니메이션을 부드럽게 전환하고 싶을 때 유용합니다. (예: 멈춰있다가 천천히 걷고, 빠르게 달리다가 전력 질주하는 과정의 모든 애니메이션)
  • 애니메이션 개수 최적화: 모든 중간 단계의 애니메이션을 개별 시퀀스로 만들 필요 없이, 몇 개의 핵심 애니메이션만으로 다양한 중간 포즈를 생성할 수 있어 애니메이션 에셋의 수를 줄일 수 있습니다.
  • 자연스러운 움직임: 애니메이션 간의 블렌딩을 통해 딱딱한 전환 없이 매우 자연스러운 움직임을 구현할 수 있습니다.
  • 직관적인 편집: 블렌드 스페이스 에디터에서 시각적으로 애니메이션 보간 지점과 결과를 확인할 수 있어 편리합니다.

블렌드 스페이스 종류

언리얼 엔진에는 두 가지 주요 블렌드 스페이스가 있습니다.

블렌드 스페이스 1D (Blend Space 1D): 하나의 입력 파라미터(예: 속도)에 따라 애니메이션을 블렌딩합니다.

주로 멈춤 → 걷기 → 달리기처럼 선형적으로 변하는 움직임에 사용됩니다.

블렌드 스페이스 (Blend Space) (2D): 두 개의 입력 파라미터(예: 속도방향)에 따라 애니메이션을 블렌딩합니다.

캐릭터의 전후좌우 이동과 회전을 동시에 고려해야 할 때 사용됩니다.

이 절에서는 가장 흔히 사용되는 블렌드 스페이스 (2D)를 중심으로 설명하겠습니다.

1D와 2D 블렌드 스페이스는 입력 축의 수가 다르므로, 먼저 어떤 움직임 값을 섞을지 정하고 에셋을 선택해야 합니다.

입력 축 수로 에셋 선택하기

멈춤에서 달리기처럼 한 값만 섞으면 1D, 속도와 방향을 함께 섞으면 2D 블렌드 스페이스가 맞습니다.

  1. Speed 하나로 Idle, Walk, Run 보간

    Blend Space 1D Axis Speed 0 to 600 Use 전방 이동 중심 캐릭터 구현이 단순하고 축 튜닝이 쉬워 기본 이동 예제에 적합합니다.

  2. Speed와 Direction을 함께 보간

    Blend Space 2D X Axis Speed 0 to 600 Y Axis Direction -180 to 180 후진, 좌우 이동, 조준 이동처럼 방향별 샘플이 필요할 때 선택합니다.


블렌드 스페이스 생성 및 설정

캐릭터의 Idle, Walk, Run 애니메이션을 블렌딩하는 블렌드 스페이스를 만들어봅시다.

필요한 애니메이션 에셋
  • Idle (가만히 서 있는 애니메이션)
  • Walk (걷는 애니메이션)
  • Run (달리는 애니메이션)
생성 단계

콘텐츠 브라우저에서 마우스 오른쪽 버튼을 클릭합니다.

애니메이션(Animation) > 블렌드 스페이스(Blend Space)를 선택합니다.

블렌드 스페이스를 적용할 스켈레톤(Skeleton)을 선택합니다. (여러분의 캐릭터 스켈레톤, 예: SKM_Mannequin_Skeleton)

이름을 지정합니다. (예: BS_WalkRun)

블렌드 스페이스 에디터 설정

BS_WalkRun 에셋을 더블클릭하여 블렌드 스페이스 에디터를 엽니다.

에디터는 그리드 형태의 작업 공간과 애니메이션 미리보기 패널로 구성됩니다.

축 설정 (Axis Settings)
  • 에셋 디테일(Asset Details) 패널에서 Axis Settings 섹션을 찾습니다.
  • Horizontal Axis (X)
    • Name: Speed (또는 속도)
    • Minimum Axis Value: 0.0 (멈춰있는 상태)
    • Maximum Axis Value: 600.0 (최대 달리기 속도, 실제 게임 속도에 맞게 조절)
    • Number of Grid Divisions: 6 (그리드를 몇 칸으로 나눌지. 많을수록 세밀한 블렌딩)
  • (선택 사항) Vertical Axis (Y)
    • Name: Direction (또는 방향)
    • Minimum Axis Value: -180.0 (후진 또는 왼쪽 회전)
    • Maximum Axis Value: 180.0 (전진 또는 오른쪽 회전)
    • Number of Grid Divisions: 4
애니메이션 배치
  • 에셋 브라우저(Asset Browser) 패널(일반적으로 좌측 하단)에서 필요한 애니메이션 시퀀스(Idle, Walk, Run 등)를 찾습니다.
  • 각 애니메이션을 그리드 패널의 적절한 위치로 드래그 앤 드롭하여 배치합니다.
    • Idle 애니메이션: Speed 0.0 지점 (그리드의 가장 왼쪽)에 배치합니다.
    • Walk 애니메이션: Speed 약 200.0 지점에 배치합니다.
    • Run 애니메이션: Speed 600.0 (Maximum Axis Value) 지점에 배치합니다.
    • (2D 블렌드 스페이스의 경우, Y축 방향에 따라 전진/후진/좌우 애니메이션 등을 추가 배치할 수 있습니다.)
  • 애니메이션 미리보기: 그리드 내의 흰색 동그라미를 드래그하여 움직여보세요. 동그라미가 위치한 지점의 Speed 값에 따라 Idle, Walk, Run 애니메이션이 자동으로 블렌딩되어 캐릭터의 움직임이 부드럽게 변하는 것을 확인할 수 있습니다.
  • 저장 버튼을 클릭하여 블렌드 스페이스 에셋을 저장합니다.

애니메이션 블루프린트에서 블렌드 스페이스 활용

이제 2절에서 만들었던 애님 블루프린트의 스테이트 머신에 이 BS_WalkRun 블렌드 스페이스를 적용해봅시다.

애님 블루프린트 (예: ABP_Mannequin) 열기
이벤트 그래프 설정 (속도 변수 업데이트)
  • 지난 절에서 구현한 Event Blueprint Update Animation에서 캐릭터의 속도를 계산하여 Speed라는 Float 변수를 업데이트하는 로직이 이미 있어야 합니다. 이 Speed 변수가 BS_WalkRunSpeed 축 입력으로 사용됩니다.
  • (선택 사항) Direction 축을 사용한다면, Get Actor Right VectorGet VelocityDot Product를 이용해 방향 값을 계산하여 Direction 변수를 업데이트하는 로직을 추가해야 합니다.
애님 그래프 - Walk_Run 상태 업데이트
  • 애님 그래프 탭으로 이동합니다.
  • Default State Machine 노드를 더블클릭하여 내부로 진입합니다.
  • Walk_Run 상태를 더블클릭하여 내부 그래프를 엽니다.
  • 기존에 있다면 제거하고, Blend Space Player 노드를 배치합니다.
  • Blend Space PlayerBlend Space 핀에 여러분이 만든 BS_WalkRun 블렌드 스페이스 에셋을 연결합니다.
  • Blend Space Player 노드에 Speed (및 Direction 옵션) 입력 핀이 나타납니다.
  • 이 핀에 애님 블루프린트의 Speed 변수(Get 노드)를 연결합니다.
  • Blend Space PlayerOutput 핀을 Output Pose 노드에 연결합니다.
  • 컴파일 및 저장합니다.

상태머신 테스트 및 디버깅

블렌드 스페이스가 어색하게 보일 때는 애니메이션 자체보다 축 값, 샘플 배치, 보간 속도부터 점검하는 편이 빠릅니다.

블렌드 스페이스 튜닝 루프

어색한 보간은 샘플을 더 넣는 것으로만 해결되지 않습니다. 입력 값이 안정적인지, 축 범위가 실제 속도와 맞는지부터 확인해야 합니다.

  1. 관찰 신호

    debug 속도 튐 Speed가 프레임마다 튀면 애니메이션이 잔떨림처럼 보입니다. 방향 반전 Direction 계산 기준이 월드/로컬 중 어디인지 확인합니다.

  2. 튜닝 순서

    loop 1. 입력 값 Velocity 길이, 방향 Dot Product, 보간 변수를 먼저 출력합니다. 2. 축 범위 Max Speed보다 좁거나 넓은 축은 샘플을 한쪽으로 몰아갑니다. 3. 샘플 배치 Idle, Walk, Run의 중간 구간이 비어 있으면 전환이 급해집니다. ↓ 4. 보간 속도 입력 보간과 에셋 보간을 함께 조절해 과한 지연을 줄입니다. 5. 방향 샘플 좌우/후진 이동이 있다면 2D 샘플을 균형 있게 배치합니다. 6. 실기 테스트 ↺ 입력 값 디버그 필터로 실제 캐릭터를 선택하고 플레이 중 값을 봅니다.

  3. 1. 입력 값

    입력 값 Velocity 길이, 방향 Dot Product, 보간 변수를 먼저 출력합니다.

  4. 2. 축 범위

    축 범위 Max Speed보다 좁거나 넓은 축은 샘플을 한쪽으로 몰아갑니다.

  5. 3. 샘플 배치

    샘플 배치 Idle, Walk, Run의 중간 구간이 비어 있으면 전환이 급해집니다.

  6. 4. 보간 속도

    보간 속도 입력 보간과 에셋 보간을 함께 조절해 과한 지연을 줄입니다.

  7. 5. 방향 샘플

    방향 샘플 좌우/후진 이동이 있다면 2D 샘플을 균형 있게 배치합니다.

  8. 6. 실기 테스트 ↺ 입력 값

    실기 테스트 ↺ 입력 값 디버그 필터로 실제 캐릭터를 선택하고 플레이 중 값을 봅니다.

  9. 흔한 원인

    fix 정지 상태 흔들림 Speed 임계값 아래에서는 0으로 고정해 Idle을 안정화합니다. 달리기 전환 지연 CharacterMovement 가속도와 블렌드 보간 시간이 겹치는지 봅니다. 대각 이동 어색함 전후좌우 샘플의 루트 방향과 발 접지 타이밍을 맞춥니다.

게임을 플레이하고 캐릭터를 움직여보세요.

디버깅
  • 애님 블루프린트 에디터를 열어둔 상태로 게임을 플레이하면서, 디버그 필터(Debug Filter)를 여러분의 캐릭터로 설정하면, 애님 그래프가 실시간으로 어떻게 작동하는지 확인할 수 있습니다.
  • Walk_Run 상태 안의 Blend Space Player 노드를 선택하면, 디테일 패널에서 Speed 값에 따른 애니메이션 블렌딩 비율을 시각적으로 확인할 수 있습니다.

블렌드 스페이스는 캐릭터의 움직임을 훨씬 더 유기적이고 사실적으로 만드는 데 필수적인 도구입니다.

Idle, Walk, Run 뿐만 아니라, 특정 자세에서의 이동, 조준 상태에서의 이동 등 다양한 복합 움직임에 활용될 수 있습니다.

블렌드 스페이스를 실제 프로젝트에 넣을 때는 에셋의 축 설정과 애님 블루프린트의 입력 변수가 같은 의미를 갖는지 계속 비교해야 합니다.

다음 요약표는 값 계산, 샘플 배치, 테스트 지점을 한 화면에서 다시 묶어줍니다.

축 값과 샘플 위치를 같은 언어로 맞추기

블렌드 스페이스는 에셋 그리드만 맞춰도 부족합니다. Anim Blueprint가 넘기는 Speed와 Direction이 그리드의 축 의미와 일치해야 합니다.

  1. BS_WalkRun 그리드

    Asset 0 Idle 샘플 200 Walk 샘플 600 Run 샘플 CharacterMovement의 Max Walk Speed와 X축 최대값이 크게 어긋나지 않게 맞춥니다. 후진과 좌우 이동이 필요할 때만 Y축 Direction 샘플을 추가합니다.

  2. 축 범위

    CharacterMovement의 Max Walk Speed와 X축 최대값이 크게 어긋나지 않게 맞춥니다.

  3. 방향 축

    후진과 좌우 이동이 필요할 때만 Y축 Direction 샘플을 추가합니다.

  4. Anim Blueprint 입력

    Runtime Velocity의 길이를 Float 변수에 저장하고 Blend Space Player의 Speed 핀에 연결합니다. 작은 속도 흔들림은 임계값 아래에서 0으로 처리해 Idle 떨림을 줄입니다. Dot Product를 쓴다면 월드 기준인지 캐릭터 로컬 기준인지 통일합니다. Debug Filter로 실제 캐릭터를 선택하고 입력 값과 그리드 포인터를 함께 봅니다.

  5. Speed 계산

    Velocity의 길이를 Float 변수에 저장하고 Blend Space Player의 Speed 핀에 연결합니다.

  6. 정지 안정화

    작은 속도 흔들림은 임계값 아래에서 0으로 처리해 Idle 떨림을 줄입니다.

  7. 방향 계산

    Dot Product를 쓴다면 월드 기준인지 캐릭터 로컬 기준인지 통일합니다.

  8. 플레이 중 확인

    Debug Filter로 실제 캐릭터를 선택하고 입력 값과 그리드 포인터를 함께 봅니다.


이번 절에서는 블렌드 스페이스의 기본 개념, 생성 및 설정 방법, 그리고 애님 블루프린트에서 이를 활용하여 캐릭터의 움직임에 따라 애니메이션을 부드럽게 블렌딩하는 방법을 알아보았습니다.

블렌드 스페이스는 캐릭터 애니메이션의 자연스러움을 극대화하는 데 중요한 역할을 합니다.

마지막으로 블렌드 스페이스의 축 범위, 샘플 배치, AnimBP 입력값을 함께 확인하는 기준을 정리합니다.

Blend Space 축과 샘플 검증

Blend Space는 축 값과 샘플 배치가 맞을 때 자연스럽게 보간됩니다. AnimBP가 넣는 값도 같은 단위를 써야 합니다.

  1. 축 범위가 이동 변수와 맞아야 합니다

    Speed의 최대값은 Character Movement의 Max Walk Speed와 맞추고, Direction은 좌우 이동을 표현할 필요가 있을 때 사용합니다. 01 Idle, Walk, Run처럼 속도만 필요한 이동은 Blend Space 1D로 시작해 축을 단순하게 유지합니다. 02 전후좌우 스트레이프가 필요하면 Speed와 Direction 축을 쓰고 각 방향 샘플을 균형 있게 배치합니다. 03 AnimBP에서 Speed와 Direction을 계산해 Blend Space Player에 연결하고 Interpolation Time으로 급변을 완화합니다.

  2. 축 범위가 이동 변수와 맞아야 합니다

    Speed의 최대값은 Character Movement의 Max Walk Speed와 맞추고, Direction은 좌우 이동을 표현할 필요가 있을 때 사용합니다.

  3. 1D 선택

    Idle, Walk, Run처럼 속도만 필요한 이동은 Blend Space 1D로 시작해 축을 단순하게 유지합니다.

  4. 2D 선택

    전후좌우 스트레이프가 필요하면 Speed와 Direction 축을 쓰고 각 방향 샘플을 균형 있게 배치합니다.

  5. 값 공급

    AnimBP에서 Speed와 Direction을 계산해 Blend Space Player에 연결하고 Interpolation Time으로 급변을 완화합니다.