数字物理学连载1:时间、物理系统与其应用范围

原文标题:Timekeeping For Digital Gods

原文链接:https://world.mirror.xyz/fL3IMnsOPMqQ_Td1pPEd_kYYNdWu0NW7aBDb_CwfarA

原文作者:bytes、yonada

译者序:“本文为Lattice的数字物理学系列文章的第一篇,主要讲述了自主世界中时间系统的构建方式。本系列的序言部分可点击链接阅读。”

作为一个虚拟世界的创造者,我们的目标是为用户创造一个有吸引力并且有趣的环境。这意味着需要设计一个复杂且允许意外行为涌现的数字物理系统,并确保有可用的基础设施可以支持他的运行。要做到这一点,我们必须考虑数字物理系统的三个主要维度:时间(time)、具体的物理规则(the form of its laws),以及这些规则的适用范围(the scope within which these laws apply)。

01.时间系统

当我们提到虚拟世界中的时间流逝时,其实是指这个世界根据他的物理法则不断地演进。其中每个离散的状态则是世界时间流中的一个“瞬间”。

(1)同步式时间系统(synced time)

设计虚拟世界时间系统的一种方式,是让他直接参考外部世界的真实时间。在一个基于区块链构建的虚拟世界中,每个区块对应于虚拟世界内一定数量的瞬间,不管区块中包含了多少交易。这被称为同步式时间系统(synced time),或者“ticking”。

这种方法可以让世界更具趣味性,因为他让用户能够实时地看到他们行为的后果。此外,这也导致更多时间在世界内流逝,世界状态不断地更新,进而促进了有趣行为的出现。

然而,这种方法也有缺点。更大的时间跨度通常需要消耗更多的计算资源,这可能很快超过链或服务器的承载量。此外在一个普通的区块链上实现这类系统也很困难,因为任何链上状态的改变都必须由外部用户(EOA地址)发起的交易来启动。

当你尝试构建一些看起来似乎很简单的功能时,这种障碍就变得更加明显,比如:一个有NPC(非玩家角色)的链上游戏。

在以太坊主网上,你可以定义一个更新函数,用来设定游戏地图中每个NPC的位置,并让一个外部账户定期调用他来更新他们的位置。但这并不可靠,因为你没法保证在需要调用更新函数的区块中,外部账户不会因为gas竞争而失效。这会导致你游戏中时间结构的漂移(参见原始CryptoKitties中giveBirth()函数;随着链上gas价格的增加,Axiom Zen实际上不得不增加给调用giveBirth函数者的奖励,来确保在用户繁殖了一只Kitty后的256个区块内,及时调用函数并产生新的Kitty NFT)。我们将这种使用外部账户这种方法称为人工时钟周期(manual ticking)。

此外,定制型的rollup提供了更大的灵活性使我们可以把时钟周期添加到链上,而不需要外部账户,且同步时间的过程由协议本身保证。我们将这种方法称为自动时钟周期(automatic ticking)。自动时钟周期可以通过编写一个“tick 合约”由协议自身调用,而不是由外部账户调用来实现。

举一个例子,bytes(@therealbytes)曾经基于OP Stack构建了一个包含时钟周期功能的链的概念证明(proof-of-concept),运行了一个自动时钟周期实现康威生命游戏(Conway’s Game of Life)。他使用了一个修改过的系统交易来自动驱动元胞自动机模拟的合约随时间演进。

为了充分测试链的性能极限,他使用了两种方式来实现这个功能:一个是通过链上运行的Solidity智能合约,另一个则是作为链本地的一个预编译代码。Solidity方案每个区块更新两次(1区块/秒,或者每秒10k个细胞),最终在达到70x70网格大小时耗尽了CPU的计算性能;而另一个预编译方案,在同样的更新频率下最终达到了256x256网格的面积,并且只消耗了CPU中6%的性能(每秒130k个细胞)。

上一段句话中的关键词是“达到极限”。具有时钟周期功能的链增加了一个额外的复杂层:随着每个区块的增加,需要被驱动或模拟触发的状态的数量也在增加。rollup节点最终会达到基础硬件(CPU,磁盘IO等)的性能瓶颈。唯一的解决方案是更高性能的节点。

(2)非同步式时间系统(unsynced time)

与同步式时间系统相对的是非同步式时间系统(unsynced time)。在这种方案下,虚拟世界内的时间不一定随着外部时间而前进。相反,时间是根据某些事件而前进的,通常是用户的行为。传统的不涉及计时器的棋盘游戏也属于这类范畴。非同步时间系统更容易在链上实现,因为他符合区块链的原生运行模式。然而,这也牺牲了一些可能让世界更有趣的特性(比如自动移动的NPC)。

在David Huang和cha0sg0d开发的一个早期版本概念验证游戏WildWood中,就很好地体现了这种牺牲。

在这个游戏中,两个玩家必须保卫他们的基地免受NPC的围攻。在游戏的早期版本中,NPC的移动只有在玩家自己移动时才会触发 — — 这是一种不太现实的非同步时间实现。在添加了时钟系统之后,NPC可以移动了 — — 但另一个问题仍然存在。

链每秒更新一次状态,这意味着如果玩家每秒移动超过一次,游戏必须使用乐观更新来广播玩家在地图上的位置。然而,你的队友不会自动看到你的客户端界面,这意味着玩家位置的更新会有延迟。

