Version: 2019.4
언어: 한국어
텍스처 타입
렌더 텍스처

플랫폼별 오버라이드를 위한 텍스처 압축 포맷

Unity는 텍스처(예: JPG, PNG, PSD 및 TGA)를 임포트하기 위한 소스 파일로 많은 일반적인 이미지 포맷을 지원합니다. 그러나 그래픽 카드 또는 모바일 디바이스와 같은 3D 그래픽스 하드웨어는 실시간으로 렌더링하는 동안 이러한 포맷을 사용하지 않습니다. 이 하드웨어는 빠른 텍스처 샘플링을 위해 최적화된 지정된 포맷으로 텍스처를 압축해야 합니다. 다양한 플랫폼과 기기는 각각 전용 포맷이 있습니다.

기본적으로 Unity 에디터는 선택한 빌드 타겟에 일치하도록 텍스처를 가장 적합한 포맷으로 자동으로 변환하고 빌드에는 변환된 텍스처만 포함됩니다. 소스 에셋 파일은 프로젝트의 Assets 폴더에 기존 포맷으로 남습니다. 그러나 대부분의 플랫폼은 선택 가능한 몇 가지 텍스처 압축 포맷을 지원합니다.

Unity에는 각 플랫폼마다 기본 포맷이 있지만 오버라이드하고 일부 텍스처에 대해 다른 압축 포맷을 선택할 수 있습니다(예를 들어 텍스처를 마스크로 사용하고 있으면 하나의 채널만을 사용하여 파일 크기는 줄이지만 품질은 보장하기 위해 BC4 포맷을 사용하도록 선택할 수 있음).

이 페이지는 다음에 관한 정보를 제공합니다.


텍스처를 임포트하고 오버라이드를 설정하는 방법에 대한 일반 정보는 텍스처 임포트 설정을 참조하십시오.

텍스처 압축 개념

이 페이지는 다음 컨셉을 사용합니다.

  1. RGB는 다양한 컬러를 재현하기 위해 여러 가지 방법으로 빨간색, 초록색 및 파란색이 함께 추가된 컬러 모델입니다.
  2. RGBA는 혼합 및 불투명도 변경을 지원하는 알파 채널이 있는 RGB의 버전입니다.
  3. Bits per pixel(bpp)은 단일 픽셀에 필요한 스토리지의 양입니다. 이 값이 낮을수록 GPU의 캐시에 더 많은 픽셀을 저장할 수 있으므로 텍스처에 더 빨리 액세스할 수 있습니다.
  4. Variable bit rate(VBR)는 픽셀당 비트가 고정된 값이 아니고 대신 실제 콘텐츠에 따라 달라진다는 의미입니다. VBR은 크런치 압축과 디스크의 텍스처 크기에만 적용됩니다. 메모리의 크기는 기본 텍스처 포맷을 사용할 때와 동일합니다(예: RGB Crunched DXT1용 RGB Compressed DXT1).
  5. Crunch Compression은 DXT 또는 ETC 텍스처 압축의 상단에 있는 손실 압축 포맷(데이터의 일부가 압축 과정 중에 손실됨)입니다. 텍스처는 CPU에서 DXT 또는 ETC로 압축 해제되며, 그런 다음 런타임 시 GPU에 업로드됩니다. 크런치 압축은 텍스처가 디스크 공간을 가능한 한 적게 사용하지만 런타임 메모리 사용량에는 영향을 미치지 않도록 합니다. 크런치 텍스처는 압축하는 데 오랜 시간이 걸리지만, 런타임 시 압축 해제는 매우 빠릅니다.

지원되는 플랫폼용 기본 포맷

다음 표는 각 플랫폼에 사용된 디폴트 포맷을 보여줍니다.

플랫폼 컬러 모델 없음 보통 품질(기본값) 높은 품질 낮은 품질(더 높은 성능)
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(빌드 설정에서 Don’t override를 활성화한 경우에만 해당) RGB RGB 24비트 RGB Compressed ETC RGB Compressed ETC RGB Compressed ETC
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 블록
Default RGBA RGBA 32비트 RGBA 16비트 RGBA 16비트 RGBA 16비트

