Version: Unity 6.0 (6000.0)
语言 : 中文
光照贴图 UV
生成光照贴图 UV (Generate Lightmap UVs)

光照贴图 UV 简介

实时全局光照系统和烘焙全局光照系统都使用光照贴图,因此需要光照贴图 UV。

Unity 为实时全局光照系统和烘焙全局光照系统分别使用不同的光照贴图 UV。其原因有二:

  • 实时和烘焙光照贴图之间的实例分组没有直接对应关系。同一实时光照贴图中的两个实例也可能位于两个不同的烘焙光照贴图中,反之亦然。
  • 以不同比例出现的网格在烘焙光照贴图中共享光照贴图 UV,但在实时光照贴图中不共享 UV。

烘焙光照贴图 UV

烘焙光照贴图 UV 是逐网格的:同一网格的所有实例共享相同的烘焙光照贴图 UV。Unity 可以在导入模型时计算烘焙光照贴图的 UV,或者您也可以提供自己的数据。

Unity 会将烘焙光照贴图 UV 存储在 Mesh.uv2 通道的网格中。此通道会映射到 TEXCOORD1 着色器语义,即通常所说的“UV1”。

如果启用了烘培全局照明,且给定的 MeshRenderer 从光照贴图接收其全局光照,那么 Unity 将使用 Mesh.uv2 通道中的数据将烘焙光照贴图正确映射到网格。

注意:如果要在给定网格中将 Mesh.uv2 用于其他目的,则必须确保所有使用网格的 MeshRenderer 组件都从光照探针而不是光照贴图接受全局光照。要进行更改,请使用网格渲染器组件检视面板MeshRenderer.receiveGI API。

详情请参阅生成光照贴图 UV

实时光照贴图 UV

实时光照贴图 UV 是逐网格的渲染器:同一网格的所有实例共享相同的输入数据,但网格渲染器的不同实例可以在运行时使用不同的实时光照贴图 UV。Unity 会在预计算阶段计算实时全局光照系统的 UV。此计算采用逐网格 UV 作为其输入,并使用该数据创建逐网格渲染器 UV。Unity 可以在导入模型时生成输入的逐网格 UV,或者由您提供自己的数据。

其工作原理如下:

  • Unity 可以使用 Mesh.uv3 通道中的数据作为实时光照贴图 UV 计算的输入。Mesh.uv3 映射到 TEXCOORD2 着色器语义,即通常所称的“UV2”。
  • 如果 Mesh.uv3 中没有数据,但 Mesh.uv2 中有数据,Unity 会回退到使用 Mesh.uv2 中的数据作为实时光照贴图 UV 计算的输入。Mesh.uv2 将被用于烘焙光照贴图 UV。使用烘焙光照贴图 UV 作为实时光照贴图 UV 的输入数据是常见的情况。
  • 计算的结果会逐 MeshRenderer 进行存储,存储在 MeshRenderer.enlightenVertexStream 中。如果启用了实时全局光照,且给定的 MeshRenderer 组件对全局光照有贡献并通过光照贴图接收其全局光照,那么 Unity 会自动将数据 MeshRenderer.enlightenVertexStream 传递给着色器中的 TEXCOORD2,而不是 Mesh.uv3 中的数据。

注意:如果要在使用实时全局光照的网格中将 Mesh.uv3 用于其他目的,则必须确保所有使用网格的 MeshRenderer 组件都从光照探针而不是从光照贴图处接受全局光照。要进行更改,请使用网格渲染器组件检视面板MeshRenderer.receiveGI API。

详情请参阅生成光照贴图 UV

Unity 如何计算实时光照贴图 UV

当 Unity 将逐网格输入的 UV 处理为逐网格渲染器输出的 UV 时,就会发生这种情况。

打包

Unity 会重新打包实时光照贴图 UV,以确保所有图表的边界在所有方向上都落在纹素的中心,然后在每个图表的边界周围添加半纹素填充。这样可以确保所有图表之间都有一整格纹素的空间。

这是因为实时光照贴图的分辨率是有意被降低的,这样才能对它们进行实时更新。低分辨率不会影响到图形质量,因为这些光照贴图仅会存储低频的间接光照,但在图表共享纹素时可能导致光渗。重新打包可确保图表永不共享纹素。重新打包避免了此问题,还能让 Unity 有效地将图表挨个打包。

注意:这种打包技术意味着计算得出的 UV 将取决于实例的比例和光照贴图分辨率,这也是实时光照贴图 UV 是逐网格渲染器的原因;但是,Unity 会尽可能自动优化这一点,并且使用相同比例和光照贴图分辨率的相同网格的网格渲染器会共享相同的 UV。

合并

另外,您还可以让 Unity 在此过程中尽可能地合并 UV 图表。这样可以减小光照贴图的大小,并优化运行时的内存占用和性能。

您可以对任何具有网格渲染器组件的__ GameObject__Unity 场景中的基础对象,可以表示角色、道具、风景、摄像机、路径点等。GameObject 的功能由所附的组件决定。更多信息
See in Glossary
启用此优化。在网格渲染器检视面板中,导航到光照贴图 (Lightmapping) 分段并选择优化实时 UV (Optimize Realtime UVs)

注意:此功能有时会在原始 UV 贴图中的不连续性方面出现错误。例如,有意锐利的边缘可能被误解为连续表面。如果发生这种情况,请禁用此功能。

光照贴图 UV
生成光照贴图 UV (Generate Lightmap UVs)