rimworld吧 关注:246,226贴子:4,420,087

【边缘杂谈】卡顿&优化

只看楼主收藏回复

逃兵拓展出来了,又看到许多担心帝国拓展生成几百个小人影响性能的,于是想谈一下边缘世界卡顿的问题。


IP属地:上海1楼2023-09-05 13:46回复
    1.什么是卡顿
    卡顿,一般表现为tps的显著降低,对应的就是游戏时间流速远低于设定的速度(也有用fps降低来定义卡顿的,但我个人感觉,对于rw这种经营游戏,fps远不如tps重要)。
    为了了解卡顿,我们首先要了解卡顿生成的原因。我把原因分为两类:程序错误和计算量过大。


    IP属地:上海2楼2023-09-05 13:46
    回复
      2.原因——程序错误
      对性能影响最大的是“程序错误”,特别是持续不断的错误。这往往表现为连续生成的红/黄字。
      由于处理和纠正这些错误会消耗大量的资源,甚至连续生成错误日志本身都会占用一定的处理能力,这些错误对性能的影响不言而喻。虽然有说法叫“只要能玩,管甚么红字”,但是为了游戏体验,还是尽量做好排查,避免这种情况罢。
      说句题外话,也许泰南知道mod是边缘世界的生命基础,所以游戏本身对“程序错误”的容忍程度是很大的,可以说只要引擎不崩溃就能继续跑(其他的游戏,比如某星、某氧、某行星号等,只要稍微有点不对,轻则闪退黑洞,重则游戏本体都给你扬喽),但这并不意味着带着红字游戏是一个好习惯,就像小人少一个肺肾也能活,但是大慈大悲的边缘玩家一定不会干出这样的事,对吧


      IP属地:上海3楼2023-09-05 13:47
      收起回复
        3. 原因——计算量过大
        当然,更常见的原因是因为计算需求过大。游戏里的每一个世界,都是由一个一个一个的元素组成的。而每一个元素,都会产生计算量。当所有计算量加起来超过了cpu0的处理能力时,游戏就会减慢时间流速来减缓计算量的产生,从而导致卡顿。
        那么有哪些办法来主动减少计算量呢?
        3.1
        地型的选择。明显的,冰盖和沙漠的地图元素就比热带雨林少得多(这也是为什么我比较喜欢跳沙漠),所以冰盖和沙漠在流畅性方面就有先天优势。而炎热气候不会存在和雪有关的计算,理论上比寒冷气候更好。
        3.2
        合理的地图大小。虽然200*200和300*300看上去差别不大,但是后者比前者要大了不止一倍,地图元素也相应多了一倍。所以要根据自己的需求设定大小,别玩小木屋飞天流结果搞个350*350的地图
        3.3
        主动减少元素数量和计算量,比如及时清理尸体、把会老化的物品放室内以减少老化计算(腐烂同理)等等。
        也应该减少“遍历”计算量。每时每刻,系统都有一些检查会遍历某个区域,这些计算量也可以通过适当操作来减小。举几个例子:给不限次数的熔炼钢渣块/屠宰尸体限制范围;缩小不必要的居住区;移除不明所以的屋顶区、除污区;给炮塔断电(否则会一直索敌);防止殖民者闲逛(否则会一直找工作)等等。
        3.4
        mod选择。有一些mod是有名的卡顿mod,比如一直计算地形改变的TMD大自然、显著增加逻辑运算的common sense、增加了大量树木动画的cmj等等,除非必须,尽量少装。反之,可以选择一些优化mod,可以有效缓解卡顿。


        IP属地:上海4楼2023-09-05 13:48
        收起回复
          3.5 pawn
          说到这里,有人可能会想,你的主题是什么?怎么一直不说?
          没错,计算量的大头,就是pawn。
          对于地图内的pawn来说,优化流程大家应该很熟悉了:精英流、工作专精、防止闲逛;机械体用更多工作模式mod,选工作/休眠;少养动物,限制活动区等等。重点是world pawn。


          IP属地:上海5楼2023-09-05 13:49
          回复
            3.6.world pawn & mothball
            在说world pawn之前,我们先要知道一个机制——mothball(封存)。关于封存的知识,可以去看这个帖子: https://tieba.baidu.com/p/8348028306?pn=1 ,我这里就简单介绍一下。
            考虑到性能影响,rw会将健康状态稳定的worldpawn封存起来,将计算量减小到可以忽略不计的水平,根据上面这个帖子的计算,25000个封存的worldpawn才等于一个未封存的worldpawn。
            看起来很理想,是不是?可惜封存有个前提,就是“健康状态稳定”。而所有会随时间变化的健康状态都被当作不稳定的。所以——
            打完袭击后受伤逃跑的小人,不会封存;得病、感染的小人,不会封存;由基因带来的有精神药物依赖的小人,也不会封存……等等,什么
            这意味着每次污骸种袭击,就会多出几十上百个永远也不能封存的小人。emm……runtime GC,启动
            为了减小不能被封存的world pawn数量,我们可以主动查看world pawns mothball prevention,找到无法封存的原因,删除(或修改,如果你会patch的话)对应mod。

            比如这个图,就应该删掉biotech DLC,啊不是,战争罪行2mod。当然,你也可以直接runtime GC启动,就是后果可能有点严重,不熟悉开发者模式操作的不建议使用(
            所以我们再回到最初的问题上来,帝国拓展生成的小人会不会影响性能?
            答案是不会。这张图就是我在变节者mod存档里面截的,250*250的地图,有快300个world pawn,但是未封存的只有17个,所以可以跑到830tps,和不加帝国mod区别不大。(当然,我一直不开污骸种派系,如果开了可能会多出一大堆精神药物依赖)


            IP属地:上海6楼2023-09-05 13:52
            收起回复
              总结:
              1.解决红字
              2.优化计算量
              合理选择地型,如选择冰盖和沙漠地图元素较少,减少计算。
              设置合理的地图大小,不要过大。
              主动减少元素数量和计算量,如及时清理尸体、限制动物数量等。
              减少遍历计算量,如限制区域范围、停用炮塔等。
              谨慎选择安装mod,避免安装会增加计算量的mod。
              3.优化Pawn
              精英流
              工作专精
              防止闲逛
              机械体用更多工作模式mod,选工作/休眠
              少养动物
              限制活动区
              4.善用mothball功能,减少world pawn计算量


              IP属地:上海7楼2023-09-05 13:53
              回复
                (完)
                顺便说一句,汤暖暖的原拓框架今天更新了,地图进不去,本来还想多截几张图的,现在只能作罢


                IP属地:上海8楼2023-09-05 13:55
                收起回复
                  @敲击痩 申个精试试


                  IP属地:上海来自Android客户端9楼2023-09-05 13:58
                  回复
                    一楼


                    IP属地:四川来自Android客户端10楼2023-09-05 13:58
                    回复
                      cmj那么好看,就装,就装


                      来自手机贴吧11楼2023-09-05 14:07
                      回复
                        都怪我买不起i913900


                        IP属地:上海来自iPhone客户端12楼2023-09-05 14:47
                        收起回复
                          我:很好,我明白了。
                          我那饱经沧桑的旧电脑:不,你没明白


                          IP属地:浙江来自Android客户端13楼2023-09-05 14:50
                          收起回复
                            所以gc能直接用吧?工坊好几个,哪个好


                            IP属地:广东来自iPhone客户端14楼2023-09-05 15:15
                            收起回复
                              😈


                              IP属地:安徽来自Android客户端15楼2023-09-05 15:24
                              回复