UDN
Search public documentation:

LightMapUnwrappingCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 主页 > 静态网格物体 > 展开光照贴图的 UV
UE3 主页 > 场景美工人员 > 展开光照贴图的 UV

展开光照贴图的 UV


有关创建光照贴图


光照贴图可能是场景美术制作中最难的环节。我们依靠它们可以得到光照和阴影清晰可见的细节。它们必须是唯一地展开,这样模型中每个部分才会有属于它们自己的空间来接收亮和暗信息。

重点是记住光照贴图分辨率与贴图 UV 的分辨率相比是微不足道的。还有一点也很重要,那就是要了解关卡需要进行优化的地方越多,关卡设计师会将光照贴图的分辨率向下调整得更低,对那种较小的对象甚至使用的是 8x8 或 16x16 分辨率。这个趋势需要我们在每部分光照贴图 UV 周围留出大量‘padding(间隔)’,这样暗的区域不会渗开进入到亮区域中, 会破坏游戏中正确的阴影幻觉效果。

有 3 种创建光照贴图的方法

  • BOX UNWRAP(长方形展开)

通常这是最可靠的光照贴图展开方法,因为大多数环境模型都是互相结合或重复的方块形来创建一个结构。一个紧凑的网格物体(全部连结在一起,没有分离的元素)通常是构建结构非常有效的方法,它可以使光照贴图展开的效率更高,因为您只可以展开连接在一起的大部分设计。

这种方法非常实用,因为光照贴图的分辨率是这样低,如果它是作用在一大块上,那么从亮到暗的渐变处理会更加容易,当它在一些零散的部分上展开时,需要在这些块之间留出更多的间隔,这样光照才会正确。

这样通常会促使需要更高的光照贴图分辨率,而我们必须尽我们所能努力避免这种情况发生。有时没有办法避免分辨率更低的需求,我们必须添加比我们想要补偿的间隔还要更加多的间隔。

  • PLANAR UNWRAP(平面展开)

这种方法最适用于像 BSP 类型墙壁这样带有一些倒角或挤压的简单平面设计。它还适用于大型建筑物表面部分,例如,公寓大楼。使用连续网格物体对平面展开的帮助很大,因为它更多涉及的是展开网格物体 UV 并将覆盖范围手动添加给游戏中光照不正确的倒角。

有时候它需要反反复复来回进行操作,但是经验告诉我们,要确保展开的水平方向空间比垂直方向更大,因为阴影通常是从侧面略高一点的角度投射过来的,而不是从正上方直接投射下来的。

所以水平方向要为较尖锐的阴影信息提供更多的空间,因为关卡设计师光照选择的发展趋势是创建比他们使用自上而下光照的情况下可能生成的阴影更有生动的阴影。

  • CYLINDRICAL UNWRAP(圆柱形展开)

环境中除长方形和平面形状外,大多数其他形状都分解为圆柱形。圆柱形可以很好地弥补那些既有侧面同时又有正面但是现在是背面部分的设计,如若不然我们会使用 Box Unwrap(长方形展开)方法。

示例


BoxUnwrap1.jpg

这是一个紧凑的网格物体,所以它比较适于长方形展开,只要从水平方向展开,尽可能多地使用光照贴图分辨率。将中间那张图片中突出显示的底面从整个模型中分离出来,因为它们几乎始终会渲染为黑色,如果将它们与这个 UV 的其他部分连接在一起,那么模型中原本不应该暗的地方都会因为它们的渗开而变暗。

这对于在最下面图片中显示的分离出来的顶面也同样适用,它们一直都是亮的。最上面的图片显示的是这个贴图 UV。

BoxUnwrap2.jpg

这种尽量在安全情况多连接的方法使我们得到了近乎完美的游戏中光照贴图,分辨率为 32x32。这里根本没有缝隙,所以在本不该暗的地方没有难于察觉的暗线。

BruteForce.jpg

有时候您需要用力将这些部分强制弄在一起。使表面看上去整洁同时不会对光照贴图产生影响是值得的。按照 1 比 1 比率拉伸对于光照贴图所产生影响实际上并没有覆盖率所产生的影响大,所以除 1 比 1 等级外太小的区域由于渗透问题都不能进行正确的光照,但是 1 比 1 等级是覆盖率的两倍看起来效果不错。在这里您还会看到我分离了非建设性破口的内部,因为它们通常都是暗的,而我们需要避免从这些破口中渗开到外部去。

Facade1.jpg

像这样的大型建筑物正面部分,使用 Planar(平面)展开效果很好。这个网格物体是紧密接邻的,这对我们要在这里进行的工作有所帮助,但是同样的屋架可以与其中包含一些垂直或水平元素的网格物体结合在一起使用。只要您放置在光照贴图 UV 上的最具代表性的内容与这个低多边形匹配,即使是需要一些间隔以防有些侧面部分在与其他部分堆放在一起时渲染为黑色也一样可以正常工作。

Facade2.jpg

您可以在这里看到这个相接的网格物体布局允许我更加轻松地使用镜像低多边形网格物体的方法展开 UV。我还会将这些侧面,顶部 & 底部盖子从主要部分中移出来,允许出现渗透问题,我保证在它们周围留有间隔,主要部分和顶部的窗户都具有相同的间隔量。

有时候您的设计会违反这些简单的设计规则,如果设计中包含大量的带有一些单个元素的非建设性空间,那么我们需要拆分光照贴图并添加更多的间隔。

NegativeSpaces.jpg

