Unity 使用不同的压缩和编码方案存储光照贴图预渲染的纹理,包含场景中静态物体上的光源效果。光照贴图覆盖在场景几何体上以创建光照效果。 更多信息
参见 术语表,具体取决于目标平台和“光照”窗口中的压缩设置。
当需要将烘焙的光照强度范围编码到低动态范围纹理时,Unity 项目可以使用两种技术。
RGBM 编码。RGBM 编码将颜色存储在RGB通道中,并将乘数 (M) 存储在 Alpha 通道中。RGBM 光照贴图的范围在线性空间中为 0 到 34.49(52.2),在伽马空间中为 0 到 5。
双低动态范围 (dLDR) 编码。dLDR 编码在移动平台上使用,方法是简单地将 [0, 2] 范围映射到 [0, 1]。高于 2 的烘焙光照强度将被钳位。当使用伽马空间时,解码值为从光照贴图纹理中读取的值乘以 2;当使用线性空间时,解码值为 4.59482(22.2)。一些平台将光照贴图存储为 dLDR,因为当使用 RGBM 时,它们的硬件压缩会产生外观不良的伪影。
当使用线性颜色空间时,光照贴图纹理被标记为 sRGB,并且着色器在 GPU 上运行的程序。 更多信息
参见 术语表(采样和解码后)使用的最终值将位于线性颜色空间中。当使用伽马颜色空间时,最终值将位于伽马颜色空间中。
注意:当使用编码时,存储在光照贴图(GPU 纹理内存)中的值始终位于伽马颜色空间中。
来自 UnityCG.cginc 着色器包含文件的Decode Lightmap 着色器函数在着色器中从光照贴图纹理读取值后处理光照贴图值的解码。
您可以在 Windows、Mac、Linux、iOS、tvOS 和 Android 上使用 HDR 光照贴图。要控制这些平台的光照贴图的编码/压缩,请转到编辑 > 项目设置 > 播放器 > 其他设置 > 光照贴图编码。
选择高质量将启用HDR高动态范围
参见 术语表光照贴图支持,而普通质量将切换为使用RGBM编码。低质量将在移动平台上切换为使用dLDR编码,在其他平台上则等效于普通质量。
当在“光照”窗口中启用光照贴图压缩一种存储数据的方法,可减少其所需的存储空间。参见 纹理压缩、动画压缩、音频压缩、构建压缩。
参见 术语表时,光照贴图将在台式机和主机平台上使用BC6H压缩格式进行压缩。对于移动平台,Unity 会根据下表选择 HDR 格式。
HDR 光照贴图不使用任何编码方案来编码光照贴图值,因此支持的范围仅受 0 到 65504 的 16 位浮点纹理格式用于在 3D 图形硬件(例如显卡或移动设备)进行实时渲染期间处理纹理的文件格式。 更多信息
参见 术语表限制。
BC6H 格式的质量优于 DXT5 + RGBM 格式编码,并且不会产生 RGBM 编码具有的任何颜色带状伪影。
需要采样 HDR 光照贴图的着色器 ALU 指令少了几条,因为无需解码采样值。
BC6H 格式与 DXT5 具有相同的 GPU 内存需求。
以下是编码方案及其纹理压缩3D 图形硬件要求纹理以专门的格式进行压缩,这些格式针对快速纹理采样进行了优化。 更多信息
参见 术语表格式的列表,按目标平台划分
目标平台 | 编码 | 压缩 - 大小(每像素位数) |
---|---|---|
独立版(PC、Mac、Linux) | RGBM / HDR | DXT5 / BC6H - 8 bpp |
WebGL一种 JavaScript API,可在 Web 浏览器中渲染 2D 和 3D 图形。Unity Web 构建选项允许 Unity 将内容发布为 JavaScript 程序,这些程序使用 HTML5 技术和 WebGL 渲染 API 在 Web 浏览器中运行 Unity 内容。 更多信息 参见 术语表 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 上光照贴图使用的纹理压缩格式取决于“播放器设置”中的“纹理压缩格式”设置。
[2] Android 上光照贴图使用的纹理压缩格式取决于播放器设置和构建设置。有关这些设置如何交互的更多详细信息,请参阅纹理压缩设置。
GI 系统的输入与输出具有不同的范围和编码。表面反照率是伽马空间中的 8 位无符号整数 RGB,发射率是线性空间中的 16 位浮点 RGB。有关使用元通道提供自定义输入的建议,请参阅有关光照贴图和着色器的文档。
如果图形硬件支持,则使用 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
更新 Android 和 iOS 的光照贴图纹理压缩格式
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.