지원되는 모든 텍스처 압축 포맷

다음 표에는 각 플랫폼에서 사용할 수 있는 텍스처 압축 포맷 옵션과 디스크의 결과 압축 파일 크기가 표시되어 있습니다(256x256 픽셀 이미지 기준).

텍스처 압축 포맷을 선택하면 파일 크기와 품질, 압축에 소요되는 시간 사이의 균형을 유지할 수 있습니다. 품질이 높을수록 파일 크기가 커집니다. 특히 모바일 디바이스에서 최고의 성능을 얻으려면 해당 포맷이 충분한 화질을 제공하는 한 애플리케이션이 타겟으로 삼는 하드웨어에서 지원하는 픽셀당 비트 수가 가장 적은 포맷을 사용합니다.

플랫폼에 따라 하드웨어가 다르며 플랫폼은 특정 압축 포맷과 가장 효율적으로 작동하도록 최적화되어 있습니다. 타겟 플랫폼이 지원하는 텍스처 압축 포맷을 사용하면 GPU가 직접 사용할 수 있으며 해당 플랫폼은 지원하는 포맷에 텍스처를 압축 해제하는 데 리소스를 소모하지 않습니다. 이렇게 하면 애플리케이션의 성능을 향상할 수 있습니다.

타겟 플랫폼이 지원하지 않는 텍스처 압축 포맷을 사용하는 경우 텍스처는 RGBA 32로 압축 해제되며(별다른 요청이 없을 경우), 압축 텍스처와 함께 메모리에 저장됩니다. 이렇게 하면 텍스처 로딩 시간이 늘어나며 메모리를 추가로 사용하므로 호환되지 않는 포맷을 선택하는 경우 애플리케이션의 성능에 영향을 줄 수 있습니다.

아래 표는 각 압축 포맷에 지원되는 플랫폼을 보여줍니다.

참고: 메모리 크기는 256x256 픽셀 텍스처를 기준으로 합니다.

