Unity 검색

Games Focus: 프로파일링 및 성능 최적화

2022년 9월 28일 테크놀로지 | 11 분 소요
Games Focus blog 03, hero image
Games Focus blog 03, hero image

이 블로그는 핵심 제품의 향후 개발 계획을 소개하는 Games Focus 시리즈의 세 번째 글입니다. 이번 글에서는 Unity의 프로파일링 및 성능에 관한 현재 상황과 예정된 릴리스 계획, 앞으로의 비전 등을 다룹니다. 

제 이름은 마리카입니다. 저는 지난 10년 동안 비디오 게임 업계에서 근무했으며 현재 Unity의 프로파일링 툴 및 성능 최적화 분야의 수석 기술 제품 매니저를 맡고 있습니다.

Unity의 성능과 관련하여 지원을 제공할 수 있는 주요 분야로 다음 세 가지가 있습니다.

  • 인사이트: 게임 성능을 분석하여 병목 지점을 식별하고, 최적화 전략이 효과를 낼 수 있는 영역을 파악할 수 있도록 지원
  • 경험: Unity 에디터 및 런타임 성능을 개선하여 더 원활하게 프로젝트를 제작할 수 있도록 지원
  • 혁신: 처음부터 성능을 염두에 둔 새로운 프로그래밍 기술과 패러다임 안내

이 포스팅은 처음 두 영역에 중점을 두어 프로파일링 툴 제품군의 최신 업데이트를 다루며, 사용자의 피드백을 바탕으로 한 2023년 및 그 이후의 로드맵을 알아봅니다. 그리고 프로젝트를 최적화하는 베스트 프랙티스를 개괄적으로 소개하며 마무리하려고 합니다. 

세 번째 영역인 DOTS 기반 프로젝트에 중점을 둔 성능 중심 프로그래밍 기술과 워크플로는 다음 포스팅에서 살펴볼 예정입니다.

Unity의 프로파일링

Unity에서 제공하는 프로파일링 기능은 애플리케이션 성능에서 속도나 품질 저하 문제가 발생하는 이유 또는 코드가 메모리를 지나치게 할당하는 이유 등을 밝히는 데 도움을 주는 감지 툴이라고 볼 수 있습니다. 이러한 프로파일링 기능을 통해 Unity 게임 엔진 내부의 상황을 더 쉽게 파악할 수 있습니다.

유니티의 목표는 프로파일링 및 최적화를 통해 Unity 툴과 런타임 성능을 개선하여 다양한 플랫폼과 기기를 사용하는 모든 플레이어에게 원활한 성능을 제공하는 것입니다.

현재 이용 가능한 프로파일링 툴

메모리 프로파일러는 메모리 사용 및 구성에 대한 정보를 쉽게 추적할 수 있도록 설계되었습니다. 드디어 Memory Profiler 1.0.0이 Unity 2022.2 베타 릴리스 이상 버전에서 정식 패키지로 제공됩니다(다운로드 방법은 여기를 참조). 주요 기능의 워크플로를 개선할 수 있도록 소중한 피드백을 제공해주신 모든 분께 감사드립니다.

많은 크리에이터가 각 타겟 플랫폼이 가진 메모리 제약 내에서 작업해야 하는 어려움에 직면합니다. 메모리 프로파일러를 사용하면 에셋과 오브젝트가 메모리에 어떤 영향을 주는지 하나의 뷰에서 명확하고 간편하게 볼 수 있으므로 그러한 문제를 더 쉽게 해결할 수 있습니다. 또한 해당 메모리와 관련된 오브젝트와 시스템에 대한 세부적인 컨텍스트 정보도 확인할 수 있습니다.

상세 정보 뷰를 통해 캡처를 더 심층적으로 분석하고 메모리 스냅샷을 비교하여 메모리 사용에 부정적인 영향을 미치는 잠재적 누수와 불필요한 할당을 식별할 수 있습니다.