为了克服这个问题,团队利用了MUD的中继服务(MUD’s relay service),一个用于广播本地客户端到整个棋盘的点对点网络。然后,终于实现了从非同步式时间系统到同步式时间系统的转换。

02.封闭式与开放式物理系统

虚拟世界的构建者还需要决定这个世界遵循的数学法则是开放式的还是封闭式的。封闭式函数(Closed-form expressions)的运算量固定。而开放式(或递归)函数(open-form expressions)则不同,其运算量会随着某个变量的增长而增长。

在开放式函数中,世界未来的状态只能在目前已知的状态基础上通过不断进行重复计算而获得。如《矮人要塞(Dwarf Fortress)》这种复杂、多变的游戏环境,通常就属于这一类。

而封闭式函数则允许通过过去的状态与已经经过的恒定时间(假设没有未来用户行为改变状态)计算出任何时点的未来状态,比如《帝国时代2(Age of Empires II)》中资源的开采速率。

开放式函数可以让虚拟世界更有趣,因为他们像真实世界一样不可预测。预测世界未来状态所需的时间和计算资源随着时间的增加而增加(康威生命游戏在链上的实现就是一个很好的例子:你不能计算出未来任意时点的状态,因为你需要按时间顺序一步步计算游戏的状态)。

此外,从简单的微观相互作用中可以出现意想不到的宏观行为。在一个由封闭式函数控制的世界中,这些涌现行为通常只是由外部带来,依靠用户的行为(他们自己就像开放式函数一样)产生,而不是从世界本身的物理学中自然涌现。

这种在开放式和封闭式函数之间的对应关系,类似于上文中对时间形式的权衡。封闭式函数可能降低了世界的潜在趣味性,但却提高了计算效率。

封闭式函数可以与同步或非同步时间系统一起使用。当在区块链上应用时,他们在时间同步时比开放式函数有明显的优势。由于任何长度时间的计算成本都是恒定的,所以可以设计这样一个世界,只有当用户发送交易时才更新链上状态,系统会在更新时根据之前的状态与经过的时间来计算当前的状态。

03.时间与物理系统的应用范围

目前链上状态更新的标准方式是一种被称为延迟更新(lazy update)的方法。在延迟更新中,玩家的行为开启或结束一个动作,而中间这段时间的状态变化是假定的,而不是直接计算的。

例如,一个玩家在第1个区块种了一棵苹果树,然后在第10个区块收获了苹果。延迟更新逻辑可以写成这样:玩家可以每个时间单位收获一个苹果,总共9个苹果。

这对于采用封闭式函数(比如每个区块一个苹果)的系统是可行的,但如果收获的逻辑会因玩家行为的改变而改变,这种方法就会失效。

比如在第5个区块,一场暴雨到来并增加了苹果的生长速率,在第7个区块,一场蝗虫灾害几乎摧毁了庄稼,那么就不可能在不计算所有发生事件影响的前提下,直接计算出玩家在第10个区块可以收获多少苹果。

延迟更新对于廉价地计算某些生命体,比如有固定生长率的植物来说仍然很有用,但他们还不足以构成一个完整的计算动态世界工具包。

在现实世界中,时间无处不在,且同时发生,存在于一个可能无限的宇宙中(有一些相对论上的复杂性)。而在虚拟世界中,情况并非如此。

首先,虚拟世界的空间明显是有限的。趣味性会随着世界的大小而增加 — — 在由两百亿个星系组成的世界中发生的事情比由两个原子组成的世界中发生的事情要多 — — 但计算成本也随之增大。

这两种关系都与前面提到的两个权衡密切相关:时间流逝的方式与数字物理学的形式。

其次,在虚拟世界中,并不是所有地方都要增加时间维度。为了减少世界的计算负担,可以将世界划分为不同区域,在这些区域中时间以不同方式流逝。

例如,在有用户活动的区域可以应用更复杂和昂贵的数字物理学计算状态,在没有用户活动的区域可以使用更简单的物理学。但这种方法有两个缺点:

1.让世界看起来不一致和缺乏完整性,这限制了世界物理法则的设计空间,并给世界构建者新增了防止让用户感到困惑的压力;

2.限制了因果关系在世界内的传播,因为一个区域内发生的行为可能不会在另一个遥远的区域内产生结果,如果那里的时间被冻结的话;

物理学适用范围的大小是一个重要的设计考虑因素,他会影响世界所需的资源和他能达到的趣味性水平。

要创造一个有趣和吸引人的虚拟世界,就需要在计算效率和趣味性之间小心地平衡。这包括决定使用什么类型的时间模式(同步或非同步),评估用于控制世界的物理法则的形式。物理学适用范围的大小也是一个重要的决定。通过谨慎地做出这些选择,不仅可以在保持虚拟世界计算负担可控的同时实现趣味性,还可以为其他开发者在其上继续构建提供一个扎实的创意基础。

游戏如何应用时间与物理法则的思考框架
游戏如何应用时间与物理法则的思考框架

这篇文章最初的由cha0sg0d协作的版本,发表在由0xPARC出版的《Autonomous Worlds book》。

想了解更多关于Lattice与MUD的信息,请访问我们的网站,阅读我们的文档,或者加入我们的Discord服务器

感谢vera、ludens、biscaryn、kooshaba与kooshaza对这篇文章的编辑和反馈。

Subscribe to FunBlocks
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.