9.8 KiB
9.8 KiB
市场调研与竞品分析
目录
- 主流几何引擎概览
- 1.1 CGAL
- 1.2 Open CASCADE (OCCT)
- 1.3 libigl
- 1.4 Clipper2
- 1.5 Manifold
- 1.6 GEOS
- 1.7 其他重要竞品
- 功能矩阵对比
- 市场空白与定位
- 对标策略
- 结论
1. 主流几何引擎概览
1.1 CGAL — 计算几何算法库
| 维度 | 详情 |
|---|---|
| 定位 | 学术界黄金标准,最全面的计算几何算法库 |
| 语言 | C++(核心)+ Python 绑定 |
| 许可证 | GPLv3+ / 商业双许可 |
| 历史 | 1996 年至今,28 年 |
| 规模 | 160+ 个 Package,数百万行代码 |
| 依赖 | Boost, GMP/MPFR |
| 维护方 | GeometryFactory(法国)+ 学术社区 |
核心模块:
- 2D/3D 几何内核(笛卡尔坐标、齐次坐标、球面坐标)
- 2D 排列(Arrangement)、多边形布尔运算
- 3D 多面体、Nef 多面体(精确布尔)
- 网格生成(2D/3D Delaunay、曲面网格)
- 网格处理(简化、重网格化、孔洞填充)
- AABB Tree / KD-Tree 空间索引
- NURBS 曲线曲面
- 凸包、Voronoi 图、Alpha Shapes
- 点集处理(配准、重建、分类)
优势:算法最全、精确计算(GMP)、学术严谨 劣势:GPL 许可证限制商业闭源;API 模板重、编译极慢;学习曲线陡峭
1.2 Open CASCADE Technology (OCCT)
| 维度 | 详情 |
|---|---|
| 定位 | 工业级 CAD 建模内核,全球唯一开源工业 CAD 内核 |
| 语言 | C++ |
| 许可证 | LGPL 2.1 |
| 历史 | 1990 年代至今,30+ 年 |
| 规模 | 数千万行代码 |
| 维护方 | Open Cascade SAS(法国) |
核心模块:
- 基础类:数学工具、内存管理、异常处理
- 建模数据:几何体(点/线/面/体)、拓扑(B-Rep)
- 建模算法:布尔运算、倒角、抽壳、扫掠、放样
- 可视化:OpenGL 渲染
- 数据交换:STEP, IGES, STL, VRML, glTF, OBJ, XDE
- 应用框架:文档管理、撤销/重做
优势:完整 B-Rep 支持、工业级健壮性、STEP/IGES 数据交换、LGPL 友好 劣势:极其庞大(数百万行)、API 老旧(非现代 C++)、编译困难
1.3 libigl — 轻量几何处理库
| 维度 | 详情 |
|---|---|
| 定位 | 学术研究用轻量网格处理库 |
| 语言 | C++(以 Header-only 为主)+ Python 绑定 |
| 许可证 | MPL 2.0(商业友好) |
| 历史 | 2013 年至今 |
| 维护方 | Alec Jacobson(多伦多大学)+ 社区 |
核心功能:
- 网格读写(OBJ, STL, PLY, OFF 等)
- 网格布尔运算(依赖 CGAL 或 Cork)
- 网格简化、平滑、参数化
- 离散微分几何(曲率、测地线、Laplacian)
- 变形(ARAP、双调和、LBS)
- 体素化、Marching Cubes
- 四面体化(依赖 TetGen)
- 可视化(基于 ImGui)
优势:代码简洁、Header-only、教程丰富、MPL 许可证 劣势:功能深度不足、强依赖外部库、不适用工业级精度
1.4 Clipper2 — 2D 多边形裁剪
| 维度 | 详情 |
|---|---|
| 定位 | 2D 多边形布尔运算的事实标准 |
| 语言 | C++, C#, Delphi, Python 绑定 |
| 许可证 | Boost Software License |
| 算法 | Vatti 扫描线算法 |
核心功能:
- 多边形布尔运算(并集、交集、差集、异或)
- 多边形偏移(膨胀/腐蚀)
- 支持任意多边形(含孔洞、自交)
- 整数坐标(64-bit),无浮点精度问题
优势:极快、极其健壮、许可证最自由 劣势:仅 2D、无 3D 能力
1.5 Manifold — 3D 网格布尔
| 维度 | 详情 |
|---|---|
| 定位 | 最快的 3D 网格布尔运算库 |
| 语言 | C++(C 绑定),WASM/JS/Python 绑定 |
| 许可证 | Apache 2.0 |
| 算法 | 基于精确算术 + 鲁棒拓扑 |
核心功能:
- 网格布尔运算(并集、交集、差集)
- 网格修复(水密化)
- 体素化
- 极高性能(比 CGAL/Cork 快 10-100 倍)
优势:极快、鲁棒、Apache 2.0 许可证 劣势:功能单一(仅网格布尔)、无曲线曲面
1.6 GEOS — 开源几何引擎
| 维度 | 详情 |
|---|---|
| 定位 | GIS 领域的 2D 几何引擎 |
| 语言 | C++(核心)+ C API |
| 许可证 | LGPL |
| 应用 | PostGIS、QGIS、Shapely 的底层引擎 |
核心功能:
- OGC 简单要素标准实现
- 2D 空间谓词(包含、相交、相切等)
- 空间操作(缓冲区、并集、交集、凸包)
- WKT/WKB 格式
- 空间索引(STRtree)
优势:GIS 标准、生态成熟、久经考验 劣势:仅 2D、无 CAD 建模能力
1.7 其他重要竞品
| 库 | 定位 | 许可证 | 关键功能 |
|---|---|---|---|
| Eigen | C++ 线性代数 | MPL 2.0 | 矩阵/向量运算、几何变换、数值求解 |
| Cork | 网格布尔 | LGPL | 3D 网格布尔运算 |
| Carve | CSG 引擎 | GPLv2 | 快速 CSG 布尔运算 |
| TetGen | 四面体网格生成 | AGPLv3 | 约束 Delaunay 四面体化 |
| Triangle | 2D 三角剖分 | 自由(非商业) | 约束 Delaunay 三角剖分 |
| PCL | 点云处理 | BSD | 点云滤波、配准、分割、重建 |
| VTK | 可视化 | BSD | 科学可视化、网格处理 |
2. 功能矩阵对比
| 功能领域 | CGAL | OCCT | libigl | Clipper2 | Manifold | GEOS | VDE 目标 |
|---|---|---|---|---|---|---|---|
| 基本几何类型 | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ |
| 2D 布尔运算 | ✅ | ✅ | ❌ | ✅🏆 | ❌ | ✅ | ✅ |
| 3D 网格布尔 | ✅ | ✅ | 🔗CGAL | ❌ | ✅🏆 | ❌ | ✅ |
| B-Rep 布尔 | ❌ | ✅🏆 | ❌ | ❌ | ❌ | ❌ | 🔜 |
| NURBS 曲线 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| NURBS 曲面 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 网格简化 | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ |
| 网格平滑 | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ |
| Delaunay 2D | ✅🏆 | ✅ | 🔗 | ❌ | ❌ | ✅ | ✅ |
| 凸包 2D/3D | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
| BVH 空间索引 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| GJK 碰撞检测 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| 射线相交 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
| STEP 导入 | ❌ | ✅🏆 | ❌ | ❌ | ❌ | ❌ | 🔜 |
| 精确谓词 | ✅🏆 | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
| 现代 C++ (17+) | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | ✅🏆 |
| 许可证 | GPL/商 | LGPL | MPL | Boost | Apache | LGPL | Apache 2.0 |
图例:✅ 支持 🔗 依赖外部 🔜 规划中 ❌ 不支持 🏆 最强
3. 市场空白与定位
3.1 现有引擎的痛点
| 痛点 | 说明 |
|---|---|
| CGAL 许可证 | GPLv3 限制商业闭源使用,商业许可昂贵(€10k+) |
| CGAL 编译 | Boost 依赖 + 模板膨胀 → 编译时间以分钟计 |
| OCCT 体积 | 数百万行代码,学习周期以月计 |
| OCCT API | 非现代 C++,API 设计陈旧 |
| libigl 深度 | 功能浅,依赖链复杂,缺乏自身核心算法 |
| 各库割裂 | 需要曲线 + 需要网格布尔 + 需要碰撞检测 → 分别引入三个库 |
3.2 差异化定位
┌─ 工业深度 ─┐
│ OCCT │
│ │
算法广度 ←── CGAL ──→ │ ★ VDE ★ │ ←── 现代 C++
│ │ Apache 2.0
│ Manifold │
└────────────┘
Clipper2 | libigl
VDE 的核心特征:
- Apache 2.0 许可证 — 商业友好,无 GPL 传染
- 现代 C++17 — 清晰 API,零 Boost 依赖(仅 Eigen)
- 一站式覆盖 — CAD 建模 + 网格处理 + 碰撞检测在同一库中
- 编译友好 — 数分钟级全量编译,非小时级
- 中等规模 — 目标 10-20 万行,不像 CGAL/OCCT 百万行级别
3.3 目标用户
- 自研 CAD/CAM 软件,需要底层几何内核但不想被 GPL 限制
- 机器人/自动驾驶仿真,需要碰撞检测 + 网格处理
- 3D 打印切片软件,需要网格布尔 + 修复
- 游戏引擎编辑器,需要几何操作
4. 对标策略
4.1 V1.0 目标(当前)
对标 CGAL 核心 Package + Clipper2 + Manifold 三者交集:
| 功能 | 对标库 | 当前状态 |
|---|---|---|
| 基本几何 + 变换 | CGAL Kernel | ✅ 已实现 |
| 精确谓词 | CGAL Exact Predicates | ✅ 基础版 |
| 2D Delaunay | CGAL 2D Triangulation | ✅ 已实现 |
| 2D 布尔 | Clipper2 | ✅ S-H 裁剪 |
| BVH 空间索引 | CGAL AABB Tree | ✅ SAH 构建 |
| GJK 碰撞检测 | — | ✅ 已实现 |
| NURBS 曲线 | CGAL NURBS | ✅ 已实现 |
| 半边网格 | CGAL Polyhedron | ✅ 已实现 |
4.2 V1.5 规划
| 功能 | 对标库 | 实现方法 |
|---|---|---|
| 网格布尔 | Manifold | 自研精确拓扑算法 |
| QEM 网格简化 | CGAL Surface Mesh Simplification | 自研 |
| 3D Delaunay | CGAL 3D Triangulation | 自研 |
| Laplacian 平滑 | libigl | 自研 |
4.3 V2.0 愿景
| 功能 | 对标库 |
|---|---|
| B-Rep 布尔 | OCCT Modeling Algorithms |
| 倒角/抽壳 | OCCT |
| STEP 导入 | OCCT Data Exchange |
| 参数化 | libigl |
| 四面体化 | TetGen |
5. 结论
当前 CAD 几何引擎市场呈现"两极分化":一端是 CGAL(学术全面但 GPL)和 OCCT(工业强大但笨重),另一端是各垂直工具(Clipper2、Manifold 等)。缺少一个 Apache 2.0 许可证、现代 C++、一站式覆盖 CAD+Mesh+Collision 的中等规模几何引擎——这正是 ViewDesignEngine 的市场定位。