一笔穿过另一笔,线稿矢量化要定谁连谁——同一片像素能拆成不止一种笔画
栅格线稿丢掉了落笔历史,交叉处只靠像素误差分不出谁连谁
线稿矢量化要过的第一关不是把曲线描准,而是先决定哪几段像素属于同一笔。这一步在像素里没有唯一答案:同一张栅格图可以对应多套都合法的笔画分解,而按像素误差挑,挑不出正确的那一套。所以在这些歧义处需引入拓扑判断,本文讨论的方法将它显式置于连续优化之前。
原因在栅格化本身。栅格化是一个多对一的映射:多种笔画分解、多种落笔顺序,最终被压成同一张像素图。要从这张图恢复笔画,就是在解一个多对一映射的逆,而多对一的映射逆不唯一:既然多套输入产出同一张图,看到图也就无法反推出唯一那套输入,像素误差最小当然不等于还原正确。即使在线条干净、没有噪声的线稿上这一点也成立,交叉、遮挡和靠得很近的两条平行轮廓,都会让局部像素证据不足以判定谁跟谁相连。
Noris 等人在 2013 年提出的 reverse drawing(反向描画)就是这个歧义最早的具名实例Noris et al. 2013。他们的做法完全在几何层面:在每个交叉处迭代扩张一个圆盘,直到各条入射笔画的笔画粗细圆不再相交,圈出这块歧义区;把区内原有的中心线估计全部删掉;然后对每一对入射段枚举出通过两个交点的连续候选中心线(用三次 Hermite 样条表达);给每条候选算笔画曲率,按最直优先贪心挑选,直到所有入射中心线都被接上。论文报告这条规则在超过 2000 条候选上定出的曲率阈值为 50 度,与艺术家标注的整体一致率 95.5%,在度数大于 3 的交叉处降到 93.4%。

图注:八格显示同一个 T 型交叉上的反向描画过程。输入的像素级交叉处先被圈出一块歧义区,区内原有的中心线估计被删除,然后在歧义区与各条基准中心线的交点之间枚举出连续候选中心线,评估各条候选的曲率,最后选出一条更直的配置。同一片像素在这里确实可以被拆成不止一种走法,这就是笔画身份歧义的来源。Noris et al. 2013
这个例子里没有任何学习信号,纯粹是几何加一条贪心的曲率规则,它的收益也确实被量化过:在 8 幅图上,加入 reverse drawing 后平均中心线误差从 5.38% 降到 4.13%,优于 Adobe Live Trace 的 7.97%。但论文自己承认了这条启发式的边界:噪声或草图会破坏像素聚类,低分辨率需要超采样,网格状的技术图会让贪心规则失效。曲率偏好这条信号就此饱和,它留给后来者的口子很明确:需要像素之外的信号。
可微渲染补不上这个口子。DiffVG 把曲线参数到像素再到反传这条链第一次在通用 2D 矢量图形上打通,但它在结论部分写下两条自认的局限:梯度只从形状边界进入,内部像素的信息会丢失;而且它无法为增删路径段这类离散决策产生梯度DiffVG。也就是说渲染器再快,它动的也只是连续参数,动不了哪几段属于同一笔这件事。
把笔画身份改写成骨架图上的划分:语义管物体归属,深度管交叉处谁延续谁
把「哪几段属于同一笔」从像素上的猜测变成一个可以全局求解的图划分问题,是这条链上最关键的一次改写。Chen 等人在 2026 年提出的方法先对线稿做骨架化(skeletonization,把线稿细化成一条像素宽的中心线),再在骨架像素上建 8 邻接连通图,每个像素是节点,相邻像素之间有边;于是「一笔」就是这张图上的一个连通子图,笔画身份恢复就变成给这张图做划分Chen et al. 2026。
纯连通性在交叉处同样歧义,所以边权必须来自像素之外的信号。论文给每条边算一个亲和度:取这条边两端节点各自的 k-hop 邻域,把邻域内像素的单目深度值看成两族点,算 silhouette score(轮廓系数,衡量两族点分不分得开,接近 +1 表示分得很开,接近 −1 表示混在一起);对预训练语义特征做同样的计算,再把两者加权合成:
$$S_z(i,j) = S({z_p : p \in N_k(i)},\ {z_q : q \in N_k(j)})$$
$$A(i,j) = 1 - \frac{\lambda_z S_z(i,j) + \lambda_f S_f(i,j)}{2}$$
深度和语义在这里分工明确:语义特征(DINOv2 一类模型给出的区域归属)决定这条线属于哪个物体,防止把两个物体相邻的轮廓错并成一笔;单目深度(Depth Anything 一类模型给出的深度序)决定交叉处谁延续谁,也就是笔锋该往哪条线走。论文取 λ_z = 0.7、λ_f = 0.3,说明这一层里深度权重更大;亲和度低于阈值 τ = 0.2 的边被剪掉,度数为 3 的交叉再额外删掉对顶角最接近 180 度的那条边,也就是保留最像直通的走向。

