[UE] 언리얼 프로파일링 UE Profiling
언리얼 엔진에서 프로파일링은 게임의 성능을 분석하고 최적화하는 과정이다. 이를 통해 CPU, GPU, 메모리 사용량 등을 모니터링하여 성능 병목 현상을 파악할 수 있다. 프로파일링 결과를 바탕으로 코드를 최적화하고, 애셋을 관리하여 게임 성능을 향상시키는게 중요하다.
목차
최적화
최적화를 위해 병목지점을 찾자!
CPU | AI, Physics, Blueprint, Tick, DrawCall |
GPU | Shadow, OverDraw, UI, Opaque, Lighting |
I / O | Sequence Play, Level loading, Texture loading |
네트워크 | 대역폭(BandWidth), 전송 지연 |
메모리 | GC, Out of Memory |
스로틀링 (throttling) | 발열로 인한 가속 |
DrawCall 에 영향을 주는 요소들
- 가장 영향을 많이 주는 요소들: 메시(Mesh), 머터리얼(Material)
- 그 밖에 영향을 주는 요소들: 셰이더(Shader), 트랜스폼(Transform), 조명(Lighting), 알파블랜딩(AlphaBlending)
DrawCall 줄이는 방법
- 여러개의 메시를 병합하여 하나의 액터로 만들다. 이렇게하면 여러개의 드로우콜을 1개의 드로우콜만 불린다.
- 여러개의 텍스처를 한 장의 텍스처 시트로 통합하여 드로우콜 1개로 불리게 한다.
- 컬링으로 불필요한 오브젝트 제거
- LOD, HLOD
- HLOD는 'LOD + 메시 병합'인 개념. 거리가 멀어지면 ' 로우폴(LowPoly) 메시와 머티리얼이 하나로 병합된 프록시 메시' 로 교체되어 폴리곤과 드로우콜이 모두 줄어들게 된다.
여러 최적화 기법을 활용하여 한 번에 렌더링 되는 고유한 오브젝트의 수를 줄여야 한다!!
최적화 전후를 비교하기 위해 시작 시 성능 지표 설정하기
1. 레퍼런스 하드웨어 선정하기 ex. 내 컴퓨터
2. 목표 Frame Rate 설정하기 ex. 60 Hz (16.6ms)
3. CPU 예산 편성 (ms 단위 사용)
- ex. AI(5ms) + Animation(3ms) + Character(3ms) + Physics(5ms) + UI (5ms) + Particle(5ms) = 26ms
4. GPU 예산 편성 (ms 단위 사용)
- Material Instance 수, Polygon 수, Dynamic Lighting 수
- Post Process (DoF, Anti-Aliasing, V-Sync ...)
5. 서버 당 수용가능한 동시 접속자 수 및 서버 운용비용 체크
6. Package Size, Memory 예산 편성
프로파일링 시작하기
1. 정확한 프로파일 결과를 얻기 위해 성능에 영향을 주는 변수들을 통제하자
- PIE가 아닌 독립형 게임으로 실행
- V-Sync OFF (r.vsync 0)
- Smooth Framerate, Physics Sub Stepping, GC Verifty와 AI Logging을 OFF
- Test 빌드나 Shipping 빌드로 실제 기기에서 프로파일링
2. 큰 부분부터 작은 부분으로 범위를 좁히면서 프로파일링을 진행한다.
- 쉽게 시도해 볼 수 있는 간단한 방법부터 활용
- Stat fps / Unit / Slow / Game / GPU / SceneRendering ...
언리얼 엔진의 스레드 모델
게임 스레드는 게임 로직을 처리하고, 렌더링 스레드는 그래픽 명령을 생성하며, RHI 스레드는 이 명령을 저수준으로 변환하여 GPU에 전달한다. 각 스레드는 게임 성능과 그래픽 품질을 최적화하는데 중요한 역할을 한다.
게임 스레드 (Game Thread)
- 역할: 게임 로직을 처리하는 메인 스레드.
- 작업: 게임 상태 업데이트 (캐릭터 이동, 충돌 감지, AI 연산 등), 물리 연산, 이벤트 및 플레이어 입력 처리.
- 중요성: 게임의 핵심 로직을 처리하며, 대부분의 게임 동작이 이 스레드에서 수행됨.
렌더링 스레드 (Rendering Thread)
- 역할: GPU에 전달할 렌더링 명령 생성.
- 작업: 게임 스레드에서 전달된 데이터를 바탕으로 렌더링 명령 생성, 재질(Material) 및 셰이더(Shader) 설정, 화면에 표시될 객체의 변환(Transformation) 계산.
- 중요성: 게임의 그래픽을 처리하여 화면에 출력되는 모든 시각적 요소를 관리.
RHI 스레드 (RHI Thread)
- 역할: 저수준 렌더링 명령을 GPU에 전달.
- 작업: 렌더링 스레드에서 생성된 명령을 GPU가 이해할 수 있는 형태로 변환, DirectX, OpenGL, Vulkan 등의 그래픽 API 호출, GPU와의 통신 및 렌더링 명령 최적화.
- 중요성: 렌더링 명령의 효율적 전달과 실행을 통해 그래픽 성능 최적화.
참고자료
https://www.youtube.com/watch?v=hGLIqru5wnI&t=1233s
https://www.youtube.com/watch?v=LvFQyDeVfQg&list=PLyNJAZwmsbVu_awb5sZARSqbI3b4o8a4r&index=3
'⭐ Unreal Engine > UE 최적화 + Profiling' 카테고리의 다른 글
[UE] 프로젝트 프로파일링 & 최적화 (0) | 2024.06.02 |
---|---|
[UE] 언리얼 프로파일링 & 최적화 (0) | 2024.05.30 |
댓글
이 글 공유하기
다른 글
-
[UE] 프로젝트 프로파일링 & 최적화
[UE] 프로젝트 프로파일링 & 최적화
2024.06.02 -
[UE] 언리얼 프로파일링 & 최적화
[UE] 언리얼 프로파일링 & 최적화
2024.05.30