Unity FrameTimingManager 사용 가이드

이 문서는 Unity의 FrameTimingManager에 대한 설명과 활용 방법을 안내합니다. FrameTimingManager는 애플리케이션의 프레임 성능을 분석하고 최적화하는 데 유용한 도구입니다.

1. FrameTimingManager란?

FrameTimingManager는 애플리케이션의 각 프레임에 대한 성능 데이터를 캡처하는 API입니다. 이 정보를 사용하여 애플리케이션이 성능 목표에 도달하지 못하는 이유를 파악할 수 있습니다. 주로 다음과 같은 상황에서 유용합니다:

  • 프레임별로 디버깅이 필요한 경우
  • 동적 해상도 기능을 사용하려는 경우
  • Adaptive Performance 패키지를 사용하려는 경우

중요: FrameTimingManager는 프로파일러 데이터를 대체하지 않으며, 고수준 프로파일링 후에 사용해야 합니다.

2. FrameTimingManager 활성화 방법

FrameTimingManager를 활성화하려면 다음 단계를 따르세요:

  1. Edit > Project Settings > Player로 이동합니다.
  2. Other Settings에서 Rendering 섹션을 찾습니다.
  3. Frame Timing Stats 프로퍼티를 활성화합니다.

OpenGL 플랫폼을 사용하는 경우, GPU 사용량 측정을 위해 추가로 OpenGL:Profiler GPU Recorders 프로퍼티를 활성화해야 합니다.

3. FrameTimingManager 사용 방법

FrameTimingManager가 기록하는 데이터에 접근하려면 다음 방법 중 하나를 사용할 수 있습니다:

  • Custom Profiler 모듈에서 프레임 타임 데이터 확인
  • FrameTimingManager C# API의 타임스탬프 데이터 검색
  • 특정 프로파일러 카운터를 통해 데이터 기록

3.1 Custom Profiler 모듈 생성

  1. Custom Profiler 모듈을 생성합니다.
  2. Profiler Module Editor 창에서 커스텀 모듈을 선택합니다.
  3. Available Counters 패널에서 Unity를 선택하고, Render를 선택하여 관련 카운터를 클릭하여 추가합니다.

사용 가능한 카운터 설명

측정 설명
총 CPU 프레임 시간(ms) 총 CPU가 소비한 프레임 시간.
CPU 메인 스레드 프레임 시간(ms) 메인 스레드가 해당 프레임 중 수행한 작업의 시간.
CPU 렌더 스레드 프레임 시간(ms) 렌더 스레드가 시작된 시점부터 Present() 호출까지의 시간.
GPU 프레임 시간(ms) GPU가 하나의 프레임을 렌더링하는 데 소요된 시간.

3.2 FrameTimingManager C# API 사용

타임스탬프 정보는 FrameTimingManager API를 통해 접근할 수 있으며, 다음과 같은 속성을 통해 정보를 얻습니다:

프로퍼티 설명
frameStartTimestamp 프레임이 시작되는 CPU 클럭 시간.
firstSubmitTimestamp GPU에 첫 번째 작업을 제출하는 CPU 클럭 시간.
cpuTimePresentCalled Present() 호출 시점의 CPU 클럭 시간.
cpuTimeFrameComplete GPU가 프레임 렌더링을 완료하고 CPU를 중단하는 시점의 클럭 시간.

3.3 ProfilerRecorder API 활용

ProfilerRecorder API를 사용하면 필요한 카운터에 레코더를 연결하여 데이터를 간단하게 기록할 수 있습니다. 예를 들어, 메인 스레드의 프레임 타임을 추적하는 방법은 다음과 같습니다:

using Unity.Profiling;

using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    string statsText;
    ProfilerRecorder mainThreadTimeRecorder;

    void OnEnable()
    {
        mainThreadTimeRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Internal, "CPU Main Thread Frame Time");
    }

    void OnDisable()
    {
        mainThreadTimeRecorder.Dispose();
    }

    void Update()
    {
        var frameTime = mainThreadTimeRecorder.LastValue;
        // Your code logic here
    }
}

4. FrameTimingManager 동작 원리

FrameTimingManager는 4 프레임의 지연을 통해 성능 데이터를 제공합니다. GPU의 리소스 상태에 따라 정확한 타이밍 결과를 보장할 수 없는 경우가 있습니다. 다양한 GPU 및 메탈 아키텍처에 따라 발생할 수 있는 조건에 대해서도 이해해야 합니다.

플랫폼 지원 여부 비고
Windows DirectX 11, 12, OpenGL, Vulkan 지원
macOS Metal 지원 타일 기반 디퍼드 렌더링의 GPU 시간 부정확성 가능성
Linux OpenGL 지원 부분적 GPU 시간 측정 지원
Android OpenGL ES, Vulkan 지원
iOS Metal 지원 타일 기반 디퍼드 렌더링의 GPU 시간 부정확성 가능성
tvOS Metal 지원 타일 기반 디퍼드 렌더링의 GPU 시간 부정확성 가능성
WebGL 부분적 GPU 시간 측정 지원

5. 추가 리소스

이 가이드를 통해 FrameTimingManager를 효과적으로 활용하여 애플리케이션의 성능을 최적화할 수 있기를 바랍니다.

Read more

Unity 매뉴얼 스크립팅 API 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 간단한 해설과 활용 예제들을 포함하고 있습니다. Unity는 게임 개발 플랫폼으로, 스크립팅 API를 통해 게임의 다양한 기능을 제어하고 수정할 수 있습니다. 버전 Unity 스크립팅 API는 여러 버전으로 제공됩니다. 주의 깊게 선택하여 사용하는 것이 중요합니다. 버전 설명 2023.2 최신 기능 및 버그 수정이 추가됨

By 이재협/실장/시스템개발실/PHYSIA

Unity 매뉴얼 스크립팅 API 설명서 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 정보를 제공하며, 버전에 따라 다르게 적용되는 내용들을 설명합니다. 본 문서에서는 주요 내용을 간단히 정리하고 활용 가능 예제를 통해 이해를 돕겠습니다. 기본 개념 Unity에서 스크립팅 API는 게임 오브젝트와 그들의 동작을 제어하기 위한 강력한 도구입니다. 이를 통해 게임의 로직, 물리 엔진, 애니메이션 및 사용자 인터페이스를

By 이재협/실장/시스템개발실/PHYSIA

Unity 스크립팅 API 가이드

이 문서는 Unity의 스크립팅 API에 대해 설명합니다. Unity는 게임 개발을 위한 인기 있는 엔진으로, 강력한 스크립팅 기능을 제공합니다. 이 가이드는 Unity에서 스크립트를 작성하고 사용하는 방법을 이해하는 데 도움을 드립니다. 목차 * Unity 스크립팅 소개 * 기본 스크립트 생성 * 스크립트 사용 예제 * 응용 프로그램 * 참고 자료 Unity 스크립팅 소개 Unity는 C# 프로그래밍 언어를

By 이재협/실장/시스템개발실/PHYSIA