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 ...
프로파일링 도구
- 최적화 뷰모드 > 라이팅 복잡도
- 라이트가 복잡한 부분이 다른 색으로
- 최적화 뷰모드 > 쿼드오버드로우 뷰
- 오버드로우가 큰 것 최적화 필요(화면 비중이 작아지도록)
- 창 > 통계
- 레벨에서 사용되는 오브젝트의 용량/폴리곤 개수 확인가능
- 독립형 게임 실행 > 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 꺼보기
프로파일 치트키
- SetGamePaused
- Stat
- flip flop을 사용하면 버튼 하나로 여러 기능~
- 한번에 하나가 활성화 되도록 하면 보다 더 정확한 성능 측정 도움
- ShowFlag
- UI Show/Hide
외부 프로파일링 도구
- Unreal frontend
- 4.23 이하에서는 주로 사용
- stat startfile/stat stopfile
- 진행과정 전체를 녹화, 디버깅 가능
- 창>개발자 툴>세션프론트엔드 실행 시 파일 로딩하는 방식으로 또는 라이브로 캡처
- Unreal Insight
- 기존 프로파일링 도구의 한계로..
- UE4 쿠커를 대상으로의 프로파일링 가능
- UE_4.25>Engine>Binaries>Win64 하위에 UnrealInsights.exe 있음~
- 세션별로 실행 환경 확인 가능(플랫폼 종류, 앱 이름, 커맨드 라인, 빌드 설정, 빌드 타겟, 실행 시간)
- 로딩타임, 드로우콜 등 굉장히 다양한 정보에 대한 프로파일링 가능
- 네트워크도 있음 패킷의 양..
요약이 너무 좋네요 감사합니다.