图注:初始化阶段的预处理与划分形态。输入栅格线稿先做二值化,再分别提取深度伪彩图与语义伪彩图,两者被用来给骨架图的边计算亲和度,紫色虚线框标出的局部交叉因此被切成 Stroke 1 与 Stroke 2,最右侧是按笔画着色后的结果。划分由语义与深度信号驱动,而不是只由连通性决定。此图只呈现到按笔画着色为止,不包含样条拟合的细节。Chen et al. 2026
剪枝后的图交给 Louvain 做模块度划分,每个子图转成 Eulerian 图后走一遍欧拉路径,得到覆盖所有边的一组路径,也就是一串笔画;过短的路径被丢弃,剩下的拟合 B 样条再转成三次贝塞尔。
选 Louvain 而不是别的划分器,理由在算法本身:骨架图是稀疏图,8 邻接下节点度数通常不超过 4,正好落在 Louvain 原论文声明的「在典型且稀疏的数据上复杂度是线性」的适用范围里Louvain。它的每个 pass 分两阶段:第一阶段让每个节点在邻居社区之间贪心移动,只接受让模块度增加最多的那一步,迭代到局部极大;第二阶段把每个社区压成一个新节点,边权取跨社区边权之和,再对这张粗化网络重复第一阶段,直到模块度不再上升。
这个两阶段节奏和多趟编译优化 pass 是同一件事:每一趟只看当下能改的地方,改完把结果折叠成上一层的一个单元,再到上一层重新看一遍。它同时也是一遍分治:先在子问题里求局部最优,再把子问题的解合并成原问题的解。落到骨架图上,这个节奏的效果是不容易因为一次贪心就把短笔画过早并进大社区。
另一条同样承认拓扑必须先解的路线是 DeepSketch。它不问图,而是预测无符号距离场,用神经 dual contouring 从场的零等值线上抽出折线骨架,再靠关键点和欠采样图在局部修补拓扑错误DeepSketch。它与本章方法的差别在于修补是局部的、关键点驱动的,不是在骨架上做全局划分。
拓扑定死后,一条笔画被压成一个又小又稠密的可微参数块
拓扑一旦定死,问题就从离散多解塌缩成连续拟合:一条笔画的全部状态只剩形状、粗细、笔刷三组变量,而且这三组变量能各管一段、互不打架。形状是 n 段三次贝塞尔 B(T; P),T ∈ [0, 1] 是归一化弧长参数;因为贝塞尔弧长没有闭式解,论文用一张稠密查找表把分段参数映射到弧长参数。粗细是关于 T 的多项式 $w(T; a) = \sum_k a_k T^k$,宽度初值来自距离变换。笔刷外观是一张透明度纹理图,在局部坐标 $(u, v) = (2 \cdot \mathrm{frac}(kT + d) - 1,\ s)$ 里沿笔画重复平移,s ∈ [−1, 1] 是沿单位法向的归一化偏移。有了这些字段,笔画区域可以参数化成 $x(T, s) = B(T; P) + s \cdot w(T; a) \cdot n(T; P)$。

