Skip to main content

如何制作光照贴图UV

为对象创建 UV 贴图十分困难。而为光照贴图创建 UV 贴图更是难上加难。但这对视效质量的影响很大。Unity 的自动光照贴图 UV 生成功能在处理复杂对象时效果并不理想,而对于简单对象,它还会在一些非常明显和难看的地方出现接缝。解决办法是什么?我们自己来制作它们吧!

光照贴图 UV 必须完全位于 0-1 范围内,并且其中的任何部分都不能重叠。如果光照贴图 UV 的某些部分重叠,则烘焙结果将被破坏,因为来自重叠区域的光线会相互冲突。如果你在光照贴图中看到了黑色斑点,可能是因为光照贴图 UV 损坏导致的(Bakery 将会在日志中对 UV 重叠向你警告)。

尽量使每个表面的像素密度保持一致。换句话说,确保物体的每个部分都能获得大致相同的光照贴图面积,这样的话如果模型的纹理是棋盘格,那么方格的大小就会一致。Bakery 会在可能的情况下自动抹平光照贴图之间的接缝,但如果两侧没有对齐,最终看起来还是会有损坏。

鉴于这个,我们来看看需要记住的一些要点。

1. 不要重叠 UV。

    像之前说的,如果 UV 重叠,光照贴图将不能正确生成。

2. 保持纹理坐标在 0-1 之间。

    如前所述,如果 UV 在此范围之外,就无法正确生成光照贴图。光照贴图对象的实际分辨率是在 Unity 内设置的。

3. 不要将单独的 UV 岛屿(island)打包得太靠近。

    如果靠的太近,模型的其他部分的阴影将会泄露。为了避免光渗(Light Bleeding),每个 UV 岛屿之间必须保留足够的空间。

4. 尽可能隐藏接缝。

    请确保接缝看上去不明显,因为根据光线贴图分辨率的不同,接缝可能会非常显眼。

5. 如果可以与坐标轴对齐,不要把 UV 对角放置。

    对角的 UV 将非常明显,并且与轴对齐的矩形相比它们的性能很浪费。请尽可能避免这样做。

6. 把 UV 岛屿连接起来并不总是好的。

    一方面说,将岛屿连接起来一般是合理的。这样会减少接缝与难看的缝隙。但是另一方面,如果一个区域的分辨率不够高,网格某一区域的纹理会渗入其他部分,导致不正确的着色。

7. 在曲面角度发生变化的边角处增加像素分辨率。

    如果模型存在斜边,在光照贴图上给斜边区域留出额外的空间可以避免光渗和接缝。

    实际上,特别是对 VR 来说,给硬表面模型的边缘加上斜边是个好主意。这样做会去除了明显很假的如同 CG 一样的超级锐利的边缘...但是同样使得光照贴图视觉效果更好。

    如果你的模型有硬边缘,分割那里的光照贴图看起来是正确的,但是现实生活中的绝大部分物品不会有超级硬的边缘。不过,如果连接那里的边缘,光照贴图会以一种难看的方式渗过它。所以请使用斜面将边缘变得光滑。斜面将使得落下的光平滑地穿过模型,增加更多可感知的细节和自然的外观。

笔记:

http://tsumikiseisaku.com/blog/unity-japan-office-2/

这条信息主要基于这条日文博客稿件。检查原文,了解 Unity 日本办公室项目的建模过程和一些精美的演示图片。

* https://docs.unity3d.com/Manual/LightingGiUvs-GeneratingLightmappingUVs.html

有关生成光照贴图 UV 的 Unity 文档,展示了更多有关自动生成过程如何失败的细节信息。

* https://docs.unity3d.com/Manual/ProgressiveLightmapper-UVOverlap.html

Unity 的有关如何调试 UV 重叠及其导致的问题类型的页面。

* https://docs.unity3d.com/Manual/GIVis.html

Unity 的有关各种可能会显示光线贴图的问题的可视化模式的页面。