비트맵 블록 압축
CanvasBitmap
는 압축된 비트맵 차단을 지원합니다. DDS 파일에서 로드하거나 CreateFromBytes(ICanvasResourceCreator,Byte[], Int32, Int32, DirectXPixelFormat)
을 사용하여 만들 수 있습니다.
블록 압축 비트맵은 메모리를 적게 사용하고 더 효율적으로 그릴 수 있기 때문에 비트맵이 많은 애플리케이션(예: 게임)에 적합합니다. 블록 압축 비트맵은 압축되지 않은 비트맵 메모리의 최대 1/8의 메모리를 사용합니다. 따라서 GPU는 비트맵을 그릴 때 훨씬 적은 메모리에 액세스해야 하므로 그리는 속도가 빨라집니다.
블록 압축 정보
블록 압축은 PNG 또는 JPG 파일에서 사용하는 압축과 다릅니다. 압축된 파일 형식은 압축된 상태로 저장되지만 Win2D에 의해 로드되면 픽셀당 32비트(4바이트)를 사용하는 등 다음과 같은 형식의 비트맵(예:DirectXPixelFormat::B8G8R8A8UIntNormalized
)으로 압축 해제됩니다. 따라서 256x256 비트맵은 256 * 256 * 4 = 262,144 바이트를 차지합니다.
블록 압축 비트맵은 4x4 픽셀 블록을 저장하기 위해 8 또는 16바이트(형식에 따라 나중에 자세히)를 사용합니다. 따라서 이 경우 256x256 비트맵은 256 * 256 / (4 * 4) * 8 = 32,768 바이트 또는 256 * 256 / (4 * 4) * 16 = 65,536 바이트를 차지합니다. 최대 8배 더 작습니다! 블록 압축은 GPU 하드웨어에서 직접 지원되므로 비트맵을 완전히 압축 해제하지 않고도 메모리에 압축된 상태로 유지하고 압축된 형식에서 바로 그릴 수 있습니다.
Win2D는 세 개의 블록 압축 형식을 지원합니다. 아래 표에서는 비교를 위해 압축되지 않은 형식과 함께 이러한 형식에 대해 설명합니다.
DirectXPixelFormat |
4x4 비트맵의 크기 | 256x256 비트맵의 크기 | 알파 |
---|---|---|---|
BC1Unorm |
8바이트 | 32,768 바이트 | 1비트 |
BC2Unorm |
16바이트 | 65,536 바이트 | 4 비트 |
BC3Unorm |
16바이트 | 65,536 바이트 | ~8비트(압축) |
B8G8R8A8UintNormalized |
64 바이트 | 262,144 바이트 | 8 비트 |
BC1Unorm
, BC2Unorm
및 BC3Unorm
는 알파를 지원하는 방법에 따라 크게 다릅니다. BC1은 1비트 알파만 지원합니다. BC2는 고유한 4비트 알파 값을 갖는 블록의 각 픽셀을 지원합니다. BC3은 알파 값을 압축합니다.
블록 압축 작동 방식에 대한 자세한 내용은 Direct2D 블록 압축 설명서 및 Direct3D 블록 압축 설명서를 참조하세요.
제한 사항
- 모든 블록 압축 텍스처는 너비와 높이가 4의 배수여야 합니다. 블록 압축은 4x4 픽셀 블록에서 작동하기 때문입니다.
- 블록 압축 텍스처의 하위 사각형에 대한 모든 작업(
GetPixelBytes()
, ,SetPixelBytes(Byte[])
CopyPixelsFromBitmap(CanvasBitmap, Int32, Int32)
사용)은 하위 사각형이 4픽셀 정렬되어야 합니다. - Win2D에는 블록 압축 형식을 사용할 때 미리 곱한 알파가 필요합니다.
DDS 파일 작성
블록 압축 이미지는 DDS 파일에 저장할 수 있습니다. 포토샵이나 Paint.NET과 같은 애플리케이션의 플러그인을 통해 생성할 수 있지만, 결과 파일이 알파를 미리 곱한 상태로 저장되도록 주의해야 합니다. Win2D는 BC1Unorm
, BC2Unorm
또는 BC3Unorm
이미지가 포함된 모든 DDS 파일을 로드하고 미리 곱한 알파로 작성되었다고 가정합니다.
C++ 프로젝트를 작성하는 경우 MSDN에 설명된 대로 이미지 콘텐츠 파이프라인을 사용하여 이미지를 변환할 수 있습니다.
또는 https://github.com/Microsoft/DirectXTex에서 texconv.exe
를 사용할 수 있습니다. texconv.exe
는 DirectXTex_Desktop_2015.sln 솔루션을 사용하여 빌드할 수 있습니다. 다음 명령은 "smoke.png"을 알파를 미리 곱한 BC3Unorm
로 변환합니다.
texconv -pmalpha -m 1 -f BC3_UNORM smoke.png
Windows developer