3.B-rep 是什么
一、B‑rep(Boundary Representation,边界表示法)
大白话:B‑rep 是描述一个实体的外壳边界,用数学精确方程去描述零件,而不是一堆小三角面片。
先举现实例子:一个实心铁球。
- 三角网格思路:几千个小三角形拼出球面,只是视觉近似。
- B‑rep思路:我直接记录:这是一个球体,球心坐标(x,y,z),半径R。 这是精确数学定义,不是近似。
B‑rep描述一个实体,是一层一层的层级结构,由大到小: 体(Solid) → 面(Face) → 环(Wire/Wire‑loop) → 边(Edge) → 顶点(Vertex)
我一层层拆开讲,拿一个方块举例:实心立方体。
-
Solid 体:整个实心方块,这是完整物体。
-
Face 面:方块有6个面,上下左右前后。 每一个Face,会绑定一个曲面数学方程。立方体的面是平面方程;圆角就是圆柱面方程;圆球就是球面方程。
Face 不是面片!它是数学曲面,可以无限大,我们只取其中被圈出来那一小块区域。
-
Wire‑loop 环:用来限定这个面哪一部分属于物体。 比如立方体的顶面,是一个无限大平面,我们需要一个闭合的四边形环,圈出“方块顶面那一块正方形区域”。环就是闭合的边线。
-
Edge 边:环由一条条边拼接而成。立方体一条棱就是Edge。 Edge也存储数学方程:直线、圆弧、椭圆曲线等。一条边会被两个面共享。方块的一条棱,同时属于顶面和前面。这叫拓扑连接关系。
-
Vertex 顶点:边和边相交的交点。方块的8个角点。
B‑rep有两套信息,缺一不可
- 几何信息(Geometry):数学公式。这个面是平面还是圆柱面,半径多少;这条边是直线还是圆弧。
- 拓扑信息(Topology):谁和谁相连。哪个顶点连哪几条边;哪几条边围成一个环;哪些环围成一个面;哪些面围出实心实体。
拓扑记录连接关系,几何记录真实尺寸。 你可以想象:拓扑就是物体的“骨架连接关系”,几何是骨架拉伸出来的真实大小形状。
B‑rep的巨大优势(为什么CAD必须用B‑rep,不用三角网格)
- 完全精确,没有近似误差 一个圆角,存圆柱方程,半径10就是严格10毫米。 三角网格是逼近,永远存在微小误差。 做机械设计,要测量尺寸、做公差、生成机床加工代码,不能有近似误差。三角网格做不到。
- 方便做布尔运算(相加、打孔、倒角) 比如方块打一个圆孔。 B‑rep:拿方块实体,和圆柱实体做布尔减运算。内核修改拓扑和几何,生成新的面、边。直接得到带孔精确模型。
如果只有三角网格模型,给方块打孔会极其麻烦。要切割成千上万三角形,修补破碎面片,还很容易出错,误差大。这就是网格模型不适合做CAD编辑的原因。
B‑rep的天生短板
显卡GPU完全看不懂B‑rep! GPU不认识什么圆柱面、圆角、拓扑环。它只吃三角形。 所以每次绘图窗口刷新: CPU读取B‑rep的面、曲面方程,执行离散三角化:把每个数学曲面切成一大堆小三角形,输出三角网格,传给显卡渲染显示。
问题来了,显卡GPU看不懂B-rep, 那B-rep是怎么起作用的?
GPU看不懂B‑rep,但B‑rep才是工业软件的灵魂
核心一句话:
GPU只管“长什么样,画出来给人看”;B‑rep管“这个零件实际上是什么,尺寸多少,能不能加工,能不能修改”。
显卡只负责可视化,它不做设计、不做计算。如果工业软件全部用三角网格,就只能看模型,不能干活。
我们先打一个生活类比: 想象你要做一个金属杯子。
- B‑rep = 工程图纸:图纸写清楚,杯底半径50mm,杯高120mm,圆角R3。图纸是精确数学定义,钳工拿着图纸可以下料、加工、测量。
- 三角网格 = 一张杯子照片:照片看着和实物一模一样。但是你拿着照片,没法测量杯子真实半径,也没法告诉机床怎么把杯子加工出来。
GPU拿到的就是“照片”(三角面片),只能展示;真正干活全部靠B‑rep(图纸)。
B‑rep到底用来干什么?五大核心用途
1. 精确尺寸与几何查询(测量、公差)
B‑rep保存的是原始数学曲面:平面、圆柱、圆锥、球面、样条曲线。 软件可以直接做数学计算:
- 查询圆孔半径、两个面之间距离、角度;
- 判断两个零件有没有干涉碰撞;
- 计算体积、重量;
如果只有三角网格,你想测一个圆孔半径,只能对着一堆小三角面片做估算,得到的是近似值,存在误差。机械行业不能接受估算。
2. 布尔运算:做模型编辑(打孔、合并、切割)
机械设计最频繁的操作:方块打圆孔、两个零件合并、切掉一块、倒圆角。 B‑rep内核(OCCT这类)做布尔运算: 输入两个实体B‑rep,通过求交计算曲面与曲面相交,生成新的Face、Edge、Vertex,更新拓扑关系,输出全新B‑rep实体。 全程是数学层面求交,得到的依然是精确实体。
对比三角网格: 如果用网格给方块打孔,需要把成千上万个三角形切开,删除一部分,补一堆新三角。不仅计算慢,还极易出现孔洞、裂缝,误差累积。网格适合美术建模,不适合机械反复编辑。
3. 特征建模:倒角、拔模、抽壳
你点一下“倒圆角R5”。 底层不是修改三角面片,而是修改B‑rep几何与拓扑: 找到要倒角的那条Edge,生成一个圆柱面Face,把相邻的面裁剪、拼接,更新整套B‑rep结构。 之后你随时可以回来:把圆角R5改成R8。直接修改参数即可。
如果是三角网格,倒完圆角之后,你想把R5改成R8,几乎做不到,网格已经是一堆面片,没有“圆角”这个概念。网格没有参数历史。
4. 仿真CAE、有限元前置
做应力仿真:零件受力会不会断裂。 仿真软件需要知道:曲面方程、边界、实体拓扑。 它会拿B‑rep实体,再做网格划分(有限元网格,和渲染三角网格还不是一回事)。 仿真的输入源头是B‑rep实体,不是渲染用的显示三角。
5. 输出加工代码 / STEP交换文件
STEP格式文件存储的就是B‑rep完整数据。 你A软件画的零件,保存STEP,发给另一个CAD软件打开,依然可以编辑倒角、打孔,尺寸完全精确。
机床加工:CAM软件读取B‑rep,计算刀具运动轨迹,告诉铣刀怎么走,加工出零件。
STL文件只存三角网格,只能3D打印,不能做精密铣削加工。
B‑rep完整工作流程:B‑rep和GPU怎么配合工作
把完整链路拆开,分清CPU干什么,GPU干什么。
-
用户在软件操作:画方块、打圆孔、倒圆角 CPU侧CAD内核,构建/修改B‑rep数据(Face、Edge、拓扑、曲面方程)。
这一步GPU完全不参与,GPU根本不知道你打了一个圆孔。GPU对此一无所知。
-
需要在窗口上看到这个零件 CPU干活:遍历B‑rep里面每一个Face(每一个曲面),执行离散(三角化)。 把数学圆柱面、球面,切割成一大堆三角形。
这是CPU做的转换工作,把精确实体,生成一份“仅供显示的近似三角网格副本”。 B‑rep本体完全不会被改动。三角网格只是临时生成的“视图替身”。
-
CPU把这批三角形顶点数据,丢给GPU。 GPU只处理三角形,执行光栅化渲染,输出像素画面,屏幕显示零件。
-
你再次编辑模型:比如把圆角R5改成R10
- CPU修改原始B‑rep的圆柱面半径,更新拓扑;
- 旧的显示三角网格全部丢弃作废;
- 再次重新三角化,生成新一批三角形,交给GPU刷新画面。
关键点: ✅ B‑rep是源数据,永久保存; ✅ 三角网格是临时产物,每次视图刷新、模型编辑,重新生成; ✅ GPU自始至终碰不到B‑rep,GPU只能拿到CPU转换输出的三角面片。
常见现象现在就能理解
- 模型逻辑正确,但是屏幕显示破面、闪烁 原始B‑rep实体没有任何错误。只是CPU三角化生成三角面片的时候算坏了,这份临时显示替身出bug。 你重新调整显示精度,软件重新三角化,画面就恢复正常。底层零件数据完好无损。
- 旋转大模型软件卡顿 不是GPU不行,是CPU三角化太慢。复杂零件成千上万个曲面,CPU要把每个曲面切成三角,这一步是CPU重活。
- STEP导入很快,但是打开视图旋转很卡 STEP读进来直接得到完整B‑rep;旋转视图的时候CPU实时做三角化,消耗CPU算力。
总结对比记忆
- B‑rep:源数据,CPU地盘。精确,用于设计、编辑、测量、仿真、加工。GPU看不懂。
- 三角Mesh:显示替身,CPU计算生成,交给GPU地盘。近似,只负责画出来看。
B‑rep负责“零件是什么”;三角网格负责“零件看起来像什么”。
补充一个小白很容易混淆的点
既然显示需要三角网格,为什么不直接保存三角网格,还要B‑rep这么麻烦? 网格只有一堆顶点,丢失了所有业务语义。 网格里面,一堆三角拼出一个圆孔,但是数据里没有记录“这里是圆孔,半径多少”。软件不知道这是孔,只是一堆面片。 B‑rep保留语义:哪里是孔、哪里是圆角、哪里是平面,软件可以理解零件。
如果你继续往下,我可以通俗讲:
- B‑rep布尔运算大概是怎么算的(曲面求交);
- 三角化为什么经常出bug;
- STEP文件内部到底存了哪些东西。

浙公网安备 33010602011771号