Unity는 Textures(예: JPG, PNG, PSD 및 TGA)를 임포트하기 위한 소스 파일로 많은 일반적인 이미지 포맷을 지원하지만, 그래픽 카드 또는 모바일 디바이스와 같은 3D 그래픽스 하드웨어에서 실시간으로 렌더링하는 동안에는 이러한 포맷이 사용되지 않습니다. 3D 그래픽스 하드웨어에서는 빠른 텍스처 샘플링을 위해 최적화된 지정된 포맷으로 텍스처를 압축해야 합니다. 각자 사용이 가능한 다양한 플랫폼과 디바이스에는 고유의 독점적인 포맷이 있습니다.
기본적으로, Unity 에디터는 텍스처를 선택한 빌드 타겟에 맞는 가장 적절한 포맷으로 자동 변환합니다. 변환된 텍스처만 빌드에 포함되고 소스 에셋 파일은 프로젝트의 Assets 폴더에 원래의 포맷으로 남아 있습니다. 그러나, 대부분의 플랫폼에서는 다양한 텍스처 압축 포맷이 지원되므로 선택이 가능합니다. Unity에는 각 플랫폼에 대해 특정 디폴트 포맷이 설정되어 있지만, 어떤 상황에서는 디폴트 설정 대신 일부 텍스처에 다른 압축 포맷을 선택하고자 할 수 있습니다. 예를 들어, 텍스처를 하나의 채널을 사용하여 마스크로 사용하는 경우, 품질을 유지하면서 공간을 절약하기 위해 BC4 포맷을 사용하고자 할 수 있습니다.
각 플랫폼에 커스텀 설정을 적용하려면, 텍스처 임포터를 사용하여 디폴트 옵션을 설정한 다음 Platform-specific overrides 패널을 사용하여 특정 플랫폼에 대한 디폴트 설정을 오버라이드합니다.
다음 표는 각 플랫폼에 사용된 디폴트 포맷을 보여줍니다.
플랫폼 | 컬러 모델 | 없음 | 보통 품질(디폴트) | 높은 품질 | 낮은 품질(더 높은 성능) |
---|---|---|---|---|---|
Windows, Linux, macOS, PS4, XBox One | RGB | RGB 24비트 | RGB Compressed DXT1 | RGB(A) Compressed BC7 | RGB Compressed DXT1 |
RGBA | RGBA 32비트 | RGBA Compressed DXT5 | RGB(A) Compressed BC7 | RGBA Compressed DXT5 | |
HDR | RGBA Half | RGB Compressed BC6H | RGB Compressed BC6H | RGB Compressed BC6H | |
WebGL | RGB | RGB 24비트 | RGB Compressed DXT1 | RGB Compressed DXT1 | RGB Compressed DXT1 |
RGBA | RGBA 32비트 | RGBA Compressed DXT5 | RGBA Compressed DXT5 | RGBA Compressed DXT5 | |
Android(디폴트 subTarget) | RGB | RGB 24비트 | RGB Compressed ETC2 | RGB Compressed ETC2 | RGB Compressed ETC2 |
RGBA | RGBA 32비트 | RGBA Compressed ETC2 | RGBA Compressed ETC2 | RGBA Compressed ETC2 | |
iOS | RGB | RGB 24비트 | RGB Compressed PVRTC 4비트 | RGB Compressed PVRTC 4비트 | RGB Compressed PVRTC 2비트 |
RGBA | RGBA 32비트 | RGBA Compressed PVRTC 4비트 | RGBA Compressed PVRTC 4비트 | RGBA Compressed PVRTC 2비트 | |
tvOS | RGB | RGB 24비트 | RGB Compressed ASTC 6x6 블록 | RGB Compressed ASTC 4x4 블록 | RGB Compressed ASTC 8x8 블록 |
RGBA | RGBA 32비트 | RGBA Compressed ASTC 6x6 블록 | RGBA Compressed ASTC 4x4 블록 | RGBA Compressed ASTC 8x8 블록 | |
Tizen, Samsung TV | RGB | RGB 24비트 | RGB Compressed ETC | RGB Compressed ETC | RGB Compressed ETC |
RGBA | RGBA 32비트 | RGBA 16비트 | RGBA 16비트 | RGBA 16비트 |
다음 표는 각 플랫폼에서 사용할 수 있는 텍스처 압축 포맷 옵션과 압축 파일 크기(256px-정사각형 이미지 기준)를 보여줍니다. 텍스처 압축 포맷을 선택하면 파일 크기와 품질 사이의 균형을 유지할 수 있습니다. 품질이 높을수록, 파일 크기가 커집니다. 아래 설명에서 256x256 픽셀 인게임 텍스처의 최종 파일 크기를 참조하십시오.
타겟 플랫폼에서 지원되지 않는 텍스처 압축 포맷을 사용할 때, 텍스처는 RGBA 32포맷으로 압축 해제되며 압축된 텍스처와 함께 메모리에 저장됩니다. 이 때, 텍스처를 압축 해제하면서 시간이 손실되고 메모리도 손실되는데, 텍스처를 두 번 저장하기 때문입니다. 더하여, 모든 플랫폼은 다른 하드웨어를 가지고 있으며, 특정 압축 포맷과 가장 효율적으로 작동하도록 최적화되어 있습니다. 따라서 호환되지 않는 포맷을 선택할 경우 게임 성능에 영향을 줄 수 있습니다. 아래의 표는 각 압축 포맷에서 지원되는 플랫폼을 보여줍니다.
아래는 표에 대한 참고 사항입니다.
RGB 는 다양한 컬러를 재현하기 위해 여러 가지 방법으로 빨간색, 초록색 및 파란색이 함께 추가된 컬러 모델입니다.
RGBA 는 혼합 및 불투명도 변경을 지원하는 알파 채널이 있는 RGB 의 버전입니다.
Crunch Compression 은 DXT 텍스처 압축의 상단에 있는 손실 압축 포맷(데이터의 일부가 압축 과정 중에 손실된다는 의미)입니다. 텍스처는 CPU에서 DXT로 압축 해제되며, 그런 다음 런타임 시 GPU에 업로드됩니다. 크런치 압축은 텍스처가 디스크 그리고 다운로드 시에 가능한 한 가장 적은 공간을 사용하도록 합니다. 크런치 텍스처는 압축하는 데 오랜 시간이 걸리지만, 런타임 시 압축 해제는 매우 빠릅니다.
텍스처 압축 포맷 | 설명 |
크기 256x256 픽셀 텍스처용 |
플랫폼 지원 |
---|---|---|---|
RGB Compressed DXT1 | 압축된 unsigned normalised integer RGB 텍스처입니다. | 32KB(픽셀당 4비트) | Windows, Linux, macOS, PS4, XBox One, Android (Nvidia Tegra and Intel Bay Trail), WebGL Note: With linear rendering on web browser that doesn’t support sRGB DXT, textures are uncompressed at runtime to RGBA32 |
RGBA Compressed DXT5 | 압축된 unsigned normalised integer RGBA 텍스처입니다(픽셀당 8비트). | 64KB(픽셀당 8비트) | Windows, Linux, macOS, PS4, XBox One, Android (Nvidia Tegra and Intel Bay Trail), WebGL Note: With linear rendering on web browser that doesn’t support sRGB DXT, textures are uncompressed at runtime to RGBA32 |
RGB Crunched DXT1 | RGB Compressed DXT1과 비슷하지만, 크런치 압축을 사용해 압축됩니다. 크런치 압축에 대한 내용은 위의 참고 항목을 참조하십시오. | 텍스처에 저장된 콘텐츠의 복잡도에 따라 다름 | Windows, Linux, macOS, PS4, XBox One, Android (Nvidia Tegra and Intel Bay Trail), WebGL Note: With linear rendering on web browser that doesn’t support sRGB DXT, textures are uncompressed at runtime to RGBA32 |
RGBA Crunched DXT5 | RGBA Crunched DXT5와 비슷하지만, 크런치 압축을 사용해 압축됩니다. 크런치 압축에 대한 내용은 위의 참고 항목을 참조하십시오. | 텍스처에 저장된 콘텐츠의 복잡도에 따라 다름 | Windows, Linux, macOS, PS4, XBox One, Android (Nvidia Tegra and Intel Bay Trail), WebGL Note: With linear rendering on web browser that doesn’t support sRGB DXT, textures are uncompressed at runtime to RGBA32 |
RGB Compressed BC6H | 압축된 unsigned float/HDR(High Dynamic Range) RGB 텍스처입니다. | 64KB(픽셀당 8비트) | Windows Direct3D 11: OpenGL 4, Linux. Note: BC6H Textures are uncompressed at runtime to RGBA half on the following platform configurations: - Windows with Direct3D 9 - macOS with OpenGL - Platforms with Direct3D 10 Shader Model 4 or OpenGL 3 GPUs |
RGB(A) Compressed BC7 | 고품질의 압축된 unsigned normalised integer RGB 또는 RGBA 텍스처입니다. | 64KB(픽셀당 8비트) | Windows Direct3D 11: OpenGL 4, Linux Note: BC7 Textures are uncompressed at runtime to RGBA 32bits on the following platform configurations: - Windows with Direct3D 9 - macOS with OpenGL - Platforms with Direct3D 10 Shader Model 4 Platforms with OpenGL 3 GPUs. |
RGB Compressed ETC | 압축된 RGB 텍스처입니다. 참고: ETC1은 모든 OpenGL ES 2.0 GPU에서 지원되며 알파는 지원되지 않습니다. |
32KB(픽셀당 4비트) | Android, Tizen, Samsung TV |
RGB Compressed ETC2 | 압축된 RGB 텍스처입니다. Android 프로젝트용 디폴트 텍스처 압축 포맷입니다. 참고: ETC2는 OpenGL ES 3.0의 일부이며 알파를 지원하지 않습니다. ETC2를 지원하지 않는 Android 플랫폼에서는 텍스처가 런타임 시 RGB 24비트로 압축되지 않습니다. |
32KB(픽셀당 4비트) | Android (OpenGL ES 3.0) Note: On Android mobiles that don’t support ETC2, the Texture is uncompressed at runtime to RGBA32 |
RGBA Compressed ETC2 | 압축된 RGBA 텍스처입니다. 픽셀당 8비트(256x256 텍스처인 경우 64KB)입니다. Android 프로젝트용 디폴트 텍스처 압축 포맷입니다. 참고: ETC2는 OpenGL ES 3.0의 일부이며 알파를 지원하지 않습니다. ETC2를 지원하지 않는 Android 플랫폼에서는 텍스처가 런타임 시 RGBA 32비트로 압축되지 않습니다. |
64KB(픽셀당 8비트) | Android (OpenGL ES 3.0) Note: On Android mobiles that don’t support ETC2, the Texture is uncompressed at runtime to RGBA32 |
RGB Compressed ASTC | 가변 블록 크기로 압축된 RGB 텍스처 | 12x12: 픽셀당 0.89비트(256x256 텍스처의 경우 7.56KB) 10x10: 픽셀당 1.28비트(256x256 텍스처의 경우 10.56KB) 8x8: 픽셀당 2비트(256x256 텍스처의 경우 16KB), 6x6: 픽셀당 3.56비트(256x256 텍스처의 경우 28.89KB) 5x5: 픽셀당 5.12비트(256x256 텍스처의 경우 42.25KB) 4x4: 픽셀당 8비트(256x256 텍스처의 경우 64KB) |
tvOS(전체), iOS(A8), Android(PowerVR 6XT, Mali T600 시리즈, Adreno 400 시리즈, Tegra K1) |
RGBA Compressed ASTC | 가변 블록 크기로 압축된 RGBA 텍스처 | 12x12: 픽셀당 0.89비트(256x256 텍스처의 경우 7,744 바이트) 10x10: 픽셀당 1.28비트(256x256 텍스처의 경우 10816 바이트) 8x8: 픽셀당 2비트(256x256 텍스처의 경우 16KB), 6x6: 픽셀당 3.56비트(256x256 텍스처의 경우 29,584 바이트) 5x5: 픽셀당 5.12비트(256x256 텍스처의 경우 43,264 바이트) 4x4: 픽셀당 8비트(256x256 텍스처의 경우 64KB) |
tvOS(전체), iOS(A8), Android(PowerVR 6XT, Mali T600 시리즈, Adreno 400 시리즈, Tegra K1) |
RGB Compressed PVRTC 2비트 | 고압축 RGB 텍스처입니다. 품질이 낮지만 크기는 작아지므로 성능이 향상됩니다. | 16KB(픽셀당 2비트) | Android(PowerVR), iOS, tvOS |
RGBA Compressed PVRTC 2비트 | 고압축 RGBA 텍스처입니다. 품질이 낮지만 크기는 작아지므로 성능이 향상됩니다. | 16KB(픽셀당 2비트) | Android(PowerVR), iOS, tvOS |
RGB Compressed PVRTC 4비트 | 압축된 RGB 텍스처입니다. 특히 컬러 데이터에 고품질 텍스처이지만, 압축하는 데 시간이 오래 걸립니다. | 32KB(픽셀당 4비트) | Android(PowerVR), iOS, tvOS |
RGBA Compressed PVRTC 4비트 | 압축된 RGB 텍스처입니다. 특히 컬러 데이터에 고품질 텍스처이지만, 압축하는 데 시간이 오래 걸립니다. | 32KB(픽셀당 4비트) | Android(PowerVR), iOS, tvOS |
RGB Compressed ATC | 압축된 RGB 텍스처입니다. | 32KB(픽셀당 4비트) | Android(Qualcomm - Adreno), iOS, tvOS |
RGBA Compressed ATC | 압축된 RGBA 텍스처입니다. | 64KB(픽셀당 8비트) | Android(Qualcomm - Adreno), iOS, tvOS |
RGB 16비트 | 알파를 포함하지 않은 65,000 컬러입니다. 압축된 포맷보다 많은 메모리를 사용하지만, 그레디언트가 적용되지 않은 선명한 텍스처나 UI에 더욱 적합할 수 있습니다. | 128KB(픽셀당 16비트) | 모든 플랫폼 |
RGB 24비트 | 트루 컬러지만 알파가 포함되어 있지 않습니다. | 192KB(픽셀당 24비트) | 모든 플랫폼 |
알파 8 | 다른 컬러를 포함하지 않는 고품질의 알파 채널입니다. | 64KB(픽셀당 8비트) | 모든 플랫폼 |
RGBA 16비트 | 낮은 품질의 트루 컬러. 알파 채널이 있는 텍스처용 디폴트 압축입니다. | 128KB(픽셀당 16비트) | 모든 플랫폼 |
RGBA 32비트 | 알파를 포함하는 트루 컬러. 알파 채널을 보유하는 텍스처에 사용되는 최고 품질의 압축입니다. | 256KB(픽셀당 32비트) | 모든 플랫폼 |
DDS 파일에서 텍스처를 임포트할 수 있지만 DXT, BC 압축 포맷 또는 압축되지 않은 픽셀 포맷만 지원됩니다.
테그라(Tegra)와 같은 특정 하드웨어를 타겟으로 하지 않는 한, ETC2 압축은 품질과 파일 크기(메모리 크기 요구 사항과 관련) 사이에서 최상의 균형을 유지하기 때문에 Android에서 가장 효율적인 옵션입니다. 알파 채널이 필요한 경우, 알파 채널을 외부에 저장하여 텍스처 파일 크기를 작게 유지할 수 있습니다.
알파 채널이 있는 텍스처의 경우 ETC1을 사용할 수 있으나, 빌드가 Android용이고 텍스처가 아틀라스(패킹 태그를 지정하여)에 위치한 경우에만 사용할 수 있습니다. 이 항목을 활성화하려면 텍스처에 대한 Compress using ETC1 체크박스를 선택합니다. Unity는 결과 아틀라스를 알파 채널이 없는 두 개의 텍스처로 분할한 다음 렌더 파이프라인의 마지막 부분에서 두 텍스처를 결합합니다.
텍스처에 알파 채널을 저장하려면 모든 하드웨어 벤더가 지원하는 RGBA 16비트압축을 사용합니다.