텍스처 압축 포맷 설명 메모리 크기 Windows Linux Mac PS4 Xbox One Android iOS tvOS WebGL
RGB Compressed DXT1 압축된 unsigned normalised integer RGB 텍스처입니다. 32KB/4bpp 지원 지원 지원 지원 지원 부분적 지원(1) 지원 안 함 지원 안 함 부분적 지원(2)
RGB Crunched DXT1 크런치 압축이 추가된 RGB Compressed DXT1 VBR 지원 지원 지원 지원 지원 부분적 지원(1) 지원 안 함 지원 안 함 부분적 지원(2)
RGBA Compressed DXT5 압축된 unsigned normalised integer RGBA 텍스처입니다. 64KB/8bpp 지원 지원 지원 지원 지원 부분적 지원(1) 지원 안 함 지원 안 함 부분적 지원(2)
RGBA Crunched DXT5 크런치 압축이 추가된 RGBA Compressed DXT5 VBR 지원 지원 지원 지원 지원 부분적 지원(1) 지원 안 함 지원 안 함 부분적 지원(2)
RGB Compressed BC6H 압축된 unsigned float/HDR(High Dynamic Range) RGB 텍스처입니다. 64KB/8bpp 부분적 지원(3) 지원 부분적 지원(3) 지원 지원 지원 안 함 지원 안 함 지원 안 함 지원 안 함
RGB(A) Compressed BC7 고품질의 압축된 unsigned normalised integer RGB 또는 RGBA 텍스처입니다. 64KB/8bpp 부분적 지원(3) 지원 부분적 지원(3) 지원 지원 지원 안 함 지원 안 함 지원 안 함 지원 안 함
RGB 16비트 알파를 포함하지 않은 65,536 컬러의 압축되지 않은 포맷입니다. 압축된 포맷보다 많은 메모리를 사용하지만, 그레디언트가 적용되지 않은 선명한 텍스처나 UI에 더욱 적합할 수 있습니다. 128KB/16bpp 지원 지원 지원 지원 지원 지원 지원 지원 지원
RGB 24비트 알파가 포함되어 있지 않은 트루 컬러입니다. 192KB/24bpp 지원 지원 지원 지원 지원 지원 지원 지원 지원
RGB9e5 32비트 Shared Exponent Float 부동 소수점 / 알파 채널이 포함되어 있지 않은 HDR(High Dynamic Range) 텍스처 256KB/32bpp 지원 지원 지원 지원 지원 부분적 지원(4) 부분적 지원(4) 부분적 지원(4) 부분적 지원(4)
알파 8 압축되지 않은 고품질 알파 채널 64KB/8bpp 지원 지원 지원 지원 지원 지원 지원 지원 지원
R 8 압축되지 않은 고품질 단일 채널 텍스처 64KB/8bpp 지원 지원 지원 지원 지원 부분적 지원(5) 부분적 지원(5) 부분적 지원(5) 부분적 지원(5)
R 16비트 압축되지 않은 초고품질 단일 채널 텍스처 128KB/16bpp 지원 지원 지원 지원 지원 부분적 지원(6) 부분적 지원(6) 부분적 지원(6) 지원 안 함
RGBA 16비트 저품질 트루 컬러 128KB/16bpp 지원 지원 지원 지원 지원 지원 지원 지원 지원
RGBA 32비트 알파가 포함된 트루 컬러 256KB/32bpp 지원 지원 지원 지원 지원 지원 지원 지원 지원
RGBA Half 반정밀도 부동 소수점 / HDR(High Dynamic Range) RGBA 포맷 512KB/64bpp 지원 지원 지원 지원 지원 부분적 지원(7) 부분적 지원(7) 부분적 지원(7) 부분적 지원(7)

참고:

  1. NVIDIA Tegra GPU에서만 가능합니다.
  2. sRGB DXT를 지원하지 않는 웹 브라우저에서 리니어 렌더링을 사용하여 런타임 시 텍스처를 RGBA32로 압축 해제합니다.
  3. Windows Direct3D 11, Windows OpenGL 4, macOS Metal. Direct3D 10 셰이더 모델 4와 OpenGL 3 GPU(Windows)가 있는 플랫폼 및 macOS OpenGL에서 BC6H 텍스처는 RGBA Half로 압축 해제되고 BC7 텍스처는 RGBA32로 압축 해제됩니다.
  4. iOS와 tvOS에는 Metal이 필요하고 Android에는 Vulkan이나 OpenGL ES 3.0 또는 Nvidia Tegra가 필요하고 WebGL 2가 필요합니다.
  5. iOS와 tvOS에는 Metal이 필요하고 Android에는 Vulkan이나 OpenGL ES 3.0 또는 GL_EXT_texture_rg 확장자가 필요하고 WebGL 2가 필요합니다.
  6. iOS와 tvOS에는 Metal이 필요하고 Android에는 Vulkan이나 OpenGL ES 3.0 및 GL_EXT_texture_norm16 확장자가 필요합니다.
  7. iOS와 tvOS에는 Metal이 필요하고 Android에는 Vulkan이나 OpenGL ES 3.0 또는 GL_OES_texture_half_float 확장자가 필요하고 WebGL에는 WebGL 2 또는 OES_texture_half_float 확장자가 필요합니다.

DDS 파일에서 텍스처를 임포트할 수 있지만 DXT, BC 압축 포맷 또는 압축되지 않은 픽셀 포맷만 지원됩니다.

모바일 및 WebGL 특정 포맷

아래 표에 나온 포맷은 Android, iOS, tvOS 및 WebGL에서만 지원됩니다.

참고: 크기는 256x256 픽셀 텍스처를 기준으로 합니다.

