单机游戏 > 塞尔达传说:荒野之息专区 > 塞尔达传说:荒野之息新闻 > 《塞尔达传说:荒野之息》超长干货技术分析

《塞尔达传说:荒野之息》超长干货技术分析

2019-08-09 来源:未来游戏研究所 作者:未来游戏研究所

  我其实很久以前就想做一篇正式的《塞尔达传说:荒野之息》引擎分析文章了,但一直没时间去弄。然而,现在Switch有了新的视频录制功能后,我想这是一个完美的时机来重游这款游戏并通过我上传到Twitter上的视频来分享我的想法(本文中以动态图与静态图代替)。

  《塞尔达传说:荒野之息》

  我将先从我的研究结果摘要开始,但我也会在文章的后面对每一个技术特性进行细分以便通俗易懂。同时我也会尽可能避免出现重复内容。比如说像是Digital Foundry这样的已经分析了引擎的一部分特性,那我就不会再在这里提及到了。这篇帖子的目的是为了让更多的人接触到其他人不打算费心去调查的,游戏中的技术成就。

总之,这里就是这款引擎特性的总结:

  • Global Illumination | 全局光照 (更具体来讲,是光能传递)  • Local Reflections | 局部反射 (由菲涅尔反射计算)  • Physically-based Rendering | 基于物理的渲染  • Emissive materials/area lights | 自发光材质/区域光源  • Screen Space Ambient Occlusion | 屏幕空间环境光遮蔽  • Dynamic Wind Simulation system | 动态风力模拟系统  • Real-time cloud formation | 实时云体变形 (受风力影响)  • Rayleigh scattering/Mie Scattering | 瑞利散射/米氏散射  • Full Volumetric Lighting | 完整体积光照  • Bokeh DOF and approx. of Circle of Confusion | Bokeh景深与模糊圈的近似值  • Sky Occlusion and Dynamic Shadow Volumes | 天空遮蔽与动态阴影体  • Aperture Based Lens Flares | 基于光圈的镜头光晕  • Sub-surface Scattering | 次表面散射  • Dynamically Localized Lightning Illumination | 动态局部闪电照明  • Per-Pixel Sky Irradiance | 逐像素天空辐照度  • Fog inscatter | 雾光散射  • Particle Lights | 粒子光源  • Puddle formation and evaporation | 水坑的形成与蒸发

光影:

  Global Illumination/Radiosity | 全局光照/光能传递

  首先我想要声明一点,所有所谓的实时全局光照方案都是以某种方式伪造出来的,都具有着不同程度的准确性。任何仅仅因为没有使用路径追踪之类的而忽略了《塞尔达:荒野之息》中的全局光照方案的人们应该仔细想想自己究竟在说些什么。最重要的一点是,这一切都是实时渲染的;这不仅仅是烘培入纹理中的光照,这对于一款开放世界游戏来说(尤其是在Wii U上)非常令人钦佩。

  那么,光能传递到底是个什么东西?在3D图形渲染中,它是从不同表面反射的光,并在这个过程中讲颜色信息从一个表面传输到另一个表面的全局光照近似法。光能传递越是准确,为了传输适当的颜色就需要计算更多的反射光。

  在《荒野之息》中的引擎用的是光照探针在整个环境中收集在光照探针附近不同表面的颜色信息。并没有什么模拟反射光,只是一个给定区域中基本颜色的一些近似值。《荒野之息》用于计算此信息的算法尚不清楚,但我的最佳猜测是球谐函数或之类的东西,基于颜色平均值与光能传递局部化。与《超级马里奥:奥德赛》不同,《荒野之息》中的光能传递并非二进制而是粒子。从光照探针计算的照明信息似乎与LOD系统在同一个渲染管线层次捆绑串流,使得其效率极高。

  观察建议:注意当相机靠近该区域时,岩石悬崖是如何从草地上接收到绿色色调的。

  起初我假设可能整个环境中都有放置球谐函数来收集色彩采样,因为当林克在整个环境中移动时,它似乎会更新为基本颜色。然而,经过进一步调查后,我现在知道了那些基本颜色反射是由于环境中缺乏颜色变化。当我在一个彼此相邻的许多不同颜色表面的区域测试全局光照时,其全局光照系统是如何运作的就变得豁然开朗了。注意林克在接触红墙时,其颜色是如何传递到面向相反方向上所有表面上的。

  在红墙相反方向的绿墙也是如此(尽管效果并不是很强烈,因为探针更靠近红墙,因此红墙的颜色本身反射更强烈)。事实上,在任何给定的点上,这在各个方向上都会发生。地面向上传递颜色,而林克头部正上方的任何天花板或是彩色表面都会传递其颜色。探针不断地动态的采样并传递颜色(我们可以认为这就是反射光了),因为探针会因为新的传递而拾取更多的颜色,并且还必须对他们进行采样。最后,最终结果将会停止改变,因为最靠近探针的样本将具有最主要的颜色,无论颜色转移量如何。这一过程井然有序,但非常局部化且速度相当的快。探针具有有限的采样范围,并将这些结果应用于世界空间中的材质上。由于如此般的效率,探针能够近似出许多反射光的效果,但只有在距离探针最近的区域中看起来准确。

  这是一个非常重要的发现。

(靠近红墙时其他材质也"染"成红色)

(靠近绿墙时其他材质也"染"成绿色)

  全局光照实际上会近似多次反射。在林克的头部上有一个光照探针可以对环境中的大多数材质的色彩进行采样。然后,每一个采样的颜色被传递并以相反的方向反射。有趣的是,强度有被考虑为因素,其受到探针最接近的表面以及反射光的强度影响。

  在户外可能看起来效果不太明显,但当有多个相邻的表面时,全局光照的效果看起来很不错。

Local Reflections | 局部反射

  那么,自从我开始分析这款游戏以来,总是让我头疼的一个区域似乎就是局部反射了。有着如此多看似不一致的情况,因为我的理论最初满天飞。现在我可以自信的说,我已经解开了局部反射是如何运作背后的谜团了。显然,这是一种根据具体情况而三管齐下的方案。


塞尔达传说:荒野之息 主机游戏

  • 类型冒险游戏
  • 发售1970年01月01日
  • 语言未知
  • 平台
  • 研发
  • 运营
《塞尔达传说:荒野之息》是任天堂开发的系列重启作品,是真正的全开放世界,而非以前的种种限制,你可以从任何方向到达你想去的地方。本作会于……

暂无促销活动

火爆开服更多+

thisLineHeights20

新闻更多+

thisLineHeights20

攻略更多+