上个时代的3A游戏,使用的是什么光照技术?| GAMES104实录 - 现代游戏引擎:从入门到实践

本期为GAMES104《现代游戏引擎:从入门到实践》视频公开课文字实录第16期。本课程由GAMES(图形学与混合现实研讨会)发起,游戏引擎技术专家王希携手游戏引擎一线开发者共同研发。

课程共计22个课时,将介绍现代游戏引擎所涉及的系统架构,技术点,引擎系统相关的知识。为配合学习实践,课程组在 GitHub 上开源了小引擎Piccolo,上线1个月即获得了2900+star, 累计下载量已超过20000+。

以下内容为公开课视频转文字版本,为阅读通顺,有删减

01「预计算的全局光照」

人类对自己的不满足也是推动技术不断进步的动力之一,很多从事3A游戏开发的人员都在不断突破自己,挑战自己,才使得游戏行业的技术不断进步,才使得大家能够体验到越来越优秀的3A大作。(获取本节完整课件,可公众号后台回复关键词:课件)

最近20年,特别是随着可编程硬件(Shader)的出现,游戏画质产生了突飞猛进的发展。特别是对于3A游戏行业来说,画面品质和一般游戏的差距越来越大。以《刺客信条》系列作品为例,第一代刺客信条游戏发布于2007年,当时的画面表现令很多人痴迷。在过去的十年中,随着《刺客信条·大革命》、《刺客信条·起源》、《刺客信条·英灵殿》的发布,游戏的画面表现也越来越好。今天我们介绍的仍然是上个时代的3A游戏效果,而并不是最近几年的新技术,因为最新的技术太复杂了,我们会在最后稍作介绍。

下面我们介绍5到10年前游戏行业中所使用的技术。根据上文所描述的思路,我们对于光照、材质和阴影效果依次进行改进。

在之前的方案中,我们将光照简化成了环境光。随着硬件的发展,我们可以考虑使用更复杂的算法,对光照进行预计算,以得到更精确的光照信息。因为对于游戏场景来说,90%的物体都不会移动,而太阳的角度也是固定的,因此我们可以通过空间换时间的思路,预先计算出光照信息。

大家可能听说过全局光照(Global Illumination)。对于来自四面八方的光照,我们可以将其分解为直接光照和间接光照。我们需要将这两种光照效果都预先计算出来。首先我们解释一下全局光照为什么这么重要:

上图中是一个白天的室内场景,如果室内没有灯光,并且我们只计算直接光照,我们看到的就是左图中的效果。我们可以通过一些技巧进行处理,比如给场景加上全局环境光,但这样会导致场景会统一变亮,看上去非常具有平面感。如果大家回想一下15-20年前的游戏,特别是一些网游,当进入到室内场景时,就会感觉室内场景特别有平面感,而几乎感受不到什么光照效果。这是因为这些游戏没有加入全局光照算法,只有全局光照才能模拟出这种光照效果。即光线照射到地面上,再从地面上反弹出来,又将天花板和墙壁照亮。这样的画面才具有真实感。因此,全局光照对于这种真实感的刻画非常重要。

这时我们的挑战是什么呢?我们所得到的全局光照信息,实际上是一个在球面空间的采样。我们可以将球面像地图一样展开成一个贴图。然而,这种贴图的数据量非常大,即使我们可以保存整个场景的光照信息,当我们为材质计算光照信息时,仍然需要进行积分运算。当然,我们可以使用最粗暴(比如蒙特卡罗)的方法,在球面上撒无数个采样点,依次计算每个采样点的光照信息,以进行近似。在绘制时,对于屏幕上的每个像素点,当对其进行着色时,我们都需要对这个球状的光照贴图进行采样,然后再进行累加。这实际上是一个卷积运算,计算量十分巨大。因此,我们需要一种方法,能够实现快速的积分运算。这就是摆在我们面前的挑战。

下面我们回顾一下GAMES101和GAMES202中的相关内容(编者注:信号与系统和傅里叶变换)。傅里叶变换可以将一个连续信号分解成多个不同频率的周期信号的累加。而全局光照信息可以看作是空间上的一个连续信号,我们可以通过傅里叶变换将其变换成频域中的多个不同频率信号的累加。然后截取前几项(越往后的项影响越小),就完成了对空间中的信号的近似表达。如下图所示:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值