Night Drive Racing Game
Night Drive Racing Game 把一整款开放世界赛车游戏放进了一个网页。访客打开链接,就能开着一辆跑车在一座下雨的霓虹城市里到处跑,城里有差事、街头赛和几十个藏起来的符号可以找。玩家还能下车步行、去车库换车,或者发一个链接叫上三个朋友一起开。路面积水里的倒影、车身上的雨珠和镜头上的水滴,都是显卡在每一帧里实时算出来的。
这个游戏出自巴西开发者 Anderson Mancini 和署名 Sunag 的开发者之手,最初是为 Three.js 大会做的,拿到了 FWA 的当日站。

01概念
浏览器里的三维赛车,通常是一条赛道或者一段演示,开几圈就结束。这个游戏的名字在页面上叫 Threejs-Punk Drive,它想做的是一座可以一直待下去的城市。城市有自己的地图、四条有名字的快速路、往来的车流、一套任务和成就,以及一个会给玩家发消息的角色班底。
Night Drive 的加载画面是黑底上的一个百分比圆环,圆环下面的小字依次写着加载模型、调校悬挂这类状态。数到头之后,屏幕上会停留好几秒,只写着正在编译着色器,着色器就是显卡用来画画面的小程序。再往后,一个圆形开口把场景揭开,开始画面大约在第 12 秒出现。开始画面像是隔着一扇挂满雨滴的车窗往外看,窗外的霓虹街道是虚的,正中写着 THREEJS PUNK 和一句 A rain-soaked city under neon(一座泡在雨里的霓虹城市),下面是一个 ENTER 按钮。
访客点了 ENTER 之后,屏幕上弹出一条来信。来信的人叫 Nyx,身份是中间人,左边是她的人像,右边的信一个字一个字地打出来。Nyx 说这座城市每晚都要选出一个主人,今晚这顶王冠没人占着,要拿下它,就得替她的人跑差事、赢下 Rio 组织的街头赛、找出那些 Neon Sigil(霓虹符印),再赢回别人碰不到的车。信下面是一张进度表,列着 17 个差事、23 场街头赛、54 枚符印和 7 辆车,最后一栏写的是这一夜本身。

任务由几个角色分别派发,这些规则都写在游戏的成就面板里。出租车调度 Pops 派的是载客和送货的差事,比如在 1 分 02 秒内把乘客送到、送一车易碎货物时损伤不能超过六成、在限定时间内连送四个点。漂移主播 Lux 要玩家在一定范围里攒够 2,500 到 5,000 分的漂移分,飙速纪录的保持者 Rio 守着全城的速度纪录,黑客 Hex 负责发符印的线索,说每一枚符印都是旧城代码的一块碎片。所有成就加起来一共 94 个,玩家的进度存在浏览器里,下次打开还在。
这些差事和符印散在全城各处,玩家按 Tab 就能打开整座城市的地图。地图上四条快速路分别用青、品红、橙、绿四种颜色标出来,差事、赛事、符印和车库都是一个个小图标。玩家点任意一处就设下路点,回到街上,小地图里就多了一条粉色的路线,屏幕顶部写着前方 40 米左转、全程还有 930 米这样的提示。

