有人称原神的代码是屎山,如何评价?
- 20 个点赞 👍
有一说一,原神是清理过一次的屎山。
为什么这么说呢,因为我还记得我有一次格式化电脑之后,下原神要下150个G。
然后下个版本原神就清理了不少东西出去,现在原神只有80多个G的体积了。
查看全文>>
知乎用户 - 5 个点赞 👍
别说原神的代码了。
我玩一款端游 PSO2NGS,出于兴趣,做了个基于 Google Sheet 的伤害计算器。
当然本来是给自己做自娱自乐的,后来发现有不少玩家有那个需求我就把他公开了,(需要梯子)现在国际服的玩家基本都在用这玩意。
NGS damage calculator 3数学方面其实非常原始,基本就是加减乘除。可读性是没有的,公式是乱得我过俩礼拜都不认识的,UI是4399级别的,反正主打一个能用就行,如果出bug,别人发现不了就不是bug。
但是就是这么原始的东西,我都因为屎山太多,干脆从头开始重写了一个版本,之前那个版本已经屎山到我用两种不同的算法算一个数据本来应该一致的答案,最后每次都有误差,我花3天都找不到问题出在哪了。
所以说一个大型的,涉及到数百人,以年为单位的软件工程,出现屎山是正常的。
原神出屎山了怎么办?在星铁把原神的屎山修了就不叫屎山,反正星铁的屎山绝区零修就行了。
戴森球计划那种7人团队,从立项开始就已经知道自己要做什么,始终把优化放在第一位,用660Ti的开发
查看全文>>
delight - 4 个点赞 👍
任何一个项目都是屎山代码,关键在于优化维护的如何,这就是垃圾处理厂和垃圾山的区别。
不说别的,起码今年我听过3个游戏可以靠后台开原神来稳定帧率了。具体哪三个我就不说了,有心的可以自己去查查看
查看全文>>
无铭 - 1 个点赞 👍
屎山不屎山的我们不知道,反正我们也没看到过,但是超过30人的团队里PM就是个敏捷教练大家都是清楚的,出屎山的概率呢?不知道,反正不想说
查看全文>>
liu - 1 个点赞 👍
这坨屎山挂在后台可以优化《鸣潮》的内存异常问题,
《鸣潮》连屎山都不如
查看全文>>
孙权 - 0 个点赞 👍
首先原神的代码肯定不是屎山,为什么我这么说呢,因为现有的原神足够大,没有一个人能完整的理解这么大一个游戏世界,这必定是多人合作的结果。
1.原神的BUG是不是足够多?现在导致你不能运行下去的BUG还有吗?几乎没有了
2.运行原神的 硬件配置是不是足够低。
反正我2016年的win7老电脑,只用QQ或PS都可能卡机。 但是开着QQ打原神一天都很流畅没问题 ,难道还要考虑10年前的机器也能用?这配置要求够低够老了吧
3.认为原神代码屎山的,肯定是懂一点代码,拿原神出来贬低一下显得自己编程能力更优秀? 如果你的编程能力明显优于原神,米哈游肯定要你,也可以去腾讯或者网易的任意公司当主程序,或者主架构。那么全中国也没几个人了,还有原神同时有PC端和手机端多端的。 再排个序 1.足够好玩 2.画面也过得去 3.优化老电脑也跑得动 4.同时有手机端和电脑端。同时满足以上条件后,你确定能做出更好更优秀的代码?再去评论是不是屎山,而是连这都做不出来。如果非要说屎山代码的话,黑神化 比原神的可能性更高
查看全文>>
Sam蜂鸟 - 0 个点赞 👍
我就这么说吧,在程序员眼里,凡是看不懂的代码都是屎山!
查看全文>>
诡月 - 0 个点赞 👍
第五人格比原还要早点,建议你去b站看看第五的几个著名bug事件。
屎山,,,,我真的不信有大型项目不是屎山的
查看全文>>
Irene我老婆 - 3434 个点赞 👍
原神是2017年立项的,换句话说,它使用的unity基础版本应该不会晚于2018。
——米哈游在unity基础上进行了魔改,通常来说,对于一个既有项目的魔改,必然会造成一大堆屎山。
比如,最近你有没有发现,进入游戏时鼠标会自动归零到左上角?——已知unity的原点通常是屏幕中心,只有windows才以左上角为原点,那么,是不是也就意味着,最近原神的输入检测体系有一定改动,而且造成了某种未知的bug呢?
好,unity的InputManager有一个巨大的问题,就是它走的不是消息队列,这玩意是消息队列返回到Update里的状态,也就意味着,如果你在两帧之间进行了多次操作,InputManager是检测不到的。
因此,unity引入了新的InputSystem(该系统不会造成鼠标强制位移,所以,鼠标位移是别的东西导致的,这里我们只是拿来举个例子)。而这个InputSystem也有各种各样的bug,比如,从后台切换回游戏时,鼠标的第一次点击不会触发事件。
我们在原神里没有发现过这种状态,这并不意味着原神没有用InputSystem,相反,还有另一种方法也可以达到弥补bug的功能:
那就是,将两代Input系统结合起来使用。InputSystem做一个基础触发,InputManager做补充。如果system工作了,那么manager就不用再做。
……好,现在的逻辑很明确了(我们就假设原神采用了这种方案):同时使用InputSystem和InputManager,也就意味着两者的bug被同时继承下来了,只是我们通过另一个函数来弥补了其中已知的几个bug,那么——
一旦有未被发现的bug,并且确定了跟上述二者都有冲突,怎么办?一旦我们用来平衡二者的函数发生了bug,又怎么办?
我的朋友,这,就TM叫做屎山。
而这仅仅是工作中微不足道的一个小环节而已。
我们现在有理由相信原神中的跑步跳跃等动作实际上就是早期产生的一个屎山,因为unity的动作系统其实也有两个版本,简直就跟上面说过的那俩Input一毛一样。
考虑到开发环节中跑跳等动作是最优先需要解决的,因此可以推断,当时为了快速出成果,制作团队在跑步动作上使用了某种跟我之前提过的一样的方案,结果因为屎坑太大,bug太多,现在改不了了。
跑步动作不是像你们想的那样,就只是一个简单的跑步,实际上跑步要照顾很多其他的东西,比如跑步的时候转跳跃、转走路、转冲刺、转急停、转下落,以及各种各样你可能想都想不到的地方……
我的朋友,这,就TM叫做屎山。
这就是为什么可莉的走路姿势被改了、为什么草神的跑步姿势是普通萝莉跑,这都TM可能是屎山的后遗症。
而这个后遗症,说不定哪天就爆发了……
或者,其实已经在测试中爆发过很多次了……
编辑于 2023-04-13 23:18・IP 属地辽宁查看全文>>
某人 - 1518 个点赞 👍
其实你可以做个小实验。
你随机挑一书架的书,然后一本一本往上摞,尽可能放的规整。
提醒你一下,记得把大本的放下面。
我不知道你能摞多高,我的记录是一米四,再高就往下滑了,一碰就会倒。
当然如果你用的是规规整整的新书或者一摞A4纸的话大概能比我高不少,所以我现在需要你再尝试着在从下往上数第四本的上方插入一本2mm厚的小笔记本。
再试试把第七本抽出来呢?
能做到吗?
是的,这就是一坨具象化的简易“屎山代码”。
在不断的更新中,每一个微小的错误都会累计,造成难以想象的后果;每一本书在摞上去前都是逻辑自洽的,但是随着日后的更新,越来越多的新书本摞到上面后,它的逻辑就没人猜得到了。
所以说,持续更新游戏要么稳步推进不要太激进,要么就在适当的时候结束自己的游戏生命是最好的。
没想到这么个回答看的人还挺多的,那就二更一下吧,不过由于手头没那么多书也没有专业建模软件,就拿电脑自带的画图3D给大家凑活一下了(为了方便区分夸大了空隙,实际上比这个紧密得多)。
本人也不是专业编程的,只是粗浅的学过一点皮毛,略微懂一点嗷略微懂一点。
首先,我的评价是,任何项目大到一定程度时,臃肿、混乱和不稳定三者必然至少有一样。
当然,我展示的都是管理水平比较高的项目,草台班子的评论区有。
比方说这样的,这就是一个稳定、有序、但是臃肿的“程序”。
你需要有足够的底层架构来保证功能的稳定运行——直观上来说,你这样搭建的程序非常稳定,而且即便某一部分需要更新也是比较容易的,毕竟每一本书单拿出来都不会影响整体的稳定性。
但是问题在于你这样的程序太过臃肿,三本书就可以实现的“功能”(高度),这已经用了14本;而在后续的更新中,每次更新需要扩张的都是在几何倍数增长。
而且随着更新次数的增多,功能(高度)足够复杂时,本来优秀的底层架构也会变得不易更新——比如说你还能更换图中最底层的中心那本书吗?
那么为了不臃肿你还可以选择这种:
仅仅用了六本书,就达到了上面十三本书都未曾达到的高度。
而代价,则是稳定性相当差——你新功能一放上去倒了,可能是第一本书某个折起来的页脚导致的,也可能是上面某一本书的重量并不平均……
任何一环出现的问题都可能导致整个程序的崩溃;而且想要更换早期的部分几乎是不可能的——它与其他部分的联系密不可分,任何一个微小的变动都可能导致上面的某一层出现问题。
那么,登场的将是我们的第三种策略:
眼熟吗?没错!就是和砖墙一样的结构,这样的话相比于第一种不那么的臃肿,相比第二种又稳定很多,其中某一部分出了问题也还有其他部分做支撑,一时半会儿不至于崩溃。
那么缺点呢?
缺点就是某一部分坏了,但是有别的部分做支撑一时半会儿崩溃不了,等你某次加盖新部分的时候突然和做支撑的那部分冲突了,墙面轰然倒塌的时候,你完全找不到问题出在哪本书上。
这就是我所说的“混乱”。
导致你程序崩溃的,不一定是哪的问题,完全可能是有一个几乎毫不相干的部分突然不吃力了……
当然,我这都是非常理想化的情况了……
实际情况中的编程远比我列出来的要复杂。
大家知道么,1M是一百多万个字节;
也就是一百多万个字母。
别看程序往往就几K几M大,其实那都是程序员的头发(划掉)心血。
而程序的逻辑远比“书本”难懂。
自己一个人写的程序都难免臃肿/混乱/不稳定,更不要提那么大的项目那么多人那么多功能了……
所以每次看到有人说“XXX一下很难吗?”“不是XXXX就好了吗”就觉得很心痛。
程序的搭建和更新都是工程量很大的活……
请让我们多一点宽容,多给他们一点时间吧
三更,一点小私货。
评论区看到有人说米哈游芭芭拉水环bug修改迅速,龙王转圈修改八个版本足见傲慢。
为米哈游的程序员辩解一下——
首先科普一下两个设计的原理(以下内容均是通过现象推本质,如果有程序大佬解包结果与我有冲突请以他人为准),和bug诞生的原因。
芭芭拉的水环逻辑其实非常简单,和场景中的“潮湿”环境应该是一样的。
潮湿基本逻辑就是
“当 无水元素附着生物 出现在 潮湿范围 内 时,
对 环境 内 所有生物 进行一次 超弱水附着”
这一附着过程本身是几乎没有内置CD(约1/3秒)的,毕竟环境元素附着就是要这样才合理,但是因为是弱水,而且要生物进入环境才生效,所以实战中附着频率并不高,芭芭拉也没有替代行秋成为早期火C冰C的救世主,反而因为会无差别挂水而成为了著名内鬼。
但是后期新加入的草种子打破了这一平衡。
我们要明白,有一句理工科学生耳熟能详的话叫做“奥卡姆剃刀”:
“如无必要,勿增实体”
原神项目组的程序员很明显深以为然,原神内的所有物品分类大类其实就五种:“场景”、“生物”、“角色”、“可交互物”、“特效”。
而最初的草种子,就是套用的“生物”大类下的“中立生物”的模板。
聪明的看客肯定明白了——程序员在设计草种子时很明显忘记了“潮湿”的定义。
然后戏剧性的一幕就出现了,每次草种子诞生时会触发一次“未挂水中立生物进入潮湿范围”,然后芭芭拉水环附带的“潮湿”就会进行一次范围挂水,挂水又会和草元素生成新的草种子,这就使得芭芭拉水环的挂水频率直接从“聊胜于无”进化到了“逆天”的程度。
但是好在虽然“潮湿”是游戏的底层逻辑,但是草种子是新加的,程序员仅仅是将草种子的代码由“中立生物”替换为“可交互物”就解决了该问题,难度大概是随便拿本书山最顶上的书改一行字的程度吧。
虽然确实是牵扯到底层代码的bug,但是其实修起来并不困难。
当然——这次事件一定程度上间接导致了后续外挂制作者利用卡维技能删除玩家可交互物的恶性事件,不过这都是后话了。
再说说那维莱特的设计逻辑——
刚刚我说过,原神项目组的程序员很认同奥卡姆剃刀原则。
其实那维莱特的重击,并不是新机制,而是一个远古机制的延续,那就是弓箭瞄准。
不难看出其实二者不论是形体还是视角还是操作都是一样的……
那维莱特的重击其实就是把弓替换成了法阵,把三段蓄力的元素箭替换成了大水柱,最后给大水柱加了伤害判定而已……
其实程序员这一手并无大错,毕竟原神灵敏度加上常规鼠标的600dpi,一个人想要通过转鼠标提升伤害是很困难的——每面稳定转三圈,一圈鼠标至少移动五厘米,人是很难做到的。
但是他们明显没料到如今的鼠标就连上千dpi都能做到了,而利用鼠标宏也能轻松达到稳定一秒三圈的速度。
表面上不过是新人物的新机制,实则真正是远古代码的遗留问题。
所以程序员面前有两条路,一条,是把从开服时期就有的弓箭瞄准代码重新优化,相当于把最底下最核心的书抽出来改半本再放回去;而另一条,是为那维莱特专门写本新书,替换掉靠远古代码支撑的那一部分。
两条路都不简单,从后续来看他们是选择了第二条。
但是实际上,项目组从始至终只有一条路,那就是不修这个bug。
论做游戏,我不如他们一根;但是论人情世故,这群技术宅们大概一辈子也想不到,仅仅是修个bug居然能引起那么大的轩然大波。
编辑于 2025-01-11 22:35・IP 属地辽宁查看全文>>
肆久 - 887 个点赞 👍
查看全文>>
风一样的男子 - 513 个点赞 👍
查看全文>>
济南大仙爱搞机 - 149 个点赞 👍
查看全文>>
Adddaaam - 84 个点赞 👍
自身原因,匿名比较好
也许是自己不是大佬的原因,我觉得米的技术bp是真的喜欢在面试的时候问八股。
他可能吧不认为这是八股,只是觉得这是IT的一些基础理论知识。确实是一些基础理论,也确实很重要。但这些是不用真正理解就可以背的,要不然为啥叫八股呢。
这就导致了进入米的应届生有一些在对应岗位的开发能力和经验并不是绝对拔尖的。
刚进去做完miniproject就进项目组写代码。很可能业务不熟练,代码不精简,对一些接口的用法也各不相同,积累一定程度就成屎山了。
应届生刚开始进项目组的时候,正是主线任务「卡利贝尔」的时候,反正我玩的时候觉得卡死我了。显卡占用在50%-100%来回跳,每跳一次屏幕就卡死几秒,平均帧率10不到,调到低画质都不行。现在应该已经优化了。
一些个人思考
来米面试的同学们简历恨不得全是杠杠硬的项目,问这些项目多好。就直接多问项目中某一项功能的具体实现,这玩意没做过真没法编。甚至可以直接从几个项目组中拿某个需求让他阐述方案。
招搞开发的人,重要的是经验啊。
举个不恰当的身边例子,就像飞行员重要的是怎么操作,能手操飞机在复杂条件下平稳着陆远比理解飞机为啥能飞的理论重要。虽然后者照样也要知道才行。
不能都按搞研发的考察标准来招开发啊!
更新一下,
看了评论区的一些留言,又和一些人聊了聊,仔细思考后确实觉得似乎是自己分析不严谨,有些考虑不周,夜郎自大了。
bp大佬这么干肯定有好处的,理论加手撕代码的形式的确很考验基本功,甚至是浑水摸鱼的照妖镜。并且业务问题也总有从生到熟的阶段。而且游戏代码质量和面试的问题甚至也许都并无直接联系。
仔细想想,自己确实是因为没见多少世面就这么评价,确实傲慢了,这篇回答会在最近删除。
编辑于 2023-04-16 00:40・IP 属地江苏查看全文>>
匿名用户 - 44 个点赞 👍
原神其实还凑合。
自家崩坏3才是真正的屎山。
我举一个新鲜出炉的例子吧:崩豆人。
在崩豆人场景中,CPU大核会永远满频满载。
大核爆满的后果是什么呢:当然就是整机功耗很高,且持续高负载的大核让CPU温度高达90℃,且居高不下。
我最开始看到这种现象的时候,我还以为是崩豆人同屏玩家太多,导致性能需求极大,才导致的CPU大核满载。
但后来发现,不是这样的。
CPU大核运行在3187Mhz时,它会保持100%使用率,此时帧数稳定90帧。
CPU大核运行在2.1Ghz左右时,它依旧保持100%使用率,此时帧数也依旧稳定90帧。
What?
所以3.2Ghz下,相对于2.1Ghz下多出来的性能和功耗,花费到哪里去了?
所以我记录了同一个关卡中,CPU分别为3.2Ghz与CPU为2.1Ghz下的游戏记录。
可以看到二者全程的流畅度几乎完全没有区别,都是90fps跑满的水平。
但是,3.2Ghz的记录下,手机平均功耗8.06W。
而2.1Ghz的记录下,手机平均功耗为6.75W。
这平白无故多出来的1W多功耗,就这么被白白浪费了。
而且还不算完,既然2.1Ghz下依旧能90fps顶满运行,那么我们是否可以猜测,在跑更低的频率,更低的功耗的时候,也可以保持90fps运行?
但受限于我这台手机不能root,无法自主调控频率,因此我暂时验证不了了。
不过可以看出:崩坏3在崩豆人场景下的优化存在明显问题,手机CPU大核无效满载,平白浪费了很多功耗。
目前原神我暂且还没有遇到类似的现象,希望以后也不要有。
发布于 2023-04-19 15:40・IP 属地辽宁查看全文>>
草履虫稽亚娜 - 32 个点赞 👍
这是一句正确的废话
把原神两个字
换成任何其他大型项目都没问题
这个代码量
谁敢说不是屎山
但是
原神可是42天一个版本的屎山啊
从理论上来说
这座屎山一定是码的比较规整的
编辑于 2023-04-14 13:36・IP 属地山东查看全文>>
电动苹果 - 5 个点赞 👍
没什么好评价的
上了一定规模、上了一定时间的代码,就没有一个不是屎山的
如果经手的人还经常变,屎山概率20000%
编辑于 2023-04-14 08:54・IP 属地四川真诚赞赏,手留余香还没有人赞赏,快来当第一个赞赏的人吧!查看全文>>
写bug的程序员 - 4 个点赞 👍
工作十多年,我就没见过运行了超过 2 年的系统代码不是屎山的项目。
大厂的核心业务项目也不例外。
不用怀疑。
但是确实有那么多屎山能够持续运行,还能相对稳定的提供服务,这就够了。
另外,见过不少空降来的所谓架构师准备重构屎山,结果无一例外造了一座更大的屎山。
是的,没见过例外。
编辑于 2023-04-17 12:11・IP 属地江苏查看全文>>
Rean - 3 个点赞 👍
说明这人外行呗,写过代码的都知道,一个功能点迭代五代以上或者整个系统迭代10代以上出来的代码99%都是都是屎山,剩下1%是大屎山。你说原神的代码屎山基本上等于说它是个游戏。
发布于 2023-04-15 01:03・IP 属地山东查看全文>>
杨熙栋 - 3 个点赞 👍
查看全文>>
ZGLinus - 3 个点赞 👍
查看全文>>
且行丶且歌 - 2 个点赞 👍
查看全文>>
鵺鸟 - 2 个点赞 👍
屎山的根本原因是时过境迁和人员变动,这个不会根据游戏不同而转移。
君不见各大名厂都有出了名的祖传bug,从十几年前到现在还是原汁原味。
第一点,时过境迁。
就算是本人的代码,句句都注释,过了五六年一样得看半天才能明白思路。这个完全没法,写代码和看代码完全就是天堂和地狱的区别。
有可能你现在已经精简了句式,不用这种写法了,所以更看不懂自己以前写的啥了。
第二点,人员变动。
说实在的,每个人写代码的习惯和思路都不一样,有人命名规范也有人写拼音更有甚者随便写个xy,有人要打空格,要加注释也有人根本就不换行。
就算是注释,有人习惯//也有人要/*,也有那种封装完了只在入口提一句功能的主。
一份代码多翻腾几次就已经开始看不懂了,如果再多传几轮,时间拉长点,那估计原作者都不知道是个啥玩意了。
有人用python的思维写,那也有人要用java,内容一样但思维方式完全不同。
代码屎山只取决于人员变动的情况和写代码的良好习惯,和游戏有个锤子关系。
这年头你想找一个没屎山的游戏,那估计得找独立个人开发的了。
这都23年了瑞典蠢驴还是单核cpu0,真就祖宗之法不可变是吧。
发布于 2023-04-17 17:59・IP 属地四川查看全文>>
浅间奏 - 1 个点赞 👍
查看全文>>
扼杀黑暗 - 1 个点赞 👍
嘿,朋友,这是一个非常有趣的问题。我相信这个问题的答案会引起很多人的讨论。
首先,我必须承认,原神的代码确实有一些问题。有些人可能会说,这是因为游戏是由中国公司开发的,他们的编程技能不如西方公司。但是,我不认为这是一个公正的评价。毕竟,中国有很多优秀的程序员和开发人员,他们在全球范围内都享有很高的声誉。
相反,我认为原神的代码问题主要是因为游戏的开发周期非常短。根据一些报道,游戏的开发时间只有两年左右。这对于一个如此庞大的游戏来说,确实是非常短的时间。因此,开发人员可能没有足够的时间来完善代码和修复错误。
此外,原神的代码问题也可能与游戏的跨平台性有关。游戏可以在PC、手机和游戏机上运行,这意味着开发人员必须编写适用于多个平台的代码。这可能会导致代码的复杂性和错误率增加。
但是,尽管原神的代码存在一些问题,我认为这并不意味着它是一座“屎山”。毕竟,游戏在全球范围内都受到了广泛的欢迎,它的游戏机制、角色设计和故事情节都非常出色。此外,开发人员也在不断努力修复游戏中的错误和问题。
总之,我认为原神的代码问题是存在的,但这并不意味着游戏是一座“屎山”。相反,它是一个非常出色的游戏,它的成功证明了游戏开发人员的努力和才华。
那么,你认为原神的代码问题是什么原因造成的呢?你认为游戏的成功是因为什么?欢迎留言讨论哦!
引用出处:https://www.gamersky.com/news/202109/1407326.shtml
关注我,24h×7×365,全年无休 带你追踪时事热点
答主十年技术研发经验,三年管理经验,曾就职网易、字节。
如果你想使用AI聊天、AI画图(chatGPT, OpenAI, Midjourney, stableDiffusion),
如果你想获得简历建议、求职答疑。
欢迎咨询,咨询链接:https://www.zhihu.com/consult/people/767653864546508800
我会一教到底,带你 快人一步 使用AI 助力生活。发布于 2023-04-15 09:02・IP 属地北京查看全文>>
魔法少女王姐 - 1 个点赞 👍
查看全文>>
莉莉丝 - 1 个点赞 👍
什么怎么评价?莫名其妙。
啥叫“xx的代码是屎山”,应该问“能不能找出一个项目的代码不是屎山”。这问题应该不是程序员问的吧,程序员都知道屎山是所有大型甚至是中小型项目的共同属性,敢号称不是屎山的才让人稀奇。如果所有项目有一个父类,它的第一个字段就是屎山程度值(限制0以上,不可为0)。
这问题听上去就跟“有人说人类不是石头,如何评价”一样,莫名其妙,不知道到底什么意思,而这跟人类或者石头又有什么关系。说是正确的废话还是低算了这个问题的迷惑程度
发布于 2023-04-15 22:24・IP 属地广东查看全文>>
水神 - 0 个点赞 👍
查看全文>>
Dr.张狒狒 - 0 个点赞 👍
pc玩家,偶尔手机做每日。
经常玩着玩着视角卡在某个角度,往左右划的时候会卡住,然后划过头,会让人很晕。如果卡的时候快速左右划,就会PPT一样左右闪。
不知道啥时候能优化,或者我啥时候能优化一块更好的CPU。
发布于 2023-04-15 01:31・IP 属地云南查看全文>>
我想去吃东西 - 0 个点赞 👍
查看全文>>
今天吃点啥