本期为GAMES104《现代游戏引擎:从入门到实践》视频公开课文字实录第21期。本课程由GAMES(图形学与混合现实研讨会)发起,游戏引擎技术专家王希携手游戏引擎一线开发者共同研发。
课程共计22个课时,将介绍现代游戏引擎所涉及的系统架构,技术点,引擎系统相关的知识。为配合学习实践,课程组在 GitHub 上开源了小引擎Piccolo,上线1个月即获得了2900+star, 累计下载量已超过20000+。
以下内容为公开课视频转文字版本,为阅读通顺,有删减
01「大气散射理论」
天空和云层对于营造一款游戏的氛围起到了很大的作用,比如下图中的《地平线:西之绝境》和《艾尔登法环》中的游戏画面。艺术家们特别喜欢利用天空和大气来刻画游戏氛围,以影响玩家的情绪。这当中存在着两个元素,一个是天空,一个是云层。天空和云不能混为一谈,因为天空是一个抽象的球,在游戏中,我们可以认为天空的边界位于大气层上限处,而大气层外属于太空。但云层离地面很近,大约只有几百米到上千米。当云层移动时,我们会感觉到云层巨大的体量感。因此,天空和云需要使用截然不同的表达方法。
还有一个效果是雾效,我们会在后处理效果中介绍雾效,因为雾效不只是天空中的大气现象的一种表达,也是一种非常重要的由艺术家控制的效果。对于游戏引擎开发者来说,天空和大气效果的实现十分麻烦。
我们先介绍大气效果的实现。下图是《刺客信条》中的截屏,画面十分壮丽。传统意义上的大气会随着日出日落而发生变化,当太阳位于不同角度时,大气会有各种各样的颜色变化。
当我们无法求解大气效果时,我们可以采用拟合方法进行处理。这类似于我们前面介绍材质时提到的,不管实际效果的具体物理意义是什么,我们可以不必知道。而是直接通过观察,使用一个模型进行拟合,Blinn-Phong就是这样的一个拟合公式。使用拟合方法实现大气效果有点类似于天空大气效果中的Blinn-Phong方法,我们不用关注底层的具体原理,直接套用公式即可。
拟合方法需要两个参数,一个参数是天顶角(Zenith),即太阳光与观察者天顶方向所形成的夹角。天顶角的取值范围为
。还有一个参数是观察高度和太阳的夹角,即下图公式中的。有了这两个参数之后,我们可以计算出一个解析解,从而得到天空中某点处的颜色。
图中给出了一个“Ground Truth”(编者注:Ground Truth一般指基准真相,即有已有的、可靠的测量方式得到的测量值,用来作为基准),即使用真正的摄影测量方法,记录了天空中的颜色。最后我们就得到了游戏中的结果,这种方法简单粗暴,而且效果不错。
对于一款中低品质的手游,这种方法也可以接受。这种方法的好处就是非常简单,但也存在一定的缺陷。首先,该方法只能实现观察者位于地表处的效果,而无法实现玩家从太空中飞到大气中的大气效果。其次,该方法的参数都是固定的,无法改变。