텍스처 압축 포맷 설명 Size Android iOS tvOS WebGL
RGB Compressed ETC 압축된 RGB 텍스처입니다. 이 포맷은 모든 OpenGL ES 2.0 GPU가 지원합니다. 32KB/4bpp 지원 지원 지원 부분적 지원(1)
RGB Crunched ETC 크런치 압축이 추가된 RGB Compressed ETC VBR 지원 지원 지원 부분적 지원(1)
RGB Compressed ETC2 압축된 RGB 텍스처입니다. 32KB/4bpp 부분적 지원(2) 부분적 지원(3) 부분적 지원(3) 부분적 지원(1)
RGBA Compressed ETC2 압축된 RGBA 텍스처입니다. 이 포맷은 모든 OpenGL ES 3.0 GPU가 지원합니다. 64KB/8bpp 부분적 지원(2) 부분적 지원(3) 부분적 지원(3) 부분적 지원(1)
RGBA Crunched ETC2 크런치 압축이 추가된 RGBA Compressed ETC2 VBR 부분적 지원(2) 부분적 지원(3) 부분적 지원(3) 부분적 지원(1)
RGB + 1비트 Alpha Compressed ETC2 4비트 완전히 불투명하거나 완전히 투명하도록 제한된 알파 채널이 있는 압축된 RGBA 텍스처입니다. 32KB/4bpp 부분적 지원(2) 부분적 지원(3) 부분적 지원(3) 부분적 지원(1)
RG Compressed EAC 8비트 고품질의 압축된 RG(2채널) 텍스처입니다. 64KB/8bpp 부분적 지원(2) 부분적 지원(3) 부분적 지원(3) 부분적 지원(1)
R Compressed EAC 4비트 고품질의 압축된 R(단일 채널) 텍스처입니다. 32KB/4bpp 부분적 지원(2) 부분적 지원(3) 부분적 지원(3) 부분적 지원(1)
RGB(A) Compressed ASTC 가변 블록 크기로 압축된 RGB 또는 RGBA 텍스처입니다. 이 포맷은 OpenGL ES 3.1과 Vulkan GPU가 지원합니다. 12x12: 7744바이트/0.89bpp

10x10: 10816바이트/1.28bpp

8x8: 16KB/2bpp

6x6: 29584바이트 / 3.56bpp

5x5: 43264바이트/5.12bpp

4x4: 64KB/8bpp
부분적 지원(4) 부분적 지원(5) 지원 부분적 지원(6)
RGB(A) Compressed ASTC HDR 가변 블록 크기로 압축된 unsigned float/HDR(High Dynamic Range) RGB 또는 RGBA 텍스처입니다. 12x12: 7744바이트/0.89bpp

10x10: 10816바이트/1.28bpp

8x8: 16KB/2bpp

6x6: 29584바이트 / 3.56bpp

5x5: 43264바이트/5.12bpp

4x4: 64KB/8bpp
부분적 지원(7) 지원 안 함 지원 안 함 지원 안 함
RGB Compressed PVRTC 2비트 고압축 RGB 텍스처입니다. 16KB/2bpp 부분적 지원(9) 지원 지원 지원 안 함
RGBA Compressed PVRTC 2비트 고압축 RGBA 텍스처입니다. 16KB/2bpp 부분적 지원(9) 지원 지원 지원 안 함
RGB Compressed PVRTC 4비트 압축된 RGB 텍스처입니다. 32KB/4bpp 부분적 지원(9) 지원 지원 지원 안 함
RGBA Compressed PVRTC 4비트 압축된 RGBA 텍스처입니다. 32KB/4bpp 부분적 지원(9) 지원 지원 지원 안 함

