“part_v3_FINAL.stl 这次又改了哪里?”——每个与 3D 打印、制造打交道的人都听过这句灵魂拷问。独立开发者 projscope 给出的答案是 Meshdiff:把两个 STL/3MF/OBJ 文件拖进浏览器,体素级差异立刻以绿(新增材料)、红(删除材料)两色渲染出来。这个纯客户端工具在 Hacker News 收获 171 分。
解决真实痛点
作者的开发动机非常直白:客户总是反复发来”最终版”文件,而他没有任何快速办法看出到底改了什么。Meshdiff 的工作流因此极度简化——拖入两个文件,浏览器内完成体素 Diff,绿色表示新增材料、红色表示删除材料,并给出体积增量指标。容差可在 0.05–1mm 之间调节,适配从粗看结构变化到精查公差的不同场景。
技术实现
隐私优先是核心卖点:零上传,所有计算都在浏览器内的 Web Worker 中完成,文件不出本机。技术栈为 React + TypeScript + React Three Fiber,Diff 核心是自研的体素引擎。
一个有趣的工程决策是刻意不用 Manifold 或 CGAL 这类成熟几何库。作者的理由是:它们假设干净的 CSG 拓扑,而真实世界的 STL 几乎都是”三角形汤”(triangle soup)——破面、重面、非流形边比比皆是。体素化路线对脏数据天然鲁棒。作者还公开喊话:欢迎用最奇怪的文件来压测它,”真实世界的网格是混沌的,我需要这场压力测试”。
社区反响
embedding-shape 立刻想到新用途:横向对比市面上各种”3D 生成模型”的输出质量;并建议既然纯客户端,不妨提供 CLI 版本接入 CI,自动生成差异报告。progbits、agys 与 twwwt 不约而同地希望三个视口联动旋转;twwwt 还建议高亮”X 轴方向放大/缩小了 x 毫米”这类尺寸变化,以及旋转和平移差异。
dvh 报了两个实际 bug:多 group 的 OBJ 文件只显示第一组;同一文件上传两次时缺少类似 meld 的”正在与自身比较”警告。sota_pop 欣赏 client/local-first 理念,顺带推荐了 BIM 行业的 That Open Company 和 Fovea ArchVision。争议也存在:denpa 质疑作者对 CGAL 的描述(CGAL 并非 CSG 内核且开箱支持 polygon soup);croemer 则引用 HN 指南,提醒用户名不宜与项目同名以免显得纯为推广。
结语
Meshdiff 是”浏览器即平台”的又一例证:Web Worker + Three.js 的组合,让过去需要专业 CAD 软件的工程任务变成分享一个链接的事。若社区的 CLI/CI 集成、联动视图、尺寸高亮等建议落地,它很有机会成为 3D 打印工作流里的 meld。