在5月底的直播课程中,我们为大家介绍了Unity 2018中最新的渐进光照贴图技术,本文将由Unity技术经理成亮带领大家对这次课程的内容进行回顾和梳理。

下面是直播课程视频,时长1小时,请在Wi-FI模式下观看。https://v.qq.com/x/page/l0672d8nwuk.html

全局光照(GI)介绍
在构建场景的时候,为了实现逼真的光照效果,我们需要借助全局光照技术。所谓全局光照就是就是把从物体上反弹的间接光也显示出来,而不仅仅是显示作用在物体上的直接光照。

从下面二张图的对比,我们可以看到,由于全局光照的作用整间屋子变得明亮了很多。

134348hpzrtlimbzpmmmmm.jpg
左图: 直接光 与 右图 :全局光照(直接光 + 间接光)

Unity支持三种类型的全局光照,分别:实时、混合和烘焙。在光照设置面板中可以控制全局光照是否开启,Realtime Global Illumination开关控制Realtime光源的实时光照,Baked Global Illumination控制Mixed和Baked二种光源。如下图所示。

134348ys5ns55s99zmtmjh.jpg

实时全局光照支持实时改变光照的属性以影响间接照明,例如:调整光照强度。但是由于增加了内存,和计算开销,仅适合中高端的PC及Console游戏。因此,为了兼顾性能和效果,我们经常使用的是烘焙和混合模式的全局光照。具体而言就是把照明效果提前计算出来,并保存到一张贴图中,称之为光照贴图(Lightmapper),在运行时物体直接采样光照贴图的颜色作为照明信息。

针对不同的混合模式,光照的计算有所差别,下文将进行说明。首先我们还是先来了解一下本文的重点渐进光照贴图。

渐进光照贴介绍
Progressive Lightmapper渐进光照贴图作为Unity新一代的光照烘焙技术,在Unity2018.1中正式去除Preview标签。相较于之前的光照烘培模块,该模块从性能和流程上都有比较大的提升。

在流程方面,相比于要等到烘培完成才能看到最终效果的传统方式,使用渐进光照贴图,可以让我们立即在场景视图中看到烘培过程。从最初带有噪点的效果,然后快速迭代,并呈现最终的烘培结果。这样的方式,可以快速的测试和调整场景中的光照效果。此外,在最新的Unity 2018.1版本中,该模块还优化了大场景烘培时的内存占用,并提供了Custom Bakes API给用户以提升模块的扩展性。

134355zdjz6bbb58it8zb5.jpg

在场景窗口中的UV Charts和光照设置窗口的Baked UV Charts中,我们可以看到模型到光照贴图的UV 映射。

134357ladwwg4g443ag48j.png

光照贴图分辨率
在上图的场景窗口中,我们可以看模型表面显示了黑白相间的方块。每一个方块就对应于光照贴图上的一个像素。场景中每一个单位包含多少个方块(Texels)就是光照贴图的分辨率,分辨率越高,效果就越好,当然就会占用更大内存和更多的烘焙时间。

分辨率可以在光照设置窗口中进行调节,也可以在单个模型的Mesh Render组件上调节。

134357bujb5riscro9iepu.png
光照窗口调节分辨率

134357wijb9zii6giovl68.png
Mesh Render组件上调调节分辨率

渐进光照贴图相关参数
在使用渐进光照贴图的时候,我们也可以通过调节相关的参数来获取最佳的效果。
134357cb11ppd22o5w14f1.png

Prioritize View
选中该项可以在烘焙光照贴图时优先烘焙场景窗口中显示的区域。

Direct Samples 和 Indirect Samples
渐进光照贴图使用了光线追踪技术,Direct samples表示从纹理像素发射到光源的采样射线数量,Indirect Samples表示从纹理像素发射到四周的采样射线数量。

134358p9qmmfssi3qummsq.jpg
Direct samples(左)与 Indirect Samples(右)

采样射线的数量越多,噪音越少,光照贴图的质量就越好。

134358jbnty1jktka1i0s8.jpg
Indirect Samples 10(左)与 Indirect Samples 100(右)

在Indirect Samples为10的时候,在红色的墙上,我们可以很明显看到噪点。

Filtering
作为烘焙过程的后处理,对噪点进行模糊处理。目前主要有二种类型:Gaussion 和 Eage-Aware A-Trous。

134359bppwh3epow3kewhk.png
No Filtering(左) Gaussion(中) A-Trous(右)

从上图中我们可以看到,采样了Gaussion过滤后,椅脚的阴影噪点基本消失了,但是由于阴影过于模糊,显得椅子好想悬在空中。而才用A-Trous过滤,阴影的边缘明显清晰很多,效果更加真实。

混合光照模式
在完全烘焙的情况下,对于静态物体而言,所有的直接光和间接光信息都被烘焙到了光照贴图上。虽然是性能消耗最低的方法,但是代价是损失了一些效果。因此Unity提供了混合光照模式,以达到效果和性能的平衡。

目前有三种混合模式可以选择,如下图所示。

134359iqk1kfj06aflj318.png

Baked Indirect
这种模式只烘焙间接光,直接光照和阴影都实时计算。

134359dfefmlmf3sfh5z5t.png

我们可以看到物体的表面高光以及阴影的实时变化,但是相对混合模式来说也是性能消耗最高的。

134404niakur8zkmizuz83.png

在下面的场景中,我们可以看到桌子的阴影是烘焙的,因此这种模式相对于Baked Indirect减少了一些计算开销。

134404evls0v922rfrsfxg.png

动态物体可以接收直接光,但是只会投影主方向光的阴影。

134410iwgoqgwowv5ygwov.gif

总结
上面就是这次直播的主要内容,希望大家能够通过这些介绍对渐进光照贴图的功能有一个初步的了解。如果大家要了解更详细的操作过程,大家也可以观看我们的课程录播。

另外,更加值得期待的是,目前我们正在开发基于GPU的Progressive Lightmapper,会极大的提升烘焙效率,预计会在今年的版本中发布。更多Unity官方技术课程尽在 Unity官方中文论坛(UnityChina.cn) ! 直播, 课程, 光照, 贴图 本主题由 admin 于 2018-7-27 02:56 解除置顶锐亚教育

锐亚教育 锐亚科技 unity unity教程