1. CPU와 GPU의 기본 개념 차이
| 항목 | CPU (Central Processing Unit) | GPU (Graphics Processing Unit) |
| 별명 | 컴퓨터의 두뇌 | 병렬 연산 특화 처리기 |
| 주 역할 | 로직 처리, 시스템 명령 제어 | 그래픽 렌더링, 병렬 연산 |
| 처리 방식 | 직렬(순차) 처리 | 병렬 처리 |
| 코어 구성 | 소수의 고성능 코어 | 수천 개의 단순한 연산 유닛 |
| 특징 | 다양한 작업에 유연 | 동일 작업 반복에 최적화 |
2. Unity에서의 사용
| Unity 내부 구성 요소 | 주요 처리 | 장치설명 |
| 게임 오브젝트 로직 (MonoBehaviour, FSM 등) | CPU | Update(), AI 계산, 충돌 판정 등 |
| 물리 연산 (Rigidbody, Collider 등) | CPU | Phys 기반 물리 처리 |
| 스크립트 연산, 조건 분기 | CPU | 조건문, 수치 계산 등 |
| 메쉬 렌더링, 쉐이더 실행 | GPU | 정점, 픽셀 셰이더 처리 |
| 포스트 프로세싱 효과 | GPU | 블룸, 블러, 톤 매핑 등 |
| 텍스처, 그림자, 조명 처리 | GPU | 라이트맵, 그림자 맵, 라이트 계산 등 |
| GPU Instancing, Compute Shader | GPU | 대량 오브젝트 처리 또는 병렬 연산 |
3. 문제 발생시 체크해야 될 장치
| 상황 | 원인 | 관련 장치 |
| FPS는 높은데 조작 반응이 느림 | CPU 병목 | CPU |
| 카메라 회전 시 프레임 드랍 | 쉐이더, 그림자 비용 | GPU |
| 오브젝트가 많을 때 프레임 드랍 | 연산 과다 or 드로우콜 증가 | CPU & GPU 모두 |
| 대량의 연산이 느릴 때 | for문 or 리스트 탐색 과다 | CPU |
| GPU 사용률은 낮은데 끊김 발생 | CPU 스레드에서 대기 | CPU |
4.Unity에서 성능 최적화 시 고려 사항
- CPU 병목:
- Update() 최적화, FixedUpdate() 최소화
- 불필요한 Find(), GetComponent() 제거
- Object Pooling 활용
- GPU 병목:
- 텍스처 크기, 라이트 수 줄이기
- 쉐이더 최적화 (Unlit 사용, 복잡한 셰이더 최소화)
- 드로우콜 줄이기 (Batching, Instancing 등)
5. 개인적인 소감
Unity는 CPU와 GPU가 모두 중요한 역할을 하며, 각자의 역할을 이해하면 최적화 포인트를 쉽게 파악할 수 있다.
단순히 "프레임이 낮다"가 아니라 "어느 쪽이 병목인지"를 구분하는 관점을 갖는 것이 중요하다고 느꼈다.
앞으로 개발 시, 로직과 렌더링을 분리해서 생각하는 습관을 들여야겠다.
'Unity > 기능' 카테고리의 다른 글
| [Unity] 매개변수 params (1) | 2025.08.08 |
|---|---|
| [Unity] Find 함수 (2) | 2025.08.07 |
| [Unity] New Input System 사용하기3 (0) | 2025.07.18 |
| [Unity] 람다의 캡처와 클로저 개념 (2) | 2025.07.17 |
| [Unity] New Input System 사용하기2 (0) | 2025.07.16 |