The Summary tab provides an overview of total memory used. The Unity Objects tab shows any Unity objects that use memory, while the All of Memory tab displays a breakdown of all the memory in the snapshot that Unity tracks.
Summary 탭에서는 사용된 총 메모리 개요를 볼 수 있습니다. Unity Objects 탭에서는 메모리를 사용하는 모든 Unity 오브젝트를 볼 수 있고 All of Memory 탭에서는 Unity가 추적하는 모든 메모리 상세 정보를 스냅샷으로 볼 수 있습니다.
You can compare memory usage between two memory snapshots.
두 메모리 스냅샷 간의 메모리 사용을 비교할 수 있습니다.

기존 프로파일링 툴 세트 개선

2022.1에는 Frame Timing Manager가 추가되었고, 이를 통해 여러 프레임에서 프레임 타이밍 데이터를 캡처하고 액세스할 수 있습니다. 성능 저하가 발생하는 경우, 이 기능을 사용하여 프레임을 평가하고 애플리케이션이 성능 목표를 충족하지 못하는 이유를 분석할 수 있습니다. 기술 자료에서 더 자세히 알아보세요.

Unity 프로파일러에서 로우레벨 GPU 지표를 모니터링하려는 경우, Arm과의 파트너십을 통해 2022.1에서 릴리스한 새로운 System Metrics Mali 패키지를 사용할 수 있습니다. 이 패키지를 사용하면 모바일 디바이스에서 로우레벨 시스템이나 하드웨어 지표에 액세스할 수 있습니다. Arm CPU 및 Mali GPU 기반의 모바일 디바이스에서 콘텐츠를 원활하게 실행하는 방법을 자세히 알고 싶다면 이 2021 블로그를 참조하세요.

성능 최적화

지금까지 성능을 개선할 여지가 있는 영역을 식별할 때 우선적으로 사용하기 좋은 여러 프로파일링 툴을 살펴봤습니다. 하지만 유니티에서 말하는 '성능 최적화'는 타겟 디바이스에서의 게임의 런타임 성능뿐만 아니라 팀의 작업 방식, 즉 생산성에도 적용됩니다. 유니티의 목표는 에디터에서 반복 작업 시간을 단축하고 방해 요소를 줄이며 효율성을 높이는 것입니다.

Unity 2021 LTS에서는 에셋 임포트 속도가 3~4배 빨라졌으며, 임포트된 프로젝트를 여는 속도도 Unity 2020 LTS에 비해 최대 8.7% 빠르게 개선되었습니다. 

2022 릴리스에서는 그 외에도 다음과 같은 사항이 개선되었습니다.

  • 유니버설 렌더 파이프라인 및 고해상도 렌더 파이프라인에 대한 머티리얼 리임포트 개선
  • 다음과 같은 에디터 워크플로 개선:
    • 대규모 씬의 저장 시간 단축
    • 씬 선택에서 지연 시간 감소
    • 다수의 LOD 그룹이 있는 경우 씬 뷰 성능 개선
    • 최적화된 애니메이션 리깅 패키지
    • 계층 구조(Hierarchy) 스크롤링 향상
    • 대형 프리팹의 저장 워크플로 개선
    • 도메인 리로드 최적화를 통해 에디터 내에서 작업할 때 반복 시간 개선
  • 다음과 같은 플레이 모드 개선:
    • 정적 배칭 성능 개선
    • 어드레서블의 리소스 디렉토리 검색 방식 최적화
    • 파티클 시스템 프리워밍(Prewarming)

많은 개선 사항을 적용하는 데 있어 사용자의 피드백이 커다란 역할을 했다는 사실을 다시 강조하고 싶습니다. 계속해서 유니티의 향후 로드맵에 대한 피드백을 공유하고 포럼에서 유니티 팀과 소통하세요. 유니티는 특히 성능과 관련된 문제에 집중하고 있으며 해당 내용은 여기서 다룹니다.

향후 계획

10년이 넘는 기간 동안 유니티는 크리에이터가 프로파일링 툴을 사용해 최고의 성능을 달성할 수 있도록 계속 지원해 왔으며, 지속적으로 툴 세트를 개선해 나갈 예정입니다. 이 글에서 언급한 모든 기능을 포함해 이러한 발전은 여러 형태로 이루어져 왔습니다.

