emollick/ai-portals
多媒体与设计在浏览器里自动穿越 471 个程序化生成的 3D 世界,每个世界尽头有一道通往下一站的传送门,源码随项目公开。
项目介绍
Portals 是一个浏览器里的 3D 漫游体验:镜头自动飞行,依次穿过一个个生成的世界,每个世界尽头有一道传送门,穿过它进入下一个世界。线上站点目前收录 471 个世界,涵盖荒野、城市、海洋、室内、天空、外星与史前场景,也有致敬葛饰北斋、埃舍尔等艺术家或取材自书籍、影视的原创地点。仓库保存的是 2026 年 11 月 9 日发布版 s8f 的站点代码。可以先打开线上站点体验,按 S 开启声音。
所有内容都在浏览器里生成:不加载任何 3D 模型、贴图或音频文件,几何体与纹理在上一世界仍在画面时构建,声音由 Web Audio 实时合成。画面中同时运行两个世界,因此穿过传送门没有切换或淡入淡出。站点是纯静态构建,没有后端、账号或追踪,看过的世界、收藏和设置都保存在浏览器本地。
它适合想获得一段基本无需操作的沉浸式视听体验的读者,也适合想研究大型程序化生成 three.js 项目的开发者。
快速使用
本地运行只需要 Node.js 18 或更高版本(Node)。克隆仓库并启动开发服务器:
git clone https://github.com/emollick/ai-portals.git
cd ai-portals
npm start
打开 http://localhost:8000 即可浏览。这条路径不需要安装依赖或预先构建。不过从源码运行时,画廊无法标记哪些世界是新的,也没有描述页面,控制台会提示缺少只有构建才会生成的 atlas.json。
要生成可部署的静态包:
npm install
npm run build
npm run preview
产物位于 dist,预览地址是 http://localhost:8001。构建会用 esbuild 压缩项目脚本,并补充只在部署站点上存在的部分:每个世界和旅程的小页面(用于分享链接预览)、列出全部世界及描述的页面、画廊的新世界记录以及托管配置。用 npm run build -- --stamp s8f 重新构建,在 2026 年 11 月 9 日可以逐字节复现线上站点,但站点此后可能已更新。
操作方式
飞行过程不需要操控。键盘操作包括:空格暂停、右方向键加速前往下一道门、S 开关声音、G 切换到平稳镜头、H 收藏当前世界、P 保存图片、I 打开画廊、O 打开选项、F 全屏。移动鼠标会在底部显示操作栏,其中还有调节节奏和「尘世—奇异」比例的滑块。
使用约束
建议使用独立显卡;手机或较老的笔记本会以较低画质运行。画质设为 Auto 时,站点会根据显卡估计画质等级,并动态调整渲染分辨率以保持流畅。仓库采用 CC BY-NC-SA 4.0 许可,复用需非商业、署名并以相同许可分享。部分借用的着色器函数另有条款,README 说明发布前检查发现实际借用的代码多于 THIRD-PARTY-NOTICES.txt 的记录,且 README 与通知文件在两处表述不一致。471 个世界质量参差,由充当评审的智能体评为 1 到 5 档,其中 40 个在第 5 档、28 个在第 1 档。
扩展世界
一个世界就是 src/worlds 下的一个文件,默认导出对象包含 build 函数,返回 three.js 场景、相机路径和时长,并在 src/worlds/index.js 中登记标题、类别和说明。多数世界把主要场景放在 src/parts 下的另一个文件,共享 kit 提供天空、水体、地形、植物、动物、建筑和室内等构件。引擎在穿越后约一秒挑选下一个世界,在帧间分批构建,并在展示前预热着色器。
HotRepo 点评
该项目于 2026 年 11 月 10 日出现在 HotRepo 的 JavaScript 新项目榜上,记录的一小时窗口内新增 4 Star,累计 106 Star、14 Fork。仅凭这一次短时快照不足以判断走势。更值得关注的是它的结构:这是一个由 AI 智能体编写、直接公开的大型 three.js 项目,README 连构建流程和自身署名缺口都写了出来,因此仓库既是一个可玩的站点,也是一份关于它如何被组装的记录。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。