2022 年 8 月,毅力号停在杰泽罗陨石坑的三角洲前缘。那是它着陆后的第 530 个火星日,任务记录里写作 sol 530。
我把这个停车点做成了一个能实时开车的游戏,叫火星实景 sol 530。以车为中心约两公里范围内的地形起伏、地表颜色、天空光线,还有耳边的风声,都来自 NASA 公开发布的任务数据。源码和试玩包都在 GitHub 上:https://github.com/Zssusin/mars-sol530。

数据从哪来
先交代数据来源,因为这决定了它和「凭印象画一片红色沙漠」有什么区别。
- 大范围地形:来自火星勘测轨道器上的 HiRISE 相机,高程数据 1 米一格,地表影像 25 厘米一个像素。往外接 CTX 相机的 20 米高程,更远处接 MOLA 的全球高程。
- 车身周围那一圈:由毅力号自己的导航相机(Navcam)拍下的立体照片重建成三维网格。车轮边那些石头的位置与大小,就是它当时实际看到的样子。
- 地面材质:从火星车拍的近景照片里裁出 81 块真实的地面样块,挑出 8 种铺满地表。
- 声音:风声和尘卷风来自毅力号 SuperCam 麦克风的录音,行驶时的声响录自着陆相机的麦克风。
- 车身:直接用 NASA 公开的毅力号三维模型。


拿真照片对答案
底料是真的,做出来的画面未必就对。为了检验效果,我在毅力号当年按下快门的位置放了一台虚拟相机,把朝向、视场和拍摄时刻都调到和原始记录一致,再拿游戏算出来的画面去跟真照片逐个像素比对。

目前两个对照机位的像素中位误差分别是 5.67 和 2.47(按 8 位色阶算,也就是在 0 到 255 的明暗范围里差这么多)。每次修改画面代码都要重跑一遍比对,只要误差变大,改动就不合并。
从 图 4 也能直接看出目前的差距在哪:真照片里的石头比地面更亮,石块边缘底下压着清晰的暗影;游戏里的石头看起来偏糊,和地面贴在一起,分得不够开。这是眼下画面上最明显的短板。
火星上的一个白天
游戏里可以把时间从清晨拨到傍晚,跨度是当地时间 5 点 21 分到 17 点 26 分。天空的颜色与地面的明暗不是调色调出来的,而是按火星大气里的沙尘对阳光的散射规律算出来的。
于是在游戏里能看到一个地球上没有的景象:白天的天空是黄褐色的,等太阳落到山脊附近,太阳周围反而会泛起一团蓝光。

在里面能做什么
- 开车和拍照。 可以在地形上自由驾驶。切到拍照模式后,能调焦距、景深、一天里的时刻和空气中的沙尘量。
- 探访 11 个真实的科学目标。 比如 Wildcat Ridge 和 Hogwallow Flats。把车开近了会弹出导览卡,上面带着 NASA 当时拍的实景照片,并交代这个地方为什么值得看。
- 复刻 NASA 的现场照片。 挑选一张真实的 Navcam 照片,把车开到当年的拍摄点,对准同一个方向拍下一张。系统会按位置、朝向、时刻和画面相似度给你打分。
- 排一个火星日的行程。 早上先接收下行数据,在俯视规划图上标出航点,预演一遍路线,再执行,最后查看当天的行驶报告。



真正上手排一次行程,就会撞见一个很实在的数字:毅力号的最高速度只有每小时 152 米,折合每秒 4.2 厘米。像 图 8 里那条总共 170 米的路线,预演出来足足要走 79 分钟。为了不用在屏幕前干等,执行阶段提供了 100 倍快进。
该留神的地方
不是所有石头都是实测的。 车旁十来米内的 57 块石头来自 Navcam 的立体照片,位置和大小都是真的。但更远处散落的一千六百多块石头,是照着 Golombek 和 Rapp 总结的火星着陆点石块大小分布规律随机撒上去的。它们的数量和尺寸分布符合统计规律,但具体哪块石头落在哪,是程序算出来的。
近看有破绽。 车旁的地面从某些角度看过去会有拉长的条纹——因为原始照片全是从车顶桅杆往下拍的,石头背面和侧面本来就没有画面数据。近距离看那些实测的石块,能看出棱角生硬的多面体轮廓;升到高处往下看,远处的地面纹理也会露出重复平铺的痕迹。
只有 Linux 版是实机跑过才发布的。 Windows 和 macOS 的程序包虽然由同一份代码构建,但在发布前没有实际运行测试过。如果遇到问题,请到仓库里提 issue。
需要一块独立显卡。 建议显存 8 GB。默认画质是按中端独立显卡、2560×1440 分辨率调的;如果显存小,可以在设置里把画质降一档。
它不是 NASA 的官方作品。 这个项目没有 NASA 或 JPL 的授权与背书。车身上的 NASA 和 JPL 标志,是直接沿用了那个公开三维模型里自带的涂装。
怎么下载和运行
去 GitHub 的 Releases 页下载两样东西:
- 按自己的系统选一个程序包:Linux、Windows,或者 Apple 芯片的 macOS。
- 全部三卷数据包:三个系统共用同一套数据。
两部分加起来约 2.6 GB,解压后占 5 GB 左右。把数据包解压到程序旁边的 data 文件夹即可运行。各个系统下的具体操作命令,都写在仓库的试玩说明里。
游戏界面带中文和英文,进去后按 F1 可以查看全部按键说明。
项目代码采用 MIT 许可开源。底层引擎用的是自编版 Godot 4.7.2,相关的修改补丁和构建方法也都放在仓库里了。
最后
火星的照片和探测数据一直是公开的,只是它们平时散落在各个档案库里,按仪器名称和产品编号分门别类地排着,没有哪个地方能让人直接「站进去」环顾四周。
这个游戏做的,就是把其中某一个下午的碎片拼回同一片空间里。它只有一个停车点、一个火星日,画面上的破绽我也都在上面坦白了。但脚下那块地的起伏、那天下午的光线、耳边刮过的风声,确实都是从火星上量回来的。
图 4 左半幅照片:NASA/JPL-Caltech,产品号 NRF_0530_0713995035M362RAS_N0261222NCAM00215_0M0095J02。导览卡和挑战页里出现的照片来自毅力号的 Mastcam-Z 和 Navcam(NASA/JPL-Caltech/ASU),地面样块的原始照片来自 NASA 行星数据系统。其余画面均为游戏渲染。数据与影像来源:NASA/JPL-Caltech/ASU/MSSS/University of Arizona/USGS,完整清单见仓库中的 THIRD_PARTY.md。