스킨을 입힌 스태틱 및 스켈레탈 메시 오브젝트를 위한 정확한 비선형 디포머 시스템을 제작하는 프로세스는 복잡하고 비용이 많이 들 수 있습니다. 특히 이 디포메이션 시뮬레이션을 리얼타임으로 계산할 경우에는 더욱 그렇습니다. 언리얼 엔진 의 머신 러닝(ML Learning, ML) 디포머 프레임워크를 사용하면 ML 디포머 모델 훈련을 위해 외부에서 미리 생성한 메시 디포메이션 시뮬레이션 데이터를 사용하여 런타임에서 복잡한 메시 디포메이션의 근사치를 구해 고퀄리티의 메시 디포메이션을 구할 수 있습니다. 그러므로 리얼타임 디포메이션 생성을 위한 컴퓨팅 비용 없이도 인게임 메시 디포메이션의 퀄리티를 대폭 향상할 수 있습니다.
ML 디포머 프레임워크는 디포머 모델에 의해 구동되는 신경망 추론(Neural Network Inference, NNI) 시스템을 내부적으로 활용하여 GPU에서 대략적인 메시 디포메이션으로 계산된 근사치를 처리하여 CPU에서 일부 프로세싱 대역폭을 완화합니다.
또한 언리얼 엔진 마켓플레이스에서 제공되는 AutoDesk Maya 플러그인을 사용해 작업에 필요한 메시 디포메이션 데이터를 생성할 수 있습니다. AutoDesk Maya에서 메시 디포메이션 데이터를 생성하면 데이터는 FBX(.fbx) 및 Alembic(.ab) 파일로 익스포트된 후 언리얼 엔진으로 임포트되어 디포머 모델의 훈련에 사용할 수 있습니다.
이 문서는 Autodesk Maya에서 메시 디포메이션 시뮬레이션 데이터를 생성한 다음 언리얼 엔진에서 해당 데이터를 사용하여 런타임에 캐릭터의 메시 디포메이션의 근사치를 구하도록 디포머 모델을 훈련하는 워크플로 예시를 제공합니다.
전제조건
-
ML 디포머 프레임워크(ML Deformer Framework) 는 사용 전에 활성화해야 하는 플러그인입니다. 언리얼 엔진 메뉴에서 편집(Edit) > 플러그인(Plugins) 으로 이동하여 애니메이션(Animation) 섹션에서 ML 디포머 프레임워크 를 찾아서 활성화합니다. 플러그인을 활성화한 후에는 에디터를 다시 시작해야 합니다.
- ML 디포머 워크플로를 사용하려면 일부 워크플로에서 Autodesk Maya 를 사용해야 합니다.
- 스킨을 입힌 캐릭터가 언리얼 엔진과 Autodesk Maya 모두에 있어야 합니다.
ML 디포머 모델
ML 디포머 프레임워크는 ML 디포머 모델을 사용하여 스킨 적용 메시 디포메이션을 구동합니다.
사전 제작된 모델을 플러그인 형태로 설치하도록 선택할 수 있습니다. 이 예시에서는 일부 워크플로에서 플러그인 창에서 설치할 수 있는 ML 디포머 뉴럴 모프 모델을 선택적으로 사용합니다.
- ML 디포머 뉴럴 모프 모델(ML Deformer Neural Morph Model) 은 플러그인이므로 사용하기 전에 활성화해야 합니다. 언리얼 엔진 메뉴의 편집 > 플러그인 으로 이동하여 애니메이션 섹션에서 ML 디포머 뉴럴 모프 모델(ML Deformer Neural Morph Model) 을 찾아 활성화합니다. 플러그인을 활성화한 후에는 에디터를 다시 시작해야 합니다.

