在做2D角色动画的时候,从立项到角色验证,投入一堆时间和人力,每次修改都需重新排期等待,效率非常低。为了提升效率,我们最近开始尝试开发一个工具——SpineAI,用AI辅助我们快速生成动画资源,帮助我们把由AI生成的图片快速适配到Spine骨骼动画体系里。这样一来,只需一人即可高效迭代动画风格,有效节省排期,减少等待与反复沟通时间,更快地验证创意想法。

简单来说,它主要做两件事:

一是换皮,通过AI出图的方式,给已有角色快速生成不同风格的皮肤;

二是角色生成,这个方向还在探索阶段,但目标是通过AI直接生成新角色,然后自动套用现有的骨骼和动画模板。(待攻克)

一、应用层面

1.1 换皮路线

换皮路线主要适用于已经拥有完整Spine骨骼动画的情况下,我们希望快速为这个骨骼结构替换上AI生成的不同风格的图片,快速实现“换皮”效果:

工作流:

(1)AI图片生成方法

在固定的骨骼框架之内,我们会针对各个部件,以“图生图”、文字干涉的方式,直接由AI生成对应的图片。这些图片直接对应已有骨骼的图片插槽结构,能与原有动画无缝衔接。

(2)图片重新打包(Atlas生成)

由于AI生成的图片尺寸、透明边界有一定的偏差,我们的工具自动对AI图片进行标准化裁剪,重新定义和打包到标准的Atlas纹理中,以供Spine加载。

(3)动作套用

利用已有的Spine角色动作,直接套用现成的骨骼动作,不需要额外调整动作。

(4)自动导入原有Spine JSON文件

图片重新打包后,会自动导入原有Spine的骨骼动画JSON文件,将新图片和已有动画快速关联起来,直接生成 Unity 中的预制体,支持即时预览。

换皮路线目前是较为成熟的工作流,我们已能够快速地将不同风格的AI图片融入已有的Spine动画体系,大大提高了资源替换与验证的效率。

1.2 "生成"路线

"生成"路线的目标是完全从零开始生成新的动画与骨骼结构,尤其适合我们尝试全新角色、动作和动画风格的场景。这条路线分成几个核心模块,目前有成熟的部分,也有一些技术难点尚待解决:

仍待攻克的难点:

目前,我们在动作库搭建与骨骼适配上,仍有一些技术难题没有完全解决,具体包括:

(1)2D骨骼重新定向问题

由于AI图片在生成过程中缺乏精准的骨骼结构定义,Spine骨骼的位置需要手动进行精细调整,无法完全自动化处理。这意味着我们在将图片整合进新骨骼结构时,还需要人工进行一定的骨骼位置和方向的调整。

(2)探索以三维动作捕捉数据辅助生成二维动画的可行性

为了更快速地生成大量动作,我们尝试用现成的三维动作捕捉数据进行二维化处理。但这一技术路线尚未完全攻克,二维化后动作表现如何更加流畅自然,骨骼匹配怎样更准确,仍处于探索和实验阶段。

一旦解决了这些问题,就能够实现动画自动化生产——从AI生成图片到骨骼适配、动作自动匹配,完全实现“一键式”动画生成,大幅减少动画制作周期和人工干预,实现动画风格的高频次迭代。

二、技术层面

2.1 AI

本篇文章不深入探讨AI生图的具体技术实现,目前已能通过AI生成角色各个身体部位的组件,并结合图片和文字描述,对角色的整体风格进行调控与塑造。

2.2 Unity 编辑器

在实际开发过程中,尽管 AI 能够快速高效地产生大量图像,但它们不能生成100%准确的图片。尤其在 Spine 动画资源使用中,由 AI 生成的图片常存在尺寸不统一、透明区域不规则等问题,无法直接导入 Spine 中使用。

为了快速解决这些问题,我们开发了 SpineAI 工具。它不仅能自动识别 AI 图像中有效区域并进行裁剪和优化,更能自动生成标准化的 Spine Atlas 文件和 Unity 预制体,便于美术与程序在 Unity 中快速验证与应用 AI 生成的资源。

2.2.1 AI接口双向传输

本小节不深入讲解AI生图的技术细节,仅简要说明AI接口的双向传输,通过Unity端的接口向AI服务器发送请求,结合图文等形式辅助生成图像,并将生成的图片回传至Unity端进行应用。

2.2.2 图片识别、拆分与打包

由于AI本身的随机性,AI生成的角色部件在尺寸、比例、边缘细节和透明像素分布上往往不统一,难以直接使用。

