找回密码
 立即注册
搜索
查看: 3643|回复: 20

[NS] 荒野之息里的反射

[复制链接]
     
发表于 2020-11-10 23:29 | 显示全部楼层 |阅读模式
本帖最后由 GuardHei 于 2020-11-11 12:43 编辑

====更新了两外两种反射机制,接在了后面====

隔壁这个帖子 https://bbs.saraba1st.com/2b/thread-1971403-1-1.html 我是没想到能有这么多讨论的。老实说,任天堂的技术是很强,但是吹这个真没必要,这是个很正常的操作而已,和光追,薄膜干啥啥的屁关系都没有。所以我觉得科普下荒野之息的光反射机制。

一般来说,说到反射,我们指的是镜面高光。实际上所有的光都是反射进到你的眼睛里的,所以漫反射也是反射,但是通俗来说,我们把镜面高光叫反射。荒野之息里用了好几种不同的反射系统来模拟出这个高度动态世界下光传递的情况,部分特效在本世代主机上使用也是比较耗性能的,所以任天堂的优化能力是没得说的。废话不对说,直接开始。

首先说这个帖子里用的反射系统:一个高度简化版本的立方体贴图(Cubemap)反射。立方体贴图反射的话,这个可以想像在一个立方体的中心放一个相机,然后对六个面,每个面都画一下场景。这样在计算像素反射的时候,我们可以假设这些图像来自无限远的地方,所以只要用一个反射方向就可以取得对应的镜面反射的值(这就是假设了所有像素都在这个立方体的中心店,即画贴图的相机的位置)。这里挪用一下learnopengl关于cubemap reflection的图,第一张是典型的cubemap,第二张是反射的演示。


这个最早大规模使用我记得是半条命失落海岸里,当时这玩意儿还叫hdr(不过确实很多这种立方体贴图都是hdr格式的)。在早期没有cubemap做反射的时候,高光只能是白色的,而没有反射的颜色,所以看起来油花花的。有些早期虚幻游戏被称作油腻师姐就是这个原因。但是这个系统有个问题就是在实际场景中图像并不是来自无限远的方向,所以在不同位置的反射方向不能简化成中心点。这就导致只要在这个立方体贴图范围内,只有视角影响反射内容,但是位移并不影响,这也就是我们常说的视差错误,也就是说反射的内容不正确。但在很多低精度的场景下,人脑往往不能直接对应出正确的反射图像,所以问题不大,但是在水面这种相当明显的地方就不好说了。比如你们可以看看ps4/pro版本的地平线零之曙光,它的水面就是纯cubemap反射,所以倒影很多时候是错的,上了pc加了屏幕空间反射才部分解决了这个问题。对于荒野之息来说,这是一个高度简化的版本。因为荒野之息是一个动态时间的游戏,反射的内容需要随时更新,也就是说这个立方体贴图要频繁更新,开销会很大。比如ps4上的蜘蛛侠采用的是每帧更新一个面的方法,来分帧平摊开销,但这对荒野之息来说,考虑它还要上其他特性,仍然接受不了,所以荒野之息里的反射贴图只画了角色,如果你看了截图的话会发现这个反射只有角色,没有其他物体。同时,这个反射的角色绘制连光照计算都没有,只有一个albedo固有色贴图的绘制,**降低了反射绘制的开销。

(人身上颜色都是平的,意味着只有固有色,另外锯齿明显,我这个是原视频1080p高码率截的图)

