用 three.js 做了个 3D 看牙工具,作者还是个没毕业的 AI 硕士生

一个开源牙颌 3D 工具,在 Hacker News 上吵起来了

Dental Scope 这两天在 Hacker News 上被顶到 123 分,引了 66 条评论。它干的事挺单纯:在浏览器里用 3D 模型把牙齿、颌骨、神经、血管这些口腔结构摆出来,可以单独摘一颗牙看内部、切剖面、开关不同组织层。作者 Zeruxe 是 AI 与机器学习方向的硕士生,还有大约 8 个月毕业,连他自己都说这东西对做工程的人也有点超出日常范围——因为全程用的是 three.js。

有意思的部分不在工具本身,在它怎么被做出来、以及评论区里打起来的那个架。作者说自己先花了两周做研究和架构规划,正式写代码、进入 GitHub 提交历史的那段,大概只用了 3 天。评论区有人根据 commit 历史推测「3 天就建完了」,作者专门纠正过:实现只是最后那部分,之前两周的调研、选型、想清楚解剖层次怎么组织,都不在提交历史里。

3D 资产的来源交代得很清楚。基础解剖结构来自 BodyParts3D,这是日本 DBCLS 的开源解剖数据集,用 CC BY-SA 2.1 Japan 协议;神经和血管主要参考 Z-Anatomy;牙齿内部结构是作者自己建模,塞进真实牙齿里去拟合。所以不是从某个现成 GLTF 一把梭,而是开放数据加加工加自己建模的混合。渲染和交互层交给 three.js 处理。

评论区那场架

一个用户指着模型问「为什么上颌 38 号牙」,说人总共就 32 颗恒牙,这工具一定是 AI 生成的垃圾。作者回怼:你看到的 38 是 FDI 牙位编号,上右是 11–18、上左 21–28、下左 31–38、下右 41–48,总共还是 32 颗。对方最后回来道歉,承认自己没数牙、也没搞懂 FDI 编号系统,还拿自己早上没喝咖啡调侃了一轮。典型的新工具被误读、然后真人下场把误读纠正掉的回合。

更深那条主线是「clanker」之争——这词现在在 HN 上基本等同于「用 AI 生成的东西」。有人直接说「You built nothing」,你只是把你的 clanker 指向一个数据集,让它搭了个 3D 模型。作者反驳得很硬:AI 帮忙做了实现,但研究、架构、产品决策、调试、验证、review 都是自己干的,说「built nothing」是偷懒。旁边还有人补了一句漂亮的抬杠:「你也是在用你没发明过的英语单词、靠你没发明的输入设备打字。」

这条线值得多看一眼。Dental Scope 确实是被 AI 辅助开发出来的,作者自己也承认,在 HN 上有一篇澄清帖专门怼那些「clanker 做出来的所以是垃圾」的人:凭什么觉得现在的人应该纯手敲所有代码才算有价值?跟用 AI 的人竞争,手写永远追不上人家的产量和速度。

用户侧发生了什么

一个在口腔行业做过技术整合的评论者说,UX 做得很好,能想象牙医拿这个给患者现场解释病情。另一个 ICU 医生在评论区找合作,说自己过去一个月在 med-sim.com 上 vibe-coded 了不少生理和解剖模拟器,想跟作者聊聊。还有人拿它跟 Elsevier 的全人体解剖工具比,那玩意年费大概 60 美元,主要卖给医学生和医生,而 Dental Scope 免费、开源。作者的思路是想看看开源版本能走多远,甚至说理想状态下能做成「解剖界的 Wikipedia」。

当然也有真 bug 被翻出来。有用户指出组织层的显示开关只在头部切面视图下才生效,根管的显示其实是空腔、开了看不到内容;还有人说上颌智齿萌出、下颌智齿没萌出,问是不是可切换的,作者直接承认那是个 bug 会修。这些反馈的密度和作者的响应速度,本身就是开源项目该有的样子。

还差一截的地方

需要提醒两句。这工具目前还处在「能看」到「真好用」之间的位置。评论区至少两个具体交互问题作者都还没处理:牙位的组织层开关交互不够直接,切面按钮会切整个头而不是聚焦的那颗牙。作者说了会改进,但都还没落地。另一个现实问题是数据授权——BodyParts3D 用的是 CC BY-SA 2.1 Japan,下游再分发得满足相应的共享和署名条件,真有人拿它去商用或者做衍生产物,得先把这笔账算清楚。

综合看,Dental Scope 算得上一个「AI 辅助开发」的正面样本:领域足够垂直、资产来源明确、真人把研究和架构想清楚了、被喷也敢下场解释。它没打算靠参数或跑分唬人,就是做个免费的开源工具,让牙医和学生有个地方对着模型看口腔结构。至于「3 天造出来」这个梗,作者自己最清楚——那只是提交历史里的一段,真正花时间的是动手写码之前那两周想清楚的功夫。

工具地址:https://dental-scope.com/
GitHub 仓库:https://github.com/Yoosseph/dental-scope