您可以看到在将栏杆固定在一起的相交垂直部分上有一些非常明显的弯曲,我们只是在这 3 块中强制地将这 2 个侧面与中间 & 中央部分弄在一起。

对于圆柱形栏杆内部,我们将其中一个面单独分离出来,同时将另一个面赋给内表面和外表面。完成上述操作后,在 3/4 这些区域中遮蔽着光滑的光照贴图,而且另一个面上光照贴图中只有一个裂缝,由于它顶上有金属光束直射,所以看不到这个裂缝。

railingame.jpg

有些设计可能与我们通常所进行的常规操作不同,例如下面这个设计。

Fragmented.jpg

当单个元素较多的时候,我们没有其他选择,只好提高贴图分辨率,否则我们将会浪费很多光照贴图空间,因为每个部分之间都有足够的间隔,这样做在游戏中看起来效果会很差。所以我计划将光照贴图分辨率提高到 128x128,不过我知道效果仍然不会完美,会有一些渗透现象,幸运的是这种现象并不严重不会破坏这个对象。

GirderINGAME.jpg

有时将模型投射为一个近似平面然后展开 UV 会很容易,因为各个部分很整洁清晰相连,这样可以轻松地将它们连接在一起,以下面这个模型为例。

easy.jpg

这个设计肯定就是一个圆柱形的盖子加上一个平面的底座,所以我使用这 2 种基础的方法展开这个 UV。地面的那部分中心很容易就可以在 Z 轴上进行平面展开,然后应用放松修改器,微量调整选项使所有内容都不会因为倒角上的 1:1 比率问题所获得的覆盖太小。

中间部分与底座部分一样结构清晰明了,我直接强制手动使用圆柱形展开,获得了最大的覆盖率以及使用空间。通常,与低多边形网格物体的每个小平面的 1 比 1 表现形式相比,我们更加关注的是覆盖率。我在向上的 Z 轴上对顶部狮头运动部分的下部表面进行了平面展开,然后使用松弛值进行确认。

这样分离模型有一个好处就是可以将缝隙放在低多边形设计中真实的缝隙部分,所以这里的光照中有一点裂缝,感觉很自然。在有明显深度凹陷或裂缝的地方分割您的光照贴图 uv 是选择在哪里分割部分的理想经验法则,这种方法有助于表现游戏中模型并降低它的等级。

FountainINGAME.jpg

光照贴图坐标索引


默认情况下,在为静态光照生成光照贴图的时候将会使用静态网格物体的第一组 UV(索引 0)。这意味着用于将材质应用于这个网格物体的同一组坐标也可以用于光照贴图。这通常不是很理想。其中一个原因是用于生成光照贴图的 UV 需要是唯一的,也就是说网格物体的每一个面必须不能与 UV 空间中的其他任何面重叠。

针对这个问题,这个原因应该十分明显。如果这些面共享同一个 UV 空间,与这个空间对应的光照贴图部分将会被应用到这两个面上。它对于漫反射和其他贴图而言可能非常重要,因为它会使每个面的贴图分辨率更高。但是,它将会使光照不正确。静态网格物体有一个名为 LightmapCoordinateIndex 的属性,它可以使用指定的一组 UV 生成光照贴图。通过将这个属性设置为指向一组唯一的 UV,然后为光照贴图进行正确设置,静态网格物体可以享用最好的两个世界: 漫反射贴图具有较好的贴图分辨率,光照贴图产生精确的光照。

相邻 UV 以及间隔


其中具有相邻 UV 的三角形组被称为 UV 图表。

uvs_charts.jpg

UV 图标之间必需有间隔以防渗透失真。但是,光照贴图 UV 布局的边周围不需要有间隔,因为Lightmass自动在边周围进行间隔就可以防止渗透失真。 注意,当您设置 UV 图表间的间距时通常需要 4 个贴图像素避免所有的渗透失真,因为 DXT 压缩会对 4x4 贴图块产生作用。

uvs_padding.jpg

这意味着对于分辨率为 32 的光照贴图来说,UV 图表之间的间隔应该是整个 UV 空间的 12.5%。但是,记住在 UV 图表之间放置的间隔越多,在分辨率较高的光照贴图上浪费的光照贴图内存越多。如果您可以使静态光照 UV 尽量紧凑,那么您所得到的结果会更好。这将会减少需要的间隔量,同时会使分辨率增加。在执行 Lightmass 之前或在大部分依赖顶点光照的时候,静态网格物体可能已经通过单独对元素进行建模并将它们组合到一起创建完成。

old_mesh_seperate.jpg

不过这没有依赖于光照贴图并使用 Lightmass 时理想。它无法得到好的紧凑的光照贴图 UV。

old_mesh_uvs.jpg

而您最终将会得到一个破裂的光照贴图,其中的多边形在模型内部被渲染为黑色,渗开到网格物体的另一部分。另一个潜在缺点是像它这样也依赖于自动展开可能会引发相同的问题。

old_mesh_ingame.jpg

为光照贴图创建网格物体并展开它们的 UV 的最好方法是将整个网格物体建模为一个相邻的元素并手动展开这个 UV。

new_mesh_contiguous.jpg

这样会得到紧凑的光照贴图 UV,没有缝隙,同时提高光照贴图的利用率。

new_mesh_uvs.jpg

最终结果是一个被正确照射的网格物体,没有任何渗透失真现象。

new_mesh_ingame.jpg

这个方法还有一个优点是它同时可以逐渐减少模型所需的三角形数量。

old_mesh.jpg new_mesh.jpg