# 阿里云 NPC 角色形象与动作动画编辑器实验方案(2026-04-07) ## 1. 文档目的 本文不是再写一份泛化的“AI 角色动画大方案”,而是专门回答当前编辑器里要怎么实验这条链路: - 接入阿里云百炼的文生图、图生图、图生视频、参考视频动作模型 - 以 **NPC 角色形象 + 动作动画资产化** 为目标 - 最终产物仍然要落回当前项目的 `CharacterAssetPanel -> publish -> CharacterAnimator` 本文把方案拆成 4 条实验线: 1. 先文生角色形象图,再图生动作序列帧图并解析 2. 先文生角色形象图,再图生视频 3. 先文生角色形象图,再走“参考视频驱动”的动作模板链 4. 先文生角色形象图,再走“参考生视频 / 剧情演出”链 查阅与核对时间:`2026-04-07` --- ## 1.1 当前实现状态(2026-04-07) 当前仓库已经把下面这些能力接进 `CharacterAssetPanel`: - 阶段 A:`wan2.7-image-pro / wan2.7-image` 主形象候选生成 - 阶段 B:4 条动作方案都已接入真实模型 - 阶段 C:方案四单独拆成“演出片段”预览区 - 方案三增加了“内置模板库”入口,可直接把项目现有角色序列帧合成为参考视频 - 最近一次主形象任务 / 动作任务状态会回显到编辑器 - 已补动作模板列表接口与视频导入接口 当前实现的本地接口为: - `POST /api/character-visual/generate` - `GET /api/character-visual/jobs/:id` - `POST /api/character-visual/publish` - `POST /api/animation/generate` - `GET /api/animation/jobs/:id` - `GET /api/animation/templates` - `POST /api/animation/import-video` - `POST /api/animation/publish` 当前视频后处理采用: - 模型端生成真实视频 - 浏览器端抽帧、缩放、简单绿幕抠像 - 发布阶段再写入 `public/generated-animations` 也就是说,这份文档里原先一些“推荐下一步”已经落地,但还有一部分“更重的任务化路由”尚未继续拆开。 --- ## 2. 当前仓库里的可复用基础 这次实验不应该另起炉灶,因为仓库里已经有 3 个很关键的基础。 ### 2.1 编辑器入口已经存在 - 路由 `/character-asset-studio` 已经接到 `PresetEditor`,说明“角色资产工坊”入口是现成的。 - 当前核心页面是 `src/components/preset-editor/CharacterAssetPanel.tsx`。 ### 2.2 主形象 / 动作两段式 UI 已经存在 当前 `CharacterAssetPanel` 已经分成: - 阶段 A:主形象 - 阶段 B:基础动作 - 阶段 C:演出片段 旧版本里生成逻辑确实是本地 mock: - 主形象候选来自 `buildVisualCandidatesFromSource` - 动作草稿来自 `buildAnimationClipFromMaster` 现在这层已经被真实模型链路替换,但仍然保留了这些本地能力作为后处理工具: - 参考视频模板合成 - 视频抽帧 - 简单绿幕抠像 - 生成发布用帧集 ### 2.3 本地 API 插件里已经有 DashScope 接入样板 `scripts/dev-server/localApiPlugins.ts` 里已经接了自定义世界场景图: - 默认 DashScope base URL 已经存在 - 已经有异步任务创建、轮询、下载、落盘、写 manifest 的完整样板 这意味着这次实验最合理的做法是: - 继续沿用 `/api/*` 本地代理模式 - 新增角色图 / 角色动作的 job 路由 - 复用现有的任务轮询和文件落盘思路 --- ## 3. 阿里云当前可直接利用的模型能力 基于 2026-04-07 查阅的阿里云官方文档,当前和本实验最相关的是下面几类能力。 | 能力 | 推荐模型 | 适合用途 | 备注 | | --- | --- | --- | --- | | 文生图 / 图生图 / 图像编辑 | `wan2.7-image-pro`、`wan2.7-image` | 生成 NPC 主形象图、做风格统一、生成组图候选 | 官方文档明确支持多图参考与组图输出 | | 图生视频 | `wan2.7-i2v` | 单角色主形象转动作视频 | 支持首帧、首尾帧、续写片段 | | 参考生视频 | `wan2.7-r2v`、`wan2.6-r2v-flash` | 多参考图/参考视频驱动剧情演出 | 更适合演出,不是最优基础动作线 | | 图生动作 | `wan2.2-animate-move` | 主形象 + 参考动作视频 -> 标准动作视频 | 动作控制更强,适合模板动作库 | | 视频换人 | `wan2.2-animate-mix` | 模板视频里的角色替换成 NPC 形象 | 适合动作模板“复刻” | 需要特别说明: - 方案一会用到 `wan2.7-image-pro` 的组图 / 顺序组图能力,但 **官方并没有把它定义为“动作逐帧模型”**。 - 所以方案一是“利用图像模型能力去逼近动作帧生产”的实验线,不是官方标准动作生产线。 - 方案二、三、四更贴近阿里云官方为视频生成准备的主线能力。 --- ## 4. 方案一:文生角色形象图 -> 图生动作序列帧图 -> 解析成动画 ## 4.1 目标 直接得到 `png` 帧集,尽量少碰视频编解码。 ## 4.2 模型链路 1. 用 `wan2.7-image-pro` 生成 NPC 主形象图 2. 再把主形象图作为参考图输入 `wan2.7-image-pro` 3. 对每个动作槽位生成一组候选图片 4. 打开组图输出,必要时启用 `enable_sequential` 5. 本地按动作顺序解析这些图,写回帧序列 ## 4.3 为什么它成立 阿里云图像生成与编辑 API 当前明确支持: - 文生图 - 图生图 - 多图参考 - 一次输出多张图 - 顺序组图输出 `enable_sequential` 因此可以在编辑器里做这样的实验: - 输入:主形象图 + 动作描述 + 固定 seed - 输出:同一动作的一组关键帧候选 - 后处理:按姿态差异、角色一致性、武器完整度排序,补成帧集 ## 4.4 编辑器里的具体玩法 建议在当前“阶段 B:基础动作”里加一个策略选项: - `帧序列实验(图像组图)` 每次动作生成时: 1. 选择动作槽位,如 `idle / run / attack / hurt` 2. 选择目标帧数,如 `4 / 6 / 8` 3. 传入主形象图 4. 拼出动作提示词,例如“同一角色,侧身朝右,单人,全身,武器完整,连续 6 帧,跑步动作,从预备到迈步再到回收” 5. 请求组图结果 6. 本地做帧序评分 7. 生成 `frames/*.png + manifest.json` ## 4.5 优点 - 直接产出图片,天然适合当前项目的帧资产结构 - 不需要先生成视频再解帧 - 某些短动作可以直接人工挑帧,编辑器可控性高 - 对 `idle`、`acquire`、`hurt` 这种短动作实验门槛较低 ## 4.6 风险 - 最大风险是帧间一致性,特别容易出现衣摆、武器、手部、头发抖动 - 组图的“顺序性”不等于真正的视频时序连续性 - `run`、`jump`、`dash` 这类长动作很可能不稳定 - 如果没有额外姿态评分和人工筛选,最后帧序会很跳 ## 4.7 结论 这是 **低基础设施成本、高人工筛选成本** 的方案。 适合: - 编辑器里先做原型实验 - 验证 NPC 主形象一致性能不能维持到多帧 - 生成短动作关键帧 不适合直接作为第一版唯一主线。 --- ## 5. 方案二:文生角色形象图 -> 图生视频 -> 解帧资产化 ## 5.1 目标 先让视频模型负责动作连续性,再由本地后处理把视频转成项目动画资产。 ## 5.2 模型链路 1. 用 `wan2.7-image-pro` 生成 NPC 主形象图 2. 用 `wan2.7-i2v` 基于主形象图生成动作视频 3. 下载视频结果 4. 本地抽帧 5. 做裁切、稳帧、像素化、去闪烁 6. 输出序列帧、Sprite Sheet、manifest ## 5.3 方案二里的两种子模式 ### A. 首帧生视频 适合: - `attack` - `hurt` - `die` - `cast` 特点: - 主形象图作为 `first_frame` - 文本控制动作 - 最快接入,链路最短 ### B. 首尾帧生视频 适合: - `idle` - `run` - 循环站姿 特点: - `first_frame` 是起始站姿 - `last_frame` 是回正后的收尾姿态 - 更利于做循环动作和回到可衔接状态 ## 5.4 编辑器里的具体玩法 建议在“阶段 B:基础动作”里加: - `图生视频(首帧)` - `图生视频(首尾帧)` 参数建议: - 时长:`2s / 3s / 4s` - 目标 FPS:先统一导入到本地后再重采样 - 循环动作:是否要求首尾近似 - 提示词模板:按动作槽位固化 ## 5.5 优点 - 动作连续性通常明显强于方案一 - `wan2.7-i2v` 是官方主线能力,兼容性和迭代空间更好 - 很适合作为当前编辑器的第一条“真实动作生成”主线 - 本地后处理完成后,仍然能回到当前项目的帧资源体系 ## 5.6 风险 - 需要稳定的视频后处理链 - 解帧后仍要处理轮廓闪烁、脚底漂移、武器变形 - 主形象复杂时,单图生视频可能会有角色漂移 - 相比方案一,I/O 和处理耗时更高 ## 5.7 结论 这是 **最适合作为编辑器第一版正式实验主线** 的方案。 原因: - 模型能力更贴近官方主线 - 动作连续性通常更稳定 - 生成结果仍可资产化 --- ## 6. 方案三:文生角色形象图 -> 参考视频驱动动作模板链 ## 6.1 目标 不是只靠文本“想象动作”,而是给动作一个明确模板视频,让模型做可控迁移。 ## 6.2 模型链路 推荐两条可选子线: ### A. `wan2.2-animate-move` 输入: - NPC 主形象图 - 参考动作视频 输出: - NPC 执行该动作的视频 ### B. `wan2.2-animate-mix` 输入: - NPC 主形象图 - 模板视频 输出: - 保留模板视频场景/动作,但把角色替换成 NPC ## 6.3 它和方案二的本质区别 方案二是: - 主形象图 + 文本描述 -> 视频 方案三是: - 主形象图 + 模板动作视频 -> 视频 因此方案三最大的价值不是“更自由”,而是“更可控”。 ## 6.4 编辑器里的具体玩法 在“阶段 B:基础动作”里新增: - `动作模板库` 每个动作槽位先配一份官方/自制模板: - `idle_loop` - `run_side` - `attack_slash` - `hurt_back` - `die_fall` 工作流: 1. 先锁定 NPC 主形象 2. 选择动作槽位 3. 选择一个模板视频 4. 调用 `animate-move` 或 `animate-mix` 5. 下载视频 6. 解帧、稳帧、裁切 7. 发布为该动作槽位正式资产 ## 6.5 优点 - 可控性明显高于纯文本图生视频 - 非常适合做“基础动作槽位不能为空”的项目要求 - 一旦模板库建立起来,多角色批量复用效率很高 - 对 `run`、`attack`、`hurt` 这种标准动作尤其友好 ## 6.6 风险 - 要先建设动作模板库 - `wan2.2-animate-move` 官方输入更偏“单人清晰主体”,对严格侧视游戏素材要额外测试 - 模板视频如果镜头、背景、构图不统一,后处理成本会增加 - 模板库前期准备成本高于方案二 ## 6.7 结论 这是 **最适合做战斗基础动作标准化生产** 的方案。 如果只看“当前项目需要补齐 `idle / run / attack / hurt / die` 这些基础槽位”,方案三的长期价值甚至高于方案二。 建议排序: - 第一阶段先做方案二跑通链路 - 第二阶段尽快把方案三补成稳定模板库主线 --- ## 7. 方案四:文生角色形象图 -> 参考生视频 / 剧情演出链 ## 7.1 目标 这条线不是优先服务“战斗基础动作”,而是服务: - 剧情演出 - 招募演出 - NPC 说话/表态 - 立绘转小段表演视频 ## 7.2 模型链路 推荐: - `wan2.7-r2v` - 成本敏感或无声短片可考虑 `wan2.6-r2v-flash` 参考生视频支持把图片、视频作为参考条件输入,再结合文本生成视频。 ## 7.3 它和方案三的区别 方案三更像: - 我已经知道动作模板,就要把它迁过去 方案四更像: - 我给你角色参考和演出参考,请你生成一段新的镜头表达 所以它更适合: - NPC 出场特写 - 对话演出 - 剧情镜头 - 情绪表演 不适合优先用于: - 项目所有基础战斗动作槽位 ## 7.4 编辑器里的具体玩法 当前已单独拆成: - `演出片段` 字段建议: - 角色主形象 - 参考图最多若干张 - 参考视频片段 - 台词或情绪提示 - 是否保留音频 输出: - `preview.mp4` - 关键帧截图 - 可选封面图 ## 7.5 优点 - 角色一致性上限更高 - 更适合做剧情演出而不是纯动作片段 - 后续和 `CharacterChatModal`、NPC 招募、事件特写更容易联动 ## 7.6 风险 - 对当前战斗帧资产体系帮助没有前三条直接 - 更容易产出“好看的视频”,但不一定容易切成稳定序列帧 - 这条线如果过早投入,会稀释基础动作资产生产的主线 ## 7.7 结论 这是 **剧情演出增强线**,不建议抢在方案二、三之前做。 --- ## 8. 四种方案横向对比 | 方案 | 动作连续性 | 可控性 | 资产化难度 | 适合基础动作 | 适合剧情演出 | 推荐阶段 | | --- | --- | --- | --- | --- | --- | --- | | 方案一:组图帧序列 | 低到中 | 中 | 低到中 | 中 | 低 | 研究线 | | 方案二:图生视频 | 中到高 | 中 | 中到高 | 高 | 中 | 第一阶段主线 | | 方案三:模板视频驱动 | 高 | 高 | 中到高 | 很高 | 中 | 第一阶段后半 / 第二阶段主线 | | 方案四:参考生视频 | 中到高 | 中到高 | 高 | 中 | 很高 | 第三阶段增强 | 一句话总结: - 要最快落地:先做 **方案二** - 要把基础动作做稳:尽快补 **方案三** - 要低成本试帧:可以并行试 **方案一** - 要做剧情镜头:后续再做 **方案四** --- ## 9. 面向当前编辑器的落地状态与下一步 ## 9.1 第一轮 这一轮已经完成: - 阶段 A:`wan2.7-image-pro` 主形象生成 - 阶段 B:`wan2.7-i2v` 图生视频 原因: - 最少改 UI - 最快复用当前 `CharacterAssetPanel` - 最容易复用 `localApiPlugins.ts` 里现有 DashScope 异步任务模式 ## 9.2 第二轮 这一轮已经完成: - `图生视频` - `模板视频驱动` - `帧序列实验` 并且已经补上: - 方案三的内置模板库入口 - 方案四的独立“演出片段”区 ## 9.3 第三轮 下一步仍然值得继续做的是: - 把当前同步 `generate` 继续拆成显式 `jobs` - 把视频导入后处理继续拆成独立 `import-video` - 给方案三补更多正式模板素材与模板清单管理 - 给方案四补关键帧归档、封面和片段列表 --- ## 10. 推荐的编辑器任务路由 当前已落地接口: - `POST /api/character-visual/generate` - `GET /api/character-visual/jobs/:id` - `POST /api/character-visual/publish` - `POST /api/animation/generate` - `GET /api/animation/jobs/:id` - `GET /api/animation/templates` - `POST /api/animation/import-video` - `POST /api/animation/publish` 当前职责: ### `POST /api/character-visual/generate` 负责: - 调 `wan2.7-image-pro` - 生成主形象候选 - 下载并落盘 - 返回草稿图路径 ### `GET /api/character-visual/jobs/:id` 负责: - 返回最近一次主形象任务状态 - 返回模型、提示词、结果草稿等任务记录 ### `POST /api/animation/generate` 负责: - 按策略调不同模型 - `i2v` - `animate-move` - `animate-mix` - `r2v` - 返回顺序组图或视频草稿 ### `GET /api/animation/jobs/:id` 负责: - 返回最近一次动作任务状态 - 返回策略、模型、输出草稿路径和错误信息 ### `GET /api/animation/templates` 负责: - 返回方案三内置模板库清单 - 供编辑器选择 `idle_loop / run_side / attack_slash / hurt_back / die_fall` ### `POST /api/animation/import-video` 负责: - 把浏览器侧生成或上传的视频导入本地草稿目录 - 返回可复用的本地视频路径 ### `POST /api/animation/publish` 负责: - 把草稿帧写入 `public/generated-animations` - 生成动作 manifest - 更新 `characterOverrides.json` ### 仍建议后续继续加强的部分 - 把当前“同步 generate + 立即返回结果”继续拆成更完整的异步 job 生命周期 - 给 `import-video` 增加更重的服务端后处理,而不只是导入草稿 - 给模板库补正式素材管理与模板清单编辑 --- ## 11. 第一批建议验证的动作 不要一上来就跑全量 12 个基础动作,先验证 4 个最关键动作: 1. `idle` 2. `run` 3. `attack` 4. `hurt` 原因: - 这 4 个已经能覆盖循环动作、位移动作、攻击动作、受击动作 - 最容易测出“主形象一致性 + 动作连续性 + 贴地稳定性” --- ## 12. 具体推荐结论 如果只给当前编辑器实验一个最务实的建议: 1. **主形象统一先接 `wan2.7-image-pro`** 2. **动作第一条真链路先接方案二:`wan2.7-i2v`** 3. **基础动作标准化的主线尽快切到方案三:`wan2.2-animate-move / animate-mix`** 4. **方案一保留为低成本帧序实验线,方案四保留为剧情演出增强线** 换句话说: - 方案二负责“尽快跑通” - 方案三负责“真正稳定生产” - 方案一负责“低成本试错” - 方案四负责“后续演出升级” --- ## 13. 资料来源 阿里云官方文档: - 图像生成与编辑 API 参考: [https://help.aliyun.com/zh/model-studio/wan-image-generation-and-editing-api-reference](https://help.aliyun.com/zh/model-studio/wan-image-generation-and-editing-api-reference) - 图生视频 API 参考: [https://help.aliyun.com/zh/model-studio/image-to-video-api-reference/](https://help.aliyun.com/zh/model-studio/image-to-video-api-reference/) - 参考生视频 API 参考: [https://help.aliyun.com/zh/model-studio/reference-to-video-api-reference/](https://help.aliyun.com/zh/model-studio/reference-to-video-api-reference/) - 视频生成总览: [https://help.aliyun.com/zh/model-studio/use-video-generation](https://help.aliyun.com/zh/model-studio/use-video-generation) - 图生动作 API 参考: [https://help.aliyun.com/zh/model-studio/wan-video-to-video-api-reference](https://help.aliyun.com/zh/model-studio/wan-video-to-video-api-reference) 仓库内相关代码与文档: - `src/components/preset-editor/CharacterAssetPanel.tsx` - `src/components/preset-editor/characterAssetStudioModel.ts` - `src/components/preset-editor/characterAssetStudioPersistence.ts` - `src/routing/appRoutes.tsx` - `src/services/ai.ts` - `scripts/dev-server/localApiPlugins.ts` - `docs/technical/AI_CHARACTER_ANIMATION_TECHNICAL_SOLUTION_2026-04-04.md`