)
第14章 综合对比与选型指南摘要本章将前 13 章讲过的十三种几何表示B-Rep、CSG、参数曲面、扫掠、隐式/SDF、体素、八叉树、多边形网格、点云、细分曲面、FEA 网格、中轴骨架、神经隐式放回同一张“标尺”下做横向对比。核心结论是没有任何一种表示能通吃所有任务真正的工程能力在于“多表示并存 受控转换”。本章先剖析“表示鸿沟”与中性交换格式的局限再用六维度对比矩阵和转换损失表量化各表示的优劣与转换代价接着给出格式转换与几何修复的实操步骤最后通过 FreeCAD 全链路示例和按领域选型的决策树帮读者建立“按任务选主表示、下游按需转离散表示”的工程直觉。前面 0–13 章我们逐个拆开了B-Rep、CSG、参数曲面、扫掠、隐式/SDF、体素、八叉树、多边形网格、点云、细分曲面、FEA 网格、中轴骨架、神经隐式共十三种几何表示。这一章不讲新方法而是把它们放回同一张“标尺”下回答一个工程里最常被问到、却最难答好的问题我到底该用哪种表示一、背景与动机我们先从一个血泪教训说起。很多初学者学完 B-Rep 之后兴冲冲地想“既然 B-Rep 能精确描述实体那我建模、仿真、打印、渲染全用它不就行了”——结果卡在第一步把零件送入有限元求解器求解器根本读不懂 B-Rep它要的是四面体和六面体单元再想把扫描仪拿到的点云直接做布尔减运算挖个孔发现点云连实体都不是。这就是所谓**“单一表示通吃必败”**。每一种表示都只在某一类任务上最强B-Rep 强在精确与可编辑网格强在渲染与打印体素强在 CT/MRI 这类原生体数据点云则是扫描的天然产出。没有任何一种表示能同时把精确制造、实时渲染、科学体数据、逆向重建都做到出色。把这些能力割裂开来看还不够真正的麻烦在于**“表示鸿沟”B-Rep 和网格之间、点云和 B-Rep 之间、体素和曲面之间隔着一道信息格式墙。同一只齿轮在 CAD 里是边界拓扑的精确实体在打印机里变成三角面片在仿真器里变成网格单元在扫描仪里是一堆带噪声的点。它们之间的每一次搬运都可能丢东西**。所以学完各种表示之后我们急需一个综合视角一张能横向比较它们的矩阵、一张讲清每次转换会丢什么的账本、一套工程落地的共性难题清单以及一棵按领域选型的决策树。先讲清楚“问题大到什么程度”再给“方法怎么用”——这就是本章的动机。二、核心概念与原理我们用三个核心概念把上面的痛点串起来。1. 表示鸿沟Representation Gap表示鸿沟指的是不同几何表示在存储了什么信息上根本不对齐。B-Rep 存的是解析曲面 裁剪环 有向拓扑网格只存顶点和三角形把解析边界离散成了近似点云连连接关系都没了只剩一堆孤立采样点。把高信息密度的表示往低信息密度的表示转比如 B-Rep → STL信息是单向流失的反过来补不回来。类比这就像把一本排版精美的矢量 PDF可无损缩放、文字可选导出成一张低分辨率位图——你永远无法从位图还原出这段文字原本是 Times New Roman 12 号。从精确到近似是熵增过程不可逆这正是STL 不能无损转回实体的根本原因详见 01-BRep边界表示.md。2. 中性交换格式的作用既然各表示各说各话工程上靠中性交换格式来架桥。但它们只是“尽量多保住一部分信息”绝非万能STEPAP203/214/242保住 B-Rep 的几何与拓扑但基本丢掉特征历史到手是个“哑模型”STL只存三角面片坐标 法向连单位都常丢却被滥用于一切glTF 2.0是渲染导向的网格 PBR 标准CAD 不友好OpenVDB交换稀疏体素 / SDF 场不保实体OpenSCAD .scad存的是可重算的 CSG 文本脚本。核心结论没有任何单一格式能无损贯通设计—仿真—制造—渲染—扫描全链路。为了把上面这点落地成该用谁我们补一张速查清单即一图读懂该用谁要精确制造 / 标注尺寸→ B-Rep / 参数曲面 / 特征历史CAD 主线要快速概念造型、任意拓扑光滑→ 细分曲面影视/ NURBS工业要仿真→ FEA 网格由 B-Rep 生成要实时渲染 / 游戏 / 扫描→ 多边形网格影视高保真 → 细分 位移要布尔 / 融合 / 柔体 / CNC 粗算→ 隐式 SDF / VDB无缝合之痛要医学 / 科学体数据→ 体素 / 八叉树CT/MRI 原生要机器人 / 路径 / 特征识别→ 中轴 / 骨架作为索引层要照片级新视角 / 重建→ NeRF / 3DGS要逆向工程→ 点云 →泊松重建→ 网格 →拟合→ B-Rep。实务中几乎从不用单一表示CAD 主模型是 B-Rep 特征树出图/仿真转网格打印转网格/体素渲染转网格扫描进点云。3. 容差与鲁棒性工程落地的最大拦路虎即使表示选对了把算法跑通还得过容差和鲁棒谓词这两关。浮点坐标永远有误差——两个本该重合的点算出来可能差1e-9两条本该相接的边可能因为舍入而裂开一条缝。容差就是内核用来判定“这点算不算重合、这两边算不算相接”的阈值。鲁棒几何谓词则保证“点在多边形内”“线段是否相交”这类判定符号绝对正确否则布尔运算和网格生成会灾难性失败。类比容差像一把“差不多就行”的尺子——没有它内核会因小数点后第 9 位的偏差而断定“这两个点没连上”整条装配链崩掉。隐式/SDF 布尔之所以在工程粗算里大受欢迎正是因为它用max/min合并形状从不崩只是近似见 05-隐式曲面与 SDF.md。一句话真正的工程能力 多种表示的转换与协同而不是会用一个表示。三、关键公式与对比矩阵1. 六维度对比矩阵定量结论把十三种表示放进同一张标尺——沿用 Requicha 六准则补一列“拓扑/完备性”。它相当于这一章的“核心公式”一眼看清谁擅长什么方法精度存储效率计算复杂度可编辑性交互性拓扑/完备性B-Rep高解析中边界紧凑布尔O(nlogn)O(n\log n)O(nlogn)~高极高高完备非流形需扩展CSG高高仅树求值开销大高历史中需重算完备正则布尔封闭参数曲面高中控制点节点求值O(p2)O(p^2)O(p2)高高单片拼合靠裁剪扫掠/特征高高过程重算依赖历史极高高完备依赖基元隐式/SDF高解析可精确中函数求交需迭代低中梯度可微完备等值面体素低分辨率限低O(n3)O(n^3)O(n3)低规则访问极低高体绘制近似拓扑靠阈值八叉树/BSP/VDB中分辨率限高稀疏中树访问低高近似自适应多边形网格中离散中顶点面低局部中高离散需水密点云中采样中点低索引后极低中仅采样无拓扑细分曲面中逼近极限高控制网格中细分级中高任意拓扑水密FEA 网格中离散低单元密高求解迭代极低低仅仿真用中轴/骨架高MAT 完备低常冗余高提取难低低完备但敏感神经/NeRF/3DGS中拟合高参数高训练/低3DGS 渲染极低中3DGS 实时近似无保证✅ 强 / △ 弱或需转换 / ❌ 基本不支持精确指是否可无误差表达解析几何。2. 表示转换损失表3. 工程案例一只 NURBS 杯子走完「B-Rep → STL → 点云 → 泊松重建」全链路把上面的损失表落到一只具体的杯子上。这只杯子由 NURBS 曲面构成杯身是旋转曲面、杯口是裁剪环我们一步步把它从高保真的 B-Rep 一路降级到离散表示每一步都用代码演示并标注这一步丢了什么。第 1 步B-Rep → STLtessellation弦差控制用 OpenCASCADEpythonocc-core把 NURBS 杯体分面成三角网格并导出 STLfromOCC.Core.BRepPrimAPIimportBRepPrimAPI_MakeCylinderfromOCC.Core.BRepMeshimportBRepMesh_IncrementalMeshfromOCC.Core.StlAPIimportStlAPI_Writer# 用圆柱近似杯身真实场景是旋转 NURBS 曲面这里用圆柱演示分面cupBRepPrimAPI_MakeCylinder(radius30.0,height80.0).Shape()# 关键参数LinDef 即弦差deviation单位 mm# 弦差越小分面越密、越逼近原曲面但 STL 文件越大meshBRepMesh_IncrementalMesh(cup,LinDef0.1,AngDef0.5)mesh.Perform()# 导出 STL只存三角面片坐标法向writerStlAPI_Writer()writer.Write(cup,/path/to/cup.stl)这一步丢了什么解析曲面NURBS 的控制点、节点向量、权重被离散成平面三角片裁剪环的精确边界变成折线特征历史、单位、参数化信息全部丢失。弦差 0.1 mm 意味着曲面与三角片之间的最大距离被限制在 0.1 mm 内——这是近似不可逆。第 2 步STL 网格 → 点云采样用 Open3D 读入 STL在网格表面做泊松圆盘采样得到点云importopen3daso3d# 读入 STL 网格mesho3d.io.read_triangle_mesh(/path/to/cup.stl)mesh.compute_vertex_normals()# 关键参数number_of_points 控制采样密度# 采样越密越能保留细节但点云越大、后续重建越慢pcdmesh.sample_points_poisson_disk(number_of_points200_000,init_factor5# 初始采样密度倍数越大分布越均匀)# 保存点云此时只有 xyz法向会在下一步重估o3d.io.write_point_cloud(/path/to/cup_points.ply,pcd)这一步丢了什么三角形之间的**连接关系拓扑**全部丢失只剩一堆孤立采样点原始面法向被丢弃后续必须重估采样本身是随机过程会引入轻微的位置噪声。第 3 步点云 → 网格泊松重建对点云估计法向并做泊松重建得到一张新的三角网格importopen3daso3d# 读取点云仅含 xyz无法向pcdo3d.io.read_point_cloud(/path/to/cup_points.ply)# 预处理估计法向。knn 取邻域点数越大越平滑# 法向必须一致朝外否则泊松重建会出破面/翻转pcd.estimate_normals(search_paramo3d.geometry.KDTreeSearchParamKNN(knn30))pcd.orient_normals_consistent_tangent_plane(k30)# 统一法向朝向# 泊松重建depth 越大细节越多但越吃内存、越易过拟合噪声mesh,densitieso3d.geometry.TriangleMesh.create_from_point_cloud_poisson(pcd,depth9)# 裁剪低密度区域噪声/边缘伪影保留高置信表面bboxpcd.get_axis_aligned_bounding_box()meshmesh.crop(bbox)o3d.io.write_triangle_mesh(/path/to/cup_reconstructed.ply,mesh)这一步丢了什么重建出的网格是全新的拓扑与原 B-Rep 的拓扑毫无关系——杯口可能被填平、杯底可能多出伪影曲面是隐式等值面逼近不是解析曲面精度受depth限制孔洞、噪声、法向不一致都会在这里放大成几何错误。全链路损失小结阶段表示丢失的信息能否恢复起点B-RepNURBS——B-Rep → STL三角网格解析曲面、裁剪边界、特征历史、单位否近似STL → 点云点云连接关系拓扑、面法向否点云 → 网格重建网格原拓扑、解析精度新增伪影/孔洞否病态逆问题想把这杯子的重建网格变回可编辑的 B-Rep难点卡在第 3 步之后需要把离散三角面拟合成解析曲面圆柱面、旋转面并重建裁剪环与拓扑——这是典型的逆向工程每一步都是近似且结果不唯一详见 09-点云.md。每次表示之间的搬家都记一笔账——是否无损、损失什么转换方向是否无损损失/难点B-Rep → 网格tessellation分面近似精度由**弦差deviation**控制丢历史/参数/裁剪边界网格 → 点云采样近似丢连接关系法向需重估点云 → 网格表面重建泊松/ball-pivoting近似孔洞、噪声、拓扑错误需法向一致B-Rep/网格 → 体素voxelization近似分辨率定精度内存爆炸O(n3)O(n^3)O(n3)体素 → 网格Marching Cubes近似阶梯/二义性/拓扑伪影SDF → 网格MC / 投影近似同体素但 SDF 梯度可光滑CSG → B-Rep边界求值boundary evaluation精确*计算昂贵需稳健布尔B-Rep → CSG反向工程极难/通常不可行实体→构造树是病态逆问题不唯一网格 → B-Rep逆向/拟合近似把离散面拼回解析面极难需曲面拟合* CSG→B-Rep 在正则布尔下对正则集是精确的但对带裁剪/非正则输入会退化。注意只有 CSG→B-Rep 这一条接近无损其余全是近似。4. 关键参数容差OCCT 的Precision::Confusion默认值为1×10−71\times10^{-7}1×10−7单位相关是“两点视为重合”的阈值每个TopoDS_Shape还自带Tolerance字段顶点/边/面各有不同由操作历史累积经验法则建模全程保持单一单位与量纲避免跨尺度纳米级特征 米级装配压垮容差。四、具体实现步骤理论落到手上的工具。下面分两部分格式转换实操与几何修复实操。(a) 格式转换实操B-Rep → 网格tessellation在 FreeCAD 里用Mesh工作台或Import导出 STL/3MF关键是控制弦差deviation——弦差越小面越多越精确但文件越大。对应TopoDS_Shape的分面见 01-BRep 边界表示.md 与 08-多边形网格.md。用 FreeCAD 的 Python API 控制弦差导出 STLimportMeshimportMeshPart# 从活动文档取一个 B-Rep 实体TopoDS_ShapeshapeApp.ActiveDocument.Pad.Shape# 关键参数LinearDeflection 即弦差deviation单位 mm# 越小分面越密、越逼近原曲面但文件越大、导出越慢meshMeshPart.meshFromShape(Shapeshape,LinearDeflection0.1,# 弦差 0.1mm控制曲面逼近精度AngularDeflection0.5,# 角偏差弧度控制相邻面法向夹角上限RelativeFalse# False绝对弦差True按包围盒比例)# 导出 STLSTL 只存三角面片坐标法向单位与精度信息会丢失Mesh.export([mesh],/path/to/output.stl)网格 → 点云用Points模块对网格做采样采样后需重估法向原始面法向丢弃。Open3D 的sample_points_poisson_disk也是常用选择。点云 → 网格泊松重建ReverseEngineering模块或 Open3D / CGAL 的 Poisson Reconstruction前提是点云法向已一致否则重建出破面。孔洞与噪声是主要敌人。用 Open3D 实现重建并加法向估计预处理importopen3daso3d# 读取点云仅含 xyz无法向pcdo3d.io.read_point_cloud(/path/to/scan.ply)# 预处理估计法向。knn 取邻域点数越大越平滑# 法向必须一致朝外否则泊松重建会出破面/翻转pcd.estimate_normals(search_paramo3d.geometry.KDTreeSearchParamKNN(knn30))pcd.orient_normals_consistent_tangent_plane(k30)# 统一法向朝向# 泊松重建depth 越大细节越多但越吃内存、越易过拟合噪声mesh,densitieso3d.geometry.TriangleMesh.create_from_point_cloud_poisson(pcd,depth9)# 裁剪低密度区域噪声/边缘伪影保留高置信表面bboxpcd.get_axis_aligned_bounding_box()meshmesh.crop(bbox)o3d.io.write_triangle_mesh(/path/to/reconstructed.ply,mesh)B-Rep/网格 → 体素MeshPart模块的体素化工具或 OpenVDB分辨率决定精度注意O(n3)O(n^3)O(n3)内存——大场景优先用八叉树/VDB 稀疏表示见 06-体素表示.md、07-层次空间分解.md。体素/SDF → 网格Marching Cubes 提取等值面SDF 梯度可用来光滑结果。CSG → B-Rep 边界求值FreeCAD 的Part工作台就是把 CSG 语义的建模树逐节点用 OCCT 布尔求值缓存为 B-Rep。OpenSCAD 脚本.scad亦可导入求值。这是少数“接近无损”的转换但计算昂贵、依赖稳健布尔布尔细节见 02-CSG 构造实体几何.md。(b) 几何修复实操拿到“坏体”自交、裂缝、小边、法向乱时按下面步骤走检测问题用包围盒加速 精确求交检测自相交检查水密性找裂缝/重叠用边长/面积阈值找小边/小面统计边被几面共享判断非流形。缝合sewing裂缝用Part::TopoShape.sewShape配合放宽容差把相邻边缝起来恢复水密。去重 / 移除分裂removeSplitter合并重复或共享的子形状消除冗余几何。法向一致Mesh模块用MeshKernel做一致性定向扩散/最小生成树修掉渲染黑面。容差愈合Part::TopoShape.fix收紧/放松各子形状 tolerance把“差一点点没接上”的边界愈合。成实体makeSolids把封闭壳封成实体供后续布尔与仿真使用。去特征对 FEA 前的微小特征sliver、退化面做defeature合并/删除避免雅可比退化。整条修复链的本质就是和“容差”反复谈判——不是几何错了是它在容差临界线上。五、实际应用示例示例 1FreeCAD 里走通“草图 → B-Rep 实体 → 网格STL → FEA 网格”完整链路对应到具体模块与文件Sketcher画出带约束的 2D 轮廓几何约束求解器确定每条曲线参数。PartDesign::Body把草图作为特征树的第一个节点。PartDesign::Feature如拉伸Pad调用Part/App/FeatureExtrusion→ OCCTBRepPrimAPI_MakePrism生成TopoDS_Shape存于Part::TopoShape。布尔相加Fuse走Part特征 → OCCTBRepAlgoAPI_Fuse结果仍是TopoDS_Shape。出图/打印Import或Mesh模块把TopoDS_Shape分面tessellation成Mesh网格导出 STL/3MF。这步是“B-Rep → 网格”的转换弦差控制精度。仿真Fem模块读取 B-Rep调用 gmsh/MMG 生成Fem/femmesh的 FEA 网格详见 11-有限元网格与IGA.md。这条链完美对应第 15 章的“B-Rep → 网格 → FEA 网格”转换且全程以OCCT 的TopoDS_Shape为唯一精确真相源离散表示只是它的派生产物。示例 2按决策树为三个对象选表示我们套用第 17 章的决策树给三个典型对象定主表示 辅助表示。先放出这棵决策树按任务出发它就是选型的总开关你要做什么 ├─ 机械设计 / 可制造零件 / 需要标注尺寸 │ └─► B-RepOCCT/FreeCAD Part 特征-历史树PartDesign ├─ 仿真 / 有限元 / CFD │ └─► 从 B-Rep 生成 FEA 网格Tet/HexFem 模块 gmsh/MMG ├─ 3D 打印 │ └─► 网格STL/3MF→ 体素/SDF 做支撑与空心化 ├─ 游戏 / 实时渲染 │ └─► 多边形网格glTF LOD影视高保真用细分曲面 位移 ├─ 影视 / 照片级新视角 / 实景数字化 │ └─► NeRF / 3DGS实时/ 传统网格重建 ├─ 医学 / 科学体数据CT/MRI │ └─► 体素 / 八叉树原生 等值面提取分割后转网格 ├─ 逆向工程 / 扫描 │ └─► 点云Points→ 泊松重建网格 → 拟合 B-RepReverseEngineering ├─ 机器人 / 路径 / 加工通道 │ └─► 中轴/骨架 体素膨胀 └─ 生成式 / AI 3D └─► 神经隐式 / 3DGS数据表示非制造我们套用这棵决策树给三个典型对象定主表示 辅助表示机械零件要标注尺寸、可制造决策树命中“机械设计 / 可制造零件 / 需要标注尺寸” →主表示B-RepPartPartDesign特征树。辅助曲面造型加 NURBSSurface模块出图/仿真转网格与 FEA 网格。忌用纯网格或点云作主链路无法精确标注与编辑。游戏角色实时渲染、有机形态决策树命中“游戏 / 实时渲染与概念艺术 / 角色 / 有机形态” →主表示多边形网格glTF LOD离线高保真用细分曲面 位移作为辅助建模表示。忌用B-Rep 作主链路太重实时跑不动。医学 CT 数据体数据、要分割与可视化决策树命中“医学 / 科学体数据CT/MRI” →主表示体素 / 八叉树原生 CT 数据经等值面提取Marching Cubes得到网格。辅助提取后的网格做可视化必要时拟合 B-Rep。忌用CSG 作主表示不贴合真实解剖体数据。可以看到三者主表示截然不同却都遵循同一原则主链路选精确可编辑的或可原生承载的表示下游再按需转离散表示。六、小结与要点记住什么没有“通吃”的单一表示工程能力 多表示并存 受控转换。转换大多是近似且不可逆的只有 CSG→B-Rep 接近无损信息总是从高保真流向低保真。容差Precision::Confusion≈1e−71e^{-7}1e−7与鲁棒谓词是算法不崩的地基。各方法的最佳搭档B-Rep 的搭档是特征树可编辑历史与下游网格/FEA 网格网格的搭档是glTF/STL与LOD体素/八叉树的搭档是Marching Cubes与OpenVDB点云的搭档是泊松重建→网格→拟合B-Rep见 09-点云.md。常见坑用 STL 当“万能格式”跨设计—仿真—制造结果丢单位、丢拓扑、丢精度。跨尺度建模纳米 米压垮容差布尔直接崩。把非水密网格直接丢进 FEA 求解器雅可比退化报错。试图“点云 → B-Rep”一步到位忽视这是病态逆问题。何时该用混合架构当系统要同时服务“精确制造 实时渲染 科学体数据 逆向更新”中的两项以上时必须上混合架构如数字孪生B-Rep 主 网格/点云更新 隐式融合。试图一个表示通吃必败。分领域首选表示速查表选型时直接查领域首选主辅助忌用主链路机械 CADB-Rep 特征树NURBS 曲面纯网格、点云工业曲面A 级NURBS 贝塞尔细分过渡SDF不精确CAM / 数控B-Rep驱动刀路网格验证—FEA / 多物理FEA 网格由 B-Rep 来IGA高端点云3D 打印网格水密SDF/体素支撑非水密 B-Rep游戏多边形网格细分离线B-Rep太重影视细分 位移神经隐式资产纯 B-Rep医学影像体素 / 八叉树网格可视化CSG逆向工程点云 → 网格B-Rep拟合直接 B-Rep机器人体素 / 中轴网格NeRF不可解释数字孪生混合B-Rep 主 网格/点云更新隐式融合单一表示练习与思考转换损失推演给定一只由 NURBS 曲面构成的杯子依次经过B-Rep → STL弦差 0.1mm→ 点云采样 → 泊松重建网格每一步分别丢失了哪些信息若想把它变回可编辑的 B-Rep难点卡在哪一跳参考答案B-Rep → STL解析曲面NURBS 控制点、节点向量、权重被离散成平面三角片裁剪环的精确边界变成折线特征历史、单位、参数化信息全部丢失。弦差 0.1mm 只是把曲面与三角片的最大距离限制在 0.1mm 内属于近似且不可逆。STL → 点云三角形之间的**连接关系拓扑**全部丢失只剩孤立采样点原始面法向被丢弃后续必须重估采样是随机过程会引入轻微位置噪声。点云 → 泊松重建网格重建出的是全新拓扑与原 B-Rep 拓扑无关——杯口可能被填平、杯底可能多出伪影曲面是隐式等值面逼近而非解析曲面精度受depth限制孔洞、噪声、法向不一致都会放大成几何错误。难点卡在「重建网格 → B-Rep 拟合」这一步需要把离散三角面拟合成解析曲面圆柱面、旋转面并重建裁剪环与有向拓扑。这是典型的逆向工程每一步都是近似且结果不唯一——同一张网格可拟合出无数种解析曲面组合属于病态逆问题详见 09-点云.md。容差实战OCCT 默认Precision::Confusion 1e-7米。若你要建模一个 2 纳米的 MEMS 结构与一个 2 米的机架在同一个装配里会出现什么问题给出至少两种缓解策略。参考答案问题在于跨尺度压垮容差Precision::Confusion 1e-7米 100 纳米而 MEMS 特征只有 2 纳米——比容差阈值还小两个数量级。内核会把 MEMS 上本该区分开的点、边、面全部判定为“重合”导致布尔运算、缝合、求交灾难性失败同时 2 米机架的坐标量级10010^0100与 2 纳米特征10−910^{-9}10−9相差 9 个数量级浮点舍入误差也会淹没微小特征。缓解策略至少两种分装配体建模把 MEMS 与机架拆成两个独立装配体各自在局部坐标系下建模MEMS 用纳米/微米单位机架用米单位最后在装配层做轻量级定位与干涉检查避免在同一个TopoDS_Shape里混入跨尺度几何。局部坐标系缩放对 MEMS 单独做坐标缩放如整体放大10610^6106倍到毫米级建模完成布尔/缝合后再缩放回纳米级或对每个子形状单独设置Tolerance让微小特征使用远小于全局Precision::Confusion的局部容差。使用大容差内核改用对尺度不敏感的内核如隐式 SDF/VDB 布尔用max/min合并形状从不崩或为不同尺度分别维护独立的容差上下文避免单一全局阈值被跨尺度压垮。混合架构设计为一个先 CT 扫描骨骼、再 3D 打印定制植入物的系统设计表示流水线标明每一段的主/辅表示与转换工具并说明在哪一步做几何修复最关键。参考答案完整流水线如下主表示加粗辅助表示与转换工具随段标注CT 扫描 → 体素 / 八叉树主表示CT/MRI 原生产出就是体数据直接以体素 / 八叉树承载稀疏场景用 OpenVDB 控制O(n3)O(n^3)O(n3)内存。先做阈值分割/区域生长把骨骼从软组织里分离出来得到“骨骼1、其余0”的体素场。体素 / 八叉树 → 网格Marching Cubes用Marching Cubes提取等值面得到一张三角网格。这一步是近似会引入阶梯、二义性与拓扑伪影见 06-体素表示.md。网格修复去噪、补洞、水密化对 MC 网格做去噪拉普拉斯/双边平滑、补洞hole filling、水密化缝合裂缝、统一法向、去非流形边得到一张干净、封闭、可打印的网格。网格 → 拟合 B-Rep辅助表示把修复后的网格拟合成解析曲面平面、圆柱、球、NURBS 自由曲面重建裁剪环与有向拓扑得到可编辑的B-Rep作为辅助表示用于后续 CAD 化设计如加螺纹孔、贴合面。B-Rep / 网格 → 3D 打印网格STL/3MF最终以**网格STL/3MF**交付给切片器若走 B-Rep 路线则用弦差deviation控制分面精度再导出 STL保证打印表面质量。几何修复最关键的一步在「体素 → 网格」之后、拟合 B-Rep 之前因为 Marching Cubes 提取出的网格往往带有孔洞、噪声、非流形边和法向不一致这些拓扑错误和噪声会直接污染后续曲面拟合——拟合算法会把伪影当成真实几何去逼近导致拟合出的解析曲面偏离真实骨骼表面甚至产生自交。只有先把网格修复成干净、水密、流形良好的状态拟合 B-Rep 和最终 3D 打印才有可靠输入。这也是整条链上“信息质量”的闸门前面体素化丢的是分辨率精度而这一步丢的是拓扑正确性一旦带病进入拟合后面每一步都会放大错误。想深入某个表示可回看兄弟章节布尔运算细节见 01-BRep边界表示.md网格内核见 08-多边形网格.md隐式/SDF 见 05-隐式曲面与SDF.md点云重建见 09-点云.mdFEA 网格见 11-有限元网格与IGA.md。