人物图片转 SVG 动画资产管线:ComfyUI、Grounded-SAM、OpenPose 与 vtracer
人物图片转 SVG 动画资产管线:ComfyUI、Grounded-SAM、OpenPose 与 vtracer

人物图片转 SVG 动画资产管线:ComfyUI、Grounded-SAM、OpenPose 与 vtracer

2D 动画制作的第一步不是直接补间,也不是马上画骨骼,而是先把角色拆成可以独立移动、独立修正、独立导出的资产层。一个人物图片如果仍然是单张像素图,后续无论用关键帧、骨骼还是表情替换,都会很难控制局部运动。

因此我在实用功能页加入了一个浏览器端工具:动画资产生成器。它把输入的人物或动漫角色图片转成 SVG、分层 PNG 和资产清单。处理过程只在浏览器里发生,不上传文件,也不占用服务器存储。

一、为什么先做分割与分层

动画资产的核心目标是把“整张角色图”改造成“可操作的结构”。常见图层包括头发、脸、眼睛、衣服、手臂、腿、阴影和高光。分层之后,动画系统才能对每一层设置锚点、旋转中心、遮罩关系和关键帧。

如果用数学方式描述,原图可以看成像素函数:

I(x, y) = [R, G, B, A]

分割的目标是给每个像素分配一个图层标签:

L(x, y) in {0, 1, 2, ..., K - 1}

理想情况下,同一块头发或衣服应该落在同一个标签里,相邻但语义不同的区域应该分开。这个标签图就是后续 SVG 矢量化、PNG 图层导出和动画绑定的基础。

二、浏览器工具采用的本地管线

网站上的第一版工具不调用云端 AI,也不加载大型模型。它使用的是轻量浏览器管线:

  1. 用 Canvas 在本地解码图片。
  2. 进行边缘保留上采样,尽量保留动漫赛璐璐硬边。
  3. 用 RGB 颜色聚类近似分割角色区域。
  4. 用连通域过滤去掉太小的碎片。
  5. 为每个图层生成透明 PNG。
  6. 把每个图层的水平像素 run 写成 SVG path。
  7. 导出 manifest.json,记录尺寸、颜色、图层面积和分块数量。

这不是 SAM 的替代品,而是一个不消耗服务器算力的快速草稿工具。它适合干净角色图、透明背景、硬边线稿和赛璐璐上色。对于复杂背景、半透明发丝、渐变阴影或真实照片,离线 SAM 管线更可靠。

三、生产级离线管线:ComfyUI + Grounded-SAM + vtracer

如果要获得更接近生产资产的结果,推荐在本机跑离线脚本,而不是把图片上传到服务器。基础脚本是 sam_vtracer_pipeline.py;更完整的生产脚本是 comfyui_grounded_sam_vtracer_pipeline.py

生产级流程可以拆成三层:

多角度角色参考图
  -> ComfyUI: IP-Adapter 锁定角色特征
  -> ComfyUI: ControlNet OpenPose 强制拆件排版
  -> Grounded-SAM: 用文本 prompt 抠出语义部件
  -> vtracer: 透明 PNG 部件转 SVG
  -> Python: 注入稳定 id,合并为 character-rig-layered.svg

3.1 角色特征锁定:IP-Adapter

IP-Adapter 的作用不是简单“参考风格”,而是把正脸、侧脸、服饰细节和局部特写编码成图像条件。对于动画资产,它解决的是角色一致性问题:发色、瞳孔、耳朵形状、刀疤、饰品和服装轮廓应该在每张生成图里保持同一套视觉身份。

离线模板 comfyui_exploded_character_workflow.template.json 使用占位符,让脚本把参考图上传到本机 ComfyUI 后替换为 __REFERENCE_IMAGE_1__。实际节点名会因 ComfyUI 插件版本不同而变化,所以模板是可编辑的 API 工作流,而不是服务器端固定服务。

3.2 姿态剥离:OpenPose Exploded View

传统立绘经常有手臂压住胸口、头发盖住肩膀、武器挡住腿的问题。这样的图即使画得漂亮,也不适合作为可绑定资产。拆件排版的目标是让头、躯干、左臂、右臂、腿、尾巴和饰品互不遮挡。

