see-through-demo / docs /blog_zh_seethrough.md
24yearsold's picture
update: add ComfyUI Node Extension mention to description
b55a1fc verified
|
Raw
History Blame Contribute Delete
5.01 kB

A newer version of the Gradio SDK is available: 6.20.0

Upgrade

See-through: 把一张立绘拆成带深度的分层PSD

又欠了好久的事情了。

这几年一直在断断续续地做动漫相关的项目,从最早的漫画线稿提取到后来的一些漫画/动画的工作,基本上都是围绕着二次元的内容在转。去年有个人问我:你能做条漫的自动动画吗?我说:“想做这个得拆件啊?”,于是便有了这个工作。

这工作是干嘛的

简单说,就是给一张动漫角色的立绘(单张图),我们的模型可以将输入自动拆成一堆带透明通道的语义分层,按深度排好序,输出一个分层PSD。头发、脸、眼睛、衣服、配饰,每一层都是完整修复过的,被遮挡的部分也补好了。做Sprite拆立绘的朋友应该能理解这个需求,手工做这件事还是比较麻烦的。

直接看结果比较直观,大家可以去GitHub上自己试。有人在两个小时之内帮我们写了个ComfyUI的node,直接拖图就能输出分层PSD了。

本质上是什么

我们标了一大堆Live2D模型的数据。

Live2D模型天然就是分层的,每堆Drawable就是一个独立的图层,有深度、有遮挡关系。所以我们写了一个提取工具,给Live2D模型做了分层标注。这些标注的质量相当不错,因为Live2D本身的分层就是艺术家们自己设计的。

但是标注这件事也没那么简单。纯靠人工去标不现实,我们一开始也试过,效率太低了(一张图几百个Drawables,而且还有遮挡,一致性很差)。所以最后的方案是从SAM bootstrap过去的:先用SAM做一遍粗标注(2D的,不算很准),然后在此基础上把这些SAM的标注迁移到2.5D(Live2D)上去。2.5D的标注(也就是带深度的分层)最终都经过了一次人手检查过的,质量有保证。

版权原因,这批Live2D数据本身没办法公开发布。但是用它们训练出来的模型是可以用的,我们也已经把模型权重放出来了。技术上核心是两个模块:一个基于SDXL的LayerDiff 3D负责生成带透明度的分层,一个微调过的Marigold负责估计深度。两个拼起来就能把一张图拆成分层PSD了。

结果怎么样

简单说几个我觉得做得还可以的点:

  • 前发和后发能分开
  • 被遮挡的区域修复质量还不错,至少不会有明显的artifact
  • 深度排序基本合理,多数情况下图层叠起来和原图一致

当然也有做得不好的地方,复杂的配饰和道具有时候会分错层,过于非常规的姿势也容易翻车。毕竟训练数据大部分还是比较标准的立绘。一个常见的大问题是裙筒/裤腿和腿的前后关系,我们没给裙子/裤子/choker这种环绕着身体的东西分前后两层,所以有时候会分错。不过可以根据深度做一次后处理,效果会好一些。 还有些时候分层会有一些重叠的地方,特别是裙子下摆,这个和训练标注的时候很难分别到底是连衣裙还是上衣+裙子有关。我们也在考虑后续的改进方案。

真的能取代Live2D吗

我觉得不太能。

把一张图拆成图层只是Live2D流程里最前面的一步。真正的Live2D还需要Rigging,变形网格、物理参数、动作曲线,这才是最费时间也最考验功力的部分。而且专业的Live2D作品,分层的方式是和后续的变形设计一起考虑的,哪里该多分一层、哪里该合并,都是有艺术意图的决策,不是自动化能完全替代的。

不过我们至少可以把这个前置的拆图工作自动化了,至少应该能帮一部分用户节省一些时间。

为什么还在做这些

说实话做这种小众方向不太"划算"。和做大模型、做agent比起来,做二次元工具的影响力和关注度都要小得多。

但我一直都很喜欢这个方向。一方面是做习惯了(我不太承认我是二次元)。另一方面是受到了一些人的启发,特别是Lvmin Zhang。他做了什么自不用我多说,但更重要的是他做事的态度。说句心里话,没有他的工作和开源精神,我可能早就失去继续做下去的动力了。

还要感谢Spellbrush团队的支持和合作。在这个方向上有志同道合的人一起做事,比什么都重要。

刚好自己也有funding(感谢RGC),就继续做下去了。

还有什么想说的

代码和模型都在GitHub,GUI、ComfyUI节点(感谢@jtydhr88也都有了。训练代码之后也会放出来。

Paper在这里:arXiv:2602.03749,很高兴,这是一个SIGGRAPH级别的工作,虽然是conference track。

就说这么多,谢谢大家。