这种方法是任天堂的常用方法了,最早可以追踪到wii上的马里奥银河(我的个人印象,不一定正确)。游戏里的冰坨子可以清楚的看到马里奥的形象的反射。上面说了,cubemap反射是在半条命2失落海岸的时候才第一次流行起来,所以能想到的,哪怕在ps3和xbox360上,这都是一个不小的开销,尤其是贴图采样的开销还是很大的。那同期的wii性能显著更弱,用的是固定渲染管线,同时马银还是个60fps游戏,这是怎么打到的呢?由于ngc和wii有一个EMBM的硬件特性,即Environment Mapped Bump Mapping,可以用这个在固定管线模拟出cubemap反射,甚至normal mapping(用了EMBM后,可以清楚的看出马银的材质比阳马要凹凸很多,而不是平平的),再加上只画主角一个物体,而且镜面反射只需要采样一次,所以wii上也就能跑了。实际上类似的技术在马里奥奥德赛里也出现了,比如沙之国地下的冰坨子能看到马里奥,帽子和goombas的倒影。next level games做的鬼屋3里也有类似的方法。在这三个游戏里,使用这种反射的物体要不然占屏幕空间比较小,要不然不好脑补反射效果,要不然离反射相机比较近,所以不太容易看出cubemap反射特有的视差错误,因此适合这种技术。

(马银里冰块反射出马里奥,3d合集里也是这样的,有兴趣的可以去看一下)

(奥德赛冰坨子倒映出被马里奥附身的板栗,这个找了半天只找到这个截图,有点小了)

至于这个气泡为什么有反射。这和细节狂魔无关。。。这是标准的本世代pbr材质,即基于物理渲染的材质,的制作流程。一个半透明物体要考虑反射和折射,根据菲涅尔公式分配强度。大部分本世代游戏都这样,你看看神海4里的酒瓶就是一个道理。还有某位说的反射方向是确定的,直接根据法线reflect向量。这个并不正确。“直接根据法线reflect向量”是一个高度简化的反射模型,并不物理正确。实际上一个像素可能对应了多个贴图纹素(纹理像素),也就是有可能有多个法线,你很难确定反射方向。当然有人会说,那加大分辨率不就符合物理了?然而并不是,实际上你在画法线贴图的时候,真正物理表面的很多细节你是画不出来的,即小于一个纹素,或者说微表面细节。在pbr里我们一般用粗糙度表示,一种统计学上的近似。在很多其他情况下,基础的pbr模型也不能很好的模拟出这个效果,就需要单独的光照模型来模拟,比如像头发或者某些金属上面的拉丝效果,即各向异性反射就是个例子,当然了,这些光照模型也都是近似。

所以楼里另一位说的模拟干涉之类的完全是颠倒了因果。无论是不是光追(光追不影响材质制作流程),图形学的本质是先有物理的基础原理,再进行各种近似来达到主观上分不出的效果;而不是一步步推算出物理原理。所以你用图形学去模拟真实光学那属于本末倒置。而光追和光栅化只是把2d平面像素对应3d里的几何表面的一种方法,和光照是怎么处理的没什么关系,只有好不好获得某些信息的关系。

先写这么多,另外两种反射机制有空更。
====更新====

上面说到了立方体贴图反射会导致视差错误,也就是反射内容和实际物体对应不上,为了解决这个问题,大部分游戏都是用的屏幕空间反射来做的。屏幕空间反射,Screen space reflection(简称ssr),顾名思义,只能反射屏幕上有的东西,和屏幕空间环境光遮蔽一样最早也是cryengine带火的,当时还叫local reflection。这个原理具体解释起来比较复杂,而且有很多变体。简单来说,在3d渲染里有一个叫zbuffer的东西,记录了屏幕上每个像素到相机的距离(深度)。对于每个像素,我们沿着反射方向在屏幕空间的每次步进一小步,然后来判断该位置有没有被遮挡,被遮挡的话就假设反射光线在这里碰撞了,于是取当前位置颜色做的反**色。有些人把ssr叫做光追大概也是因为有这么一个“碰撞检测”的过程,但两者原理没什么相似之处。这也就到了好多问题:如果每次步进的距离小了,步进的次数就要更多,性能开销会大很多(纹理采样,尤其是乱序纹理采样是很耗的);步进距离大了,很可能跳过正常的碰撞点,导致反射粗糙,出现错误;就算“碰撞”到了,你也并不能确定当前位置颜色就是反射的颜色,很有可能你反射的是背面,但是取到的是正面的颜色;以及最头疼的问题,屏幕外的内容没法反射。当然了,ssr本身一定是物理不正确的,但这个比起其他的问题是基本感知不出来的级别。总的来说,ssr的性能开销是很大的,本世代主机上的都头疼,比如ps4版的鬼泣5为了保证60fps,就阉割了ssr,只有cubemap反射。不过,这个特效,荒野之息里是有的,acropolis说的屏幕空间特效就是指这个。但是switch作为一个移动端机器,除了性能弱以外,带宽很低,贴图采样开销更大,那是怎么能上ssr的呢?首先,除了常见的降低反**度外,这个效果只会在神庙和神兽内部开启,因为这些区域渲染压力相对要低一些,所以跑得动;其次,任天堂优化是真的强。。。掌机模式连835都不如的性能+25GB/s的带宽跑ssr。。。那是真的牛啤啊
然后放几张屏幕空间反射的图(屏摄质量差见谅):



