머신 러닝 디포머 사용하기

언리얼 엔진의 ML 디포머를 사용하여 스킨을 입힌 캐릭터를 실시간으로 디폼합니다.

Choose your operating system:

Windows

macOS

Linux

캐릭터를 위한 정확한 비선형 디포머 시스템을 생성하는 것은 복잡하고 비용이 많이 드는 프로세스가 될 수 있으며, 특히 리얼타임 게임 엔진에서는 더욱 그렇습니다. 그 대신 외부에서 캡처 가능한 복잡한 디포메이션 모델의 근사치를 계산하는 머신 러닝 디포머(Machine Learning Deformer) 를 언리얼 엔진에서 사용하여 게임 캐릭터의 퀄리티를 크게 개선할 수 있습니다.

ML 디포머는 모든 것을 GPU로 처리하기 위해 내부적으로 언리얼의 신경망 추론(Neural Network Inference, NNI) 시스템과 디포머 그래프(Deformer Graph) 시스템을 사용합니다. 또한 이 시스템은 훈련 데이터 생성에 도움을 주는 Maya용 플러그인과 함께 배포됩니다. 그런 다음 이 데이터는 ML 디포머 에셋 훈련을 위해 FBX 및 Alembic 파일로 익스포트됩니다.

이 문서에서는 ML 디포머 프로세스를 간략히 살펴봅니다.

전제조건

  • MLDeformer는 사용 전에 활성화해야 하는 플러그인입니다. 언리얼 엔진 메뉴에서 편집(Edit) > 플러그인(Plugins) 으로 이동하여 애니메이션(Animation) 섹션에서 MLDeformer 를 찾아서 활성화하세요. 변경사항을 적용하려면 에디터를 재시작해야 합니다.

    MLDeformer 플러그인

  • ML 디포머를 사용하려면 일부 워크플로에서 Autodesk Maya 를 사용해야 합니다.

  • 스킨을 입힌 캐릭터를 언리얼 엔진(스켈레탈 메시로)과 Autodesk Maya 모두에 임포트한 상태여야 합니다.

Autodesk Maya 플러그인 구성

ML Deformer Data Generation Maya Plugin 을 다운로드 및 설치해야 합니다. 그러려면 우선 ML Deformer 마켓플레이스 페이지로 이동하여 플러그인을 다운로드합니다.

마켓플레이스에서 ML Deformer 다운로드

설치가 완료된 플러그인은 언리얼 엔진 설치 디렉터리의 Plugins 폴더에 있습니다. 기본적으로 다음 경로에 있습니다.

  …\Engine\Plugins\Marketplace\MayaMLDeformer\Content\MayaMLDeformer.zip

MayaMLDeformer.zip 파일의 압축을 C:\Users\username\Documents\maya\modules 에 풉니다. modules 폴더가 존재하지 않는 경우 생성하면 됩니다.

Maya 플러그인 설치 위치

Mac 사용자의 경우 플러그인 설치 위치는 /Users/Shared/Autodesk/modules/maya 입니다.

이제 Autodesk Maya를 열면 UE MLDeformer 가 메인 메뉴 바에 표시될 것입니다.

Maya의 UE MLDeformer 메뉴

Maya에서 훈련 데이터 생성

ML Deformer 플러그인은 머신 러닝 알고리즘에 유용한 데이터 세트를 생성하는 프로시저럴 키프레임을 본에 설정하여 캐릭터를 위한 훈련 데이터를 생성합니다. 훈련 데이터 생성 프로세스를 시작하려면 먼저 툴을 열어야 합니다.

Maya의 메인 메뉴 바에서 UE ML Deformer > Data Generator 를 클릭하면 Training Data Generation Setup 창이 열립니다.

Maya에서 ML Deformer 열기

그리고 Maya 씬에서 스킨을 입힌 캐릭터를 임포트하거나 엽니다. 이 예시에서는 기본 이두박근 모델을 사용합니다.

디포메이션 훈련용 메시를 Maya에서 임포트

본 파라미터 추가하기

조인트를 훈련시키려면 수정할 노드 및 어트리뷰트 목록을 이 어트리뷰트가 수용할 수 있는 값 범위와 함께 추가해야 합니다.

Maya에서 추가할 조인트를 선택한 다음 Training Data Generation Setup 창의 Parameters 섹션에서 추가 버튼(+) 을 클릭합니다.

ML Deformer 본 파라미터

그러면 Add Parameters 창이 열립니다. 여기서 훈련에 사용할 조인트 어트리뷰트를 더 수정할 수 있습니다. Refresh 를 클릭하여 파라미터 목록을 현재 선택 항목을 나타내도록 새로고침할 수도 있습니다.

