在线体验 关于项目
你生成了好几个 3D 模型,留下一个,剩下的就删了。3D 垃圾站就是丢它们的地方:一片在线、共享的废件星系,每件各拴一根缆,按是什么聚在一起——椅子挨着椅子,灯挨着灯。你没选上的,也许正是别人在找的。
丢一件:把 GLB / glTF / FBX / OBJ / STL 文件拖进网页,它出现在你松手的地方,慢慢落下,落到同类旁边——公开展示,署着你的 ID。也可以交给你的 Agent:装上 Junkyard 的 MCP 和 skill,Agent 生成之前先来这里找,找不到合适的才用 Tripo 生成;每次做完 3D 的活,把没选上的 Tripo 模型丢过来,每件都记着出自 Tripo。
需要什么?描述一下,飞过去,捡走——按 CC BY 4.0 使用,署上原主的 ID 就行。接下来,丢掉的也能带来收益:每一次被捡走都已经记在账上,下一步是和丢它的人分账。
网站需用桌面浏览器打开,手机上会提示换到桌面。世界里预置的 1,921 件来自 Objaverse 1.0 公开数据集(原作者在 Sketchfab 按各自的 CC 许可发布),挂在 12 个预置 ID 名下陆续落地;你丢进来的,和它们挂在同一片星系里。
体验要点
- 把 GLB / glTF / FBX / OBJ / STL 文件或打包的文件夹拖进网页:它出现在你松手的地方,慢慢落下,落到同类旁边;落点放一发全服都看得见的烟花,署着你的 ID
- 世界就是索引:每件按语义落进星系里一个永久的格子,有自己的地址(形如 JUNK-3F9K2),可以直接分享;用一句话或一张图搜,镜头飞到命中处,命中的点亮、其余压暗
- 交给你的 Agent:Claude Code、Codex、Cursor 装上 Junkyard 的 MCP 与 skill,生成之前先来这里搜,找不到合适的才用 Tripo 生成;活做完,把项目没用上的件丢回来,每件都记着出自 Tripo
- 捡走:可捡的件给 5 分钟内有效的下载链接和现成的署名文本,按 CC BY 4.0 使用、署上原主的 ID;每一次被捡走都记在账上,下一步是和丢它的人分账
技术解析
Agent 回收循环 · 先搜,再生成,最后丢
同一份 junkyard skill 原样装进 Claude Code、Codex 与 Cursor,背后是一个 Streamable HTTP 的 MCP 服务:服务器名 junkyard,四个动词 junkyard_search / junkyard_fetch / junkyard_dump / junkyard_reclaim,REST 同构。任何 3D 生成之前,Agent 先拿文字(有参考图就带上)调 junkyard_search,返回里的 below_bar 告诉它够不够用——达标的不足三件,才去调 Tripo 生成;Tripo 的下载链接 5 分钟就过期,所以一生成就落盘。
清点只在任务结束时做一次:本轮生成、又没被项目引用的文件,才交给 junkyard_dump。「引用」认四种写法——项目相对路径、文件名、去扩展名的词干、绝对路径,按词边界、不分大小写匹配;用户挑中后挪进项目或改名复制的件按 sha256 认作已用;拿不准的留下不丢。参考图永远不上传,项目标成私有就整步跳过;用户说「撤销最近一次丢弃」,就按会话 junkyard_reclaim 收回。
入库管线 · 任意格式进来,八步变成能检索的件
网页拖进来的和 Agent 丢进来的文件走同一条异步队列:校验 → 内容哈希 → 转换 → 几何指纹去重 → 许可 → 向量 → 标签 → 落位,网页上的坠落横幅就按这八步报进度。转换产出一份归一化的展示副本 glb:Y 轴朝上、最长边归一为 1 个单位、meshopt 压缩、动画保留;超过 15 万三角面的减到 15 万以内,贴图总量超过 16 MiB 的逐级降采样——多材质的大件靠这两步收进来,不降级成点云。
同一个 three.js 渲染器在无头 Chromium 里给每件拍 8 个视角的缩略图,再用 MeshSurfaceSampler 采 2 万点的彩色点云:点云喂 3D 编码器 Uni3D,缩略图喂 SigLIP 2,得到检索用的两路向量。4 视角拼图交给视觉语言模型 Qwen3-VL-Flash 一次调用,从中英对照的受控词表里选出类别、风格、主色,再给至多 5 个双语自由标签;类别 · 风格 · 第一个自由标签连起来,就是这件在所有列表里的名字。原始 prompt 和参考图不进任何公开产物。
语义地图 · 世界就是检索索引
用与线上同一个编码器算出的公开语料向量训练一次 UMAP(三维、非参数),冻结成地图 v1;新件用 transform 推出坐标,已有的件一个都不挪。坐标量化成整数格,格子被占就按确定性螺旋找最近的空格。格子就是永久地址:件收回后留下墓碑占着,永不复用。三维 Hilbert 曲线把格子编成 24 位索引,写成 5 位 Crockford Base32,就是 JUNK-3F9K2 这样的地址——编号相邻,空间上也相邻。
搜索走两路:与 Uni3D 对齐的 EVA02 文本塔(中文先机翻成英文)和多语言的 SigLIP 2(中文直接编码,也能以图搜),各自在 pgvector 的 HNSW 索引里召回,再用 RRF 融合。文字向量和件向量之间隔着模态间隙,所以查询不直接投到地图上,镜头飞向前几名结果的质心;达标结果不足三件时返回 below_bar,网页标「相似度低」,Agent 就知道该去生成了。
世界渲染 · 近两千件同在,三级远近
世界按 16×16 格的瓦片随视口加载,每件按远近有三种样子:近处是完整网格,最多 24 个名额,屏幕上谁大谁先拿,着色器预编译好才露面;中距是缩略图剪影替身,入库时烘进去的底色在着色器里抠成透明,4096² 图集里有 2,601 个槽;远处是实例化的锚点亮点。三种样子之间 300 ms 交叉淡变,两者不透明度之和恒为 1,没有一帧空着。
每件拴在自己的缆上,绕锚点微漂,以 120–180 秒一圈的周期慢慢自转,种子都取件的 id——所有客户端看到的一样,不需要网络同步。有人丢件,落点的烟花经 SSE 推给所有在线的人。帧率持续偏低 3 秒就按四级自动降级(分辨率 → 烟花 → 远景 → 微漂);近景名额只在真掉帧时才收,帧率够用就不为 draw call 数砍网格。


