[Unity] 텍스처 압축 with DTX5 format

박민주·2022년 1월 15일
0

Unity

목록 보기
7/40
post-thumbnail

프로젝트에 텍스처를 추가하다가 문득 경고 표시가 눈에 들어왔다
'Only textures with width/height being multiple of 4 can be compressed to DXT5 format'

요즘 인턴하고 있는 회사에서 그래픽스 스터디를 하는데

(아마 해당되는 압축 포맷에 따라 조금씩 다르겠지만,)
텍스처의 사이즈가 2의 배수가 아니면 압축되지 않아서
원래 사이즈 그대로 올라간다는 이야기를 들은 기억이 있었다

압축을 지원함에도 사이즈 하나 잘못 설정하면,
압축되지 않는다는 사실에 놀랐었다

마침 내 프로젝트에서 비슷한 문구가 보이니까 스터디에서 들은 내용이 생각났다

한 번 해당 텍스처의 사이즈를 확인해보니 207로 4의 배수가 아니었다

그래서 포토샵에서 사이즈를 208로 바꾸어주었고

경고문구도 사라졌다!

그리고 DTX5가 뭔지 한 번 검색해봤다

DTX5

  • DirectX10 이상에서는 BC3라고도 불림
  • 16 픽셀 이미지를 128 bit 블럭으로 변환
  • BC2(DTX2, DTX3) 와 마찬가지로 색상값은 DTX1과 동일하게 압축되지만, 알파 채널도 샘플링을 거쳐서 압축됨
  • 알파 채널 압축은 색상 압축과 비슷한 방식으로 진행되며, 두개의 8bit 극단값과 픽셀당 3bit 씩 총 48bit의 테이블을 가짐
  • 알파값 압축도 극단값 순서에 따라 경우의 수를 나눠서 좀 더 정교한 알파 색상을 구현

알파값이 필요한 텍스처의 사실상 표준으로 쓰임!
(참고: https://namu.wiki/w/S3%20Texture%20Compression)

텍스처 압축 포맷

  • 특성상 거의 모두 손실 압축
  • 디코딩이 빨라야 하고, 원하는 형태로 텍스처를 잘라 쓸 수 있도록 랜덤 액세스가 용이하여야 함
  • 사람들이 수용할 수 있는 높은 이미지 퀄리티 필요
  • 디코딩 회로는 대부분 GPU에 내장되어 텍스처 맵핑할 때 실시간으로 디코딩됨
  • 실사풍 텍스처는 압축해도 큰 퀄리티 차이가 없지만, 도트그림 같은 경우 퀄리티 하락이 더 눈에 쉽게 띔

텍스처 압축 포맷 종류

  • FXT1, S3TC, PVRTC, ETC, ASTC
  • 이 중 DTX5는 S3TC에 해당됨
  • 닌텐도 게임큐브, 마이크로소프트 엑스박스 등 콘솔에도 채택되며 PC와 콘솔 게임의 텍스처 압축 포맷의 사실상 표준
  • 알파채널이 없는 텍스처는 DXT1, 있는 텍스처는 DXT5를 사용

(참고: https://namu.wiki/w/%ED%85%8D%EC%8A%A4%EC%B2%98%20%EC%95%95%EC%B6%95%20%ED%8F%AC%EB%A7%B7)

profile
Game Programmer

0개의 댓글