참고:

  1. ETC1 및 ETC2/EAC는 일부 브라우저의 WebGL에서만 지원됩니다.
  2. ETC2는 OpenGL ES 2를 실행할 때 Android에서 지원되지 않습니다. 이런 경우 텍스처는 런타임 시 Android 빌드 설정 또는 플랫폼별 오버라이드에 대한 Android 탭에서 ETC2 폴백이 지정한 포맷으로 압축 해제됩니다.
  3. ETC2는 OpenGL ES 2 실행 시 iOS와 tvOS에서 지원되지 않습니다.
  4. GL_KHR_texture_compression_astc_ldr 확장자 또는 Vulkan 지원이 필요합니다.
  5. A8 GPU 이상이 필요합니다.
  6. WEBGL_compressed_texture_astc 확장이 필요합니다.
  7. GL_KHR_texture_compression_astc_hdr 확장자가 필요합니다. 이 확장자가 지원되지 않는 경우 텍스처는 런타임 시 RGB9E5 포맷으로 압축 해제되며 알파 채널이 손실됩니다.
  8. 모든 PVRTC 포맷은 2의 제곱수정사각 텍스처가 필요합니다.
  9. PowerVR GPU에서만 가능합니다.

iOS에 대한 참고 사항

보다 폭넓은 호환성을 위해 기본 텍스처 압축 설정(PVRTC)이 선택됩니다. 애플리케이션에 OpenGL ES 2 지원이 포함되지 않은 경우 ASTC 포맷 중 하나를 선택할 수 있습니다. 해당 포맷은 더 나은 품질과 유연성을 제공하며 압축은 PVRTC보다 더 빠릅니다.

tvOS에 대한 참고 사항

Unity는 Metal을 지원하는 tvOS 기기만 지원합니다. ASTC는 이 플랫폼의 기본 텍스처 압축입니다. 수동으로 OpenGL ES 2를 추가하는 경우 텍스처 압축을 PVRTC 또는 ETC로 변경하여 런타임 시 텍스처 압축 해제를 방지해야 합니다.

Android에 대한 참고 사항

일반 텍스처

앱이 특정 하드웨어(예: Nvidia Tegra 또는 Imagination PowerVR)를 타겟으로 하지 않는 경우 여러 장단점을 제공하는 몇 가지 압축 포맷과 압축되지 않은 포맷 중 선택해야 합니다.

Format 설명 지원
ASTC 가장 유연한 포맷으로 이를 통해 다른 블록 크기를 사용하여 파일 크기와 결과 품질을 미세 조정할 수 있습니다. Vulkan 또는 OpenGL ES 3.1을 실행하는 모든 기기에서 지원되며 OpenGL ES 3.0을 실행하는 일부 기기에서도 지원됩니다.
ETC2/EAC OpenGL ES 3.0에 대한 기본 텍스처 압축 포맷입니다. 결과 이미지 품질이 상당히 높고 1–4 컴포넌트 텍스처 데이터를 지원합니다. OpenGL ES 2 기기가 지원하지 않으므로 텍스처는 런타임 시 ETC2 폴백이 지정한 포맷으로 압축 해제됩니다. OpenGL ES 3.0에서 지원됩니다.
OpenGL ES 2에서는 지원되지 않습니다.
ETC 블록 기반 텍스처 압축 포맷입니다. 이미지는 4×4 블록으로 분할되고 각 블록은 고정된 비트 수를 사용하여 인코딩됩니다. 단점은 직접적인 알파 채널 지원이 없다는 점이므로 투명도 정보가 있는 텍스처에는 적합하지 않습니다. Unity는 텍스처 아틀라스에 배치된 알파 채널로 텍스처를 처리하는 자동화된 방법을 제공합니다(스프라이트에 패킹 태그를 사용하여 지정 가능).

