Unity 可存储采用不同压缩和编码方案的光照贴图,具体取决于目标平台以及 Lighting 窗口中的压缩设置。
Unity 项目可以使用两种技术在必要时将烘焙光源强度范围编码为低动态范围纹理:
RGBM 编码。RGBM 编码将颜色存储在 RGB 通道中,将乘数 (M) 存储在 Alpha 通道中。在线性空间中,RGBM 光照贴图的范围是 0 到 34.49(52.2),而在伽马空间中,范围是 0 到 5。
双低动态范围 (dLDR) 编码。只需直接将 [0, 2] 范围映射到 [0, 1],即可在移动平台上使用 dLDR 编码。值高于 2 的烘焙光源强度将被钳制。编码值的计算方法是:光照贴图纹理的值乘以 2(如果使用伽马空间),或乘以 4.59482(22.2)(如果使用线性空间)。某些平台将光照贴图存储为 dLDR,这是因为在使用 RGBM 时,这些平台的硬件压缩会产生外观不佳的瑕疵。
使用线性颜色空间时,光照贴图纹理将标记为 sRGB,着色器使用的最终值(采样和解码后)将位于线性颜色空间中。使用伽马颜色空间时,最终值将在伽马颜色空间中。
注意:使用编码时,存储在光照贴图(GPU 纹理内存)中的值始终位于伽马颜色空间中。
UnityCG.cginc 着色器 include 文件中的 Decode Lightmap 着色器函数负责在从着色器中的光照贴图纹理读取值之后解码光照贴图值。
您可以在 Windows、Mac、Linux、iOS、tvOS 和 Android 上使用 HDR 光照贴图。要控制这些平台的光照贴图的编码/压缩,请选择编辑 (Edit) > 项目设置 (Project Settings) > 播放器 (Player) > 其他设置 (Other Settings) > 光照贴图编码 (Lightmap Encoding)。
选择 High Quality 将启用__ HDR__高动态范围
See in Glossary 光照贴图支持,而 Normal Quality 将切换为使用 RGBM 编码。在移动平台上,__Low Quality__ 将切换为 dLDR 编码,在其他平台上相当于 Normal Quality。
在桌面平台和游戏主机平台上,关照窗口中启用了光照贴图 Compression 时,将使用 BC6H 压缩格式来压缩光照贴图。对于移动平台,Unity 根据下表选择 HDR 格式。
HDR 光照贴图不使用任何编码方案来编码光照贴图值,因此支持的范围仅受到 16 位浮点纹理格式的限制(范围从 0 到 65504)。
BC6H 格式质量优于 DXT5 + RGBM 格式编码,并且不会产生 RGBM 编码所具有的任何色带瑕疵。
需要对 HDR 光照贴图进行采样的着色器是一些较短的 ALU 指令,因为不需要对采样值进行解码。
BC6H 格式与 DXT5 具有相同的 GPU 内存要求。
以下列表列出了每个目标平台的编码方案及其纹理压缩格式:
| 目标平台 | 编码 | 压缩 - 大小(每像素位数) |
|---|---|---|
| 独立平台(PC、Mac 和 Linux) | RGBM / HDR | DXT5 / BC6H - 8 bpp |
| WebGL 2.0 | RGBM / RGBM / HDR | DXT5 - 8 bpp |
| iOS ASTC (1) | dLDR / RGBM / HDR | ASTC - 3.56 bpp / ASTC - 3.56 bpp / RGB9E5 - 32 bpp |
| iOS PVRTC | dLDR / RGBM / HDR | PVRTC RGB - 4 bpp / ETC2 RGBA - 8 bpp / RGB9E5 - 32 bpp |
| tvOS | dLDR / RGBM / HDR | ASTC - 3.56 bpp / ASTC - 3.56 bpp / RGB9E5 - 32 bpp |
| Android ASTC (2) | dLDR / RGBM / HDR | ASTC - 3.56 bpp / ASTC - 3.56 bpp / ASTC HDR - 3.56 bpp |
| Android ETC2 | dLDR / RGBM / HDR | ETC2 RGB - 4 bpp / ETC2 RGBA - 8 bpp / ASTC HDR - 3.56 bpp |
| Android ETC | dLDR / RGBM / HDR | ETC1 RGB - 4 bpp / ETC2 RGBA - 8 bpp / ASTC HDR - 3.56 bpp |
[1] 在 iOS 上用于光照贴图的纹理压缩格式取决于播放器设置 (Player Settings) 中的纹理压缩格式设置。
[2] 在 Android 上用于光照贴图的纹理压缩格式取决于播放器设置 (Player Settings) 和构建设置 (Build Settings)。请参阅纹理压缩设置以了解有关这些设置如何交互的更多详细信息。
GI 系统的输入与输出相比有不同的范围和编码。在伽马空间中,表面反照率为 8 位无符号整数 RGB,在线性空间中,发光为 16 位浮点 RGB。有关使用 Meta pass 提供自定义输入的建议,请参阅有关光照贴图和着色器上的文档。
辐照度输出纹理将以 RGB9E5 共享指数浮点格式(如果图形硬件支持此格式)存储,或者以范围在 5 以内的 RGBM 作为后备格式。RGB9E5 光照贴图的范围是 [0, 65408]。有关 RGB9E5 格式的详细信息,请参阅 Khronos.org:EXT_texture_shared_exponent。
另请参阅: