跳到正文
clarkebelt
返回

火星实景 sol 530:把毅力号停过的那块地做成了能开的游戏

文档号
CB-TM-20261012
更新于
篇幅
1,873 字 · 约 5 分钟

2022 年 8 月,毅力号停在杰泽罗陨石坑的三角洲前缘。那是它着陆后的第 530 个火星日,任务记录里写作 sol 530。

我把这个停车点做成了一个能实时开车的游戏,叫火星实景 sol 530。以车为中心约两公里范围内的地形起伏、地表颜色、天空光线,还有耳边的风声,都来自 NASA 公开发布的任务数据。源码和试玩包都在 GitHub 上:https://github.com/Zssusin/mars-sol530。

毅力号停在一片布满碎石的浅褐色坡地上,背后是一道平缓的山脊和发白的天空
图 1开局画面,当地时间 13:07。

数据从哪来

先交代数据来源,因为这决定了它和「凭印象画一片红色沙漠」有什么区别。

  • 大范围地形:来自火星勘测轨道器上的 HiRISE 相机,高程数据 1 米一格,地表影像 25 厘米一个像素。往外接 CTX 相机的 20 米高程,更远处接 MOLA 的全球高程。
  • 车身周围那一圈:由毅力号自己的导航相机(Navcam)拍下的立体照片重建成三维网格。车轮边那些石头的位置与大小,就是它当时实际看到的样子。
  • 地面材质:从火星车拍的近景照片里裁出 81 块真实的地面样块,挑出 8 种铺满地表。
  • 声音:风声和尘卷风来自毅力号 SuperCam 麦克风的录音,行驶时的声响录自着陆相机的麦克风。
  • 车身:直接用 NASA 公开的毅力号三维模型。
六块并排的火星地面近景,都是布满板状碎石的红褐色岩面
图 2同一种地面的三对样块。每对左边是调过色、能无缝平铺的版本,右边是火星车拍的原始照片。
从高处俯瞰一片起伏的褐色坡地,毅力号是画面正中的一个小点
图 3升到高处往下看,中间那个小点是车。这个高度上看到的起伏来自 HiRISE 的高程数据。

拿真照片对答案

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

左右两幅同一视角的火星地表:左边是带机械臂的真实照片,右边是游戏渲染,远山轮廓和地面沙纹的走向一致
图 4左边是毅力号 sol 530 拍的 Navcam 照片,右边是游戏在同一机位渲染的画面。照片里的机械臂在渲染里隐去了。

目前两个对照机位的像素中位误差分别是 5.67 和 2.47(按 8 位色阶算,也就是在 0 到 255 的明暗范围里差这么多)。每次修改画面代码都要重跑一遍比对,只要误差变大,改动就不合并。

从 图 4 也能直接看出目前的差距在哪:真照片里的石头比地面更亮,石块边缘底下压着清晰的暗影;游戏里的石头看起来偏糊,和地面贴在一起,分得不够开。这是眼下画面上最明显的短板。

火星上的一个白天

游戏里可以把时间从清晨拨到傍晚,跨度是当地时间 5 点 21 分到 17 点 26 分。天空的颜色与地面的明暗不是调色调出来的,而是按火星大气里的沙尘对阳光的散射规律算出来的。

于是在游戏里能看到一个地球上没有的景象:白天的天空是黄褐色的,等太阳落到山脊附近,太阳周围反而会泛起一团蓝光。

黄昏时毅力号的侧影,太阳刚落到右侧山脊后面,山脊上方有一团偏蓝的光晕
图 5日落前。火星大气里的细尘把蓝光更多地往前散射,所以蓝色集中在太阳周围,和地球上正好反过来。

在里面能做什么

  • 开车和拍照。 可以在地形上自由驾驶。切到拍照模式后,能调焦距、景深、一天里的时刻和空气中的沙尘量。
  • 探访 11 个真实的科学目标。 比如 Wildcat Ridge 和 Hogwallow Flats。把车开近了会弹出导览卡,上面带着 NASA 当时拍的实景照片,并交代这个地方为什么值得看。
  • 复刻 NASA 的现场照片。 挑选一张真实的 Navcam 照片,把车开到当年的拍摄点,对准同一个方向拍下一张。系统会按位置、朝向、时刻和画面相似度给你打分。
  • 排一个火星日的行程。 早上先接收下行数据,在俯视规划图上标出航点,预演一遍路线,再执行,最后查看当天的行驶报告。
毅力号停在碎石地上,画面右侧弹出一张卡片,标题是 Hogwallow Flats,配一张龟裂岩面的照片和几行说明
图 6开到 Hogwallow Flats 附近弹出的导览卡。卡上的照片是毅力号的 Mastcam-Z 拍的。
游戏里的挑战页,并排列出几张真实的火星照片:一张回望车辙,一张是沙地上的浅色石块,每张下面有日期和照片编号
图 7复刻照片的挑战页。列出来的都是毅力号拍的真实照片,底下那行是它在 NASA 档案里的编号。
一张俯视的规划图,褐色地形上画着一条三段折线和几个航点,右侧是分段的里程、到达时刻和电量
图 8火星日的规划图。这条路线分三段,共 170 米。

真正上手排一次行程,就会撞见一个很实在的数字:毅力号的最高速度只有每小时 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 页下载两样东西:

  1. 按自己的系统选一个程序包:Linux、Windows,或者 Apple 芯片的 macOS。
  2. 全部三卷数据包:三个系统共用同一套数据。

两部分加起来约 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。



评论