其实,我们一直都在马不停蹄的开发《戴森球计划》,工作实在太多,时间又实在太少了,每天都感觉被时间追着跑,一刻都不敢耽误,还有一大堆内容没做完。唉,此刻又陷入深深的焦虑中。
《戴森球计划》从题材上来说,是一款模拟经营游戏,那模拟的是什么,经营的又是什么呢。在解释这个之前,我先和大家说说戴森球。戴森球,是弗里曼·戴森在1960年就提出的一种理论,是一种太空巨构,它完全包围恒星并且获得其绝大多数或全部的能量输出。在我们设定中,就需要建造戴森球为超级计算机——“主脑”提供能量以维持强大的计算能力。
建造戴森球需要消耗大量的资源,因此COSMO派遣机甲探索宇宙,寻找资源,为新的戴森球建造原材料基地,但仅仅一个星球上的资源肯定是不够的,这就需要经营一个更庞大的跨星系自动化基地了。
如何实现星际间自动化?其实,在游戏的设定中,需要建立星际物流网络,把不同星球上的工厂串联成一个庞大的工业帝国。为了实现这种星系之间的连接,我们在设计和技术实现上做了很多的探讨,最终确定了方向——要想星际自动化,首先就必须要有宇宙,有了宇宙,一切设计才有了基础。
在这篇开发日志里,我主要分享一下我们游戏中宇宙是如何设定的。
首先,我们需要确定的是,游戏中模拟的宇宙范围到底是多大。大家都知道,实际的宇宙无限大,如果我们以真实的宇宙范围作为参考来模拟游戏中的宇宙的话,估计游戏是做不完了,但如果把宇宙范围设定得太小的话,又会偏离最初的设计意图。那么,怎么才能让玩家既能感受到宇宙的浩瀚,又能体验到游戏的趣味性呢?这个问题苦恼了我们很久,我们知道必须在设计上做一些取舍。经过不断的讨论,最后我们秉着一切从游戏性出发,形式追随功能,将游戏中星系设定在星区这个级别。
图片来源于维基百科
要想模拟宇宙,就不可避免地要对每颗恒星的性质进行设定。我们都知道,每个星区都包含了不同种类的恒星,而每种类型的恒星都有自己的特性,这些都是要有科学依据的,不可能想当然的假设,不然就会站不住脚。因此,整个宇宙模型的推演必须要建立在恒星规律的基础之上。现在,我就和大家分享一下我们是怎么推演的。
赫罗图(Hertzsprung-Russell diagram),是丹麦天文学家赫茨普龙及美国天文学家罗素提出的,是恒星的光谱类型与光度的关系图。从赫罗图中,我们可以看到绝大多数的恒星位于从上方到右下方的对角线窄带内,这条带就是主星序,其中的恒星就是主序星,大概占恒星总数的80%~90%。我们在恒星类型的设定时,也参考了这个比例,将大多数恒星设定为主序星,也就是大家熟悉的太阳,同时我们也设计了一些红巨星、中子星、黑洞等。
图片来源于维基百科
从游戏设计的角度来看,我们不可能把恒星的实际质量及规律真实还原,更需要考虑的是游戏性。为了设定恒星的质量,我们做了一些假定:恒星质量的对数大致呈正态分布,以A型恒星的质量作为正态分布的平均值,分布在左侧都是红黄色恒星,分布在右侧都是蓝紫色恒星。整个设定的实现逻辑如下图,通过这个逻辑推演便可以设定每颗恒星的质量。当然为了游戏性,在满足科学的基础上,我们在游戏中对恒星的质量做了一些修正。
在恒星特性设定过程中,我们发现恒星的特性,尤其是恒星的光度和表面温度,非常强地依赖于恒星的质量。因此,在设定恒星的一些特性时,我们基本上是以恒星的质量作为设定基础。当然,恒星的性质是相当复杂的,我们在游戏中不可能设定完所有特性,只选择了一些和游戏核心玩法相关的特性。在这里,我简单分享几个恒星性质设定的推演逻辑:
在游戏的设定中,有O(蓝色)、B(蓝白色)、A(白色)、F(黄白色)、G(黄色)、K(橙色)、M(红色)七种不同类型的恒星,每种类型的恒星质量也各不相同,总的来说,O型恒星质量最大,M型恒星质量最小,而且质量大的恒星颜色比较明亮,而且温度很高,而质量小的恒星颜色比较暗淡,温度也比较低。
当然,如果只是简单的按照设定模拟每颗恒星,整个画面的色彩过渡会显得很不自然,因此就需要做一些色彩上的调整。我们根据恒星特性与质量之间的关系,在Unity中对恒星的颜色做了进一步的参数设置, 包括恒星主体颜色、光晕的颜色、光照颜色、日落的颜色等等。最后,我们在调色盘中调了上百种颜色,才生成出所有类型的恒星,也使恒星颜色能够合理的过渡。
在设定完恒星的特性之后,我们开始思考如何根据恒星的特性确定行星的分布。蓝色的O型恒星的质量很大,而且温度很高,那我们设定它的行星分布大多数是熔岩星球,而红色的M型恒星质量小,而且温度很低,那它的行星分布大多数则是冰冻星球。
行星类型的分布确定之后,现在我们需要考虑的是,一个星系到底生成几颗行星比较合适呢。为了增加游戏的趣味性,我们必须随机每个星系的行星数量。目前,我们设定的每个星系随机生成1~6颗行星,当然包含气态行星在内,同时每颗气态行星至少有一颗固态行星类的卫星,具体有多少颗卫星,就看这个星系设定的总的行星数量了。
为了确定行星的类型,我们设定每颗恒星有16条不同的运行轨道,而生成的行星则随机分布在不同的轨道上。每条轨道的大小不一样,而且每颗恒星适合居住的区域大小(Habitable)也不一样。行星的类型取决于所在的轨道以及是否处于Habitable内,如果轨道在Habitable里,那大概率则是海洋星球;若轨道不在Habitable内,那么越靠近恒星的,大概率是熔岩星球,反之越远的则大概率是冰冻星球;若都不是这几种类型的星球的话,那就大概率会是荒漠星球了。就这样,我们利用程序算法确定了不同轨道上的行星类型。
在设定完恒星及行星的特性之后,我们需要随机生成星系的形状,这样才能保证每个玩家的每一局新游戏都是不同的体验。关于星系形状的生成算法,我们选择了常用的柏林噪声算法(Perlin Noise)。柏林噪声是一个非常强大的算法,经常用于程序生成随机内容,比如地形,火焰燃烧特效 ,水和云等等。从下面的柏林噪声图中可以看到,涂色区域的恒星会比较密集,其他区域则会相对稀疏一些。
哦,差点忘了,我们还需要给每颗恒星取名字。说起取名字,真的是让我们开发组哭笑不得。我们所有恒星的名字都是用程序算法把英文字母随机排列组合,刚开始随机出来的怎么看都不像是个名字,有的还超级搞笑。后来经过不断的优化,才让恒星的名字有那么一点像样了。下面这个就是现在游戏里做好的星系图,我录了个Gif给大家分享一下。
我们知道,宇宙模拟模型的设定中存在很多不足的地方,在之后开发的过程中,我们会尽最大努力去完善,不管是从游戏性还是科学性,都希望能够做得更好。说到这里,发现《戴森球计划》还有好多内容啊。额,不说了,我继续摸鱼去了,下次再和大家分享~
你们做的好快啊
@anhanjinj:我们都是全职开发,而且天天加班,事情太多了~
这才是大佬
真大佬!