把整座旧金山做成一款电子游戏
文章摘要
sf.thijs.gg 是一个纯浏览器运行的交互式 demo,标题就叫「San Francisco – The Game」。由于它是一个客户端渲染的 WebGL 应用,页面本身几乎没有可读的正文,以下内容来自页面 UI 文本、HN 讨论以及作者在 HN 上的补充说明。
它是什么。 一款在网页里运行的、按 1:1 比例还原整座旧金山的第三人称开放世界漫游游戏。你可以用 WASD 移动、鼠标控制视角、空格跳跃、Shift 疾跑、C 切换摄像机(第三人称/其他视角)、H 呼出滑翔翼、V 召唤载具、L 切换细节模式、R 重置、P 切换「世界安全」模式、N 切换「生命」开关,另有加减速与视距调节。界面上还有一个可搜索的「GO ANYWHERE(去任何地方)」输入框和一个可点击瞬移的小地图,以及坐标复制链接、头像、聊天面板和一个多人模式开关(默认关闭,页面标注「MULTIPLAYER DISABLED / ENABLE TO SEE PLAYERS」)。开车时可以收集金币,HUD 上还有木材、石头、金属三种资源计数和一个 MPH 速度表,暗示作者还在往里加更多玩法。加载界面会显示「街区已就绪 100%」和一句提示:「你周围的街道已经准备好了。」
数据来源是这个项目最受关注、也最有争议的地方。 页面左下角赫然写着「Copyright © 2026 Apple Inc. All rights reserved.」并链接到 Apple Maps 的服务条款,同时也标注了 OpenStreetMap 贡献者。也就是说,这座城市的三维几何和贴图来自苹果地图的 Flyover 摄影测量数据。HN 上的技术观察者对渲染方式有不同判断:有人认为看起来是某种「三角面片泼溅」(triangle splatting),有人认为地面是传统网格、但画面中确实存在明显的 splat 伪影,怀疑是把从苹果地图扒下来的数据训练成了泼溅表示,与传统摄影测量混合使用。作者本人在 HN 上没有正面回答数据获取方式。
实际体验。 从讨论来看,它的画面是低多边形、带摄影测量特有的「融化」感的——车辆看起来像扭曲的幽灵,行人和交通完全没有,城市空无一人。加载采用惰性瓦片流式加载,走到哪加载到哪。它在不同浏览器和设备上的稳定性差异很大:Chrome/macOS 上有人报告视角被卡在起点附近几个街区内动不了,Firefox/Windows 上有人遇到 CORS 违规和 WebGL 报错导致永远转圈(重启浏览器后正常),Safari 上有人报告整个浏览器被锁死、连标签页都关不掉,iPhone 上有人的手机直接发烫。有用户用 DevTools 观察到初始加载约 400MB,五分钟后内存占用涨到 2GB,明显存在内存泄漏。
尽管技术上粗糙,它给相当多的人带来了强烈的情感体验——这也是 HN 讨论最真诚的部分。
HN 评论精华
这条帖子拿到 610 分、约 160 条评论。需要说明讨论的真实走向:技术讨论只占少数,大部分评论分成三类——旧金山前居民的怀旧告白(这一支最动人也最高票)、关于「用旧金山做背景的电子游戏」的集体考古(从 1989 年的 Vette! 一路数到 GTA 圣安地列斯),以及关于苹果地图数据合法性的质疑。另外还有一整支相当放飞的厕所幽默支线。
怀旧支线(本帖最有分量的部分):
- frankhorrigan 写下了全帖最高票的一条:他在旧金山住了近 20 年,现在大部分时间在纽约。「说真的,这让我情绪激动了。在自己家后院里走来走去感觉太奇怪了。去了 Dolores 公园那个我二十几岁时常泡的地方。我最喜欢的网球场和飙坡路线,把整个飞盘高尔夫球场走了一遍。」
- marciob 提出了关键的追问:能理解你的感受,但这跟用谷歌地图有什么不同?两条回答都很好。aguynamedben 的答案是「行走的自由意志」:他曾用特定路线在城里走来走去,现在能自由地重现那些散步,包括孩子三岁时走过的路线,「谷歌地图没有流畅到能做这件事」。frankhorrigan 的答案更深:「显然很大一部分原因是穿行其中。但我也觉得,是因为它是这个怪异的、梦一般的版本。因为它低分辨率、还有点坏掉,就像走在一个你非常熟悉的地方的梦里。一些小小的真实会冒出来,比如某家墨西哥卷饼店恰好就在你预期的位置。但它几乎是这座城市的《寂静岭》版本,所以你的心智会替你填补空白。」他还说自己第一次离开旧金山半年时,会有某些街口和地点的闪光灯式记忆,甚至不是关于那里的具体回忆——他刚毕业就搬去那里,青春期尾声和它包含的一切都发生在那儿,所以有上百个小角落里藏着上千段记忆。「正因为它像一个半记得的场景,才特别触发怀旧。」
- aguynamedben 补充了同样的体验:他在旧金山住了 15 年,孩子们在 Marina 区蹒跚学步,「这太棒了,真的勾起了怀旧,它和我的记忆完全吻合」。他还提到一个反向的经验:玩模拟赛车跑熟某条赛道后,终于亲身去到那里,它和你脑海中的样子一模一样。jamiek88 接话说他是「严肃」的模拟赛车玩家,十月将有机会在 Brands Hatch 开一辆房车赛车,那条布局他在模拟里跑过无数次,非常期待。madrox、throwforfeds、er4hn、Advaith_12、parisisles 都留下了类似的短告白——Advaith_12 的最直接:「刚在旧金山实习八个月回到学校。今天走了一遍从住处到办公室的老路线,很受触动。」parisisles 说:「大概这证明了我其他方面的生活有多好——但我为不再住在旧金山/湾区感到强烈的悲伤。」bsimpson 只写了五个字:「我找到了我自己的 Vespa!」
游戏考古支线:
- forthwall 开头就把讨论引向了这条路:想要更高保真度但控制更少,可以试试《微软飞行模拟》里的旧金山;至于用旧金山(但非 1:1)的游戏,《看门狗 2》是不错的替身,而他个人最爱的旧金山演绎是《GTA 圣安地列斯》里的 San Fierro。striking 给出了很细致的反驳:他也很喜欢圣安地列斯,但 San Fierro 是其中最弱的区域之一;他判断还原度的标准是那种「哦我来过这里」的感觉,而在 San Fierro 只有几个点能触发,相比之下 Las Venturas(拉斯维加斯)和 Los Santos(洛杉矶)他能靠玩游戏的记忆在现实中认路。「和那两个比,San Fierro 感觉像是真实事物的一种 Backrooms 式的梦境压缩,很多东西被挪动了位置。」不过 Haight-Ashbury、Pacific Heights、Nob/Russian Hill、Polk Gulch、Ocean Beach 等区域仍然可辨认且排布正确。
- 「我们在 GTA 6 之前先有了 GTA 旧金山」这个梗被 nickandbro、Jeremy1026、gjenkins 三个人分别独立说了一遍。metadat 认为那其实是《看门狗 2》,「基本就是 GTA 但你是湾区的黑客」,地图上的旧金山部分精确到每一栋建筑;dcrazy 反驳说他给的那张地图离现实差得远,除非那是金门公园与要塞区相连、半个旧金山掉进海里的时间线;metadat 承认拓扑上不是 1:1,但他查过一些很偏僻的建筑,在游戏里全都找得到。
- HanClinto 提供了一个实用得出人意料的用法:他们最近为了去伦敦旅行,用《看门狗:军团》来熟悉这座城市——把游戏设成和平模式,只是四处走走做虚拟观光而不做任务。「这是对这座城市出人意料地好的还原,我们很感激在去之前就对那个地方有了些熟悉感。」jermaustin1 做过类似的事:为了准备在英国开车,他把方向盘接上《极限竞速:地平线 4》,在爱丁堡开慢车、靠左行驶、遵守他知道的交通规则。「不完美,但确实有点帮助。街道要窄得多、交通也糟得多,但保持靠左的肌肉记忆很不错。」
- 至少四个人独立提到了 1989 年 Spectrum Holobyte 的《Vette!》——JKCalhoun(还附上了自己用真实 NASA 月球数据做的体素月球着陆器 mooncraft2000.com)、beej71、ButlerianJihad、LogicFailsMe。ButlerianJihad 的回忆最生动:父亲给他买了台 PS/2 Model 30 286 时他发现了这个游戏,此前已被飞行模拟器迷住多年,觉得《Vette!》里的旧金山地形棒极了、非常引人入胜。zkmon 和 callmemclovin 则提名《暴力摩托城/午夜狂飙》(Midtown Madness)——callmemclovin 说它随家里那台装 Windows ME 的新电脑一起捆绑,2005 年他有机会去旧金山时认出了许多街道。ninjalanternshk 补充了一个细节:他隐约记得那款游戏(可能就是 Midtown Madness)盒子里附了一张 Rand McNally 的折叠街道图,游戏世界精确到你可以用那张真实地图给朋友指路,「就当时而言,我一直很敬佩那种极致的还原度」。englishspot 的第一次「旧金山体验」来自《索尼克大冒险 2》的 City Escape 关卡,而且当时根本不知道那是旧金山,多年后去了才反应过来;cosmojg 说自己把那关背得滚瓜烂熟却从没去过旧金山、完全不知道原型是它。还有人提名《驾驶员:旧金山》、《美国卡车模拟》、《托尼霍克职业滑板》和 Cisco Heat。
技术与数据合法性支线:
- kfarr 提出了最严肃的法律质疑:这很棒,如果合法他也想在自己做的地理空间项目上做类似的事,但他不认为苹果会接受这种对其数据的使用方式。他指出谷歌通过专门的 API 严格限制其 3D 瓦片数据,而苹果根本没有提供 3D API,因此这必然违反服务条款;他还引用了条款中禁止反编译、解密、逆向工程、试图导出源码或反汇编服务的条文。「我很希望有人证明我是错的,希望苹果能拥抱这种对其地理空间数据的使用。」bl0b 的回应代表了另一种态度:「你说得对,不过话说回来,去他妈的现在任何大公司的服务条款。」wahnfrieden 只写了四个字:「这是盗版内容。」fragmede 的判断是:「数据来自那里,所以有人快要被起诉了。」
- fjlunky 提出了具体的技术猜测,也是全帖信息量最高的一条:这是不是用 retroplasma 的 flyover 逆向工程代码扒下来的?那个仓库现在有点落后了,不适配苹果更新后的地图数据分发方式和 heif 贴图格式。他自己也在玩同样的东西,想给 re-volt(或者说 RVGL)做 RC 赛道。1e1a 判断这看起来用了某种三角面片泼溅,fjlunky 进一步分析:在他看来是个奇怪的组合,也许泼溅是用扒下来的苹果地图数据训练的——表面贴图看起来都像传统摄影测量那样是静态的(没有镜面反射),但画面里确实有明确的 splat 伪影。他还提出一个有趣的可能:用这种方法其实不需要扒数据,泼溅可以用正常使用苹果地图的屏幕录像来训练。1e1a 回应说地面看起来确实只是网格,而且苹果地图最近似乎也开始用某种泼溅了,他好奇苹果的实现是完全泼溅化的,还是同样是这种奇怪的混合。
- retroplasma 本人现身了,回应「我们也想要纽约版」的呼声时说:「我可以给你整个星球,而你是一只鸡」——并附上了自己的 gist。ranger_danger 的反应是:「这为什么没更出名?我一直想能用正常的 3D 游戏控制方式更自然地走过/飞过城市街道。」
- tuchsen 提供了最有用的 bug 报告:他在 M3 Air 上用 Chrome 飞了很久,二十分钟后画面变成一团团色块、角色卡住;打开 DevTools 发现游戏加载时约 400MB,五分钟后内存占用到 2GB,「我猜你需要让你的 agent 跑几轮去找内存泄漏」。fusslo 的抱怨是关于 UX 的:「加载进度条都去哪了?我坐在这里看着方块转圈,完全不知道游戏到底在不在加载。」dimitarbogdanov 接了句:「他们用来做这个的 LLM 不在乎加载进度条 XD。」不少人(juancn、aselimov3、gcanyon)都卡在同一个地方——不知道怎么转视角,答案是按住鼠标左键/点击触控板拖动。
关于「下一步该怎么做」的设想:
- cutoff 列出了最完整的功能愿望清单:可切换的街道名/地标/商铺显示、输入地址瞬移、输入地址后像 GPS 一样给出路线自己走过去、获取当前位置的分享链接、小地图可缩放或放大以便更精确地瞬移、可换头像、更动态的天气和光照;他还说愿意下载一个更高分辨率的本地版本,也许用谷歌街景数据,如果这是个实时 MMO 就更有意思了。
- jvogt 描绘了本帖最完整的技术愿景:他梦想有一条流水线,能把高程数据、建筑数据、地图和街景影像处理成 GTA 引擎所需的全套地图组件,包括树、消防栓、路牌、灯柱、红绿灯等所有物件;建筑贴图可以用图生图模型对低分辨率街景影像做放大和重打光来重建,建筑形状用生成式 3D 网格模型重建,甚至路面和人行道的品质(多干净、标线多褪色)也能从影像推断后应用到地图上。DiscourseFan 认为「为任意环境批量生产 GTA 式开放世界」这个概念非常有吸引力,「大概会让 Rockstar 自己感到恐惧,但技术发展就是如此」;21asdffdsa12 提出了一条务实的反驳:真实世界地图其实并不适合游戏,它们倾向于制造交通堵塞。chaostheory 说 Rockstar 大概不会害怕,毕竟育碧批量生产重复的开放世界已经十多年了。
- CobrastanJorji 提出了 AI 放大的想法,并附上了一条值得记下的警告:这是使用「放大」AI 技术的好机会,从这些奇怪的空间扫描结果生成一个看似合理、清晰得多的版本;但这么做有危险——人们会相信其中出现的细节,因为它取自现实,而 AI 很喜欢添加虚假细节。「不过对一个小游戏来说,细节似乎比真实性更重要。」sagebird 的具体建议是:即使不提高分辨率,如果有 AI 或工具能识别汽车这类常见物体、把泼溅排布得更连贯,让车底不再像一件融化的幽灵服装,那就很棒了。
- 讨论里还冒出了好几个同类项目:nuwandavek 的 sf.isopolis.city(旧金山的等距像素地图,此前也上过 HN),jparishy 的 cityrider.jpsmaps.com(费城版,艺术风格更抽象,含垃圾回收/废品站变卖的经济机制和买房系统,作者在评论区非常积极地回应了多条 bug 报告和反馈),fassssst 分享的 N64 风格西雅图,以及 lifebeyondfife 用 AWS S3 上免费无需认证的 Copernicus 30 米高程 GeoTIFF 加 OpenStreetMap、在 Godot 里 vibe coding 出来的自己城市的版本——tobestobestobes 建议他改用 3DEP,1 米分辨率高程数据(代价是需要 LOD 和剔除来支撑)。
- K0IN 分享了一段失败的尝试:他和朋友最近常玩 GeoGuessr,想让它更像电子游戏,因为谷歌地图的跳跃式移动让他晕;他用谷歌街景作为图像源、用 colmap 重建三维块,但一直没做好——时间上的跳跃(街景车并非连续扫描)和图像密度太低是主要问题,「不过是个有趣的业余项目」。
其他:
- avelis 的一句「这是我见过这座城市交通最少的时候。/s」引出了一整支旧金山刻板印象玩笑,DonHopkins、wyclif、jrflowers 关于人行道卫生的接龙最后被 DonHopkins 用一份认真到离谱的「第一人称便便游戏」考据文献综述收尾,zthrowaway 给出了恰如其分的评价:「这是一篇史诗级的 shitpost。致敬。」
- nfw2 提出了一个真正的产品洞察:《微软飞行模拟》一直没有 UFO 模式之类的东西是个遗憾——不用操心让飞机保持在空中的物理,就能停下来看看东西;「也许这里的滑翔翼也不需要真实的物理。用户真的需要往下掉吗?」
- josephjrobison 的评论概括了不少人的感受:「非常了不起。而这将是它最差的样子。我们很快就会探索这个的 4K 版本,还能打开突尼斯的每一个垃圾桶。」yannxaver 的收尾很干脆:「我愿意为一个能以类似方式探索世界上任何城市的 App 付费。」