Unity3D:生成光照贴图 UV

推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生
生成光照贴图 UV
Unity 可以在导入模型时计算烘焙光照贴图的 UV,也可以提供自己的数据。
本页包含以下信息:
- 如何提供自己的光照贴图 UV
- 如何自动生成光照贴图 UV
- 自动光照贴图 UV 生成设置
- 对自动生成的光照贴图 UV 进行故障排除
如何提供自己的光照贴图 UV
您可以在所选的内容创建软件中创作自己的光照贴图 UV。Unity 使用这些 UV 作为其计算的输入。
放置此数据的位置取决于您是为烘焙光照贴图、实时光照贴图还是同时提供两者的 UV:
- 对于烘焙光照贴图,必须在 Mesh.uv2 中放置光照贴图 UV。此通道也称为“UV1”。
- 对于实时光照贴图:
- 如果网格中已经烘焙了光照贴图 UV,并且想要使用相同的 UV 作为实时光照贴图的输入,则无需执行任何操作。Unity 回退到共享烘焙的光照贴图 UV。
Mesh.uv2
- 如果已在 中烘焙了光照贴图 UV,并且想要提供不同的 UV 作为实时光照贴图的输入,请将实时光照贴图 UV(也称为“UV2”)放在 Mesh.uv3 中。
Mesh.uv2
- 如果网格的第二个通道中还没有烘焙光照贴图 UV,则可以选择是使用还是用于实时光照贴图 UV。
Mesh.uv2Mesh.uv3
光照贴图的合理 UV 集应遵循以下规则:
- 应在 [0,1] x [0,1] UV 空间内。
- 在各个图表之间应有足够宽的边距。 有关更多信息,请参阅 UV 重叠结果。
- 不得有任何重叠面。
- UV 中的角度与原始几何体中的角度之间差异不大。
- 除非您希望某些区域具有更高的光照贴图分辨率,否则 UV 中三角形的相对比例与原始几何体中三角形的相对比例之间应该存在较小差异。
如何自动生成光照贴图 UV
可以使用 Model Import Settings 告诉 Unity 为模型自动生成光照贴图 UV。
- 在 Project 视图中选择模型。 Unity 将在 Inspector 中打开 Model Import Settings。
- 在 Model Import Settings 中,导航到 Model 选项卡,然后导航到 Geometry 部分。
- 勾选 Generate Lightmap UVs 复选框。 Lightmap UVs settings 部分显示在 Generate Lightmap UVs 复选框的下方。
- 可选:配置 Lightmap UVs settings 部分中的设置。 请参阅设置以了解更多信息。
- 单击 Apply 按钮。 Unity 会将光照贴图 UV 生成到 Mesh.uv2 通道中。
自动光照贴图 UV 生成设置
启用 Generate Lightmap UVs 后,这些设置会显示在 Model Import Settings 的 Model 选项卡中。
属性: | 功能: | |
---|---|---|
硬角度 | 相邻三角形之间的角度(以度为单位),Unity 根据此角度将其视为硬边缘并创建接缝。 您可以将角度设置为 0 到 180 之间的值。 默认情况下设置为 88 度。 如果将此角度设置为 180 度,Unity 会认为所有边缘都是平滑的,这适用于生物模型。 默认值(88 度)适用于机械模型。 | |
角度误差 | UV 角度与源几何体中角度的最大可能偏差(百分比形式,范围从 0 到 100)。 默认情况下,此值设置为 8%。 此属性控制 UV 空间中三角形与原始几何体中三角形的差异程度。 通常,为避免在应用光照贴图时出现瑕疵,此数值应该相当低。 | |
区域误差 | UV 面积与源几何体中面积的最大可能偏差(百分比形式,范围从 0 到 100)。 默认情况下,此值设置为 15%。 此属性控制 Unity 保留相对三角形面积的程度。 增大此值可以创建更少的图表。 但是,增大该值可能会改变三角形的分辨率,因此请确保产生的失真不会降低光照贴图的质量。 | |
保证金法 | 您是否手动指定 Pack Margin,或者 Unity 是否自动对其进行计算。 | |
手动 | 您手动指定 Pack Margin。 | |
算 | 基于预期的光照贴图分辨率和对象比例,Unity 计算一个足够大的 Pack Margin 以避免 UV 重叠。 | |
包装边距 | 在假设网格占据整个 1024x1024 光照贴图的前提下,相邻图表之间的边距(以像素为单位)。 您可以将此值设置为 1 到 64 之间的值。 较大的值会增加边距,但也会增加图表所需的空间量。 默认设置为 4 像素。 有关更多信息,请参阅 Pack Margin。 此属性仅在将 Margin Method 设置为 Manual 时可见。 | |
最小光照贴图分辨率 | 所有场景中使用此网格的 MeshRenderers 的最小光照贴图分辨率(纹理像素/单位)。 MeshRenderer 的光照贴图分辨率是以下两个属性的组合:MeshRenderer 的 属性和其所在场景的光照设置资源的 属性。 有关更多信息,请参阅最小光照贴图分辨率和最小对象比例。 Unity 使用此信息来计算 Pack Margin。 此属性仅在将 Margin Method 设置为 Calculate 时可见。 Scale in Lightmap Lightmap Resolution | |
最小对象比例 | 在所有场景中使用此网格的游戏对象的最小变换比例。 有关更多信息,请参阅最小光照贴图分辨率和最小对象比例。 Unity 使用此信息来计算 Pack Margin。 此属性仅在将 Margin Method 设置为 Calculate 时可见。 |
对自动生成的光照贴图 UV 进行故障排除
包装边距
为允许过滤,光照贴图包含图表边缘附近的纹理像素中的光照信息,因此应在图表之间始终包含一定的边距,以免在应用光照贴图时出现光渗。
光照贴图分辨率定义了光照贴图的纹理像素分辨率。 光照贴图工具 (Lightmapper) 会扩大光照贴图中的一些图表纹理像素以避免黑色边缘,因此网格的 UV 图表必须至少相距两个完整的纹理像素,从而避免光渗。 使用 Pack Margin 设置可确保几何体的 UV 图表之间有足够的边距。

