애니메이션 미러링

미러 데이터 테이블을 사용하여 언리얼 엔진에서 애니메이션을 미러링합니다.

Choose your operating system:

Windows

macOS

Linux

애니메이션 미러링(Animation Mirroring)은 캐릭터의 애니메이션을 한 면에서 다른 면으로 복사하여 다양한 상황에 같은 애니메이션을 재사용할 수 있는 기능입니다. 미러 데이터 테이블(Mirror Data Table) 및 기타 미러링 워크플로를 사용하여 애니메이션 시퀀스(Animation Sequences)뿐 아니라 커브(Curves), 싱크 마커(Sync Markers), 노티파이(Notify)도 미러링할 수 있습니다. 또한 언리얼 엔진 내에서 미러링하면 두 번째 사본을 관리할 필요 없이 미러링된 애니메이션을 생성할 수 있습니다.

이 문서에서는 미러 데이터 테이블과 애니메이션 블루프린트를 사용하여 애니메이션을 미러링하는 방법을 간략히 살펴봅니다.

전제조건

미러 데이터 테이블

애니메이션 미러링을 시작하려면 먼저 미러 데이터 테이블 에셋을 생성해야 합니다. 미러 데이터 테이블은 미러링하려는 스켈레톤의 모든 엘리먼트에 미러링 할당과 인스트럭션을 제공합니다.

이를 생성하려면 콘텐츠 브라우저(Content Browser)에서 추가(Add)(+) 를 클릭한 다음 애니메이션(Animation) > 미러 데이터 테이블 을 선택합니다. 그러면 미러링할 스켈레톤을 선택하는 대화창이 열립니다. 스켈레톤을 선택하고 수락(Accept) 을 클릭합니다.

미러 데이터 테이블 생성

미러 데이터 테이블을 열면 다음의 주요 영역으로 구성된 에디터가 나타납니다.

미러 데이터 테이블 에디터

  1. 데이터 테이블(Data Table) 에는 미러링할 엘리먼트 목록이 있습니다. 이 목록은 본, 노티파이, 기타 엘리먼트 이름에 따라 자동으로 채워지며 이는 데이터 테이블 디테일(Data Table Details)에서 환경설정할 수 있습니다.

  2. 데이터 테이블 디테일 에는 미러링 비헤이비어에 대한 환경설정 세팅이 있습니다.

  3. 행 에디터(Row Editor) 에는 선택된 항목의 세팅이 있습니다. 여기서 엘리먼트 이름, 미러링된 이름, 엘리먼트 타입을 편집할 수 있습니다.

항목 추가 및 편집하기

새 테이블 항목을 추가하려면 툴바의 추가(+) 버튼을 클릭하고 행 에디터 패널에서 네 가지 프로퍼티를 채웁니다.

  • 행 이름(Row Name) 은 항목의 이름입니다.

  • 이름(Name) 은 미러링할 첫 번째 본의 이름입니다.

  • 미러링된 이름(Mirrored Name) 은 미러링할 두 번째 본의 이름입니다. 두 프로퍼티 중 어디에나 왼쪽 또는 오른쪽 본을 적용할 수 있지만, 두 프로퍼티의 본은 대칭을 이뤄야 합니다.

  • 미러 엔트리 타입(Mirror Entry Type) 은 미러링할 엘리먼트의 타입입니다. 다음 타입 중에서 선택할 수 있습니다.

미러링 항목 추가

캐릭터를 완전히 미러링하려면 테이블에 골반, 척추, 목, 머리 등의 중심 본을 포함하여 스킨을 입힌 본이 대부분 포함되어야 합니다. 그래야만 미러링 작업을 할 때 미러 축에 따라 적절하게 본의 회전을 플립할 수 있기 때문입니다. 이 항목들에 대해 이름미러링된 이름 이 모두 매치되어야 합니다.

중심 본 미러링

데이터 테이블 디테일

데이터 테이블 디테일 패널에는 미러링 비헤이비어에 대한 환경설정과 기타 세팅이 있습니다.

데이터 테이블 디테일

이름

설명

미러 검색 교체 표현식(Mirror Find Replace Expressions)

테이블에 일반적인 미러 항목을 자동으로 채울 때 사용하는 표현식의 배열입니다. 자세한 내용은 검색 및 교체 표현식 부분을 참조하세요.

미러 축(Mirror Axis)

캐릭터 정면을 가로지르는 미러링 축입니다. 대부분의 경우 X축 입니다.

미러 축

스켈레톤(Skeleton)

미러링 작업에 사용할 스켈레톤 에셋입니다.

행 구조체(Row Struct)

테이블의 각 행에 사용할 구조체입니다. 확장하려면 FTableRowBase 에서 상속받아야 합니다.

클라이언트 빌드에서 제거(Strip from Client Builds)

활성화하면 이 데이터 테이블을 클라이언트 빌드에 쿠킹하지 않습니다. 서버에서만 알고 있어야 하는 비밀 테이블을 사용할 때 유용합니다.

검색 및 교체 표현식

검색교체 표현식 은 데이터 테이블 디테일에 추가하여 스켈레톤 엘리먼트의 특정 스트링 텍스트를 자동으로 찾거나 바꿀 수 있는 배열 항목입니다. 이 표현식을 사용하면 스켈레톤을 생성하거나 리임포트할 때 어떤 엘리먼트가 자동으로 채워지는지 알 수 있습니다.