图注:一条笔画的连续状态空间。(a) 用两段三次贝塞尔建模中心线,曲线由 7 个控制点 P0 到 P6 刻画,B(T=0; P)、B(T=0.4; P)、B(T=1; P) 标注了归一化弧长参数 T 上的采样位置,w(T=0.4; a) 给出该处的宽度。(b) 用一张棋盘格纹理图建模外观,纹理以 (u, v) 局部坐标沿笔画重复平移,笔画上另标出 (s, t) 与 (x, y) 局部坐标系。形状、粗细、纹理三类变量各自的参数由此一目了然。Chen et al. 2026
这里的关键不是公式本身,而是为什么这三类变量现在才可优化。在上一章的划分做出来之前,一组控制点该归属哪条笔画是不确定的,梯度下降一旦落在错误的归属上就会收敛到错误结构;拓扑给定之后,每条笔画的优化空间变得又小又稠密又光滑。拓扑歧义不再耦合各笔画,但它们仍会通过共同渲染和损失相互影响。
另一条思路是把图层顺序直接当作拓扑:每个区域用四段三次贝塞尔搭成一个环路,配一组径向渐变参数,整体交给 DiffVG 联合反传LIVE-Grad。它的状态空间形状和本章一样,都是几何加颜色或纹理参数一起优化,区别只在于「哪些像素属于哪条 path」这一步交给的是图像分割,而不是骨架图上的全局划分。
优化怎么跑:沿笔画的 2D 高斯把梯度铺稠密,先几何后外观不让纹理吸收几何
这一章分三层:先看被替换掉的渲染器代价有多大,再看替换之后省下了什么,最后看两阶段调度防住了什么。
DiffVG 的代价由它换可微性的方式决定。它用 BVH 加速绕数与距离查询,用边界采样推梯度,梯度信号因此只从形状边界进入。论文自报的时延说明了量级:在 Hawaii 这种万级曲线段加大分辨率的场景上,正向一次 1.117 s、反向一次 3.371 s。这是 2020 年的 CPU 单线程 BVH 实现数字,量级比绝对值有意义。更硬的一条限制在结论里:它无法为增删路径段的离散决策产生梯度。
它让连续曲线的渲染与梯度更稠密,而增删曲线仍要靠误差驱动的显式剪枝与增密规则。Bézier Splatting 把贝塞尔曲线上的点变成 2D 高斯,直接交给 splatting 的 tile-based 光栅器做前向与反传,用 α-blending 取代随机边界采样。论文自报在开曲线上相对 DiffVG 正向快 31.4 倍、反向快 149.2 倍(4.5 ms 与 4.7 ms,对照 141.3 ms 与 701.3 ms),闭合曲线上是 6.0 倍与 18.2 倍BézierSplat。

图注:沿贝塞尔曲线采样 2D 高斯的渲染流水线形态。曲线上的高斯点被光栅化成图像,前向与反传构成一个循环,误差图回灌后触发剪枝(去掉透明度极低或形状极小的曲线)与增密(在高重建误差区域自适应加入新曲线)。这是通用版沿曲线 2DGS,没有宽度多项式,也没有笔刷纹理。BézierSplat
要理解为什么这种原语对笔画特别合适,需要回到 2D 高斯平盘本身。它由中心点、两条切向基与两个切向缩放因子刻画,第三个方向上的缩放被强制为 0,等于把图元压扁到一个局部切平面;渲染时不做近似投影,而是显式求像素射线与这个平盘的解析交点,让几何在多视角下保持一致2DGS 2024。把第三个方向压成零带来一个直接后果:沿盘面切向是高斯的指数衰减,沿法向几乎是硬边界。对一条笔画来说这正好是要的形状,沿走向铺开、沿横向收紧。

图注:可定向平盘的几何参数。每个盘标注了中心点 p_k、两条切向基 t_u 与 t_v、两个切向缩放因子 s_u 与 s_v,其中一个盘上画出像素射线穿过盘面的求交几何。这张图来自三维重建语境,盘上的切向基是任意切向基,不是笔画的两侧方向;它给出的是「为什么原语是压扁的盘、为什么法向上支撑很窄」的直觉。2DGS 2024
本方法在这个平盘上再加两件事。一是法向也采样,让支撑覆盖整个笔画区域,而不只贴着中心线;二是高斯尺度带上曲率项:
$$\sigma(T, s) = \frac{w(T)}{\rho} \cdot (1 + s \cdot w(T) \cdot \kappa(T))$$
其中 ρ 是可训练的密度参数,κ(T) 是局部曲率。曲率项让弯道外侧的高斯放大、内侧的缩小,补偿单纯按弧长均匀采样在弯道处会出现的覆盖不足。采样方式是切向等距、法向按数量均匀,法向数量取纹理高度。
但梯度稠密还不够,先几何后外观才是让这套优化收敛到正确结构的那一步。训练被切成两段:
| 阶段 | 优化什么 | 迭代 | 周期操作 |
|---|---|---|---|
| Stage 1 | 只优化控制点与宽度 | 带纹理的线稿约 300 次,实心线稿约 200 次 | 按平均透明度剪掉笔画、按 Chamfer 距离判据删掉冗余控制点、用距离变换找出渲染中缺失的前景像素并在那里插入新笔画 |
| Stage 2 | 冻结几何,加入纹理图 | 再 700 次 | 无 |
重建损失是 L_MSE 加 λ_LPIPS·L_LPIPS,加入纹理之后再叠加几何正则,鼓励分段接缝处 G¹ 连续、惩罚单段自交、对超过 κ_max 的曲率施加 hinge 惩罚。为什么要这样切?因为一个模糊的纹理很容易把几何里缺失的那条边吸收掉:只要外观还有自由度,像素误差就能靠纹理抹平,几何就跑偏。把几何先冻结,外观变量就失去了替几何背锅的机会。

