UDN
Search public documentation:

ProfilingBasicsKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 퍼포먼스, 프로파일링과 최적화 > 기본 프로파일링과 최적화 기법

기본 프로파일링과 최적화 기법

개요


여기서는 퍼포먼스 문제, 병목 현상, 버벅임을 추적하는 데 가장 유용한 툴에 대한 이해를 도와 드리도록 하겠습니다.

보통 첫 업무 순서는 프레임이 CPU 혹은 GPU 퍼포먼스에 제한되어 있는지를 결정한 다음, 적절한 툴을 사용하여 문제 범위를 좁혀가는 것입니다.

CPU 가 느리게 돌아간다면 그에 맞는 명령과 디버깅 툴이 많이 있습니다. 가끔 느린 요인이 단지 액터나 "움직이는 부분"이 너무 많기 때문일 수도 있고, 배신때린 AI 클래스가 프레임당 광선 투사(ray cast)를 수천번씩 쏘기 때문일 수도 있습니다. 고진감래라, 약간만 참으면 이런 퍼포먼스 문제를 추적해 들어가 문제 레벨 액터를 딱 짚어낼 수 있을 것입니다!

GPU 퍼포먼스에 대해서는, 드로 이벤트나 셰이더 퍼포먼스를 분석하기 위해 PIX 를 사용해야 할 수도 있고, 게임내 시각화 모드나 HUD 통계를 사용해야 할 수도 있습니다. 가끔 이러한 문제는 콘텐츠 레이아웃이나 라이팅 속성으로 추적되기도 합니다.

어느 경우든 늘어지는 프레임율 문제나 버벅임 (큰 프레임시간 스파이크)을 처리하는 중일 것입니다. 프레임율이 늘어져 안좋게 나올 때는, 단일-프레임 캡처 툴 (TRACE 명령 등)과 샘플링 프로파일러 (VTune 등)이 매우 좋습니다. 버벅임의 경우는, 콜 그래프를 사용하는 프레임 히스토리 분석을 위해 StatsViewer 를 사용하는 것이 좋을 것입니다.

언리얼 툴이 다중 플랫폼에서 작동하긴 하지만, 콘솔의 디버킹 툴은 보통 PC와는 다르다는 점 유념하시기 바랍니다.

STAT 명령


게임을 디버깅, 테스팅, 프로파일링할 때 중요한 것은, 게임 내 유의미한 데이터를 빠르고 쉽게 확인하고 평가할 수 있어야 한다는 것입니다. STAT 콘솔 명령을 사용하여, HUD 형식으로 데이터를 화면상에 렌더링하여 게임과 엔진의 다양한 면에 대한 통계를 얼마든지 보여주는 기능이 언리얼 엔진 3 에 제공되고 있습니다.

Stats Descriptions KR 페이지에는 사용가능한 stat 명령의 전체 목록은 물론 각 명령에 의해 표시되는 다양한 척도에 대한 설명이 수록되어 있습니다.

프로파일링 환경 준비하기


  1. 우선, 게임 실행중에 STAT UNIT 을 띄워뒀는지 항시 확인합니다.
  2. 퍼포먼스 결과를 망치는 로그 스팸을 껐는지 또는 디버그 코드를 껐는지 확인하십시오.
  3. 버벅임에 영향을 끼치므로 가비지 콜렉션 검증을 끄십시오.
  4. 빠른 프레임에서도 병목 현상을 알아낼 수 있도록 VSync 를 끄십시오.

STAT UNIT

프레임 시간 어디에 병목 현상이 발생하는지 알아보려면 STAT UNIT 명령을 사용하십시오. STAT UNIT 은 프레임 시간, 게임 스레드 시간, 렌더 스레드 (Draw) 시간, (가능하면) GPU 시간 등을 표시하는 화면상의 HUD 를 토글합니다. 퍼포먼스 문제를 추적해 내려가기 위해서 매우 중요한 첫 단계로, 거의 항상 이 기능을 켜 놔야 합니다.

또한 STAT FPS 명령을 사용하여 화면에 프레임율과 프레임 시간을 표시할 수 있습니다.

가비지 콜렉션 검증 끄기

퍼포먼스 작업을 하면서는 항시 GC Verification 을 꺼 둬야 하는데, 안그러면 Release 빌드에서는 최소 30 초 정도마다 엄청난 버벅임을 볼 수 있을 것입니다. 다음 방법 중 하나를 쓰면 됩니다:

  • 명령줄 인수 -NoVerifyGC 를 붙입니다.

