《宇宙沙盒2》淡蓝点DOTS预览版现已发布 | 物理模拟全面革新
《宇宙沙盒2》淡蓝点DOTS预览版发布!体验全新物理模拟,包括流星大气阻力、激光改进、潮汐锁定等创新功能。立即在Steam测试版抢先体验!

过去四年间,我们一直致力于对《宇宙沙盒》进行重大革新,以利用Unity游戏引擎(我们用来构建《宇宙沙盒》的引擎)的
提升当前及未来的性能表现。
新增物理模拟功能,如视觉变形物体和模拟流星的大气阻力。
使我们的游戏代码更易于维护和扩展。
为未来重大功能奠定基础,如建造和驾驶航天器,以及构建戴森球等巨型结构。
在此预览版本中,我们仅重构了物理模拟架构,但未来还计划将表面模拟、温度与成分模拟、图形模拟等迁移至DOTS系统。
此次物理更新,如同我们2025年3月的更新一样,属于逐步使用尖端系统重写《宇宙沙盒》的长期计划,以便在未来数年持续改进。这就像在您驾驶飞船的同时,我们逐步更换飞船的每个部件。
您可以在我们的更新日志中了解此预览版本的所有新增功能和改进。
了解如何在Steam上选择加入此预览版本,现已在!preview-version Steam测试分支开放测试和反馈。
本次更新主要侧重于重写现有功能(如引力和洛希分裂),因此乍看之下可能不会立即发现明显变化。但请放心,我们添加了一些新内容供您探索。
模拟流星
通过我们新的阻力系统,物体在穿越行星大气层时会燃烧殆尽。在我们的新模拟地球表面的流星雨中体验这一功能。
激光功能改进!
使用更新后的激光同时轰击多个物体!物体现在会阻挡光束击中隐藏物体。增加辐射压力以推动行星及其环系。


物体拉伸与挤压
现在可以模拟快速旋转物体的拉伸和扁平化以及极端引力效应。在我们发布计划的碰撞形状更新之前,表面模拟和碰撞将继续将所有物体模拟为球体,即使它们看起来不是球形。


非球形引力场
与视觉上的物体扁平化类似,我们现在通过模拟扁率因子(也称为J2)来全面模拟物体不再是球体时其引力场的变化。此前,这些用于模拟太阳同步卫星轨道的因子必须手动输入。
潮汐锁定
现在可以模拟改变轨道物体自转周期的引力相互作用,导致物体始终以同一面朝向另一物体,正如地球对月球所做的那样。通过开启视图面板中的潮汐滞后功能,可视化潮汐锁定,查看物体轨道周期与自转周期之间的差异。
预测路径
查看物体未来将遵循的路径。通过检查沿途的碰撞,该路径将从黄色变为红色,显示预测的重叠量。在视图 > 叠加 > 预测路径下开启此功能。

拉格朗日点
一键标记系统中所有物体引力相等的拉格朗日点位置。您还可以通过"在拉格朗日点放置物体"选项快速将物体放置在拉格朗日点。
我们计划在此新框架上构建更多功能,包括
引力模拟优化
我们正在研究一种名为Barnes-Hut的替代引力模拟方法,该方法可以提高性能并允许模拟更多物体,但代价是精度略有降低。这将增强我们模拟岩石碎片和尘埃云吸引合并形成行星和卫星的能力。
日常物体碰撞
从骰子到航天器,非天体物体最终将根据其真实形状而非简化球体进行碰撞,使用刚体物理。
Unity的数据导向技术栈(DOTS)结构通过将代码分解为更小的部分来简化我们的代码,同时保持模拟宇宙所需的复杂性。这种重构使我们更容易维护、扩展以及在添加新功能时识别和解决问题。
将尽可能多的模拟迁移到此新结构将使您的计算机更快地执行计算。最终,这些性能改进将允许我们在台式机和移动设备上同时模拟更多物体、碰撞和碎片。

我们先前用于确定《宇宙沙盒》中物体材料相态的代码。它利用了对其他函数的引用,并根据多个"if"语句确定输出。

《宇宙沙盒》中确定物体材料相态的新方法。此代码经过简化,行数减少一半,且更易于维护和遵循,没有"if"语句。

