《无人深空》创新、玩法细节等评价分析 如何评价无人深空(4)
导语:因为在这里还有另外一个非常重要的设计要点:虽然这个宇宙里,有2的64次方个不同的星球,但所有人看到的宇宙都是一样的。虽然游戏没有联机功能,但玩家们确实能够看到别人上传和命名的星球,在庞大的宇宙中找到其他
因为在这里还有另外一个非常重要的设计要点:虽然这个宇宙里,有2的64次方个不同的星球,但所有人看到的宇宙都是一样的。虽然游戏没有联机功能,但玩家们确实能够看到别人上传和命名的星球,在庞大的宇宙中找到其他玩家的踪影,看到别人所命名的生物——这证明大家所看到的宇宙,并不纯粹是用那个随机数生成的本地数据,而确确实实存在于所有人的电脑之中。
但从传统网络游戏的实现方法来说,这个“所有人都能看到的宇宙”原本是不可能存在的!只要做一个简单的算术,大家就能明白这一点了:假定一个星球的随机生成,真的只需要一个长整型变量,也就是一个64位的2进制数(64bit)。存储这个星球的随机生成种子,就需要64位2进制数,也就是8个字节(一个字节是8bit)。我们平时说的1MB有多大呢?有1,048,576字节,能存储131,072个这样的星球(约13万个)。1GB有多大呢?有1024MB,也就是说,能存储134,217,728个这样的星球(约1.3亿个)。1TB有多大呢?这个已经是大家一整块硬盘的单位,有1024GB,也只能存储137,438,953,472(约1374亿个)这样的星球。我们再用上服务器等级的硬盘,1PB=1024TB!这样的硬盘能储存多少个星球呢?140,737,488,355,328个,也就是140万亿个星球的数据。没错,即便我们动用了1PB这样惊人的服务器级别硬盘,也还没能存下这个宇宙每个星球的生成种子——遑论玩家们给这些星球和星球上的地点、生物们起的名字了。
那么,无人深空这个多层宇宙宇宙里,到底有多少个这样的星球需要储存呢?答案是1800亿亿个。我们换算成PB的话,是131,072PB——13.1万PB的服务器,当然远远超过一个游戏公司所能负担的上限。
所以,他们不可能使用这么愚蠢的“传统网络游戏”的做法。他们需要另外一种办法来存储这个“所有玩家共存的单一宇宙”。
这就是无人深空这个游戏大愿景的另外一半:用“伪随机数”的算法来同步所有人的宇宙。这是之前所有程序化生成游戏,从矮人要塞到孢子,都没有想到的事情。那些使用种子生成地图对战的游戏们想到了,但是他们从未想过要把这个算法扩大到一个真正的“大服务器游戏”上——这确确实实是一个非常疯狂,但也相当天才的想法。
我先来解释一下伪随机数的算法。对于学过计算机的人,计算机不能生成真正的随机数,只能生成伪随机数。通过一个算法,生成一个看起来没什么规律的大数字,然后再通过算法在这个大数字里面截取一段,之后再进行近似操作,对我们人类来说,看起来就好像是随机数了。
比如说最常用的伪随机数生成算法,叫做“线性同余法”:Xi = (Xi-1 * A + C ) mod M,通过取大数字的余数来快速生成伪随机数。懂数学或者算法的读者应该一看就懂,而各位不懂算法的大家不必深究,知道这是一个用于递归生成特定随机数的算法就可以了。
但是,伪随机数不是真正的随机数。如果你玩过那些廉价计算器,就会知道这一点:在这些计算器的伪随机数生成模块中,有极其明显的规律存在。比如你使用线性同余法,只要给定了计算的次数和函数的初始值,这个随机数序列的每一项都是固定的;当这个同余数字特别小的时候,甚至还会产生有规律的循环和特定数字。所以会有一些安全指南,告诉程序员的大家一定不要允许其他心怀恶意的用户在你的系统里连续取随机数,或者干脆就不要用语言提供的默认随机数算法(很多主流语言默认都使用线性同余法);在已知使用线性同余法的情况下,他们甚至能够通过连续取到一定数量的随机数反推到种子。所以,通常来说,我们看到这种默认通过一个函数来生成的算法都会觉得算法的随机性很差;一些从众所周知的函数(比如pi的通项公式)里面取值的算法就更糟糕,只要知道算法,种子瞬间就可以被破解。
实际上,我们在现实生活中,也大量使用和这个“伪随机数”原理类似的验证算法——最著名的验证算法就是被我们用于加密和验证的“大质数因数分解”(著名的RSA算法)。我们大量使用的“CRC校验算法”其实也是个类似的应用:只要给定输入和算法,任何一台计算机,一定都能算出相同的结果;反过来说,只要算出了相同的结果,我们就能够知道他们使用了相同的固定算法。
但是,在游戏领域,之前几乎没有人思考过如何反向使用“伪随机数”这类算法。随机性越高就越好的思维定势很难避开,所以几乎没有人考虑过能不能反过来利用大随机数序列的“伪”性来构造复杂的设计用途。
反向是什么样的呢?让我们想想看“给定一个算法和种子值,任意一台计算机都能生成特定的随机数”的反面……
没错,这个反向思维是“如果我想要一个所有人都能获得的特定值,那么给他们一个算法和种子值就可以了”!
我们不再需要这个至少13.1万PB的服务器用来存储宇宙了:只要在每台机器上存储这个“通过特定种子数值生成宇宙、行星及星球上一切的算法”,再给几个玩家一个相同的种子值,他们就会处在一个同样的行星系和同样的星球上。理论上来说,只要把玩家的数据再单独拆开,我们就能造出一个庞大的随机宇宙,让无数的玩家在里面同时游戏,还不用准备庞大的服务器和进行预先设计!
如果这个反向思维成真,只需要给每个玩家在服务器端储存一套用户数据,理论上我们就不需要去做单独的场景地图了。我相信,这个“可以同步的算法”本身,才是无人深空这个项目最开始的野心和愿景。不需要给大家预先准备副本和区域设计,只要所有人和服务器都使用同样的伪随机生成函数和算法,就能按需生成一个庞大的可以同时容纳很多玩家的宇宙。
从这点来看,在最初的设计方案中,这个宇宙一定、一定、一定是有多人游戏的。只有非常想做多人游戏的程序员和设计师,才会想出这种充满炫技色彩的实现方法,来解决这个大宇宙沙盘中的对战问题。而这个项目的总监、程序员、设计师……所有人,甚至包括索尼方面了解这个项目的宣传负责人,他们也应当是知道这个愿景的,所以才会印出那些包含多人游戏的包装盒来。所以,他们的项目制作人才会在各种场合,口无遮拦地畅想着以后“多人模式”实现后的景象。
- 《无人深空》怪凶残飞机一览2016年08月24日
- 《无人深空》地面站刷钱玩法解析攻略2016年08月24日
- 《无人深空》ps4版神奇bug视频演示 双线操作2016年08月24日
- 《无人深空》细节玩法解析攻略2016年08月24日
- 《无人深空》各系统玩法不足之处分析评价2016年08月24日
- 《无人深空》体验心得感受 游戏怎么样2016年08月24日
健康游戏忠告 抵制不良游戏,拒绝盗版游戏,注意自我保护,谨防上当受骗 适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活
- 作品版权归作者所有,如果无意中侵犯了您的版权,请来信告知,本站将在三个工作日内删除
- 提示:本站为防止低俗内容出现,用户发表的评论及上传游戏需本站审核后才能显示出来,谢谢