U3L2-5——参数设置—平台设置

平台设置

平台设置主要设置纹理最终打包时在不同平台的尺寸、格式、压缩方式
它非常的重要,因为它影响了你的包大小和读取性能方面的问题

参数相关

image

  • Max Size:设置导入的纹理的最大尺寸,即使美术出的很大的图,也可以通过这里把它们限制在一定范围内

  • Resize Algorithm:当纹理尺寸大于指定的Max Size时,使用的缩小算法

    • Mitchell:默认米切尔算法来调整大小,该算法是常用的尺寸缩小算法
    • Bilinear:使用双线性插值来调整大小。如果细节很重要的图片,可以使用它,它比米切尔算法保留的细节更多
  • Format:纹理格式

    各平台支持的格式有所不同,如果选择Automatic
    会根据平台使用默认设置

    • 可见下文:都支持的格式(2019版文档)

    • 可见下文:支持的纹理格式(2021版文档)

    • 可见下文:移动端和网页端特有格式

    • 关于格式选择的注意事项,根据不同平台单独进行设置

      • IOS

        选择默认的纹理压缩设置 (PVRTC) 可获得更大的兼容性。
        如果您的应用程序不包含 OpenGL ES 2 支持,则可以选择一种 ASTC 格式。
        这些格式提供更好的质量和灵活性,并且压缩速度比 PVRTC 快。

      • Android

        由于安卓设备众多,设备标准都不统一,一般会根据不同的设备标准制作多个安装包

        可见下文:Android下各个格式选择的注意事项

        1. 构建一个以 OpenGL ES 3 为目标的 APK

          • 1-1访问 Android 的 Player Settings
            (菜单:Edit > Project Settings >Player Settings,然后选择 Android 类别)。
          • 1-2.向下滚动到 Graphics APIs 部分。
          • 1-3.确保 OpenGL ES 2 不在列表中。
          • 1-4.构建 APK(菜单:File > Build Settings,然后单击 Build)。
        2. 构建一个以 OpenGL ES 2 为目标的单独 APK

          • 2-1访问 Android Player Settings。
          • 2-2.向下滚动到 Graphics APIs 部分。
          • 2-3.在列表中添加 OpenGL ES 2
          • 并删除 OpenGL ES 3 和 Vulkan。
          • 2-4.构建 APK。
  • Compression:选择纹理的压缩类型,帮助Unity正确选择压缩格式

    会根据平台和压缩格式的可用性进行压缩

    • None:不压缩纹理

      注意!像素风格游戏你可能需要选择该选项避免像素贴图变得模糊!

    • Low Quality:以低质量格式压缩纹理

    • Normal Quality:以标准格式压缩纹理

    • High Quality:以高质量格式压缩纹理

  • Use Crunch Compression:启用后,使用Crunch压缩。

    Crunch是一种基于DXT或ETC纹理压缩的有损压缩格式。
    压缩时间长,解压速度快。
    压缩质量,质量越高意味着纹理越大,压缩事件越长

  • Split Alpha Channel:Alpha通道分离,节约内存。

    会把一张图分成两张纹理。一张包含RGB数据,一张包含Alpha数据,在渲染时再合并渲染。

  • Override ETC2 fallback:不支持ETC2压缩的设备上,使用的格式

支持的纹理格式(按平台,2021版文档)

Recommended, default, and supported texture formats, by platform - Unity 手册

|Texture format|Windows|macOS|Linux|Android|iOS 和 tvOS|WebGL
(Desktop Browsers)

