游戏物理模拟简史

作者:Tony Wang
知乎文章编号:106977617
创建于:2020-02-14 5:58:06
修改于:2020-02-14 7:21:12


上世纪 90 年代大概是国内街机最繁荣的一段时期,当时最受欢迎的是一众 CPS 和 NEO GEO 基板。我根本没听人谈起过更古早的 70、80 年代基板,甚至直到很久之后开始留意电子游戏历史时才知道 Pacman,Space Invaders,Donkey Kong 等经典游戏都源于更早期的街机。到了新世纪随着娱乐方式(特别是电子娱乐方式)的多元化,电脑游戏、手机游戏和新世代主机游戏更加容易获取并沉浸其中。街机厅里的硬核机体慢慢被抓娃娃机、捕鱼机和一众山寨基板取代。遗憾的是即使在黄金期的 90 年代,街机也仅能作为不被长辈所鼓励的地下文化而存在。

回溯街机历史,大概要从弹珠台谈起,最早的弹珠台原型起源于十八世纪的法国,是一种当时被称作“Bagatelle”的板面游戏。后来到了 1871 年,美国人 Montague Redgrave 发明了首台可被称作 Pinball 的机器,那时已经包含了弹簧、斜面等关键要素。后由于上世纪 30 年代美国人对廉价娱乐的需求大增,最终导致了 1931 首台自动投币弹珠台的发明和风靡。时至今日,世界各地仍不乏弹珠台的拥趸。

这种用声光电和基板下面的机械结构、简单电路组成的朴素“游戏机”,如同现代的电子游戏之于玩家,让人享受着多巴胺带来的简单快乐。它最初问世之时,甚至离第一台电子计算机的发明还早着呢。一台典型的弹珠台包含输入(投币,拉杆,翻动挡板)、输出(小钢珠和其他元素的碰撞,计分等),中间过程由牛顿运动定律所支配,基本上就是一台蒸汽朋克、电子管朋克风格的领域特定模拟计算机了 :P

只要能折腾的东西,一定会有人想办法鼓捣来玩点什么。后来人类发明了通用电子计算机,即使显示设备简陋如示波器也阻挡不住有人在上面编写游戏。

早期计算机系统毕竟算力有限,所以当时的游戏都只能计算一些针对特殊过程的物理求解。比如有两款电子游戏 Tennis for Two 和 Pong,它们的物理计算只涉及到一件事:小球的弹性模拟。

这段时期的游戏一般只在关键对象上进行运动行为相关的刚体物理计算,环境中的其他物体都只是静态的装饰。典型的如弹珠台游戏,将传统的实体板面物理行为电子化,还有一些同样模拟小球和环境互动的游戏如 Marble Madness;在另外一些游戏中则使用了一些飞行器的物理模拟,如太空题材的 Asteroids 和 Lunar Lander 等。

后来随着计算机算力的提升,有开发者总结提出了将环境中的所有对象都交由物理计算驱动的想法,并慢慢的催生出了通用物理引擎。在图形学的发展过程中,David Baraff 写过一篇关键论文,提出了一种通用刚体碰撞模拟。并通过 SIGGRAPH(计算机绘图专业组)发表并展示了物理引擎通用化的早期进展。

cs.cmu.edu/~baraff/pict

通用物理引擎首先应用在机械工程学中。在一开始此类软件没有 GUI,所有模拟对象的参数都只能通过文本配置。其中比较流行的一款机械模拟叫做 ADAMS,如下视频:

EDEM - ADAMS Coupling An Excavator Example_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

最早拥有直观 GUI 的通用物理引擎之一是 David Baszucki 在 1989 年编写的 Interactive Physics。

Interactive Physics 最初是为 Macintosh Plus 编写的一套 2D 虚拟物理实验室。用户可以拖拽元件进行实验。

在 3D 领域,Knowledge Revolution 开发了一套物理模拟软件 Working Model。它可以模拟复杂的机械设备,比如发动机或复印机,并在随后时间里的工程模拟领域成了领头羊。

通用物理引擎在游戏领域的最早应用之一是 Incredible Machine 中的运动轨迹模拟,游戏中的物体可以和环境中的其他物体进行碰撞和反应。

时至今日物理计算仍然需要消耗大量计算资源。和以往不同的是,现在多核 CPU 越来越普及,GPU 加速也愈发成熟,大规模的实时物理模拟不再是梦想。而且移动平台也拥有了部分桌面端的计算能力。

有很多 2D 游戏使用由 Erin Catto 开发的 Box2D 做为物理引擎,并将其做为卖点,这类游戏在物体间的交互上表现出了独特的幽默感。

在 3D 游戏中,如今恐怕再也找不到一款不使用物理引擎的 AAA 游戏。如在 Crysis 中,很多以前死板的静态对象都可以对玩家的行为做出反应甚至解体。

通用物理引擎除了基于多边形的建模方式,还有一种基于 falling-sand 的逐粒子模拟,引擎中以每个单元点(通常是像素或体素)为模拟单位,甚至部分实现了类似化学反应的互动方式,例如 The Powder Toy

反观“物理”这一范畴除了刚体、柔体、流体力学,还有光学、电学等其他分支。图形渲染技术可看作对光学的模拟,射线追踪之于光栅化渲染管线,正像通用物理引擎之于特化模拟。游戏在电学模拟的发展上明显落后于其他方向,但也不是没有进展。在 Minecraft 中玩家可以搭建红石电路

再比如“数字逻辑仿真游戏” DLS 则更接近一款严肃软件。另外一些游戏则在比门电路和基础元件更高的层次上进行抽象,如 Zachtronics 开发的部分游戏,让玩家不必陷入细节就能完成一套自动化系统。再比如,在由笔者制作并上架 Steam 的沙盒游戏 Crapht Box 中,你不仅可以体验力学模拟,还能亲手搭建电路,甚至编写代码。(首页

Save 12% on Crapht Box on Steam

笔者相信除了更真实的光影和物理碰撞,游戏开发者有理由更多的去思考如何在自己的作品中提供一些基础性的功能“元件”,任由玩家组装。机制是有限的,可能性是广阔的。

不难看出物理驱动的游戏乐趣源于在有限的输入下由物理系统带来的不确定性,观察一个物理系统本身的运行有时就挺有意思的。世界第一台计算机 ENIAC 被发明出来的首个应用场景就是弹道物理模拟,似乎数字虚拟世界的终点就是现实吧。