整理 | 屠敏
出品 | CSDN(ID:CSDNnews)
“万物皆可 Doom”从来不是一句夸张的玩笑。过去几十年里,这款 1993 年发布的经典射击游戏,已经被开发者移植到计算器、冰箱、打印机,甚至一些奇特的嵌入式设备上。
如今,这份名单又增加了一个极其特殊的平台:微软的 Paint(Windows 画图)软件中。
这个项目的开发者也并非普通爱好者,而是微软 Azure CTO Mark Russinovich。近日,他在 GitHub 上公开了一个名为 DoomPaint 的开源项目(https://github.com/markrussinovich/DoomPaint),让经典游戏《Doom》可以直接显示在 Windows 自带的画图工具中,而且能够真实地运行。
![]()
项目采用 MIT 开源许可证,目前已经公开运行文件、资源和完整教程,感兴趣的小伙伴不妨一试:https://github.com/markrussinovich/DoomPaint
![]()
![]()
Microsoft Paint 软件成为了一块游戏“显示屏”
或许看到“Paint 跑 Doom”,很多人的第一反应可能是:
“是不是只是把游戏截图不断复制进画图?”
某种程度上,这个猜测并不完全错误,但背后的实现远比截图循环复杂。
DoomPaint 的核心思路是:让真正的 Doom 引擎负责计算,把 Paint 当作一个“显示器”输出画面。
“真正的 Doom 引擎(ViZDoom)运行的是官方共享版DOOM1.WAD,而共享版没有包含的章节,则由采用 BSD 许可证的Freedoom WAD文件补充。游戏会以无界面的方式运行;每一帧画面都会被放入 Windows 剪贴板,然后作为一次真实的文档编辑操作粘贴到 Paint 的画布中。”Mark Russinovich 在 项目 GitHub 页面中解释道。
![]()
实现原理
正如上文所提及的,项目基于 ViZDoom 运行 Doom 游戏逻辑,其中,ViZDoom 会让 Doom 模拟器按照每一帧画面的需求推进游戏状态。每渲染一帧画面时,它会推进 N 个 tic(游戏时间单位),其中 N 根据真实经过的时间计算。
这样做的好处是:无论 Paint 的显示速度有多慢,游戏本身的运行速度都能保持正常,不会因为 Paint 刷新慢而导致游戏逻辑变慢。
游戏每生成一帧画面,就会将图像转换成 Windows 可以识别的位图数据,通过剪贴板传递给 Paint,再利用真实的粘贴操作显示在画布上。
因此,Paint 并不负责计算游戏世界、渲染 3D 场景,它只是不断接收 Doom 引擎生成的画面。
但让 Paint 连续显示游戏画面并没有想象中简单。由于 Paint 并不是一个视频播放器,它不会主动接收连续画面,也不会为每秒几十次的图像更新设计。
项目需要解决几个关键问题:
首先是剪贴板同步。Mark Russinovich 设计最初的方案是每一帧重新写入 Windows 剪贴板,然后触发 Ctrl+V 粘贴。
但 Paint 读取剪贴板是异步过程。如果程序在 Paint 还没有读取完上一张图片时,就替换剪贴板内容,就可能导致粘贴失败,甚至弹出:“无法完成操作”这样的错误。
DoomPaint 后来改用了 Windows OLE 剪贴板机制。简单来说,它不再不断销毁和重新创建剪贴板内容,而是让 Paint 始终连接到同一个数据对象。当 Paint 请求下一帧数据时,程序再提供最新画面。这样避免了剪贴板竞争问题,也让高速刷新更加稳定。
另一个问题是输入控制。因为游戏运行时,前台窗口仍然是 Paint。如果玩家按方向键、Ctrl 或其他按键,Paint 可能会把这些输入理解成自己的操作:移动选区、打开菜单,甚至改变画布。
因此 DoomPaint 使用 Windows 底层键盘钩子捕获游戏按键。游戏按键会被拦截,然后交给 Doom 引擎处理。玩家按下 Ctrl+Z 时,则会重新注入给 Paint。
于是,一个非常荒诞的效果出现了:Ctrl+Z 不再只是撤销绘图,而可以撤销游戏进程。
你在 Doom 里“死亡”?
直接 Ctrl+Z 撤销。
时间倒退。
重新活过来。
最终,这个看似“让 Paint 玩 Doom”的实验,本质上是利用 Windows 剪贴板、文档编辑机制和 Doom 引擎之间的组合,让一个几十年前的游戏引擎成功借助现代系统工具运行起来。
![]()
能跑到 35 FPS?
根据项目介绍,DoomPaint 可以让 Doom 在 Microsoft Paint 中达到最高约 35 FPS 的运行效果。而 DoomPaint 之所以能够达到最高约 35 FPS,并不是因为 Paint 突然变成了高性能图形引擎,而是因为 Doom 本身足够轻量。
1993 年发布的 Doom,并不是今天意义上的大型 3A 游戏。
为了适应当年的 PC 硬件,它采用了低分辨率画面、高效的游戏循环以及高度优化的渲染方式。有玩家指出,35 FPS 对初代 Doom 引擎来说其实已经是“满速”。虽然原版 Doom 的显示模式为 70Hz,但游戏逻辑更新频率只有 35Hz,因此包括物理计算、敌人行为等核心系统,实际上都是以每秒 35 次的速度运行。只有在 timedemo 性能测试模式下,Doom 才会尝试渲染更高帧率。如今一些现代 Doom 引擎移植版通过插值技术提升画面流畅度,让显示帧率可以超过 35 FPS,但底层游戏逻辑依然维持 35Hz。
因此,对于 Doom 来说,35 FPS 已经接近它原始设计目标。
DoomPaint 默认支持 640×400 分辨率运行,同时也支持更低的 320×200 分辨率。在较低分辨率下,项目可以达到接近 Doom 原始运行速度的 35 FPS。
当然,Russinovich 也表示,“像电子表格一样的低帧率,反而成为这个项目的一部分魅力。”
![]()
微软 CTO 也忍不住折腾 Doom
DoomPaint 引发关注的另一个原因,是它的开发者并不是普通程序员,而是微软 Azure CTO Mark Russinovich。
这位长期负责大型云计算和系统架构工作的技术高管,自 2006 年加入微软后,推动 Sysinternals 工具体系成为 Windows 系统诊断领域的重要工具,并参与构建 Azure 的架构、安全与可靠性体系。
过去一年里,无论是有意还是无意,他也逐渐成为微软内部讨论 Windows 11 各种问题和改进方向的重要声音之一。
因此,一个日程繁忙的 CTO,抽时间折腾一个“让 Doom 跑进 Paint”的小项目,也成为这件事本身最有趣的反差之一。
不过,对于最热爱编程和计算机技术的人来说,写代码、研究系统,本来就不仅仅发生在工作时间。很多真正的技术爱好者,也会在业余时间继续探索各种“没什么用但很有趣”的项目。
![]()
Reddit 热议:没用,但就是很酷
DoomPaint 发布后,很快在 Reddit、X 等社区引发讨论。
有网友说道:“用敌人的鲜血作画,是每个玩家的梦想。现在,你真的可以做到了。”
![]()
也有人表示:“到现在这个地步,我已经觉得没有什么东西是不能运行 Doom 的了,哈哈。如果它有屏幕,那它就能运行 Doom。”
![]()
![]()
还有开发者调侃道:“微软画图软件终于有一个值得使用的功能了。”
![]()
当然,也有不少网友认为,这个项目最大的价值并不是让人在 Paint 里玩 Doom。
毕竟,没有人真的需要一个画图软件作为游戏平台。
真正有趣的是:一个游戏引擎、一套 Windows 文档编辑机制,以及剪贴板系统,被组合成了一种完全没有预期用途的新玩法。
有网友评价,「这就是计算机文化最迷人的地方——花费大量时间解决一个完全没有必要解决的问题。但也正是这些“无用”的实验,让开发者不断探索系统边界。」
https://x.com/Pirat_Nation/status/2084067472848691579
https://www.tomshardware.com/video-games/retro-gaming/microsoft-paint-used-as-a-monitor-to-run-doom-at-up-to-35-fps-project-released-by-firms-azure-cto-runs-actual-doom-engine-and-loads-real-shareware-doom1-wad
https://www.reddit.com/r/technology/comments/1vdwiwb/microsoft_paint_used_as_a_monitor_to_run_doom_at/
GOSIM SHENZHEN 2026 全球开源 AI 大会
10 月 16—17 日 · 深圳
150+ 国内外讲师 · 2000+ 全球开发者 · Agentic AI
开源大模型 / 开源机器人 / 边缘智能体 / 智能体操作系统
Keynote + Workshop + Hackathon + AI Vision Forum
早鸟限时抢购中
扫码购票,锁定你的 AI 盛会席位!
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.