Unity3D:光照贴图UV简介
推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生
光照贴图UV简介
实时全局光照系统和烘焙全局光照系统都使用光照贴图,因此需要光照贴图 UV。
Unity 为实时全局光照系统和烘焙全局光照系统使用单独的光照贴图 UV 集。这有两个原因:
- 实时光照贴图和烘焙光照贴图之间的实例分组没有直接对应关系;位于同一实时光照贴图中的实例可能位于两个不同的烘焙光照贴图中,反之亦然。
- 以不同比例显示的网格在烘焙光照贴图中共享光照贴图 UV,但在实时光照贴图中不共享 UV。
烘焙光照贴图 UV
烘焙光照贴图 UV 是按网格的:同一网格的所有实例共享相同的烘焙光照贴图 UV。Unity 可以在导入模型时计算烘焙光照贴图的 UV,也可以提供自己的数据。
Unity 将烘焙的光照贴图 UV 存储在 Mesh.uv2 通道的网格中。此通道映射到 TEXCOORD1 着色器语义,通常称为“UV1”。
如果启用了烘焙全局光照,并且给定的网格渲染器从光照贴图接收其全局光照,Unity 将使用 Mesh.uv2 通道中的数据将烘焙光照贴图正确映射到网格。
注意:如果要在给定网格中将 Mesh.uv2 用于其他目的,则必须确保使用该网格的所有网格渲染器组件都能接收来自光照探针而不是光照贴图的全局照明。使用 Mesh Renderer 组件 Inspector 或 MeshRenderer.receiveGI API 更改此设置。
有关更多信息,请参阅生成光照贴图 UV。
实时光照贴图 UV
实时光照贴图 UV 是按网格渲染器:同一网格的所有实例共享相同的输入数据,但网格渲染器的不同实例可以在运行时使用不同的实时光照贴图 UV。Unity 在预计算阶段计算实时全局光照系统的 UV。此计算将每个网格的 UV 作为其输入,并使用该数据创建每个网格渲染器 UV。Unity 可以在导入模型时生成每个网格的输入 UV,也可以提供自己的数据。
其工作原理如下:
- Unity 可以使用 Mesh.uv3 通道中的数据作为实时光照贴图 UV 计算的输入。 映射到 TEXCOORD2 着色器语义,通常称为“UV2”。
Mesh.uv3
- 如果 中没有数据,但 Mesh.uv2 中有数据,Unity 将回退到使用 中的数据作为实时光照贴图 UV 计算的输入。 用于烘焙光照贴图 UV。通常使用烘焙光照贴图 UV 作为实时光照贴图 UV 的输入数据。
Mesh.uv3Mesh.uv2Mesh.uv2
- 计算结果按MeshRenderer存储在MeshRenderer.enlightenVertexStream中。如果启用了实时全局光照,并且给定的网格渲染器组件有助于全局光照并从光照贴图接收其全局光照,Unity 会自动将数据传递到 TEXCOORD2 着色器中,而不是 Mesh.uv3 中的数据。
MeshRenderer.enlightenVertexStream
注意:如果要在使用实时全局光照的网格中将 Mesh.uv3 用于其他目的,则必须确保使用该网格的所有网格渲染器组件都能从光照探针而不是光照贴图接收全局照明。使用 Mesh Renderer 组件 Inspector 或 MeshRenderer.receiveGI API 更改此设置。
有关更多信息,请参阅生成光照贴图 UV。
Unity 如何计算实时光照贴图 UV
当 Unity 获取每网格输入 UV 并将其处理成每网格渲染器输出 UV 时,就会发生这种情况。
包装
Unity 重新打包实时光照贴图 UV,以确保每个图表的边界在所有方向上都落在纹素中心,然后在每个图表的边界周围添加半纹素填充。这可确保所有图表之间都有完整的纹素空间。
这是因为实时光照贴图的分辨率故意较低,以便实时更新它们成为可能。低分辨率不会影响图形质量,因为这些光照贴图仅存储低频间接光照,但当图表共享纹素时,可能会导致出血。重新打包可确保图表永远不会共享纹素。它避免了这个问题,还允许 Unity 高效地将图表打包在一起。

注意:这种打包技术意味着计算出的 UV 取决于实例的比例和光照贴图分辨率,这就是实时光照贴图 UV 是每个网格渲染器的原因;但是,Unity 会在可能的情况下自动优化这一点,并且使用具有相同比例和光照贴图分辨率的相同网格的网格渲染器共享相同的 UV。
合并
(可选)您可以指示 Unity 在此过程中尽可能合并 UV 图表。这减少了光照贴图的大小,并可以提高运行时内存使用率和性能。
您可以在任何具有网格渲染器组件的游戏对象上启用此优化。在网格渲染器检查器中,导航到光照贴图部分和优化实时 UV。
注意:此功能有时会因原始 UV 映射中的不连续性而出错。例如,故意锋利的边缘可能会被误解为连续表面。如果发生这种情况,请禁用此功能。
由3D建模学习工作室整理翻译,转载请注明出处!