성능을 큰 규모로 향상시키기 위해 노력한 또 다른 분야는 DOTS(데이터 지향 기술 스택)입니다. DOTS를 제공하기 위해 반드시 필요한 핵심 기능 두 가지는 Burst 컴파일러C# Job System입니다. 유니티 내부에서 고유의 엔진 성능을 높이기 위해 활용했던 두 기능을 이제 모든 크리에이터가 사용할 수 있습니다. 조만간 세 번째 필수 기능인 엔티티(Entities)를 제공할 예정이며 이 기능은 네트워킹, 물리 등의 영역에서 프로젝트 성능을 크게 향상할 것입니다. DOTS는 게임 개발에 대한 유니티의 노력에 중요한 부분을 차지하며, 이번 시리즈에서 곧 별도의 Games Focus 포스팅을 통해 다룰 예정입니다.

지금은 향후 릴리스에서 예정된 몇 가지 개선 사항을 살펴보겠습니다.

유니티는 사용자가 시작 시간을 단축하고 프로젝트 흐름을 유지할 수 있도록 에디터 시작에 소요되는 시간을 줄이기 위해 노력하고 있습니다. 현재는 타겟 디바이스를 에디터에 연결하면 연결 해제 또는 복구 불능과 같은 불안정한 상황이 발생할 수 있습니다. 2023.1 릴리스에서는 보다 안정적이고 성능 기준에 맞게 에디터와 모바일 플랫폼을 연결하기 위해 노력하고 있습니다.

또한 프로파일러를 통해 더 효율적으로 병목 지점을 식별한 다음, 필요한 후속 작업을 파악할 수 있도록 구현하려 합니다. 유니티의 목표는 사용자가 성능을 최대로 향상할 수 있는 최적화 영역을 빠르게 식별하도록 지원하는 것입니다.

크리에이터가 빌드하는 기기에 따라 메모리 인사이트를 추가하여 플랫폼별로 성능을 향상할 수 있도록 하는 방법도 모색 중입니다. 이 기능은 아직 초기 단계에 불과하니 로드맵 페이지에서 적극적으로 피드백을 공유해주시기 바랍니다.

리소스

유니티의 프로파일링 툴 제품군을 전문적으로 활용할 수 있으면 게임 개발자로서 가장 유용한 기술을 하나 갖추는 셈입니다. 따라서 유니티는 크리에이터가 툴을 최대한 활용할 수 있도록 베스트 프랙티스를 담은 고급 콘텐츠를 제작하고 있습니다.

여러 팀원들이 Unity Integrated Success 팀의 전문 엔지니어 및 전문가와 함께 작업하여 Unity의 프로파일링에 대해 광범위한 정보를 포괄하는 가이드를 준비했습니다.

플랫폼에 따라 콘텐츠를 최적화할 수 있는 베스트 프랙티스는 다음 전자책에서 보실 수 있습니다.

또 하나의 간편한 참조 자료로 프로젝트의 병목 지점을 식별하기 위해 권장되는 접근 방식을 설명하는 플로차트가 있습니다.

Flowchart that provides a recommended approach to identifying bottlenecks in your project.

마지막으로 콘텐츠 및 마케팅 팀에서 작성한 프로파일링 및 최적화 추천 게시물에는 기초부터 고급 수준에 이르기까지 프로파일링 개념과 방법을 이해하는 데 도움을 주는 주요 블로그 포스팅이 포함되어 있습니다.

Cover images for three Unity e-books: Optimize your game performance for consoles and PC, Optimize your mobile game performance, and Ultimate guide to profiling in Unity games.

의견을 들려 주세요

유니티는 다양한 크리에이터의 진취적인 프로젝트에 필요한 솔루션을 개발하기 위해 최선을 다하고 있으며, 더 많은 지원을 제공하기 위해 항상 고민하고 있습니다. 

공개 로드맵 페이지에 게시되는 업데이트를 계속 주목해 주세요. 로드맵은 제품 팀에게 직접 피드백을 전달할 수 있는 최적의 공간이기도 합니다. 

블로그에 곧 게시될 다음 Games Focus 소식을 기대해주세요. 게임이 더 많은 플랫폼과 폼 팩터를 타겟팅하도록 유니티에서 현재 어떤 노력을 하고 있는지 집중적으로 다룹니다. 아울러, 언제든지 포럼에 들러 피드백을 공유해 주시기 바랍니다.

2022년 9월 28일 테크놀로지 | 11 분 소요
관련 게시물