图注:方法总览排成一条流水线。输入栅格先经过初始化,Stage 1 只带控制点与宽度两组变量,Stage 2 在控制点与宽度之外再加纹理图,最后输出参数化的矢量化结果。图中可见反传箭头与损失标记。此图不画出剪枝与增密的子步骤,那些调度细节见上表。Chen et al. 2026
这条渲染家族的血缘只用一段说清:3DGS 立起了 splatting 可微光栅化的骨架,把屏幕切成 16×16 的 tile,用一次全局 GPU 基数排序排好所有高斯实例,再按 front-to-back 做 α-blending 并在像素饱和时提前终止,反传复用同一份排序结果3DGS;2DGS 把 3D 高斯换成可定向平盘;Bézier Splatting 把平盘沿曲线均匀铺开;本方法再在笔画上做切向加法向的专门化。每一环只出自己的那一环。
消融阶梯把「初始化是上限」变成实验事实:初始化接错,渲染器就没有发挥余地
消融给出的因果链比任何一个提升百分比都更有说服力:在同一套渲染器与损失下,只把初始化从随机换成骨架图,误差就差出三个数量级。论文在 369 幅干净线稿基准上评测,主指标是向量域的 Chamfer 距离与笔画长度差。后者是必要的补充,因为折返或重复的笔画不会在 Chamfer 上留下痕迹;这两项指标的定义与整个基准都来自 DeepSketch 那一篇。所有数字都按论文自报口径读。
| 消融配置 | Chamfer(10⁻³) |
|---|---|
| 只用随机初始化做优化 | 1139.74 |
| 骨架图初始化 | 1.39 |
| 骨架图初始化加语义与深度亲和度 | 1.34 |
| 再加周期剪枝与增密(完整方法) | 0.94 |
| 换成 DiffVG 渲染器,保留图与亲和度 | 1.17 |
读法有两层。第一层是随机初始化那一档为什么差到三个数量级之外:这一档消融能直接表明的只有一件事,随机起点没有为连续曲线参数提供一个可用的结构性起点,拓扑从未进过优化过程。至于为什么这会让优化完全推进不下去,论文给出的解释是缺乏正确拓扑时几乎没有可用的下降方向、梯度过于稀疏,这属于解释性推断,消融本身只能证明随机起点无法充当有效的结构起点,不能单独把结果归因于梯度稀疏。第二层是同一套图加亲和度初始化下把渲染器换成 DiffVG,指标反而更差,说明渲染器不是可有可无的;但这两层之间的差距量级完全不同,主导项是拓扑那一档,不是渲染器那一档。
论文自报的正面结果可以放在同一张表上读:在干净线稿集合上相对次优方法 DeepSketch,Chamfer 距离降低 35.17%,笔画长度差降低 55.41%,对应 Chamfer 0.94 对 1.45、笔画长度差 1.40% 对 3.14%。这些数字没有独立复现,应当按「该论文报告」来对待。时延上,完整方法在 1024 像素分辨率下约 10.73 s 每图(RTX 3090),换成 DiffVG 的版本要 60.77 s。

