-
BCn Texture Compression Formats 정리Graphics/기본 2023. 4. 21. 01:45
목차
1. 개요
2. 내용
2.1. BCn 포맷의 공통 특징
2.1.1 BCn 의 블록에는 두 가지 주요 데이터
2.2. BC1
2.2.1. BC1 블록 레이아웃
2.3. BC42.3.1. 두 가지 모드
2.4. BC2, BC3 그리고 BC52.4.1. BC3 (BC1 + BC4)
2.4.2. BC5 (BC4 + BC4)
2.4.3. BC2
2.5. BC6, BC72.5.1. BC7
2.5.2. BC6
3. 레퍼런스1. 개요
레퍼런스1의 BCn 설명을 읽어보고 각 포맷의 특징을 요약하는 것을 목표로 합니다.
2. 내용
2.1. BCn 포맷의 공통 특징
BCn 형식은 모두 4x4 픽셀 블록을 사용하며, 형식에 따라 각 블록은 8 byte or 16 byte
2.1.1. BCn 의 블록에는 두 가지 주요 데이터
- RGB 생상공간에 있는 선분의 양 끝점(EndPoints)
- 각 픽셀이 선분을 따라 얼마나 멀리 떨어져 있는지를 나타내는 Index
대부분의 BCn 형식은 세 가지 매우 다른 색상이 단일 블록에 있는 경우 품질이 좋지 않은 결과를 제공함.
- 예를 들면, 빨강, 녹색, 파랑이 혼합된 블록은 RGB 공간에서 직선을 따라 배치되어 있지 않기 때문임. 노멀맵도 각 축이 독립된 데이터이기 때문에 비슷한 문제가 발생가능
그림4, 5에서 각 블록이 어떻게 4개 이하의 고유 색상으로 축소되고(BC1 은 4색 팔레트 사용) 미묘한 색(Hue) 변화가 사라졌는지 확인할 수 있음. (어두운 영여과 밝은 영역 사이 참고)
2.2. BC1
- RGB, RGBA 2가지 모드를 제공하며, RGBA 의 경우 알파채널을 1 bit 사용(투명 or 불투명만 나타낼 수 있음)
- 4x4 블록을 8 byte 에 저장하기 때문에 Data rate 는 0.5 byte/px
- 0.5 byte * (4x4) ⇒ 8 byte 이기 때문
- EndPoints
- RGB 5:6:5 형식을 사용하므로 2 byte 이며, 양 끝점이기 때문에 2개임. 총 4 byte
- 그림6 를 보면 BC1 에서 녹색 밴드를 볼 수 있는데 5:6:5 인코딩이 (57, 60, 57) 와 같은 색상을 제공하기 때문에 녹색이 눈에 띔.
- Palette
- EndPoints 를 기준으로 4개의 색상을 뽑아냄. 2개는 EndPoints, 2개는 EndPoints 를 보간하여 구한 색상
- 이 Palette 내의 4개 색상을 인덱싱 하기 위해서는 2 bit 필요 (총 4개의 색상이 있기 때문)
- 2 bit * (4x4) = 32 bit = 4 byte
- EndPoints 와 Palette 의 Index에 사용되는 총 byte 는 총 8 byte
2.2.1. BC1 블록 레이아웃
- RGB 모드인 경우
- Palette 에 들어가는 색상 정보
- color_0 (Index 00) : EndPoints 의 최소 색
- color_1 (Index 01) : EndPoints 의 최대 색
- color_2 (Index 10) : 2/3 * color_0 + 1/3 * color_1
- color_3 (Index 11) : 1/3 * color_0 + 2/3 * color_1
- Palette 에 들어가는 색상 정보
- RGBA 모드인 경우 (A 에 1 bit 를 사용해야 함)
- Palette 에 들어가는 색상 정보(color_3 을 알파채널로 사용)
- color_0 (Index 00) : EndPoints 의 최소 색
- color_1 (Index 01) : EndPoints 의 최대 색
- color_2 (Index 10) : color_2 = 1/2color_0 + 1/2color_1
- color_3 (Index 11) : 0은 투명, 1은 불투명
- Palette 에 들어가는 색상 정보(color_3 을 알파채널로 사용)
- 그림7의 a~p 는 4x4 픽셀이 Palette 에서 참조하는 Index 기록
2.3. BC4
- 단일 채널 색상 A 만 저장하며, 블록당 8 byte 사용
- EndPoints 에는 각각 1 byte, 총 2 byte 사용
- Palette 에는 8 개의 요소가 있음
- 8 개의 요소를 Index로 가리켜야 하기 때문에 Index당 3 bit 필요
- 3 bit * 4x4 = 48 bit = 6 byte
- 그래서 EndPoints 와 Palette Index 총 합 8 byte
- Palette 에 더 많은 요소들이 있기 때문에 BC1 보다 훨씬 더 나은 품질을 제공함
- Height map, gloss map 기타 모든 종류의 그레이스케일 텍스쳐를 위한 탁월한 선택!
- 그림8 의 비압축 텍스쳐와 비교해 봤을 때 눈에 띄는 차이가 거의 없음
2.3.1. 두 가지 모드
- 모드1 : 첫 번째 끝점이 두 번째 끝점보다 숫자가 큰 경우
- Palette 에 들어가 있는 8개 요소들이 EndPoints 사이에 균등한 간격으로 배치됨
- 모드2 : 두 번째 끝점보다 첫 번째 끝점보다 숫자가 큰 경우
- Palette 에 들어가 있는 처음 6 요소는 EndPoints 사이에 균등한 간격으로 배치됨
- 남은 2 요소는 각각 0과 255 (완전 검정색과 흰색) 을 나타내는데 사용함.
- 이 모드를 사용하면 완전 검정색과 흰색을 표현할 수 있기 때문에 완전 검정과 흰색 영역 사이의 날카로운 가장자리를 표현하는 경우 더 나은 품질을 얻을 수 있음
2.4. BC2, BC3 그리고 BC5
- 이 형식들은 이전에 본 BC1 과 BC4 의 조합
2.4.1. BC3 (BC1 + BC4)
- RGBA 채널을 사용하며, 블록의 크기는 16 byte
- RGB 채널에는 BC1 사용, 8 byte.
- 알파채널이 따로 있기 때문에 BC1 의 알파채널 모드 사용 안 함
- 알파 채널에는 BC4 를 사용함, 8 byte
- RGB 채널에는 BC1 사용, 8 byte.
- 이미지와 함께 Height map, gloss map 과 같은 고품질 그레이스케일 이미지를 사용할 수 있음
2.4.2. BC5 (BC4 + BC4)
- 2개의 채널을 가지며, BC4 2개로 구성됨, 블록의 크기는 16 byte
- 노멀맵에 유용 : X, Y 구성요소가 저장되고 Z 구성요소가 픽셀 쉐이더에서 만들어짐
- X, Y 가 독립적인 데이터이기 때문에, 각 X, Y채널이 고유한 EndPoints 와 Index가 있다면 품질 상승 가능
2.4.3. BC2
- RGBA 채널을 사용하며, 블록의 크기는 16 byte
- RGB 채널에는 BC1 을 사용, 8 byte
- A 채널은 4 bit 를 사용해 총 16 단계를 표현함. (EndPoints 와 Index를 저장하지 않고 명시적인 값을 사용)
- 4 bit * 4x4 = 64 bit = 8 byte
- 16 단계의 알파 값을 가질 수 있기 때문에 극단적인 밴딩이 발생함
- 거의 사용하지 않는 타입, BC3 가 더 나은 선택임. 같은 블록 크기 16 byte 에 더 나은 A 채널 품질을 가지기 때문
2.5. BC6, BC7
- D3D11 이상에서만 지원되며, 기존 형식들보다 복잡함
- Palette 크기 및 EndPoints 가 저장되는 방식과 같은 세부 사항을 변경하는 다양한 모드가 있기 때문에 복잡
- EndPoints 정밀도와 Index 정밀도 절충
- Palette 가 더 크기만 정밀도가 낮은 EndPoints 를 저장
- 더 높은 정밀도의 EndPoints 가 있지만 Palette 가 더 작음
- EndPoints 정밀도와 Index 정밀도 절충
- 블록 내에 둘 이상의 선분을 포함할 수 있음 (모드에 따라 선분 수 결정)
- Partitioning 이라는 개념을 도입하여, 블록 내의 서로 다른 픽셀에 대해서 서로 다른 선분을 사용할 수 있게 함.
- 각 RGB 채널당 한 줄의 선분을 만들 수 있어서 품질이 향상됨
- Partitioning 이라는 개념을 도입하여, 블록 내의 서로 다른 픽셀에 대해서 서로 다른 선분을 사용할 수 있게 함.
- Palette 크기 및 EndPoints 가 저장되는 방식과 같은 세부 사항을 변경하는 다양한 모드가 있기 때문에 복잡
- 둘 다 블록당 16 byte 를 사용함
2.5.1. BC7
- 8 bit RGB 또는 RGBA 데이터를 대상으로 함
2.5.2. BC6
- RGB half precision floating-point 데이터를 대상으로 함
- HDR 이미지를 기본적으로 저장할 수 있는 유일한 BCn 형식
3. 레퍼런스
1. Understanding BCn Texture Compression Formats
'Graphics > 기본' 카테고리의 다른 글
Bindless Resource - DX12, Vulkan (0) 2024.01.17 DX12 Shader Visible Descriptor Heap (0) 2023.08.05 Wave Intrinsics (0) 2022.09.27 Variable Shading Rate(VRS) (2) 2022.09.27 Halfspace Fog 공식 유도 정리 - 흡수와 산란 응용 (2) 2022.03.22