一点点对“过程生成”的介绍

翻译:Infinity汉化组heloc

当人们听说《无限星辰:失落的地球》 ( Infinity: The Quest for Earth ) 将是一个包含上千亿星系的虚拟宇宙世界时,一般都会问以下几个问题:

  • 怎么可能以一己之力开发一个满是真实比例大小的星体的虚拟宇宙?

  • 玩家怎么无缝的穿梭在宇宙空间和行星大气(地面)之间?

  • 系统怎么保证每次我回来看到的星球还是原来的样子?

  • 那么多星球,不用一些画好的模型来重复拼接,可能吗?

  • 这么多运算要占用很多硬盘空间吗?

  • 反正就一句话,你这东西用当今的科学技术可能实现吗?!

总有一些人因为以上的问题而怀疑《无限星辰》的可信度。这并不奇怪,任何听说这个包含如此多星体的虚拟宇宙世界是一个人编的人都有理由表示怀疑,这听起来确实像一个壮举。但究其原因是因为传统的游戏制作方式占据市场太久了:一群程序员和美工组成一个团队,设计每一个游戏内容,一点点编写程序和建模,最后再整合在一起……不过请一定要记住,《无限星辰》绝对不是用这种传统的制作方式创造的。

简单来说就一句话:这个游戏世界是由一种技术创造的,这个技术就叫“过程生成”。这不是什么神秘,空穴来风的东西,因为“过程生成”在1984年就有人提出了,然后1993年出现了它的先锋作品:Elite II。就像《无限星辰》一样,它们也是宇宙模拟器,包括成千上万的星系,每个星系都有自己完备的系统。这些在25年前就可以实现,更不用说现在了。现在就有个叫“Spore”(孢子)的游戏正在用“过程生成”生成中。:slight_smile:

CutterJohn 写到:

我们身边就有个能简单解释过程生成的例子:Windows里自带的空当接龙。每次你点开“游戏”菜单,选择“选局”,只要你输入相同的数字,出来的牌也会是一样的。

那到底什么是“过程生成”?!简单的说就是一个连列方程组,里面有一个变量供用户输入来改变结果。这个变量就叫“种子”。下面用个例子来说明:

5 + x = y

如果你输入的x是5,结果y就是10,如果x等于10,结果就是15。这些结果永远都会是一样的!5+5永远是10,5+10永远是15。当然,用在过程生成里的等式比这个复杂多了。看上去结果是随机的,其实只要输入相同的“种子”,即使在不同的计算机上结果也肯定是一样的。

《无限星辰》就是用上千条这样的代码生成的。你只要输入些数字,这个系统就会生成一整个包含各种行星和恒星的虚拟宇宙。但如果输入的“种子”不同,生成的宇宙就大不一样。这套机制在各个层面都是一样的。生成宇宙的“种子”会再生成星系的“种子”。比方说你探索到了一个星系,以后不管你离开多少次,再回来的时候这个星系也还会是完全一样的。关键就是“种子”永远是一样的。

IA 写到:

不管是1000个星球还是1亿个,在过程生成中没什么区别

在物理层面,过程生成其实比传统编程用的物理存储空间要少。存在你硬盘里的只有舰船的模型和要用到的各种贴图,当然还有生成代码(最多只有几兆)。只要提供了“种子”,你的电脑就开始生成宇宙了。一旦你探索到了一个新的星系,你的电脑就会为你生成一个行星星系。所有和你一样在线的人都会有同样的代码和种子,所以他们看到的这个星系也会和你一样。所有的生成工作都是在你机器上运行的,只有种子是在网络上传递的,这样也就省了很多带宽。

当然这个技术也有不足之处,虽然每个行星和星系是不一样的,但它们之间会有很多相似处。当然这个也没什么好惊讶的。类地行星在大气组成和基本生物组成上是类似的,所以在远处看差不多。但细节上会完全不同,比如说地容地貌,大陆形状等等。从某种意义上说,这正是过程生成的一大优势:我们可以创造一个巨大的世界,虽然其中大多数是荒芜、重复的,但其中一定有亮点。说不定在无意中你就会探索到一片世外桃源。

希望本介绍可以让你相信《无限星辰》的虚拟宇宙是可能的。如果你还有其他问题,请随意提问,这里有很多热心玩家会回答你的各种问题!

相关游戏截图:

原帖:http://www.infinity-universe.com/InfinityForums/viewtopic.php?t=7426

那如果中间出现了蝴蝶效应呢?

一 开始 的点点错误
运算到最后就是巨大的差别!!

有那么可能不?

IMPOSSIBLE IS NOTHING, 我要占据异常空间(感觉怎么像EVE里面的-_-)

这东西应该用的就是蝴蝶效应这种理念来产生不同种子之间的区别的

青蛙掉水里,不懂!不过貌似很强大的,强大的就是值得期待的

所有的生成工作都是在你机器上运行的,只有种子是在网络上传递的,这样也就省了很多带宽。

这样的话,己经生成的那部分是不是会存在于自己的机器上?那岂不是游戏客户端会随着你不断的探索而越来越大。

不会,你可以参考开发近况 - 星系生成(2009.5.20)中的相关介绍:

所有的节点被作为“种子”分配,并且当一个节点再细分了,每个子代又产生了一个新的种子。当需要随机数产生时这个种子被多处使用。因此,玩家离开时,节点合并;玩家回来时,节点分裂,完全相同的恒星又会生成。它们会有完全相同的地点、颜色、类型等等……

程序会自动删除玩家一定时间内不用的星系的资料。

我想问的是,在玩家的电脑上生成一个星球要用多少时间?渲染也在玩家电脑上?那渲染一个星球要多少时间?玩游戏的时候,我如果发现一个新的星球,是不是还要读取很长时间才能看到他,然后下一个!

上次就回答过你了,即时生成、渲染,你不会感觉到任何“载入”、“生成”、“渲染”的等待。

简单说来就是边走边生成。

** 10# FreemanGL **

晕!我问过了!我都忘了,哈哈!

晕,及时渲染难道不需要CPU的计算时间?那.kkrieger载入的loadtime是在干吗。
seed传送到每个玩家的终端应该是即时的,但场景和模型什么的生成,这得看玩家各自的PC性能了,好机器就快点,486的话……

不是很懂啊

所有的生成工作都是在你机器上运行的,只有种子是在网络上传递的,这样也就省了很多带宽。

——这句话让我很震惊,要是我能发现一块新大陆开始建设自己的城市,让他发展,最终拥有整个一支军队

** 14# 神和仙Ra **

一切皆有可能 让我们一起来慢慢的期待吧!

能不能象侠盗列车一样随心所欲的,一直都觉得网游太固定了,玩多就没意思了,还有比如说能在星球上改造,类似恺撒大地一般的,当然,不可能是平面2D游戏一般的改造,然后又可以随意破坏,先声明我不是个破坏神,只不过想让游戏多些变化,如果能做到这些,估计网游又迎来新时代了

恩 很棒···支持··

和你想法一样,这种过程生成就是会让人腻的孢子就让我感到无比的无聊~
我想看到更多细节
~

回LS…
可以的…未来IA会根据市场需求加入更多新元素…
总之…无限星辰的未来充满希望!

这个游戏中理论上建设一个国家统一地球也是很可能的哦~~~~~~~~~哈哈。。。