글에 사용된 모든 그림과 내용은 직접 만들고 작성한 것입니다.
언리얼 엔진의 사용 도중 발생한 USD 에러의 해결 방법을 정리하기 위함.
- USD 에러는 컴퓨터가 멈추게 되는 오류이다.
- 해결 방법은 엔진 내부의 폴더를 찾아내서 삭제하고 GenerateProjectFiles.bat을 다시 실행하는 것이다.
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/universal-scene-description-usd-in-unreal-engine
https://www.youtube.com/watch?v=YNY_YPruYlA
공식 홈페이지에서는 Property Replication을 다음처럼 소개하고 있습니다.
"유니버설 씬 디스크립션(Universal Scene Description, USD) 교환 포맷은 여러 요소 에셋으로 구성된 임의의 3D 씬을 안정적이고 스케일 조절 가능한 방식으로 교환 및 보강하기 위해 Pixar에서 개발한 오픈 소스 포맷입니다."
우리가 3D 오브젝트를 다룰 때 FBX 파일 포맷을 자주 접할 수 있는데요. FBX는 Autodesk가 소유한 포맷이고, USD는 픽사 애니메이션에서 소유한 포맷입니다.
엔진을 사용하던 도중, 컴퓨터가 갑자기 꺼진 이후 다시 부팅해서 엔진을 빌드해보니 USD 관련 오류가 발생했습니다.
빌드를 74%에서 이런 오류 메시지를 출력합니다. 읽어보면 USDWrapper에 어떤 포맷 관련된 문제인거 같습니다.
UnrealUSDWrapper::GetAllSupportedFileFormats() UnrealUSDWrapper.cpp:642
FUnrealUSDWrapperModule::StartupModule() UnrealUSDWrapper.cpp:1262
FModuleManager::LoadModuleWithFailureReason(FName, EModuleLoadResult &, ELoadModuleFlags) ModuleManager.cpp:854
코드 부분으로 찾아 들어가보니 다음의 부분에서 오류 메시지를 표시해주고 있는데요. UsdUsdFileFormatTokens을 제대로 가져오지 못하고 있습니다. 파일을 살펴보니, USD 플러그인을 로드하는 도중 충돌이 발생했습니다.
// Ignore formats that don't target "usd"
pxr::SdfFileFormatConstPtr Format = pxr::SdfFileFormat::FindByExtension(Ext, pxr::UsdUsdFileFormatTokens->Target);
다음의 경로에 있는 폴더가 문제가 생겼다고 알려주고 있습니다.
UnrealEngine\Engine\Binaries\ThirdParty\USD\
우선, 클린 빌드의 대상은 아님을 알려드립니다. Intermediate, Saved, Binaries를 삭제하고 다시 빌드를 해도, 저 경로의 파일은 엔진의 바이너리 파일이므로 현재 작업 중인 프로젝트와는 관련이 적습니다.
에픽 게임즈에서 다운 받은 언리얼 엔진 버전이라면, 다음의 검증 기능을 사용하면 손쉽게 해결할 수 있습니다. 하지만 이것도 시간이 꽤 걸립니다.
가장 빠르고 좋은 방법은 저 USD 폴더를 삭제해버리고 GenerateProjectFiles.bat을 실행시켜 엔진을 다시 재빌드하면 됩니다.