Ð
Essay · 2026

DGS

几何对齐协议而不是转换器

"对齐"和"转换"是两种根本不同的工程范式。转换器输出一个新对象,然后退场;对齐协议持续维护一组关系,从不退场。DGS 选了后一条路 — 它不在做"更好的 mesh-to-CAD 转换",它在做几何世界的中间件。

本文是《AI 时代的几何工作流:一个三层架构》的支撑文章 ii:中间层

第 一 节

市面上已经有的东西,以及它们的问题

"把 mesh 变成 NURBS"这件事,市面上其实已经有几个方案:

这些工具都共享一个共同的范式假设:mesh 是过程,brep 是结果;mesh 是脏的,brep 是干净的;mesh 一旦被翻译成 brep,就可以丢掉

这个假设在逆向工程的语境里是成立的 — 你扫描一个零件,翻译成 CAD,以后就只用 CAD 那一份。但在 AI 时代,这个假设彻底崩了。因为:

这就要求一个新的范式:mesh 和 brep 必须共存,而且必须保持持续对齐。这个新范式不是"更好的转换",而是"持续的对齐"。

第 二 节

对齐与转换的根本区别

这两个词听起来差不多,但工程含义完全不同:

转换器 / Converter
─────────────────────
INPUT mesh → [convert] → OUTPUT brep
              (mesh 退场)


对齐协议 / Alignment Protocol
─────────────────────
mesh ⇌ [alignment_map] ⇌ brep
       (持续维护对应关系)
       (任何一端的修改都会传播)
       (误差始终被显示和追踪)

转换是一个动作,对齐是一种状态。转换有起点终点,对齐没有。转换的产物是一个新对象,对齐的产物是一组关系。

DGS 选择了对齐这条路。这意味着 DGS 的核心不是"转换算法",而是对应关系的数据结构

第 三 节

核心数据结构:Hybrid Geometry Object

DGS 里的"几何对象"不是一个 mesh,也不是一个 brep,而是一个同时包含三种表示和它们对应关系的复合对象:

{
  "id": "geo_001",
  "name": "HybridObject",

  "mesh": {
    "vertices": [...],
    "faces": [...],
    "normals": [...]
  },

  "brep": {
    "faces": [...],
    "edges": [...],
    "loops": [...],
    "solids": [...]
  },

  "param_graph": {
    "nodes": [...],
    "edges": [...]
  },

  "alignment_map": {
    "mesh_faces": { "mf_001": "brep_face_001", ... },
    "mesh_edges": { "me_001": "brep_edge_003", ... },
    "error": { "max": 0.012, "average": 0.003, "rms": 0.005 }
  },

  "tolerance": 0.001,
  "status": "aligned"
}

这个结构里最重要的字段不是 mesh 也不是 brep,而是 alignment_map。它是 DGS 的"几何翻译词典" — 告诉系统 mesh 的每个面对应 brep 的哪个面、误差是多少。

第 四 节

三种几何表示的分工

DGS 不要求三种表示同时是"完整的" — 它们各有专长,各自负责形体的一个面向:

名字 角色 负责
Layer A Mesh Kernel 感知几何层 自由形体、雕刻、AI 生成、扫描数据
Layer B B-rep / NURBS 结构几何层 精确几何、连续曲面、布尔运算、制造
Layer C Param Graph 规则几何层 参数、约束、生成逻辑、变体派生

这三层各自处理几何的一个方面,DGS 的工作不是把它们合并成一个,而是让它们之间保持持续对齐

第 五 节

核心模块:Alignment Engine

DGS 的核心模块不是建模工具,而是 Alignment Engine — 三种几何之间的对齐引擎。它做四件事:

5 · 1拟合 / Fit

从 mesh 里识别出平面、圆柱、球面、自由曲面区域,然后为每个区域生成对应的 brep。这一步是半自动的 — 算法做出第一版判断,用户可以手动修正"这块应该是平面而不是自由曲面"。

5 · 2维护 / Maintain

当用户在 mesh 上推拉一下,系统不重算整个 brep,只更新对应区域的 brep。这是"局部重建" — 是 DGS 区别于一次性转换器的关键能力。

5 · 3追踪 / Track

持续记录 mesh 和 brep 之间的对应关系。这个记录是双向的 — 不仅 mesh 知道自己对应哪个 brep face,brep face 也知道自己对应哪些 mesh face。这种双向索引是局部重建能成立的前提。

5 · 4显示 / Display

把误差用热力图可视化。这一点很关键 — 误差不应该被消除,误差应该被显示

第 六 节

为什么"误差应该被显示"是核心判断

这是 DGS 在哲学上和工程上最关键的一个判断,值得单独说说。

所有传统的 mesh-to-CAD 工具,都把误差当作"应该被消除的东西" — 拟合得越精确越好,误差越小越好,最好误差为零。这个目标很容易理解,但它有一个根本问题:误差不可能为零

一个 mesh 永远不可能完美等于一组 NURBS 曲面,这是数学决定的。再精确的拟合都有偏差。当工具把"消除误差"作为目标时,实际发生的事情是:

DGS 选择了相反的路径:承认误差永远存在,然后把它显示出来

用户随时能看到"这块区域偏差 0.003mm,那块区域偏差 0.012mm";系统会标出"超过 tolerance 的区域占 3.2%";关键决策 — "这个误差是否可以接受" — 交还给用户。

误差不是 bug,误差是信息。把误差显示出来,就是把决策权还给创作者。
第 七 节

MVP 命题:第一块砖

DGS 是一个大体系,但它的 MVP 必须收敛到一个单一命题:

导入一个由平面、圆柱、自由曲面组成的 mesh,系统自动识别区域,并生成结构化几何近似,显示误差热力图,允许用户手动修正。

这个 MVP 的内部代号叫 DGS Region Fitter。它不解决所有问题,只验证一个问题:自由 mesh 能否被半自动结构化为可编辑 CAD 几何

第一个 demo 的目标场景非常具体:输入一个带圆角的盒子 mesh,输出"6 个平面 + 12 个圆柱倒角"的结构化识别结果,并显示误差热力图

这个场景之所以是好起点:

一两周可以做出来,能快速判断技术路线对不对。

尾 声

它在三层架构里的位置

放回三层架构,DGS 是中间层 — 它的作用是连接入口端的 AI 生成 / 雕刻 mesh 和输出端的 CAD 制造系统,通过持续维护对齐关系,让两端不再脱节。

没有 Rhino Codex(入口层),AI 进不来 DGS;没有 DGS(中间层),AI 生成的形体进不了 CAD;没有 Param Graph(输出层),DGS 维护的对齐关系无法被复现。

三层缺一不可。但 DGS 是其中最难、也最有结构性意义的一层 — 它是真正"让两个原本不能通话的几何世界开始对话"的协议层。

DGS 不是一个工具。DGS 是几何世界的中间件。
— Fin —
2026.05