文章目录
- 1.GPU 和CPU 的优势对比
- 2.GPU 不太适合的矢量路径算法(以便对比理解)
- 3. 总结表格
1.GPU 和CPU 的优势对比
GPU 的核心优势在于大规模并行和高吞吐量,而 CPU 的优势在于低延迟和复杂分支预测。在矢量路径运算中,GPU 特别适合以下数据独立、计算密集、可高度并行的算法环节:
线段与多边形的光栅化
- 算法:扫描线转换、边缘填充、模板(Stencil)填充。
- 为什么适合:每个像素或每个片段(Fragment)的填充计算相互独立。GPU 可以同时处理成千上万个像素,判断它们是否位于矢量路径内部(如使用非零环绕规则或奇偶规则)。
- 典型应用:GPU 加速的 2D 图形库(如 Pathfinder、Vello、SVG 渲染器的 GPU 后端)。
曲线(贝塞尔曲线)的细分与平坦化
- 算法:递归细分、前向差分(Forward Differencing)、自适应细分。
- 为什么适合:每条曲线段可以分配给不同的线程进行独立细分,将其转换为近似直线的多边形网格。现代 GPU 中的 Tessellation 着色器正是为此设计。
- 注意:适应性细分需要避免分支发散(Warp Divergence),通常采用统一深度的细分策略。
线段求交与布尔运算
- 算法:批量线段交点检测(如用于路径合并、裁剪、阴影计算)。
- 为什么适合:使用空间划分(如网格、BVH)粗筛后,大量候选线段对之间的交点判断可以并行。每个线程处理一对或一个小区块内的所有线段。
- 局限:高度复杂的求交(如带大量自交的复杂路径)通常需要 CPU 做辅助结构构建(如平面扫描状态机),因为 GPU 难以高效维护排序后的动态结构。
路径距离场(SDF)计算
- 算法:从矢量路径到规则网格上每个点的最近距离计算。
- 为什么适合:每个网格点的距离计算完全独立。GPU 可以暴力遍历所有路径段(对百万级网格点 x 千级段数非常高效),或利用 Jump Flooding 算法并行扩散。
- 典型应用:实时文本渲染、动态模糊、轮廓描边、MSDF(多通道有符号距离场)生成。
大量独立路径的仿射/透视变换
- 算法:矩阵乘法、坐标变换、裁剪。
- 为什么适合:每个控制点或每个顶点可以独立并行处理。这是 GPU 最本质的能力(顶点着色器阶段)。
模板缓冲区(Stencil Buffer)奇偶填充
- 算法:非零环绕规则、奇偶规则。
- 为什么适合:GPU 专门为此设计了硬件的模板操作。先绘制所有路径三角形(通过细分或三角剖分),然后利用模板缓冲区的增量(Increment/Decrement)操作并行完成填充计数,速度极快。
并行的抗锯齿(MSAA / SSAA / 形态抗锯齿)
- 算法:超采样、边缘检测、混合。
- 为什么适合:每个子采样点或每个像素边缘的平滑计算独立。GPU 的光栅化器原生支持多重采样抗锯齿(MSAA)。
2.GPU 不太适合的矢量路径算法(以便对比理解)
- 建立全局拓扑结构:如从无序线段中提取完整封闭轮廓、确定主路径与孔洞的包含关系。这类算法需要深度递归、链表操作或动态数据结构(如红黑树)。GPU 的存储模型和线程调度对此类任务效率远低于 CPU。
- 高分支依赖的平面扫描:经典的 Bentley-Ottmann 求交算法需要动态维护扫描线状态和事件队列,每个新交点会改变后续顺序,串行依赖性强,不适合 GPU。
- 极小批量但复杂的路径:一条包含数万个控制点且高度自交的路径,如果只需处理一次,启动 GPU 的内核(Kernel)开销、数据传输延迟可能超过并行收益。
3. 总结表格
| 光栅化(填充/描边) | ★★★★★ | 片段着色器 / 模板缓冲区 |
| 曲线细分 | ★★★★☆ | 几何着色器 / 计算着色器(预细分) |
| 批量线段求交 | ★★★☆☆ | 并行对检测(配合空间划分) |
| 有符号距离场生成 | ★★★★★ | 计算着色器暴力距离 / Jump Flooding |
| 布尔运算(交并差) | ★★★☆☆ | 先并行的轮廓交点计算,再串行重组 |
| 拓扑恢复/包含关系 | ★☆☆☆☆ | CPU 处理,GPU 仅负责后续渲染 |
实践建议:在矢量化渲染引擎(如用 GPU 加速 SVG 渲染)中,通常采用 混合架构:
- CPU 负责解析 SVG、构建几何图元、处理复杂包含关系、建立加速结构(BVH)。
- GPU 负责将路径细分为三角形、光栅化、模板填充、抗锯齿、多路混合。
对于实时性要求高的应用(如矢量动画、CAD 预览、地图渲染),将上述适合 GPU 的算法移植到计算着色器(Compute Shader)中,往往能获得数量级的速度提升。




