光照贴图定向模式
材质属性和 GI 系统

光照贴图:技术信息

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 光照贴图支持

HDR lightmaps can be used on PC, Mac & Linux Standalone, Xbox One, PlayStation 4, iOS, tvOS and Android. The Other Settings panel in the Player settings has a Lightmap Encoding option for these platforms, which controls the encoding/compression of the lightmaps.

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 is equivalent to Normal Quality.

When lightmap Compression is enabled in the Lighting Window, the lightmaps will be compressed using the BC6H compression format on desktop and console platforms. For mobile platforms, Unity selects the HDR format according to the table below.

高质量 (BC6H) 光照贴图的优势

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

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

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

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

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

目标平台 编码 压缩 - 大小(每像素位数)
独立平台(PC、Mac 和 Linux) RGBM / HDR DXT5 / BC6H - 8 bpp
Xbox One RGBM / HDR DXT5 / BC6H - 8 bpp
PlayStation4 RGBM / HDR DXT5 / BC6H - 8 bpp
WebGL 1.0 / 2.0 RGBM DXT5 - 8 bpp
iOS 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* dLDR / RGBM / HDR ETC1 RGB - 4 bpp / ETC2 RGBA - 8 bpp / ASTC HDR - 3.56 bpp

*If the target is Android then you can override the default texture compression format from the Build Settings to one of the following formats: DXT1, PVRTC, ETC2, ASTC. The default format is ETC for RGB textures and ETC2 for RGBA textures.

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

GI 系统的输入与输出相比有不同的范围和编码。在伽马空间中,表面反照率为 8 位无符号整数 RGB,在线性空间中,发光为 16 位浮点 RGB。有关使用 Meta pass 提供自定义输入的建议,请参阅有关 Meta pass 的文档。

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

另请参阅:


  • 2019–04–26 Page amended with no editorial review

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

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

  • Lightmap encoding settings for mobile platform added in Unity 2019.1 NewIn20191

光照贴图定向模式
材质属性和 GI 系统