GuardHei 发表于 2020-12-22 15:52

分析2077优化差的原因

本帖最后由 GuardHei 于 2020-12-22 15:52 编辑

本文写了一半的时候刷到了某s1转zh带v的神论。我可以很明确地说,狗屁。

==== 正文内容 =====

之前看到哪个人说巫师3后很多员工离职的传言估计是真的。2077的引擎技术对巫师3时期的red engine都算不上超越。。。相当多的技术有了显著的退步,cdpr这几年到底发生了什么。先说一下优化差的原因,主要问题就是开放世界。

开放世界有三大难题需要解决:流加载,遮挡剔除,动态光影。2077搞砸了前两个,勉强解决了第三个。

流加载很好理解,开放世界内容太多了,内存显存不够放,所以需要根据玩家的位置和行动,预测并提前加载所需的内容,比如模型,贴图,事件脚本等等。老实说,流加载在巫师3的时候cdpr就没有很好的搞定这个问题,lod过渡突兀而且有bug。到了2077的时期,整体技术反而倒退,基本上强迫玩家换ssd。在本世代主机上这个问题更严重,不仅是标配hdd的原因,还有弱鸡的cpu导致解压速度根本来不及的因素。不过这块只能看个大概,毕竟没有代码,不知道cdpr具体怎么实现的。

然后就是遮挡剔除。说到遮挡剔除,我们需要先明确一个概念。游戏渲染了一帧画面的时候,很多你看不到的东西也被画了一遍。一般在镜头外面的物体可以很容易被剔除掉,但是镜头内,被其他物体遮挡住的东西就不好剔除了。对于游戏来说,他并不知道这个物体被哪些东西挡住了,所以往往都会画一遍。这“不必要”的绘制会对两个地方产生大开销:1. 生成太多drawcall(即cpu向gpu发送绘制指令)的开销,这牵扯到cpu端准备数据,切换状态,并把数据发送给gpu,会对cpu与gpu之间的io产生大的压力。2. 如果gpu端的early depth kill(提前深度检测)失效的话,整个物体在gpu端又要重新画一遍,产生了overdraw的开销。

在这种情况下,像rdr2这样平坦的旷野占据大部分屏幕的游戏,其实绘制开销反而很低。打个比方,
以这张图为例。红线是主视野里山脉的起伏,上面是天空,下面的地形。你会发现相当一部分屏幕都被天空占据,这部分绘制开销会很低,而rdr2把这省下来的性能用于绘制体积云。除此之外,遮挡情况也非常简单,因为除了部分山丘以外基本上都很平坦,很少会有画看不到的物体的情况。加上绘制的大部分物体都是地形,在引擎里往往这个部分都是统一的数据,很多时候会统一的发送绘制指令(其实不是这样,但方便理解),所以哪怕画了被遮挡的地形,开销也不高。

但遮挡剔除在2077里就很棘手了,因为夜之城是个立体的,相当复杂的城市。在这样的城市里,遮挡情况会相当的复杂。很多常见的遮挡剔除优化手段很容易效果不佳。举个例子,墙上有一个小孔很可能会导致整堵墙后面的物体都不能被剔除掉,哪怕你实际上看不到他们。或者就是单纯的所有物体都相互遮挡,但一部分又露了出来,那遮挡剔除也没有,因为他也没被“完全遮挡”,你还是得画。很多游戏在城市里容易掉帧都是这个原因所致,大表哥的圣丹尼斯,荒野之息的哈特诺小镇,巫师3的城市等等。线性游戏因为玩家路线相对固定,这方面优化会更好,但是开放世界游戏就很烦了。巫师3的时候,cdpr用了一个叫umbra的中间件作为遮挡剔除的解决方案(unity引擎就是接了他的残废版本),不过可以看出,也不是百分之百有效,主机上该掉帧都得掉帧。

