开发者Lukas Vogel将经典游戏《毁灭战士》(Doom)完整移植到了一个SQL数据库中运行,游戏逻辑和画面渲染全部通过数据库查询来实现。
这个名为SQLDoom的项目,把关卡几何数据和游戏状态都存储在CedarDB的表格中,再由一个轻量级的Python脚本负责处理时间控制、输入响应和画面输出。
最终效果是:以640×480分辨率、每秒35帧的速度渲染出全彩画面,整个实现用了大约1300行SQL代码,分布在89个查询块中。
早期尝试未能还原真正的Doom
去年曾有一个名为DoomQL的早期项目,它采用光线投射技术,以灰度文本字符呈现画面,所以看起来更像是《德军总部3D》而非《毁灭战士》。
这种光线投射方式跳过了BSP树遍历,而这正是Doom渲染方式的核心特征之一,这也促使Vogel着手开发第二个版本。
对于SQLDoom,开发者要求渲染系统和游戏循环都完全通过SQL运行,输出结果只能是精确色彩表格或位图。
Vogel在介绍该项目的博客文章中坦言:“用数据库来渲染Doom显然是个糟糕的主意。”
要打造这个新版本,意味着需要用数据库操作而非传统游戏引擎代码,重新实现Doom渲染流程中的关键部分。
处理关卡几何数据相对简单,因为在地图加载时计算出的排序键,可以用一条排序语句来确定哪些墙面部分需要被绘制。
地板和天花板则是个更棘手的问题。Doom原版引擎使用“可视平面”(visplanes)和状态切换机制,这两者都无法直接转化为逐列渲染的SQL查询方式。
Vogel用他自己形容为“相当蹩脚”的方法取代了这套系统,通过循环遍历一系列已排序的面板来填充这些表面。
速度数据和服务器测试结果喜忧参半
Vogel报告称,在搭载AMD Ryzen 7 7840U芯片的笔记本电脑上运行约能达到60帧每秒,但在画面繁忙的场景下会降至35帧每秒。
他表示,数据表带来的开销相当大,不过这个移植版本的运行速度仍然比他去年开发的更简单的DoomQL要快。
Vogel说:“我最初只是把它当作一个技术演示,但它玩起来真的就像真正的Doom,尽管它和任何现有的Doom移植版本都没有共用一行代码。”
该移植版本还支持死斗模式的多人对战,目前在欧洲和美国都有公开的在线服务器,供玩家进行多人对战。
一些试玩在线演示的评测人员反映运行卡顿,其中一家媒体指出,问题可能出在服务器端而非移植版本本身。
Vogel认为,数据库能够维持游戏状态的单一、稳定记录,“不会出现部分更新、物理错误,也不会出现关于火箭弹究竟有没有命中的争议”。
据The Register报道,这项工作同时也是对CedarDB的一次展示——这是一款能将复杂查询编译为机器码的数据库系统。
想要体验的人可以在本地用CedarDB和Doom原版WAD数据运行GitHub上的代码,也可以加入免费的在线对战。
Q&A
Q1:SQLDoom是什么?
A:SQLDoom是开发者Lukas Vogel打造的项目,它将经典游戏《毁灭战士》完整移植到SQL数据库中运行,游戏逻辑和画面渲染全部通过数据库查询实现。
Q2:SQLDoom的运行速度怎么样?
A:在搭载AMD Ryzen 7 7840U芯片的笔记本电脑上大约能达到60帧每秒,不过在画面繁忙的场景下会降至35帧每秒,比早期的DoomQL版本更快。
Q3:普通人怎么体验SQLDoom?
A:可以在本地用CedarDB和Doom原版WAD数据运行GitHub上的代码,也可以加入欧洲或美国的免费在线服务器,体验多人死斗对战模式。