既然说到了屏幕空间反射开销大,而且没法渲染离屏内容的问题(想象一下本来水面反射的美美的,结果你一低头,反射源不在屏幕上了,于是水面的反射全没了),荒野之息里引入里第三套反射系统。这里额外提一嘴,由于菲涅尔定律(视线与物体表面法线越接近,镜面高光反射率越低),大部分屏幕空间反射可以相对平滑的符合物理的过渡到无反射源的地方(以上面说的水面为例,视角低下来,视线就和水面法线接近了,反射就应该变弱了),所以ssr这个问题会轻一点。那荒野之息除了遵照了菲涅尔外,还外加的反射机制是啥呢?好吧,我也不知道名字叫啥,这个东西我没怎么见到过别的游戏用过。简单来说,这是另一种简化形式的cubemap,但是比起传统cubemap渲染6个面,这个cubemap只渲染向前的一个面,也就是说,荒野之息单独架了一个相机来绘制主角前方的内容,作为反射源。

看到这有人可能就要问,这个反射源也是画的前面,那不和屏幕空间反射的图像一样了吗?为什么还有额外花性能去画呢?好问题。所以答案是,这个图像和屏幕空间反射的图像不一样,这个反射相机的fov比正常渲染的相机的fov要大一点,brainchild大佬预估了下在115度的样子,所以能囊括更多的内容。同时,这个相机永远是和水平面平行的,所以哪怕你低下头,这个相机还是向前方拍,能捕捉到前方的反射内容。

这个听着挺不错的,那有什么问题呢?首先,肯定的,既然只画了一个面,无论fov多大,都不可能反射别的面的图像。除此之外,由于没想ssr那样有步进的碰撞检测,会有和cubemap一样的视差问题。但是!由于这个反射相机就架在玩家头上,加上视角一般和反射相机方向差距不会很大,所以这个视差在很多时候都是准确的,只有部分时候偏着看才能发现问题。比如下图:

(注意观察蓝色柱子的反射:当物体在中央的时候,和反射相机位置差不多,所以视差看上去基本正确)

(注意观察右侧蓝色柱子的反射:当物体偏离了中央位置后,视差问题变得明显)

除此之外,渲染开销也是个问题,额外画一遍前景的所有内容,fov还更大,这是完全不可接受的。那荒野之息的做法是啥呢?首先,这个反射只画部分物体,包括了大地型,山脉,驿站,神庙,高塔,怪物商店,大精灵之泉,某些高耸的柱子。其他的如树木,动物,人这类高度动态的物体都不会被画进去。同时,绘制反射内容的时候,并没有光照计算,类似第一个cubemap绘制一样,只画albedo漫反射和emissive自发光的颜色,而且物体使用的是建模。所以会导致一个问题,晚上的时候,反射源应该是暗的,但是因为没算光照,所以反射的还是有点亮的,但总的来说这个小错误出现不常见的,任天堂通过全局光压了下高光过亮的问题。