이를 활성화하려면 스프라이트 아틀라스 임포트 시 텍스처에 Android 전용 알파 채널 분할 옵션을 활성화합니다. Unity는 결과 아틀라스를 두 가지 텍스처(RGB 데이터가 있는 텍스처 및 세 개(RGB) 채널 모두에서 복제된 알파 채널 데이터가 있는 텍스처)로 분할한 다음 렌더 파이프라인의 마지막 부분에서 두 텍스처를 결합합니다.
모든 Android 기기에서 지원됩니다.
RGBA 16비트 알파 채널이 있는 압축되지 않은 포맷입니다. 이 포맷은 ETC2보다 두 배 많은 메모리를 사용합니다. 이는 강한 그레디언트 없이 픽셀 퍼펙트 UI를 위해 선택할 수 있는 합리적으로 좋은 포맷입니다. 모든 기기에서 지원됩니다.
RGBA 32비트 최고 품질을 제공하고 알파 채널을 지원하는 압축되지 않은 포맷입니다. ETC2에 비해 네 배 많은 메모리를 사용합니다. 이는 가장 우수한 픽셀 퍼펙트 UI를 위해 선택하는 포맷입니다. 모든 기기에서 지원됩니다.

HDR 텍스처

HDR(High Dynamic Range) 텍스처의 경우 다음 포맷 중 하나를 선택합니다.

  • ASTC HDR은 HDR 텍스처를 위해 Android 기기에서 사용할 수 있는 유일하게 압축된 포맷입니다. 여기에는 Vulkan 또는 GL_KHR_texture_compression_astc_hdr 지원이 필요합니다. LDR(Low Dynamic Range) 텍스처와 마찬가지로 가장 유연한 포맷입니다.
  • RGB9e5는 패킹된 포맷으로 알파 채널이 없습니다. Vulkan 또는 OpenGL ES 3.0을 실행하는 모든 기기와 Nvidia Tegra GPU가 있는 기기는 이 포맷을 지원합니다.
  • RGBA Half는 반정밀도가 있는 압축되지 않은 부동 소수점 포맷입니다. RGB9e5보다 두 배 많은 메모리를 사용하지만 알파 채널이 있으며 대부분의 기기에서 지원됩니다.

별도의 APK로 여러 기기 타게팅

서로 다른 하드웨어를 타게팅하는 여러 Android 패키지(APK)를 퍼블리시할 수 있습니다. 예를 들어 두 개의 별도 APK(OpenGL ES 3.0 이상을 지원하는 기기를 타게팅하는 APK, OpenGL ES 2.0 전용 기기용 APK)를 퍼블리시하려면 다음 단계를 따르십시오.

1. OpenGL ES 3을 타게팅하는 APK를 빌드합니다.

  1. Android 플레이어 설정에 액세스합니다(메뉴: Edit > Project Settings > Player Settings를 선택한 다음 Android 카테고리 선택).
  2. Graphics APIs 섹션으로 스크롤을 내립니다.
  3. OpenGL ES 2가 리스트에 없는지 확인합니다.
  4. APK를 빌드합니다(메뉴: File > Build Settings를 선택한 다음 Build 클릭).

2. OpenGL ES 2를 타게팅하는 별도의 APK 빌드합니다.

  1. Android 플레이어 설정에 액세스합니다.
  2. Graphics APIs 섹션으로 스크롤을 내립니다.
  3. OpenGL ES 2를 추가하고 OpenGL ES 3과 Vulkan을 리스트에서 제거합니다.
  4. APK를 빌드합니다.

3. 이러한 APK를 모두 Google Play Store에 퍼블리시합니다.

사용자가 앱을 다운로드하면 Google Play Store는 기기와 가장 적합한 APK를 자동으로 설치합니다.

다중 APK 파일 퍼블리싱에 대한 자세한 내용은 다음에 관한 Android 개발자 문서를 참조하십시오.



  • 2017.2에서 WebGL의 리니어 렌더링 추가됨 NewIn20172

  • 2017.3에서 크런치 압축 포맷 업데이트됨 NewIn20173

  • 2017.3에서 Tizen 및 Samsung TV 지원 중단됨 NewIn20173

  • 2019.1에서 Android용 ASTC HDR 텍스처 압축이 추가됨 NewIn20191

  • Unity 2019.3의 새로운 콘텐츠 NewIn20193

텍스처 타입
렌더 텍스처