유니티 그래픽스 최적화 스타트업 책을 읽고 내용을 정리해보고 지금까지 겪은 필자의 생각을 정리해보고자 한다.
01. 최적화 개요
1) 최적화의 이해
최적화의 필요성
- 개발에서의 최적화는 개발자가 제작한 소프트웨어를 사용자가 불편함이 없게 사용하기 위해 필요한 과정이다
최적화의 시기
- 프로토타이핑 기간은 성능을 상관하지 않고 최대한 빨리 만드는 것이 중요하다
- 그렇기 때문에 프로토타이핑 이후에는 최적화를 고려하며 개발을 진행해야한다
필자는 지난 프로젝트까지 최적화에 대한 문제가 없어서 최적화를 고려하지 않고 작업해왔는데 최적화로 한 번 고생한 이후로 매번 중간중간 고려하면서 작업하고 있다
2) 렌더링의 이해
렌더링이란
- 컴퓨터가 그래픽 데이터로 그림을 그려내는 행위
비실시간 렌더링과 실시간 렌더링
- 영화나 애니메이션의 렌더링은 미리 그려내는 비실시간 렌더링으로 반응속도 같은것 보다 퀄리티가 중요하기 때문에 최적화에 대한 필요성이 덜 하다
- 게임의 렌더링은 입력에 따라 빠른 반응속도로 화면이 바껴야 하기 때문에 최적화가 필요하다
- 모바일 디바이스의 경우 기기의 성능에 한계가 있기 때문에 더욱 최적화에 신경써야한다
3) 그래픽스 API
엔진과 그래픽스 API
- DirectX, OpenGL등이 그래픽스 API인데 그래픽스 API는 여러 회사에서 만든 GPU OS 에 맞춰서 렌더링이 가능하도록 도와준다
- 유니티는 이러한 그래픽스 API들을 기반으로 각 플랫폼에 맞게 알아서 처리해준다
OpenGL & OpenGL ES
- OpenGL은 컴퓨터 그래픽스 표준 API 규격이다, 크로스 플랫폼 라이브러리이다
- OpenGL은 GPU와 CPU에서 사용하는 메모리 영역이 구분되어있다
- OpenGL ES는 모바일 환경에서 구동하기 위해 작고 가벼운 별도의 표준이다
- OpenGL ES은 iOS에서 사용 가능하지만 크로스 플랫폼을 지원하기 위해 불필요한 오버헤드가 존재한다
- Metal은 iOS전용 그래픽스로 범용성은 보장하지 않지만 특정 하드웨어(iOS)에서의 성능을 보장한다
- 멀티 쓰레딩에 대응할 수 있는 구조로 설계되어 멀티스레드를 활용해서 드로우콜에 대한 오버헤드를 줄일 수 있다
- 하나의 메모리를 시스템이 논리적으로 GPU영역과 CPU 영역으로 나누어 사용해서 메모리를 효율적으로 사용할 수 있다
Vulkan
- OpenGL의 차세대 버전으로 애플의 Metal과 비슷한 컨셉으로 렌더링 파이프라인을 멀티쓰레드 화 시킬 수 있도록 설계되었다
- 안드로이드 및 타이젠 등 다양한 기기에서 지원된다
유니티에서 그래픽스 API 설정
- Player 설정에서 other Settings에 있는 Graphics APIs 에서 설정할 수 있다
- 필자는 항상 Auto Graphics 설정만 사용하고 오류가 나는 특수한 경우에만 구글링 후 적절한 API를 설정해 왔다 이번 장을 통해 API별 특징을 알게 되었다
2장에서 계속...