游戏研究社 13小时前
微软CTO下场整活,用“Windows画图”畅玩DOOM
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_keji1.html

 

大家已经见识过可以在各种奇怪 " 机器 " 上玩的《毁灭战士》了——孕检棒、智能冰箱、打卡机甚至是电子烟,只要有块屏幕、能算加减,它就能运行这款 1993 年的 FPS 始祖游戏。

验孕棒版《毁灭战士》

就在这几天," 万物皆可 DOOM" 的玩法又迎来了新的一页:在 Windows 自带的 " 画图板 " 软件上,让《毁灭战士》满帧流畅运行起来。

更重要的是,这次整活的不是什么民间高手,而是微软 Azure 的首席技术官(CTO),马克 · 鲁西诺维奇。

两年前,其实就有人尝试过用 Windows XP 的画图来移植运行《毁灭战士》。

当时那位技术大牛的版本,使用了一种类似 " 自动化辅助画图 " 的方法。当玩家打开游戏程序时,脚本会在后台运行游戏,逐个区域分析像素,最后再调用油漆桶工具在 Windows XP 中填充出对应的画面。

由于 Windows XP 承受不住这种频繁的点击和计算,导致当时这款《毁灭战士》基本无法正常游玩,每 " 画 " 出一帧画面,就要等待足足 1 到 3 分钟,顶多只能算是一次概念性整活。

两年前版本的 " 游戏画面 "

这次微软 CTO 马克带来的版本,则达到了原版《毁灭战士》的 35 FPS 上限。

他的做法,也不是在 Windows 画图里原生运行游戏,更像是把画图当成了一块逐像素刷新的显示器。

就像他在这个项目的介绍里说的一样," 画图 " 渲染了游戏,但它不计算游戏。所有计算的工作,都交给了后台一个负责所有物理逻辑、怪物 AI 和画面生成的引擎,但这个引擎不向显示器输出任何画面。

等到后台算好了每一帧画面,它就会把计算好的图像以像素为单位复制到剪贴板中,然后粘贴到 Windows 画图里。当程序以极高频次把生成图像粘贴进 Windows 画图时,肉眼就能看到一个正在实时刷新的游戏画面。

两年前版本无法比拟的流畅度

原理听起来很简单,但真做起来还是遇到了不少难题。

马克遇到的第一个瓶颈,是后台引擎算得太快。如果 Windows 画图还没来得及把上一帧画面粘贴好,下一帧就把剪贴板给覆盖了,画面会直接崩掉。于是,马克就在系统底层建立了一套 " 传话机制 ",画图必须老老实实打个报告说 " 我粘贴好了 ",后台引擎才会把下一帧发过去。

至于操作方面,由于这版《毁灭战士》调用了剪贴板来 " 渲染 " 画面,会让键盘信号始终处于画图软件的快捷键范围内,无法传达给后面的程序。于是,马克又给引擎加入了一个底层拦截键盘信号的功能。

每当玩家按下 WASD 或鼠标控制角色时,按键信号就会在传达 Windows 画图之前,抢先一步被拦截并直接 " 偷渡 " 到后台的游戏引擎,从而实现在画图软件中直接操控游戏。

这个项目开发完成之后,被马克取名为 DoomPaint,并上传到了 GitHub 上。由于 Windows 画图每次接收到新画面,在系统底层都被视作一次 " 对文档的编辑 ",这就导致了一系列奇奇怪怪的 " 先进功能 ":

比如玩家如果不小心被怪物打死了,不需要找存档,直接狂按 Ctrl + Z 撤销,画面就会像倒带一样,一帧一帧地退回到你几秒钟前还没死的健康状态;想保存高光时刻,不需要任何第三方截图软件,直接在 Windows 画图左上角点击 " 文件 "、" 保存 ",就能把当前战况生成一张无压缩的图片。

最为方便的截屏方式

由于马克 " 微软 Azure CTO" 的这重身份,很多人在了解这次整活前,都以为这是一次对 Azure 的宣传营销,尤其是要展现 CTO 对于 AI 的理解和运用。

但事实上,这版《毁灭战士》用上的技巧和代码多是临场手搓,和他负责的虚拟机、AI 算力等云服务基本没什么关系——看起来确实就是马克的个人爱好。

就和很多致力于 " 万物 DOOM 化 " 的极客一样,这位高管这次只是一个回归了程序员的身份,参与到了这样一场老派极客的浪漫活动中。在充满规矩的代码世界里,技术最原始的魅力,或许永远来自于那句 " 因为这样很有趣 "。

宙世代

宙世代

ZAKER旗下Web3.0元宇宙平台

一起剪

一起剪

ZAKER旗下免费视频剪辑工具

相关标签

windows 微软 cto 始祖
相关文章
评论
没有更多评论了
取消

登录后才可以发布评论哦

打开小程序可以发布评论哦

12 我来说两句…
打开 ZAKER 参与讨论