图注:对照路线怎么补拓扑。上排是交叉点情形,下排是平行线情形,每排从错误拓扑出发,先在紫色欠采样区内丢弃全部边标记,再按截断边数量算出 valence:区内若有关键点就把截断点都连过去,若没有关键点且 valence 为 4,就按切线方向最接近的一对重新连接。这是局部、关键点驱动的修补,与骨架图上的全局划分是两种不同的解。DeepSketch
粗糙纹理与噪声骨架会冒出伪笔画,视频遮挡仍会闪烁:失败风险记在先验账上
这套设计的代价,是把失败风险从渲染器转移到了先验和骨架上,论文讨论部分也只列了两条失败模式。第一条是伪笔画:当线稿带有粗糙纹理或噪声背景时,初始化虽然会清掉杂散分支和小连通块,但残留的伪影会活下来,最后变成输出里多出来的笔画;此时亲和度信号没有可以用来分辨的东西,因为它本身就依赖语义与深度先验的质量。第二条出现在视频扩展里:每个控制点带一个逐帧位移、每段贝塞尔带一个逐帧可见性因子,遮挡发生在笔画上任意位置时,预测的位移只能部分补偿,严重遮挡会带来闪烁。
两条失败模式指向同一句话:限制质量的是深度与语义先验的质量,以及骨架的干净程度。这也是这套分工最该被记住的取舍:在本文的设置与基准中,先恢复笔画身份比继续提高渲染速度更决定最终质量,因为它把谁连谁这个决定交给了先验,先验错了,后面再快的渲染也救不回来。
可迁移的东西因此不是某个渲染器。同一年另一篇用线条基元做三维模糊外观逆渲染的工作走的是同一条骨架:先把输入结构化,再优化显式低维基元,中间穿插周期性的离散更新,它叫 re-lining,每 100 步做一次剪枝、合并与拆分InverseLines。把它的工作流和上一章那张方法总览并排放,三段式是重合的:输入或栅格,显式低维基元加可微渲染加周期离散更新,重建表示。区别只在被搬去的对象从二维的笔画身份换成了三维的线连接关系。这两项工作的问题域和指标都不同,数字不可比,这里只对照结构。

图注:三段式工作流。(a) 在暗环境中用同轴闪光与偏振片做多视角拍摄,并用 Structure-from-Motion 估计相机位姿;(b) 通过可微渲染优化显式线条基元,配合周期性的 re-lining 做剪枝、合并与拆分;(c) 优化结束后输出可在多视角下忠实渲染的线基元模型。与上一章的二维流水线并排看,输入、显式基元加可微渲染加离散更新、重建表示这三段是对应的。InverseLines
最后是可编辑性,它是「输出是标准贝塞尔样条」这件事的直接回报:用户可以锁定部分参数,只优化其余参数,编辑还会沿着视频扩展传播到序列上去。这也正是这一整套分工值得被记住的理由:先显式求解低维结构,再让可微渲染精修外观。在本文的设置与基准中,先恢复笔画身份比继续提高渲染速度更决定最终质量:关键仍然在于能不能从已经丢失落笔历史的像素里,把离散的笔画身份恢复出来。
参考文献
本专题引用的核心资料如下,建议深入学习时阅读原文:
- 2D Gaussian Splatting for Bézier Spline Line Art Vectorization (Chen et al., SIGGRAPH 2026) — https://igl.ethz.ch/projects/2DGS-vectorization/Paper.pdf
- Deep Sketch Vectorization via Implicit Surface Extraction (Yan et al., ACM TOG 43(4) / SIGGRAPH 2024) — https://esslab.jp/publications/ChuanSIGGRAPH2024.pdf
- Bézier Splatting for Fast and Differentiable Vector Graphics Rendering (Liu et al., NeurIPS 2025) — arXiv:2503.16424
- Segmentation-guided Layer-wise Image Vectorization with Gradient Fills (Zhou et al., 2024) — arXiv:2408.15741
- Topology-driven Vectorization of Clean Line Drawings (Noris et al., ACM TOG 32(1) / 2013) — https://cgl.ethz.ch/Downloads/Publications/Papers/2013/Nor13/Nor13.pdf
- Differentiable Vector Graphics Rasterization for Editing and Learning (Li et al., ACM TOG 39(6) / SIGGRAPH Asia 2020) — https://doi.org/10.1145/3414685.3417871
- 2D Gaussian Splatting for Geometrically Accurate Radiance Fields (Huang et al., SIGGRAPH 2024) — arXiv:2403.17888
- Inverse Rendering for Modeling with Line Primitives (Tojo et al., ACM TOG 45(6) / SIGGRAPH Asia 2026) — arXiv:2609.00625
- Fast unfolding of communities in large networks (Blondel et al., J. Stat. Mech. 2008) — arXiv:0803.0476
- 3D Gaussian Splatting for Real-Time Radiance Field Rendering (Kerbl et al., ACM TOG 42(4) / SIGGRAPH 2023) — arXiv:2308.04079