不过如果只是这些的话,我只是单纯再说2077的遮挡剔除难做,然而我想说的是2077把遮挡剔除搞砸了,这就是另一个概念了。我之所以这么说,是因为从目前renderdoc截帧的情况来看,2077没有使用任何基于gpu的遮挡剔除,cpu端的话,巫师3用的umbra,在2077里却看不见了(开头一堆中间件logo里没有)。不过这些并不能说2077遮挡剔除完全没有,说不定是他们自己做了一个把深度图从gpu向cpu回读,在cpu端做软剔除呢!可是,可是,很遗憾,我没有看到任何这样做的迹象。截帧可以清晰地看出,哪怕是在室内,别的房间的东西没能被剔除掉。在城市里部分地区,光是绘制场景里的几何信息,在中高端显卡上面的开销就超过了10ms(最低画质下)。这可是光照,后处理什么的都没做啊,10ms就没了啊。喂,喂,2077你在干什么?cdpr你在干什么?2015年tx的天刀都能灵活运用软剔除解决大量植被重复遮挡的问题,“1亿美元3a大作”的O神也知道上个gpu端的hiz culling,更别提其他的3a作品了。cdpr你是怎么做到自从2015年后,技术反向倒退到连tx都不如的?哈?你这开放世界遮挡剔除一点也没做吗?瓦特?能看到的优化就是远距离的树和车用indirect draw一个批次画完,但是还有bug,经常会把远景的树/车都叠加到近景前面。
喷完遮挡剔除,开始喷光影。先说结论,垃圾的taa实现以及“被老黄忽悠了”。本作光影的光追的部分做的不错,但是光栅化部分做的非常差,只能说勉强够用。体积雾是froxel做的3d累积,微观阴影靠的是屏幕空间环境光屏蔽和接触阴影,镜面反射部分用的是传统的屏幕空间反射+立方体贴图做的反射探头,漫反射全局光用的是64x64x64的实时体积全局光探头。我怀疑是因为场景几何开销已经非常高的原因,所以这些光照特效的精度被砍的非常低。精度一低,镜面反射全是噪点,漫反射的全局光就提供不了什么细节,只有大片大片非常平的漫反射,间接光做的非常差。实际上我不太理解为什么全局光要实时的,完全可以预先烘培几个时间端的气候的辐射度缓存,然后根据时间插值,实时可以选择只更新部分动态内容,精度可以比现在高很多(蜘蛛侠,全境封锁什么都是这么做的)。考虑到一开始那个任务的墙面可以破坏,但是后来再也没见到过,我怀疑可能当初设计的是整个城市都可以破坏,然后没能实现,但是技术选项全是按全实时的走了。

为了解决光照特效精度低的问题,2077用了temporal filtering(taa就是它的一种关于抗锯齿的实现)。temporal filtering的大体思路就是复用前几帧的渲染结果来提供当前帧(因为低分辨率/低采样率)缺少的信息。这套技术的主要问题是,你不知道你复用的信息是不是有效的。很多时候你这一帧某一位置的画面在上一帧是被遮盖住的,那他就不应该去复用这个信息。如果复用了,就会形成ghosting拖影。有的时候复用的信息也可能会和当前信息产生冲突,就会闪烁。为了解决闪烁的问题,做taa的时候往往需要做一次轻度的高斯模糊来降低,同时为了去拖影,往往会使用动态模糊或者把颜色固定在当前像素的一个范围内。所以很多人感觉taa用了很糊,就是这几个原因造成的。但是拖影的问题目前是没法彻底解决的,我看到现在最漂亮的实现是神海4和tlou2的。但是,2077这个temporal filtering就做的相当烂了,可以说拖影基本没去掉多少。人物头发和水下的拖影完全没去,基于旋转而产生的拖影也完全没去。低精度的屏幕空间环境光遮蔽ssao试图用temporal filtering来达到高精度ssao的效果,然而也完全没去拖影。如果你仔细看在街上走路的人的脚底那块的话,你可以清楚地看到一坨黑影会随着脚走动带起拖影。屏幕空间反射ssr本来精度就很低了,全是噪点,然而2077这个ssr的temporal filtering做的有问题。因为反射方向和人眼的视线方向不是一一致的,所以不能直接在屏幕空间去做temporal filtering,这样的话得到的前一帧的信息是不对的,得在反射空间里做temporal filtering(实际上寒霜,虚幻4,神秘海域4关于随机屏幕空间反射的ppt都强调过这一点)。这就导致2077里ssr不仅精度低和糊,反射的内容还会有问题。如果你开了dlss的话,因为原始分辨率更低了,ssr的问题会更大。我也不知道cdpr这么大个公司怎么这都没做好,搞什么啊?这就是为什么我给“被老黄忽悠了”打了引号,这么看来,我觉得很有可能只是现在的cdpr菜而已。

