您可以自行为网格生成光照贴图 UV,或者 Unity 可以自动生成它们。
您可以在所选的内容创作软件中编写自己的光照贴图 UV。必须将光照贴图 UV 放置在网格的第二个 UV 通道中。
光照贴图的合理 UV 集应遵循以下规则:
可以使用 Model Import Settings 告诉 Unity 为模型自动生成光照贴图 UV。
启用 Generate Lightmap UVs 后,这些设置会显示在 Model Import Settings 的 Model 选项卡中。
属性: | 功能: | |
---|---|---|
Hard Angle | 相邻三角形之间的角度(以度为单位),Unity 根据此角度将其视为硬边缘并创建接缝。您可以将角度设置为 0 到 180 之间的值。默认情况下设置为 88 度。 如果将此角度设置为 180 度,Unity 会认为所有边缘都是平滑的,这适用于生物模型。默认值(88 度)适用于机械模型。 |
|
Angle Error | UV 角度与源几何体中角度的最大可能偏差(百分比形式,范围从 0 到 100)。默认情况下,此值设置为 8%。 此属性控制 UV 空间中三角形与原始几何体中三角形的差异程度。通常,为避免在应用光照贴图时出现瑕疵,此数值应该相当低。 |
|
Area Error | UV 面积与源几何体中面积的最大可能偏差(百分比形式,范围从 0 到 100)。默认情况下,此值设置为 15%。 此属性控制 Unity 保留相对三角形面积的程度。增大此值可以创建更少的图表。但是,增大该值可能会改变三角形的分辨率,因此请确保产生的失真不会降低光照贴图的质量。 |
|
Margin Method | 您是否手动指定 Pack Margin,或者 Unity 是否自动对其进行计算。 | |
Manual | 您手动指定 Pack Margin。 | |
Calculate | 基于预期的光照贴图分辨率和对象比例,Unity 计算一个足够大的 Pack Margin 以避免 UV 重叠。 | |
Pack Margin | 在假设网格占据整个 1024x1024 光照贴图的前提下,相邻图表之间的边距(以像素为单位)。您可以将此值设置为 1 到 64 之间的值。较大的值会增加边距,但也会增加图表所需的空间量。默认设置为 4 像素。 有关更多信息,请参阅 Pack Margin。 此属性仅在将 Margin Method 设置为 Manual 时可见。 |
|
Min Lightmap Resolution | 所有场景中使用此网格的 MeshRenderers 的最小光照贴图分辨率(纹理像素/单位)。MeshRenderer 的光照贴图分辨率是以下两个属性的组合:MeshRenderer 的 Scale in Lightmap 属性和其所在场景的光照设置资源的 Lightmap Resolution 属性。有关更多信息,请参阅最小光照贴图分辨率和最小对象比例。 Unity 使用此信息来计算 Pack Margin。此属性仅在将 Margin Method 设置为 Calculate 时可见。 |
|
Min Object Scale | 在所有场景中使用此网格的游戏对象的最小变换比例。 有关更多信息,请参阅最小光照贴图分辨率和最小对象比例。 Unity 使用此信息来计算 Pack Margin。此属性仅在将 Margin Method 设置为 Calculate 时可见。 |
为允许过滤,光照贴图包含图表边缘附近的纹理像素中的光照信息,因此应在图表之间始终包含一定的边距,以免在应用光照贴图时出现光渗。
光照贴图分辨率定义了光照贴图的纹理像素分辨率。光照贴图工具 (Lightmapper) 会扩大光照贴图中的一些图表纹理像素以避免黑色边缘,因此网格的 UV 图表必须至少相距两个完整的纹理像素,从而避免光渗。使用 Pack Margin 设置可确保几何体的 UV 图表之间有足够的边距。
在光照贴图 UV 空间中,图表之间的填充需要至少两个完整纹理像素,以免出现 UV 重叠和意外光渗。在此图中,黑色空白表示图表之间的空隙。
将 UV 图表放置得太近可能会导致在最终的光照贴图中出现图表纹素交叉渗漏。将图表放置得太远会浪费内存。对象的理想打包间距取决于分配给它的光照贴图纹素的数量。
Unity 用于 MeshRenderer 的纹素数量取决于 MeshRenderer 的光照贴图分辨率和变换比例。为了计算合适的边距,Unity 需要知道这些属性的期望最小值。
MeshRenderer 的光照贴图分辨率是以下属性的组合:其所在场景的光照设置资源的 Lightmap Resolution
属性和 MeshRenderer 的 Scale in Lightmap
属性。请注意,这意味着同一个 MeshRenderer 在不同的场景中可以具有不同的光照贴图分辨率。
您可以使用 Inspector 查看给定场景中 MeshRenderer 的光照贴图分辨率:
以下截屏显示了相同的分辨率,但具有不同的 UV。第一张图的 Angle Error 较高,结果中包含意料之外的失真。第二张图使用 Angle Error 默认值 (8%)。在具有较多三角形的网格中,角度失真会让形状显著失真。
在下图中,两个具有相同参数的聚光灯照亮圆柱体的两侧。圆柱体右侧的 Area Error 值较高,导致三角形失真并且分辨率降低,从而在光照中产生瑕疵。
在 2018.1 版中添加了渐进光照贴图 NewIn20181
计算 Pack Margin 添加于 2020.1 NewIn20201