FBX 에셋 메타데이터 파이프라인

FBX를 통해 커스텀 사용자 정의 어트리뷰트를 언리얼 엔진으로 가져오는 방법과 언리얼 에디터에서 블루프린트 및 Python을 사용하여 해당 어트리뷰트로 작업하는 방법을 살펴봅니다.

Choose your operating system:

Windows

macOS

Linux

리얼타임 3D 프로덕션의 규모와 복잡성이 커지고 최신 프로덕션 파이프라인에 사용되는 툴의 숫자가 지속적으로 증가하면서 아티스트의 효율성을 높이기 위해 지능형 자동화를 추가하는 것이 그 어느 때보다도 중요해지고 있습니다. 이 같은 지능형 자동화는 주로 메타데이터, 즉 프로젝트에서 에셋에 의미를 부여하는 커스텀 정의 프로퍼티에 크게 의존합니다.

아티스트나 크리에이터는 애플리케이션에서도 주로 에셋이 처음 생성되는 위치에 메타데이터 프로퍼티를 추가합니다. 그러면 메타데이터는 에셋과의 연관성을 유지하고, 파이프라인 하부의 애플리케이션은 해당 메타데이터를 읽고 이를 활용하여 해당 에셋의 프로세스 또는 처리 방식을 결정하게 됩니다.

언리얼 에디터에서는 에셋 메타데이터 페이지에 설명된 것과 같이 블루프린트 또는 Python 스크립트를 사용하여 에셋 메타데이터 키 및 값을 설정하고 얻을 수 있습니다. 이는 언리얼 프로젝트의 컨텍스트 내에서만 수행하는 에셋 관리 작업에도 도움이 됩니다.

하지만 에셋에 대한 메타데이터를 지정하여 얻을 수 있는 진정한 가치는 주로 외부 애플리케이션과의 상호운용성과 여러 애플리케이션에 걸친 더 큰 규모의 에셋 관리 파이프라인을 생성할 수 있다는 데 있습니다. 이를 위해 언리얼 FBX 임포터(Unreal FBX Importer)는 FBX 파일에서 특정 타입의 에셋 메타데이터를 가져와 언리얼 에디터에서 사용할 수 있도록 합니다.

이 메타데이터는 프로젝트에서 에셋에 할당되기 때문에 런타임 게임플레이 코드에서 직접 액세스할 수는 없습니다. 언리얼 에디터에서 메타데이터는 주로 에셋 관리 작업을 스크립팅하기 위해 사용됩니다.

메타데이터 소스

FBX 파일을 언리얼 엔진으로 임포트할 때 임포터는 해당 파일의 오브젝트에 어태치된 FbxProperty 값을 모두 읽고 태그-값 쌍의 딕셔너리 또는 맵으로 생성한 언리얼 에셋에 첨부합니다.

다음 애플리케이션은 이 FbxProperty 시스템을 통해 커스텀 사용자 정의 메타데이터를 FBX 파일로 익스포트하는 기능을 지원하는 것으로 알려져 있습니다.

Autodesk Maya

Maya에서 에셋에 메타데이터를 생성하려면 해당 오브젝트에 추가 커스텀 어트리뷰트를 추가합니다. 이 작업에 대한 자세한 내용은 Maya 도움말을 참고하세요.

커스텀 어트리뷰트는 Maya Attribute Editor**에서 해당 오브젝트의 Extra Attributes** 목록에 표시됩니다. 예를 들어 이 오브젝트에 대해 생성된 커스텀 어트리뷰트는 두 개인데, 하나는 스트링 프로퍼티이고 다른 하나는 숫자 프로퍼티입니다.

Maya 커스텀 어트리뷰트의 메타데이터

Autodesk 3ds Max

3ds Max에서 에셋 메타데이터를 생성하려면 Object Properties 대화창의 User Defined 탭에서 추가합니다.

3ds Max 사용자 정의 프로퍼티의 메타데이터

현재 3ds Max의 메타데이터는 FBX.UDP3DSMAX 메타데이터 태그에서 액세스할 수 있는**User Defined** 텍스트 박스의 완전한 콘텐츠가 포함된 단일 스트링으로 임포트됩니다. 이 스트링 값을 언리얼 에디터 Python 또는 블루프린트 스크립트에서 읽으려면 직접 분할해야 할 수도 있습니다.

언리얼 엔진의 3ds Max 메타데이터

임포트 후 메타데이터

에셋 메타데이터가 언리얼 엔진에서 표시되는 방식에 대해서는 몇 가지 알아 두어야 할 사항이 있습니다.

  • 모든 메타데이터 키 값은 언리얼 엔진에 스트링으로 저장되며, 외부 애플리케이션에서 설정된 원본 타입과는 관계없습니다. 예를 들어 Maya에서 메타데이터 값을 22`로 설정했더라도 언리얼 엔진에서 스크립트로 다시 읽을 때는 "22" 값을 포함하는 스트링이 되는 식입니다. 이 값을 숫자로 만들려면 **Utilities > String > String to Int** 또는 **String to Float** 같은 블루프린트 변환 노드를 사용하거나, int() 또는 float()` 같은 Python 내장 스트링 파싱 함수를 사용하면 됩니다.

  • 소스 애플리케이션에서 공백을 가진 태그 이름을 생성하는 경우 해당 공백은 FBX에 의해 제거됩니다.

  • 일반적으로 태그 이름은 해당 값의 소스를 나타내는 접두사를 갖습니다. FBX를 통해 임포트된 에셋의 접두사는 FBX 입니다. 다른 애플리케이션 또는 플러그인은 다른 접두사를 사용할 수 있습니다. 예를 들어 언리얼 Shotgun 통합 기능은 SG 접두사를 사용합니다.

  • 스켈레탈 메시로 작업할 때는 스켈레톤의 본마다 서로 다른 메타데이터를 할당할 수도 있습니다. 이 경우 FBX 임포트 프로세스는 여전히 모든 메타데이터 값을 스켈레탈 메시 에셋에 할당하지만 메타데이터 태그 이름의 접두사에 본 이름도 포함되어 본마다 할당되는 값을 알아볼 수 있습니다. 예를 들어 스켈레탈 메시에서는 FBX.Right_Arm.tag_nameFBX.Right_Hand.tag_name 과 비슷한 태그를 볼 수 있습니다.

따라서 Maya에서 Created By 라는 이름으로 태그를 생성했다면 언리얼 엔진에서 FBX.CreatedBy 라는 태그로 사용할 수 있습니다.

이렇게 임포트된 메타데이터를 언리얼 에디터에서 사용하는 방법에 대한 자세한 내용은 에셋 메타데이터 페이지를 참고하세요.