반응형
Unity 성능 최적화 완벽 가이드
Unite Seoul 2025 핸즈온 세션 완전 정리
2025년 4월 15일 | 코엑스
최적화 가이드 개요
핵심 목표
- CPU vs GPU 병목 정확한 진단
- 메모리 사용량 최적화
- 렌더링 파이프라인 효율화
- 모바일 성능 및 발열 관리
주요 기준값
CPU 메인스레드: 30% 이상 여유
iOS 메모리: 전체의 50% 이하
베이스라인: 150MB
Async Buffer: 16MB 이상
1. 프로파일링 및 병목 분석
CPU vs GPU 병목 판단
핵심 체크포인트
- Fixed Update: 물리 연산 병목
- Behavior Update: 스크립트 로직 병목
- GfxThread: 렌더링 쓰레드 병목
- RenderLoop: GPU 렌더링 병목
GPU 프로파일링
PrepareRenderTarget 분석
GPU가 텍스처를 그릴 준비하는 단계에서 후처리 효과가 렌더 텍스처를 오래 점유
최적화 방법
- • 포스트 프로세싱 비활성화
- • 이터레이션 횟수 감소
- • 렌더 텍스처 해상도 조정
프로파일러 읽는 방법
회색 영역
다른 처리를 기다리는 시간
노란색 마크
VSync 대기 시간
30% 여유시간
모바일 발열 통제 기준
2. 메모리 최적화
메모리 프로파일러
체크리스트
- 상주 메모리 크기 점검
- 파편화된 빈 힙 공간
- 로드된 세이더 에셋
- 베리언트 청크 설정
메모리 목표 설정
iOS 메모리 관리
상주 메모리를 전체 메모리의 50% 이하로 유지
초과 시 시스템에 의해 강제 종료 위험
가상 머신 설정
- 베이스라인: 150MB
- 스트립핑: 필요시 적용
- 힙 관리: 파편화 방지
패키지 제거 목록
VR/XR
미사용시 제거
Vehicle
차량 물리 불필요시
Cloth
천 시뮬레이션 불필요시
Terrain
지형 시스템 불필요시
3. 그래픽 설정 최적화
URP 세이더 설정
Always Included Shaders
불필요한 레거시 세이더를 제거하여 빌드 크기 감소
- • URP 세이더 베리언트 스트립핑 모두 활성화
- • 런타임 후처리 변경 시 주의 필요
- • 우버 세이더 메모리 효율성 활용
세이더 베리언트 관리
청크 설정 예시
청크 크기: 4MB
청크 개수: 2개
메모리 제한: 8MB 총 사용량
// 프로젝트에 맞게 조정
if (메모리_사용량 > 목표값) {
청크_크기_증가();
청크_개수_조정();
}
최적화 팁
- • 각 세이더 에셋별 메모리 크기 제한
- • 필요한 베리언트 청크만 메모리 로드
- • 스왑 방식으로 메모리 절약
물리 설정 최적화
Auto Sync Transform
사용 해제 권장
성능 개선 효과
Collision Events
객체 재사용 금지
메모리 누수 방지
NonAlloc API
Physics.RaycastNonAlloc() 사용
GC 압박 감소
4. 플레이어 설정 최적화
그래픽스 API 설정
API 우선순위
1. Vulkan
최신 성능
2. OpenGL
호환성
주의사항
- • Auto Graphics API 비활성화
- • 플랫폼별 최적 API 선택
- • 레거시 기기 호환성 고려
고급 설정
GPU 스키닝
데스크톱에서 무조건 성능 향상
레거시 기기나 GPU 바운드에서는 역효과 가능
Memoryless Depth
가능하면 활성화
✓ 데스크톱: 성능 개선
✗ 레거시/GPU 바운드: 역효과
기타 최적화
- • Accelerometer Frequency 조절
- • Prebake Collision Meshes
- • Strip Engine Code
Managed Stripping Level
Low
하나의 타입만 사용해도 전체 패키지 포함
안전성 높음
Medium ⭐
타입이 필드 내에 포함된 것만
권장 설정
High
클래스 내 미사용 필드 개별 제거
위험성 높음
5. 어드레서블 최적화
어드레서블 설정
기본 설정
- 바이너리 카탈로그 사용
- CRC 체크 필요성 판단
- GUID 포함 여부 결정
- 세이더 전용 그룹 생성
HTTP 요청 최적화
Unity HTTP 1.0 기준
동시 웹리퀘스트 수 제한 필요
권장 설정: 16~32개
Analyzer 활용
중복 에셋 문제 점검
세이더 그룹화
세이더 전용 에셋 그룹 관리
Async Upload 파이프라인
Time Slice
렌더 스레드에서 업로드에 사용할 시간 결정
설정이 작으면:
다음 프레임에서 이어서 업로드
Buffer Size
업로드 버퍼 크기 결정
권장 설정:
4MB → 16MB로 증설
6. 디버깅 도구 및 분석
전문 분석 도구
RenderDoc
GPU 렌더링 파이프라인 상세 분석
- • 가장 무거운 세이더 식별
- • 렌더 파이프라인 상태별 GPU 시간
- • 드로우 콜 최적화 포인트
Xcode Metal Debugger
iOS/macOS Metal API 최적화
- • Metal 세이더 성능 분석
- • GPU 메모리 사용량 추적
- • 프레임 캡처 및 분석
Android GPU Inspector
발열 상태 모니터링
Android에서 발열과 CPU 상태에 따른 자동 품질 조정
상
최고 품질
중
균형 품질
하
성능 우선
빠른 병목 진단
CPU 바운드
스크립트 최적화
GPU 바운드
렌더링 최적화
핵심 설정값 요약
CPU 성능
30%+
메인스레드 여유시간
iOS 메모리
50%
전체 메모리 대비
Async Buffer
16MB
업로드 버퍼 크기
HTTP 요청
16-32
동시 요청 개수
최적화 우선순위
- 1프로파일러로 병목 지점 확인
- 2메모리 사용량 및 누수 점검
- 3불필요한 패키지 및 세이더 제거
- 4플랫폼별 최적 설정 적용
- 5어드레서블로 에셋 관리 효율화
'Unity 개발' 카테고리의 다른 글
| Dotween 에셋을 사용해보자 1편 (0) | 2023.01.25 |
|---|---|
| Unity 2강 찬란하고 쓸쓸한 접근자 (0) | 2023.01.19 |
| unity 1강 (0) | 2023.01.11 |