Lightmap 烘培注意事项

UVs

通常烘培 Lightmap 需要用到 UV 2 通道作为采样 Lightmap 的坐标。如果没有 UV 2 则将使用 UV 1,但使用 UV 1 通常得到不正确的光照信息。

让 Lightmap 使用 UV 2

为了得到正确的光照信息,需要将采样 lightmap 的坐标展开到 UV 2 中。操作方式有两种:

  • 手动在3D软件中展开到 UV 2 中。需要注意几点是,坐标必须在 [0,1] 之间,UV 不要重叠,碎片之间要留足间隙,这也是使用 UV 1 导致不正确的原因
  • 使用 Unity 生成 UV 2,在 Import 面板中勾选 ‘Generate Lightmap Uvs’。

下面两图展示了未使用 UV 2 (左图6个面的 UV 重叠在一起) 与 使用 UV 2 之后的区别,在 Lightling window 中查看 UV 信息:
Lightmap 烘培注意事项_第1张图片

烘培后提示 Overlapping Uvs 问题

导致此问题基本上是因为 UV 碎片之间的 Padding 过小或 Lightmap 的分辨率又不够,导致采样时有重叠。烘培后提示信息如下:
Lightmap 烘培注意事项_第2张图片
通过 UV Overlap 视图可以看到在 Cube 的边缘产生了 overlap (红色),直接看游戏视图也会发现边缘有明显的 artefact 现象。
Lightmap 烘培注意事项_第3张图片
解决方法通常是调整 ‘Generate Lightmap UVs’ 的高级设置,适当增加 Pack Margin 大小,以及调整 Lightmap Resolution。这两者是产生该问题最大的原因,同时也可以考虑调整 Lightmap Padding 或取消 Compress Lightmaps。
Lightmap 烘培注意事项_第4张图片
调整后并重新渲染,直到 ‘Overlapping’ 的提示消失。这时查看 ‘Baked UV Charts’ 视图可以看到 UV 的间隙比之前更大,同时物体的光照也正常了。

如何加快烘培时间

官方视频 An Introduction to Lightmapping in Unity 与文档 Reducing precompute times from hours to minutes 中有详细介绍。主要几个优化办法总结如下:

  • Lightmap 烘培中太多的 Charts 会消耗大量的计算时间。想要减少烘培时间,一个关键就是减少 Charts 数量。(一个 Chart 相当于光照贴图中一个对象所占的图块,如上图中 Cube 占了6各块)
  • 将不重要的对象在 Lightmap 中缩放,避免浪费过多的 texels。
    • 表面变化少的对象,如大面积的墙体、地板。
    • 只接受间接光的对象。
    • 场景中’瘦’的对象。
  • 将一些小的、瘦的、光照要求不高的对象从 Static 对象中排除掉,并使用 Light Probe 进行光照。如,栅栏、线、管子、树等。
  • 尝试使用 Lightmap Parameters 对场景中物体的光照分辨率及保真度进行微调,减少不太重要对象的光照计算消耗。

你可能感兴趣的:(Unity)