본문으로 바로가기
반응형

BC(Block Compression)
이미지를
4X4 화소 단위의 블록으로 분할하여 각각의 블록마다 압축을 하는 방식. DX10부터 지원하는 규격

BC1
4bps RGB 이미지 또는 RGBA 이미지 (0, 1 알파) DXT1 대체
BC2
8bps RGBA 이미지 (16 계조 알파) DXT2 ~ 3 대안
BC3
8bps RGBA 이미지 (256계조 알파) DXT4 ~ 5 대체
BC4
4bps 1 성분 데이터 (하이트 ) ATI1N 대체
BC5
8bps 2 성분 데이터 (노멀 ) ATI2N (3Dc) 대체
BC6H
8bps HDR (하이 다이내믹 레인지) RGB 이미지
BC7
8bps RGB 이미지 또는 RGBA 이미지 (256계조 알파)

압축
모드의
"bpp"라는 단위는 "bits per pixel" 약자로, 1 픽셀의 색상을 표현하는데 필요한 비트 수를 나타냄. 4bpp이라는 것은 1 픽셀 4 트의 색상 정보를 사용하고 있다는 으로, 참고로 24 비트 RGB 색상은 24bpp, 32 비트 ARGB 색상은 32bpp.
참고 슬라이드는 여기 : https://www.slideshare.net/illustor/display-color-digital-texture-format

 

Display color와 Digital texture format의 이해

Digital Color의 개념과 Digital Texture format에 대한 설명입니다. 모바일용 포맷과 DX11에 들어서 새롭게 만들어진 포맷까지 설명합니다.

www.slideshare.net


BC7 은 DirectX 11 추가 압축 텍스처 형식으로 BC1 ~ BC3보다 높은 품질의 이미지 데이터를 저장 하기 위한 것이라고 소개하고 있다. BC7에는 RGB 값이 선형(Linear) BC7_UNORM RGB 값이 sRGB(Gamma) BC7_UNORM_SRGB 2 개의 텍스처 형식이 준비되어 있으며, 형식의 차이는 RGB 값의 공간(color space) 식별을 위한것이며, 압축 알고리즘 자체는일하다고 한다.


PC플랫폼에서 Unity에서는 이걸 어떻게 처리하는지 살펴보자. Unity 2022.1.4f1 기준

원본 텍스쳐. 512x512 TGA포맷 RGBA 32bit 1.3MB

 

Texture를 import시키면 기본은 DXT5/BC3로 저장된다.(이전엔 BC랑 DXT를 분리해서 선택가능했는데 지금은 지원하지 않는다)

BC3 Crunched Compressed일 경우 용량이 대폭 줄어든다(이전처럼 오래 걸리지 않고 텍스처 변경 속도가 무척 빨라졌다)

BC1으로 변경시 용량은 절반으로 줄어드는데 1bit알파를 지원하지 않는다.

압축 할수 있는 리스트에서는 BC1 1bit alpha가 아예 빠져있다[각주:1]

BC1, BC2 및 BC3과 같은 블록 기반 압축 형식은 압축되지 않은 이미지 형식보다 메모리를 훨씬 더 적게 차지하므로 메모리 대역폭도 상당히 적게 사용합니다. 픽셀당 32비트를 사용하는 압축되지 않은 형식과 비교하여 BC1(이전의 DXT1)의 압축률은 8:1이고 BC3(이전의 DXT5)의 압축률은 4:1입니다. BC1과 BC3 간의 차이점은 BC1은 알파 채널을 지원하지 않는 반면에 BC3은 블록 압축 알파 채널을 지원한다는 점입니다. 압축률이 높음에도 불구하고 일반적인 질감에 대한 이미지 품질은 약간만 떨어집니다. 그러나 특정 종류의 질감(예: 작은 영역에서 색상 변형이 상당한 질감)에 대한 블록 압축 결과는 허용치보다 떨어질 수 있습니다.

질감이 블록 기반 압축에 적절하고 완벽한 색 충실도가 필요 없는 경우 블록 압축 형식을 사용하여 메모리와 대역폭 사용량을 줄일 것을 고려해 보세요.
https://docs.microsoft.com/ko-kr/visualstudio/debugger/graphics/bc-texture-compression-variant?view=vs-2022 

Unreal 5 Manual에도 이제 DX1에서 1bit 알파는 지원되지 않는다고..

기본제공되는 옵션에서는 적용할수 없고 아래 링크에서 처럼 직접 구현을 해야 한다[각주:2]

https://docs.microsoft.com/ko-kr/windows/uwp/graphics-concepts/opaque-and-1-bit-alpha-textures

Crunched 압축시 39.3kb

BC7의 경우 crunched compressed를 지원하지 않는다.

Pixel format 용량
RGBA 32bit 1.3MB
BC3/DXT5 341.4kb
BC3/DXT5 Crunched 55.7kb
BC1/DXT1 170.7kb
BC1/DXT1 Crunched 39.3kb
BC7(Crunched not supported) 341.4kb

 

실제 compressed option은 runtime 메모리에서는 의미없다.
https://forum.unity.com/threads/do-compressed-textures-reduce-memory-size-as-well-or-only-hdd-size.1110500/?fbclid=IwAR2dU7utwh2lsjOB7MlhBwwYHS0ltUGtTP_j7w_Nc2z1pJqAB5lX071Ghe8

HDD 용량 부족할때 참고~(장난해?)

  1. api 리스트에서도 없는걸 보면 아예 지원 하지 않는건가 싶다 이전에 DX1 1bit alpha같은걸 사용했던걸 생각하면 아쉬운 부분 https://docs.unity.cn/kr/2022.1/ScriptReference/TextureImporterFormat.html [본문으로]
  2. 흰색의 경우 투명으로 취급 [본문으로]
반응형