HairDeck:从单张图像生成可直接动画的风格化发卡发型 HairDeck: Animation-Ready Stylized Hair Cards from a Single Image
把发型当作无序发卡集合,集合扩散Transformer一次生成全部发卡与弹簧骨链
前置知识
发卡(Hair Card)
游戏和虚拟形象中风格化头发的标准构成单元:由美术手工摆放的一条条带状网格(ribbon),几十到一百多条卡片的几何体直接构成可见的头发。与写实头发中"用一张贴图代替多根发丝"的 alpha 透贴卡片不同,风格化卡片有菱形或三角形截面,宽度和厚度沿卡片变化,每张卡用控制点折线 $(p_i, w_i, h_i)$ 描述。
本文生成与评测的对象就是这种卡片,理解卡片的数据结构以及截面类型、根朝向这两个新引入的属性,是读懂表示设计与朝向指标的前提。
弹簧骨骼(Spring Bone)
挂在头部骨骼下的一小串短骨链,每帧模拟骨尖位移(带刚度 stiffness、阻尼 drag、重力),使头发随头部运动摆动并沉降。Unity 的 Dynamic Bone、VRChat 的 PhysBones、Unreal 的 Kawaii Physics、Godot 内置节点以及 VRM 规范都内置这种模拟,是实时角色头发的通用动画方案。
论文不仅生成静态卡片,还用第二个集合 DiT 直接生成骨链及其物理参数,使输出"开箱即可动画"——这正是标题 Animation-Ready 的含义。
集合扩散 Transformer(Set DiT)
用 Diffusion Transformer(DiT)同时对一组无序 token 去噪:去掉位置编码使模型对槽位置换严格等变,集合大小由每个 token 上的存在标志决定;每个块做 token 间自注意力、对条件 token 的交叉注意力,时间步与池化条件经 adaLN-Zero 调制。3DTopia-XL、DiffuScene、PartCrafter 等均采用此类集合生成。
本文的核心公式"每个图元一个 token、整集合一起去噪"就建立在这个机制上,是与 CHARM 自回归路线的本质区别,也是全部消融实验的对照对象。
Flow Matching(流匹配)
一类扩散式生成训练目标:在数据 $X_0$ 与噪声 $\epsilon$ 之间构造直线路径 $X_t=(1-t)X_0+t\epsilon$,网络 $v_\theta$ 预测该路径上的速度 $\epsilon - X_0$,推理时用 Euler 法从 $t=1$ 积分到 $t=0$。本文配合 classifier-free guidance(训练时以 0.1 概率把条件换成可学习空 token)提升条件一致性。
论文的训练损失(根位置与存在标志加权 4)、采样设置(50 步 Euler、guidance 2)都由此定义,读懂方法公式和消融都绕不开它。
旋转最小化标架(Bishop Frame)
沿空间曲线传播局部坐标系的方法:在每段只做让法向"不绕切线扭转"的旋转,从而得到逐点连续、无突变的宽度方向 $d_i$。发卡网格正是由根方向沿折线传播后扫掠截面生成,根方向一旦偏了,整张卡的朝向就跟着偏。
论文发现"从原始美术网格读根法向 + Bishop 传播"能把卡片朝向误差从 CHARM 的 40.0° 压到 16.8°,是理解朝向指标与 Table 9/10 分析的关键。
Chamfer Distance(CD)
两组点集间的距离度量:对每个点取它在另一组点集中的最近邻距离,再双侧平均,数值越小形状越接近。CHARM 协议把角色归一化到单位身高后,比较生成卡片与真值卡片的采样点;本文另用 EMD、HD、体素 IoU 及对齐 CD(ICP 配准后)作补充。
CD 是 Table 1/2 的主要精度指标,"CD 降低 44%"这一核心结论以它为单位,理解它的计算方式才能判断数字的可比性。
研究动机
游戏与虚拟形象里的风格化角色头发不是一整张网格,而是由美术手工摆放的几十到一百多条发卡构成,每张卡有菱形或三角形截面,宽度和厚度沿卡变化;头发还要逐根手工绑弹簧骨链,靠每帧模拟的短骨链实现摆动与沉降——Unity Dynamic Bone、VRChat PhysBones、Unreal Kawaii Physics、Godot 与 VRM 规范都内置这种模拟。现有生成方法给不出这种资产:写实或支持风格化图像的发丝生成器输出的是发丝,只能事后抽取成 alpha 透贴卡片;TRELLIS.2、Hunyuan3D-2.1 等图生 3D 模型输出一张融合网格,既没有卡也没有骨骼,对两张插画甚至输出一块正对相机的平板;唯一能生成风格化发卡的 CHARM 以自回归方式逐个解码一套发型中数百到上千个离散 token 的控制点,生成一套要 33.7 秒,且靠前三个控制点估计根方向导致卡片朝向误差高达 40.0°,其 CD 0.0117 与"直接检索最近的训练发型"(CD 0.0119)几乎持平——说明逐 token 解码既慢,又没有真正学到发型集合的结构。
本文的目标是本文的目标是:从单张图像(或点云)直接生成"开箱即可动画"的风格化发型资产——既包括带正确截面类型(菱形/三角形)与根法向的发卡几何,也包括驱动这些卡片的弹簧骨链及其刚度等物理参数,可直接导出到 VRM 等下游格式。同时要满足三个工程性要求:一是快,把单发型生成时间从 CHARM 的 33.7 秒压到秒级;二是准,卡片朝向要与美术原始网格一致(CHARM 的 40° 误差不可接受),卡片数量也要与美术习惯相符(每套约 67 张);三是鲁棒,能处理动漫插画、手绘线稿乃至 AI 生成的写实人像等各种画风的输入。
与已有工作不同的是,作者的独特切入点是一个简单观察:一套发卡发型本质上是"美术定义的图元的无序集合",而不是有序序列。据此提出两条设计法则——每个图元一个 token、token 之间不定义顺序——把生成单位从 CHARM 的"逐控制点自回归"改为"整套发卡 token 一次性集合去噪"。配套设计包括:卡片 VAE 把变长控制点编成单一连续 latent,使每张卡恰好占一个 40 维 token;token 上的存在标志让模型在去噪过程中自行落定卡片数量,而不需要单独的卡数预测头;再训练第二个集合 DiT,以已生成的卡片 token 为条件生成骨链集合,使"可动画性"成为生成目标而非事后处理。针对单图像输入,还引入锚定在脸上的头部坐标系解决发型大小与位置、以及面向多种画风的合成风格增广与图像编辑模型改风格渲染。作者指出这套"图元集合"配方可推广到服装裁片、矢量笔画等其他资产。
核心方法
HairDeck 的整体思路是"先压缩、再集合去噪、再配套骨链"。直觉上,发型像一桌散落的卡片,不该按顺序一张张"念"出来,而应整体"捏"成形。技术上分四步:第一步,卡片 VAE 把每张卡相对根点的变长控制点 $(p_i,w_i,h_i)$(各点附弧长比例 $u_i$)压缩成 32 维连续 latent $z$,解码器预测控制点数 $n$ 并在 $n$ 个等距弧长位置重建卡片;第二步,每张卡成为一个 token $x=(p_1,d_1,z,s,e)\in\mathbb{R}^{40}$(根位置、根法向、latent、截面类型 $s$、存在标志 $e$),一个 12 层、宽 768、181.3M 参数、无位置编码的集合 DiT 用流匹配同时去噪 $N=192$ 个槽位,条件为 Dora-VAE 编码的点云 token 或冻结 DINOv3 ViT-L/16 编码的图像 token;第三步,卡片 VAE 逐槽解码出控制点,按 Bishop 标架扫掠截面重建网格;第四步,第二个集合 DiT(8 层、宽 384、30.5M 参数)以卡片 token 为条件生成最多 48 条骨链 token(27 维:弧长 8 点路径、关节数、刚度、存在标志),再用固定的几何蒙皮把卡片绑到骨链上,按 VRM spring-bone 更新以 60fps 模拟。
核心创新是把"发型 = 图元的无序集合"贯彻到底,与已有方法的本质区别有三。其一,生成单位不同:CHARM 自回归地生成有序 token 序列,顺序本身成了模型的学习负担,还带来早期停止导致的卡数偏少(AR 平均 60.8 张 vs 真值 67.4);HairDeck 的集合 DiT 完全不用位置编码,对槽位置换严格等变,卡片数量由每个 token 的存在标志在去噪过程中逐渐"落定"(消融显示换成卡数预测头会平均少生成 6 张:62.8 vs 68.9)。其二,卡片编码不同:不用 CHARM 的 512 级量化控制点模板,而是弧长参数化的连续 latent,配合 adaLN 调制与世界单位损失,重建误差比按索引解码的 VAE(StrokeFusion 式)低约 6 倍(4.17 vs 0.70,单位 $10^{-3}$),输出卡片平滑度与美术原卡持平(最大转折角中位数 14.2° vs 原卡 14.1°)。其三,token 内容不同:在 CHARM 描述基础上加入截面类型 $s$ 与从原始美术网格读出的根法向 $d_1$,前者保留美术选择的截面,后者配合 Bishop 传播把朝向误差从 40.0° 降到 16.8°。
方法步骤详情
完整流程:(1)卡片描述:每卡为 $n$ 个控制点的折线 $(p_i,w_i,h_i)$,附截面类型 $s\in\{-1,+1\}$(菱形/三角)与根法向 $d_1$,由 $d_1$ 经 Bishop 标架传播出各点宽度方向 $d_i$ 后扫掠截面成网格。(2)卡片 VAE:编码器读控制点(附弧长比例 $u_i=i/(n-1)$ 的 Fourier 特征)与可学习 [CLS] 汇总 token,输出 $z\in\mathbb{R}^{32}$ 的 $\mu,\log\sigma^2$;解码器先从 $z$ 分类预测点数 $n$,再在 $n$ 个等距弧长位置经 adaLN-Zero 调制重建,损失为世界单位平方误差 + $n$ 交叉熵(权重 0.1)+ KL($10^{-6}$)。(3)集合去噪:192 个 40 维槽位,目标 $X_t=(1-t)X_0+t\epsilon$,速度损失中根位置与存在标志加权 4;条件以 0.1 概率换空 token 支持 CFG;推理 50 步 Euler、guidance 2,按 $e>0$ 解码槽位。(4)图像条件:裁剪头发+脸掩码并留 8% 边距(野外图用 SAM 3 分割),冻结 DINOv3 于 448px;预测在头部坐标系进行——以 $k=W/w$ 把脸宽缩放到训练集中位数 $W=0.1276$、脸顶移到公共点 $O$,输出再按各角色自己的 $k,b$ 映回真实头部。(5)训练渲染:每角色 8 视角 Blender EEVEE 768px,随机姿态与 VRM 弹簧骨头发运动,叠加灰度/半调/XDoG 线稿/平涂/油画等风格增广,并用 Qwen-Image-Edit-2511 构建 21,336 张改风格图池(训练时 0.33 概率抽取)。(6)骨链:链 DiT 交叉注意卡片 token 生成 48 槽链 token;蒙皮把卡片绑到与其中心线下部 60% 最近(均值距离 < 0.4 脸宽)的链上,逐点跟随最近链段并与邻段线性混合;最后按 UniVRM 弹簧骨更新(drag 0.4、无重力、60fps)模拟。
技术新颖性
技术新颖性可从三层看。表示层:把 StrokeFusion 的"每个笔画一个 VAE latent"推广为"每个美术图元一个 token",并首次为风格化发卡设计弧长参数化 VAE——解码在等距弧长位置而非固定索引处求值,使变长卡片共享一个固定大小的连续 latent,且重建平滑度可控(索引解码的转折角 25.3°,弧长解码 13.7–14.3°,逼近原卡 14.1°)。生成层:沿用 3DTopia-XL、DiffuScene、PartCrafter 等集合生成思想,但针对发型做了三处定制——无位置编码加每 token 存在标志实现变基数集合;条件可切换为点云(Dora-VAE)或单图(DINOv3),且图像模型从点云模型初始化做迁移训练;两阶段级联(先生卡、再生链)把"可动画性"纳入生成目标。评估层:作者首次提出逐卡朝向误差指标(生成卡与 CD 最近邻的美术卡在 32 个位置的宽度方向平均夹角)与根位置 P/R(阈值 2% 身高),揭示了被 CHARM 协议掩盖的问题——CHARM 模板对量化控制点做最小二乘重建时朝向误差达 40.6°,而给对根方向后量化本身只损失不到 1°。
实验结果
点云生成(CHARM 100 条测试发型):CD 从 0.0117 降至 0.0066(−44%),EMD 0.0128→0.0084、HD 0.0498→0.0242、IoU 0.753→0.867;对美术原始网格的逐卡朝向误差 40.0°→16.8°(减半以上);耗时 1.01s vs 33.7s(33 倍加速)。检索最近训练发型 CD 仅 0.0119,说明 CHARM 约等于背题;网格基线更差(MeshAnything V2 0.0166/176s、DeepMesh 0.0357/1050s、BPT 0.0446/351s)。同等参数的逐卡自回归版 CD 0.0078、6.91s——同一 token 化下集合化把 CD 再降至 0.0066 并快 6.8 倍,直接证明增益来自集合生成本身。单图生成(76 测试角色 + 40 野外插画):对齐 CD 0.0089(对比 CHARM 0.0186、TRELLIS.2 0.0139、Hunyuan3D-2.1 0.0148、DiffLocks+卡片 0.0174),失败率 3.5%/10%(基线 13.2–34.2%/17.5–77.5%),耗时 1.33s(基线 15.6–83s);图生 3D 级联(TRELLIS.2/Hunyuan→点云模型)CD 0.0138–0.0170、失败 22.4–32.9%,仍全面落后。骨链(58 条带链测试发型,美术卡输入):召回 0.625/精度 0.585(检索 0.289/0.285、程序化装配精度仅 0.110),头部运动相关性 0.702(检索 0.622、程序化 0.538),对卡片贴合度 0.953。关键消融:去根法向朝向 16.8°→26.4°;用 CHARM 卡片模板 26.7°;图像模型去头部坐标系则对齐前 CD 0.0136→0.0189、头发重投影 IoU 0.829→0.798;改风格训练图把根精度 0.781→0.849,合成风格增广把对齐 CD 0.0100→0.0097。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| 点云→发卡(CHARM 100 条测试发型) | Chamfer Distance (CD) ↓ | 0.0066 | CHARM 0.0117;MeshAnything V2 0.0166;BPT 0.0446 | 较 CHARM 降低 44% |
| 点云→发卡(对原始美术网格) | 逐卡朝向误差 ↓ | 16.8° | CHARM 40.0°;检索 24.8° | 误差减半以上 |
| 点云→发卡 | 单发型生成时间 ↓(单卡 RTX A6000) | 1.01 s | CHARM 33.7 s;DeepMesh 1050 s | 33 倍加速 |
| 单图→发卡(76 个测试角色) | 对齐 CD ↓ / IoU ↑ | 0.0089 / 0.725 | CHARM 0.0186/0.540;最佳外部基线 TRELLIS.2 0.0139/0.638 | CD 较 CHARM 降 52%,较 TRELLIS.2 降 36% |
| 单图→发卡 | 失败率 ↓(测试角色 / 野外插画) | 3.5% / 10.0% | 13.2%–34.2% / 17.5%–77.5% | 野外失败率最多降至约 1/8 |
| 骨链生成(58 条带链测试发型) | 召回/精度 @0.1W ↑(美术卡输入) | 0.625 / 0.585 | 检索 0.289/0.285;程序化规则装配精度 0.110 | 召回提升约 2.2 倍 |
局限与改进
作者承认的局限:(1)训练数据全部来自 VRoid 风格化发型,极短发型与写实头发的 alpha 透贴卡片在分布之外;(2)只生成几何与 UV 坐标,不生成贴图,拿到手仍是"素卡";(3)VRoid 中部分蝴蝶结、帽子本身用发卡建模,输入图中出现时会被误生成为卡片;(4)链 DiT 学的是 VRoid 常见链布局,对非常规布局(如大量链从头顶辐射)生成偏少;(5)野外失败案例显示抠图(matte)残留的道具、尾巴、特效、帽子犄角会被转成卡片。我的补充观察:其一,评测规模偏小——点云测试仅 100 条发型、单图测试仅 76 个角色(且都是 VRoid 渲染的前视图),野外 40 张也按发型分层抽样,泛化到非 VRoid 画风与体型仍是开放问题;其二,单图条件下骨链召回只有 0.390(点云 0.542),说明链生成强烈依赖卡片质量,级联误差会传播;其三,蒙皮是固定规则(0.4 脸宽绑定阈值、0.05 脸宽混合坡道,凭 200 个训练角色调出),与美术手工权重的运动相关性仅 0.77,复杂发型可能需要学习式蒙皮;其四,槽位上限 $N=192$/48 意味着超过 192 张卡的发型(训练集的 0.6%)被直接剔除,超复杂发型无法表达。
独立分析的弱点
独立分析的弱点及改进方向:(1)无纹理生成——风格化发卡的观感一半来自贴图(发丝走向、挑染、描边),当前输出需美术手动补贴图;可引入以卡片 UV(宽度 × 弧长坐标)为条件的贴图扩散模型,沿弧长自动生成发流纹理。(2)抠图单点故障——SAM 3 掩码里混入的道具会直接变成卡片(Fig. 23 的全部失败源于此);可在训练中注入"掩码含干扰物"的增广样本,或在解码后加"头发 vs 非头发"分类头过滤。(3)两阶段级联的误差传播——链 DiT 只见生成的卡片 token,单图时链召回从 0.542 跌到 0.390;可联合去噪卡片与链 token(共享注意力)或对卡片采样多候选再聚合。(4)头部坐标系依赖脸部包围盒——侧脸、遮挡脸部或夸张比例画风下 $k=W/w$ 估计会失稳($k$ 在训练集 5–95 分位已达 0.70–1.24 的跨度);可用学习式头部关键点或 3D 头先验替代。(5)固定槽位上限——直接丢弃超 192 卡的发型(0.6%),模型对超密发型欠拟合;可改用可变槽位或由粗到细分层生成。(6)朝向指标依赖 CD 最近邻匹配,多卡交叠处的匹配错误可能扭曲朝向误差的估计;可引入基于法向场或片段对应的更稳健匹配。每个弱点都有明确的可操作改进路径,这也是这类"配方型"工作的优点。
未来方向
作者提出的延伸方向:结论明确指出"每个图元一个 token、整集合一起生成"的配方可直接迁移到其他由美术定义图元构成的资产,例如由裁片缝制的服装(garment panels)或由笔画构成的矢量图(strokes)。基于本文成果还可延伸:(1)与物理仿真联合训练,让链 DiT 以"运动自然度"为优化信号,而不只是回归美术链的位置与刚度(当前运动相关性 0.702 仍有空间);(2)引入碰撞体描述,摆脱"无 collider"的简化模拟,处理长发与身体的穿插;(3)把写实 alpha 透贴卡片纳入同一集合表示,用一个模型覆盖风格化与写实头发(衔接 Strands2Cards、HairLRM 等工作);(4)文本、多视图或视频条件扩展,把发型生成嵌入全身角色流水线(与 StdGEN、Anime-Ready 互补);(5)把插值应用(对条件 token 做匈牙利匹配后线性混合,Fig. 9)发展成显式的发型语义编辑,例如"只改刘海、保留后发",探索条件 token 空间的语义方向;(6)面向游戏管线输出 LOD 化多分辨率卡集与 Unity/Unreal 直接可用的预制格式,减少美术最后一公里。
复现评估
复现条件相当友好。算力:全部模型在单张 NVIDIA RTX A6000(48GB)上训练——卡片 VAE 4 小时、点云模型约 10 小时、链 DiT 约 3 小时、图像模型(从点云模型初始化)约 27 小时,合计不到一天,属学术界可负担规模;推理 50 步 Euler、guidance 2,单发型约 1 秒。数据:基于 CHARM 公开发布的数据集(36,440 条 VRoid 训练发型、100 条测试发型及点云),链数据取自其中 32,599 条带链发型(共 438,672 条链);渲染管线(Blender 4.2 EEVEE + MToon 描边、8 视角 768px)、风格增广清单、改风格模型 Qwen-Image-Edit-2511 的筛选规则(头发 IoU≥0.85、角色 IoU≥0.9,池 21,336 张)均在附录完整给出。超参数极为详尽:模型尺寸、学习率、batch、EMA decay、CFG 概率、Fourier 频数、蒙皮阈值扫描(0.15/0.25/0.4/0.6 脸宽 × 0.01–0.3 坡道)全部可查。外部依赖为公开权重:冻结 DINOv3 ViT-L/16、Dora-VAE 1.1 编码器、SAM 3。项目页 hyzcluster.github.io/HairDeck 提供视频;作者与 CHARM 同组(CHARM 检查点已公开),若按惯例放出代码与权重,复现难度为中低——主要工作量在重跑 Blender 渲染与构建改风格图像池。
论文图表
效果总览:单张输入图像被转换为风格化发卡发型,并在头发上叠加生成的弹簧骨链(内部骨链画得更淡),发色取自输入图用于展示。
一图看懂论文要产出什么资产:不是网格也不是发丝,而是"卡片 + 骨链"这对可直接动画的组合,是理解任务定义的起点。
野外插画失败案例:抠图保留了道具、背景、尾巴、特效、帽子或犄角,这些元素最终都被生成为发卡。
明确指出方法对分割掩码质量的敏感性,是评估实际可用性与后续改进(掩码清洗、卡片过滤)的直接依据。