这是一个非常好的该反射系统的例子。你可以清晰的看到哪些是被渲染的(房子,山),而围墙这些小物体则被剔除了出去。同时你也可以看到,山顶部没那么绿的,这里绿油油的是因为用了简化模型,顶点色导致绿色扩散了开来,非常明显。而且这些东西都没有光照计算,就是纯色输出。

但这样开销还是太大了,所以任天堂又降低了这个反射系统的更新频率,以更低的帧率去绘制反射内容,在下面这个视频能看得很明显(上传个youku视频传了好久):


s1的视频好像不支持mp4格式,白传了,这是链接 https://v.youku.com/v_show/id_XNDk1NTczODg4NA==.html

这里远处的水面也反射的是怪物商店的颜色,这是因为就像cubemap反射一样,假定了反射图像来自无穷远处,所以相机实际在近处拍的是怪物商店,但是被也被用在远处的反射上。不过这个视频主要表现的是,因为更低的帧率更新,导致了反射的滞后性。这里我觉得还是相当明显的。当然了,这个场景都是还有荒野之息的动态全局光在参与作用,所以会更复杂一点。

总的来说,任天堂的技术能力是毋庸置疑的,在一个掌机上堆了这么多特性,想想就头大。所以说,吹也要吹到点子上,像第一点这个完全没啥可吹的,也体现不出任天堂技术力的强悍之处。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 27战斗力 +31 收起 理由
squarezty + 2 感谢大佬的专业解析
NF17 + 2
downnote + 2 好评加鹅
晓寒 + 1 好评加鹅
bird-lay + 1 好评加鹅
mamamiya + 2 好评加鹅
9912811 + 1 好评加鹅
AR971GP04 + 1 好评加鹅
shangshicc + 1 好评加鹅
leonyang19 + 1 硬核科普
BunnyFisher + 1 好评加鹅
帝普达柯饭特稀 + 1
我在干什么啊 + 1 好评加鹅
胖胖Ω + 1 好评加鹅
beer + 1
afer + 1
Pettabuz + 1 好评加鹅
平昭·南宫司卿 + 1
破羽 + 1 好评加鹅
fygh33 + 1

查看全部评分

回复

使用道具 举报

     
发表于 2020-11-10 23:36 来自手机 | 显示全部楼层
建议来点图
回复

使用道具 举报

     
 楼主| 发表于 2020-11-10 23:38 | 显示全部楼层

后面补
回复

使用道具 举报

     
发表于 2020-11-11 00:24 | 显示全部楼层
你没有理解那个帖子的意思啦…他们的意思是如果以后有光追做肥皂泡会很容易露怯,不是说任天堂做了干涉计算。
现有的图形学无论是非光追还是光追都是几何光学带经验修正。传统渲染的优势在于可以直接靠现实物理世界的经验糊一张贴图上去,反而是光追由于缺乏波动光学的计算容易显得不自然,最终还是需要经验修正。
模拟计算干涉和衍射这种波动光学的内容如果有,一定是cpu的事情,gpu只能打下手。当然现有技术即使是模拟静态波动光学效果都非常困难,所以肯定还是会使用经验修正近似模拟。
回复

使用道具 举报

     
发表于 2020-11-11 00:33 | 显示全部楼层
好家伙,过于专业以至于看了两遍还是没理解
回复

使用道具 举报

     
发表于 2020-11-11 00:44 来自手机 | 显示全部楼层
马一下,明天想得起来就加鹅…
回复

使用道具 举报

     
发表于 2020-11-11 02:30 | 显示全部楼层
为什么我没有学计算机图形学
回复

使用道具 举报

发表于 2020-11-11 04:34 | 显示全部楼层
本帖最后由 acropolis 于 2020-11-10 14:19 编辑

