ETC1 VS ETC2

이것저것 2015. 10. 29. 11:49

ETC1 VS ETC2

 

 

 

ETC 포맷에 대해 알아보자

 

 

ETC는 Ericsson Texture Compression의 약자로 에릭슨에서 만든 텍스쳐 포맷 입니다.

참조 : http://www.jacobstrom.com/publications/StromAkenineGH05.pdf

안드로이드 표준 포맷이기도 합니다.

 

ETC1은 Open GL ES2.0에서 사용 할 수 있는 포멧입니다.

요즘 모바일 게임 개발에 널리 사용되고 있죠.

ETC1의 단점 중 하나는 사용 Bit수가 작다 보니 압축 시 채널 별 색상 침범이 눈에 띄게 일어 난다는 겁니다.

그래서 R채널은 반투명, G채널은 마스크 이런 식으로 사용하면 문제가 될 수 있습니다.

 

자 그렇다면 ETC2는?

ETC1에 비해 퀄리티도 좋고, 색상침범도 훨씬 덜 일어 납니다.

아래 내용을 보시죠.

 

 

 

ETC1, ETC2 비교

 

 

퀄리티 비교

 

참조 : https://www.khronos.org/assets/uploads/developers/library/2012-siggraph-opengl-es-bof/Ericsson-ETC2-SIGGRAPH_Aug12.pdf

ETC1과 ETC2의 퀄리티 차이를 분명히 볼 수 있죠.

ETC2의 퀄리티는 DXTC 포맷 수준의 퀄리티를 보장합니다.

 

512*512 사이즈, 반투명 채널 X

 - ETC1 : 128KB

 - ETC2 : 128KB

 

512*512 사이즈, 반투명 채널 O (알파테스팅)

 - ETC1 : 256KB (ETC1 2장 사용)

 - ETC2 : 128KB

알파테스팅 용 반투명 채널을 사용한다면 ETC2가 용량을 2배 절약

(마젠타 방식을 사용하면 용량은 같습니다.)

 

512*512 사이즈, 반투명 채널 O (알파블랜딩)

 - ETC1 : 256KB (ETC1 2장 사용)

 - ETC2 : 256KB

퀄리티는 ETC2가 훨씬 좋습니다.

 

 

알파채널 비교

순서대로 ETC2 8bit, RGBA 16bit, RGBA 32bit

ETC2의 용량은 256KB로 다른 포멧에 비해 용량 대비 퀄리티가 압도적 입니다.

(UI를 ETC2로 제작 한다면 상당한 효과를 볼 수 있을 겁니다.)

 

ETC2의 압승입니다.

 

 

 

포맷 지원

 

 

ETC는 안드로이드 표준 포맷이라 대부분의 기기에서 지원 합니다.

다만 버전 별로 지원하는 기준이 있는데요.

 

ETC1 : Open GL ES2.0

ETC2 : Open GL ES3.0, Open GL ES4.3

 - 3.0부터 의무 지원

 - 참조 : https://en.wikipedia.org/wiki/Ericsson_Texture_Compression#ETC2_and_EAC

 

 

Open GL ES3.0 안드로이드 디바이스

 - 참조 : https://en.wikipedia.org/wiki/OpenGL_ES#OpenGL_ES_3.0

 - Nexus 7 (2013)
 - Nexus 4
 - Nexus 5
 - Nexus 10
 - HTC Butterfly S
 - HTC One/One Max
 - LG G2
 - LG G Pad 8.3
 - Samsung Galaxy S4 (Snapdragon version)
 - Samsung Galaxy S5
 - Samsung Galaxy Note 3
 - Samsung Galaxy Note 10.1 (2014 Edition)
 - Sony Xperia M
 - Sony Xperia Z/ZL
 - Sony Xperia Z1
 - Sony Xperia Z Ultra
 - Sony Xperia Tablet Z

...

..

.

 

 

Open GL ES2.0에서 ETC2

 

 

2.0버전에 ETC2를 사용하면 텍스쳐는 보일까?

 - 잘~ 보입니다.(유니티에서는...)

 

유니티에서는 텍스쳐 포맷이 맞지 않는데도 어떻게 텍스쳐가 보일까?

 - 유니티는 지원하는 않는 포맷을 사용한 경우, 내부적으로 적용 가능한 텍스쳐를 생성해 보여 줍니다.

 

그럼 ETC2를 사용해도 되지 않나?

 - 내부적으로 생성된 텍스쳐가 RGBA32여서 문제

 - 메모리에 올라가는 텍스쳐 용량이 증가하게 됨

 - 증가된 용량을 받아 주는 모바일 기기라면 문제 없겠지만, 그게 아니라면 앱이 죽게 되겠죠.

 

그럼 ETC2를 사용하면 안되나요?

 - 전체 메모리가 낮은 편이라면 ETC2를 써도 괜찮습니다.

 - 메모리의 압박을 받는 상황이라면 사용하면 안되겠죠.

 

 


Open GL 버전 별 점유율

 

 

참조 : http://developer.android.com/about/dashboards/index.html

2015년 10월 2일 기준 OpenGL 점유율 입니다.

아직까진 2.0을 많이 사용하고 있네요.

그런데 3.0 비율이 43%(3.0 + 3.1)로 생각보다 높습니다.

 

2015년 2월 2일 기준이 31.1%인걸 감안하면 빠르게 교체되고 있는 중 입니다.

(8개월 만에 12%가 올라갔네요.)

 

이 추세대로 간다면 내년 여름 즘 3.0이 60%정도 되지 않을까 싶습니다.

 

 

 

종합 분석

 

 

글로벌 서비스를 생각한 모바일 게임이라면 아직까진 ETC1으로 가야할 것 같습니다.

(노트3, 겔럭시4 LTE-A 버전 이상을 생각한다면 ETC2로 가야겠지만..)

 

고 퀄리티 게임을 목표로 상위 기종을 노린다면 ETC2가 좋은 방법이 될 수 있습니다.

2017년을 목표로 개발을 하는 프로젝트는 ETC2로~

(Open GL ES3.0이면 쉐이더 텍스코드도 더 쓸 수 있고, 개발 방법에 많은 변화가 생길 것 같네요.)

 

Posted by Hwanggoon
,