EveryDay.DevUp

[Unity] Texture Compressed ( 텍스쳐 압축 ) 본문

Unity

[Unity] Texture Compressed ( 텍스쳐 압축 )

EveryDay.DevUp 2020. 6. 27. 21:59

Unity에 이미지 파일을 Import 하면 Inspector 창에서 다음과 같은 정보를 확인할 수 있다.

단말기에 따라 텍스처의 사이즈와 압축 방식을 선택할 수 있는데, 이 게시글에서는 압축 방식에 대해 설명하고자 한다.

텍스처 압축은 원본 텍스처를 그대로 단말기에서 사용했을 때의 App에서 차지하는 용량과 메모리에서 차지하는 크기 문제를 해결하기 위한 것이다. 게임에서의 텍스처 압축은 일반적으로 알고 있는 jpg, png 와 같은 형태의 압축 방법과는 차이가 있다.

jpg, png의 경우 이미지 제작 프로그램에서 원본 이미지의 용량을 줄이기 위해 사용하는 압축 방법으로, 게임에서는 jpg, png로 저장되어 있는 텍스처를 원본의 이미지로 만든 뒤 "텍스처 블록 압축 알고리즘"을 통해 다시 저장한다. 텍스처 블록 알고리즘에 의해 저장된 텍스처는 게임이 실행 될 때 GPU에서 빠르게 압축을 풀고 GPU 메모리에 올리게 된다.  

텍스처 블록 압축 알고리즘은 소프트웨어에서 압축된 텍스처를 푸는 방식 ( 프로그래머가 별도의 API를 사용하거나, 추가 개발이 필요하지 않다. ) 이 아닌, GPU 하드웨어에서 텍스처의 압축을 풀어서 사용하기 때문에 성능이 좋다. 대신 GPU 제조사에 의해 제공되는 텍스처 블록 압축 해제 방식이 다르기 떄문에 압축 방법도 여러가지가 존재한다. 대표적으로 iOS 는 PVRTC 방식을 제공했고, Android는 ETC 방식을 제공했었다. 그래서 공식처럼 iOS 는 PVRTC로 텍스처를 압축하고, Android는 ETC로 텍스처를 압축했었다. 2012년에 공동 개발을 통해 iOS, Android에서 공통적으로 사용할 수 있는 ASTC가 나왔지만, OpenGL 3.2 이상부터 지원하는 단점이 존재한다. 

지원하는 단말기의 스펙에 따라 ASTC를 사용할지 PVRTC, ETC로 구분해서 지원할지는 정할 필요가 있다. ASTC가 가변적인 압축 블록 크기를 지원하고 압축된 텍스처를 풀었을 때 원본 이미지에 가깝게 복원이 잘 되기 때문에 지금으로는 ASTC를 사용하는 것이 좋다고 본다.

Android OpenGL 3.2 이상, OpenGL 3.1 AEP(Android Extension Pack) - ( 갤럭시S5, LG G5 이후 단말기 )

iOS A8 processor 이상을 사용하는 단말기 - ( iPhone6, iPad mini4 이후 단말기 )

2020.06.01 Google 단말기 점유율(https://developer.android.com/about/dashboards/index.html )
iOS13 지원단말기에서 ASTC를 사용할 수 있기 때문에 해당 점유율로 판단 (https://developer.apple.com/support/app-store/)

▶ 텍스처 블록 압축 알고리즘

: 이미지를 특정한 크기의 블록으로 나누어, 해당 블록에 있는 칼라 값을 압축 알고리즘에 따라 원본 색에 가까울 수 있는 칼라 값을 선택해서 압축하는 방식이다. 어떤 칼라 값을 사용하고 보정 값을 넣을지는 압축 알고리즘 마다 다르다.

참고 자료 : https://ozlael.tistory.com/84

 

ASTC : 가성비 좋은 텍스처 압축 포맷

ASTC(Adaptive Scalable Texture Compression) ASTC(Adaptive Scalable Texture Compression)는 ARM에서 개발하고 2012년에 크로노스 그룹에서 OpenGL ES에 표준으로 지정되었습니다. ASTC는 PVRTC나 ETC와 마찬가..

ozlael.tistory.com