프로젝트에 설치하여 사용할 수 있는 여러 가지 사전 제작 모델이 있습니다. 플러그인의 C++ 패키지 내에 자체 ML 디포머 모델을 생성하거나 기존 모델을 커스터마이징할 수도 있습니다.
Autodesk Maya 플러그인 구성
ML Deformer Data Generation Maya Plugin 을 다운로드 및 설치해야 합니다. 그러려면 우선 마켓플레이스 페이지로 이동하여 플러그인을 다운로드합니다.

설치가 완료된 플러그인은 언리얼 엔진 설치 디렉터리의 Plugins 폴더에 있습니다. 기본적으로 다음 경로에 있습니다.
…\Engine\Plugins\Marketplace\MayaMLDeformer\Content\MayaMLDeformer.zip
MayaMLDeformer.zip 파일의 압축을 C:\Users\username\Documents\maya\modules
에 풉니다. modules 폴더가 존재하지 않는 경우 생성하면 됩니다.

Mac 사용자의 경우 플러그인 설치 위치는 /Users/Shared/Autodesk/modules/maya
입니다.
이제 Autodesk Maya를 열면 UE MLDeformer 가 메인 메뉴 바에 표시될 것입니다.

Maya에서 훈련 데이터 생성
ML Deformer 플러그인은 머신 러닝 알고리즘에 유용한 데이터 세트를 생성하는 프로시저럴 키프레임을 본에 설정하여 캐릭터를 위한 훈련 데이터를 생성합니다. 훈련 데이터 생성 프로세스를 시작하려면 먼저 툴을 열어야 합니다.
Maya의 메인 메뉴 바에서 UE ML Deformer > Data Generator 를 클릭하면 Training Data Generation Setup 창이 열립니다.

그리고 Maya 씬에서 스킨을 입힌 캐릭터를 임포트하거나 엽니다. 이 예시에서는 메타휴먼을 사용합니다

본 파라미터 추가하기
조인트를 훈련시키려면 수정할 노드 및 어트리뷰트 목록을 이 어트리뷰트가 수용할 수 있는 값 범위와 함께 추가해야 합니다.
Maya에서 추가할 조인트를 선택한 다음 Training Data Generation Setup 창의 Parameters 섹션에서 추가 버튼(+) 을 클릭합니다.

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

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

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