在光照贴图 UV 空间中,图表之间的填充需要至少两个完整纹理像素,以免出现 UV 重叠和意外光渗。 在此图中,黑色空白表示图表之间的空隙。
最小光照贴图分辨率和最小对象比例
将 UV 图表放置得太近可能会导致在最终的光照贴图中出现图表纹素交叉渗漏。 将图表放置得太远会浪费内存。 对象的理想打包间距取决于分配给它的光照贴图纹素的数量。
Unity 用于 MeshRenderer 的纹素数量取决于 MeshRenderer 的光照贴图分辨率和变换比例。 为了计算合适的边距,Unity 需要知道这些属性的期望最小值。
MeshRenderer 的光照贴图分辨率是以下属性的组合:其所在场景的光照设置资源的 属性和 MeshRenderer 的 属性。 请注意,这意味着同一个 MeshRenderer 在不同的场景中可以具有不同的光照贴图分辨率。Lightmap ResolutionScale in Lightmap
您可以使用 Inspector 查看给定场景中 MeshRenderer 的光照贴图分辨率:
- 在 Scene 视图或层次结构中,选择具有 MeshRenderer 组件的游戏对象。
- 在 Inspector 中,导航到 MeshRenderer 组件的 Lightmapping 部分。
- 打开 Baked Lightmap 折叠菜单。 Unity 在带有 Lightmap Resolution 标签的烘焙光照贴图中显示 MeshRenderer 的光照贴图分辨率,并在带有 Lightmap Object Scale 标签的烘焙光照贴图中显示其变换比例。
角度畸变
以下截屏显示了相同的分辨率,但具有不同的 UV。 第一张图的 Angle Error 较高,结果中包含意料之外的失真。 第二张图使用 Angle Error 默认值 (8%)。 在具有较多三角形的网格中,角度失真会让形状显著失真。


区域畸变
在下图中,两个具有相同参数的聚光灯照亮圆柱体的两侧。 圆柱体右侧的 Area Error 值较高,导致三角形失真并且分辨率降低,从而在光照中产生瑕疵。


由3D建模学习工作室整理翻译,转载请注明出处!