把《挽救计划》飞船的星图,用 18 亿颗真星重新画一遍
文章摘要
这是一个致敬 Andy Weir 小说《Project Hail Mary》(挽救计划)的网页项目——作者 valhovey 把书中”圣母号”飞船里的舰载导航电脑界面用浏览器重新做了一遍,搭配从 ESA Gaia DR3 任务下载的真实星表数据。Gaia DR3 是欧洲空间局到目前为止发布过的最大星表,1.8 亿+ 颗恒星的位置、距离和颜色都有亚毫角秒级精度,作者写了 Python 脚本从中抽取出可视化所需的部分,喂给前端的 Three.js 实时渲染。
界面上同时画出银河带、黄道面,以及小说里的关键恒星——太阳、Tau Ceti(鲸鱼座 τ)、40 Eridani。围绕这些恒星的行星和轨道并非真实数据(这两颗目标星目前并未确认有匹配小说设定的系外行星),是按剧情虚构的,但恒星位置全是真的。点开任意一颗恒星,弹窗会显示真实距离和参数;还能看到小说中的Petrova 线(噬星体在恒星与目标行星之间留下的光带)。
技术栈是 SvelteKit + Three.js,全部跑在静态 GitHub Pages 上。作者在 HN 自评论里强调推荐大家也用 Gaia 公开数据集做点东西——这种”用真实科学数据 + 真实可玩的可视化向科幻小说致敬”的小项目,在 HN 上一向很有人缘。值得注意的是,由于人眼很难感受光年和 AU 之间的尺度差(63,360 inches/mile vs. 63,239 AU/light-year),作者刻意把行星和恒星都放大了一两个量级,否则什么都看不见——是经过工程权衡的”艺术许可”。
HN 评论精华
-
speleo(作者):在评论里说明数据源是 ESA Gaia DR3 的 18 亿颗恒星表,整个数据预处理是用 Python 脚本完成的。推荐大家也去看看那份公开数据集,”很多有意思的项目都可以基于它做”。
-
ggreer:贴出了那个让人立刻理解空间有多空的经典对比——一英里里有 63,360 英寸,而一光年里恰好有 63,239 个天文单位(AU)。所以如果把地球到太阳画成 1 英寸,海王星就在 30 英寸外,而最近的恒星要 4 英里之外。作者承认行星和轨道没有按真实比例,否则啥都看不到。
-
hnuser123456:拿截图做了像素级测量,发现行星相对恒星间距被放大了约 447 倍——水星甚至被画进了太阳里、木星宽度接近太阳。Reason077 跟着补一刀:行星位置也没有实时更新,目前金星和木星正在合相,星图里看不出来。
-
shit_game:反编译了 minified 的 JS bundle,数出整个场景里渲染了 53,836 个 3D 物体——发现 Three.js 实例没暴露在 window 上,只能从打包代码里挖。
-
p-e-w:感慨现代库(Three.js、WebGL)让开发者可以放心忽略性能预算——在手机上实时渲染几万个 3D 物体已经不需要特殊优化,”我们已经过了那个要为每一帧抠 CPU 的时代”。
-
rob74:注意到画面中银河带和黄道面看起来几乎垂直,第一反应是 bug。学到了一个冷知识——黄道面相对银道面约 60°,这并非 bug 而是真实的几何关系。
-
JonathonW:澄清一个细节——星图里的恒星位置全是真实的,但Tau Ceti 和 40 Eridani 周围的行星是虚构的,因为这两个系统目前都没有发现匹配小说设定的系外行星。
-
sigmar:考据派——质疑 Petrova 线弯曲的方向是不是画反了。slg 回复说他记得书里的设定是 astrophage 以接近光速移动,弯曲其实不是来自行星的运动而是来自恒星的运动方向,两人都决定回去重读一遍小说。
-
api:顺势安利 The Expanse——少数真的尊重宇宙尺度的科幻剧,飞船间交战距离动辄几千公里且耗时数小时,比绝大多数科幻片都更接近真实物理。
-
waynecochran:联想到旅行者 2 号上的铭板——Carl Sagan 设计的、用 14 颗脉冲星定位太阳的星图。书里和电影里 Grace 和 Rocky 互相画的”家乡坐标”很像这个思路,但 hgoel 纠正说他们画的其实是 Tau Ceti 附近的本地恒星图。