Version: 2023.2
环境光遮挡
Lightmapping and shaders

光照贴图:技术信息

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 着色器函数负责在从着色器中的光照贴图纹理读取值之后解码光照贴图值。

HDR lightmap support

You can use HDR lightmaps on Windows, Mac, Linux, iOS, tvOS, and Android. To control the encoding/compression of the lightmaps for these platforms, go to Edit > Project Settings > Player > Other Settings > Lightmap Encoding.

Choosing High Quality will enable HDR lightmap support, whereas Normal Quality will switch to using RGBM encoding. Low Quality will switch to dLDR encoding on mobile platforms, on other platforms it’s equivalent to Normal Quality.

在桌面平台和游戏主机平台上,Lighting 窗口中启用了光照贴图 Compression 时,将使用 BC6H 压缩格式来压缩光照贴图。对于移动平台,Unity 根据下表选择 HDR 格式。

Advantages of High Quality (BC6H) lightmaps

  • HDR 光照贴图不使用任何编码方案来编码光照贴图值,因此支持的范围仅受到 16 位浮点纹理格式的限制(范围从 0 到 65504)。

  • BC6H 格式质量优于 DXT5 + RGBM 格式编码,并且不会产生 RGBM 编码所具有的任何色带瑕疵。

  • 需要对 HDR 光照贴图进行采样的着色器是一些较短的 ALU 指令,因为不需要对采样值进行解码。

  • BC6H 格式与 DXT5 具有相同的 GPU 内存要求。

以下列表列出了每个目标平台的编码方案及其纹理压缩格式:

目标平台 编码 压缩 - 大小(每像素位数)
独立平台(PC、Mac 和 Linux) RGBM / HDR DXT5 / BC6H - 8 bpp
WebGL 1.0 / 2.0 RGBM 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] The texture compression format used for lightmaps on iOS depends on the Texture compression format setting in the Player Settings.

[2] The texture compression format used for lightmaps on Android depends on Player Settings and Build Settings. See Texture compression settings for more details on how these settings interact.

预计算实时全局光照 (GI)

The inputs to the GI system have a different range and encoding to the output. Surface albedo is 8-bit unsigned integer RGB in gamma space and emission is 16-bit floating point RGB in linear space. For advice on providing custom inputs using a meta pass, see documentation on Lightmapping and shaders.

辐照度输出纹理将以 RGB9E5 共享指数浮点格式(如果图形硬件支持此格式)存储,或者以范围在 5 以内的 RGBM 作为后备格式。RGB9E5 光照贴图的范围是 [0, 65408]。有关 RGB9E5 格式的详细信息,请参阅 Khronos.org:EXT_texture_shared_exponent

另请参阅:


  • 2019–04–26 页面已修订

  • 在 Unity 2017.2 中添加了烘焙光照贴图 NewIn20172

  • 在 Unity 2017.3 中添加了 HDR 光照贴图支持 NewIn20173

  • 在 Unity 2019.1 中添加了适用于移动平台的光照贴图编码设置 NewIn20191

  • Update lightmap texture compression formats for Android and iOS

环境光遮挡
Lightmapping and shaders