当前位置: 华文问答 > 游戏

为什么游戏【塞尔达:旷野之息】能在机能不咋的 NS 上平稳运行?

2022-05-18游戏

看着下面回答。。。任天堂第一方虽然不追求极致画面水平,但也不是沦落到和手游比。。。

其实题主问题倒是不难理解,荒野之息本身技术上难点不小,一方面是开放世界,规模大,另一方面有昼夜变化,也有各种物理引擎活用带来的高度动态化的场景,预烘焙啥的别指望了。无论对cpu和gpu来说的压力都不小。但最后优化出来的结果还是非常不错的,在掌机上能720p跑出来。

cpu瓶颈是相对好追的,tegra x1满血状态下单核可能比ps4/xbox one的美洲豹要强一些,不过ns那颗功耗上线不高,而且一共就三个核。但相比较而言,压力反而不是那么大。实际上把ns cpu频率降低一半,荒野之息基本上也不存在比之前掉帧的情况,所以这方面任天堂拿捏的死死的,可能和wiiu cpu太烂有关。

gpu上考虑到荒野之息上的特性特别多,就会困难一些。一个是特性兼容上,wiiu的latte gpu feature level是dx10 + 部分dx11特性,ns是dx12全兼容(不包含dx12u),不过maxwell架构下async compute基本等于不存在,另一个就是性能上。

首先游戏里的视距非常非常远,所有地形,神庙,高塔,神兽,龙等重要物体永远不会被裁剪掉,你从地图左下角可以直接看到地图右上角,这对玩法是很重要的。

左边的城堡,右边的神兽,无论多远永远都会绘制

然后有一套多光源渲染系统,所以能达到每个萤火虫都是一个发光源的效果。我没机会去听荒野之息渲染的那场cedec,但是泄漏的几张ppt还有text dump来看,应该是介于延迟渲染和light prepass之间的一种操作:

除此之外整个世界的光影效果都是高度动态化。

基于raymarch的体积光,而不是廉价的径向模糊方案:

树影拨动着夕阳洒下的光:

光从窗口洒进室内:

看起来像是基于物理的大气散射模拟,太阳下山的时候能清楚看到逐像素的大气变化:

布料,草地等次表面透射的模拟:

可以透过布料看到室内的光源的投射还有物体的遮蔽
荷叶背面也能透光,也有适当的阴影

基于屏幕空间的环境光遮蔽模拟而不是烘培死的光照遮蔽(比如角落里的阴影,或者阴影中的阴影):

以及在渲染负载小的场景内会开启一个近距离的屏幕空间反射提供高光细节:

同时也有一个实时更新的离屏反射:

还有基于上述系统生成的实时漫反射全局光:

强烈的直接光照下地板是棕色的
晚上直接光变弱,间接光变强,右侧粉色墙壁的颜色反弹到了地板和树上

另外荒野之息里还对各种奇形怪状的面积光做了一些便宜的模拟:

看起来像是对n个点光进行了裁剪

更别说那一整套可高度互动的植被系统:风,物体,切割,燃烧等等。

做一个很简单的对比:

首先是光荣拿荒野之息的素材做的灾厄无双里格鲁德小镇的画面:

缺少直接光的地方看起来约等于unlit了。。。

然后是荒野之息里的样子:

画面的层次感一下就出来了

数毛社17年把荒野之息放在年度游戏画面技术第三不是没有原因的。。。这些技术在主机上并不是很少见,但能优化在掌机下流畅运行就不是一个概念了。ResetEra上BrainChild曾经发过一贴写了一些他的发现:

https://www. resetera.com/threads/ze lda-breath-of-the-wild-the-technical-analysis.8197/

至于任天堂具体怎么优化的,我只能说几个我观察到的:

首先是视距,在保证重要物体的视距的时候对细节物体进行一个缩放过度,把中远距离的细节无缝过渡到地表贴图上,比如下面的落叶:

连续平滑消失,正常情况下不仔细看基本注意不到

又比如草地,在近距离的时候是一根根的草单独绘制,而远处的地方则过度成更节省的纸片草,但是距离远,不细看也看不出来:

我不说你能轻易看出来远处的草是一条条面片吗?

全局光系统也是个重中之重。据我观测还有网上讨论的,荒野之息的做法是在相机位置放了一个探头,实时捕捉场景光照,然后卷积提供间接漫反射和高光的照明。

但是无论是实时捕捉场景(相当于额外画n遍场景)还是卷积(高带宽开销)对ns这个硬件来说都太耗了。

任天堂的做法是,捕捉场景的时候只捕捉地形+静态结构+重要物品(比如怪物商店因为那个光照贡献很明显),并且捕捉场景时用一个非常简化的光照模型去绘制,看下图我合理怀疑可能直接用的顶点色算光照然后插的:

水里倒映的世界是高度简化的

但是这样卷积的开销也降不下来,所以任天堂最后用了分帧的方法,也就是说每次相机移动的时候,光照探头的更新会在几针之内完成,这样每帧的开销就低了,所以仔细观察的话发现会有个微小的延迟。

最后半透明(比如水体)叠起来开销很大。任天堂做法是水面下的像素,光照在1/4分辨率下计算,配合上cel shading,也是属于不说基本看不出来的(这个是cedec上任天堂分享的):

水下的锯齿比水面上的要更多,但这是缩放最大屏摄的情况下,正常游戏里你真的看得出来吗?

其他更多的就得用cemu+renderdoc截帧看了。

客观来说,第一方游戏只用上两个平台,可以针对做优化,尤其我没记错的话跳票的最后一年epd就是在移植ns,贴合着平台特性大干特干,所以结果很不错。