开车之外,玩家还可以停下来按 F 下车,变成第一人称步行,点一下画面就能用鼠标转头,符印要走进去才能收集。游戏的顶栏还有车库、手机消息、成就和电台几个入口。顶栏上另有一个叫 Drive with friends 的按钮,它会复制一条邀请链接,最多四个人可以在同一座城里一起开,互相按喇叭、闪灯,或者在赛事起点约好一起出发。
02设计
Night Drive 的画面只有一种天气和一个时间,永远是下着雨的深夜。整座城市压在深紫和黑色里,亮的地方全是霓虹招牌的品红、青色和紫色,以及车尾一道红色的灯带。湿透的路面又把这些颜色倒映了一遍,于是地上和墙上同时在发光。
界面这一层借的是赛博朋克的样子。界面上几乎所有的字都用一款宽体的几何无衬线字 Orbitron,全部大写,看起来像未来感的仪表读数。面板的四角切成斜角,边框是半透明的紫色,文字多是青色,任务和提示用亮黄色标出来。Nyx 的来信换了一款等宽字,配一个闪动的黄色光标,读起来像在一块终端屏幕上收消息。
驾驶时的界面把信息推到屏幕四角,中间留给车和路。右下角是一个圆形的速度表,转速从 0 到 8,旁边标着挡位、自动挡,以及牵引力控制、防抱死和车身稳定三个驾驶辅助的开关。左下角是一个圆形的小地图,左边挂着手机消息的提示,屏幕上方在漂移时会跳出很大的分数,底部是一排按键提示。车库、成就这些按钮平时藏起来,光标移到屏幕顶部才会出现。
玩家还可以自己换一种看这座城市的方式。设置里有六种画面色调,默认的 Neon Noir 是霓虹偏紫,Magenta Rain 的粉色光晕更重,Silent Hill 把整座城罩进一层灰白的浓雾,Sin City 几乎褪成黑白。Silent Hill 和 Sin City 两个名字分别借自同名的恐怖游戏和黑白电影。
这座城市的建筑近看其实做得很简单。很多楼只是一个方块,外墙贴着一格一格的窗户,招牌也多是贴在墙上的平板。画面的丰富几乎全部来自光,招牌发光、地面反光、雨水打出亮点,这些叠在一起,远远看过去就像一座细节很多的城市。
车库在游戏里是另一个单独的场景。进去之前先有一小段 PREPARING THE GARAGE 的过场,然后一辆车停在一片反光的湿地面上,左下角是一张参数卡,写着发动机、0 到 100 公里的加速时间、最高时速和车重。玩家第一辆车 Quadra Turbo-R 的介绍写着后中置 V8,还说这座城市就是靠这辆车认出你的,参数卡上是 3.4 秒破百、最高 317 公里每小时。

03动效
车开起来以后,镜头和画面效果都在帮玩家感觉到速度。镜头默认跟在车后面,车速一高,画面边缘就拉出速度模糊,灯光拖出一道道光晕。玩家按住 Shift 放氮气时,车尾会喷出一串橙色的火焰。按 C 可以把镜头切到车头的视角,这时屏幕上看到的是引擎盖和前方的路。

