[官方教程] RÉPUBLIQUE 开发日志#4 - Lighting

发表于2015-08-25
评论0 1.6k浏览
上一章在基于物理着色中提到的,所有《République》手机版纹理中的光照信息都放置于漫反射贴图(diffuse maps)。在我们转移至Unity 5的过程中,我们对光照通道进行了改变。我们先来说说第一个:从正向渲染到延迟渲染。

正向渲染 VS 延迟渲染

如果说,你是一个从没使用过延迟渲染的移动开发者,推荐你一篇很棒的文章解释了其中的区别: 
http://gamedevelopment.tutsplus. ... -deferred-rendering–gamedev-12342


正向渲染对于移动平台而言是一个更好的选择,即便在电脑端很多情况下你也无需使用动态光照,因为它可以更好的控制半透明排列并支持雾化效果。实际上,我们更换到延迟渲染就是因为我们需要在电脑版本上使用动态光照。从技术上说,我们在游戏中同时使用了正向渲染和延迟渲染-正向用于OMNI 视角(我们的观察模式),延迟用于游戏的其他部分。


所以当我们切换到延迟渲染,由于我们重写了游戏中的每一个光照,所以会损失了部分性能。这时候我们就会采用光照阴影(Light Cookies)


光照阴影(Light Cookies)

光照阴影并不是Unity 5的新功能,但是我们发现它非常有用。基本上它用图形遮罩的方式打光取代大量的阴影计算(在实时光照中最消耗性能的部分)。我们在《République》中使用了聚光灯(spot light)和点光源(point light)的cookie,但方向光源(directional light)cookie是户外场景中更好的选择。


最简单建立一个光照阴影的方式是利用Unity 的反射探测器工具(reflection probes)帮你制作一张。以下是我们的实现方法:


因为我们想要一个非破坏性通道,我们首先创建一个新场景并安放了地板和墙体。拖拽一个需要光照阴影的对象,在这个案例中我们创建了一个有灯罩的台灯。这样做是为了验证光照满足了我们的需求,而验证的方法就是看它如何对环境做出反应。


接下来,我们需要生成一个反射探测器。最简单的方法是选择你的光照并关联一个反射探测器。(如果你还不了解Unity 5的反射探测器,以下会提供更多细节。)如果你位移到0,0,0,它会在光的正上方。 


下一步,我们需要准备好我们的模型去烘焙我们的光照阴影。最佳方式是增加一个黑色的材质到模型中并将背景色设定位白色。通过这个方法,你可以更有效的查找到光照在哪里,因为你已对场景着色。以下我们我们使用的设定:


按下烘焙按钮(bake reflection probes)之后,我们现在生成了一个立方贴图(cube map)可以用来作为光照阴影。就像我们下图所示,我们的光不再运算阴影,同时采用光照阴影打入场景。虽然目前看起来还略显粗糙,但是我们可以通过类似photoshop 的工具轻松导入图片来调适。


经过快速的编辑之后,我们将图片从这样…


变成这样。我们只是模糊化了主区域来柔化阴影。


一旦这张反射底图保存后,我们就完成了光照阴影!他看起来比动态灯光更好,因为cookie 允许精确的渐变。


总的来说,光照阴影非常棒,针对你场景中的静态物件或当你不想耗费额外的性能在实时阴影上。当然,对于会移动的角色和物件,我们还是会使用动态光源运算阴影。


实时全局照明的更多应用


Enlighten 是Unity 光影系统最大的进化。它支持像Unity 4中如同Beast 的光照贴图,但是现在你可以使用实时全局照明(或简称为GI)。 République在这个功能上获益良多。不仅仅给我们的场景带来更精确的渐变,同时也帮助在将电脑端Unity 5完成的内容带回到手机端。


Enlighten 的实时GI允许用户预计算光照数据并进行模拟,在此之前只有动态光照可以做到。这个光照数据参考自场景像是灯光等物件材质中的发光数据,一旦你设定好实时全局照明设置之后,你就可以很容易改变灯光的发光数据,像是亮度和暗度而不在需要用很费的动态光照!


注意:在你启用实时烘焙之前,你需要为你场景中的所有物件设定为”Real Time”。如果你不这样做会增加你的烘焙时间。最佳方案是在你的Lighting设定卡根据网格渲染器进行筛选。如此,选中你所有的几何物件,设置为Auto UV Max Distance值为2,设置UV Max Angle为120。最后,设置你的高级参数到Default-LowResolution 。我们发现这些设定可以大大加速渲染时间。


材质的Emission 值设为0,结果是一个黑暗的环境…


同样的环境,唯一改变了在lihgting选项卡中的着色器Emission 值和indirect lighting。产生了一个很好的实例,即使没有动态光影,你也可以做到这样的质量。


我们在这个场景中的lighting 选项卡中的设定: 


反射探测器(Reflection probes)


反射探测器(Reflection probes)是另一个Unity 5的新功能。在手机上,Camouflaj研发团队自己开发了一个插件,用于调整立方贴图的视差来伪造反射效果。像很多游戏一样,《République》充满着现实世界中的金属以及其他表面的反射,所以物理着色器会和Unity 5反射探测器紧密合作。


所以,这工具大概做了什么事?你可以把反射探测器想象成你游戏中房间或场景的截图,被生成一个立方贴图(Cube map)然后放置在一个球形中。 


当我们在放置反射探测器时,我们将场景分为多个长方体。取决于空间的尺寸和深度,可以评估在空间使用一个或一打探测器。像是玻璃和金属那些反射材质对于反射探测器最有效的目标。如果一个房间百分之百是地毯,反射探测器将毫无作为。在这个案例中,光源变为最重要的因素。 

当我们在建立场景时,有时候我们不希望特定的物件被算进反射探测器所生成的立方贴图中。这个问题可以使用静态标签来解决。就像Unity 4中的Lightmap Static,如果一个物件被标记为Reflection Probe Static,那它才会纳入立方贴图烘焙的范围。


总结


非常感谢Unity 5,我们对于Unity 5把我们的游戏光照功能以及自由度呈现在PC上的效果很满意,我们看到很多巨大的进步。虽然我们也希望这样的画面展现在移动平台上,但考量小画面的可读性屏幕限制会做些调整。我们的美术都相当满意表现出来精确渐变,光影效果等…。现在的问题是,我们如何让他们玩起来就像截图看起来一样棒?我们这样自问之后并开始下一个开发阶段,继续榨取《République》性能的每一点可能性。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引