从更一般和更概念的角度来看,这是有关我如何处理游戏照明的系列文章的一部分。我在Unity中构建了大部分示例,但这通常适用于任何3D游戏引擎,其中大多数具有类似的照明工具。
我们开始思考了有关光照的文化和概念,在第一部分。在第二部分,我们在关卡设计和可读性方面更有效地处理了光照。然后在第三部分中,我们调查了用于游戏中的三点照明方法。但是,如果我们不能在计算机图形学的约束下真正实现这一理论,那么任何的理论都无关紧要。
传统上,光照是在游戏引擎中计算和渲染较慢或者是“昂贵”的事物之一。考虑一下可见光的科学原理:无数个不同波长的光子以难以想象的速度反弹,以某种方式进入您的眼睛。为了以合理的帧速率进行任何此类操作,游戏引擎必须从策略上以特定的方式去简化光照计算,然后希望玩家不要注意到这些不一致不协调之处。这是“冰箱逻辑” -我们希望玩家能够点头,只要它“看起来正确”即可。
好的,那么在3D游戏引擎中通常是如何照明的呢?
最简单的照明形式是“环境光”,这是恒定的默认照明水平,适用于世界上的每个模型,甚至是阴影中的零件。这一点都不现实,因此环境光通常更多地充当“补光灯”(请参阅第3部分),尤其是对于室外空间,在室外空间,通常使用深色海军蓝来确保阴影不会终止漆黑。
但是环境光会平均地在每个对象上施加平坦平均的光照效果,因此有人可能会说它甚至不符合照明条件,因为它并不能真正帮助我们了解空间表面的深度或拓扑(几何造型),这对于基本的游戏或者是寻路来说,通常是至关重要的。(请参阅第二部分)(“我可以在这座山上走吗?还是说太陡了?”)……要使光看起来像光,必须根据表面的方向进行更改和调整,而标准的环境照明不会做到这一点。
好的,调整角度后,这样看起来变得更好了,现在我们有了一些形状上的差异。
“定向光” 是阳光或任何其它地方的全局光源,从一个给定的旋转方向产生恒定的光照。它会一次性的直接影响整个世界,因此可以放置在任何地方,甚至是墙壁内。只有它的方向很重要。接着,定向灯光将在朝向它的每个表面上发光,并且与太阳/月亮的距离无关紧要。因为大多数场景和游戏世界都只有一个定向光,所以它们通常更像“主光”。(请参阅第2部分)
“聚光灯”是施放在Y向X度范围的锥形灯光。如果你要制作具有很多舞台灯光,嵌入式天花板灯或路灯的游戏,那么你可能会严重依赖聚光灯。聚光灯最常见的用途是高处的聚光灯指向下方,不强调天花板,而是突出凹显出地板。通过这种方式,聚光灯非常适合暗示特定的方向或者是强调特定的位置,无论它们发出的具体光芒如何。
根据你对聚光灯调整倾斜的角度,让玩家并不是很清楚光源实际来自何处(参考第一部分的内容),学会利用这个优势和技巧。
最后,“点光源”是一个看不见的全范围的光球,它以X强度向所有的方向投射光照。通常这种类型常常用于台灯,灯笼或枝形吊灯。点光源确实擅长于吸引给定的光源,因为它们通常必须要靠近它们需要照亮的任何物体,并且附近所有的被投射物体实际上都将指向该光源。(相对于聚光灯,尚不十分清楚光源到底来自何处,我们也不会在乎。)
总体而言,这4种光源类型通常在每个3D游戏引擎或渲染器中都可以找到。它们有点像一个完整的域:
但实际上,这仅仅是一个开始。
直接照明即初始发射时的第一束光线,这就是为什么它被称为“直接照明”的原因,而不是“间接照明”,后者试图模拟光如何反弹或与表面相互作用。在上面最右边的图像中,请注意三角形中的红色灯光是如何被反弹到地板上,立方体中的蓝色如何反弹到墙壁上的阴影中,背景通常只是更亮。这些效果来自周围空间内所产生的光线的反射。传统上,尝试实时计算这些效果并以每秒60帧的速度去渲染你喜欢的角色面部,所需要消耗的性能对于游戏来说非常的昂贵。(在以后的文章中,我将对此进行更多讨论。)
尝试将手举在明亮的光源之前-手轮廓周围的红色条纹称为“次表面散射”,因为光线实际上在皮肤表面下方通过并从血液中反射出来。我们可以说标准的直接照明模型没有考虑到不同的材质或阴影类型,因此这意味着我们必须设计一个系统来解决该问题……眩光或者你的眼睛最终应该以什么样的方式去适应?黑暗还是明亮的空间?我们也必须设计这些系统!
因此,这基本上就是游戏照明的技术历史:试图弥补此基本照明模型中的所有漏洞。因此,四种基本光源类型仅仅是游戏照明的开始。我们还有更多的事情要考虑和实施:
假设你是在制作游戏中某个城市的夜景。
首先,从全局设置开始。我的环境光设置为深蓝紫色,而定向光光源在整个场景上投射出令人惊讶的明亮蓝光。(请参阅 “黑暗好莱坞”:我们只希望它感到黑暗,而不是实际上物体是黑暗的。)
然后开始添加本地灯光。在这种情况下,下面有一个聚光灯和一个微弱的点光源,以模拟光线的反射和溅射。
现在让我们开始添加不是“光”的东西,但是会强烈影响我们对光的感知。
灯具的模型现在具有自发光的发光材质,看起来很明亮。光晕是一个单独的2D精灵,它会根据玩家镜头的距离淡入和淡出。有一个粒子系统在灯光下以锥形喷洒灰尘。我呢吧还对相机应用了光晕,环境光遮挡和色差效果。并且不要忘记天空盒(Skybox),这是“好莱坞黑暗”真正起作用的唯一方法。最后,我在背景中添加了一些雾,以模拟一些黑暗/大气散射,并将场景背景再推回一点。
请记住,灯光的感知亮度取决于两件事:(1)灯光的实际亮度;(2)灯光周围区域的相对亮度/暗度。通常,尝试使不重要的事物变暗或变暗,以便更重要的事物得到更多关注。连续性的环境中的上下文真的很重要!
镜面反射(Specular Reflection),边缘照明和自发光(Emission),投影与阴影,色差,屏幕空间环境光遮挡(SSAO),立方体贴图(Cubemap)和球谐光照(球面映射),高动态范围色调映射(HDRI),眩光和光晕...在游戏引擎中,这些技术可作为单独的功能运行,有选择地启用或禁用该功能以优化游戏以达到某个帧速率或达到某种艺术风格,但在现实生活中,这些都是我们所知道的统一的光照现象的一部分。
最终,玩家只会在那里看到一个光源。但是我们会更好地了解,我们将能够看到我们精心制作的微妙的效果处于一个什么样的系统...
游戏照明不是一个统一的系统。而是,这是所有这些随机的杂物的拼凑而成,希望它们可以一起使用。作为一名设计师,使所有的这些不同的效果看起来是一件连贯的事情是我们的工作内容。
有时候,当你可以创建不带任何可见灯具的浮动光源时,此控件确实非常好。(换句话说,我的照明设计老师说:“我会杀了那种力量。”)但是有时候,所有的这些责任都是令人讨厌的,因为您必须手动添加每个部分并与其他所有部分进行微调,并且可以做很多工作。(这就是为什么许多Triple-A工作室现在已经从关卡设计师那里取消了费时的照明工作,并将这项工作交给了环境艺术家和/或专门的照明艺术家的原因。有关关卡设计历史的详细信息,请参阅作者的GDC2015讨论-关卡设计的历史与未来。)
游戏中的照明不仅仅是照明。这是关于整体形象和你想要建立什么样的情绪的,同时在你的世界中似乎足够的合理,以至于玩家不会经常的“恍然大悟”(发现不合理的地方)。但是这种“合理性”的想法取决于“什么是现实的”的概念-这影响了开发什么类型的新照明技术,这影响了我们的工具集在美学上潜在的可能性,从而推动了更多的“现实主义”等等。
下次,我将分解一些关于什么是“良好的游戏照明”的基本假设,以及我们如何能够超越这些假设(如果有的话)。