조인트 어트리뷰트

파라미터로 추가할 조인트 어트리뷰트를 선택하고 Add Selected Parameters 를 클릭하여 이를 훈련 데이터 생성 구성에 추가합니다. 대부분의 경우 조인트에는 회전 어트리뷰트만 필요합니다.

선택된 파라미터 추가

Attributes Filter 섹션을 사용하여 자동으로 어트리뷰트를 개선 및 제외할 수 있습니다. 추가 버튼(+) 을 클릭하여 새 엔트리를 추가하고 제외할 어트리뷰트에 따라 명명합니다. 이 예시에서는 모든 이동 및 기타 사소한 어트리뷰트를 제외하여 결과 어트리뷰트가 회전만 표시하게 하겠습니다.

ML Deformer 어트리뷰트 필터

본 파라미터 환경설정하기

어트리뷰트가 추가되었다면 이제 각 축의 모션 범위를 환경설정해야 합니다. 그렇게 하려면 각 어트리뷰트를 선택하고 해당 축의 최소(Minimum)최대(Maximum) 이동 범위를 Parameter Properties 에서 지정합니다. 이 값들은 캐릭터의 복잡성과 타입에 따라 최대한 현실적으로 지정해야 합니다. 이 데이터를 정의하는 것은 ML Deformer 훈련 프로세스의 정확도와 퀄리티를 위해 반드시 필요한 일입니다. 해당 조인트의 한곗값이 환경설정된 경우 플러그인이 해당 값을 Maya에서 환경설정된 조인트 한계로 자동 초기화합니다. 주어진 파라미터 타입에 디폴트를 제공할 수도 있습니다.

최소 최대 본 파라미터 범위

이러한 파라미터를 적절하게 환경설정하는 데는 시간이 많이 걸릴 수 있습니다. 그러므로 File > Save Config 를 클릭하여 진행 상황을 .json 파일로 저장할 것을 권장합니다.

환경설정 저장

저장된 환경설정은 File > Load Config 를 선택하여 복원할 수 있습니다. 환경설정 파일은 노드 및 어트리뷰트 이름을 바탕으로 하며 이름이 일치하는 모든 Maya 씬에 사용할 수 있습니다.

메시 환경설정하기

훈련 데이터를 마무리하기 위해 베이스 메시(Base Mesh) 를 지정해야 합니다. 선택 사항으로 타깃 메시(Target Mesh) 도 지정할 수 있습니다.

베이스 메시 는 스켈레톤에 바인딩된 메시이며 언리얼 엔진에서 사용되는 것과 동일한 메시입니다.

타깃 메시 는 베이스 메시와 동일한 버텍스 및 토폴로지를 갖지만 디포메이션에 사용되는 별도의 메시입니다. 예를 들어 타깃 메시는 볼륨 보존 기법과 근육 시뮬레이션을 사용하여 사실적인 디포메이션을 생성할 수 있습니다. 타깃 메시는 Maya에 있을 수도 있고, Houdini 같은 외부 프로그램에서 생성할 수도 있습니다. 타깃 메시는 alembic 캐시 .abc 로 익스포트됩니다.

베이스 메시 및 타깃 메시를 지정하려면 Mesh Settings 영역에서 추가 버튼(+) 을 클릭합니다. 표시되는 창에서 Select 버튼을 클릭하고 각 메시를 지정합니다. 타깃 메시는 씬에 있는 경우 사용하는 선택 사항입니다.

메시 매핑 환경설정

메시를 선택하고 OK 를 클릭하여 'Mesh Settings' 목록에 추가합니다.

베이스 메시와 타깃 메시

스켈레탈 메시가 다수의 메시로 구성된 경우 각 개별 메시를 'Mesh Settings' 목록에 추가해야 합니다. 일반적으로 모듈형 캐릭터를 사용하는 경우에만 이 작업이 필요합니다.

시작 포즈 생성하기

마지막으로 Generator Settings 를 지정하여 훈련 길이 및 환경설정을 결정해야 합니다. 파라미터 목록 내의 모든 어트리뷰트, 각 포즈 수(Num Poses) 마다 키프레임이 생성될 것입니다.

제네레이터 세팅

이름

설명

포즈 수(Num Poses)

생성할 랜덤 포즈의 수입니다. 해당 프레임의 애니메이션을 생성합니다. 권장되는 범위는 5,000 ~ 50,000 이지만 일반적으로는 25,000 으로 설정합니다.

