找回密码
 立即注册
搜索
查看: 4042|回复: 6

[NS] 【王国之泪】金苹果里的另一个海拉鲁大陆

[复制链接]
     
发表于 2023-6-28 10:59 | 显示全部楼层 |阅读模式
开头标题党一把(
前几周看到b站有几个关于王国之泪里金苹果表皮反射的视频,正好最近有点闲,干脆就做了个视频来科普下王国之泪里反射系统是怎么做的

【王国之泪】金苹果里的另一个海拉鲁大陆 [url]https://www.bilibili.com/video/BV1RV4y1y7em/[/url]

我在s1其实发过一篇类似的帖子,聊的是荒野之息里反射的做法,和王国之泪的其实大同小异。之前帖子在这 https://bbs.saraba1st.com/2b/thread-1971518-1-1.html。这次剪成视频应该看起来比纯文字更直观,更容易理解(希望如此)。第一次剪视频,只能说感谢AI,从生成讲解人声到字幕一键全自动,没有AI我也没动力从头读到尾。

如果不方便看视频的话,我把文字稿也在此附上:

最近看到不少塞尔达传说王国之泪里关于金苹果反射的视频。借此机会我们来简单分析一下王国之泪的反射系统。王国之泪的高光反射由两个部分组成。一个是实时更新的反射探头,也就是一般所说的 IBL cubemap;另一个则是SSR,即屏幕空间反射。
反射探头 可以理解为把一个相机放在空间的一个质点上,然后对 上下左右前后六个方向各拍一张照片。当我们需要获取物体表面某一点的反射信息时,我们假设这个点就在之前的质点上,然后根据表面的方向取到拍好的反射信息。
在很多游戏里反射探头是提前在世界布置并烘培好的,这样在运行游戏的时候探头本身没有什么运算开销。然而对于这两作塞尔达传说来说,一方面开放世界导致游戏规模非常之大,如果全都烘培探头的话switch的卡带容量和内存告急;另一方面由于游戏世界高度动态,光照情况是无时无刻在变化的。比如日出,日中,夕阳,晚上,雨天,阴天等等。哪怕多烘培几套光照也很难涵盖所有情形。因此王国之泪的探头必须要实时更新。
实时更新必然带来很高的性能开销,为了保证游戏能在switch上流畅运行,EPD对这个反射系统进行了一系列的优化。
首先,游戏里只存在一个反射探头,这个反射探头的位置会跟随玩家的镜头移动,不停地捕捉当前位置周围的景象。当然,只更新一个反射探头的开销也不小,所以并不是所有物体都会被反射相机所绘制。透过金苹果我们可以看到反射探头会绘制哪些物体。首先是天空和地形;其次是各类静态模型,比如建筑和家具;还有一些不完全是静态但对视觉贡献大的物体也会被绘制,比如在夜晚里会出现的怪物商店模型,又或者是自建房屋的模型。而其他的诸如npc,可以互动的树木矿床等等则被完全无视了。实际上被绘制的物体在质量上也有大幅缩水,往往选用面数比较少的模型;光照也会大幅简化,只计算来自太阳/月亮的直接光,阴影什么的完全没有。
这样就够了吗?当然不是,EPD更进一步的对探头的更新进行分帧处理。之前说了,一个cubemap需要在六个方向捕捉信息。相比起在一帧里把六个方向更新完,游戏每一帧只更新一个方向。这样每帧的渲染负载更少,但代价就是游戏需要七八帧才能更新完一次探头。六帧更新完所有方向,剩下一到两帧是对cubemap进行一些预积分计算来对应不同粗糙度的反射表面。
这个更新过程我们在游戏里是可以清晰的看到的。比如我们如果绕着金苹果走的话,由于相机位置变动,反射探头的内容也会自然而然触发更新,因此能看到反射的图像的变化是一顿一顿的,更新频率低于游戏本身的帧率。有时候碰上周围环境突变,比如一扇墙从镜头前离开,也能察觉出反射光线的突变。或者沿着河岸走,能看到水面反射每隔几帧才追上玩家新的位置。不过如果不是我点出来的话,我觉得大部分玩家应该都不会注意到这些瑕疵吧。
这套反射系统其实在旷野之息里就存在了,但是旷野之息里缺少像金苹果这样清晰的反射表面,所以直到王国之泪才能清楚的看到反射画面。那么借这个机会,我们来看看海拉鲁大陆各地在反射世界里是什么样的。

我们先来看看野外。
然后是空岛。
接着是神庙。
还有城镇。
再来看看屋子内部。有意思的是所有房间都没有门,因为门是动态物体。
同样的,我们也来看看自建房屋。反射画面里有部分房间没有被绘制,应该是探头的位置穿模导致的。
最后我们来看看洞穴的入口。
很可惜因为洞穴和地下的高光反射强度远低于漫反射的强度,金苹果表面看不到什么清晰的反射,只有大致的色泽。我就不演示了。


这种做法也是有不少代价的。因为我们只有一个反射探头,所以反射画面和相机位置强相关。像这样,在哈特诺村的染坊里来回走动,我们会发现远处的墙壁也错误地拾取到了近处染料的颜色,跟着移动来回变化。

探头本身距离相机也有一定的偏离。在形状复杂的场景里移动时,探头偶尔会卡到场景模型的内部去,直接看到了天空和外面的地形,导致了比较明显的漏光。比如洞窟里本身光线很暗,但是这些石头边缘却有很高的亮度。

Cubemap也会有视差错误。在看水面反射的时候,反射的画面和水面上的物体会一些微妙的差别。这是因为我们假设反射表面都在反射探头的位置,然而实际上并不是。光追就是解决这个问题的,稍后我们也会提到另一种改善方案。

尽管有种种缺陷,这种反射探头的方案还是被各类游戏所使用。像异度之刃从WiiU上的异度之刃X开始就采用了这种方案给游戏里巨大的世界提供反射。实际上,无论是大镖客2亦或是PS5上最新最硬的地平线西部禁区的反射也都采用了类似的方案。如果你仔细看水面的话也能看到分帧更新的痕迹。当然,大部分PS4以及PS5世代的游戏会同时启用屏幕空间反射SSR来改善cubemap的缺陷。王国之泪也使用了SSR增强反射的接触细节。

先简单介绍一下屏幕空间反射。顾名思义,它只能反射屏幕上出现的画面。那就是说无论是画面外的还是被近处景物遮挡住的物体都不能被反射出来。但当它能有效工作的时候,他能提供高精度的反射细节。传统的SSR的性能要求较高,因为它在找寻反射交点的时候需要进行多次随机纹理采样操作。对于大部分计算设备而言,访问内存的开销都要远大于逻辑运算。纹理采样也是同理。而且由于采样位置相对的随机性,很难命中纹理单元的缓存,不容易被优化。这类特效往往出现在PS4,PS5这样的主机或者PC平台。甚至PS4上一些为了保证60帧的游戏也开不起SSR,比如鬼泣5。对于NS这样的移动端Soc来说,带宽压力还是太大了。一个简单的对比,switch在主机下LPDDR3的内存带宽是25.6GB每秒,而PS4的GDDR5内存带宽则有176GB每秒。不止是NS游戏,大部分手游也很少使用传统的SSR。插个题外话,像和平精英,原神,天谕这类的手游会采用一种叫屏幕空间平面反射 SSPR 的做法,开销比传统SSR低,但是只适用于水面这类的平面,并不能处理任意反射表面。NS上的库巴之怒里水面反射应该也采用了类似的做法,看起来非常清晰。

出乎我意料的是,王国之泪也使用了SSR,而且任意表面都有。最能直观观察到的地方是神庙里各种光泽度高的地板和金属板。比如这里门的形状被精确的反射在了地板上。又或者这里能看到林克装备的反射。当然,王国之泪的SSR无论是分辨率还是反射求交精度都有所阉割,从而能在NS上流畅的跑起来。

本来我以为EPD只在神庙这些渲染压力相对较低的地方开启了SSR,然而再观察了更多场景后,我发现这个SSR是一个常驻特效,粗糙度低于一定阈值的像素都有使用。只是在野外的时候由于直射光太强烈不是非常显眼。当天气阴下来的时候能相对容易看出来。比如鸟望台的金属地板能看到林克的倒影。又或者是各种木板和地板。甚至雨天的草地也能看到SSR的反射。这里由于我是用内置录屏,压缩比较严重,可能反射看得不够清晰,各位可以自己去游戏里走起来看看。

对于一个15年的芯片来说,这两作塞尔达传说采用的画面技术可以说是较为激进的,分辨率有所牺牲也是在所难免的。括弧,更激进的还得看隔壁Monolith的异度之刃。
一个常见的误区是王国之泪采用卡通渲染所以运算简单,但实际上游戏里只有角色和一些武器道具是风格化的渲染。其他方面在渲染规格上还是更靠近基于物理的做法的。只是在美术设计上不会一味的追求写实,更考虑整体的氛围。尤其是在大气渲染上,毫不吝啬机能的使用体积光和体积雾营造氛围,有机会以后可以聊聊这个。








评分

参与人数 17战斗力 +18 收起 理由
mlfans + 1 好评加鹅
tachikoma27 + 1 好评加鹅
Gmlazy + 1
futamn + 1 好评加鹅
flodra + 1 好评加鹅
zwqcm + 1 学到了
折木奉太喵 + 1 好评加鹅
downnote + 2 好评加鹅
beer + 1
Zeno_5 + 1 好评加鹅
鳥谷真琴 + 1 好评加鹅
yuwe0714 + 1
HZY298 + 1
JuneWu + 1 好评加鹅
nyantype + 1 好评加鹅
goblin/troll + 1 好评加鹅
findpkq + 1 好评加鹅

查看全部评分

回复

使用道具 举报

     
发表于 2023-6-28 12:28 来自手机 | 显示全部楼层
感谢科普。题外话,这次看到金苹果和金马还以为衣服染色也能加金属色,结果还是原来几种颜色,略失望
回复

使用道具 举报

     
 楼主| 发表于 2023-6-28 13:06 | 显示全部楼层
lanyu_u 发表于 2023-6-28 12:28
感谢科普。题外话,这次看到金苹果和金马还以为衣服染色也能加金属色,结果还是原来几种颜色,略失望 ...

是,而且染色区域也挺少的,聊胜于无
回复

使用道具 举报

     
发表于 2023-6-28 15:09 | 显示全部楼层
啊?
回复

使用道具 举报

     
发表于 2023-6-28 16:59 来自手机 | 显示全部楼层
赞,会不会SSR采样的纹理是原本纹理的简化/低分辨率版本,catch hit的概率应该提高不了,内存带宽至少能省点
回复

使用道具 举报

     
 楼主| 发表于 2023-6-28 17:09 | 显示全部楼层
zwqcm 发表于 2023-6-28 16:59
赞,会不会SSR采样的纹理是原本纹理的简化/低分辨率版本,catch hit的概率应该提高不了,内存带宽至少能省 ...

ssr采样的其实就是屏幕上的像素(有的游戏是采样上一帧,这样可以达到反射里的反射的效果,但说实话一般看不出来;有的游戏是采样这一帧反射计算前的),反复步进采样的深度缓冲。
大部分游戏的ssr都半分辨率起步的,王国之泪这个应该更低,感觉最多1/4分辨率(横竖1/2)。cache hit肯定会有提高,不过优化主要还是因为总体计算ssr的像素少了。

—— 来自 S1Fun
回复

使用道具 举报

     
发表于 2023-6-28 17:19 来自手机 | 显示全部楼层
GuardHei 发表于 2023-6-28 17:09
ssr采样的其实就是屏幕上的像素(有的游戏是采样上一帧,这样可以达到反射里的反射的效果,但说实话一般 ...

懂了,多谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-9-21 14:41 , Processed in 0.091607 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表