在这篇客座博文里,Alt Shift的首席程序员Christophe Sauveur解释了《Cring Suns》冷酷深空世界的打光方法,并提供了可供参考的渲染提示与资源。
在《Srying Suns》中,玩家大部分时间都会在上图的指挥中心里度过。除了游戏的角色外,我们的另一个主要卖点就是外太空:深邃、变幻莫测的外太空。这是《Crying Suns》里必须显得冷酷的元素。为此,我们花了大量时间来调整各个环境的渲染,直到对这款多平台游戏感到满意。
《Crying Suns》对太空的刻画并非完全符合物理学。《Crying Suns》有着独特的美术方向,作为2D游戏也有一定的表达限制——即玩家能在屏幕上接收到什么。
人们通常会在一片漆黑的背景上贴上几点白点用于表示星空。也这是为什么大部分的太空船——无论是科幻的还是真实的——都是白色的。这样一来,飞船首先便于分辨,可产生更好的电视效果。其次,白色有助于反射光线和热量,黑色材料则容易吸收。
然而,我们希望在《Crying Suns》里打造更为阴沉、黑暗的世界,所以白色并不理想。即便如此,我们摄像机的镜头会直接指向各个星系的星星,其他星体只会在背面受光,面向镜头的部分多为黑色的。所以我们得找到一种解决方案来解决该问题。
尽管我们从一开始就有着明确的美术方向,但实现的过程却经历了一次又一次迭代。渲染的每条通道都有着独特的用途。
首先,我们渲染出不透明物体,如下图的太空站(左侧)和“Neo-N”魔方(右侧)。
其次,我们在背景加上天空盒。我们本来也有其他的方法来做背景,但Unity的背景就是这么做的。
之后,我们加入透明物体的渲染,特别恒星与行星。
到这里,“常规”渲染部分就结束了。剩下要做的就是泛光(Bloom)这种后期处理效果。
一般到这个时候,我们的制作人及编剧朱利安·科崔特(Julien Cotret)就会叫了:“泛光?你疯了吧?还是想让我去世?选一个吧。泛光还是我?!” 但是有了泛光谁还要制作人呐,是吧?
总之,到这里还没做完。游戏看起来很棒,右侧的Neo-N魔方形状分明,但左侧的太空站好像消失在了黑暗的太空。总体的氛围仍有缺失。
为了继续改进,我们需要突显出太空站,使得太空站要显得比远处的星星更近。即便效果不完全符合物理,但看起来仍是太空的样子。这种效果称为“太空雾霾”(space haze)。
我们设计了一种发光效果,让光线在触碰到微型粒子时四处散射,产生类似于霾的东西。就我所知,太空里并没有什么雾霾,不过它看起来特别酷,对构图也很有帮助,还能给站点增添深度。
在远处查看同样的效果。
那怎么做这种雾气呢?这个效果类似于屏幕空间里的迷雾,屏幕离恒星中心越远,雾气也就越少。
雾气的解决方案是在后期才提出的。首先,我们把一张巨大的展示板(billboard)精灵关联到主要的恒星上,产生一种模拟的发光效果,但这个效果没那么有效,无法影响到天体本身。
在上图,可以看到恒星发出的光会为背后的天空盒染色,但飞船和太空站并不受其影响。他们朝向太阳的一面会更红,但剩余未受光的表面依旧是黑色的。
另一方面,如下图所示,雾气效果同时影响了背景和物体本身。
当然,游戏包含了多个位置(靠近太阳、远离恒星、参与战斗、遇见首领等等),我们必须处理不同的配置,并随玩家穿行与多个地点时无缝地切换。
若你想在自己的项目中重现这些效果,有两种东西最重要:深度纹理和后处理路径。我会详细解释通用渲染管线(URP)与内置渲染管线的制作流程。
看呐!