其他
《ReCore》中的全局光照
首先来看一张《ReCore》的截图:
Unity支持多种计算场景全局光照的方法。其中一种是为场景中的表面使用Enlighten来烘培包含全局光照信息的光照贴图。另一种方法是将全局光照信息烘焙到光照探针中。这两个系统可以结合使用来实现场景中的不同效果。光照贴图适用于大的静态对象,光照探针则适用于动态对象。对于大型的室外场景,光照贴图会比光照探针消耗更多的内存。
Armature希望全局光照系统的烘培时间很短,并且烘培光照贴图不增加额外的内存开销。为了实现这个目标,我们开发了一个全局光照系统,它可以通过捕捉探针位置的Cubemap将反射光烘焙到Unity光照探针中。然后光照探针将作为场景中所有对象的全局光照的唯一来源。然而,使用Unity的光照探针系统为大的环境对象提供全局光照时会导致不同对象的光照不一致。
本文将讨论在《ReCore》中使用Unity 5.4的新功能光照探头代理体 (LPPV)解决这个问题的过程,并分享一些最佳实践。想知道什么是LPPV以及如何使用它们?请阅读我们之前的文章。
图1 – 光照探针全局光照
在图1中,红框区域明显接受了不一样的全局光照,看起来不对。为了获得一致的光照,需要一种将全局光照效果平滑地应用到对象表面的方法。LPPV可以解决这个问题。
为每个渲染器附加不同的LPPV是不切实际的,这将导致内存消耗过度,还会导致对象之间的光照不一致。《ReCore》就使用单一LPPV来覆盖关卡的大部分区域,多个渲染器共享相同的LPPV。LPPV作为组件被添加到Light Probe Groups(光照探针组)及自定义脚本,脚本用于将MeshRenderer指定到包含该MeshRenderer的LPPV。我们发现,按照网格模式布置光照探针可以获得较好的结果,并写了一些自定义脚本来自动执行这一过程。这是《ReCore》关卡中典型的LPPV设置的俯视图:
光照探针组和典型的网格渲染器在编辑器中的设置如下:
在艺术家设置好LPPV并烘焙完光照之后,全局光照的结果将更加一致,如下图2:
图2 – 使用了LPPV的全局光照
在图2中,您可以看到红框区域全局光照的作用更加一致。全局光照对大型岩石结构的作用也更加平滑。《ReCore》中的光照是静态的,而且LPPV更新的开销仅限于它们加载的时候。这将使用LPPV的CPU开销维持在了最低状态。而且,传送到GPU的LPPV纹理也很小,只在g-buffer传递时增加了3个纹理样本,总体上说对GPU时间的影响几乎察觉不到。
Unity 5.4和LPPV使得《ReCore》的自定义全局光照解决方案在不牺牲质量的情况下得以解决。敬请关注Unity官方中文社区,了解更多使用Unity开发《ReCore》的其它技术亮点。
Unity官方教师培训即将于10月27~28日在上海举办,火热报名中。
Vision VR/AR Summit Asia 2016门票八折优惠即将截止,不要错过。