Version: 2020.1
Texture types
렌더 텍스처

Texture compression formats for platform-specific overrides

Unity supports many common image formats as source files for importing your Textures (such as JPG, PNG, PSD, and TGA). However, 3D graphics hardware, such as graphics cards or mobile devices, doesn’t use these formats during real-time rendering. This hardware requires Textures to be compressed in specialized formats which are optimized for fast Texture sampling. Different platforms and devices each have their own proprietary formats.

By default, the Unity Editor automatically converts Textures to the most appropriate format to match the build target you have selected, and only includes converted Textures in the build. Your source Asset files remain in their original format in your Project’s Assets folder. However, most platforms support several Texture compression formats you can choose from.

Unity has default formats for each platform, but you can override them and choose different compression formats for some of your Textures (for example, if you are using a Texture as a mask, with only one channel, you might choose to use the BC4 format to reduce file size but preserve quality).

This page contains the following information:


For general information about importing Textures and how to set up overrides, see Texture Import Settings.

Texture compression concepts

This page uses the following concepts:

  1. RGB is a color model in which red, green and blue are added together in various ways to reproduce a broad array of colors.
  2. RGBA is a version of RGB with an alpha channel, which supports blending and opacity alteration.
  3. Bits per pixel (bpp) is the amount of storage required for a single pixel. The lower this value, the more pixels can be stored in the cache on the GPU, which results in faster texture access.
  4. Variable bit rate (VBR) means that bits per pixel is not a fixed value, and depends on the actual content instead. VBR only applies to Crunch compression, and only texture size on disk. The size in memory is the same as when using the underlying texture format (for example, RGB Compressed DXT1 for RGB Crunched DXT1).
  5. Crunch compression is a lossy compression format (part of the data is lost during compression) on top of DXT or ETC Texture compression. Textures are decompressed to DXT or ETC on the CPU, and then uploaded to the GPU at runtime. Crunch compression helps the Texture use the lowest possible amount of disk space, but has no effect on runtime memory usage. Crunch Textures can take a long time to compress, but decompression at runtime is very fast.

Default formats for supported platforms

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

플랫폼 컬러 모델 없음 Normal quality (default) 높은 품질 낮은 품질(더 높은 성능)
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 (only when Don’t override is enabled in the build settings) 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비트

All supported Texture compression formats

The following tables show the Texture compression format options available on each platform, and the resulting compressed file size on disk (based on a 256 by 256 pixel image).

Choosing a Texture compression format is a balance between file size, quality and compression time: the higher the quality, the greater the file size. For the best performance, especially on mobile devices, use the format with the fewest bits per pixel that is supported by the hardware your application targets, as long as that format provides sufficient visual quality.

Different platforms have different hardware, and are optimised to work most efficiently with specific compression formats. When you use a Texture compression format that the target platform supports, the GPU can use it directly and the platform doesn’t spend any resources to decompress the Texture to a supported format. This can improve your application’s performance.

If you use a Texture compression format that the target platform doesn’t support, Textures are decompressed to RGBA 32 bit (unless noted otherwise) and stored in memory alongside the compressed Textures. This increases texture loading time and uses additional memory, which means that choosing non-compatible formats can impact your application’s performance.

The tables below show supported platforms for each compression format.

Note: Size in memory is based on a 256 x 256 pixel Texture.

텍스처 압축 포맷 설명 Size in memory Windows Linux Mac PS4 Xbox One Android iOS tvOS WebGL
RGB Compressed DXT1 압축된 unsigned normalised integer RGB 텍스처입니다. 32KB / 4 bpp partial (1) 아니요 아니요 partial (2)
RGB Crunched DXT1 RGB Compressed DXT1, with additional Crunch compression. VBR partial (1) 아니요 아니요 partial (2)
RGBA Compressed DXT5 Compressed unsigned normalised integer RGBA Texture. 64KB / 8 bpp partial (1) 아니요 아니요 partial (2)
RGBA Crunched DXT5 RGBA Compressed DXT5, with additional Crunch compression. VBR partial (1) 아니요 아니요 partial (2)
RGB Compressed BC6H 압축된 unsigned float/HDR(High Dynamic Range) RGB 텍스처입니다. 64KB / 8 bpp partial (3) partial (3) 아니요 아니요 아니요 아니요
RGB(A) Compressed BC7 고품질의 압축된 unsigned normalised integer RGB 또는 RGBA 텍스처입니다. 64KB / 8 bpp partial (3) partial (3) 아니요 아니요 아니요 아니요
RGB 16비트 Uncompressed format with 65536 colors without alpha. Uses more memory than the compressed formats, but could be more suitable for UI or crisp Textures without gradients. 128KB / 16 bpp
RGB 24비트 True color, without alpha. 192KB / 24 bpp
RGB9e5 32 Bit Shared Exponent Float Floating-point / High Dynamic Range (HDR) texture without alpha channel. 256 KB / 32 bpp partial (4) partial (4) partial (4) partial (4)
알파 8 High-quality uncompressed alpha channel. 64KB / 8 bpp
R 8 High-quality uncompressed single-channel texture. 64KB / 8 bpp partial (5) partial (5) partial (5) partial (5)
R 16 bit Ultra-high-quality uncompressed single-channel texture. 128KB / 16 bpp partial (6) partial (6) partial (6) 아니요
RGBA 16비트 Low-quality true color. 128KB / 16 bpp
RGBA 32비트 True color with alpha. 256KB / 32 bpp
RGBA Half Half-precision floating point / High Dynamic Range (HDR) RGBA format. 512KB / 64bpp partial (7) partial (7) partial (7) partial (7)