我放了一个 拆件 OpenPose 骨架参考图。你可以把它导出成 PNG,然后喂给 ControlNet OpenPose。这样 ComfyUI 生成的不是“完整站姿角色”,而是一张纯色背景上的“散装角色部件板”。

3.3 语义级抠图:Grounding DINO + SAM

坐标裁剪不可靠,因为生成图里的部件大小和位置会随 seed 变化。Grounded-SAM 更适合自动化:Grounding DINO 先根据文本找框,例如 left armwolf headheadband;SAM 再把框内真实轮廓变成 alpha mask。

下载的 part_prompts.example.json 给出了默认部件清单。脚本会为每个部件输出透明 PNG,并在 manifest 中记录文本 prompt、检测分数和边界框。

3.4 SVG 装配:稳定 ID 与骨骼资产库

vtracer 负责把每个透明 PNG 部件转成干净 SVG path。最后 Python 会把这些路径合并进一个 SVG,并给每个组写入稳定 ID:

<g id="left-arm">...</g>
<g id="right-arm">...</g>
<g id="wolf-head">...</g>

这一步非常关键。没有稳定 ID,后续动画软件或网页运行时就无法可靠地找到左臂、右臂、头部和饰品;有了稳定 ID,才可以继续写锚点、父子层级、骨骼绑定和关键帧。

四、超分辨率为什么放在矢量化前

很多动漫图像在缩放后会出现锯齿、断线和颜色混合。矢量化算法看到这些噪声后,会生成大量短路径,导致 SVG 变大、边缘变脏。

所以超分辨率或边缘保留上采样应该放在矢量化之前。目标不是凭空生成细节,而是让轮廓更稳定,让同色区域更连贯。浏览器工具采用轻量的硬边上采样和锐化;离线工作流可以替换成本机 anime upscaler,例如 Real-ESRGAN 动漫模型或其他本地超分工具。

五、资产包应该怎样复核

生成资产后,不要只看 SVG 是否好看。更重要的是检查它是否适合动画:

  • 头发、脸、衣服和手臂是否被拆成可操作层。
  • SVG 是否过大,是否包含过多碎片。
  • 图层 PNG 是否保留透明背景。
  • manifest 中的面积和分块数量是否合理。
  • 后续绑定时是否能找到旋转锚点。

如果图层过碎,可以提高细节阈值或减少目标图层数。如果角色结构混在一起,可以先用离线 SAM 分割,再用 vtracer 单独矢量化每个 mask。

六、这篇文章在 2D 动画专栏中的位置

这篇是 2D 动画原理专栏的第一步:资产生成。后续可以继续写锚点、父子层级、骨骼绑定、关键帧、缓动曲线、补间、遮罩和镜头运动。只有先把角色拆成干净资产,后面的动画原理才有落地对象。

直接使用入口:动画资产生成器。它适合在浏览器里快速验证一个角色图是否能拆层;真正要做作品时,再把离线脚本、人工修图和动画软件结合起来。

搜索问题

常见问题

这篇文章适合谁读?

这篇文章适合想用 实战 难度理解“人物图片转 SVG 动画资产管线:ComfyUI、Grounded-SAM、OpenPose 与 vtracer”的读者,预计阅读时间约 14 分钟,重点覆盖 ComfyUI, IP-Adapter, OpenPose, Grounded-SAM。

读完后下一步应该看什么?

可以从文末相关阅读、项目页和知识图谱继续进入相邻主题。

这篇文章有没有可运行代码或配套资源?

有。页面里的运行说明、资源卡片和下载入口会指向复现实验所需的命令、数据、代码或说明文件。

能不能在浏览器实验台里操作?

可以。读完文章后可以打开算法实验台或知识图谱,观察 8 皇后、K-means 或手写数字演示的状态变化。

文章上下文

算法实现项目

围绕回溯、位运算和聚类实现,保留可以复查的代码、流程图和下载资料。

