# AI 生成角色形象与角色动画功能技术方案(2026-04-04) ## 1. 文档目的 为当前项目设计一套“AI 生成角色形象 + AI 生成角色动画”的完整功能方案,目标效果参考 PixelMotion 一类产品的核心体验,但接入方式必须适合当前项目现有的 2D 侧视角色素材体系。 - 用户先输入角色设定词与角色参考图,生成主角色形象 - 也支持用户直接上传现成角色素材 - 角色形象确认后,再基于该形象生成动作动画 - 最终产物不是单纯视频,而是**可回收为项目资产的角色图 / 序列帧 / Sprite Sheet / 元数据** 本方案强调两点: - **必须能在国内稳定使用** - **必须能接到本项目现有的角色动画、编辑器、本地 API 和运行时结构** 资料调研时间截至:`2026-04-04` --- ## 2. 先说结论 ### 推荐路线 第一版推荐采用**“角色形象工坊 + 动作工坊”**的两段式方案: 1. 先用国内可直接接入的图像模型生成或规范化角色主形象 2. 用户确认主形象后,再基于主形象生成动作视频 3. 最后由项目内本地服务把视频转成序列帧、像素风结果和运行时配置 ### 首选模型与平台 首选阿里云百炼一体化方案: - 角色形象生成:`wan2.7-image-pro` / `wan2.7-image` - 角色动作生成:`wan2.2-animate-move` - 高质量换角动作:`wan2.2-animate-mix` - 说话 / 对口型扩展:`wan2.2-s2v` 原因: - 官方明确支持**中国内地部署** - `wan2.2-animate-move` 就是“图像 + 参考视频 -> 输出动作视频” - `wan2.2-animate-mix` 支持“视频中的人替换成图像中的人” - 异步任务、轮询、计费、输出格式都比较清晰 - 比旧版 `AnimateAnyone` 路线更适合作为新项目主线 ### 第一版功能边界 第一版必须支持: - 文生角色图 - 图生角色图 - 用户直接上传角色素材 - 角色图预览与重新生成 - 角色动画预览与重新生成 - 与当前项目可扮演角色 / 角色型 NPC 的动作槽位匹配 第一版暂不强求: - 技能动作一次性全部自动补齐 - 实时运行时生成 - 完全免人工筛选 ### 不建议的第一版做法 - 不建议第一版直接做“纯本地端到端视频生成主链” - 不建议把 AI 生成结果直接塞进运行时即时播放 - 不建议追求“模型直接吐出完美像素序列帧” 原因: - 第一版最难的不是“生成视频”,而是**角色一致性、动作可控性、像素风稳定性、可复用资产化** - 当前项目更适合把 AI 放在**资产生产链**里,而不是放在每次运行时战斗里实时生成 --- ## 3. 目标效果定义 这里把“类似 PixelMotion 的效果”明确成以下两段式能力。 ### 3.1 阶段 A:角色主形象生成 - 用户输入角色形象设定 - 用户可上传 1 到多张角色参考图 - 也支持直接上传已有角色图作为主素材 - 系统输出与当前游戏角色视角相近的主形象图 - 用户可预览、筛选、重新生成,直到确认主形象 ### 3.2 阶段 B:角色动作生成 - 基于已确认的主形象生成短动作动画 - 支持上传参考动作视频,或直接选动作模板 - 技能动作不是第一版强制项 - 基础动作槽位不能为空 - 用户可预览、筛选、重新生成,再发布为正式资产 ### 3.3 项目内真实产物 - 角色主形象图 `png` - `mp4/webm` 动作预览视频 - 解帧后的 `png` 序列 - 合并后的 Sprite Sheet - 动画元数据 `json` - 角色形象与动画挂接配置 ### 3.4 不是第一版目标的内容 - 实时 3D 骨骼动画 - 无人工干预的高质量全自动像素逐帧美术 - 所有技能动作一次性自动补完 - 所有动作都由玩家随手输入文本即时生成 --- ## 4. 约束与设计原则 结合当前仓库文档,方案需要遵守下面的原则。 ### 4.1 AI 负责内容生成,不负责规则决定 动画生成只负责: - 动作表现 - 角色演出 - 视觉资产生产 不负责: - 战斗数值 - 命中逻辑 - 好感 / 背包 / 掉落 / 招募等规则 这与项目现有经验完全一致:**AI 做表达层,本地规则做状态层。** ### 4.2 先做数据建模,再做 UI 功能落地顺序建议严格遵守: 1. 定义角色形象与动画资产模型 2. 定义任务状态机与本地 API 3. 打通生成与后处理管线 4. 接编辑器 UI 5. 最后挂到正式运行时 ### 4.3 生成结果必须资产化 生成结果不能只停留在“看一下视频”。 必须能沉淀为: - 角色主形象资源 - 角色动画资源 - 编辑器可复用配置 - 运行时可直接加载的帧集 ### 4.4 像素风不直接交给视频模型终态完成 第一版推荐: - 先生成相对稳定的高分辨率动作视频 - 再做像素化、色板约束、抖动清理、裁切与对齐 而不是直接要求模型“一步到位产出稳定像素逐帧动画”。 原因很简单: - 直接出像素视频,最容易出现闪烁、轮廓漂移、武器形变、手脚抖动 - 先生成稳定动作,再统一像素化,更适合游戏资产生产 --- ## 5. 国内可用技术路线调研结论 ## 5.1 主线推荐:阿里云百炼 Wan 系列 ### 角色主形象生成 推荐使用: - `wan2.7-image-pro` - `wan2.7-image` 原因: - 同一平台可同时覆盖图像生成与动作生成 - 适合做“文本设定 + 参考图 -> 角色主形象” - 适合做“已有角色图 -> 风格统一 / 视角纠偏 / 细节重绘” 第一版建议: - 主图生成优先用 `wan2.7-image-pro` - 批量快速试错可降到 `wan2.7-image` - 用户直接上传素材时,不强制重生,只先走规范化与裁切 ### 角色动作生成 #### `wan2.2-animate-move` 适合: - 输入角色主形象 + 参考动作视频 - 生成基础动作片段 - 构建 `idle / run / attack / hurt / die` 等核心动作库 根据阿里云官方文档: - 支持中国内地部署 - 输出规格为 `720P` - 时长范围 `2s < 时长 < 30s` - 标准模式 `15fps` - 专业模式 `25fps` #### `wan2.2-animate-mix` 适合: - 先选定高质量动作模板视频 - 再把模板里的角色替换成当前主形象角色 - 批量生产多个角色的同类动作 #### `wan2.2-s2v` 适合第二阶段能力: - 角色对话口型 - NPC 说话演出 - 招募 / 剧情特写 ### 为什么把阿里云放在第一选择 - 图像与视频链路都能放在同一国内平台 - 接口能力覆盖“主形象生成 -> 动作生成 -> 说话演出” - 异步任务、计费、结果下载和国内可用性都比较清晰 - 官方已明确给出 `animate-move / animate-mix` 这类更贴近生产的动作驱动方案 ### 成本信息 截至调研时间,阿里云官方价格页显示,中国内地部署下: - `wan2.2-animate-move` 标准模式约 `0.4 元/秒` - `wan2.2-animate-move` 专业模式约 `0.6 元/秒` 这意味着: - 一个 `4 秒` 动作片段大致是 `1.6 元` 到 `2.4 元` - 如果第一版每个角色先做 `6` 个基础动作、每个动作平均 `4 秒` - 单角色生成成本大致在 `9.6 元` 到 `14.4 元` ## 5.2 增强路线:火山方舟 Seedance 2.0 火山官方资料显示,`Seedance 2.0` 已支持多模态参考生视频,并支持: - 最多 `9` 张图片 - `3` 段视频 - `3` 段音频 - 最长 `15` 秒生成 这条线更适合: - 多参考图保持角色一致性 - 更复杂镜头或更长动作段 - 后续做剧情演出、过场或多镜头特写 - 在阿里云主链之外补一条高质量增强通道 但对“第一版角色动作资产生产”来说,它更适合作为增强通道,不建议先做成唯一主依赖。 实现更新(`2026-04-19`): - 当前仓库的 `image-to-video` 角色动作生成入口已切到火山方舟 `Seedance` - 采用双参考图首尾帧方案:图片 1 约束首帧,图片 2 约束尾帧 - 当前请求体中的两张参考图角色分别固定为 `first_frame / last_frame` - 当前固定参数为 `1:1`、`480p`、`4 秒`、单次 `1` 个视频 - 当前固定动作入口收敛为 `idle / run / attack / die`,不再内置固定 `hurt` - 提示词里传给视频模型的动作名统一使用英文动作名 实现更新(`2026-04-20`): - `run / attack` 是当前固定动作入口里的基础必生成动作 - `idle / die` 改为可选增强动作,不再作为资产完成度硬门槛 - `idle` 缺失时运行时默认使用主图静止 - `die` 缺失时运行时默认播放一段基于主图的向后倒地过渡动画,并通过轻微过冲回落让动作更自然,最终停在翻转倒地姿态 - 技能动作不走固定按钮,但对当前角色 `skills` 中的每个技能都属于必生成动作 ## 5.3 补充路线:腾讯云相关能力 腾讯云相关接口里,`提交图片跳舞任务` 提供了: - 图片驱动模板动作 - `EnableSegment` - `EnableBodyJoins` 优点: - 内置一定的分割与表演模板能力 - 适合快速产出宣传向动效 限制: - 更偏模板化表演 - 不够贴近当前项目“侧视战斗角色动作资产”的主需求 因此腾讯路线更适合作为: - 活动页宣传素材 - 社媒传播素材 - 节日彩蛋动作 ## 5.4 自托管 / 私有化预研路线 如果后续希望减少云成本、加强可控性或做私有化部署,可以并行预研以下开源链路。 ### 角色一致性 `InstantCharacter` - 腾讯混元官方开源 - 单图角色保持能力强 - 官方说明支持 tuning-free 的角色保持生成 - 2025-05-14 的更新中提到可在 `22GB VRAM` 以下配合 offload 运行 适合用途: - 给角色生成多参考图 - 统一角色造型 - 补充云模型前的参考素材标准化 ### 姿态驱动视频 `MusePose` - 官方定义为“Pose-Driven Image-to-Video Framework” - 很适合做“角色图 + 姿态序列 -> 视频” 但要特别注意: - 代码是 `MIT` - 官方训练模型说明为**仅限非商业研究用途** 所以它适合: - 原型验证 - 内部实验 - 技术可行性预研 不适合直接作为正式商业主链。 ### 姿态提取 `DWPose` / `MMPose (RTMPose / RTMW)` 优点: - 国内可获取 - 社区成熟 - 可做全身关键点提取 - `DWPose` 官方仓库提到已支持 character animation 场景 - `MMPose` 官方项目持续维护 `RTMPose`、`RTMW` 适合用途: - 动作模板解析 - 参考视频骨架抽取 - 后处理阶段的动作对齐与评分 ### 本地视频生成 `HunyuanVideo-1.5` 优点: - 腾讯官方开源 - 支持 text-to-video 和 image-to-video - 官方说明最小显存要求可到 `14GB` 适合用途: - 私有化实验 - 国内 GPU 云机自部署 - 降低部分长尾生成成本 结论: - **正式产品主链**:优先用国内云 API - **预研和备份链**:并行建设开源本地链路 --- ## 6. 推荐的产品形态 ## 6.1 功能名称 建议在编辑器中新增: - `角色资产工坊` ### 功能入口 - 角色预设编辑器 - NPC 视觉编辑器 - 后续可在角色详情页增加“生成动画”快捷入口 ## 6.2 用户流程 ### 阶段 A:角色主形象 1. 选择角色或新建角色 2. 输入角色形象设定文本 3. 上传角色参考图,或直接上传已有角色素材 4. 系统给出尺寸 / 裁剪 / 构图校验 5. 提交角色图生成或规范化任务 6. 预览结果 7. 支持“重新生成”“保留当前版本”“设为主形象” ### 阶段 B:角色动作 1. 基于已确认的主形象进入动作工坊 2. 选择要生成的动作槽位 3. 上传参考动作视频,或直接选择动作模板 4. 提交动作生成任务 5. 预览结果 6. 支持“重新生成”“替换此动作”“发布为正式资产” ### 必须满足的体验要求 - 角色图阶段必须可预览、可重新生成 - 动画阶段必须可预览、可重新生成 - 用户可以只上传素材,不一定强制走文生图 - 用户一旦确认主形象,后续动作生成默认锁定该主形象,不再漂移到其他角色风格 ## 6.3 动作生成方式 建议支持三种模式: ### A. 模板动作 用户直接选: - `idle` - `run` - `attack` - `die` 系统自动选择对应参考视频模板。 其中: - `run / attack` 属于固定必生成动作 - `idle / die` 属于固定可选动作,未生成时走默认兜底 `jump`、`hurt` 这类扩展动作不再作为当前编辑器固定按钮,改为后续扩展动作槽位或手动补齐。 ### B. 视频驱动 用户上传参考动作视频,系统抽姿态后再生成角色动作。 ### C. 说话 / 对口型 用户上传音频,系统调用 `wan2.2-s2v` 生成说话特写。 ### D. 首尾帧约束再生成 对于循环动作或需要收招回正的动作,增加二次再生成模式: - `idle`、`run` 这类循环动作,尽量让首尾帧接近 - `attack`、`cast` 这类动作,尽量让末帧回到可接下一个动作的准备姿态 这部分策略参考了你提供的视频方向,即: - 指定角色一致性 - 首尾帧控制 - 动作视频生成分段处理 --- ## 7. 总体技术架构 ```mermaid flowchart LR A["编辑器 UI
角色资产工坊"] --> B["本地 API / 任务调度层"] B --> C["图像模型适配器
文生图 / 图生图"] B --> D["视频模型适配器
动作生成 / 说话生成"] C --> E["主形象规范化 Worker
裁切/清底/校验"] D --> F["动作后处理 Worker
解帧/稳帧/像素化/打包"] E --> G["主形象资产仓库
public/generated-characters"] F --> H["动画资产仓库
public/generated-animations"] G --> I["角色资产元数据
src/data 或 overrides"] H --> I I --> J["运行时 CharacterAnimator / GameCanvas"] ``` ### 关键原则 - 云模型只负责生成原始视频 - 项目自己掌握后处理和资产组织 - 运行时永远读取项目内标准化资产,不直接依赖第三方视频输出 --- ## 8. 推荐生产管线 ## 8.1 阶段 A:角色主形象生成 输入包括: - 角色形象设定文本 - 角色参考图 `1~4` 张 - 或直接上传现成角色素材 - 可选风格限定词 - 可选武器 / 装束 / 发型约束 输出包括: - `master.png` 主形象图 - `preview/*.png` 候选预览图 - 主形象元数据 ### 主形象生成策略 - 文生图时,优先生成与当前项目角色素材视角一致的单人全身图 - 有参考图时,优先做“角色指定 + 风格收敛 + 视角纠偏” - 用户直接上传素材时,先做校验、裁切、背景清理和尺寸标准化 - 编辑器未上传参考图时,主形象阶段默认附加一张由项目内可扮演角色 idle 帧拼成的风格参考板,用来锁定像素动作角色的轮廓语言、右朝向、体型比例与配色组织,避免模型只放大 Q 版比例却丢掉像素感 - 风格约束优先级里,“像素动作角色感”高于“Q 版比例提示”;比例只允许轻度偏大头,不允许退化成普通软萌插画或儿童绘本风 ### 角色视角要求 这里必须贴近当前项目现有角色素材体系,而不是做通用立绘。 建议统一为: - 2D 侧视动作素材视角 - 单人全身 - 人物基本朝向右侧 - 脚底完整可见 - 武器和关键轮廓完整 - 不做强透视 - 背景尽量干净,方便后续裁切 ### 为什么统一朝向右侧 当前项目运行时已经通过镜像处理角色左右朝向,因此主素材应优先只生成一套“面向右侧”的标准版本,避免左右两套素材风格不一致。 ## 8.2 主形象输入尺寸与裁剪要求 ### 推荐输入规格 - 推荐尺寸:`1024x1536` - 可接受比例:`2:3` 或 `3:4` - 最低建议:短边不低于 `768` - 输出统一标准图:`1024x1536` ### 构图要求 - 角色主体占画面高度约 `70% ~ 85%` - 头顶保留少量留白 - 脚底必须完整露出 - 画面中只保留单角色 - 不允许大面积前景遮挡 ### 上传素材校验规则 - 分辨率过低时拒绝直接进入动画阶段 - 头脚被裁切时要求重新上传 - 背景过复杂时提示先走抠像或重生成 - 参考图角度差异过大时提示用户筛选 ## 8.3 阶段 B:角色动作生成 动作生成输入包括: - 已确认的 `master.png` - 动作槽位 - 动作模板或参考动作视频 - 可选首尾帧约束 - 可选循环模式 ### 主线路由 - 一般动作:`wan2.2-animate-move` - 高质量换角动作:`wan2.2-animate-mix` - 说话动作:`wan2.2-s2v` ### 任务策略 每次动作生成都走异步任务: 1. 创建任务 2. 记录 `jobId` 3. 轮询状态 4. 成功后立即下载临时链接结果 5. 进入本地后处理与资产化 ## 8.4 动作生成技巧 结合你给出的参考方向,第一版建议把下面几条固化进生成策略。 ### 技巧 1:先锁主形象,再做动作 动作生成只能使用已确认的主形象,不能每次动作都重新文生角色图。 ### 技巧 2:动作模板优先于纯文本动作描述 对当前项目来说,稳定性优先于想象空间,因此: - 基础动作优先走模板 - 个性化动作再开放视频驱动 ### 技巧 3:首尾帧控制 对于循环动作: - `idle` - `run` 要求首尾姿态尽量接近,方便循环。 对于一次性动作: - `attack` - `cast` - `hurt` - `die` 要求末帧明确,且必要时生成一个可回收的“收招末帧”。 ### 技巧 4:先出高分辨率动作,再转像素资产 不要直接把“像素逐帧稳定性”压给视频模型终态完成,而是: 1. 先出稳定动作视频 2. 再解帧、对齐、像素化、打包 ## 8.5 视频后处理与像素化 生成视频拿到后,不直接上线,而是进入后处理流水线。 ### 后处理步骤 1. `ffmpeg` 解帧 2. 主体检测与裁切 3. 背景清理 / 抠像 4. 稳帧与重心对齐 5. 去闪烁 6. 像素化降采样 7. 色板收敛 8. 生成 Sprite Sheet 9. 输出动画元数据 ### 当前工程的抠像补充策略 针对角色动作视频抽帧后常见的“后段帧出现白底”“角色轮廓残留绿幕像素点”问题,当前工程内的背景清理不再只依赖单一绿幕阈值,而是统一改为以下顺序: 1. 先识别边界连通的可移除背景区域,同时覆盖纯绿色绿幕和高亮低色差白底。 2. 再向主体边缘的半透明软边做一轮有限扩张,把压缩后残留的白边、绿边纳入透明化处理。 3. 最后对贴近透明边缘的像素做去污,优先压掉绿色溢色,并把白边/绿边颜色拉回附近前景主体颜色,减少抽帧后的轮廓发白、发绿。 这样可以避免把角色内部的白色高光、白色装备整体误删,同时能更稳定地清理视频模型在末段帧里偶发的白背景和压缩噪点。 ### 像素化策略 推荐做法: 1. 先在较高分辨率上清理主体 2. 再降采样到目标像素尺寸 3. 使用最近邻缩放 4. 锁定调色板 5. 对相邻帧做轻量时序去闪烁 ### 第一版目标规格建议 - 中间产物:`512x512` 主体裁切或 `720P` 工作视频 - 运行时成品:`96x96`、`128x128` 或项目当前角色尺寸 ## 8.6 资产打包 角色主形象输出: - `master.png` - `preview/*.png` - `visual-manifest.json` 每个动作输出: - `preview.mp4` - `frames/*.png` - `sheet.png` - `manifest.json` --- ## 9. 推荐的资产数据结构 建议把“角色主形象”和“角色动画”分成两套数据结构。 ```ts export interface GeneratedCharacterVisualAsset { id: string; characterId: string; sourceProvider: 'aliyun-wan' | 'volc-seedance' | 'tencent' | 'local'; sourceMode: 'text-to-image' | 'image-to-image' | 'upload'; promptText?: string; referenceImagePaths: string[]; masterImagePath: string; previewImagePaths: string[]; width: number; height: number; facing: 'right'; crop: { top: number; right: number; bottom: number; left: number; }; locked: boolean; } ``` ```ts export type BaseAnimationSlot = | 'idle' | 'acquire' | 'attack' | 'run' | 'jump' | 'double_jump' | 'jump_attack' | 'dash' | 'hurt' | 'die' | 'climb' | 'wall_slide'; ``` ```ts export interface GeneratedCharacterAnimationAsset { id: string; characterId: string; visualAssetId: string; action: | BaseAnimationSlot | 'cast' | 'talk' | 'skill1' | 'skill2' | 'skill3' | 'skill4'; sourceProvider: 'aliyun-wan' | 'volc-seedance' | 'tencent' | 'local'; sourceMode: 'template' | 'video-drive' | 'audio-drive'; frameCount: number; fps: number; loop: boolean; frameWidth: number; frameHeight: number; groundOffsetY: number; anchorX: number; anchorY: number; previewVideoPath: string; spriteSheetPath: string; framePaths: string[]; palette?: string[]; tags?: string[]; } ``` ### 目录建议 ```text public/generated-characters/{characterId}/visual/ master.png preview/ visual-manifest.json public/generated-animations/{characterId}/{action}/ preview.mp4 sheet.png manifest.json frames/ ``` ### 元数据建议写入位置 建议不要把所有生成结果直接写死进主预设文件。 更稳的做法: - 主形象文件放 `public/generated-characters` - 资产文件放 `public/generated-animations` - 角色挂接关系放 `src/data/characterOverrides.json` - 必要时再扩展一份 `src/data/characterAnimationOverrides.json` 这样更符合当前仓库的 override 体系。 --- ## 10. 与当前项目代码结构的接入建议 ## 10.1 运行时层 当前项目已经有: - `src/components/CharacterAnimator.tsx` - `src/types/characters.ts` 建议改造方式: ### `CharacterAnimator.tsx` 从当前“按文件夹拼单帧路径”的方式,扩成两层: 1. 现有手工动画资源 2. 新增 AI 生成动画资源 运行时优先级建议: 1. 角色 override 的生成动画 2. 角色原始 `animationMap` 3. 默认回退动画 另外建议固定规则: - 生成主形象默认只保留“面向右”的标准动作资产 - 左向由运行时继续使用镜像处理 - 不单独维护左右两套 AI 素材 ### `src/types/characters.ts` 建议给 `Character` 增加可选字段: ```ts generatedVisualAssetId?: string; generatedAnimationSetId?: string; generatedAnimationOverrides?: Partial>; ``` ## 10.2 编辑器层 建议新增组件: - `src/components/CharacterAssetStudio.tsx` 核心职责: - 角色形象生成 Tab - 动作生成 Tab - 主形象预览与锁定 - 动作预览与替换 - 提交生成 - 查看任务状态 - 一键发布到角色动画覆盖配置 ### 为什么不要直接塞进现有 `NpcVisualEditor` 因为这会把: - 外观编辑 - 动作生产 - 资产后处理 - 发布流程 全部混在一起,后期会迅速失控。 更合理的方式是: - `NpcVisualEditor` 继续管静态形象 - `CharacterAssetStudio` 负责“主形象 + 动画”资产工坊 ## 10.3 本地 API 层 自 `2026-04-19` 起,旧 `scripts/dev-server/localApiPlugins.ts` 已从仓库删除。 当前角色视觉与动画相关 `/api/*` 能力应统一落到 `server-node/src/modules/assets/**` 与 `server-node/src/modules/ai/**`,不再复用旧 Vite 本地插件链路。 建议新增: - `/api/character-visual/jobs` - `/api/character-visual/jobs/:id` - `/api/character-visual/publish` - `/api/animation/jobs` - `/api/animation/jobs/:id` - `/api/animation/templates` - `/api/animation/publish` ### 建议职责 `POST /api/animation/jobs` - 创建生成任务 - 写入本地任务记录 - 触发第三方模型请求 `POST /api/character-visual/jobs` - 创建角色主形象生成任务 - 保存设定词、参考图路径和上传素材信息 - 触发图像模型或规范化流程 `POST /api/character-visual/publish` - 将选中的主形象设为角色标准主形象 - 写入 visual manifest - 更新角色 override `GET /api/animation/jobs/:id` - 返回任务状态 - 返回进度、错误信息、结果地址 `GET /api/animation/templates` - 返回动作模板列表 `POST /api/animation/publish` - 触发后处理 - 生成 Sprite Sheet - 写入 `manifest` - 更新角色动画 override --- ## 11. 后端任务状态机设计 建议任务状态机如下: ```text draft -> queued -> submitting -> provider_pending -> provider_running -> downloading -> post_processing -> review_ready -> published -> failed ``` ### 为什么需要 `review_ready` 因为这类资产生成不适合“生成完自动上线”。 必须给编辑器操作者一次人工确认机会,检查: - 动作是否稳定 - 武器是否丢失 - 轮廓是否漂移 - 是否需要重生一版 --- ## 12. 动作集要求与模板设计 这里必须与当前项目可扮演角色 / 角色型 NPC 的动作槽位对齐。 ### 12.1 基础动作槽位必须非空 第一版要求以下动作能力按“必生成 / 可选兜底”拆开: 当前编辑器固定生成入口补充说明(`2026-04-19`): - 固定按钮只保留 `idle / run / attack / die` - `hurt` 不再作为固定生成按钮 - 如果运行时仍需 `hurt` 资源,应通过后续扩展动作槽位或手动补齐 | 动作能力 | 是否必填 | 建议来源 | | ------------------------------- | -------- | ---------------------------------------------------------- | | `run` | 必填 | 模板生成 | | `attack` | 必填 | 模板生成 | | `skills[*].actionPreviewConfig` | 必填 | 技能编辑面板逐个生成 | | `idle` | 可选 | 模板生成;缺失时默认主图静止 | | `die` | 可选 | 模板生成;缺失时默认主图向后倒地过渡动画,带轻微过冲回落,最终停在翻转倒地姿态 | 这里“必填”指的是: - `run / attack` 必须能挂到一套可播放资产 - 角色当前每个技能都必须有可播放的 `actionPreviewConfig` - `idle / die` 不再进入“缺失即阻塞发布”的判断 - 运行时表现仍然不能空白;`idle / die` 的缺口由默认兜底承接 ### 12.2 技能动作改为“按角色已配技能强制” 第一版不再要求预留整套固定技能枚举,但要求: - 当前角色 `skills` 数组里的每个技能都要补出 `actionPreviewConfig` - 技能动作继续在技能编辑面板逐个生成,不并入固定四按钮 策略建议: - 先补 `run / attack` - 再逐个补当前角色已有技能动作 - `idle / die` 作为可选增强按需要补 - 投射物与特效优先继续复用当前项目已有素材与技能特效系统 ### 12.3 第一阶段优先模板 先优先做这些高价值模板: | 模板 | 推荐时长 | 是否循环 | 说明 | | -------- | -------- | -------- | -------------- | | `idle` | 2s-4s | 是 | 微动作、呼吸 | | `run` | 2s-3s | 是 | 固定侧向 | | `attack` | 2s-4s | 否 | 近战基础攻击 | | `jump` | 1s-2s | 否 | 起跳与空中姿态 | | `die` | 2s-4s | 否 | 倒下或消散 | ### 12.4 不建议第一阶段就重投入的动作 - 大幅转身 - 超复杂武器连击 - 多角色交互动作 - 高速镜头切换 - 技能专属长表演 因为这些动作对一致性、模板匹配和后处理都更不友好。 --- ## 13. 质量门槛与验收指标 ## 13.1 视觉验收 - 主形象与当前项目角色素材视角一致,属于侧视动作素材而不是正面立绘 - 主形象默认朝向右侧,便于运行时镜像 - 角色身份一致,不出现明显换脸换装 - 武器 / 头饰 / 发型不随机消失 - 帧间轮廓稳定,无明显闪烁 - 脚底位置稳定,不出现贴地漂浮 - 像素化后轮廓仍然清楚 ## 13.2 资产验收 - 主形象可以预览、重新生成、锁定 - 能成功生成 `sheet.png + manifest.json` - `CharacterAnimator` 能正常播放 - `groundOffsetY` 可配置 - 动作帧数和 fps 可配置 ## 13.3 性能验收 - 编辑器任务提交不阻塞主线程 - 后处理可以异步完成 - 运行时只读本地标准化资源,不发起第三方请求 --- ## 14. 风险与对应策略 ## 14.1 风险:角色一致性不稳 应对: - 输入图先标准化 - 同一角色固定一组主参考图 - 为同一角色缓存已验证过的参考素材 - 必要时先用 `InstantCharacter` 补一组一致性参考图 ## 14.2 风险:像素风闪烁严重 应对: - 先高分辨率清理,再统一像素化 - 引入调色板锁定 - 对轮廓做时序平滑 - 允许编辑器端手动剔除异常帧 ## 14.3 风险:云模型成本扩张 应对: - 第一版限制动作模板数量 - 默认走 `wan-std` - 只有“确认发布”才保留产物 - 对同样输入做结果缓存 ## 14.4 风险:供应商变更或配额受限 应对: - Provider Adapter 抽象化 - 阿里云为主,火山为增强,开源为备份 - 不把第三方返回结构直接耦合到前端 ## 14.5 风险:合规问题 应对: - 加入上传素材声明 - 仅允许项目内资产或已授权素材进入生产链 - 保留任务日志、来源、发布时间和操作人 --- ## 15. 成本与资源预估 ## 15.1 第一阶段推荐配置 - 先支持 `6` 个基础动作 - 每次动作生成先采用 `4 秒` 左右模板 - 默认使用阿里云 `wan2.2-animate-move` 标准模式 ### 估算 按官方价格 `0.4 元/秒` 粗估: - 单动作 `4 秒`:约 `1.6 元` - 单角色 `6` 动作:约 `9.6 元` - `20` 个角色:约 `192 元` 这还不含失败重试,但对编辑器工具链原型阶段是可控的。 ## 15.2 本地算力需求 如果只走云生成: - 本地只需要承担解帧、裁切、像素化、打包 - 普通开发机即可承担 如果要并行预研自托管链: - `HunyuanVideo-1.5` 官方说明最低显存约 `14GB` - `InstantCharacter` 的 offload 路线可在 `22GB` 以下显存运行 所以: - 正式主链先不要求团队成员都配高显存 GPU - 私有化实验再单独准备 Linux + CUDA 机器 --- ## 16. 实施计划 ## Phase 1:最小可用版本(推荐 1 周) 目标: - 跑通“角色设定 / 上传素材 -> 主形象确认 -> 动作模板 -> 预览视频 -> 解帧 -> Sprite Sheet” 内容: - 接角色主形象生成 / 规范化 API - 接阿里云 `wan2.2-animate-move` - 增加角色主形象任务创建与查询 API - 增加任务创建与查询 API - 增加本地后处理脚本 - 新增 `CharacterAssetStudio` 原型页 ## Phase 2:发布与运行时接入(推荐 1 周) 目标: - 让主形象与生成结果可以正式替换角色资产 内容: - 生成 `visual-manifest.json` - 生成 `manifest.json` - 扩展 `CharacterAnimator.tsx` - 增加主形象 override - 增加角色动画 override - 加预览与发布流程 ## Phase 3:说话与剧情演出(推荐 1 周) 目标: - 支持 NPC / 角色说话表演 内容: - 接入 `wan2.2-s2v` - 增加口型特写产线 - 适配聊天 / 招募 / 剧情特写场景 ## Phase 4:增强与备份链(按需) 内容: - 接火山 `Seedance 2.0` - 预研 `InstantCharacter + DWPose + MusePose + HunyuanVideo` - 做多供应商路由与失败兜底 --- ## 17. 最终推荐方案 如果只保留一句话,推荐如下: **用阿里云图像 + 视频能力搭一条“先锁定角色主形象,再生成基础动作”的两段式生产链:角色主形象统一成贴近当前游戏侧视素材的标准图,动作阶段再按现有可扮演角色动作槽位生成并补齐基础动作,最后由项目本地后处理转成像素化序列帧和 Sprite Sheet,接入现有 `CharacterAnimator` 与 override 体系。** 这条路线最符合当前项目的三个现实条件: - 项目是像素演出驱动,不是纯视频产品 - 项目强调 AI 与本地规则分层 - 项目需要的是“可维护的角色资产生产链”,不是一次性的炫技 Demo --- ## 18. 资料来源 以下资料均为本次方案撰写时实际查阅的主要来源: - 阿里云百炼视频生成总览: [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-image-generation-and-editing-api-reference](https://help.aliyun.com/zh/model-studio/wan-image-generation-and-editing-api-reference) - 阿里云 `wan2.2-animate-move` API: [https://help.aliyun.com/zh/model-studio/wan-animate-move-api](https://help.aliyun.com/zh/model-studio/wan-animate-move-api) - 阿里云视频生成用户指南(含图生视频与首尾帧相关能力入口): [https://help.aliyun.com/zh/model-studio/user-guide/video-generation](https://help.aliyun.com/zh/model-studio/user-guide/video-generation) - 阿里云模型价格页: [https://help.aliyun.com/document_detail/2840918.html](https://help.aliyun.com/document_detail/2840918.html) - 火山方舟 Seedance 2.0 资料: [https://developer.volcengine.com/articles/7606009619928449070](https://developer.volcengine.com/articles/7606009619928449070) - 腾讯云混元图片跳舞任务: [https://cloud.tencent.com/document/api/1616/107784](https://cloud.tencent.com/document/api/1616/107784) - Tencent Hunyuan `InstantCharacter`: [https://github.com/Tencent-Hunyuan/InstantCharacter](https://github.com/Tencent-Hunyuan/InstantCharacter) - `MusePose`: [https://github.com/TMElyralab/MusePose](https://github.com/TMElyralab/MusePose) - `DWPose`: [https://github.com/IDEA-Research/DWPose](https://github.com/IDEA-Research/DWPose) - `MMPose`: [https://github.com/open-mmlab/mmpose](https://github.com/open-mmlab/mmpose) - `HunyuanVideo-1.5`: [https://github.com/Tencent-Hunyuan/HunyuanVideo-1.5](https://github.com/Tencent-Hunyuan/HunyuanVideo-1.5) - 用户提供的动作生成技巧参考: [https://www.bilibili.com/video/BV1LpiYBVE8V/](https://www.bilibili.com/video/BV1LpiYBVE8V/)