이 페이지에서는 메타휴먼 캐릭터 에셋과 인터랙션하기 위한 스크립팅 지원 기능을 살펴봅니다.
Engine\Plugins\MetaHuman\MetaHumanCharacter\Content\Python\examples에는 다양한 작업에서 API를 사용하는 방법을 참고할 수 있는 예시 스크립트가 포함되어 있습니다.
이 스크립팅 API는 메타휴먼 캐릭터 에셋과 인터랙션하는 Python 코드를 작성할 때 가장 유용하도록 디자인되었지만, 에디터 유틸리티 블루프린트에서도 동일한 기능을 사용할 수 있습니다.
메타휴먼 캐릭터 에셋
메타휴먼 캐릭터 에셋에는 메타휴먼 캐릭터에 대한 모든 정보가 저장됩니다. 이 에셋에서는 메이크업, 눈, 스킨 등 다양한 프로퍼티를 직접 편집할 수 있습니다. 캐릭터를 열지 않고도 설정할 수 있는 모든 프로퍼티 목록은 test_set_character_properties.py에서 확인할 수 있으며, 새 캐릭터 에셋을 생성하는 예시는 examples/example_create_asset.py에서 확인할 수 있습니다.
메타휴먼 캐릭터 에디터 서브시스템
메타휴먼 캐릭터 에디터 서브시스템은 페이스와 바디를 편집하고, 텍스처 소스를 다운로드하거나 자동 리깅을 수행하는 데 필요한 인터페이스를 제공합니다. 에디터에서 열려 있는 캐릭터를 편집하는 코드를 작성할 때도 이 서브시스템이 필요합니다. 이 기능을 사용하면 캐릭터를 인터랙티브하게 편집할 수 있으며, 모든 변경사항이 뷰포트에 자동으로 반영됩니다.
다음 표에서는 MetaHumanCharacterEditorSubsystem에서 캐릭터 에셋을 편집할 때 주로 사용되는 주요 함수가 나와 있습니다.
| 기능 | 설명 |
|---|---|
try_add_object_to_edit(character) | 편집할 메타휴먼 캐릭터 에셋을 로드하려고 시도합니다. 서브시스템은 캐릭터를 편집하는 데 필요한 모든 데이터를 생성하고 트래킹합니다. 메타휴먼 캐릭터 에셋 에디터를 열면, 해당 캐릭터가 서브시스템에 등록되어야 하기 때문에 이 함수가 자동으로 호출됩니다. |
remove_object_from_edit(character) | 서브시스템에서 오브젝트를 제거합니다. 이는 서브시스템에서 보유하고 있는 캐릭터별 데이터 관리 측면에서 중요합니다. 메타휴먼 캐릭터 에셋 에디터를 닫으면 해당 캐릭터가 서브시스템에서 제거됩니다. |
is_object_added_for_editing(character) | 캐릭터가 서브시스템에서 편집을 위해 등록되어 있는지 확인합니다. |
변경사항 커밋하기
메타휴먼 캐릭터 오브젝트에서 직접 설정할 수 있는 모든 프로퍼티는 서브시스템에 등록하지 않아도 되지만, 에디터에서 열려 있는 캐릭터를 편집할 때는 커밋 함수를 사용하지 않으면 변경사항이 뷰포트에 반영되지 않습니다.
이 기능의 실제 사용 예시는 examples/example_live_edit.py에서 확인할 수 있습니다. 이 스크립트를 사용하려면 콘텐츠 브라우저에서 메타휴먼 캐릭터 에셋을 선택한 다음 실행합니다. 이 스크립트는 에디터를 열고 translate_face_landmarks 함수를 사용하여 페이스를 편집한 다음 commit_face_state를 호출합니다. translate_face_landmarks 함수는 캐릭터 에셋 자체에 변경사항을 저장하지 않고 프리뷰 데이터만 업데이트하므로 이 단계가 중요합니다. commit_face_state는 변경사항을 시리얼라이즈하는 역할을 합니다.
메이크업, 헤드 및 바디 모델 등 스킨과 관련된 변경사항을 뷰포트에 반영하려면 이 패턴을 따라야 합니다.
텍스처 다운로드 및 자동 리깅하기
서브시스템은 메타휴먼 클라우드 서비스를 호출하여 각각 텍스처를 다운로드하거나 자동 리깅을 수행할 수 있는 request_texture_sources 및 request_auto_rigging 함수를 제공합니다. 두 함수는 구조체 파라미터를 취하며, 이를 통해 요청을 차단하는 방식으로 설정하거나 진행 상황 보고 여부를 제어할 수 있습니다.
알려진 문제: 한 번 생성된 릭은 제거할 수 없습니다.
의상 및 그룸 환경설정하기
그룸과 클로딩은 MetaHumanPipelineSlotSelection 오브젝트를 통해 일반 슬롯 시스템을 사용합니다. 그룸과 의상을 프로그래밍 방식으로 선택하는 방법에 대한 예시는 examples/example_add_grooms.py 또는 examples/example_add_clothing.py에서 확인할 수 있습니다.
API를 통해 캐릭터에 적용된 각 의상 아이템의 파라미터를 환경설정할 수도 있습니다. 그룸 및 의상 파라미터를 편집하는 예시는 test_set_character_instance_params.py에서 확인할 수 있습니다. 캐릭터의 컬렉션에서 모든 인스턴스 파라미터를 사용할 수 있게 하려면 파라미터를 편집하기 전에 반드시 asset_for_preview를 호출해야 합니다.
헤드 형상 적용하기
헤드는 형상 적용 툴을 사용하여 생성할 수 있습니다. 헤드는 DNA 기반 형상 적용, 템플릿 기반 형상 적용 및 버텍스에서 맞추기를 지원합니다. 자세한 내용은 examples/example_conform_head.py를 참고하세요.
스컬프팅
헤드와 바디는 모두 API를 통해 직접 스컬프팅할 수 있습니다. 페이스 스컬프팅은 각 랜드마크의 벡터 위치를 조정하여 수행할 수 있습니다. 자세한 내용은 examples/example_sculpt_face.py를 참고하세요. 파라메트릭 바디 시스템도 매우 유사한 방식으로 조작할 수 있습니다. UI의 각 슬라이더는 바디 컨스트레인트를 나타내며, 각 컨스트레인트를 활성화하고 타깃 측정 값을 설정할 수 있습니다. 자세한 내용은 examples/example_sculpt_body.py를 참고하세요.
어셈블리
이 프로세스의 마지막 스테이지는 캐릭터를 어셈블하는 것입니다. API는 현재 사용 가능한 모든 파이프라인(UE Cine, UE Optimized, UEFN, DCC)을 지원합니다. 각 파이프라인에는 어셈블리 프로세스를 커스터마이징하기 위해 환경설정할 수 있는 추가 파라미터가 있습니다. 예시는 examples/example_assembly.py에서 확인할 수 있습니다.