最后说一下2077主机优化差的原因。之前说的流加载问题和几乎没有遮挡剔除在本世代主机这种cpu弱鸡的平台上面就是灾难,这也是为什么降分辨率也会掉帧的一个主要原因,只能狠砍绘制距离。同时,非常疑惑的是,主机平台的特效哪怕精度再低,也保留了大半部分。除了一个屏幕空间环境光屏蔽被阉割了(只有xsx版画质模式有),其他的什么在基础ps4上都有,结果效果和优化就是灾难。像体积雾这种,精度低了颗粒感十足;接触阴影和屏幕空间反**度低了,所以全是噪点等等等等。再加上狗屎一样的taa实现,导致虽然ps4上最低是720p分辨率,但实际观感完全没有。因为拖影,很多细节都糊成一团。

综上,我对2077的渲染技术是非常失望的。不否认美工的努力,不少场景的打光对我来说还是很漂亮的。但是0202年了,除了一个光追外(老黄估计出了不少力来支援),大部分技术都还停留在2013、2014年的水准,甚至还不如。巫师3虽然优化差,但是技术分享的时候,大世界里使用umbra也是讲的头头是道,怎么5年过去了,技术反而能退步呢?cdpr到底发生了什么?


johnie 发表于 2020-12-22 15:55

GuardHei 发表于 2020-12-22 15:56

johnie 发表于 2020-12-22 15:55
不就是急功近利那一套嘛哪用分析的这么麻烦
这一波营销已经尴尬到我一个老蒸汽人都不好意思了 现在是按着网 ...

就算急功近利,技术上面应该是继承自巫师3才对,现在看来还能比巫师3还能退步,这就很离谱了。

fune 发表于 2020-12-22 15:59

可能是波兰这国家不行

震荡波 发表于 2020-12-22 15:59

当时把巫师3搬到掌机上我就觉得CDPR优化技术不错,2077出不了岔子,结果就出岔子。

Hanzong 发表于 2020-12-22 16:00

震荡波 发表于 2020-12-22 15:59
当时把巫师3搬到掌机上我就觉得CDPR优化技术不错,2077出不了岔子,结果就出岔子。 ...

移植switch和cdpr一点关系都没...那是移植团队牛逼

GuardHei 发表于 2020-12-22 16:00

震荡波 发表于 2020-12-22 15:59
当时把巫师3搬到掌机上我就觉得CDPR优化技术不错,2077出不了岔子,结果就出岔子。 ...

因为巫师3的ns移植是外包的

—— 来自 S1Fun

dragrass 发表于 2020-12-22 16:02

终于等到了大佬分析

实际上2077的很多技术优化甚至连巫师3都不如
很多问题是天国拯救首发版捷克人出现的问题,然后波兰人再犯一次

这已经不是CDPR小作坊技术力低的表现了,而是人事上出现了重大问题

dragrass 发表于 2020-12-22 16:02

连击了,编辑掉

UmarIbnLaAhad 发表于 2020-12-22 16:04

靠技术烂迈入次世代?
有一说一优化确实离谱,x1在1.04版跑10帧的场景到了1.05版提到了20帧,整整多了一倍,画面也没有什么变化反而更锐利了,无法想象他们发售前有多sb

Realplayer 发表于 2020-12-22 16:04

看了一半
以WOT为例,车没开到那个地方,树木或灌木是不显示出来的
一般的游戏都会有个可视距离的选项,越远对显卡要求越高,搞糟这个算能力不足?就是摸鱼罢了
你在城区地面,头顶的城市是立体的不假,可是一百米外的景观跟你有什么关系呢

UmarIbnLaAhad 发表于 2020-12-22 16:05

fune 发表于 2020-12-22 15:59
可能是波兰这国家不行

the medium好像也是波兰制作组,求别奶

GuardHei 发表于 2020-12-22 16:06

Realplayer 发表于 2020-12-22 16:04
看了一半
以WOT为例,车没开到那个地方,树木或灌木是不显示出来的
一般的游戏都会有个可视距离的选项,越 ...

和育碧15年在ps4上的大革命比比差距就很显著了

—— 来自 S1Fun

dragrass 发表于 2020-12-22 16:07