为了解决这些问题,SpineAI 工具编写了“自动拆分、优化和重新打包”的功能,针对 AI 生成的图片做出自动化适配和处理。

(1) Alpha预处理

工具通过像素分析自动检测 AI 图像中有效区域,排除透明像素区域。设置Alpha 阈值,自动识别出 AI 图中真正有效的边界,增加识别的正确率。

(2)查找子图:连通域(FloodFill)

AI生成的Spine图片是由角色所有零件组成的大图,需要拆分成多个子图,便于独立调整。这里使用的是FloodFill算法,遍历时只要找到了一个尚未访问且非透明的像素,对它周围 4 个像素(或 8 邻域)进行递归或堆栈式搜索,直到整块不透明区域被标记完毕,就可分割出若干离散的子图区域。

(3)尺寸统一与边缘优化

针对 AI 图片尺寸的不一致性,工具可根据用户在编辑器中输入的标准尺寸自动调整每张子图的大小;

(4)预乘 Alpha

贴图边缘带有半透明,可能会出现“黑边”或“发白”现象。预乘 Alpha可以在一定程度上减少这种问题。

(5)设置边缘填充和输出贴图的尺寸

为了防止子图间距过近,增加了边缘填充功能,防止渲染时出现图片交叉等问题。同时提供输出贴图的尺寸范围,更灵活的调整贴图大小。

最终,工具会将处理后的所有子图重新组合为一张贴图,供 Spine 加载使用。

2.2.3 Atlas文本生成

AI 提供的图片经过前一步骤处理后虽然完成了尺寸的统一,但要使其真正可供 Spine 使用,还需进一步生成符合 Spine 规范的 `.atlas.txt` 文件。这个文件定义了每个子图在 Atlas 中的位置、大小和偏移信息。

  • 当子图重组到 Atlas 纹理中后,获取其宽高与所有子图在大图上的坐标,工具会自动生成 `.atlas.txt` 文件;
  • 文件按照 Spine 标准,自动记录子图的名称、坐标位置、尺寸、原始尺寸、偏移量等信息;

2.2.4 预制体直出

当AI生成的图片处理完成并转化为Spine可用的资源后,我们往往还需要在Unity中快速查看并验证这些动画资源的表现。传统方式是手动创建预制体,再逐个拖拽素材关联,效率较低。为此,SpineAI 提供了一键生成Unity预制体的功能,并实时查看动画效果。

  • 用户只需点击编辑器中的按钮,即可自动在资源输出文件夹生成一个带有`SkeletonAnimation`组件的完整预制体;
  • 工具自动加载并关联好`SkeletonDataAsset`、`AtlasAsset`、材质和贴图;
  • 在编辑器窗口中直接提供可视化预览,使用Unity的`PreviewRenderUtility`技术,无需将预制体拖入实际游戏场景,即可实时播放并查看动画效果。

小结

SpineAI 工具针对AI图片生成过程中的特殊性,提供了一站式的自动化资源适配解决方案。从AI图片的自动裁剪与优化,到Atlas自动生成和一键预制体输出,整个流程快速自动化执行,快速高效,显著减少了重复性工作。

三、思考

在完成了上述功能后,SpineAI 工具确实给我们带来了效率自动化的提升,但在实践中也逐渐暴露出一些局限性,以下是当前遇到的主要问题以及后续可能的改进思路:

1.贴图排布的空间利用率不足

目前采用的是最基本的行优先排版方式,虽然简单直接,但在面对多种大小的子图时,往往会出现大量空白浪费。后续可引入更复杂的排布算法(如二叉树分割、最大矩形空闲空间搜索等),以在有限空间内更好地填充子图,减少浪费并提升合图性能。

2.像素不连接却属于同一部件的问题

AI 生成的某些角色部件(例如耳朵、眼睛)在图像上可能出现“分散像素”,因为肉眼上它们是同一部件,但像素上并不连续;工具目前使用的是“连通域”算法进行拆分,这就会把它们识别成两个或更多子图,一旦拆成多个子图,就会跟骨骼插槽对应错位,后续在 Spine 会出现错误。

3.子图过小影响AI识别

如果零件过多且尺寸都比较小,AI 生成的图像中每个细节位置可能出现错误,导致拆分效果不稳定。

整体来说,SpineAI 在“AI 图像 -> Spine 资源”的自动化流程上已经打下了很好的基础,但要想完全取代人工流程、实现真正的一键式动画生成,还需要我们在图像处理、排布算法,以及骨骼 / 动作适配等方面不断探索。通过后续的持续迭代,相信工具会变得更加完善。

欢迎加入我们!

感兴趣的同学可以投递简历至:CYouEngine@cyou-inc.com

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