'프로그래밍/최적화관련'에 해당되는 글 1건

  1. 2018.01.24 게임 내 리소스(이미지) 최적화


이번 장은 게임만들면서 최적화 관련에 겪었던 점을 적겠습니다.

(서론이 길거 같습니다... 제 공부 관련 얘기도 적을거 같습니다)


제가 군대 전역직후 6개월 정도 공부한 후에 Cocos2d-x 엔진을 접하고 나서 모바일 게임을 만들었습니다. 당시에는 C언어도 제대로 알지 못하고 구현이 먼저였던 시점이라 많은 시행착오를 겪으면서 개발했습니다. 1280*720 이미지를 아무생각 없이 그대로 20장을 넣고 라이팅을 넣어보면서 게임이 느려지기 시작하며 최적화에 대해서 알아보게 되었습니다.



★POT ( Power of Texture or Power of Two) 

// 어느 분은 텍스처의 제곱이라고 하고 어느 분은 2의 제곱이라 하여 정확히 몰라 2개를 작성합니다ㅠ

컴퓨터 내 리소스는 2^n * 2^n 으로 잡히게 됩니다.

예를 들어 900*900 이면 1024*1024로 크게 잡히게 됩니다.

1025 1025 면 2048 2048 로 잡히게 되어 메모리가 크게 낭비가 되는 상황이 발생할 수 있습니다.


☆아틀라스 이미지

아틀라스 이미지는 한장의 이미지에 여러개의 이미지를 묶어놓은 것입니다.

이미지출처:http://dlgnlfus.tistory.com/80

아틀라스 이미지에 대한 이미지 검색결과


게임 내 UI 들은 POT 사이즈에 맞게 제작을 할수가 없습니다.

그래서 이미지들을 한대 묶어 하나의 이미지로 뭉쳐서 최대한 메모리 손실을 피하기 위해 아틀라스 이미지를 사용합니다.



★이미지 포맷

리소스가 메모리에 올라가는 과정은 

1. 디스크에서 이미지 가져오기

2.이미지 압축 포맷 압축 해제

3.메모리 블록에 해당 이미지 할당

으로 이루어져 있습니다.


주로 사용하는 이미지 포맷들은 jpg,png,tga 등을 많이 사용하고 있습니다.

하지만 게임에서는 이 이미지 포맷들을 사용하기엔 그렇게 적합하지 않습니다.


Window는 DirectX를 사용하기에

DDS 파일플랫폼을 사용하고 있습니다

DDS는 DirectX 의 텍스쳐 포맷과 일대일로 대응하는 파일 포맷으로

메모리를 대역폭을 아끼며 비디오카드가 하드웨어 가속을 지원하므로 성능 저하도 없으며

또한 DXT같은 경우엔 손실압축치고는 퀄리티가 나쁘지 않습니다.


안드로이드는 

GPU에 의해 직접 지원되는 텍스처 압축을 사용합니다.

아이폰(PowerVR) : PVRCT

안드로이드(Tegra) : DXT

안드로이드(Adreno) : ATC

안드로이드(공통) : ETC1


Posted by Dongkey
,