異議あり!

气泡的反射用“标准pbr”解释有掩盖任天堂技美对于渲染预算拿捏的嫌疑--也是我觉得野炊真正体现“细节”的地方。作为npr游戏,完全定制的pbr管线就是对细节追求的最好证明

cubemap做反射在许多游戏都有用到,但明显野炊的气泡反射的效果在“普通cubemap”之上 。一般情况下实时采样cubemap开销巨大且浪费,多用于低分辨率cubemap提供粗糙反射或者light probe。视频里精度高且实时,多是某种屏幕空间的奇银巧计。野炊本身出色的屏幕空间效果就很多,比较明显的就有遮蔽和强调了自发光的镜面反射(指河里)。

综上1)视频确实体现了任天堂对细节的追求2)楼主提到的cubemap跟视频关系不大
*2)只是依据视频和之前的记忆,有时间的话进游戏摆弄一下才能精准判断是不是屏幕空间效果。
---------------------------------------------------

此处网友的测试基本验证了屏幕效果的事实:https://www.reddit.com/r/Nintend ... phics_engine_local/



回复

使用道具 举报

头像被屏蔽
     
发表于 2020-11-11 05:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2020-11-11 07:11 来自手机 | 显示全部楼层
我本来想说的,后来看兴致那么高算了,这玩意儿我记着挺早的一些游戏里我就看到过类似的效果,太熟悉了
回复

使用道具 举报

     
 楼主| 发表于 2020-11-11 08:05 | 显示全部楼层
acropolis 发表于 2020-11-11 04:34
異議あり!

气泡的反射用“标准pbr”解释有掩盖任天堂技美对于渲染预算拿捏的嫌疑--也是我觉得野炊真正体 ...

你说的是另外两个反射机制,和这个就是cubemap不矛盾。你看下那个视频就行了。至于管线,任天堂都是pbr管线,野炊的环境渲染也完全是pbr的,你这个完全不矛盾。

“一般情况下实时采样cubemap开销巨大且浪费”,所以你不看我写的内容的吗?光滑表面只要采样一次。

“多用于低分辨率cubemap提供粗糙反射”,我写了这玩意儿就是低分辨率啊,仔细看。你去看那个视频都行,分辨率很低的,而且你甚至没法判断更新频率,这玩意儿隔一帧更新你也看不太出来。

“粗糙反射”,野炊的粗糙反射用了别的反射机制,不是这个,这个只是单纯的角色反射机制。而且粗糙反射要多次采样,这才是“开销巨大”。

“野炊本身出色的屏幕空间效果就很多,比较明显的就有遮蔽和强调了自发光的镜面反射”。河里那个不是屏幕空间效果,你的镜头往下移,蓝色塔离开视线还能有反射。野炊是在神庙/神兽内部开了屏幕空间反射,这个我后面会写。在大世界的反射是另一反射机制,我后面也会写,这是cubemap的另一种简化形式野炊的反射系统是比较复杂的,不是看到一种形式就能推断别的也是这么做的。
回复

使用道具 举报

     
 楼主| 发表于 2020-11-11 08:09 | 显示全部楼层
acropolis 发表于 2020-11-11 04:34
異議あり!

气泡的反射用“标准pbr”解释有掩盖任天堂技美对于渲染预算拿捏的嫌疑--也是我觉得野炊真正体 ...

另外你那个帖子里的屏幕空间效果反射应该说的是很清楚了,你仔细读一下,我和写帖子的人特别讨论过野炊怎么弄的
回复

使用道具 举报

头像被屏蔽
     
发表于 2020-11-11 08:27 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2020-11-11 09:31 来自手机 | 显示全部楼层
你不懂,重点在于吹
回复