훈련으로 좋은 결과를 달성하려면 막대한 양의 데이터가 필요합니다. 언리얼의 디폴트 훈련 세팅에 상응하려면 약 25,000개의 애니메이션 프레임 데이터가 필요합니다. 더 작은 데이터 세트로도 훈련은 가능하지만 결과가 더 나쁠 것입니다. 포즈 수 값이 높을수록 훈련 속도는 느려집니다.

시작 프레임(Start Frame)

무작위 생성된 포즈가 시작될 프레임 번호입니다. 값을 0보다 크게 설정하여 기존 애니메이션 데이터를 생성된 프레임과 결합할 수 있습니다.

활성 파라미터(Active Parameters)

각 프레임 간 포즈의 랜덤성 정도입니다. 이 값은 대부분 75% 정도로 설정하며, 값이 높을수록 퀄리티가 좋아집니다. 하지만 이를 100% 로 설정하면 시뮬레이션 문제가 발생할 수 있습니다.

Generate 를 클릭하여 Maya에서 훈련 데이터 생성 프로세스를 시작합니다. 타깃 메시타깃 Alembic 파일 을 사용하는 경우 이 프로세스가 아주 오래 걸릴 수 있습니다. 메시의 복잡도에 따라 몇 분에서 몇 시간까지 걸릴 수 있습니다. 디스크에 충분한 공간이 있는지도 확인해야 합니다. Alembic 파일은 버텍스 수 및 포즈 수 세팅에 따라 50~100GB 정도로 용량이 커질 수 있습니다.

Maya 훈련 데이터 생성

훈련 데이터를 생성하고 나면 타깃 Alembic 파일 을 지정한 경우 .abc 파일과 .fbx 파일이 익스포트됩니다.

훈련 데이터 파일

FBX 및 Alembic 파일은 프레임 수가 동일해야 하며, 각 프레임은 동일한 스켈레탈 포즈에 해당해야 합니다.

언리얼 엔진의 디포머 훈련

이제 언리얼 엔진으로 완성된 훈련 파일을 가져올 수 있습니다.

Alembic 파일 임포트하기

우선 훈련 프로세스에서 생성했거나 다른 외부 디포머 툴에서 생성한 .abc 파일을 임포트합니다. 콘텐츠 브라우저(Content Browser) 에서 임포트(Import) 를 클릭하고 .abc 파일을 선택한 다음 열기(Open) 를 클릭합니다.

alembic 파일을 언리얼로 임포트

임포트 세팅 대화창에서 임포트를 위해 다음 파라미터를 설정합니다.

  • 임포트 타입(Import Type)지오메트리 캐시(Geometry Cache) 로 설정합니다.

  • 트랙 평탄화(Flatten Tracks)를 비활성화합니다 . FBX 메시를 Alembic 지오메트리 캐시 트랙과 일치시키는 데 필요한 작업입니다. 메시가 하나뿐이라면 트랙 평탄화를 활성화한 상태로 두어도 되지만, 꼭 그럴 필요는 없습니다. Alembic 트랙 이름이 Maya 아웃라이너에서 보이는 이름과 같은 이름으로 시작해야 합니다.

  • 정확도를 높이기 위해 압축된 위치 정밀도(Compressed Position Precision)0.001 로 설정합니다. 디폴트값을 유지하면 ML 디포머가 압축에 의한 오류를 훈련할 수 있습니다.

  • 임포트된 버텍스 수 저장(Store Imported Vertex Numbers)을 활성화합니다 . 이는 스켈레탈 메시와 지오메트리 캐시 간의 버텍스를 일치시키는 데 필요합니다. 이 작업을 잊어버린 경우 ML 디포머 에디터가 경고를 표시할 것이며, 지오메트리 캐시를 다시 임포트해야 합니다.

alembic 파일 임포트 세팅

이 파라미터가 설정되면 임포트 를 클릭하여 지오메트리 캐시를 임포트합니다. 이 프로세스는 alembic 파일의 크기 때문에 아주 오래 걸릴 수 있습니다. 복잡도와 크기에 따라 몇 분에서 몇 시간까지 걸릴 수 있습니다.

훈련된 FBX 임포트하기

다음으로 Maya 훈련 데이터에서 생성된 FBX 파일을 임포트해야 합니다. FBX 임포트 옵션(FBX Import Options) 대화창에서 임포트를 위해 다음 파라미터를 설정합니다.

  • 아직 캐릭터를 언리얼 엔진으로 임포트하지 않았다면 캐릭터 스켈레톤을 사용하도록 스켈레톤(Skeleton) 필드를 설정합니다.

  • 애니메이션 임포트(Import Animations)를 활성화합니다 .

  • 애니메이션 길이(Animation Length)익스포트된 시간(Exported Time) 으로 설정합니다.