DOTS(数据导向技术栈)本质上是Unity在Unity游戏引擎内用于游戏开发的数据导向设计版本。那么,什么是数据导向游戏设计?
数据导向设计意味着专注于直接操作游戏内的数据。这优化了游戏的主要功能:获取一些输入数据,对其进行处理,然后输出转换后的数据。
这听起来可能显而易见,但它不同于传统的面向对象游戏设计,即《宇宙沙盒》先前使用的方法。
面向对象游戏设计专注于游戏对象,如《宇宙沙盒》中的地球。采用面向对象方法时,您从对象(如地球)获取数据,对其进行处理(如确定其在下一帧绕太阳运行的位置和速度),然后将数据应用于该对象。通常,这种方法一次处理一个对象,当对象增多时耗时更长。

相比之下,数据导向设计专注于我们如何转换每个对象上的数据。例如,我们知道太阳系中的所有物体都有位置和速度,并且都受到引力的影响。每个物体具有不同的属性,但用于找到每个物体位置和速度的数学方法是相同的。
由于数学方法相同,我们的数据导向设计允许我们一次性计算太阳系中所有物体的位置和速度,而不是每帧逐个计算。然后,每当请求数据时,我们将转换后的数据应用回每个对象。这种设计优化了数据计算并使用了更少的计算资源。

DOTS实际上由三部分组成:实体组件系统(ECS)、作业系统(Job System)和Burst编译器。最重要的是了解:
Unity的实体组件系统使我们严格构建代码,以便所有数据以特定方式布局在计算机内存中。
由于数据以固定布局存储在计算机内存中,我们不会浪费任何计算时间查找数据,因为我们知道所有数据的位置。
在我们制作新版本的《宇宙沙盒》后,Unity的Burst编译器优化了我们代码访问和处理数据的方式,因为我们知道数据在内存中的位置,从而使我们的计算更快。
通过将所有数据以特定方式布局,Unity的作业系统确定哪些计算可以同时运行,使我们能够在更短时间内执行更多计算。
此前,数据在计算机内存中的存储位置没有指定布局,因此需要额外的计算能力来定位数据,然后才能将其用于计算。实体组件系统迫使我们以特定方式构建代码,以便数据以特定布局存储在计算机内存中。以这种格式重写我们的模拟代码花费了大量时间和精力,但它不仅允许我们提高计算性能,还使我们的代码更加统一,更易于维护、修复和扩展。
DOTS还使得在所有可用CPU核心上运行我们的模拟变得更加容易。Unity的作业系统确定哪些计算可以同时运行,因此我们可以在最短时间内执行最多计算,而不会在模拟中引入错误。而Burst编译器使这些计算能够以最有效的方式运行,从而带来更多的性能提升。
简而言之,该技术现已准备就绪且足够成熟可供使用。
Unity直到2019年才开始开发DOTS,即我们开始开发《宇宙沙盒》8年后,因此使用该技术构建《宇宙沙盒》甚至不是一个选项。Unity直到2023年6月才正式发布DOTS的最后部分(尽管我们自2021年以来一直在研究进行此过渡)。随着最后部分的发布,我们终于能够开始认真重构《宇宙沙盒》。

我们的核心物理模拟现已迁移到DOTS框架,包括我们的引力模拟、碰撞物理以及自转和洛希分裂。此过渡确实是我们整个物理模拟的完全重构,我们正处于测试和错误修复的最后阶段。
而这仅仅是个开始。到目前为止,我们仅迁移了我们的物理模拟以利用DOTS提供的所有优势。我们还计划将其他模拟系统,包括我们的表面模拟、材料成分系统和图形渲染,迁移到Unity的DOTS系统。随着每一部分的迁移,《宇宙沙盒》将变得越来越高效,以便您可以使用相同的计算能力模拟更多内容。
目前,我们希望彻底测试我们的物理模拟。毕竟,我们模拟的是宇宙,如果破坏了物理规律那就糟糕了。
而且,与任何新功能一样,可能存在我们尚未发现或修复的问题——而您可以提供帮助!
了解如何在Steam上选择加入此预览版本,现已在!preview-version Steam测试分支开放测试和反馈。
未来的更新将统一我们的碰撞模拟,允许更真实的天体(如行星)和日常物体(如鸽子)碰撞,根据其独特形式而非球体进行碰撞,也称为刚体物理。
此过渡还为我们最终允许您建造和驾驶航天器,以及构建戴森球等巨型结构奠定了基础。我们对已经实现的功能以及这将使我们在未来数年带给《宇宙沙盒》的内容感到兴奋!
加入我们的社区讨论,请访问我们的Discord服务器和官方论坛。