검색 및 교체 표현식 프로퍼티

각 배열에는 다음과 같은 표현식이 필요합니다.

이름

설명

검색 표현식(Find Expression)

검색할 텍스트입니다. 대부분의 경우 _l, left_, _left_ 처럼 엘리먼트 이름에 붙는 대칭 모디파이어입니다.

교체 표현식(Replace Expression)

교체할 텍스트입니다. 대부분의 경우 _r, right_, _right_ 처럼 엘리먼트 이름에 붙는 대칭 모디파이어입니다.

검색 교체 메서드(Find Replace Method)

텍스트를 교체할 때 사용할 검색 메서드입니다. 다음 옵션 중에서 선택할 수 있습니다.

  • 접두사(Prefix) 를 선택하면 이름 시작 부분의 텍스트만 검색합니다.

  • 접미사(Suffix) 를 선택하면 이름 끝 부분의 텍스트만 검색합니다.

  • 정규 표현식(Regular Expression) 을 선택하면 이름을 검색하고 교체하는 커스텀 표현식을 쓸 수 있습니다.

정규 표현식 을 메서드로 사용하면 검색 표현식교체 표현식 에 커스텀 정규 표현식을 쓸 수 있습니다.

예를 들어 디폴트 배열의 인덱스 12 에는 일반적인 중심 본 이름을 검색하여 이름미러링된 이름 프로퍼티에 할당하는 다음과 같은 표현식이 나옵니다.

  • 검색 표현식: ((?:^[sS]pine|^[rR]oot|^[pP]elvis|^[nN]eck|^[hH]ead|^ik_hand_gun).*)

  • 교체 표현식: $1

finger_left_index1 의 경우처럼 대칭 텍스트 모디파이어가 엘리먼트 이름 가운데 부분에 있다면, 올바른 검색 및 교체를 위해 다음과 같은 표현식을 쓸 수 있습니다.

  • 검색 표현식: (\S*)_left_(\S*)

  • 교체 표현식: $1_right_$2

배열은 접두사 또는 접미사인 대칭 모디파이어의 여러 순열을 검색하고 교체하는 것과 같은 일반적인 표현식으로 미리 채워져 있습니다. 이 디폴트 배열은 프로젝트 세팅(Project Settings)에서 변경할 수 있습니다. 언리얼 엔진의 메인 메뉴 바에서 편집(Edit) > 프로젝트 세팅 을 선택한 후 엔진(Engine) > 애니메이션(Animation) 섹션으로 가서 미러링 프로퍼티 섹션을 찾으면 됩니다.

표현식 프로젝트 세팅

애니메이션 미러링

미러 데이터 테이블을 생성하고 채웠다면 이제 애니메이션 블루프린트에서 애니메이션을 미러링할 수 있습니다. 이때 미러(Mirror) 애님 그래프(AnimGraph) 노드를 사용해야 합니다.

이를 생성하려면 애님 그래프에서 우클릭한 후 미러링 카테고리에서 테이블을 선택합니다.

애니메이션 블루프린트 미러링

미러링 이펙트는 입력 포즈와 부울 변수를 제공하고 미러링을 활성화하거나 비활성화하여 프리뷰할 수 있습니다.

미러링 활성화/비활성화

미러 노드에는 다음과 같은 프로퍼티가 있습니다.

미러 프로퍼티

이름

설명

미러

미러링 이펙트를 활성화 또는 비활성화합니다. 기본적으로 핀으로 노출됩니다.

미러 데이터 테이블

미러링에 사용할 미러 데이터 테이블입니다.

미러 스테이트 변경 시 블렌드 시간(Blend Time on Mirror State Change)

미러 활성화 또는 비활성화 시 미러 스테이트 간의 블렌드에 걸리는 시간입니다. 이 프로퍼티를 사용하려면 미러 노드 뒤에 Inertialization 노드를 사용해야 합니다.

미러 스테이트 변경 시 블렌드 시간

미러 스테이트 변경 시 자손 리셋(Reset Child on Mirror State Change)

활성화하면 미러 스테이트가 변경될 때마다 소스 포즈가 재초기화됩니다.

본(Bone)

미러링에 본 데이터를 포함할지 여부입니다.

커브(Curve)

미러링에 커브 데이터를 포함할지 여부입니다.

어트리뷰트(Attributes)

미러링에 노티파이와 싱크 마커 데이터를 포함할지 여부입니다.

블루프린트 노티파이에서 미러링된 애니메이션 탐지하기

커스텀 노티파이 스테이트(Custom Notify States)를 사용하고 있다면 미러링된 스테이트에 따라 비헤이비어를 변경하는 것이 좋을 수도 있습니다. Is Triggered By Mirrored Animation 노드를 사용하면 노티파이 블루프린트(Notify Blueprint)에서 미러링된 스테이트 간 차이를 구별할 수 있습니다.

이 예시에서는 Received Notify 함수 에 사용하여 노티파이가 미러링된 애니메이션에서 수신되었는지 여부를 확인해 로직을 분기합니다.

Is Triggered By Mirrored Animation