멍멍이네 블로그

유니티로 프로젝트를 진행하다가 간혹 드로우콜(Draw Call)에 관한 문제를 많이 겪는다. - 특히나 모바일 같은 경우 -

 

PC기반은 어느정도 사양에 의해 커버가 돼는데 - 그런데도 발생하기도 함.. 극한으로 최적화를 안하거나 드로우콜을 낭비할 경우 - 모바일은 사양이 좋아졌다지만, 아직 한참 부족한 상태다 - PC처럼 최적화없이 낭비할 경우 커버가 안됀다 -

 

 

서론은 이쯤 하고, 본론으로 들어가면

 

일단 드로우 콜(Draw Call)이란 무엇일까?

CPU가 그래픽 API를 호출해서 GPU에게 렌더링을 요청하는 것을 말합니다.
이 작업은 자원이 많이 들기 때문에 드로우 콜을 줄이는 것이 성능 향상에 있어 매우 중요합니다.
스프라이트들을 스프라이트 시트에 모두 모아놓으면 단 한번의 드로우 콜로 모든 스프라이트를 화면에 표시할 수 있습니다. 게임에 사용하는 스프라이트가 많을수록 성능이 획기적으로 향상 됩니다.
(출처 : http://blog.daum.net/yy.kim.0410/278)

 

드로우 콜이란 화면에서 얼마나 많은 이미지를 뿌려주는 가에 관해 드로우 콜의 수가 늘어난다

유니티에서 많은 이미지를 낭비하게 되면 그만큼 개발프로그램에서 부담이 가는 부분이기 때문에 최적화 및 드로우콜 수의 감소는 선택이 아닌 필수이다.

 

가장 좋은방법으로는 이미지의 수를 줄이는 것.

애초에 이미지 수를 줄여서 드로우콜을 줄이면 가장 좋지만, 그것이 안되는 경우가 대다수.

 

그 다음 방법으로는 이미지의 아틀라스화 이다.

이미지 아틀라스화의 장단점은 직접 찾아보면 금방 나옵니다.

간단하게 설명하자면 장점은 드로우콜의 수를 쉽게 줄일 수 있다.

여러 이미지를 압축하는 방식이기 때문이다.

 

단점 역시 간단하게 말하자면 이미지 관리가 철저해야됀다는것이다.

이미지를 압축해서 사용하는 영역을 침범하면 안되고, 겹픽셀 같은 경우 간혹 발생하는경우도 있고 - NGUI 아틀라스 사용 시 생기는 문제 -

이미지 낭비가 생기는 경우도 없잖아 있다 - 아틀라스는 대게 이미지가 사각형이며 2의 배수이다. 500x500의 4장을 합치면 2000x 2000이 아니라 2048x2048이 되기 때문에 많은 메모리가 필요 이상으로 이용된다.

 

그밖에 자세한 글은 구글링 외 다른 곳에서 참조하시고, 제 글은 간단하게나마 이렇구나 정도로 읽어주시면 됍니다 ㅎ

 

p.s.

저는 NGUI를 이용해서 아틀라스화 할 때 생기는 문제들이였고, 이미지패커? 라는 기능이 프로버전에 지원하는 것 같더군요.

틀리거나 지적사항 및 수정사항에 대해서 댓글 부탁드립니다.