|WebGL (iOS and Android browser)|
| --| --------| --------| ----| -----------| -----------| ----------| ---------------|
|RGB(A) Compressed BC7|是 (1)|是 (1)|是|no|no|yes (1)|no|
|RGBA Compressed DXT5|是|是|是|否 (3)|no|部分 (2)|no|
|RGBA Crunched DXT5|是|是|是|否 (3)|no|部分 (2)|no|
|RGBA 64 bit|是|是|是|部分 (6)|是|no|no|
|RGBA 32 bit|是|是|是|是|是|是|是|
|RGBA 16 bit|是|是|是|是|是|是|是|
|RGB Compressed DXT1|是|是|是|否 (3)|no|部分 (2)|no|
|RGB Crunched DXT1|是|是|是|否 (3)|no|部分 (2)|no|
|RGB 48 bit|是|是|是|部分 (6)|是|no|no|
|RGB 24 bit|是|是|是|是|是|是|是|
|RGB 16 bit|是|是|是|是|是|是|是|
|RG Compressed BC5|是|是|是|no|no|yes|no|
|RG 32 bit|是|是|是|部分 (6)|是|no|no|
|R Compressed BC4|是|是|是|no|no|yes|no|
|R 8|是|是|是|部分 (5)|是|部分 (5)|部分 (5)|
|R 16 bit|是|是|是|部分 (6)|部分 (6)|yes (14)|yes (14)|
|Alpha 8|是|是|是|是|是|是|是|
|RGBA Half|是|是|是|部分 (7)|是|部分 (7)|部分 (7)|
|RGB Compressed BC6H|是 (1)|是 (1)|是|no|no|yes (1)|no|
|RGB9e5 32 Bit Shared Exponent Float|是|是|是|部分 (4)|是|部分 (4)|部分 (4)|
|RGB(A) Compressed ASTC|no|no|no|部分 (8)|是 (10)|no|yes (13 & 10)|
|RGBA Compressed ETC2|no|no|no|部分 (9)|是|no|是|
|RGBA Crunched ETC2|no|no|no|部分 (9)|是|no|是|
|RGB + 1-bit Alpha Compressed ETC2 4 bits|no|no|no|部分 (9)|是|no|是|
|RGBA Compressed PVRTC 4 bits|no|no|no|否 (12)|是|no|no|
|RGBA Compressed PVRTC 2 bits|no|no|no|否 (12)|是|no|no|
|RGB Compressed ETC2|no|no|no|部分 (9)|是|no|是|
|RGB Compressed ETC|no|no|no|是|是|no|是|
|RGB Crunched ETC|no|no|no|是|是|no|是|
|RGB Compressed PVRTC 4 bits|no|no|no|否 (12)|是|no|no|
|RGB Compressed PVRTC 2 bits|no|no|no|否 (12)|是|no|no|
|RG Compressed EAC 8 bit|no|no|no|部分 (9)|是|no|是|
|R Compressed EAC 4 bit|no|no|no|部分 (9)|是|no|是|
|RGB(A) Compressed ASTC HDR|no|no|no|部分 (11)|部分 (11)|no|部分 (11)|

所有支持的纹理压缩格式(2019版文档)

下面的内容来自:特定于平台的覆盖的纹理压缩格式 - Unity 手册(2019版,全中文)

纹理压缩格式 描述 在内存中的大小 Windows Linux Mac PS4 Xbox One Android iOS tvOS WebGL
RGB Compressed DXT1 压缩无符号标准化整数 RGB 纹理 32KB / 4 bpp 部分 部分
RGB Crunched DXT1 RGB 压缩 DXT1,以及额外的 Crunch 压缩 VBR 部分 部分
RGBA Compressed DXT5 压缩无符号标准化整数 RGBA 纹理 64KB / 8 bpp 部分 部分
RGBA Crunched DXT5 RGBA 压缩 DXT5,以及额外的 Crunch 压缩 VBR 部分 部分
RGB Compressed BC6H 压缩无符号浮点/高动态范围 (HDR) RGB 纹理 64KB / 8 bpp 部分 部分
RGB(A) Compressed BC7 高质量压缩无符号标准化整数 RGB 或 RGBA 纹理 64KB / 8 bpp 部分 部分
RGB 16 位 未压缩格式,65536 色,无 Alpha。
使用比压缩格式更多的内存,
但可能更适合没有渐变的 UI 或清晰纹理
128KB / 16 bpp
RGB 24 位 真实色彩,无 Alpha 192KB / 24 bpp
RGB9e5 32 位共享指数浮点 浮点 / 高动态范围 (HDR) 纹理,
无 Alpha 通道
256 KB / 32 bpp 部分 部分 部分 部分
Alpha 8 高质量未压缩 Alpha 通道 64KB / 8 bpp
R 8 高质量未压缩单通道纹理 64KB / 8 bpp 部分 部分 部分 部分
R 16 位 超高质量未压缩单通道纹理 128KB / 16 bpp 部分 部分 部分
RGBA 16 位 低质量真实色彩 128KB / 16 bpp
RGBA 32 位 真实色彩,并有 Alpha 256KB / 32 bpp
RGBA Half 半精度浮点 / 高动态范围 (HDR) RGBA 格式 512KB / 64bpp 部分 部分 部分

移动端和网页端特有格式

下面的内容来自:特定于平台的覆盖的纹理压缩格式 - Unity 手册(2019版,全中文)