참고:

  1. On Nvidia Tegra GPUs only.
  2. With linear rendering on web browsers that do not support sRGB DXT, textures are decompressed at runtime to RGBA32.
  3. Windows Direct3D 11, Windows OpenGL 4, macOS Metal. On platforms with Direct3D 10 Shader Model 4 and OpenGL 3 GPUs (Windows) and on macOS OpenGL, BC6H textures are decompressed to RGBA Half, and BC7 textures are decompressed to RGBA32.
  4. Requires Metal on iOS and tvOS; Vulkan or OpenGL ES 3.0 or Nvidia Tegra on Android; WebGL 2.
  5. Requires Metal on iOS and tvOS; Vulkan or OpenGL ES 3.0 or GL_EXT_texture_rg extension on Android; WebGL 2.
  6. Requires Metal on iOS and tvOS; Vulkan or OpenGL ES 3.0 and GL_EXT_texture_norm16 extension on Android.
  7. Requires Metal on iOS and tvOS; Vulkan or OpenGL ES 3.0 or GL_OES_texture_half_float extension on Android; WebGL 2 or OES_texture_half_float extension on WebGL.

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

Mobile and WebGL specific formats

The formats in the table below are only supported on Android, iOS, tvOS, and WebGL.

Note: Size is based on a 256 x 256 pixel Texture.

텍스처 압축 포맷 설명 Size Android iOS tvOS WebGL
RGB Compressed ETC Compressed RGB Texture. This format is supported by all OpenGL ES 2.0 GPUs. 32KB / 4 bpp partial (1)
RGB Crunched ETC RGB Compressed ETC, with additional Crunch compression. VBR partial (1)
RGB Compressed ETC2 압축된 RGB 텍스처입니다. 32KB / 4 bpp partial (2) partial (3) partial (3) partial (1)
RGBA Compressed ETC2 Compressed RGBA Texture. This format is supported by all OpenGL ES 3.0 GPUs. 64KB / 8 bpp partial (2) partial (3) partial (3) partial (1)
RGBA Crunched ETC2 RGBA Compressed ETC2, with additional Crunch compression. VBR partial (2) partial (3) partial (3) partial (1)
RGB + 1-bit Alpha Compressed ETC2 4 bits Compressed RGBA texture with alpha channel limited to either fully opaque or fully transparent. 32KB / 4 bpp partial (2) partial (3) partial (3) partial (1)
RG Compressed EAC 8 bit High-quality compressed RG (two-channel) texture. 64KB / 8 bpp partial (2) partial (3) partial (3) partial (1)
R Compressed EAC 4 bit High-quality compressed R (single-channel) texture. 32KB / 4 bpp partial (2) partial (3) partial (3) partial (1)
RGB(A) Compressed ASTC Variable block size compressed RGB or RGBA Texture. This format is supported by all OpenGL ES 3.1 and Vulkan GPUs. 12x12: 7744 bytes / 0.89 bpp

10x10: 10816bytes / 1.28 bpp

8x8: 16KB / 2 bpp

6x6: 29584 bytes / 3.56 bpp

5x5: 43264 bytes / 5.12 bpp

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

10x10: 10816bytes / 1.28 bpp

8x8: 16KB / 2 bpp

6x6: 29584 bytes / 3.56 bpp

5x5: 43264 bytes / 5.12 bpp

4x4: 64KB / 8 bpp
partial (7) 아니요 아니요 아니요
RGB Compressed PVRTC 2 bits (8) High-compression RGB Texture. 16KB / 2 bpp partial (9) 아니요
RGBA Compressed PVRTC 2비트 High-compression RGBA Texture. 16KB / 2 bpp partial (9) 아니요
RGB Compressed PVRTC 4비트 압축된 RGB 텍스처입니다. 32KB / 4 bpp partial (9) 아니요
RGBA Compressed PVRTC 4비트 압축된 RGBA 텍스처입니다. 32KB / 4 bpp partial (9) 아니요