难度: 实战 阅读时间: 14 分钟
  • ComfyUI
  • IP-Adapter
  • OpenPose
  • Grounded-SAM
  • vtracer
  • SVG
对应语言版本 Character Image to SVG Animation Asset Pipeline: ComfyUI, Grounded-SAM, OpenPose, and vtracer
可分享摘要 人物图片转 SVG 动画资产管线:ComfyUI、Grounded-SAM、OpenPose 与 vtracer

2D 动画原理专栏第一篇:用 ComfyUI IP-Adapter、OpenPose 拆件、Grounded-SAM 抠图和 vtracer 生成 SVG 骨骼资产库。

打开分享中心

配套资源

发表回复

项目时间线

已发布文章

  1. 人物图片转 SVG 动画资产管线:ComfyUI、Grounded-SAM、OpenPose 与 vtracer 2D 动画原理专栏第一篇:用 ComfyUI IP-Adapter、OpenPose 拆件、Grounded-SAM 抠图和 vtracer 生成 SVG 骨骼资产库。
  2. 回溯算法入门:用 C 和 Python 解决 8 皇后问题 用 C 和 Python 讲清楚 8 皇后回溯搜索的状态表示、冲突判断、递归过程与完整求解思路。
  3. 回溯算法进阶:用位运算优化 8 皇后(C / Python) 介绍如何用位运算优化 8 皇后搜索,降低状态判断成本,并给出 C / Python 对照实现。
  4. K-means 聚类算法入门:基于 Iris 数据集的 C 语言实现 结合 Iris.csv、C 语言源码、流程图和可视化,完整讲解 K-means++ 初始化、迭代收敛与结果分析。
  5. 图片转 Unicode 四象限 ANSI:原理、实现与浏览器工具 解释如何把任意图片压缩成 truecolor Unicode 四象限 ANSI:2 x 2 像素、两色最小误差、.ans 文件和浏览器端隐私边界。

已公开资源

  1. Iris.csv 数据集 K-means 文章使用的 150 条 Iris 样本。
  2. Iris_sort_K_mean.c 源码 包含标准化、K-means++ 初始化、多次重启和 SSE 选择。
  3. K-means 流程图 对应 C 程序执行顺序的 SVG 流程图。
  4. 聚类可视化图 基于花瓣长度和花瓣宽度投影的二维散点图。
  5. K-means 打包下载 包含数据、源码、流程图和可视化图。
  6. 高数联系 PDF 公开下载的高数课程 PDF,适合复习或打印。
  7. 基础 SAM + vtracer 脚本 本机运行的角色图片分割、PNG 图层和 SVG 矢量化参考脚本。
  8. ComfyUI + Grounded-SAM 生产脚本 调度本机 ComfyUI、Grounding DINO、SAM 和 vtracer,生成带稳定 ID 的 SVG 骨骼资产。
  9. ComfyUI 拆件角色工作流模板 IP-Adapter 锁定角色特征,ControlNet OpenPose 约束拆件排版的可编辑 API 模板。
  10. 拆件 OpenPose 骨架图 用于生成头、躯干、手脚分开的角色部件板,可导出 PNG 后喂给 ControlNet。
  11. 动画部件 prompt 清单 Grounding DINO 使用的 head、left arm、torso、tail、accessory 等语义抠图提示词。
  12. 算法可视化专题分享图 用于分享 8 皇后、回溯、位运算和实验台专题页的 1200x630 SVG 图。
  13. K-means 一轮迭代动画 Remotion 生成的短动画,展示样本分配、质心更新和 SSE 下降。
  14. 8 皇后回溯搜索动画 Remotion 生成的短动画,展示逐行尝试、冲突剪枝和回溯。

当前学习路线

  1. 用 C 和 Python 解决 8 皇后问题 学习路线节点
  2. 用位运算优化 8 皇后 学习路线节点
  3. 基于 Iris 数据集的 K-means C 语言实现 学习路线节点
  4. K-means 代码、数据和图示下载 学习路线节点

下一步计划

  1. 补充更多算法题的可运行实现
  2. 为下载资源增加更多示例输入
向下探索