漂移是这个游戏在手感上最主要的玩法。玩家在转弯时按住空格拉手刹,车尾就甩出去,屏幕上方立刻跳出一个漂移分数。分数旁边写着当前的角度,比如 SUPER DRIFT 52°,连着漂下去,分数还会乘上连击倍数。漂移结束时分数会落袋,屏幕上写着 BANKED,中途撞墙就写着 DRIFT LOST,这一段的分数也就没了。玩家停车时同时按住 W 和空格,会进入弹射起步,屏幕上写着 LAUNCH CONTROL。按游戏里的说明,这时再按住 Shift,一根指针会扫过表盘,在绿色区域松开就能起步。
开着车在城里跑,画面平均每秒 60 帧。连续开将近一分钟,超过 32 毫秒的慢帧最多只占千分之三,最慢的一帧约 0.1 秒。
在系统里开启了减少动态效果的访客,会看到 Nyx 的来信不再一个字一个字地打出来,而是一下子显示完整。电台和漂移分数的动画也有相应的规则,但这些规则只管界面上的文字,管不到画布里的雨、速度模糊和车灯拖出的光晕,开起车来的画面和别人看到的一样。
04工程
Night Drive 的画面用三维库 three.js 的 WebGPU 渲染器来画,WebGPU 是浏览器里新一代的图形接口,能让网页更直接地使用显卡。游戏的说明页因此写着,它需要支持 WebGPU 的最新版 Chrome 或 Edge,并推荐独立显卡和 16 GB 内存。手机上也能玩,屏幕上会出现一个虚拟摇杆。着色器用 three.js 自己的着色语言 TSL 写成,说明页上说画面里每一处倒影、水滴和光晕都是这样实时算出来的。车的物理交给 Rapier,这是一个编译成 WebAssembly 的物理引擎,WebAssembly 是一种能在浏览器里高速运行的程序格式。模型和贴图都用了压缩格式,下载完再在浏览器里解开。
进城之前,访客第一次打开要下载约 32 MB,其中三维模型占 18.5 MB。最大的是城市的建筑套件,一个文件就有 6.4 MB,玩家的第一辆车约 2.6 MB,其余几辆车各在 1 到 1.8 MB 之间,开始画面出现以后才陆续下载。地面上那层积水用了三张各约 1 MB 的贴图,天空的环境光来自一张 1 MB 的全景图。进城之后,游戏又下载了雨声和雷声两段环境音,共 4 MB 多,在这之后开车途中就不再下载新的文件了。
这个站开头很快,进城却要等上一阵。服务器 25 到 33 毫秒就返回第一个字节,浏览器 0.57 到 0.6 秒画出第一块内容,这两个数都远好于 Google 建议的 0.8 秒和 1.8 秒,但画出来的只是那个加载圆环。开始画面要到 12 到 15 秒左右才出现。加载过程中有十来个长任务,也就是一次占住浏览器超过 50 毫秒、让页面暂时没法响应操作的脚本,合计约 2.7 秒,最长的一个 1.25 秒,大部分落在编译着色器的那几秒里。
画面能稳在 60 帧,靠的是一套很细的画质控制。默认的最高一档先按屏幕分辨率的 85% 画,再放大到满屏并锐化。游戏每秒看一次帧率,跟不上时就自动降低分辨率,开场时屏幕左下角闪过的 ADJUSTING PERFORMANCE 标记,看起来就是它在调。城市只画 1,300 米以内的楼和路,被前面的楼挡住的部分也会提前剔掉。地面倒影按一半的分辨率画,车身上那层城市的倒影来自一张很小的环境贴图,它每隔几帧才更新其中一面。中档先关掉镜头上的雨滴,低档再关掉车身上的雨水、车身倒影和环境光遮蔽(墙角和缝隙里那层自然的阴影),地面只倒映灯光,街上的车也从 28 辆减到 20 辆。
这个游戏的声音有一部分是现场合成的。车的引擎声不是一段录好的循环,而是由浏览器音频线程里的一个合成器和一个采样器一起生成,这样的做法让引擎声可以随着转速连续变化。电台 NEON FM 放的是一组合成器风格的曲子,界面上注明音乐来自素材站 Pixabay,玩家可以分别调音乐和车声的音量。
多人同开走的是一条 WebSocket 连接,这是浏览器和服务器之间保持开着的一条通道。访客没有邀请朋友时,页面在加载过程中不会去连这条通道。
键盘用户能从头玩到尾,这本来就是一款用键盘开的游戏。开始画面上按 Tab,焦点落在 ENTER 按钮上,按回车进门,来信那一屏再按回车就上车,游戏还支持标准的游戏手柄。不过焦点框是浏览器默认的一像素深色细线,压在深色的场景上几乎看不见。整座城市都画在一块画布上,读屏软件能读到的只有界面上的按钮和文字,其中还有几个控件没有名字。
05评分与团队
| 奖项 | 出处 | 日期 | 分数 |
|---|---|---|---|
| FWA of the Day | The FWA | 2026-10-03 | 88 POINTS,DAYS 4 |
FWA 给了这个游戏 88 分,由 26 张票算出,归在游戏类下面。团队在 FWA 上的说明写的是,这是一款用 Three.js 和 WebGPU 做的免费赛车游戏,桌面和手机上都能玩。说明里列出的大城市、五十多个任务、雨中漂移、收集道具和多辆车,在游戏的界面上都找得到对应的部分。
| 署名 | 身份 | 战绩 |
|---|---|---|
| Anderson Mancini dos Santos | 巴西的创意开发者,数字营销公司 Neotix Transformação Digital 的联合创始人 | FWA 2 |
Anderson Mancini 在 FWA 的资料里写着,他从 2005 年起做了四百多个数字营销项目,后来把重心放到用 Three.js 做网页三维。FWA 上只署了他一个人的名字,游戏的开始画面和说明页上则写着 Anderson Mancini 和 Sunag 两个名字。
06档案
- 获奖日期
- 2026-10-03
- 奖项
- The FWA FOTD 2026-10-03
- 站点
- https://www.threejspunk.com/
- 署名
- Anderson Mancini dos Santos,Sunag
- 设计取向
- spatial
- 技术路线
- realtime
- The FWA
- 88 POINTS,DAYS 4。https://thefwa.com/cases/night-drive-racing-game
- 技术栈
- three.js WebGPU,TSL,Rapier,KTX2,Draco,Web Audio,WebSocket
- 资产总计
- 进城前约 32 MB / 101 个文件,其中三维模型 18.5 MB,环境音另有 4 MB 多
- 首屏与帧率
- FCP 568 到 596 ms(加载圆环),开始画面约 12 到 15 秒出现,CLS 0.0013。开车时 60 fps