由于现在我们已经从光照预计算中排除了合适的对象物体,我们可以进行减少剩余光照图表数量的工作了。
因为生成光照图表(Charts)是为了包裹静态网格渲染器(Static Mesh Renderer)的光照贴图的UV坐标,所以一个对象所需要光照图表的数量很大程度上取决于物体需要展开的UV Shell(一些片)数量。这就涉及到UV展开的问题,它需要保持几何面上贴图纹素扭曲度与所需足够覆盖贴图Shell数量之间的平衡。
Unity没有我们的介入,它复杂的展开算法也将经常会得到很好的结果;然而有些时候需要提供给我们一点指导,这对于我们理解自动展开算法背后的理论过程是很重要的。
考虑下面的阐述:
![](http://upload-images.jianshu.io/upload_images/7398363-6ab3c5bb7add633b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/7398363-3505414e24b8c307.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://upload-images.jianshu.io/upload_images/7398363-9896b633816a690d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
在上面的图片中,我们展示了三个不同的例子关于一个对象物体上的UV是怎么被映射或展开的。
在第一张图片中,我们可以看到一个大部分没有扭曲变形的结果。我们所使用的带有格子图案的纹理贴图以这种方式被映射:贴图的每一块在它所在的那一面都保持正方的形状。试想一下这个棋盘纹理贴图是一个光照贴图(一个光照应用于对象物体的图片),我们将会得到一个看上去视觉上正确并且没有扭曲的结果。然而,我们需要6个UV shell 去得到这个覆盖范围。结论就是,通过使用Unity的PRGI系统,我们将会得到六张光照图表。不管对象物体的尺寸大小,每个光照图表将会需要一个4*4的最小纹素,这意味着不管分辨率是多少这个对象物体都将会使用至少96个纹素。
在第二张图片中,我们有了一个不同的问题。对象物体的UV纹理坐标已经被映射,以及至于我们有了一个完整的覆盖所有面的UV shell。尽管就需要覆盖对象物体的光照图表的数量而言这将会是最佳的形式,但是它视觉上的效果已经被严重的扭曲了。我们很可能看到应用到物体表面的纹理贴图是扭曲的,对象物体上的各个表面在UV纹理空间也是重叠的 - 意味着如果我们引用了一张光照贴图,对象物体一面的光照可能会错误投射到相反面上。这