참고:

  1. ETC1 and ETC2/EAC are supported on WebGL only on a subset of browsers.
  2. ETC2 is not supported on Android when running OpenGL ES 2. In this case, the texture is decompressed at runtime to the format specified by ETC2 fallback in the Android Build Settings or on the Android tab for the Platform-specific overrides.
  3. ETC2 is not supported on iOS and tvOS when running OpenGL ES 2.
  4. Requires GL_KHR_texture_compression_astc_ldr extension or Vulkan support.
  5. Requires A8 GPU or newer.
  6. Requires WEBGL_compressed_texture_astc extension.
  7. Requires GL_KHR_texture_compression_astc_hdr extension. When this extension is not supported, the texture is decompressed at run time to RGB9E5 format, losing the alpha channel.
  8. All PVRTC formats require square textures with power-of-two dimensions.
  9. On PowerVR GPUs only.

Notes on iOS

Default texture compression settings (PVRTC) are chosen for broader compatibility. If your application does not include OpenGL ES 2 support, you can choose one of the ASTC formats. They offer better quality and flexibility, and compression is faster than PVRTC.

Notes on tvOS

Unity supports only tvOS devices that have Metal support. ASTC is the default texture compression on this platform. If you manually add OpenGL ES 2, make sure to change the texture compression to either PVRTC or ETC to avoid texture decompression at runtime.

Android에 대한 참고 사항

Regular Textures

Unless your app targets specific hardware (such as Nvidia Tegra or Imagination PowerVR), you have to choose between several compressed and uncompressed formats, which offer different trade-offs:

Format 설명 지원
ASTC The most flexible format, as it allows you to fine-tune file size and resulting quality using different block sizes. Supported on all devices running Vulkan or OpenGL ES 3.1, and on some devices running OpenGL ES 3.0.
ETC2/EAC Standard texture compression format for OpenGL ES 3.0. The resulting image quality is quite high, and it supports one- to four-component texture data. It’s not supported by OpenGL ES 2 devices, so the texture is decompressed at run time to the format specified by ETC2 fallback. Supported on OpenGL ES 3.0.
Not supported on OpenGL ES 2.
ETC Block-based Texture compression format. The image is split up into 4×4 blocks, and each block is encoded using a fixed number of bits. The drawback is that there is no direct alpha channel support, so it’s not suitable for textures that have transparency information. Unity provides an automated way of handling texture with alpha channels placed in a texture atlas (you can specify this using a packing tag on sprites).

To enable this, enable the Android-specific Split Alpha Channel option for the Texture when importing a Sprite Atlas. Unity splits the resulting atlas into two Textures, one with RGB data and one with alpha channel data duplicated in all three (RGB) channels, and then combines them in the final parts of the render pipeline.
Supported on all Android devices.
RGBA 16비트 Uncompressed format that has an alpha channel. It takes twice as much memory as ETC2. This is a reasonably good format to choose for pixel-perfect UI without strong gradients. Supported on all devices.
RGBA 32비트 Uncompressed format that offers highest quality and has alpha channel support. It takes four times as much memory compared to ETC2. This is a format of choice for the best-looking, pixel-perfect UI. Supported on all devices.

HDR Textures

For high dynamic range (HDR) textures, choose from one of the following formats:

  • ASTC HDR is the only compressed format available on Android devices for HDR textures. It requires Vulkan or GL_KHR_texture_compression_astc_hdr support. As with low dynamic range textures, this is the most flexible format.
  • RGB9e5 is a packed format without an alpha channel. All devices running Vulkan or OpenGL ES 3.0, and devices with Nvidia Tegra GPUs, support this format.
  • RGBA Half is an uncompressed floating-point format with half precision. It takes twice as much memory as RGB9e5, but has an alpha channel and is supported by most devices.

Targeting multiple devices with separate APKs

You can publish multiple Android packages (APKs) that target different hardware. For example, to publish two separate APKs (one that targets devices that support OpenGL ES 3.0 and newer, and another for OpenGL ES 2.0-only devices), follow these steps:

1. Build an APK that targets OpenGL ES 3.

  1. Access the Android Player Settings (menu: Edit > Project Settings > Player Settings, then select the Android category).
  2. Scroll down to the Graphics APIs section.
  3. Make sure OpenGL ES 2 is not in the list.
  4. Build the APK (menu: File > Build Settings, then click Build).

2. Build a separate APK that targets OpenGL ES 2

  1. Access the Android Player Settings.
  2. Scroll down to the Graphics APIs section.
  3. Add OpenGL ES 2 and remove OpenGL ES 3 and Vulkan from the list.
  4. Build the APK.

3. Publish both of these APKs to the Google Play Store.

When a user downloads your app, the Google Play Store automatically installs the most relevant APK for their device.

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



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

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

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

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

  • Content refreshed for Unity 2019.3 NewIn20193

Texture types
렌더 텍스처