답변:
이 백서 에서 소개 된 PVRTC 2BPP 인코딩 은 이미지를 8x4 텍셀 블록으로 나누고 32 개의 텍셀 블록마다 2 개의 RGB 색상 만 저장되도록 각 블록을 압축합니다.
32 개의 텍셀 중 어느 것도 자체 색상을 저장하지 않습니다. 각 텍셀은 8x4 텍셀 블록의 두 RGB 색상을 혼합하는 방법에 대한 정보 만 저장합니다.
소스 이미지에 무지개가 32 색인 8x4 텍셀 블록이있는 경우 PVRTC 2BPP 압축은 품질을 유지하는 데 매우 좋지 않습니다. PVRTC 2BPP에서는 각 8x4 텍셀 블록에 혼합 할 RGB 색상이 2 개 밖에 없기 때문입니다.
텍스처 압축은 픽셀을 압축하지 않습니다. 픽셀 블록을 압축합니다. 개별 픽셀이 참조되면 GPU는 픽셀을 나타내는 블록을 계산합니다. 그런 다음 전체 블록을 처리하여 해당 픽셀의 색상을 얻습니다.
예
RGB 텍스처에서 블록 크기가 4x4 픽셀이라고 가정합니다. 압축되지 않은 각 블록은 4x4x3 = 48
텍스처 메모리에서 바이트를 소비 합니다.
압축 알고리즘은 각 채널 (RGB)의 평균을 계산하여 블록 (3 바이트)과 함께 저장합니다. 이제 픽셀이 원래 색상에 더 가깝도록 평균을 조정하기 위해 각 픽셀에 2 비트를 부여하십시오. 다른 4x4x2x3/8 = 12
바이트입니다.
새로 개발 된이 압축기에서 사용하는 총 바이트 수는 블록 당 15 바이트이며 압축률은 31.25 %입니다.
내 신화 압축기는 7.5bpp를 사용합니다. 그것은 2 bpp pvrtc가 달성 할 수있는만큼 좋지는 않지만, 이제 2 bbp가 달성 될 수있는 방법에 대한 대략적인 아이디어가 있습니다.
업데이트 :
방금 pvrtc 에 대한 wikipedia 페이지를 보았습니다 . pvrtc가 전통적인 블록 기반 압축을 사용하지 않는 것 같습니다. 다음은 블록 기반 압축의 작동 방식과 pvrtc의 차이점을 설명하는 문서 입니다. 특히 참고 : 블록 기반 필터는 4bpp (알파 없음)를 사용하여 괜찮은 이미지를 생성 할 수있는 반면 nvrtc는 2bpp를 사용하여 수행 할 수 있습니다.
@ Toji, 종이가있는 사이트는 약간 기 질적이지만 오늘 아침에 나를 위해 일했습니다. 실패하면 ACM / SIGGRAPH에 액세스 할 수 있으면 여기에 호스팅 됩니다 . 이상하게도, 그것은 이었다 IMG / 파워 VR 개발자 웹 사이트 (무료 등록)에도하지만 난 오른쪽 부분을 찾을 수 없습니다. :-(
[업데이트] 여전히 IMG 사이트에 있습니다. [/ UPDATE]
@bmcnet : PVRTC는 텍스처를 ETC 또는 S3TC와 같은 블록으로 나누지 않습니다. FWIW, 블록 기반 텍스처를 실험했지만 충분한 데이터를 자체 포함 된 블록으로 압축하고 원하는 결과를 얻을 수있는 방법을 찾지 못했습니다. 대신 '전역'텍스처 압축 시스템에 가깝습니다. 2 개의 저해상도 이미지를 가지고있어 대상 해상도에 대해 쌍방향으로 업 스케일 한 다음이를 텍셀 단위로 혼합합니다.