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
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 기준
Texture를 import시키면 기본은 DXT5/BC3로 저장된다.(이전엔 BC랑 DXT를 분리해서 선택가능했는데 지금은 지원하지 않는다)
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 용량 부족할때 참고~(장난해?)
- api 리스트에서도 없는걸 보면 아예 지원 하지 않는건가 싶다 이전에 DX1 1bit alpha같은걸 사용했던걸 생각하면 아쉬운 부분 https://docs.unity.cn/kr/2022.1/ScriptReference/TextureImporterFormat.html [본문으로]
- 흰색의 경우 투명으로 취급 [본문으로]
'Technical Report > Graphics Tech Reports' 카테고리의 다른 글
Mobile Vendor Market Share (0) | 2022.08.15 |
---|---|
크로스 플랫폼 엔진 셰이더 컴파일 프로세스 분석 (0) | 2022.07.15 |
Genshin impact Rendering pipeline flow (0) | 2022.07.06 |
[번역]동적 변경을 가능하게 하는 Cyllista Game Engine의 오픈 월드를 위한 프로시저 배경 제작 도구 및 그리기 기능 (0) | 2022.07.04 |
Marvelous Designer(마블러스 디자이너)란? (0) | 2022.06.26 |