Realplayer 发表于 2020-12-22 16:04
看了一半
以WOT为例,车没开到那个地方,树木或灌木是不显示出来的
一般的游戏都会有个可视距离的选项,越 ...
因为开放世界的原因

所以LOD和遮蔽还不能像传统线性游戏那么直接

需要波兰人自己探索一套合适的方法

就不知道现有的通用引擎有没有傻瓜式的遮蔽算法

Tissuesea 发表于 2020-12-22 16:08

虽然不懂,
看完之后最大的问题是这个temporal filtering,解决这个问题主机的画面就不会变成一坨糊了吗

—— 来自 HUAWEI VTR-TL00, Android 9上的 S1Next-鹅版 v2.4.3

缺德猫 发表于 2020-12-22 16:08

那有什么牛逼的点吗?我觉得画面观感挺不错的。

卿卿雅儿 发表于 2020-12-22 16:09

问个问题,企鹅技术很差吗?波兰厂商比企鹅技术差是重大黑点?

煌焰 发表于 2020-12-22 16:10

缺德猫 发表于 2020-12-22 16:11

卿卿雅儿 发表于 2020-12-22 16:09
问个问题,企鹅技术很差吗?波兰厂商比企鹅技术差是重大黑点?

企鹅技术力楼主单独开贴吹过,应该挺牛的

GuardHei 发表于 2020-12-22 16:13

本帖最后由 GuardHei 于 2020-12-22 16:15 编辑

dragrass 发表于 2020-12-22 16:07
因为开放世界的原因

所以LOD和遮蔽还不能像传统线性游戏那么直接

14年开始业界(主要是育碧)就在推gpu driven 渲染管线。解决的就是这个问题。这个方案可以降低cpu向gpu传drawcall的压力,同时可以达成细粒度的模型遮挡剔除。tx现在在ns和移动端都开始推这套了,比如天刀手游和只只大冒险,还全是用unity改的

—— 来自 S1Fun

粉色猛男 发表于 2020-12-22 16:14

公司高层和打工人之间的矛盾?

GuardHei 发表于 2020-12-22 16:15

卿卿雅儿 发表于 2020-12-22 16:09
问个问题,企鹅技术很差吗?波兰厂商比企鹅技术差是重大黑点?

其实不算差,只是这么一想非常生草而已

—— 来自 S1Fun

GuardHei 发表于 2020-12-22 16:16

Tissuesea 发表于 2020-12-22 16:08
虽然不懂,
看完之后最大的问题是这个temporal filtering,解决这个问题主机的画面就不会变成一坨糊了吗


是的。锯齿会明显,但不会这么糊,然后特效精度会更不能看。

—— 来自 S1Fun

Realplayer 发表于 2020-12-22 16:20

dragrass 发表于 2020-12-22 16:07
因为开放世界的原因

所以LOD和遮蔽还不能像传统线性游戏那么直接


呃,我无知无畏,把摄像机视角当虚拟的光源不行吗,延迟太大?

IcarusInFire 发表于 2020-12-22 16:20

GI居然是实时的。。。当时数毛社评点2077第一个演示的时候就说2077没必要做真实的昼夜交替,地平线和孤岛惊魂5那种预烘焙再插入动态光影的效果也很好

dragrass 发表于 2020-12-22 16:22

GuardHei 发表于 2020-12-22 16:13
14年开始业界(主要是育碧)就在推gpu driven 渲染管线。解决的就是这个问题。这个方案可以降低cpu向gpu ...

那理论上讲这个改动没有很底层啊

连API的级别都没到

GuardHei 发表于 2020-12-22 16:25

dragrass 发表于 2020-12-22 16:22
那理论上讲这个改动没有很底层啊

连API的级别都没到

看你怎么理解底层了。硬件肯定不是。dx12级别api就可以了。做得好的话,对外暴露出来的制作流程变化都不会大。

—— 来自 S1Fun

真实之影 发表于 2020-12-22 16:25

我之前看吹哥一个演讲想到一个可能性,red引擎是从360算是早期时代过来的引擎,现在的2077和巫师2以及被取消的巫师1主机版的时代比起来增加太多的新功能,随着功能增加和开发人员流动,引擎本身维护会不会就有困难,导致一些基础功能不完善和bug频现

dragrass 发表于 2020-12-22 16:27

本帖最后由 dragrass 于 2020-12-22 16:28 编辑

