애플리케이션을 최적화하려면 프로젝트가 하드웨어 리소스를 얼마나 소모하는지 정확하게 측정할 수 있어야 합니다. 커스텀 성능 지표를 이용하여 Unity Profiler를 확장하면 애플리케이션의 고유한 성능을 더 세부적으로 파악할 수 있습니다. 이 블로그에서는 Unity 2021 LTS의 새로운 프로파일러 확장 기능을 알아봅니다.
새로운 프로파일러 카운터는 Unity 애플리케이션과 패키지에 커스텀 성능 지표를 추가할 수 있는 간단한 메커니즘을 제공합니다. 이제 직접 제작한 프로파일러 모듈을 추가하여 프로파일러 창에서 직접 지표를 시각화할 수도 있습니다. 새 기능을 사용하여 Unity 프로젝트의 성능를 향상하는 방법을 자세히 알아보세요.
Unity Profiler는 애플리케이션의 자세한 성능 정보를 알아볼 수 있는 툴입니다. 이 툴은 메모리, 오디오, 렌더링 등 여러 카테고리의 수많은 성능 지표를 추적합니다. 이러한 지표는 프로파일러 창에 시각적으로 표시되며, 일부는 스크립트에서 쿼리할 수 있습니다. 이 정보를 사용하면 Unity 애플리케이션이 타겟 플랫폼의 가용 하드웨어 리소스를 어떻게 사용하는지 이해하고, 이를 통해 최적화가 필요한 부분을 정확히 파악할 수 있습니다.
프로파일러 카운터(Profiler counter)는 Unity 애플리케이션에서 성능 분석에 유용한 지표를 추적, 측정하고 계산합니다. 예를 들어, Unity는 애플리케이션이 사용하는 메모리의 총 바이트 수, 즉 '총 사용 메모리(Total Used Memory)'를 추적하기 위해 빌트인 프로파일러 카운터를 정의합니다. 이 카운터는 타겟 기기에서 앱의 메모리 사용량을 측정할 때 유용한 통계가 됩니다. 이 값은 아래와 같이 시간에 따라 프로파일러 창의 Memory 모듈에 기타 메모리 관련 지표와 함께 표시됩니다.
커스텀 프로파일러 카운터를 추가하면 시스템과 애플리케이션의 고유한 성능 지표를 확인할 수 있습니다. 이러한 지표는 프로파일러 창에 빌트인 카운터 등의 다른 성능 데이터와 함께 표시됩니다. 따라서 해당 애플리케이션의 고유한 성능 특성을 프로파일러 창에서 바로 관련 정보와 함께 확인할 수 있게 됩니다.
아래 예에서는 씬에서 활성 상태인 캐릭터의 수를 추적하기 위해 커스텀 프로파일러 카운터인 Creature Count를 추가했습니다. 이 카운터는 각 프레임에서 처리되는 렌더링 배치의 수를 추적하는 빌트인 프로파일러 카운터인 Batches Count와 함께 표시됩니다. 이를 통해 두 지표의 연관성을 쉽게 파악하고, 렌더러가 처리해야 하는 배치 수에 캐릭터의 수가 어떤 영향을 주는지 확인할 수 있습니다.
또한 릴리스 빌드에서 모든 프로파일러 카운터와 일부 정해진 빌트인 카운터를 사용할 수 있습니다. 릴리스 빌드는 개발 빌드보다 애플리케이션의 실제 성능을 더 정확하게 나타냅니다.
그러나 Unity Profiler는 최적화 문제로 릴리스 빌드에는 추가할 수 없습니다. 따라서 프로파일러 카운터를 사용하고 스크립트에서 쿼리하여 릴리스 빌드에서 중요한 지표만 선택해 모니터링할 수 있습니다. 예를 들어 CI(지속적 통합) 테스트에서 이 작업을 수행하여 성능 저하를 감지할 수 있습니다. 또는 아래 예의 왼쪽 하단처럼 Unity의 UI 시스템 중 하나를 사용하여 게임 내 디버그 사용자 인터페이스를 통해 일부 주요 성능 지표를 표시할 수 있습니다. 자세한 내용은 Profiler Recorder 기술 자료를 참조하세요.
프로파일러 카운터를 개발 빌드에만 포함하려는 경우, 조건부 컴파일 기술 자료에 설명된 바와 같이 해당 카운터를 DEVELOPMENT_BUILD 스크립팅 기호로 래핑하여 릴리스 빌드에서 제외할 수 있습니다.
프로파일러 카운터는 Unity 2021 LTS에서 릴리스된 Profiling.Core 패키지에서 사용할 수 있습니다. 이 패키지는 Unity 2021 LTS와 함께 번들로 제공되며 자동으로 설치되지 않습니다. 패키지 기술 자료의 설치 지침에 따라 패키지 관리자에서 이름으로 검색하여 추가하세요.
패키지를 설치한 후에는 API에 ProfilerCounter 또는 ProfilerCounterValue로 표시되는 프로파일러 카운터를 만들고 다음과 같이 업데이트할 수 있습니다.
using UnityEngine;
using Unity.Profiling;
public class CreatureCounter : MonoBehaviour
{
static readonly ProfilerCounterValue<int> k_CreatureCounter = new(ProfilerCategory.Scripts, "Creature Count",
ProfilerMarkerDataUnit.Count, ProfilerCounterOptions.FlushOnEndOfFrame);
void OnEnable()
{
k_CreatureCounter.Value += 1;
}
void OnDisable()
{
k_CreatureCounter.Value -= 1;
}
}
자세한 내용은 Profiling.Core 패키지 기술 자료를 참조하세요.
프로파일러 모듈은 프로파일러 창에 메모리, 오디오, 렌더링 등 특정 영역이나 워크플로의 성능 정보를 나타냅니다. 각 프로파일러 모듈은 해당 도메인의 성능 프로파일에 관한 정보를 제공합니다. 예를 들어, 아래의 메모리 프로파일러 모듈은 시간 경과에 따른 메모리 사용량과 관련된 7가지 주요 지표를 나타냅니다. 그 아래에는 선택된 프레임의 메모리 분포를 보여주는 상세 섹션이 있습니다.
Unity 2021 LTS에서는 커스텀 프로파일러 모듈을 사용하여 프로파일러 창을 변경할 수 있으며, 프로파일러 창에서 자체 시스템의 성능 지표를 바로 확인할 수 있습니다. 또한 모듈의 상세 뷰에 커스텀 시각화 자료를 표시하여 시스템의 성능 데이터를 원하는 대로 나타낼 수도 있습니다.
Profiler Module Editor는 임시 프로파일러 모듈을 빠르게 만들어야 할 때 사용하면 좋습니다. 예를 들어, 빠르게 프로파일러 모듈을 만들어서 새로운 프로파일러 카운터를 검증할 수 있습니다. 프로파일러 모듈 에디터를 통해 생성된 프로파일러 모듈은 로컬에서만 사용할 수 있으며, 다른 프로젝트 사용자와 공유되지 않습니다.
자세한 내용은 모듈 에디터 기술 자료를 참조하세요.
프로파일러 모듈 API를 사용하면 자체 프로파일러 모듈을 프로파일러 창에 추가하여 모든 프로젝트 사용자나 패키지 사용자와 공유할 수 있습니다. 이 API를 사용하여 프로젝트나 패키지에서 정의한 프로파일러 모듈은 자동으로 프로파일러 창에서 해당 프로젝트 또는 패키지의 모든 사용자가 이용할 수 있게 됩니다.
에셋 스토어 퍼블리셔 또는 패키지 개발자라면 이제 커스텀 프로파일러 모듈을 패키지와 함께 배포할 수 있습니다. 사용자가 해당 패키지를 설치하면 자동으로 프로파일러 창에서 커스텀 프로파일러 모듈을 사용할 수 있게 됩니다. 따라서 프로파일러 창에서 바로 패키지의 성능 지표를 확인할 수 있습니다.
유니티 내부에서는 이미 이 API를 사용하여 Netcode for GameObjects, Adaptive Performance, Mali System Metrics 등의 패키지에 커스텀 프로파일러 모듈을 배포했습니다.
프로파일러 모듈 API를 사용하여 프로파일러 모듈을 추가하려면 프로젝트나 패키지에 아래와 같이 ProfilerModule 스크립트를 생성하세요.
using Unity.Profiling;
using Unity.Profiling.Editor;
[System.Serializable]
[ProfilerModuleMetadata("Creature Batches")]
public class CreatureBatchesProfilerModule : ProfilerModule
{
static readonly ProfilerCounterDescriptor[]
k_Counters = {
new("Creature Count", ProfilerCategory.Scripts),
new("Batches Count", ProfilerCategory.Render), };
public CreatureBatchesProfilerModule() : base(k_Counters) { }
}
모듈이 모든 프로젝트 또는 패키지 사용자의 프로파일러 창에 자동으로 표시됩니다.
프로파일러 모듈 API의 자세한 사용 방법은 매뉴얼과 API 기술 자료를 참조하세요.
프로파일러 모듈 API에는 UI 툴킷을 비롯한 Unity 에디터 UI 시스템 중 하나를 사용하여 선택한 프레임의 성능 데이터를 커스텀 시각 자료로 그릴 수 있는 기능이 있습니다.
예를 들어, Adaptive Performance 패키지의 프로파일러 모듈은 이 API를 사용하여 특정 프레임의 상세한 성능 정보를 나타내며, 병목 현상과 발열 경고 지표와 같은 컨텍스트 정보도 표시합니다. Adaptive Performance 패키지 사용자는 이러한 지표를 통해 서멀 스로틀링과 같은 문제가 발생할 수 있는 경우를 명확하게 파악할 수 있습니다. 이 API를 사용하여 프로파일러 모듈의 성능 데이터를 커스텀 시각 자료로 나타낼 수 있습니다.
프로파일러 모듈에는 프로파일러 카운터 외에도 좀더 복잡한 추가 데이터를 시각적으로 나타낼 수 있습니다. 예를 들어, 아래와 같이 프로파일러 모듈의 상세 뷰에 현재 프레임의 스크린 캡처를 표시하여 성능 데이터에 대한 추가적인 컨텍스트를 제공할 수 있습니다.
프로파일러에 이미지와 같은 추가 프레임 데이터를 보낸 다음 프로파일러 캡처에서 검색하려면 프레임 메타데이터 API인 Profiler.EmitFrameMetaData와 FrameDataView.GetFrameMetaData를 사용하세요.
설정 데이터와 같이 프로파일링 세션마다 한 번만 전송하는 추가 데이터가 있는 경우, 세션 메타데이터 API인 Profiler.EmitSessionMetaData와 FrameDataView.GetSessionMetaData를 사용하세요.
위 기능을 사용하는 방법과 예시는 링크된 기술 자료를 참조하세요.
이 블로그에서는 커스텀 성능 지표로 Unity Profiler를 확장하는 방법을 알아보았습니다. 또한 Profiling.Core 패키지의 새로운 프로파일러 카운터를 사용하여 커스텀 지표를 추가하는 방법을 살펴보고, 프로파일러 모듈 에디터와 프로파일러 모듈 API를 사용하여 프로파일러 창에 커스텀 프로파일러 모듈을 추가하는 방법도 알아보았습니다. 마지막으로, 더 많은 컨텍스트 정보를 제공하기 위해 이미지와 같은 복잡한 추가 데이터를 프로파일러로 보내는 방법까지 확인했습니다.
Unity 2021 LTS에 추가된 프로파일러 확장 기능을 통해 애플리케이션의 고유한 성능을 더 정확하게 측정하고 파악하실 수 있기를 바랍니다. 궁금한 점은 언제든지 저희 포럼 페이지를 통해 문의해 주세요. Unity의 성능 툴을 향상할 수 있도록 새 기능을 사용해보고 피드백을 보내주세요.