垃圾光荣 - 尝试分析灾厄启示录优化拉跨的原因

  • G
    GuardHei
    最近沉迷刷灾厄启示录,但还是被光荣这不思进取的样子给气到了,一方面是在任务设计上面我感觉还不如10年前玩的无双大蛇多样(好吧,其实两个也是半斤八两,但你这10多年一点进步都没得吗?),另一方面这个优化太狗屎了。一般来说,做游戏,大家都是做选择题,在分辨率-特效-帧数之间寻求平衡,马车8u为了分辨率和帧数放弃了特效,荒野之息为了分辨率和特效放弃了帧数,奥德赛为了特效和帧数放弃了分辨率。这些取舍我都能理解,毕竟机能限制嘛,动作游戏图个60fps,冒险游戏图个画面。或者搞个什么帧数模式还是画面模式。但我万万没想到,灾厄启示录在放弃了分辨率和特效的情况下,帧数也是一坨屎,这已经完全不是机能的问题了,就是单纯的垃圾优化,尤其对比了同平台的火纹无双之后,我只能emmmmm。

    说实话,一开始看pv的时候,我对本作画面还是充满了希望,尤其看到说epd也协助开发的时候,感觉这画面肯定没问题了,最多帧数拉点跨。结果没想到啊,没想到,pv1里大部分cg都是预录过场,难怪画面好啊。本来想怪epd支援不用心,但是前段时间看到了这个贴子https://bbs.saraba1st.com/2b/thread-1974084-1-1.html,把我雷的不行。节选内容:

    就这这么糙的草也要数百人学习制作?还要花半年?wtf?详细原因我后面会写。但简单结论就是,要不然这是光荣的吹逼通稿,想体现的自己用心,要不然就是真的技术拉跨。
    当然了,肯定会有人说,无双啊,这么多角色,不好优化不很正常吗?不好优化正常,但是阉割了这么多特效和分辨率后,帧数还如此低,那就不正常了。我来列举下相比荒野之息,无双缺少了哪些特性,大家再想想,这些特性的开销难道比多画一些相同模型的角色的开销小很多吗?(相同角色可以通过各种instancing技术极大地提高绘制效率,这是非常成熟的技术,顺便一提,switch的图形api是标准dx12级别的,不存在什么特性用不了)。
    • 分辨率从主机模式最高900p砍到810p,掌机模式720p砍到540p,更别提最低分辨率了,那个惨不忍睹。
    • 荒野之息有一个超远视距的动态大世界(你可以从地图的南端一路看到东北角死亡火山上的神兽在动,还是3d模型,而不是2d贴片),无双是一个非常线性体验的中小型场景。
    • 荒野之息有昼夜交替,一切光照都要实时,无双是固定时间节点。
    • 荒野之息的动态全局光,基于raymarch的体积光,基于物理的大气散射模拟在无双里都没有。
    • 荒野之息的反射(之前写过一个帖子,有兴趣可以看一看),包括屏幕空间反射,动态角色立方体贴图反射,动态场景前景反射,在无双里只剩下一个静态的非常低分辨率的立方体环境贴图反射。
    • 荒野之息里很多屏幕空间特效,比如环境光遮蔽,有弥散圈模拟的景深效果也全不没有了,景深就是一个普通的降分辨率高斯模糊。
    • 很多物体的阴影被砍了,比如大地形,长凳,低矮灌木。阴影分辨率和距离也差了很多。
    • 荒野之息里大地形和地表物体的过度融合也没了,所以硬边很明显,特别难看。
    • npc的ai也差了很多,只有近距离的角色有战斗ai控制的


    我写了这么多前情提要,主要是为了说明一个事:虽然我后面会列出优化拉跨的原因,但不代表就可以理解光荣为什么优化不行了,因为这些都是非常不应该的。最后,在进入正篇之前,我先声明下,以下内容都是我肉眼看的,以我个人知识分析,如果有错误还希望各位大佬指出,说不定能还光荣一个清白。
    先说一个我一开始以为的原因,但实际上这个应该影响不大。在玩家控制角色攻击的时候,哪怕是平a,每一个生成的打击特效都会带一个光源。比如下图:你可以清楚的看到地上有好几个橘红色的点光源生成了。我第一看到的时候想,这有必要吗?后来看了眼同平台的海拉尔无双1代和357m,才发现这原来是光荣的基操。不过考虑到应该是走的延迟渲染,那这几个光源对性能的影响也不会特别大就是了。所以排除掉了这个原因。

    然后就是真正的原因了:整个场景的绘制手段是高度动态的,几乎没有考虑过各类静态预烘培的方法(除了反射立方体贴图)。这是个什么意思呢?

    这意味着阴影全都是实时的。是的,整个场景里,无论是动态的敌人,可以被破坏的树木,还是静态的墙壁,他们的阴影全都是实时的。那原版是什么样的呢?我对比了ns的海拉尔无双1代,357m和火纹无双,这几个无双的阴影都是分开来的做的。动态的物体,在这三作里基本上就是敌人和据点里可以开关的门,是实时绘制的阴影。静态,比如地形,树的阴影完全是提前静态烘培死在贴图上的,所以人物本身并不受场景明暗度影响,考虑到无双本来就是(劣质)风格化画面,其实感官上没什么太大问题。下面两张图是火纹无双的例子。左边这种图是角色在场景阴影外的时候(红线是阴影边界),右边是阴影内的时候。可以看出,在不在场景阴影内部都不会影响角色的光照效果(稍微暗一点是因为人物和光源角度的问题),说明这阴影就是烘焙死的。

    实时的阴影是对cpu(准确的说cpu和gpu之间的io速度)和gpu的双重压力。cpu需要再裁剪一次阴影相机里的物体,drawcall会**增加(cpu向gpu发送数据的次数),gpu的rops(要光栅化)的负担也**加重。可是为什么灾厄启示录里的阴影都是实时的呢?主要原因是多了大量可被破坏的物体,诸如树现在可以被砍断了,很多木箱子木椅子都可以被破坏,敌人的骷髅营地和旋转木台都能给拆了,所以场景里很多物体都得画实时阴影。那剩下的物体直接烘培死阴影光照不行吗?我猜你可能会这么问。很不幸的是,还真不太行,因为灾厄启示录里多了一个东西 -- 草。
    (部分可破坏物品没有了阴影)

    加了草之后,原来烘死在地上的贴图瞬间就不适用了。草是高度动态的,没法烘培。哪怕你说我忽略草对光线反弹的贡献,也不行。因为草要接受阴影,而按光荣原来的烘培做法,动态物体是没法接受场景阴影的。那大片大片的草,本身就是纯色的,还没了阴影,这效果会很差(荒野之息里加了一堆特效,比如屏幕空间环境光屏蔽来提高草的深度感),所以阴影只能动态了。

    这还导致了一个问题。全动态阴影,如果距离太近就会导致阴影过渡太过突兀(虽然现在也没好到哪里去),所以必须要把阴影距离推的比较远。参见这个视频:https://www.bilibili.com/video/BV1RV411a7ao/。然而switch机能摆在这,再远也远不到哪去,而光荣完全没做过渡处理,这就导致如下的情况:从左到右是一个场景林克逐步往前走的截图。第一张图里远距离的守护者被距离裁减掉了。同时塔楼因为太远了也没有阴影。第二张图里距离近了,可以看到远处阴影的分界线,远于这条分界线的地方看起来就像是露天的一样。直到最后走到里面才发现,哦,原来是室内啊。

    相对的阴影距离远了,为了节约性能,又不可能提高太多阴影分辨率,但是这样就会导致阴影锯齿严重。注意下面这种图玩家的左边:可以清楚地看到本来是一条直线的阴影,现在全是锯齿。那这个怎么解决呢?锯齿是没法消掉了,只能把阴影边缘做柔和一点,这样小锯齿可以平滑过渡(大的当然就无能为力了)。以下面这种图为例:影子虽然比较模糊,但是”锯齿感“没有那么明显了。这么重的软阴影在无双游戏里是很少见的。比如ns上的357,你可以看到人物阴影的边缘毛刺很多,非常硬:

    问题在于,移动平台的pcf软阴影是比较大的。它需要多次采样,但是移动平台带宽低,纹理采样效率低。而软阴影的范围越大,效果越软,需要采样的次数就越多。所以最后哪怕阴影分辨率还是比较低,但是性能可能反而降低不了多少。
    另外,值得一提的是,光荣专门为玩家当前控制的角色单独渲染了一张阴影映射。参考这个画面:注意英帕本身的阴影是非常清晰的,但是她前后两个靠的很近的分身的阴影就变得非常糊了。


    说完了阴影,来说第二个影响大的因素 -- 草。大规模是用纯色高互动草算是荒野之息的一个工程创新之一。对于荒野之息来说,wiiu和ns内存低,地表贴图普遍低清而且重复,靠茂密的草可以遮盖掉这些问题,同时还提供了玩法。老实说,这么大规模的草在优化上本来应该是一个问题。但是在无双这就不应该了。首先,先扯下光荣那上百人团队做草的新闻,这也太离谱了。。。搓个能看的草并不复杂,ns本身支持dx12级别的特性,不存在没法做。而且自荒野之息之后,顶点草从摆动到过渡都被人研究的很透彻了,我自己也写过一套,单纯的草和风的互动的话,实际上一个人花一个一周就能弄的差不多了。如果要加上燃烧的特效,也就再多个一周也就ok了。因为这东西实际做起来并不复杂。本身草的模型,荒野之息是直接拉了两个三角形拼成的类似棱形的形状,也不需要花美工多长时间。荒野之息里远景用的面片来模拟草,但是灾厄启示录里远处并没有草,直接砍了。荒野之息里远处的草到近处的时候会有个缩放,以此平滑的过渡。而无双的草,看下这个视频:https://www.bilibili.com/video/BV1vf4y1v7GD/,是直接一“块块”地突兀的冒出来的,就和O神移动端的草一样。所以说,无双的草比荒野之息的已经要劣质很多了。那有人可能说,优化花时间?实际上,我也很难认可这个观点。草的两大性能开销:1. drawcall数量 2. overdraw(即同一像素被反复花了多少次)。这个里面,2可以直接被排除,因为荒野之息这种做法,草全是模型,没有半透明贴图,所以overdraw的情况和其他场景物体是一样的,也可以利用earlyz特性kill掉。那1呢?考虑到无双这个草的稀疏程度和距离,一共也没几块,我不认为这是什么瓶颈。另一种可能的瓶颈是记录草状态的开销(比如草的种类,高度,燃烧状态,被割状态),如果没有好好压缩的话,有可能会造成高的带宽需求。但我觉得有荒野之息团队的帮助,这也不应该成为问题才对。

    最后,就是一些奇怪的优化问题。前面阴影那一块说了,很多可破坏物体没有了阴影,我可以理解为优化,但是很多时候一些紧贴着地面的,完全没有必要做阴影的东西也去画了阴影,完全不知道在想什么。比如部分地上半透明的枯叶,配合低精度的阴影,开销上去了(半透明意味着阴影绘制开销更大),同时锯齿和粉刺还相当严重。另外,地上落叶的距离被**增加了,而我完全搞不懂为什么。下面贴一个荒野之息里落叶的距离:https://www.bilibili.com/video/BV11V411a7Jj/然后再贴一个无双里的:https://www.bilibili.com/video/BV1NV411Y7jJ/???这是在搞什么?为什么这个要莫名其妙开这么高?半透明物体的overdraw光荣你不省省留给各种华丽的技能特效吗?

    当然了,有的玩家肯定会说,啊,我是特效一多就卡的,很明显是特效的问题嘛。这不矛盾。我在这里说的就是,是什么让无双的渲染更容易碰到效率瓶颈。如果上述这些性能能提高,那也就意味着玩家可以放更多的特效而不卡。另外,感谢老任的更新,直接导截图和视频比屏摄方便多了。
  • G
    GuardHei
    排版好像有点小问题,有空改

    —— 来自S1Fun
  • w
    whzfjk
    概括一下是不是:
    1. 野吹草和无双相性并不太好,本可以预处理凑合的地方必须吃掉性能
    2. 野吹草本草都没优化好(EPD:带不动)
    3. 一些可以优化的地方没被发现

    不管怎么说,如果大家都用高性能设备,开发就可以一根筋做效果和堆料,不需要花时间 trade-off 和 profiling(还TM没找到),那么没有人受伤的世界就能完成了
  • c
    cyvery
    鼓掌,能不能分析下2077优化拉胯的原因
  • G
    GuardHei
    差不多是这个意思。
    我原来以为有了358开放世界的经验和epd的鼎力相助,在ns上实现那个cg播片的效果是完全可以的(毕竟那个精度也不高),没想到这么糟糕。
    后来想起df在review火纹无双时候说的一个事我觉得很有道理,光荣这个作品发售时间排的密密**的,估计一共也开发不了多久,而且omega force还可能多线开工...也没什么精力。这么看,那个所谓的几百号人学做草大概率是闲扯淡

    —— 来自S1Fun
  • n
    nashor
    买显卡
  • G
    Guildenstern
    玩完风花雪月真的会有人对光荣在switch上的开发能力有所期待吗?

    ----发送自STAGE1 App for Android.
  • G
    GuardHei
    火纹无双还行

    —— 来自S1Fun
  • w
    whzfjk
    莱莎2感觉倒真的还行(NS平台内横向对比),尤其是雨后地上有积水光污染关掉的时候(
    虽然低互动性RPG负载比较低。
  • n
    nashor
    那么多年下来了
    根本对光荣还是了解的
    在动作和打击这领域真的负分
    无双10个人物都可以差不多同一套攻击动作,只要武器相同就可以套人物造型当新人物了
    然后打击感永远都是大纸片,毫无体积碰撞
    人设倒是prpr
  • 绿
    绿冰
    说了这么多,实际上就一个结论
    光荣不惜牺牲一部分性能,来确保画面表现几乎和旷野之息一致
    这点还是挺重要的
  • G
    GuardHei
    有一说一,灾厄启示录在这方面做得不错不是357那种除了无双技,其他纯看武器的那种。每个角色都有自己的一套特性,大部分打起来还是很有意思的

    —— 来自S1Fun
  • H
    Hanzong
    兄啊,要不然把文章看完呗只要看完一遍的肯定得不出这个结论
    这明明说的是光荣在很多不必要的地方浪费了性能,而botw没有
  • G
    GuardHei
    ...你要不要再读一遍?

    —— 来自S1Fun
  • b
    bm7号


    358
    2080ti分辨率1080p
    这个场景,啥都没有,吹笛子40帧gpu占用95%,不吹的时候60帧gpu占用不到40%。
    光荣从来就搞不定dx11档次的优化。
  • n
    nisebara
    光荣的无双,不知道有没有发现,地板经常都是光秃秃的啥都没有,特别辣眼睛么?野炊无双对光荣来说已经是20分到及格线的进步了。。。
  • L
    LamdaHT
    野炊无双优化烂是烂,但角色攻击模组还是特色鲜明的,建议玩了游戏再来
  • n
    nashor
    我说是光荣多年给我的感官
    不是说野炊无双
    而且我说了,武器相同的前提
    野炊无双有武器相同或者类似的了?
  • m
    mememe!
    希多和米法...
  • k
    king520kyo
    两只鸟人 老王和林克大剑都是相同武器
    其实无双类角色多有重复组模可以理解 想要个个都不一样就是隔壁大香蕉系列每作就给你几个人用用 然后再卖一个资料篇
    这次所有角色都是不同组模是大进步了 打击感还好 希望以后能保持
  • s
    siro1987
    角色不同动作不同完全只是因为角色少
  • 木架穷奇
    仁王2虽然画面渣,但是帧数一直还挺稳定的啊,光荣怎么这作这么拉胯
  • U
    Ubb252
    任天堂教光荣生草笑了
  • G
    Ged
    这游戏会有dlc角色吗

    —— 来自 Xiaomi MIX 3, Android 10上的S1Next-鹅版v2.4.3
  • A
    Amelia_1812
    我觉得林克尔应该会加入吧
  • p
    punk7562
    那是ns机能不行啊,ps4上358不说游戏咋样野外场景好的很,简直是旅游大片。
  • B
    BREEEEZE
    其他还好,草距离太出戏了,昨天打初始台地想模仿一下出复苏神庙的镜头,结果刚跑到崖边突然冒出一堆草
  • k
    kepling1
    这贴的主题不是特效,而是优化
  • J
    JAS39-Gripen
    仿佛看着KT扶着草喊道:草死了草死了
  • m
    mememe!
    那2077在ps4甚至pro上一坨屎是蠢驴优化不行还是ps4机能不行?
    我寻思lz都说这么清楚了,明明就是光荣用一堆莫名其妙吃性能的特效,还进来就喷ns机能不行
  • d
    dren_zheng
    灾厄启示录我大部分时间没意识到掉帧严重
    也许是我玩惯了老任的瞎眼游戏,习惯了
    包括大家说的英帕一放炸弹就卡顿,我当时理解是为了表现效果故意放慢画面

    直到我玩了希多这个角色,才觉得这游戏帧数十分不稳定
    希多只要攻速快,就可以时停后强行用C6打一套直接破盾,所以C6的攻击节奏非常重要
    然后就发现了,大多数情况下C6的动作非常流畅快速,但某些情况下C6打的动作明显变慢,大概有正常时多50%以上的时间……