fbx 파일 임포트 세팅

이 파라미터가 설정되면 임포트 를 클릭하여 FBX를 임포트합니다. 이 프로세스는 FBX 파일의 크기 때문에 아주 오래 걸릴 수 있습니다.

ML 디포머 에셋 생성하기

다음으로 ML 디포머 에셋 을 생성하여 Alembic 및 FBX 시퀀스를 모두 포함 및 연관시켜야 합니다. 콘텐츠 브라우저에서 + 추가(+ Add) 를 클릭한 다음 애니메이션 > ML 디포머(ML Deformer) 를 선택합니다. 생성한 뒤 에셋을 엽니다.

ML 디포머 에셋 생성

ML 디포머 에디터(ML Deformer Editor)디테일 패널에서 캐릭터의 스켈레탈 메시와 임포트를 마친, 훈련된 FBX 애니메이션 시퀀스를 각 프로퍼티에 할당합니다. 그러면 메시가 훈련 베이스(Training Base) 뷰포트 라벨 아래에 표시됩니다.

메시를 ML 디포머에 할당

임포트된 Alembic 파일도 지오메트리 캐시 프로퍼티에 할당합니다. 그러면 Alembic 메시가 뷰포트의 훈련 타깃 라벨 아래에도 표시됩니다.

녹색 선이 훈련 베이스 모델 상단에 렌더링된 것을 볼 수 있습니다. 이는 베이스 메시와 타깃 메시 간의 델타(차이)를 나타냅니다. 디포머 모델은 훈련 도중에 이를 배울 것이므로 올바르게 보이는지 확인해야 합니다. 타깃 메시가 훈련 베이스에 비해 다르게 회전된 경우 정렬 트랜스폼(Alignment Transform) 을 사용하여 정렬할 수 있습니다. 오버랩될 필요는 없고 회전이 일치하기만 하면 됩니다.

지오메트리 캐시 할당

타임라인 플레이헤드를 드래그하면 두 시퀀스가 함께 스크럽되므로 애니메이션이 일치하는지 검증할 수 있습니다. 녹색 선(델타)이 프레임마다 정확한지 확인해야 합니다.

델타가 일부 프레임에서 정확하지 않은 경우 상수 토폴로지 최적화(Constant Topology Optimization) 옵션을 활성화하고 지오메트리 캐시를 다시 임포트합니다.

타임라인 스크럽

훈련 모델(Train Model) 을 ML 디포머 에디터 툴바에서 클릭하여 훈련을 시작합니다. 이 프로세스에는 시간이 오래 걸릴 수 있습니다.

모델 훈련

디포머 블루프린트 구성

레벨 내 캐릭터에서 ML 디포머 사용을 시작하려면 블루프린트에서 ML 디포머 컴포넌트(ML Deformer Component) 를 사용하여 캐릭터를 구성해야 합니다.

우선 액터 블루프린트(Actor Blueprint) 를 생성합니다. 콘텐츠 브라우저 에서 + 추가 > 블루프린트 클래스(Blueprint Class) 를 클릭한 다음 액터(Actor) 를 선택합니다. 블루프린트가 생성되면 엽니다.

블루프린트 생성

콘텐츠 브라우저에서 스켈레탈 메시를 컴포넌트(Components) 패널로 드래그하여 블루프린트에 추가합니다.

스켈레탈 메시 컴포넌트 추가

다음으로 컴포넌트 패널에서 + 추가 를 클릭하고 MLDformer 를 선택하여 ML 디포머 컴포넌트 를 추가합니다.

mldeformer 컴포넌트

ML 디포머 컴포넌트 를 선택하고 디테일(Details) 패널에서 ML 디포머 에셋 을 지정합니다.

mldeformer 컴포넌트 프로퍼티

마지막으로 스켈레탈 메시 컴포넌트 를 선택하고 메시 디포머(Mesh Deformer) 프로퍼티에서 디포머 그래프 를 지정합니다.

스켈레탈 메시 컴포넌트 프로퍼티

디포머 그래프가 없는 경우 Engine > Plugins > MLDformer Content > Deformers 콘텐츠 폴더에서 DefaultMLDformerGraph 샘플을 사용할 수 있습니다. 폴더에 액세스하려면 콘텐츠 브라우저의 세팅(Settings) 을 클릭하고 엔진 콘텐츠 표시(Show Engine Content)플러그인 콘텐츠 표시(Show Plugin Content) 를 모두 활성화합니다.

디포머 그래프

태그