본 파라미터 환경설정하기
어트리뷰트가 추가되었다면 이제 각 축의 모션 범위를 환경설정해야 합니다. 그렇게 하려면 각 어트리뷰트를 선택하고 해당 축의 최소(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 정도로 용량이 커질 수 있습니다.

훈련 데이터가 생성 완료되면 .fbx
파일이 익스포트됩니다. 타깃 Alembic 파일 을 지정했을 경우 .abc
파일도 함께 익스포트됩니다.

FBX 및 Alembic 파일은 프레임 수가 동일해야 하며, 각 프레임은 동일한 스켈레탈 포즈에 해당해야 합니다.
언리얼 엔진의 디포머 훈련
이제 언리얼 엔진으로 완성된 훈련 파일을 가져올 수 있습니다.
Alembic 파일 임포트하기
우선 훈련 프로세스에서 생성했거나 다른 외부 디포머 툴에서 생성한 .abc
파일을 임포트합니다. 콘텐츠 브라우저(Content Browser) 에서 임포트(Import) 를 클릭하고 .abc
파일을 선택한 다음 열기(Open) 를 클릭합니다.

임포트 세팅 대화 창에서 임포트를 위해 다음 파라미터를 설정합니다.
- 임포트 타입(Import Type) 을 지오메트리 캐시(Geometry Cache) 로 설정합니다.
- 트랙 평탄화(Flatten Tracks)를 비활성화합니다 . FBX 메시를 Alembic 지오메트리 캐시 트랙과 일치시키기 위해 필요한 작업입니다. 메시가 하나뿐이라면 트랙 평탄화를 활성화해도 되지만, 필수는 아닙니다. Alembic 트랙 이름이 Maya 아웃라이너에서 보이는 이름과 같은 이름으로 시작해야 합니다.
- 정확도를 높이기 위해 압축된 위치 정밀도(Compressed Position Precision) 를 0.001 로 설정합니다. 디폴트값을 유지하면 ML 디포머가 압축에 의한 오류를 훈련할 수 있습니다.
- 임포트된 버텍스 수 저장(Store Imported Vertex Numbers)을 활성화합니다 . 이는 스켈레탈 메시와 지오메트리 캐시 간의 버텍스를 일치시키는 데 필요합니다. 이 작업을 잊어버린 경우 ML 디포머 에디터가 경고를 표시할 것이며, 지오메트리 캐시를 다시 임포트해야 합니다.

이 파라미터가 설정되면 임포트 를 클릭하여 지오메트리 캐시를 임포트합니다. 이 프로세스는 alembic 파일의 크기 때문에 아주 오래 걸릴 수 있습니다. 복잡도와 크기에 따라 몇 분에서 몇 시간까지 걸릴 수 있습니다.
훈련된 FBX 임포트하기
다음으로 Maya 훈련 데이터에서 생성된 FBX 파일을 임포트해야 합니다. FBX 임포트 옵션(FBX Import Options) 대화창에서 임포트를 위해 다음 파라미터를 설정합니다.
- 아직 캐릭터를 언리얼 엔진으로 임포트하지 않았다면 캐릭터 스켈레톤을 사용하도록 스켈레톤(Skeleton) 필드를 설정합니다.
- 애니메이션 임포트(Import Animations)를 활성화합니다 .
- 애니메이션 길이(Animation Length) 를 익스포트된 시간(Exported Time) 으로 설정합니다.

이 파라미터가 설정되면 임포트 를 클릭하여 FBX를 임포트합니다. 이 프로세스는 FBX 파일의 크기 때문에 아주 오래 걸릴 수 있습니다.
ML 디포머 에셋 생성하기
다음으로 ML 디포머 에셋 을 생성하여 Alembic 및 FBX 시퀀스를 모두 포함 및 연관시켜야 합니다. 콘텐츠 브라우저에서 + 추가(+ Add) 를 클릭한 다음 애니메이션 > ML 디포머(ML Deformer) 를 선택합니다. 생성한 뒤 에셋을 엽니다.

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

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

타임라인 플레이헤드를 드래그하면 두 시퀀스가 함께 스크럽되므로 애니메이션이 일치하는지 검증할 수 있습니다. 녹색 선(델타)이 프레임마다 정확한지 확인해야 합니다.
델타가 일부 프레임에서 정확하지 않은 경우 상수 토폴로지 최적화(Constant Topology Optimization) 옵션을 활성화하고 지오메트리 캐시를 다시 임포트합니다.

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

훈련 프로세스가 완료되면 ML 디포머 테스팅(Testing) 모드에서 결과를 확인할 수 있습니다.

시각화(Visualization) 패널에서 가중치(Weight) 프로퍼티를 조정하면 선형 스킨 적용 메시(왼쪽)와 비교하여 ML 디포머 메시(오른쪽)의 효과를 관찰할 수 있습니다.

ML 디포머로 디포메이션되는 메시 영역을 시각적으로 표시하려면 히트 맵 표시(Show Heat Map) 프로퍼티를 활성화하고 시각화 패널에서 히트 맵 옵션을 조정합니다.

디포머 블루프린트 구성
레벨 내 캐릭터에서 ML 디포머 사용을 시작하려면 블루프린트에서 ML 디포머 컴포넌트(ML Deformer Component) 를 사용하여 캐릭터를 구성해야 합니다.
우선 액터 블루프린트(Actor Blueprint) 를 생성합니다. 콘텐츠 브라우저 에서 + 추가 > 블루프린트 클래스(Blueprint Class) 를 클릭한 다음 액터(Actor) 를 선택합니다. 블루프린트가 생성되면 엽니다.

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

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

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

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

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