Hallucinate:一场所有人同时在线的「大型多人网页蹦迪」
文章摘要
Hallucinate 是一个直接在浏览器里运行的「大型多人在线蹦迪」(Massively Multiplayer Online Rave)。打开网页,你就化身为一个可自定义的角色,进入一个所有在线用户共享的 3D 派对空间,伴着音乐和灯光一起摇摆、换装、发消息。作者 stagas 把它当作一个纯粹好玩的实验性 Web 作品来做,并以 MIT 协议在 GitHub 上完全开源。
在技术实现上,作者最初尝试用 Three.js,但发现「太慢了」,于是干脆放弃框架、直接手写着色器(shaders)。他的理由很有 LLM 时代的味道:「框架对人类友好,代价是性能;但现在我们可以直接写出具体代码,那样反而更好。」角色动画系统几乎完全由 GPT 5.5 生成,经过多轮性能优化,作者自己也承认「连我都说不清它是怎么跑起来的」。
网络同步采用 dead-reckoning(航位推算)+ 客户端权威(client authoritative) 的架构:只有关键状态变化(按键、换装、消息等)才会在发生时同步,因此「相当准确也相当快」。作者坦言整个仓库是完全「氛围编程(vibe-coded)」出来的——代码里充斥着未经整理的魔法数字,扁平的文件结构,以及「cool」「jump jump」这样的随性提交信息。值得一提的是,作者还在帖子里透露自己因健康原因失业,正在寻找欧洲时区的 TypeScript 前端开发工作。
HN 评论精华
- AdammadA:分享了自己六七年前做的一个类似的 VR DJ 项目,支持黑胶唱机和远程混音,目前因健康问题搁置,正在寻找开源的途径。
- thenthenthen:提到疫情期间曾尝试做 DJ 之间的远程 back-to-back 混音系统但最终放弃,对电子音乐协作的延迟解决方案很感兴趣;还建议用「1 小节缓冲」之类的技巧,只通过网络传输节拍时序数据来解决同步问题。
- nluken:从物理角度泼了盆冷水——要做到多人同时演奏所需的近乎完美延迟(最多 10ms),在远距离下几乎不可能实现。
- crumpled:指出一种思路是让表演者之间有偏移地协作,而观众听到的是同步后的成品,延迟只存在于表演者与观众之间的「能量」中。
- stagas(作者):公布了 MIT 协议的 GitHub 仓库,坦承因健康原因失业、正在找欧洲时区的 TypeScript 前端工作;并解释自己单干和团队协作时的工作方式不同,整个仓库都是用 LLM「氛围编程」出来的。
- haggy:给出了相当直接的代码审查意见——仓库结构糟糕、提交信息含糊(如「cool」「jump jump」),到处都是魔法数字。
- keepamovin:批评在公开帖子里做代码审查是「毒化了整个讨论串」,认为私下反馈会更有建设性。
- jackb4040:觉得这种扁平的文件层级「离谱」,但也称赞了富有创意的实现,并询问如何为大量角色优化动画。
- stagas(回应动画):确认动画系统由 GPT 5.5 生成并做了优化,为性能从 Three.js 切换到了自定义着色器。
- madanparas / stagas:有人请求加个 README,作者当即拒绝,理由是服务器重启会中断当前活跃连接;nemothekid 随后建议在提交信息里加「[skip ci]」来避免文档更新时触发服务器重启。