用AI让Doom在三星电视上运行:遥控器玩经典FPS

当经典游戏遇上智能电视
一位Reddit开发者近日展示了一个颇具极客精神的项目:他借助AI编程助手Codex(GPT系列),成功将1993年的经典第一人称射击游戏《毁灭战士》(Doom)运行在了自己的三星S90C智能电视上,并且实现了用电视遥控器直接操控游戏。
《毁灭战士》的技术革命与文化遗产
《毁灭战士》(Doom)由id Software于1993年12月发布,是第一人称射击游戏(FPS)历史上的里程碑作品。游戏采用id Tech 1引擎(当时称Doom引擎),创造性地使用了二进制空间分区(BSP)算法来实现快速3D渲染,在当时386处理器上达到了惊人的流畅度。
二进制空间分区(Binary Space Partitioning)是一种将空间递归地分割为凸子集的数据结构。在Doom中,关卡编辑器预计算BSP树,将地图划分为有序的子扇区。渲染时,引擎通过遍历BSP树实现前后排序的画家算法,确定哪些墙面先绘制、哪些被遮挡。这避免了逐像素的深度测试(当时硬件不支持Z-buffer),将渲染复杂度从O(n²)降低到O(n log n)。值得注意的是,Doom实际上并非真正的3D引擎——它使用2.5D技术,地图本质上是二维平面图,通过高度差和透视投影模拟三维效果,玩家无法真正地上下看。John Carmack对BSP算法的创造性应用直接影响了后续Quake引擎的PVS(潜在可见集)技术。
游戏首创了deathmatch多人模式,支持通过局域网联机对战,奠定了现代电竞的基础。技术上,Doom的模块化设计将游戏引擎、关卡数据(WAD文件)和游戏逻辑清晰分离,这使得后续的移植和修改变得异常容易。1997年Doom源代码以GNU GPL协议开源后,催生了数百个衍生项目,包括GZDoom、Brutal Doom等增强版本。从技术视角看,Doom不仅是一款游戏,更是一个开放的软件平台和编程教育资源,影响了整整一代程序员。
这个项目再次印证了那句在开发者社区流传已久的梗——「它能跑Doom吗?」(Can it run Doom?)。'它能跑Doom吗?'这个梗源于1993年id Software发布Doom时公开了部分源代码,1997年完全开源后更催生了庞大的移植社区。Doom之所以成为'可移植性试金石',在于其技术特性:仅需386处理器和4MB内存的低配要求、清晰的模块化代码架构、无复杂外部依赖。截至目前,Doom已被移植到超过100种设备,包括ATM机(2014)、数字相机(2020)、孕检棒显示屏(2020,实为外接树莓派)和John Deere拖拉机显示屏(2022)。从计算器、打印机到孕检棒,Doom几乎被移植到了所有能想象到的设备上。而这次,三星的高端OLED电视也加入了这份长长的名单,只不过这一次,AI在其中扮演了关键角色。
技术实现:WebAssembly与Tizen的结合
基于WebAssembly的移植方案
整个项目并非从零编写游戏引擎,而是站在了巨人的肩膀上。核心基础是Cloudflare提供的Chocolate Doom WebAssembly移植版本。Chocolate Doom本身是一个高度还原原版体验的开源Doom引擎分支,而将其编译为WebAssembly(Wasm)后,就意味着它可以在任何支持现代Web标准的运行环境中执行。
Chocolate Doom由Simon Howard于2005年启动,其设计哲学是精确复现原版DOS Doom的行为,包括原版的渲染限制、物理特性甚至已知bug。这与GZDoom(追求现代OpenGL渲染和增强特效)、PrBoom+(追求极限兼容性和speedrun精确性)等端口形成鲜明对比。Chocolate Doom的代码经过现代化重构,采用SDL(Simple DirectMedia Layer)作为跨平台抽象层处理音视频和输入,这使得它特别适合移植到非标准平台。SDL是一个跨平台的多媒体抽象库,由Sam Lantinga于1998年创建,提供统一的API来访问音频、键盘、鼠标、游戏手柄和图形硬件。Emscripten(将C/C++编译为WebAssembly的工具链)内置了SDL到Web API的映射层,可以自动将SDL的图形调用转换为Canvas/WebGL操作,将SDL的音频调用转换为Web Audio API,将SDL的输入事件转换为DOM事件。这意味着基于SDL开发的应用程序无需修改核心代码,仅通过重新编译就能在浏览器环境中运行,这正是Cloudflare能够将Chocolate Doom编译为Wasm的技术基础。
WebAssembly(简称Wasm)是一种为Web设计的低级字节码格式,于2017年成为W3C标准。它最初由Mozilla、Google、Microsoft和Apple联合推动,旨在解决JavaScript在性能密集型应用中的局限性。Wasm的核心优势在于接近原生的执行速度、内存安全性和跨平台特性。开发者可以用C、C++、Rust等语言编写代码,编译成Wasm后在任何支持的环境中运行,性能损耗通常仅为原生代码的10-20%。这使得游戏引擎、图像处理、视频编解码等计算密集型应用得以在浏览器中高效运行,也为智能设备提供了标准化的跨平台执行环境。
将C/C++编写的Doom引擎编译为WebAssembly需要使用Emscripten这一关键工具链。Emscripten由Alon Zakai于2010年创建,最初将C/C++编译为JavaScript(asm.js),后来扩展支持WebAssembly输出。其工作流程是:使用LLVM前端(Clang)将C/C++代码编译为LLVM中间表示(IR),然后通过Emscripten后端将IR转换为Wasm字节码,同时生成配套的JavaScript胶水代码处理Wasm模块的加载、内存初始化和Web API桥接。Emscripten提供了对POSIX文件系统、pthreads多线程和OpenGL ES的模拟层,使得原本依赖操作系统API的程序能够在浏览器沙箱中运行。这个工具链是WebAssembly生态的基石,也是本项目技术栈中不可或缺的一环。
WebAssembly的性能原理
WebAssembly的高性能源于其设计哲学和技术实现。首先,Wasm是栈式虚拟机的字节码,采用紧凑的二进制格式,文件体积比等效JavaScript小60-80%,加载和解析速度显著更快。其次,Wasm采用静态类型系统,变量类型在编译时确定,避免了JavaScript的动态类型检查开销。第三,现代浏览器对Wasm采用流式编译(streaming compilation),可以边下载边编译,并使用JIT(即时编译)技术将字节码优化为机器码。第四,Wasm支持线性内存模型,程序可以直接操作连续内存区域,避免了JavaScript的对象分配和垃圾回收开销。在CPU密集型运算中(如游戏物理引擎、加密算法),Wasm性能可达原生C++代码的80-95%,比优化后的JavaScript快10-20倍。Unity、Unreal等游戏引擎已全面支持导出为WebAssembly,使得3A级游戏能在浏览器中流畅运行。
三星智能电视采用的是自家的Tizen操作系统,其应用层本质上是基于Web技术栈(HTML/CSS/JavaScript)构建的。Tizen是三星主导开发的开源操作系统,基于Linux内核,采用Web技术栈作为应用开发框架。2012年立项至今,它已成为三星智能电视、智能手表(Galaxy Watch系列)和部分物联网设备的核心系统。与传统Android TV不同,Tizen应用主要使用HTML5、CSS3和JavaScript开发,应用打包为.wgt格式。系统提供Samsung Smart TV SDK,支持通过侧载方式安装未上架应用。截至2024年,三星智能电视全球市场占有率超过30%,Tizen也成为仅次于Android TV的第二大智能电视系统。其Web化特性为WebAssembly的运行提供了天然的土壤。
尽管Tizen拥有庞大的设备装机量,但其应用生态远不如Android TV或Apple tvOS丰富。三星应用商店的智能电视应用数量约为数千款,远低于移动端应用商店。开发者面临的主要障碍包括:文档不够完善、调试工具相对原始、不同年份电视型号的API兼容性差异,以及应用审核流程的不确定性。这也解释了为什么侧载方式在Tizen开发者社区如此流行——它绕过了商店审核的限制,为实验性项目提供了快速验证的通道。
开发者将游戏封装成一个侧载(sideload)的Tizen应用,绕过官方应用商店直接安装到电视上运行。
侧载技术与智能电视的开放性
侧载(Sideloading)是指绕过官方应用商店,通过USB、网络传输或开发者模式直接安装应用到设备的方式。在智能电视领域,这涉及启用设备的开发者模式,获取必要的权限,然后通过专用工具(如Tizen Studio的设备管理器)将打包好的应用推送到电视。三星Tizen系统支持通过IP地址连接并使用sdb(Smart Development Bridge,类似Android的adb)命令安装.wgt格式的应用包。这个过程需要在电视设置中开启开发者模式并获取DUID(设备唯一标识符)。侧载为开发者提供了测试环境,也为用户提供了运行非官方应用的可能性。不过需要注意的是,侧载应用未经应用商店审核,存在潜在的安全风险,且可能在系统更新后失效。这种机制体现了智能电视在封闭生态和开发灵活性之间的平衡。
游戏内容与离线运行
项目使用的是Doom最初发行的共享软件版本(shareware episode),即《Knee-Deep in the Dead》这一免费章节。这一选择既规避了版权问题,也保证了完整的可玩内容。
共享软件模式的历史意义
共享软件(Shareware)是1980-90年代流行的软件发行模式,开发者免费发布软件的部分功能版本,用户试用后如果满意可付费购买完整版。Doom采用的正是这种模式:第一章节《Knee-Deep in the Dead》包含9个关卡免费发行,完整版另有两个章节需付费购买。这种模式在互联网尚不发达的年代极为成功,Doom的共享版通过BBS(电子公告板系统)、FTP站点和软盘复制广泛传播,据估计有1000万-2000万份拷贝流通,而付费用户约100万。id Software联合创始人John Carmack后来将这种病毒式传播归功于共享软件模式的商业智慧。从法律角度看,使用Doom共享版进行移植项目完全合法,因为id Software明确允许自由分发这部分内容。这种模式也为后来的免费增值(Freemium)和试玩版(Demo)商业模式奠定了基础。
特别值得一提的是,一切都在电视上离线运行。游戏逻辑、渲染、输入处理全部在电视本地的硬件上完成,无需连接任何云端服务器或外部计算资源。对于一款诞生于30年前的游戏而言,现代智能电视的算力可谓绰绰有余。三星S90C搭载的Neural Quantum Processor 4K采用多核ARM架构,配备专用的AI加速单元和GPU,用于图像升频、HDR色调映射和环境光自适应等计算密集型任务。其CPU算力大致相当于2015年左右的中端智能手机,内存通常为2-3GB,远超运行Doom所需的4MB最低要求——差距达到了近千倍。实际上,这些处理器的闲置算力相当可观,但由于智能电视厂商更关注视频处理管线的优化,通用计算能力往往未被充分利用。
AI编程助手Codex的关键作用
这个项目最值得关注的地方,在于AI编程工具的实际应用价值。开发者明确表示,是使用Codex来适配电视遥控器的输入支持。
OpenAI Codex是GPT-3的代码专用变体,于2021年8月发布,训练数据包含GitHub上数十亿行公开代码。它能理解自然语言指令并生成多种编程语言的代码,曾是GitHub Copilot的底层引擎。2023年后,OpenAI逐步将Codex功能整合进GPT-4等更强大的多模态模型中。这类AI编程助手的核心能力包括:代码补全(根据上下文生成后续代码)、问题诊断(识别bug并提供修复方案)、API适配(自动查找并调用陌生库函数)和代码重构。
解决输入映射难题
将一款需要键盘WASD移动、鼠标瞄准的PC游戏,改造为仅用一个电视遥控器就能操控,本身是一个不小的工程挑战。电视遥控器的按键数量有限(方向键、确认键、返回键、数字键等),如何将这些有限的输入映射到Doom所需的前进、后退、转向、射击、开门等操作,需要精心的交互设计和大量的代码适配工作。
Codex这类AI编程助手在此类任务中展现出独特优势:开发者可以用自然语言描述需求(如「把遥控器的上下键映射为前进后退,左右键映射为转向」),AI则负责生成对应的事件监听与按键映射代码。在输入映射这类场景中,开发者只需描述'将遥控器方向键映射为游戏移动控制',AI即可生成包含事件监听、按键码识别和游戏指令转换的完整代码,显著降低平台特定开发的学习成本。这大幅降低了跨平台适配的门槛,也让个人开发者能在业余时间快速完成原本繁琐的移植工作。
AI辅助开发的实践启示
这个看似「玩票」的项目,实际上折射出AI编程工具正在改变软件开发的方式。过去,将一款游戏移植到冷门平台(如智能电视的Tizen系统)需要开发者熟悉特定的SDK、API和输入模型,学习成本高昂。而如今,借助AI的代码生成与问题诊断能力,即便对某个平台不甚熟悉,开发者也能通过对话式交互快速上手,将创意落地。
AI编程助手的技术边界
虽然Codex等AI编程工具展现出强大能力,但其局限性同样明显。首先,AI生成的代码质量高度依赖提示词(prompt)的精确性,模糊的需求描述会导致不可用的代码。其次,对于复杂的系统架构设计、算法优化和性能调优,AI往往只能提供通用方案,缺乏针对特定场景的深度优化。第三,AI可能生成存在安全漏洞的代码(如SQL注入、XSS攻击),需要开发者具备审查能力。第四,AI的训练数据截止日期限制了其对最新技术的了解,例如2023年训练的模型无法了解2024年发布的新API。第五,对于需要理解业务逻辑、权衡技术方案的决策性工作,AI无法替代人类判断。在实际应用中,AI编程助手更适合作为'智能代码补全'和'文档查询加速器',而非完全自动化的开发者替代品。GitHub 2023年的研究显示,使用Copilot的开发者完成任务速度提升55%,但代码质量与人工编写相当,说明AI是提效工具而非质量保证工具。
这个项目的三层价值
从表面看,这只是又一个「让Doom在奇怪设备上运行」的娱乐性项目。但透过现象看本质,它至少传递了三层信号:
Web技术栈的普适性。 WebAssembly正在成为跨平台运行的通用底座,从浏览器到智能电视、物联网设备,只要有Web运行时,代码就能跑起来。这为软件的一次编写、多端部署提供了现实路径。值得注意的是,WebAssembly的野心已经超越了浏览器:WASI(WebAssembly System Interface)标准正在将Wasm扩展为服务器端和边缘计算的通用运行时,Docker创始人Solomon Hykes曾表示「如果2008年就有Wasm和WASI,我们根本不需要创建Docker」,这预示着Wasm可能成为下一代跨平台计算的基础设施。
AI编程正在民主化技术门槛。 个人开发者借助Codex这样的工具,能够完成过去需要专业团队才能实现的跨平台适配。技术门槛的降低意味着更多创意得以实现。
智能电视的计算潜力被低估。 现代高端电视配备了不俗的处理器和内存,却往往只被用来播放视频和运行少数应用。这个项目提示我们,这些设备其实是被低估的通用计算平台。
技术与乐趣的完美结合
用遥控器在三星电视上玩《毁灭战士》,或许算不上什么改变行业的技术突破,但它是一个生动的案例:它展示了开源移植(Chocolate Doom)、通用运行时(WebAssembly)、Web化操作系统(Tizen)与AI编程助手(Codex)四者结合时所迸发的可能性。
这些移植项目的技术价值在于:验证新平台的计算能力、测试非标准输入设备的交互可行性、推动跨平台工具链发展。每次成功移植都证明了开源生态和标准化技术栈(如现在的WebAssembly)的力量。技术的魅力,有时正在于把一个看似荒诞的想法变为现实的那份纯粹乐趣。而AI工具的加入,让这份乐趣变得触手可及。对于开发者而言,这不仅是一次有趣的实验,更是对AI辅助开发能力的实战验证。
核心要点
核心要点
相关推荐

Knockin':AI名片让个人简介智能化
Knockin'将传统个人简介转化为可交互的AI名片,访客可直接对话了解你的专业背景并预约会议。Product Hunt排名第4的智能个人品牌工具,适合自由职业者、创业者和内容创作者高效管理人脉。

Intel CPU涨价10%:战略转型与市场影响解析
英特尔计划对PC处理器涨价约10%,从市场份额竞争转向利润优先策略。分析涨价背景、对消费者和OEM厂商的影响,以及AMD竞争格局变化和行业未来趋势。

Switch开源工具:让AI智能体入驻团队协作平台
Switch是一款开源工具,可将AI智能体以命名参与者身份接入Slack、Teams、Discord等协作平台,支持多框架兼容与自托管部署,登顶Product Hunt日榜第一。