纹理压缩格式 描述 大小 Android iOS tvOS WebGL
RGB Compressed ETC 压缩 RGB 纹理。
所有 OpenGL ES 2.0 GPU 都支持该格式。
32KB / 4 bpp 部分 (1)
RGB Crunched ETC RGB 压缩 ETC,以及额外的 Crunch 压缩。 VBR 部分 (1)
RGB Compressed ETC2 压缩 RGB 纹理。 32KB / 4 bpp 部分 (2) 部分 部分 部分 (1)
RGBA Compressed ETC2 压缩 RGBA 纹理。
所有 OpenGL ES 3.0 GPU 都支持该格式。
64KB / 8 bpp 部分 (2) 部分 部分 部分 (1)
RGBA Crunched ETC2 RGBA 压缩 ETC2,以及额外的 Crunch 压缩。 VBR 部分 (2) 部分 部分 部分 (1)
RGB + 1 位 Alpha Compressed ETC2 4 位 采用 Alpha 通道的压缩 RGBA 纹理被限制为完全不透明或完全透明。 32KB / 4 bpp 部分 (2) 部分 部分 部分 (1)
RG Compressed EAC 8 位 高质量压缩 RG(双通道)纹理。 64KB / 8 bpp 部分 (2) 部分 部分 部分 (1)
R Compressed EAC 4 位 高质量压缩 R(单通道)纹理。 32KB / 4 bpp 部分 (2) 部分 部分 部分 (1)
RGB(A) Compressed
ASTC
可变块大小压缩 RGB 或 RGBA 纹理。
所有 OpenGL ES 3.1 和 Vulkan GPU 都支持该格式。
12x12:7744 字节 / 0.89 bpp
10x10:10816 字节 / 1.28 bpp
8x8:16KB / 2 bpp
6x6:29584 字节 / 3.56 bpp
5x5:43264 字节 / 5.12 bpp
4x4:64KB / 8 bpp
部分 (4) 部分 部分 (6)
RGB(A) Compressed
ASTC HDR
可变块大小压缩无符号浮点/高动态范围 (HDR) RGB 或 RGBA 纹理。 12x12:7744 字节 / 0.89 bpp
10x10:10816 字节 / 1.28 bpp
8x8:16KB / 2 bpp
6x6:29584 字节 / 3.56 bpp
5x5:43264 字节 / 5.12 bpp
4x4:64KB / 8 bpp
部分 (7)
RGB Compressed
PVRTC 2 位 (8)
高压缩 RGB 纹理。 16KB / 2 bpp 部分 (9)
RGBA Compressed
PVRTC 2 位
高压缩 RGBA 纹理。 16KB / 2 bpp 部分 (9)
RGB Compressed
PVRTC 4 位
压缩 RGB 纹理。 32KB / 4 bpp 部分 (9)
RGBA Compressed
PVRTC 4 位
压缩 RGBA 纹理。 32KB / 4 bpp 部分 (9)

Android平台下格式选择的注意事项

下面的内容来自:特定于平台的覆盖的纹理压缩格式 - Unity 手册(2019版,全中文)

除非您的应用程序针对的是特定硬件(例如 Nvidia Tegra 或 Imagination PowerVR),
否则必须在几种压缩格式和未压缩格式之间进行选择,这种情况下需要考虑不同的取舍因素:

格式 描述 支持
ASTC 最灵活的格式,允许您使用不同的块大小来微调文件大小和产生的质量。 在运行 Vulkan 或 OpenGL ES 3.1 的所有设备上以及在运行 OpenGL ES 3.0 的部分设备上受支持。
ETC2/EAC OpenGL ES 3.0 的标准纹理压缩格式。产生的图像质量非常高,并且支持一到四分量纹理数据。OpenGL ES 2 设备不支持这种格式,因此纹理在运行时被解压缩为 ETC2 fallback 指定的格式。 在 OpenGL ES 3.0 上受支持。
在 OpenGL ES 2 上不受支持。
ETC 基于块的纹理压缩格式。图像被分成 4×4 的块,并且每个块使用固定的位数进行编码。缺点是没有直接的 Alpha 通道支持,因此不适合具有透明度信息的纹理。Unity 提供了一种自动处理纹理的方法,这种方法将 Alpha 通道放在纹理图集内(可以在精灵上使用打包标签来指定这一点)。

为此,请在导入精灵图集时为纹理启用特定于 Android 的 Split Alpha Channel 选项。Unity 会将生成的图集拆分为两个纹理,其中一个纹理含有 RGB 数据,另一个纹理含有在所有三个 (RGB) 通道中重复的 Alpha 通道数据,然后在渲染管线的最后部分将这两个纹理组合起来。
在所有 Android 设备上都受支持。
RGBA 16 位 具有 Alpha 通道的未压缩格式。这种格式占用的内存是 ETC2 的两倍。对于没有强渐变且像素完美的 UI,这是一种相当不错的格式。 在所有设备上都受支持。
RGBA 32 位 未压缩的格式,可提供最高质量并具有 Alpha 通道支持。与 ETC2 相比,这种格式需要四倍的内存。这种格式适合外观最佳、像素完美的 UI。 在所有设备上都受支持。