Implement scene-based chapter quest progression
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
2026-04-08 11:58:47 +08:00
parent 9d2fc9e4b8
commit bd9fdcbe31
170 changed files with 18259 additions and 1049 deletions

View File

@@ -0,0 +1,645 @@
# 阿里云 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` 主形象候选生成
- 阶段 B4 条动作方案都已接入真实模型
- 阶段 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`

View File

@@ -0,0 +1,850 @@
# 基于 Qwen-Image-2.0 复刻 PixelMotion 的全流程操作手册2026-04-07
## 1. 文档目的
基于 [PIXELMOTION_TECHNICAL_BREAKDOWN_2026-04-04.md](./PIXELMOTION_TECHNICAL_BREAKDOWN_2026-04-04.md) 的拆解结果,给出一套用 `Qwen-Image-2.0` 复现 PixelMotion 核心能力的实际操作手册。
本文重点不是泛泛讲“可以做”,而是把下面这些环节写成可以直接照着执行的流程:
- 如何先把资产格式定死成 `4x4 / 16 帧 / Sprite Sheet PNG`
- 如何先锁角色,再做动作
- 如何给 `Qwen-Image-2.0` 写更像 PixelMotion 的强约束提示词
- 如何修坏帧、调帧序、调 FPS并导出 PNG / GIF / Set
---
## 2. 一句话结论
如果要用 `Qwen-Image-2.0` 复刻 PixelMotion正确思路不是“让模型自由发挥做动画”而是
1. 先把输出契约定死成 `4x4 + 16 帧 + 同方向 + 同中心点`
2. 先做一张稳定的角色标准图,把角色身份锁住
3. 再把动作写成**模板化的 16 帧节奏描述**
4.`Qwen-Image-2.0` 生成整张 Sprite Sheet 或半成品
5. 用同模型继续做修帧和一致性修补
6. 把不好的一小部分问题交给编辑器兜底,而不是要求模型一次全对
这才是最接近 PixelMotion 真实产品逻辑的复现路径。
---
## 3. 复刻目标边界
这份方案默认只用 `Qwen-Image-2.0` 这一条图像模型主线,不依赖视频模型。
也就是说,我们复刻的是 PixelMotion 最核心的能力:
- 上传或提供角色参考
- 选择动作
- 生成 `16` 帧 Sprite Sheet
- 编辑坏帧
- 导出 PNG / GIF / 角色动作集
而不是先走:
- 图生视频
- 视频抽帧
- 再转 Sprite Sheet
因为 PixelMotion 的关键也不是“视频生成”,而是“高约束的精灵表资产生产流水线”。
---
## 4. 先定死的资产契约
在写任何提示词之前,先把下面几件事固定下来,不要让用户自由选。
### 4.1 单个动作的标准输出
- 单动作固定输出一张 `Sprite Sheet PNG`
- 固定 `4``4`
- 固定 `16`
- 固定角色始终朝右
- 固定全身入镜
- 固定地面线高度基本一致
- 固定角色在格子中的尺度接近一致
### 4.2 建议分辨率
- 快速试错:`1024*1024`
- 武器细节较多或动作较复杂:`1536*1536`
对应单格尺寸大致为:
- `1024*1024` -> 每格约 `256*256`
- `1536*1536` -> 每格约 `384*384`
### 4.3 背景策略
不要一开始就要求复杂场景背景。
建议统一:
- 纯白背景
- 或纯绿背景
- 或极浅灰纯色背景
原因很简单:
- 更容易做后续去背景
- 更容易观察轮廓漂移
- 更容易判断脚底是否稳定
### 4.4 必存元数据
每个动作至少保存:
- `action`
- `rows=4`
- `cols=4`
- `frameCount=16`
- `fps`
- `activeFrames`
- `frameOrder`
- `seed`
- `masterPrompt`
- `negativePrompt`
---
## 5. Qwen-Image-2.0 能力与参数建议
根据阿里云官方文档,截至 `2026-04-07``Qwen-Image-2.0` 属于**图像生成与编辑融合模型**,适合我们这条链路,因为它既能做:
- 文生图
- 图生图 / 图像编辑
- 多图融合
也支持我们最需要的几个参数:
- `seed`
- `size`
- `negative_prompt`
- `prompt_extend`
- 多图输入编辑
### 5.1 推荐参数
| 参数 | 推荐值 | 用途 |
| --- | --- | --- |
| `model` | `qwen-image-2.0` | 主线模型 |
| `size` | `1024*1024``1536*1536` | 精灵表正方形输出 |
| `watermark` | `false` | 不要水印 |
| `prompt_extend` | 试错期 `true`,定稿期 `false` | 先帮你补描述,再固定可复现性 |
| `seed` | 每个动作固定一个整数 | 保持相对稳定 |
| `negative_prompt` | 始终填写 | 压住镜头漂移、变脸、缺手缺脚等问题 |
### 5.2 推荐的参考输入包
如果走编辑模式,推荐最多准备 3 张输入图:
1. `master.png`
角色锁定图,只负责身份一致性
2. `pose_board.png`
动作参考板,负责姿势节奏
3. `draft_sheet.png`
当前草稿图,负责网格与已有结果延续
这三张图的职责不要混。
### 5.3 成本估算
按阿里云中国内地官方价格,`qwen-image-2.0` 文生图和图像编辑都是 `0.2 元/张`
粗略估算一条动作的成本:
- 初版候选 `4`
- 修帧 `2~4`
- 最终补救 `1~2`
合计通常在 `7~10` 张,约 `1.4 ~ 2 元 / 动作`
如果先做 `idle / run / attack / hurt / die` 五个动作,首轮实验成本通常在 `7 ~ 10 元` 量级,可以接受。
---
## 6. 整体流程总览
推荐严格按下面顺序做,不要上来就直接要求模型“生成完美 16 帧攻击动画”。
### 6.1 主流程
1. 先产出角色标准图 `master.png`
2. 给动作写模板,不直接写一句“跑步”就丢模型
3. 先出整张 `4x4` 精灵表草稿
4. 挑一张最接近的版本
5. 对坏帧做局部修复
6. 进入编辑器调 `activeFrames / frameOrder / fps`
7. 导出 `sheet.png / gif / set`
### 6.2 两种执行模式
#### 模式 A最快跑通
- 角色标准图
- 直接整张 `4x4` 生成
- 编辑器隐藏坏帧
适合:
- 首次试验
- 做 MVP
- 快速验证某个动作模板是否成立
#### 模式 B更接近生产
- 角色标准图
- 动作模板卡
- 整张 `4x4` 生成多候选
- 单帧修复
- 收尾帧修复
- 编辑器保存布局
适合:
- 真正想做出可复用动作库
- 要求角色一致性更高
- 武器 / 发型 /配件不允许乱飞
后文默认都按模式 B 来写。
---
## 7. 第一步:锁定角色标准图
这一阶段的目标不是“画一张最好看的海报”,而是产出一张适合后续动作生成的**标准角色图**。
### 7.1 标准图要求
- 单人
- 全身
- 朝右
- 脚底完整可见
- 武器完整
- 背景纯净
- 轮廓清楚
- 不能是正面立绘
- 不能是夸张透视
### 7.2 文生标准图提示词模板
```text
单人全身2D 横版游戏角色标准设定图,角色始终朝右侧,侧视角为主,站立待机姿态,脚底完整可见,武器完整,身体比例稳定,轮廓清楚,适合后续制作 sprite sheet 动画。
角色设定:
[角色性别/年龄感]
[发型]
[服装]
[武器]
[配色]
[身份气质]
画面要求:
纯色浅背景,画面中心构图,角色占画面高度 75% 左右,不要裁切头顶和脚底,不要多角色,不要复杂环境,不要镜头透视,不要特写。
风格要求:
高可读性游戏角色设定图,偏像素动画前置设计稿,形体清晰,服装层次明确,武器握持合理,便于后续连续动作生成。
```
### 7.3 图生标准图提示词模板
如果你已经有角色参考图,推荐改成下面这种写法:
```text
使用图1作为唯一角色身份参考保留该角色的发型、脸型、服装主结构、武器类型和整体配色将其规范成适合 2D 横版游戏 sprite 动画制作的标准角色图。
要求:
单人,全身,始终朝右,站立待机,脚底完整可见,武器完整,轮廓清晰,背景改为纯浅色,移除杂乱环境和多余装饰,角色保持在画面中央,方便后续生成动作精灵表。
不要把角色改成正面,不要把角色改成三分之二视角,不要改发型,不要改武器手,不要裁切脚底。
```
### 7.4 角色标准图负向提示词
```text
正面视角左朝向镜头透视半身像脚被裁切头顶被裁切多角色复杂背景武器消失武器换手额外手臂额外腿服装变化脸部变化过度写实模糊运动模糊强光斑文字水印UI 元素
```
### 7.5 通过标准
满足下面 5 条再进入下一步:
1. 一眼就能看出角色身份
2. 朝向明确是右侧
3. 全身完整
4. 武器没有错手或消失
5. 这张图可以作为所有动作的唯一主参考
---
## 8. 第二步:把动作需求翻译成模板卡
不要把“跑步”“攻击”“比心”这种裸词直接丢给模型。
应该先把动作翻成结构化模板。
### 8.1 动作模板卡字段
每个动作先写一张卡,字段固定如下:
- `actionName`
- `loop`
- `facing`
- `bodyTravel`
- `weaponRule`
- `frames1to4`
- `frames5to8`
- `frames9to12`
- `frames13to16`
- `endState`
### 8.2 动作模板卡通用写法
```text
动作名:[actionName]
是否循环:[是/否]
角色朝向:始终朝右
身体位移:[原地 / 小幅前移 / 中幅前移]
武器规则:[武器始终在右手 / 双手握持 / 不换手]
1-4 帧:[起势描述]
5-8 帧:[主动作前半]
9-12 帧:[主动作后半]
13-16 帧:[收势或回正]
结尾要求:[与首帧接近 / 停在收招姿态 / 停在受击后姿态]
```
### 8.3 常用动作模板示例
#### `idle`
```text
动作名idle
是否循环:是
角色朝向:始终朝右
身体位移:原地
武器规则:武器始终在右手,位置稳定
1-4 帧:稳定站姿,轻微呼吸起伏
5-8 帧:胸腔与肩膀轻微抬起,衣摆轻微变化
9-12 帧:呼气回落,重心恢复
13-16 帧:逐渐回到与首帧接近的站姿
结尾要求:第 16 帧自然衔接第 1 帧
```
#### `run`
```text
动作名run
是否循环:是
角色朝向:始终朝右
身体位移:小幅前移但角色中心基本固定
武器规则:武器始终在右手,不换手
1-4 帧:右腿前摆,左腿后蹬,身体前倾
5-8 帧:双腿交替经过身体下方,手臂反向摆动
9-12 帧:左腿前摆,右腿后蹬,身体继续前倾
13-16 帧:回到与 1-4 帧对应的另一半跑步循环
结尾要求:第 16 帧能与第 1 帧无缝循环
```
#### `attack_slash`
```text
动作名attack_slash
是否循环:否
角色朝向:始终朝右
身体位移:中幅前探
武器规则:右手持剑,始终右手,不换手
1-4 帧:轻微收身蓄力,剑向后收
5-8 帧:重心前压,挥剑开始
9-12 帧:斩击达到最大幅度,动作最有力量
13-16 帧:顺势收刀,回到可接下一动作的姿态
结尾要求:第 16 帧停在收招后稳定姿态
```
#### `hurt`
```text
动作名hurt
是否循环:否
角色朝向:始终朝右
身体位移:原地或极小后仰
武器规则:武器不要脱手,不要换手
1-4 帧:突然受击,头肩后仰
5-8 帧:身体失衡最明显
9-12 帧:手臂和武器随受击惯性摆动
13-16 帧:逐渐恢复到勉强站稳的姿态
结尾要求:第 16 帧能接回 idle 或下一个动作
```
---
## 9. 第三步:生成整张 4x4 Sprite Sheet
这是最关键的一步。
建议优先走:
- `图像编辑模式`
- 输入 `master.png`
- 如有动作参考,再输入 `pose_board.png`
- 输出一整张 `4x4`
### 9.1 通用主提示词骨架
```text
使用图1作为唯一角色身份参考[如果有图2则使用图2作为动作节奏参考]。
生成一张 4x4 的 sprite sheet共 16 帧,展示同一个角色的连续动作。角色始终朝右,全身完整出现在每一个格子里,脚底始终可见,地面线高度基本一致,角色在每一格中的尺度基本一致,镜头固定不变,不要切换景别,不要切换视角,不要左右翻转。
动作要求:
[粘贴动作模板卡的 1-16 帧描述]
输出要求:
每一格都要清晰分开,网格顺序从左到右、从上到下,动作连续,首尾关系明确,轮廓稳定,发型稳定,服装结构稳定,武器始终在正确的手中,背景为纯浅色,适合后续切成 sprite frames。
风格要求:
2D side-view game sprite sheetreadable silhouetteclean outlineconsistent character designanimation-readygame asset oriented。
```
### 9.2 全局负向提示词
```text
多角色左右朝向混乱前视图背视图镜头切换景别变化特写脚底裁切头顶裁切缺手缺脚额外肢体武器消失武器换手服装变化脸部变化发型变化动作不连续重复帧过多构图混乱背景复杂强透视运动模糊残影文字水印UI边框覆盖角色
```
### 9.3 `idle` 整表提示词示例
```text
使用图1作为唯一角色身份参考。
生成一张 4x4 的 sprite sheet共 16 帧,内容是同一个角色的 idle 循环动画。角色始终朝右,全身完整,脚底始终可见,地面线稳定,角色尺度稳定,镜头固定。
动作节奏:
1-4 帧稳定站姿并轻微吸气,
5-8 帧胸腔和肩膀轻微抬起,衣摆和头发只有极轻微变化,
9-12 帧呼气回落,
13-16 帧逐渐回到与第 1 帧接近的站姿。
要求循环自然16 帧能无缝接回 1 帧。每格清晰分开,背景纯浅色,轮廓清楚,服装和武器绝对保持一致。
2D side-view game sprite sheetclean silhouetteconsistent characteranimation-ready。
```
### 9.4 `run` 整表提示词示例
```text
使用图1作为唯一角色身份参考使用图2作为跑步动作节奏参考。
生成一张 4x4 的 sprite sheet共 16 帧,内容是同一个角色的 run 循环动画。角色始终朝右,全身完整,地面线稳定,角色中心基本固定,镜头固定。
动作节奏:
1-4 帧右腿前摆左腿后蹬,身体略前倾,
5-8 帧双腿交叉经过身体下方,手臂反向摆动,
9-12 帧左腿前摆右腿后蹬,
13-16 帧完成另一半跑步循环并回到可接第 1 帧的状态。
要求首尾闭环,脚步节奏清楚,手臂摆动自然,武器始终在右手,不换手,不消失。
2D side-view game sprite sheetside scrolling runner animationclean outlineconsistent anatomygame asset oriented。
```
### 9.5 `attack_slash` 整表提示词示例
```text
使用图1作为唯一角色身份参考使用图2作为攻击动作节奏参考。
生成一张 4x4 的 sprite sheet共 16 帧,内容是同一个角色的侧身挥砍攻击动作。角色始终朝右,全身完整,镜头固定,地面线稳定。
动作节奏:
1-4 帧轻微收身蓄力,剑向后收,
5-8 帧身体前压,挥剑开始,
9-12 帧斩击达到最大幅度,动作力量最强,
13-16 帧顺势收刀,回到可接下一动作的稳定姿态。
要求动作有明显起势、主挥砍、收势三个阶段;剑始终在右手,不能换手,不能消失;角色脸部、服装、武器、发型在 16 帧中保持同一人。
2D side-view attack sprite sheetclear slash motionconsistent character designclean silhouetteanimation-ready。
```
### 9.6 建议的生成策略
不要只生成 1 张。
建议每个动作先做 `4` 个候选:
- 提示词相同
- `seed` 不同
例如:
- `idle`: `1101 / 1102 / 1103 / 1104`
- `run`: `2101 / 2102 / 2103 / 2104`
- `attack`: `3101 / 3102 / 3103 / 3104`
这样你能更快选出“最少需要修”的那一张,而不是死磕单张。
---
## 10. 第四步:筛选结果时看什么
不要凭“感觉还行”选图,按下面的检查顺序来。
### 10.1 第一优先级
- 是不是同一个角色
- 朝向是不是始终一致
- 武器有没有消失或换手
- 脚底有没有持续落在同一条地面线附近
### 10.2 第二优先级
- 动作节奏是不是清楚
- 首尾是否可循环
- 斩击或受击是否有明确峰值
### 10.3 第三优先级
- 衣摆 / 头发是否轻微稳定
- 背景是否干净
- 单格边界是否清楚
### 10.4 取舍原则
- 如果坏帧在 `1~3` 帧,优先修
- 如果坏帧在 `4~6` 帧,看是否能靠隐藏和调序救
- 如果超过 `6` 帧都不稳,直接换候选,不要浪费修图次数
---
## 11. 第五步:坏帧修复
PixelMotion 很关键的一点,不是要求 16 帧都完美,而是允许修。
这里也一样。
### 11.1 修帧原则
优先修:
- 武器消失
- 手脚畸形
- 脸突然变了
- 某一帧朝向错了
- 某一帧幅度过大导致不连贯
不要优先修:
- 背景一点点噪点
- 很轻微的衣摆变化
- 肉眼几乎不影响播放的小细节
### 11.2 单帧修复操作
推荐做法:
1.`sheet.png` 裁出坏帧单格
2. 准备上一帧或下一帧的好帧
3. 再带上 `master.png`
4.`Qwen-Image-2.0` 只重绘这一格
推荐输入图职责:
- 图1`master.png`
- 图2前一帧或后一帧的好帧
- 图3当前坏帧
### 11.3 单帧修复提示词模板
```text
使用图1作为角色身份与服装武器的唯一标准参考图2的动作连续性修复图3这一个单帧。
要求输出一张单独的动作帧图片不要网格不要背景细节。角色始终朝右全身完整脚底位置稳定保持与图2连续并且与图1是同一个角色。修复图3中的错误使这一帧适合插回原来的 sprite sheet 中。
重点修复:
[这里明确写问题,例如:右手缺失 / 武器消失 / 身体朝向错误 / 头部变形]
保持不变:
发型、服装结构、主配色、武器类型、朝向。
```
### 11.4 循环收尾修复提示词模板
如果 `idle``run` 的第 16 帧接不回第 1 帧,单独修第 16 帧。
```text
使用图1作为角色身份标准参考图2作为第 1 帧起始姿态修复图3作为第 16 帧结束姿态。
目标是让第 16 帧自然衔接第 1 帧,形成循环动画。角色始终朝右,全身完整,脚底稳定,服装武器不变,动作幅度自然,不要跳变。
```
### 11.5 武器一致性修复提示词模板
```text
使用图1作为角色与武器标准修复图2这一帧。
要求武器始终在右手武器长度、形状和握持方式与图1一致不要消失不要换手不要新增第二把武器。只修复武器和持握关系其余动作姿态尽量保持原样。
```
---
## 12. 第六步:编辑器兜底规则
这一层就是 PixelMotion 真正有价值的地方,必须做。
### 12.1 编辑器必须有的能力
-`4x4` 自动切帧
- 逐帧预览
- 播放预览
- `activeFrames` 开关
- `frameOrder` 拖拽排序
- `fps` 调整
- 保存动作元数据
- 导出 PNG
- 导出 GIF
### 12.2 最小可用的操作规则
#### `activeFrames`
适合处理:
- 某一帧彻底坏掉
- 某一帧重复度太高
- 某一帧突然变脸
#### `frameOrder`
适合处理:
- 动作节奏顺序错位
- 峰值帧放早了或放晚了
- 跑步循环左右腿对应顺序不顺
#### `fps`
建议默认值:
- `idle`: `8`
- `run`: `10 ~ 12`
- `attack`: `10 ~ 12`
- `hurt`: `8 ~ 10`
- `die`: `8`
### 12.3 什么时候该隐藏帧,什么时候该重修
优先隐藏:
- 重复帧
- 接近但无意义的过渡帧
优先重修:
- 武器错了
- 手脚断了
- 脸变了
- 朝向反了
---
## 13. 第七步:导出与资产落盘
推荐导出三种产物:
### 13.1 主资产
- `sheet.png`
### 13.2 预览资产
- `preview.gif`
### 13.3 元数据
```json
{
"action": "run",
"rows": 4,
"cols": 4,
"frameCount": 16,
"fps": 12,
"activeFrames": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
"frameOrder": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
"seed": 2102
}
```
### 13.4 推荐目录结构
```text
pixelmotion-qwen/
refs/
master.png
pose_board_run.png
drafts/
run_candidate_2101.png
run_candidate_2102.png
repairs/
run_frame_07_fix.png
exports/
run/
sheet.png
preview.gif
metadata.json
```
---
## 14. 一套可以直接抄走的负向提示词
下面这组建议作为默认全局负向提示词起步,后面按动作微调。
```text
多角色左右镜像混乱前视图背视图特写镜头切换景别变化头顶裁切脚底裁切脚离地漂浮缺手缺脚额外肢体武器消失武器换手服装变化脸部变化发型变化动作不连续重复帧过多模糊运动模糊背景复杂文字水印UI 元素,边框覆盖角色
```
---
## 15. 提示词拼装公式
如果你不想每次都重写整段,可以按这个公式拼。
### 15.1 角色锁定模块
```text
使用图1作为唯一角色身份参考保持发型、脸型、服装主结构、主配色、武器类型一致。
```
### 15.2 构图锁定模块
```text
角色始终朝右,全身完整,脚底始终可见,地面线稳定,镜头固定,角色尺度稳定。
```
### 15.3 网格输出模块
```text
生成一张 4x4 的 sprite sheet共 16 帧,从左到右、从上到下排列,每格清晰分开。
```
### 15.4 动作模板模块
```text
1-4 帧起势5-8 帧主动作前半9-12 帧主动作后半13-16 帧收势或回正。
```
### 15.5 风格模块
```text
2D side-view game sprite sheetclean silhouetteanimation-readygame asset oriented。
```
把这 5 段拼起来,再插入具体动作内容,基本就是一条能用的 PixelMotion 风格提示词。
---
## 16. 常见失败与修正方式
### 16.1 角色每帧都像不同人
修正:
- 强化“图1为唯一角色身份参考”
- 先不要复杂背景
- 先不要复杂光影
- 用编辑模式,不要只用纯文生图
### 16.2 跑步像站桩抖动
修正:
- 动作模板里明确写腿部交换节奏
- 写清“身体略前倾,手臂反向摆动”
- 写清“第 16 帧能接回第 1 帧”
### 16.3 攻击看起来没力量
修正:
- 明确写“1-4 蓄力5-8 发动9-12 峰值13-16 收势”
- 明确写“第 9-12 帧是最大动作幅度”
### 16.4 武器容易消失
修正:
- 在主体描述里写一次武器
- 在动作规则里再写一次“始终在右手”
- 在负向提示词里再写“武器消失,武器换手”
### 16.5 网格里角色大小忽大忽小
修正:
- 强化“角色在每一格中的尺度基本一致”
- 背景改成纯色
- 减少镜头语言
---
## 17. 推荐的第一批动作
如果你第一次搭这条链,不要一上来就做十几个动作。
先做下面 4 个:
1. `idle`
2. `run`
3. `attack_slash`
4. `hurt`
原因:
- 足够覆盖循环动作、位移动作、峰值动作、受击动作
- 最容易暴露角色一致性问题
- 最容易验证提示词模板是否成立
---
## 18. 最后给一个最务实的落地建议
如果你要做第一版,建议这样推进:
### 第 1 轮
- 只支持上传 `master.png`
- 只支持 `idle / run / attack / hurt`
- 只支持 `4x4 / 16 帧`
- 只支持隐藏帧、调序、调 FPS
### 第 2 轮
- 加坏帧局部修复
- 加循环首尾修复
- 加透明背景导出
### 第 3 轮
- 加动作库
- 加资产库
- 加社区 Showcase
这就已经非常像 PixelMotion 的核心骨架了。
---
## 19. 参考资料
- 仓库内拆解文档:
[PIXELMOTION_TECHNICAL_BREAKDOWN_2026-04-04.md](./PIXELMOTION_TECHNICAL_BREAKDOWN_2026-04-04.md)
- 阿里云百炼 Qwen-Image 文生图说明:
[https://help.aliyun.com/zh/model-studio/text-to-image](https://help.aliyun.com/zh/model-studio/text-to-image)
- 阿里云百炼文生图 Prompt 指南:
[https://help.aliyun.com/zh/model-studio/text-to-image-prompt](https://help.aliyun.com/zh/model-studio/text-to-image-prompt)
- 阿里云百炼 Qwen-Image API
[https://help.aliyun.com/zh/model-studio/qwen-image-api](https://help.aliyun.com/zh/model-studio/qwen-image-api)
- 阿里云百炼 Qwen-Image 编辑说明:
[https://help.aliyun.com/zh/model-studio/qwen-image-edit-guide](https://help.aliyun.com/zh/model-studio/qwen-image-edit-guide)
- 阿里云百炼 Qwen-Image 编辑 API
[https://help.aliyun.com/zh/model-studio/qwen-image-edit-api](https://help.aliyun.com/zh/model-studio/qwen-image-edit-api)
- 阿里云百炼模型价格:
[https://help.aliyun.com/zh/model-studio/model-pricing](https://help.aliyun.com/zh/model-studio/model-pricing)

View File

@@ -5,6 +5,7 @@
## 文档列表
- [AI_CHARACTER_ANIMATION_TECHNICAL_SOLUTION_2026-04-04.md](./AI_CHARACTER_ANIMATION_TECHNICAL_SOLUTION_2026-04-04.md)AI 生成角色形象与角色动画的技术路线。
- [ALIYUN_NPC_IMAGE_ANIMATION_EXPERIMENT_2026-04-07.md](./ALIYUN_NPC_IMAGE_ANIMATION_EXPERIMENT_2026-04-07.md):面向编辑器的阿里云 NPC 形象与动作实验方案,按 4 条生成链路对比。
- [PIXELMOTION_TECHNICAL_BREAKDOWN_2026-04-04.md](./PIXELMOTION_TECHNICAL_BREAKDOWN_2026-04-04.md)PixelMotion 产品形态与能力拆解。
- [SERVER_DEPLOYMENT_AND_CORS_TECHNICAL_SOLUTION_2026-04-05.md](./SERVER_DEPLOYMENT_AND_CORS_TECHNICAL_SOLUTION_2026-04-05.md):服务端部署、代理层与 CORS 方案。