애플리케이션에서 많은 파라미터가 있는 복잡한 커스터마이징 가능 오브젝트를 사용하는 경우, 인스턴스를 업데이트하면 시간(밀리초)이 많이 들기 때문에 비용이 큰 프로세스가 될 수 있습니다. 게임에서는 이러한 업데이트가 상호작용으로 이루어져야 하는 경우가 있고, 그런 상황에서는 딜레이가 길면 안 됩니다. 뮤터블은 이러한 문제를 상태(States) 개념으로 해결합니다.
상태는 게임에서 커스터마이징 가능 오브젝트의 특정한 사용 사례를 나타냅니다. 예를 들어, 게임의 캐릭터 생성 단계에서 플레이어에게 얼굴과 헤어를 커스터마이징하도록 할 수 있습니다. 이 단계에서는 캐릭터 머리를 카메라로 클로즈업하고, 헤어 컬러, 코 크기, 헤어 스타일 등 관련 파라미터를 나타내는 유저 인터페이스를 표시합니다. 이때는 티셔츠 컬러나 상체 문신 같은 다른 파라미터는 수정할 수 없습니다. 뮤터블이 최대의 퍼포먼스를 제공하도록 만들기 위해 이 단계에서 수정할 파라미터의 서브셋을 사용하여 커스터마이징 가능 오브젝트에 상태를 생성할 수 있습니다. 시스템은 이 상태에서 더 빠르게 업데이트하는 최적화된 버전의 데이터를 생성합니다.
에디터 프리뷰 인스턴스(Editor Preview Instance) 창에서 상태 드롭다운을 통해 어느 상태를 사용할지 선택할 수 있습니다.
뮤터블 상태 드롭다운입니다.
void SetCurrentState(const FString& StateName) 을 호출하여 업데이트를 요청하기 전에 커스터마이징 가능 오브젝트 인스턴스의 상태를 설정해야 합니다.
런타임 파라미터
런타임 파라미터(Runtime Parameters) 배열은 뮤터블이 주어진 상태를 최적화하기 위해 사용하는 파라미터 세트를 정의합니다. 이러한 각 파라미터는 다음과 같은 타입이 될 수 있습니다.
런타임 파라미터 배열은 베이스 오브젝트(Base Object) 및 자손 오브젝트(Child Object) 프로퍼티의 하단에 있습니다.
런타임 파라미터 배열
최적화 옵션
상태는 커스터마이징 가능 오브젝트 인스턴스의 구성 시간을 최적화하는 다양한 옵션도 제공합니다. 예를 들어, 게임에서 더 많은 그래픽 리소스를 사용할 수 있는 경우가 있습니다. 게임 레벨보다 작은 로비 씬에 있는 경우가 그렇습니다. 이런 상황에서는 잠시 캐릭터에 더 많은 메모리를 사용할 수 있습니다. 뮤터블은 각 개별 상태마다 런타임 파라미터 외에도 다음과 같은 세 가지 최적화 옵션을 제공합니다.
- 런타임 텍스처 압축하지 않음(Do not Compress Runtime Textures): 이 상태에서는 변경 가능한 텍스처의 압축이 방지됩니다.
- 첫 번째 LOD만 빌드(Build Only First LOD): 오브젝트의 LOD 0만 생성합니다.
- 파라미터 값 강제(Forced Parameter Values): 상태가 선택될 때 수정되는 열거형 파라미터를 나열합니다. 예를 들어, 재킷 아래 입은 셔츠를 편집할 때 재킷을 숨길 수 있습니다. 첫 번째 필드는 열거형 파라미터 이름을 나타내고, 두 번째 필드는 강제 값을 나타냅니다.
뮤터블 최적화 옵션
상태는 Base Object 노드에서 생성됩니다. 상태를 생성한 것이 없으면 최적화된 파라미터와 최적화 옵션이 없는 디폴트 상태가 자동으로 생성됩니다. 또한, 자손 오브젝트는 자체 상태를 포함할 수 있습니다. 자손 오브젝트에 정의된 상태는 베이스 오브젝트에 정의된 상태와 똑같이 작동합니다.
게임으로서 이상적인 상황은 최적화된 파라미터가 없는 게임 내 상태와 더불어 게임 내 각기 다른 커스터마이징 시나리오에서 오브젝트를 생성하고 업데이트하도록 여러 가지 커스터마이징 상태를 갖추는 것입니다.