使用道具 举报

     
发表于 2020-11-11 09:44 来自手机 | 显示全部楼层
那个楼里有一点说的挺对的,任天堂真正牛逼的一点在于细节的可互动。时之笛砍路牌那是按照小游戏的思路去做的。游戏开始拿到科里齐剑一出来路上一堆木牌生怕你不砍,还是一个把教学做的有趣的思路。包括旷野之息出门老头旁边的那棵树也是这个思路

—— 来自 OnePlus ONEPLUS A3000, Android 9上的 S1Next-鹅版 v2.4.3
回复

使用道具 举报

     
发表于 2020-11-11 10:24 | 显示全部楼层
本质是游戏好所以什么地方都能吹 之前动森音效都能单独拿出做视频 而辐射76和无双8甚至有更细致音效 但游戏屎所以没人在乎
回复

使用道具 举报

发表于 2020-11-11 12:21 | 显示全部楼层
GuardHei 发表于 2020-11-10 17:05
你说的是另外两个反射机制,和这个就是cubemap不矛盾。你看下那个视频就行了。至于管线,任天堂都是pbr管 ...

屏幕空间找了一下视频确实有误,应该是楼主说的cubemap/类cubemap办法。自己玩的时候没感觉延迟 这里看还是很明显的
https://twitter.com/BTonio07/status/1121307604314025984

大世界屏幕外的塔我猜也是用了类似的reflection map的做法,找视频的话能看到明显不同于ssr的位置偏差

提到pbr是反驳楼主的“和细节狂魔无关“。印象里低成本gi 视频里的反射之类的很多npr巧技都是botw里面第一次见,或许是对任家的熟悉让楼主觉得这是本世代标准材质的制作流程

疑惑的是如果是角色专有的cubemap还在哪里有运用到?看视频还是太累了 可以的话得捡起一年没开的野炊自己找了


回复

使用道具 举报

     
发表于 2020-11-11 12:32 | 显示全部楼层
尝试着理解这些技术的我真是自不量力

  -- 来自 能搜索的 Stage1官方 Android客户端
回复

使用道具 举报

     
发表于 2020-11-11 12:39 | 显示全部楼层
Ichihatsu 发表于 2020-11-11 10:24
本质是游戏好所以什么地方都能吹 之前动森音效都能单独拿出做视频 而辐射76和无双8甚至有更细致音效 但游戏 ...

地狱本社做东西整体性特别强,音效是为游戏服务的,不是用来单独听的。
反面典型是泥潭最爱和泥潭最爱2,单拎出来听素质很高,但是玩游戏的中后段你恨不得静音。
回复

使用道具 举报

     
 楼主| 发表于 2020-11-11 12:49 | 显示全部楼层
acropolis 发表于 2020-11-11 12:21
屏幕空间找了一下视频确实有误,应该是楼主说的cubemap/类cubemap办法。自己玩的时候没感觉延迟 这里看还 ...

帖子更新了,三种反射我都写了,你可以看下。

这里的反射不存在什么npr技巧,实际上我不是很愿意把荒野之息叫做npr,我觉得叫stylized pbr更好。进入wiiu平台任天堂基本全部pbr了,就是荒野之息,大部分效果都是基于物理的,也就角色渲染不是。除此之外材质也都是照着pbr做的,只是光照改下了,降低了高光细节。

低成本gi本质上就是一个分帧更新的光照探头,也算不得什么npr技巧,都是基于物理的(反正图形学里的物理你也不是不懂),只能说人家优化就是好,能上这么多特性。
回复

使用道具 举报

     
 楼主| 发表于 2020-11-11 12:55 | 显示全部楼层
Kidinthe21st 发表于 2020-11-11 12:32
尝试着理解这些技术的我真是自不量力

  -- 来自 能搜索的 Stage1官方 Android客户端 ...

不好意思写的不够清楚,补了点图,应该更好理解了

—— 来自 S1Fun

评分

参与人数 1战斗力 +2 收起 理由
NF17 + 2

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 16:30 , Processed in 0.176670 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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