Adobe、Intel联合打造的“万能遥控器“,让AI在游戏引擎里随心所欲
这项由Adobe Research、Intel Labs、Manycore Tech Inc、Adobe、NVIDIA、ETH Zurich以及Imperial College London联合开展的研究以预印本形式于2026年7月7日发布在arXiv平台论文编号为arXiv:2607.06701。感兴趣的读者可通过该编号在arXiv上查阅完整原文。**游戏引擎里的遥控困境**假设你是一位机器人研究员想让AI学会在城市街道上安全行驶。现实世界太危险真车太昂贵于是你打算用电脑里的虚拟城市来训练AI。这个虚拟城市画面精美、车水马龙几乎和现实没什么区别——问题是你没办法用Python一种流行的编程语言可以理解为研究人员的工作语言灵活地控制这个虚拟世界就好像你拥有一台顶级游戏机却找不到对应的遥控器。这个困境并不是少数研究者才有的烦恼。近年来虚拟仿真环境已经成为AI研究的核心基础设施从让AI学会下围棋到训练无人机飞行、再到开发自动驾驶汽车都少不了高质量的虚拟世界。在这些虚拟世界里用游戏引擎构建的场景因为画面逼真、物理效果准确而备受青睐。虚幻引擎Unreal Engine简称UE就是其中最耀眼的一款它完全开源、画面顶尖连好莱坞特效和顶级3A游戏都在用它。然而现有的基于虚幻引擎的仿真工具有三个让研究者头疼的老毛病。第一能通过Python控制的功能太少往往只有几百个固定接口就像一台遥控器上只有三四个按钮大部分功能根本按不到。第二把虚拟世界里渲染好的高清图像传回Python程序的速度极慢——有些工具慢到比直接在游戏里看画面慢了二三十倍相当于你在游戏里能流畅看4K电影但把电影截图传给AI时却要等上半分钟。第三这些工具大多是一体化大块头和特定项目深度绑定很难嵌入到现有的研究项目里也很难把外部资产导入进去。正是为了解决这三个痛点来自多家顶尖机构的研究团队联手打造了SPEAR——一个面向光真实Photorealistic具身AI研究的仿真平台。一、SPEAR究竟是什么那把万能遥控器SPEAR的核心是一个Python库可以连接到任何用虚幻引擎开发的应用程序并通过一套模块化插件架构对其进行编程控制。用一个比喻来说虚幻引擎就像一台功能无比强大的专业级录音棚而现有的仿真工具只给你提供了几个简单旋钮SPEAR则相当于把整个录音棚的所有推子、按键、效果器全部接上了一块全功能调音台让你从Python端就能精细操控每一个细节。SPEAR之所以能做到这一点关键在于它直接对接了虚幻引擎的反射系统Reflection System。所谓反射系统可以理解为虚幻引擎内部的一张功能总目录——引擎里几乎所有的类、函数、变量都登记在这张目录里只要你知道名字就能在运行时动态查找和调用。SPEAR通过一套专门的C接口把这张目录暴露给Python让Python代码能用字符串也就是文字名称来查找类、调用函数、读写变量完全不需要为每一个功能手写专属的转接代码。得益于这个设计SPEAR一口气向Python暴露了超过14,000个独特的虚幻引擎函数以及超过53,000个虚幻引擎属性变量。这相当于现有同类工具的十倍以上。与此同时SPEAR自身的代码量非常克制全部Python和C代码合计约27,000行远少于AirSim的14万行和CARLA的15万行。在同类工具中UnrealCV虽然也能访问部分虚幻引擎内部功能约747个函数和8,721个变量但它的代码量也只有11,000行左右而SPEAR在暴露超出它约二十倍功能量的同时代码体积也只有其约两倍多足见设计的精炼。二、编程模型像写普通Python代码一样控制虚拟世界SPEAR最让开发者感到亲切的地方是它的编程体验极其自然。考虑这样一个场景你想在虚拟室内场景里生成一组坐标轴模型把它放到某个位置然后把它放大四倍最后查询它的位置。在SPEAR里这整个过程就像这样——先获取一个游戏对象调用spawn_actor生成它调用SetActorScale3D缩放它再访问RootComponent根组件并获取其位置。这些操作写起来就像调用Python的普通函数和属性一样完全没有额外的包装或注册步骤。这种体验背后有一套精心设计的事务Transaction机制。在SPEAR里对虚幻引擎的操作被组织成一帧一帧的事务单元每个事务单元由begin_frame上下文和end_frame上下文组成分别对应一帧的开始和结束时刻。用户只需要在Python里用with begin_frame():和with end_frame():两个代码块把操作包起来就相当于告诉引擎这些事情在同一帧的开始做那些事情在这帧的结束做。引擎保证同一事务内的所有操作都在同一帧内完成并且按照Python代码的顺序依次执行没有歧义。另一个极为实用的设计是异步操作。默认情况下每次调用虚幻引擎函数Python都要等待引擎真正执行完毕才能继续这就像你每发一条短信都要等对方回复了才能发下一条。SPEAR为每一个函数都提供了一个异步版本在函数名前加async.前缀调用异步版本时Python不等待引擎而是立刻拿到一个未来对象Future继续做其他事情等到真正需要结果时再从这个未来对象里取值。如果结果还没准备好取值时才会等待。这种机制类似于网购时下单后拿到一张快递单号你不用守在门口等快递到了再去取就行。通过合理使用异步操作Python线程和引擎的游戏线程可以完全并行运行彼此不互相阻塞从而让整个系统以接近引擎原生速度运行。为了防止Python线程跑得太快把引擎远远甩在后面系统会在同时有超过一个未完成事务时让Python在进入下一个begin_frame之前稍作等待确保两者的进度不过分偏离。SPEAR的编程模型还有一个非常重要的特性扩展极其容易。如果你写了一段C代码想让它能从Python端访问只需要在函数或变量旁边加上UFUNCTION或UPROPERTY注解虚幻引擎就会自动把它纳入反射系统SPEAR就会自动把它暴露给Python——不需要改动任何SPEAR的代码不需要额外的注册步骤。这对研究者来说意味着极大的灵活性。三、速度的秘密图像传输比现有工具快十倍以上在具身AI研究中仿真平台需要频繁地把渲染好的图像传给Python程序让AI看到虚拟世界里发生的事情。这个传输过程的速度直接决定了训练和实验的效率。SPEAR为此专门设计了一套高性能相机传感器能以1920×1080全高清分辨率每秒渲染73帧图像并直接写入用户的NumPy数组一种Python里常用的数据容器整个过程不需要额外的数据复制。这个速度是同类虚幻引擎插件中的佼佼者比当时主流的同类工具快了一个数量级约9至21倍。这个成绩是怎么做到的关键在于两个技术异步通信和进程间共享内存。异步通信前面已经提到它让Python不用干等引擎渲染完成。共享内存则是更底层的加速手段传统做法是引擎把图像数据从GPU显存复制到内存再通过网络或管道传给Python程序这个过程要复制多次。SPEAR改用了操作系统级别的共享内存区域让引擎和Python程序直接共享同一块内存渲染好的图像数据从GPU卸载到这块内存后Python程序直接读取完全跳过了中间的复制环节就像两个人共用同一块白板省去了互相抄写的麻烦。此外SPEAR的相机传感器还支持渲染延迟Rendering Latency配置允许用户以牺牲一点时效性即接受图像比当前帧晚一到两帧才到手为代价换取更高的吞吐量。配置为0帧延迟时吞吐率约为56帧/秒配置为1帧延迟时升至约65帧/秒配置为2帧延迟时可以达到约73帧/秒。这种设计给了用户根据实际需求灵活权衡的空间。研究团队做了详细的横向对比实验。在与UnrealCV的对比中他们在完全相同的虚幻引擎项目、相同场景、相同项目设置下分别运行两个插件SPEAR在0帧延迟配置下帧率为56帧/秒而UnrealCV仅有3.5帧/秒相差约16倍。在与AirSim和CARLA的对比中为了公平比较研究团队特意将三个平台的无Python通信时的独立渲染帧率调整到接近一致SPEAR约89帧/秒CARLA约90帧/秒AirSim约93帧/秒确保任何差异都来自通信开销而非渲染质量。结果是在0帧延迟条件下SPEAR达到32帧/秒AirSim只有2.6帧/秒SPEAR约快12倍在2帧延迟条件下SPEAR达到37帧/秒CARLA约33帧/秒SPEAR仍领先约10%。四、不只是速度前所未有的地面真值图像模态SPEAR的相机传感器不仅快还看得多。除了普通的美感图像即我们平常看到的彩色照片式渲染图之外SPEAR还能渲染多种地面真值图像模态Ground Truth Image Modalities——这些是研究者用来训练和评估AI的特殊图像包含普通照片看不到的信息层。具体来说SPEAR能输出的图像类型覆盖了深度图每个像素到相机的距离、表面法线图每个点的表面朝向方向、实例ID图和语义ID图标注每个像素属于哪个物体或物体类别、材质ID图标注每个点的材质类型以及一套非漫反射本征图像分解Non-Diffuse Intrinsic Image Decomposition——这是把图像中的光照、材质、反射等成分分开的技术。此外还有物理基础着色参数Physically Based Shading Parameters这些参数描述了每个表面材质的物理属性比如粗糙度、金属度等。值得特别提及的是这套非漫反射本征图像分解在现有任何基于虚幻引擎的仿真器中都找不到是SPEAR独有的能力。研究团队指出SPEAR的相机传感器能输出Hypersim数据集Adobe Research此前发布的一个著名室内场景合成数据集中的全部图像模态同时在此基础上增加了新的模态。五、灵活得出人意料那些无法用其他工具完成的事SPEAR的高度可编程性带来了什么研究团队通过一系列实例展示了它的边界在哪里——或者说展示了它几乎没有边界。第一类应用是控制多种具身智能体。研究团队用SPEAR控制了Epic Games多个样例项目中的六种不同智能体CitySample项目里的行人和汽车、StackOBot项目里的飞行机器人、CropoutSample项目里资源采集游戏中的多个智能体、GameAnimationSample项目里的一个具有跑酷能力的人类角色和一只四足机器人。每种智能体的动作空间完全不同——开车、走路、飞行、奔跑跳跃——而SPEAR用同一套编程接口驾驭了它们全部这在其他任何现有仿真工具中都无法实现。第二类应用是操控虚幻引擎的程序化内容生成PCG系统。在Epic Games的ElectricDreams样例项目中研究团队用SPEAR控制了场景里一个巨大的岩石结构的位置让它从左移到右。神奇的是引擎的程序化系统会自动根据岩石位置调整周边所有细节——水面绕着岩石流动木头自动出现并与附近结构相连整个场景始终保持和谐自洽。研究团队还用同一套接口控制了场景天光的朝向来模拟一天中不同时刻的光照变化。所有这些操作都是通过几行Python代码完成的。第三类应用是与MuJoCo物理仿真器的联合仿真Co-simulation。MuJoCo是一款专注于精确物理计算的仿真引擎常用于机器人研究。研究团队建立了一个实时桥接系统用户在MuJoCo的默认交互界面里操控场景比如给一把椅子施加一个力与此同时SPEAR持续读取MuJoCo场景的状态并实时更新对应虚幻引擎场景里物体的位置和姿态使两个仿真世界保持同步。整套协同仿真的逻辑同样可以用SPEAR的begin_frame/end_frame编程模型干净地表达在每个仿真步骤里先禁用虚幻引擎自身的物理循环执行MuJoCo的若干个子步骤然后读取MuJoCo里每个物体的位姿通过SPEAR更新到虚幻引擎里最后渲染观测图像。这种设计让用户可以完全自定义物理子步数非常灵活。第四类应用是渲染同步多视角图像。研究团队用SPEAR配合MetaHumans样例项目Epic Games推出的高精度数字人系统在同一帧内同步渲染了同一个细节丰富的数字人角色的多个不同角度的图像。这类同步多视角数据在面部重建、神经辐射场NeRF等3D重建研究中非常有价值。第五类应用是自然语言场景编辑。研究团队构建了一个AI编程助手系统让视觉-语言大模型Vision-and-Language Model读取当前场景图像根据用户的文字指令如把两把扶手椅挪近一些但不要完全接触、把地板变得尽可能亮、在沙发上方和扶手椅上方各放一盏明亮的聚光灯迭代编写SPEAR程序并执行完成场景修改。整套系统运行流畅这说明SPEAR对AI编程助手非常友好因为它的接口和普通Python无异。六、灵活的同步策略一套模型涵盖所有现有方案SPEAR编程模型的另一个亮点是表达能力的强大它可以用来实现现有各类仿真器中不同的时间同步策略而每种策略都只需要几行代码。AirSim采用单步执行模式每次让引擎前进一帧然后等待PythonCARLA有同步和异步两种模式UnrealCV支持批量命令把多个操作打包成一次请求发送Habitat 2.0使用双缓冲观测机制在引擎渲染下一帧时Python就可以开始处理上一帧图像。研究团队在论文中明确展示了如何用SPEAR的begin_frame/end_frame机制写出与上述每种方案功能完全等价的步骤函数即OpenAI Gym风格的step函数。此外外部物理仿真器的联合仿真、用户自定义子步骤的物理更新也都能自然地融入这套框架不需要任何特殊处理。这种统一性意味着研究者不再需要为了换一种实验策略而切换到完全不同的仿真工具只需要调整几行Python代码即可。七、系统架构幕后的精密工程SPEAR采用客户端-服务器架构Python程序作为客户端运行在一个进程里虚幻引擎应用作为服务器运行在另一个进程里可以是同一台机器也可以是不同机器通过TCP/IP连接。服务器端用rpclib实现一个现代C的远程过程调用库客户端用nanobind实现一个高效的C/Python绑定工具。这套组合让客户端可以像调用本地C函数一样调用服务器上的入口点类型安全有保障性能开销极小。服务器在虚幻引擎内部运行在一个独立的服务器线程上这与大多数现有插件不同——现有插件通常在游戏主线程上响应命令这意味着每次响应都要中断游戏主线程的正常执行。SPEAR的服务器线程可以独立响应Python命令不需要打断游戏线程当真正需要在游戏线程上执行操作时服务器把任务放入两个线程安全队列分别对应begin_frame和end_frame游戏线程在每帧的特定时刻自动排空这些队列。研究团队手工实现了193个专门的服务器入口点用于暴露那些不在反射系统里的虚幻引擎功能比如一些底层系统功能以及反射系统本身。这193个入口点中约75%专门用于暴露反射系统的各个方面正是这些入口点让用字符串动态访问任意反射可见函数成为可能。每个同步版入口点都手工实现其对应的异步版本则通过C模板元编程自动生成大幅减少了重复代码。对于涉及大块数据传输的场景比如渲染图像SPEAR引入了一套名为SpFunction的自定义函数机制。任何虚幻引擎对象都可以在其组件层次结构中插入一个特殊子组件并在运行时绑定命名函数到这个组件上这些命名函数SpFunction在Python端看起来和普通的反射可见函数完全一样但它们的输入输出可以是NumPy数组而不只是JSON字符串。当SpFunction的调用到达客户端-服务器边界时NumPy数组被映射为内部的命名数据数组表示如果配合共享内存使用这个过程完全不需要数据复制。关于类型系统虚幻引擎对可反射类型有严格限制只有基本类型、字符串、指向UE对象的指针、部分容器、枚举以及由上述类型递归组合的结构体才能出现在反射函数的签名和成员变量里。这个限制反而带来了一个便利反射类型都可以自动序列化和反序列化为JSON而Python字典也可以轻松转换成JSON。两者的结构对齐使得Python字典成为了SPEAR里传递函数参数和返回值的通用表示用户在Python里直接写字典就能调用接受三维向量等复杂类型的UE函数。**说到底SPEAR在想什么**归根结底SPEAR解决了一个长期被忽视但确实很重要的工程问题如何让研究者用最少的代码对一个功能极其强大的引擎拥有最大的控制权同时还能以接近引擎原生的速度获取渲染数据。它没有把虚幻引擎包装成一个针对某种特定AI任务设计的专用工具而是选择把引擎本身最完整地暴露出来让用户根据自己的需要去决定要做什么。这种宁可让用户写更多Python也不预设用户的目标的设计哲学让SPEAR能同时服务于机器人仿真、自动驾驶、数据集生成、人脸渲染、场景编辑等看起来毫不相关的用途。对于普通人来说这项研究最直接的影响可能体现在未来那些在城市里穿行的自动驾驶汽车、在仓库里作业的机器人、在医院里辅助手术的机械臂很可能都在某个虚拟世界里训练了数百万小时而这些虚拟世界就是由SPEAR这样的工具构建和控制的。光真实的仿真让AI在假世界里学到真本事再把这些本事带进现实世界。研究团队相信SPEAR有潜力成为计算机视觉、机器人和具身AI领域的基础数据引擎并在不远的将来成为连接互联网规模视觉-语言大模型与虚幻引擎顶级虚拟世界的桥梁。这座桥一旦稳固通往AI辅助内容创作、个性化娱乐和空间智能基础研究的大门将会向更多人敞开。有兴趣深入了解技术细节的读者可以通过论文编号arXiv:2607.06701在arXiv平台查阅完整原文项目的全部代码也在GitHub的spear-sim/spear仓库公开可以自由探索。---QAQ1SPEAR和AirSim、CARLA这些仿真器有什么本质区别AAirSim和CARLA是为特定用途无人机/自动驾驶定制的整体式仿真器只开放了几百个固定接口和引擎深度绑定。SPEAR是一个通用Python库加模块化插件直接对接虚幻引擎的反射系统暴露超过14,000个引擎函数几乎可以控制任何虚幻引擎项目不局限于某类任务或场景。Q2SPEAR的图像传输为什么能比其他工具快十几倍A核心在于两项技术异步通信让Python不用等引擎渲染完就能继续执行进程间共享内存让渲染好的图像从GPU卸载后直接写入Python能读的内存区域完全跳过了传统方式里多次数据复制的过程图像传输速度因此大幅提升在1920×1080分辨率下最高可达73帧/秒。Q3SPEAR暴露的那14,000多个虚幻引擎函数是怎么维护的会随着引擎版本更新而失效吗A这些函数不是手工维护的列表而是通过SPEAR直接读取虚幻引擎反射系统的实时目录自动获得。只要虚幻引擎更新后某个函数仍然标注了UFUNCTION或UPROPERTYSPEAR就会自动把它暴露给Python不需要手动更新。新增的函数同理天然就会出现在SPEAR可访问的范围里。