Realplayer 发表于 2020-12-22 16:20
呃,我无知无畏,把摄像机视角当虚拟的光源不行吗,延迟太大?
这个遮蔽的意思就是说你没看到的东西都可以不渲染,比如挡住的,来降低硬件压力

但是传统逻辑判断要不要渲染是通过CPU的,就会比较吃力

因为CPU本身不直接参与渲染,所以遮挡的部分到底要不要渲染得看开发者自己设计的算法

比如一面墙背后的东西,到底是不是完全挡住了?怎么判断是不是完全挡住了?

这是我根据楼主的话的大概理解,不知道对不对

皆月镜 发表于 2020-12-22 16:35

UmarIbnLaAhad 发表于 2020-12-22 16:05
the medium好像也是波兰制作组,求别奶

这制作组做好了算是烧高香了,再奶也不能更烂了

wgoenitz 发表于 2020-12-22 16:35

所以就是技术烂,优化不行,靠着高端pc硬件性能强上

Realplayer 发表于 2020-12-22 16:35

dragrass 发表于 2020-12-22 16:27
这个遮蔽的意思就是说你没看到的东西都可以不渲染,比如挡住的,来降低硬件压力

但是传统逻辑判断要不要 ...

我还以为遮蔽判断不是实时的,比如角色一旦进到屋子那么不管他以后站哪
站窗子左边能看到的景色要加载,站右边看到的也要加载,所以开销比较大
既然已经是实时判断那就没办法了

crosz 发表于 2020-12-22 16:35

巨馍蘸酱 发表于 2020-12-22 16:36

LZ有没有玩过泥潭真爱RPG,能不能分析一下优化怎么这么差,明明WII和WIIU的前作表现很好啊

GuardHei 发表于 2020-12-22 16:42

巨馍蘸酱 发表于 2020-12-22 16:36
LZ有没有玩过泥潭真爱RPG,能不能分析一下优化怎么这么差,明明WII和WIIU的前作表现很好啊 ...

xb2只是掌机模式爆炸了,主机模式是ns平台技术最高的游戏之一,和荒野之息不分上下

—— 来自 S1Fun

巨馍蘸酱 发表于 2020-12-22 16:45

GuardHei 发表于 2020-12-22 16:42
xb2只是掌机模式爆炸了,主机模式是ns平台技术最高的游戏之一,和荒野之息不分上下

—— 来自 S1Fun ...

主机模式能跑720P算是还可以。但是即使主机模式在植被多的地方也会降低分辨率,XB2古拉即使主机也非常糊,好在XB2也就只有古拉草多。而XBDE的草比XB2更多,玩起来感觉更差

GuardHei 发表于 2020-12-22 16:50

巨馍蘸酱 发表于 2020-12-22 16:45
主机模式能跑720P算是还可以。但是即使主机模式在植被多的地方也会降低分辨率,XB2古拉即使主机也非常糊 ...

因为上了一堆ps4上都不敢随便上的特效的但是能在主机模式下保持相对稳定的帧数和分辨率,在我看来就是个小技术奇迹了

—— 来自 S1Fun

GuardHei 发表于 2020-12-22 16:54

巨馍蘸酱 发表于 2020-12-22 16:45
主机模式能跑720P算是还可以。但是即使主机模式在植被多的地方也会降低分辨率,XB2古拉即使主机也非常糊 ...

或者这么说。你把ps4上的地平线零之曙光的分辨率,模型和特效精度砍掉一些(但特效仍然保留),然后再额外加上一些hzd没有的特效,最后把视距拉的很远。这就是主机模式下的xb2

—— 来自 S1Fun

xvi黑翼公 发表于 2020-12-22 17:29

我不太懂技术上的问题,但是2077有对墙后敌人的侦测、骇客攻击、穿墙射击,一个定位所有连线的物件和敌人都要瞬间显示出来,可能是觉得分开做遮挡和侦测太麻烦了?

museqsou 发表于 2020-12-22 17:34

xvi黑翼公 发表于 2020-12-22 17:29
我不太懂技术上的问题,但是2077有对墙后敌人的侦测、骇客攻击、穿墙射击,一个定位所有连线的物件和敌人都 ...

渲染你可以简单理解成着色,遮挡的模型不渲染灰模还是在的
页: [1] 2 3
查看完整版本: 分析2077优化差的原因