[Unite Seoul 2025] 부드러운 모바일 게임: 최고의 성능을 위한 그래픽 최적화
- 프레임 타임(밀리초) 기반 사고: FPS 대신 밀리초 단위로 성능 목표를 설정하여 일관된 경험을 제공하고 지터를 방지합니다. ⏱️
- 성능 버퍼 확보: 목표 프레임 타임의 65%만 사용하여 배터리 절약 및 발열 관리를 위한 여유를 둡니다. 🔋
- 다양한 디바이스 프로파일링: 저사양부터 고사양까지 여러 기기에서 테스트하여 광범위한 호환성을 확보합니다. 📱
- 일관된 환경에서 프로파일링: 재현 가능한 환경에서 반복 테스트하여 최적화 효과를 정확히 측정합니다. 🔄
- 조기/빈번한 프로파일링: 개발 초기부터 타겟 디바이스에서 자주 프로파일링하여 문제를 조기에 발견합니다. 🚀
- 통합 메모리 활용: 모바일 기기의 CPU와 GPU가 RAM을 공유하는 통합 메모리 아키텍처를 이해하고 데이터 복사를 최소화합니다. 🧠
- 타일 기반 렌더링 최적화: 타일 기반 GPU의 특성을 활용하여 스크린을 타일 단위로 렌더링하고 효율성을 높입니다. 🧱
- 데이터 복사 최소화: CPU-GPU 간의 데이터 복사는 고비용이므로, 텍스처 크기 및 쉐이더 효율성을 통해 줄입니다. 📉
- 다양한 툴 활용: Project Auditor(정적 분석), Unity Profiler(런타임), Frame Debugger(드로우 콜)를 사용하여 문제를 진단합니다. 🛠️
- GPU 전용 프로파일러: Android는 RenderDoc, iOS는 Metal GPU Debugger를 사용하여 심층 분석합니다. 📊
- 복잡한 지오메트리 피하기: 너무 많은 삼각형, 길고 얇은 삼각형, LOD 미사용, 컬링 레이어 미적용, Read/Write Enabled 활성화는 성능 저하의 원인입니다. 🔺
- 부적절한 텍스처 관리 방지: 최대 크기 미설정, 부적절한 압축(NPoT 사용), Read/Write Enabled 활성화, 아틀라스 오용은 메모리 및 성능에 악영향을 줍니다. 🖼️
- 비효율적인 라이팅 지양: 불필요한 다이나믹 라이트, 라이트맵/프로브 미사용, 큰 조명 크기, 라이트 레이어 미적용, 과도한 그림자 사용은 렌더링 비용을 증가시킵니다. 💡
- 카메라 오용 주의: 과도한 카메라 수, 최적화되지 않은 포스트 프로세싱, 넓은 클리핑 범위는 CPU 오버헤드 및 렌더링 문제를 유발합니다. 🎥
- 쉐이더 비효율성 개선: 과도한 텍스처 샘플링, 많은 쉐이더 베리언트, 불필요한 키워드, SRP Batcher 비호환성, 불필요한 풀 정밀도, 동적 브랜칭, 복잡한 쉐이더 그래프는 성능을 저하시킵니다. 🧩
- 기타 실수 방지: Static Batching 사용(구식, 대역폭 낭비), 오버드로우/오버쉐이딩은 피해야 할 일반적인 실수입니다. 🚫
- SRP Batcher 활용: GPU에 데이터를 보관하고 덩어리로 전송하여 드로우 콜을 줄이고 CPU 오버헤드를 감소시킵니다. 📦
- Unity 6 GPU Resident Draw: 컴퓨트 쉐이더를 활용한 새로운 자동화된 배칭 방식으로 성능을 향상시킵니다. 🚀
- 쉐이더 관리 및 프리워밍: 쉐이더 컴파일 로깅, PSO 캐싱/트레이싱을 통해 쉐이더 사용을 이해하고 미리 로딩하여 런타임 부하를 줄입니다. 🔥
- 스카이박스 대신 단색 배경: 스카이박스 렌더링은 매우 비싸므로, 프로토타입 단계에서는 단색 배경으로 대체하여 프레임 타임을 크게 개선합니다. 🎨
데브허브 | DEVHUB | [Unite Seoul 2025] 부드러운 모바일 게임: 최고의 성능을 위한 그래픽 최적화