언리얼 성능 최적화와 프로파일링

후이재·2021년 7월 3일
5

https://www.youtube.com/watch?v=hGLIqru5wnI

프로파일링을 위한 기초

이것을 알아야 한다.

  • 숨어있던 문제를 모아 분석화고 원인찾아 최적화 하는 것!
  • 미뤄두었다가 한번에 하려고 생각하지 마라..
  • 병목지점을 찾아야한다.
    - CPU: AI, 물리, 블프 Tick, 드로콜
    • GPU: 그림자, 오버드로, UI, 반투명, 라이팅
    • IO: 영상재생, 레벨로딩, 텍스처로딩
    • 네트워크: 대역폭, 전송 지연
    • 메모리: GC, OutofMemory
    • 발열로 인한 가속

성능 지표의 활용

  • 레퍼런스 하드웨어 선정
  • 목표 Frame Rate 설정: 30Hz(33.3ms Frame Time)
  • CPU 예산: AI(5ms)+Anim(3ms)+Character(3ms)+Physics(5ms)+UI(5ms)+Particles(5ms)=26ms
  • GPU 예산: 머티리얼 인스트럭션 수, 폴리곤 수, 동적 라이트 개수, Post Process
  • 서버당 수용가능한 동시 접속자수 및 서버 운영비용 체크
  • Package Size, Memory 예산 편성

성능 지표 관리

  • 그때그때 잘 기록해두기
  • 테스트 자동화와 CI 통합을 추천(A 맵 열어서 B 카메라로 30초동안 측정 후 최저 값 사용)
  • stat command 보다는 unreal insight나 unreal frontend같은 프로파일링 도구가 정확
  • 원하는 목표에 맞는 테스트를 수행!(로딩시간 목표가 있으면 캐릭터 추가 시마다 측정)

컴퓨터 구조의 이해

  • 컴퓨터 자원을 잘 활용하는것이 프로파일링의 목적!HW를 잘 이해해야 성능하락의 원인을 잘 파악할 수 있음
  • 패키지 사이즈 최적화: 2차 저장장치의 용량이 작은 경우!(특히 모바일 프로젝트)
    - 대부분 큰 용량을 차지하는 것은 Material이라고 한다.
    • 스펙에 맞지않게 고화질 -> 모아서 대량편집(max texture size 제한)
  • 비동기 로딩(로딩타임 최소화): 최소한의 리소스가 로드되면 바로 플레이 할 수 있도록!
  • 시스템 메모리 성능: 메모리 용량 초과하지 않도록 Cache 잘 사용! (CPU)
  • CPU 연산 최적화: AI, Anim Char..Tick 등에서의 연산 줄이기
  • 비디오 메모리 성능: 메모리 용량 초과하지 않도록 화면의 크기에 맞는 Virtual texture 활용, streaming 방식 사용
  • GPU 연산 최적화: CPU에서 속도가 느린 squar root 와 같은 연산이 단일연산으로 처리 가능
  • 발열문제 해결 필요: P(Power) = CV(Volt)^2F(Clock Frequency)
    • 기기들은 대부분 과열이 되면 Throttling 으로 성늘을 낮춤-> Throttling 이 걸린 경우를 기준으로 테스트
  • 여러 core 를 균형있게 사용해야함, Multi Thread
    - 언리얼의 스레드 모델
    - Game Thread: 게임로직 처리
    - Rendering Thread: 드로우콜 처리
    - RHI Thread:
    3가지 Thread가 다음 Thread의 결과를 기다리지 않고 비동기적으로 처리를 진행(기다리지 않음)
    - PC의 경우, 성능좋은 CPU Cluster와 아닌 Cluster가 있음.
    - 특정 CPU에 원하는 Thread를 위치할 수 있음
    - 다만, Cache 공유가 되지않고, Context Switch 비용이 크기 때문에 성능 하락 위험 존재
    - 또한 Race Condition에 주의 필요

프로파일링 도구의 활용

통제가 필요한 변수

  • 배포환경과 유사한 환경!
  • PIE(Play In Editor)가 아닌 독립형 게임 실행!
  • Smooth Framerate, Physics Sub Stepping, GC Verify와 AI Logging 을 Off
  • Test빌드나 Shipping 빌드로 실제 기기에서 프로파일링

큰 부분 -> 작은부분으로

  • Stat fps, Stat Unit, Stat Slow, Stat Game/GPU/SceneRendring ...

프로파일링 도구

  • 최적화 뷰모드 > 라이팅 복잡도
    - 라이트가 복잡한 부분이 다른 색으로
  • 최적화 뷰모드 > 쿼드오버드로우 뷰
    - 오버드로우가 큰 것 최적화 필요(화면 비중이 작아지도록)
    • 3이면 3번 그리고있다는 뜻
  • 창 > 통계
    - 레벨에서 사용되는 오브젝트의 용량/폴리곤 개수 확인가능
  • 독립형 게임 실행 > command 실행
    - 독립형 게임으로 실행되면, 에디터가 차지하는 연산량을 빼고 측정할 수 있음
    • stat FPS
    • stat GPU: Graphic card 부하 살펴봄
    • stat Game: Game Thread 부하 살펴봄
      - stat Character: Game Thread 중 Character 의 부하를 살펴봄
    • stat Physics: Game Thread 중 물리적 연산 부하를 살펴봄
    • stat slow: 느린부분 보여줌
      - showflag.skeletalmesh:skeletalmesh 꺼보기
    • showflag.particles: Particle 꺼보기

프로파일 치트키

  • BP로 간단하게 구현
  1. SetGamePaused
  • 일시정지 후 한 프레임씩 진행해보기!
  1. Stat
  • flip flop을 사용하면 버튼 하나로 여러 기능~
  • 한번에 하나가 활성화 되도록 하면 보다 더 정확한 성능 측정 도움
  1. ShowFlag
  • Visibility 하나씩 켰껐할 때
  1. UI Show/Hide
  • Viewport의 UI 켰껐할 때

외부 프로파일링 도구

  • Unreal frontend
    - 4.23 이하에서는 주로 사용
    - stat startfile/stat stopfile
    - 진행과정 전체를 녹화, 디버깅 가능
    • 창>개발자 툴>세션프론트엔드 실행 시 파일 로딩하는 방식으로 또는 라이브로 캡처
  • Unreal Insight
    - 기존 프로파일링 도구의 한계로..
    • UE4 쿠커를 대상으로의 프로파일링 가능
      - UE_4.25>Engine>Binaries>Win64 하위에 UnrealInsights.exe 있음~
    • 세션별로 실행 환경 확인 가능(플랫폼 종류, 앱 이름, 커맨드 라인, 빌드 설정, 빌드 타겟, 실행 시간)
    • 로딩타임, 드로우콜 등 굉장히 다양한 정보에 대한 프로파일링 가능
    • 네트워크도 있음 패킷의 양..
profile
공부를 위한 벨로그

1개의 댓글

comment-user-thumbnail
2021년 7월 9일

요약이 너무 좋네요 감사합니다.

답글 달기