VSync 끄기

최적의 결과를 위해선 VSync (프레임을 표현하기 전 수직 retrace 를 대기하는 기능)을 끄는 것이 좋습니다. 안그러면 프레임 시간은 게임의 리프레시율에 덧대어져, 정확한 그림을 얻기가 더욱 힘들어 집니다. VSync 를 끄려면:

  • -NoVSync 명령줄 옵션을 게임에 전달합니다.
  • 아니면 Unreal FrontendGame 탭에서 "No VSync" 체크박스를 켭니다.

STAT SLOW 사용하기

STAT SLOW 명령을 사용하면 퍼포먼스 스파이크를 찾는 데 도움이 됩니다. 프레임이 지정된 기간 (디폴트로 10 ms) 이상 실행되는 사이클 통계를 보고하여 버벅임 범위를 줄여 보는 데 좋습니다. 느리게 실행되는 부분의 통계는 잠깐동안 HUD 상에 표시되어, 화면상의 게임 행위와 스파이크의 상관관계를 쉽게 파악할 수 있도록 합니다.

사용하려면 콘솔에 STAT SLOW 에다 초 단위로 (즉 0.01 은 10 ms) 한계치는 얼마나 할지, 스파이크가 발생하면 통계를 얼마나 표시할지 지정합니다.

예: STAT SLOW 0.01 10

지난 10초간 사이클 통계가 10ms 초과인 것을 표시합니다.

팁과 꼼수


여기에는 퍼포먼스 문제를 프로파일링할 때 염두에 둘 팁과 트릭이 수록되어 있습니다.

걍 꺼버려!

자주 괜찮긴 한데 꽤나 무거운 기능을 접하게 됩니다. 너무 많이 사용하지만 않으면, 복잡한 씬에서 너무 느려지지만 않으면 괜찮기야 할 것입니다. 몇 시간 공들여 최적화하여 20~40% 향상시켰대도 씬이 충분히 빠르지 않을 수도 있습니다. 이럴 때 좋은 방법은 걍 그 기능을 끄는 것입니다! 대학살 장면이라거나 좀 원거리라 눈치채기 힘들 경우에 괜찮을 전략적 선택입니다.

게다가 "걍 꺼버려"는 프로파일링 하기에도 좋은 기술입니다. 가끔은 이걸 최적화 해? 말어? 싶을 때가 있습니다. 그냥 꺼버리고 이렇게 말해버리면 딱입니다: "프레임시간 측면에서 자유를 선택한 거야!"

용례:

  • 플레이어와의 거리가 먼 적들의 경우 보통 바닥에 피 데칼(총 맞았을 때의 출혈 효과들)을 뿌릴 필요가 없습니다.
  • 플레이어가 다가가 볼 수 없는 (절벽같은 데 있는) 적한테도 출혈 효과나 무기 드랍 효과를 줄 필요가 없을것입니다. 렙디가 잘 알것입니다.
  • 복잡한 스켈레탈콘트롤을 최적화하는 대신, 오너가 보이지 않을 때는 업데이트 안해버리면 그만입니다.
  • 천(cloth) 시뮬도 씬에 없을 때는 그냥 안해버리면! ^_^

벽보기

대부분 보이지 않아 필요 없는데도 코드가 업데이트되는 경우가 있습니다. 레벨로 들어가 벽을 바라보고 서서 보통의 프로파일링 작업을 해 보겠습니다. 어떤 오브젝트가 필요치도 않은 상황에서 설레발치며 업데이트되고 있는지 확인해 볼 수 있습니다.

물론 몇몇은 안보여도 계속 업데이트가 필요한 게 있지만, 대부분은 지속적으로 업데이트하지 않아도 되는 것들입니다.

A형 N개 스폰

게임 내에서 어떤 종류의 적에게 공격받을 때 게임이 느려지는 경우가 자주 있습니다. 가끔은 그 적 자체가 느린겁니다! 문제는 엔진 나머지 것들이 걸리적거려서 뭐가 느린건지 쉽게 알아볼 수가 없다는 겁니다. 그럴 때 좋은 방법은 테스트 레벨에다가 그 적을 N개 스폰해 놓고 프로파일링해 보는 겁니다. 화두가 뭔지 쉽게 알아볼 수 있을 겁니다!

사용하기 쉬운 기술입니다:

  • 테스트 레벨에 문제 오브젝트를 N개 놓아 봅니다.
  • 프로파일!