—— Meowcute 项目基于 Qwen-Image-2.1 的实践报告
项目:Meowcute(pixelforge,本地 AI 游戏素材生成台)
项目地址:github.com/fs7744/meow…
日期:2026-10-23
⚠️ 声明:这是一个业余实验项目。 本文记录的是个人在业余时间、用一张消费级显卡做的探索,目的是看看"低成本、全离线"能走到哪一步。 它比不上专业的游戏开发工具和先进的 AI 模型,样本量小、没有经过生产环境检验。 如果你要做真实的项目,推荐优先使用更好、更专业的工具和模型(见第 9 节)。 硬件:单卡 RTX 4090 24GB,系统内存约 32GB 关键词:Qwen-Image-2.1 · 指令改图 · 角色四视图 · 原生 RGBA · 低成本 · Wan2.2-TI2V-5B
摘要
本文记录 Meowcute 项目用单张消费级显卡 + 全离线开源模型生成游戏角色四视图(正 / 左 / 背 / 右)的完整做法和实测结论。
核心做法是:正视图由文生图产出,侧 / 背 / 右三张由 Qwen-Image-2.1 以正视图为参考图、按中文指令逐张"原地转身"推导,最后用纯 numpy/PIL 做确定性拼板。
主要结论:
- 能用,而且比上一代本地底座好。 同图同指令对比 Qwen-Image-Edit-2511,Qwen-Image-2.1 更忠实(背包等配件不丢),单次 1319s(快 69 倍),峰值显存 14.7GB(低约 5GB),还能原生输出透明通道,可以省掉抠图。
- 决定质量的是工程而不是模型。 一半以上的质量提升来自三件事:指令写成"几何守恒"条款、参考图预处理、拼板后处理。只换模型、不做这些,结果会丢配件、镜像错位、长出不存在的披风。
- 低成本的天花板很清楚。 适合学习、原型验证、个人练手、像素风小人。不适合正式的游戏生产(原因见第 7 节)。真实项目请优先使用专业的游戏开发工具和先进的 AI 模型。
- 下一步:用 Wan2.2-TI2V-5B 把四视图 / 八方向立绘变成行走视频,再抽成动画序列帧和精灵表。管线代码已经写好,系统化评测是下一阶段的工作。
1. 背景:为什么四视图难
做游戏素材,难点不在"出一张好看的图",而在"同一个角色从四个角度看都是同一个角色"。具体要求是:
忠实度(该动的动、不该动的别动)比好看重要,这是本项目选型时的一票否决标准。
1.1 为什么不让模型"一张图画四个视角"
归档项目实测过:让模型在一张图里同时画正、侧、背,结果基本不可控——角色重叠、数量不对、视角缺失,而且没法裁切。所以本项目改成每张图只画一个角色、一个视角,拼板交给确定性代码。
2. 方法总览
2.1 整体流程
flowchart LR
A["角色描述<br/>(中文,写清配件侧别)"] --> B["Qwen-Image-2.1<br/>文生图"]
B --> C{"挑选正视图<br/>(可一次抽 n 张)"}
C --> D1["指令接力:左视图"]
C --> D2["指令接力:背视图"]
C --> D3["指令接力:右视图"]
D1 & D2 & D3 --> E["后处理<br/>透明直通 / 抠图修复"]
C --> E
E --> F["确定性拼板<br/>统一底色 · 水平居中 · 底部基线对齐"]
F --> G["四视图板 PNG<br/>(可选 RGBA 透明底)"]
style B fill:#e8f0fe,stroke:#4a6fd8
style D1 fill:#e8f0fe,stroke:#4a6fd8
style D2 fill:#e8f0fe,stroke:#4a6fd8
style D3 fill:#e8f0fe,stroke:#4a6fd8
style F fill:#e6f4ea,stroke:#3c8c5a
蓝色是模型推理,绿色是纯 numpy/PIL 的确定性步骤(几秒,不需要 GPU)。
关键设计:侧 / 背 / 右三张都以正视图为参考图,而不是"左视图再转成背视图"这样串联。串联会让误差逐级累积。
2.2 一个底座管所有图片
2026-10-23 起,图片侧只保留 Qwen-Image-2.1 一个底座:
flowchart TB
subgraph OLD["之前:三套底座并存"]
Z["Z-Image-Turbo<br/>文生图"]
Q["Qwen-Image-Edit-2511<br/>指令改图"]
U["u2net / rembg<br/>抠图"]
end
subgraph NEW["现在:一个底座"]
Q21["Qwen-Image-2.1<br/>文生图 + 指令改图 + 原生 RGBA"]
UB["u2net<br/>(只在不透明输入时兜底)"]
end
OLD -->|"统一"| NEW
统一的直接原因是静默失效:三套底座并存时,"负面词只在一个底座生效"、"透明声明只在一个底座被识别"这类问题不报错,只表现为"效果不对",反复出现。只剩一个底座之后,这类问题就无处可藏了。
2.3 显存方案:24GB 卡怎么装下 7B 模型
全 BF16 权重约 32GB,24GB 卡放不下,本机 32GB 内存也扛不住一次性加载。做法:
flowchart LR
T["transformer<br/>13.25GB bf16"] -->|"逐组件加载<br/>fp8 E4M3 逐通道量化"| T8["fp8 + 落盘缓存<br/>(二次加载命中 0s)"]
E["text_encoder<br/>16.33GB bf16"] -->|"torchao fp8<br/>约 9s"| E8["fp8"]
T8 & E8 & V["VAE"] --> P["组装 QwenImage21Pipeline"]
P --> O["enable_model_cpu_offload<br/>峰值约 14.8GB,用完即释放"]
另外,图片底座和视频底座(Wan)互斥换出,不同时驻留显存。
3. 指令工程:把"转个身"写成可核对的几何约束
这是本项目投入最多、收益也最大的部分。最初的指令只有一句"转成侧面视图,不新增也不删除任何部件",结果问题很多。逐轮修正之后,指令变成 8 段,顺序就是优先级:
flowchart TB
S1["① 转到哪<br/>像原地转身一样整体转 90°,镜头不动"] --> S2
S2["② 自身左右锚定<br/>正视图画面右侧 = 角色左侧;本视角离观众最近的是哪一侧"] --> S3
S3["③ 部件清单<br/>来自用户的角色描述,声明其中的'正面'等视角词作废"] --> S4
S4["④ 配件守恒<br/>单侧配件同侧、同高度、同固定方式,只跟着身体转"] --> S5
S5["⑤ 背覆体积守恒<br/>从肩背垂下的大片部件,背面至少与肩同宽"] --> S6
S6["⑥ 遮挡守恒<br/>该挡就挡,不挪到轮廓外面"] --> S7
S7["⑦ 身份锚点<br/>脸型/耳/花纹/尾巴/比例逐项一致"] --> S8
S8["⑧ 外观与姿势不变<br/>不改走姿、不抬手、不重新构图"]
3.1 每一段都是被具体失败逼出来的
3.2 部件清单 A/B 实验
同一张正视图(左腰挎刀),2 个变体 × 3 个种子:
- A:只有通用几何条款
- B:再附上用户原始的角色描述作为"部件清单"
结果:补上"近侧配件在最外层"之后,6 张左视图全部保留刀具,刀柄朝前、刀鞘顺腰线向下、与正视图同侧,没有一张镜像到另一条腿。
3.3 指令救不回来的边界
如果正视图自己就把配件画在身体中线、斜跨在腰带上,三维位置本来就模糊,侧视图仍会把它丢掉(实测 2/2 都丢)。把参考图铺白或铺灰再喂也没用,因为这是画面本身的问题。
解法在上游:正视图的提示词写清侧别("左腰侧挎武士刀"而不是"腰挎武士刀"),出图时配件就会落在腰侧,后续推导才有明确的锚点。
4. 图像条件与后处理
4.1 参考图别先弄坏再让模型照着画
provider 原先把参考图 convert("RGB")(透明区被压成黑色)再 resize((w,h))(被拉伸变形)。等于先把参考图弄坏,再让模型照着画。现在统一走"等比缩放居中 + 按目标底色铺平"。这一条对"像不像"的影响比改文字更大。
4.2 原生透明 vs 抠图
flowchart TB
IN["视角图"] --> Q{"透明像素占比 > 2%?"}
Q -->|"是:Qwen-Image-2.1 原生 RGBA"| PASS["alpha 直通<br/>不再二次抠图"]
Q -->|"否:不透明图"| M1["铺 12% 边距<br/>防踩边的脚被截掉"]
M1 --> M2["u2net → GrabCut → 颜色键"]
M2 --> M3["补封闭孔洞(≤8% 画布)"]
M3 --> M4["补被轮廓围住的区域<br/>Canny 边当墙,四边 flood fill"]
M4 --> M5["边缘溢色清洗"]
PASS & M5 --> OUT["进入拼板"]
右边这一长串修复,每一步都对应一个实测 bug:
- 角色的脚踩到画布底边,u2net 把它当成出画部分截掉(背视图白色脚掌只保留 8.6%)。
- 灰猫后脑勺的颜色(#7C7879)和中灰底(#787878)只差 3 个色阶,被判成背景,拼板上变成"只剩黑描边的空心脑袋"。
- 背视图的头和外部背景在 alpha 里连通(不是封闭孔洞),拼板上是"没有脑袋的披风"。
原生透明通道让左边这条短路径成为可能。触发透明需要一段"双段式"声明,只写"透明背景"不够(实测 alpha 恒为 255);加上完整声明后,68.5% 的像素真正透明,四角 α≈1,角色完整无缺损。
4.3 拼板
拼板是纯确定性操作:每张图抠出主体 → 主体水平中心对齐格子中心 → 主体底部对齐共同基线 → 钳位不出画布。缺右视图时自动退化成三视图板,兼容旧项目。
4.4 抽卡要成套
正视图一次生成 n 张时,早期实现每个视角只取 images[0],导致用户挑中的"好那几张"永远进不了四视图。现在每张视角图带 pairIndex 指回源正视图,拼板可以"按第 k 组"一键对齐。配对靠序号,不靠看图猜。
5. 实验结果
所有对比遵守同一条纪律:同一张基准图 + 同一句中文指令 + 同一种子对跑,不看榜单下结论。
5.1 底座选型
教训:光看"提速 10 倍"的宣传,会以为 Lightning 是白捡的便宜。在本项目的 fp8 + cpu offload 栈上,它既慢又掉画质。推测原因是 peft 包了一层后 offload 钩子认不出 fp8 模块,每步都要把约 20GB 权重重新搬一次 PCIe(机制为推断,现象为实测)。
5.2 Qwen-Image-2.1 vs Qwen-Image-Edit-2511(单张转身)
基准:像素风胡子矮人(朝右,背背包),指令"转向左侧",40 步、true_cfg 4.0、384×512。
5.3 八方向压力测试(单锚点全量旋转)
刻意用比生产更难的口径:只给正面一张锚点,直接转到 45°/90°/135°/180°。
90° 正侧面丢背包是两个模型的共性短板。生产管线里侧视图本来就是 0° 直通的锚点,这个短板被策略性绕开了。
5.4 单套四视图成本估算
边际成本基本只有电费(4090 整机满载约 450600W,按 1.5 分钟估算约 0.010.015 kWh / 套,为估算值)。没有任何 API 调用费,数据不出本机。
6. 优缺点
6.1 优点
6.2 缺点与限制
7. 低成本能做到什么程度
按角色类型看:
按能力等级看:
一句话:低成本方案能稳定做到 L4,L5 大部分可用,L6 正在验证,L7 做不到。
作为对照,专业的游戏美术流程(美术设定 + 专业 2D/3D 工具 + 骨骼动画工具)和先进的商业 AI 模型,在 L3~L7 上都明显更成熟。本项目的意义在于摸清低成本方案的边界,而不是替代它们。
8. 下一步:Wan2.2-TI2V-5B 生成视频 → 动画序列帧
8.1 为什么用视频模型而不是逐帧改图
逐帧改图时,每一帧都是独立推理,帧与帧之间没有运动连续性,快速动作会抖。视频模型一次生成整段动作,肢体轨迹天然连贯,抽帧后就是现成的循环素材。
8.2 计划中的链路
flowchart LR
FV["四视图 / 方向立绘<br/>(Qwen-Image-2.1)"] --> WAN["Wan2.2-TI2V-5B<br/>图生视频<br/>81 帧 @ 24fps ≈ 3.4s"]
WAN --> MS{"运动量检测<br/>动没动?"}
MS -->|"太静"| UP["升高 guidance_scale<br/>+ 步数重试"] --> WAN
MS -->|"合格"| SEQ["序列帧<br/>均匀抽 8 帧(首尾都取)<br/>相邻去重<br/>抠图修复"]
SEQ --> MIR["右侧方向<br/>整段水平镜像"]
MIR --> SHEET["精灵整图<br/>+ 元数据 JSON"]
SHEET --> GD["游戏引擎<br/>(Godot 等)"]
style WAN fill:#fff4e5,stroke:#d98a00
style SEQ fill:#e6f4ea,stroke:#3c8c5a
style SHEET fill:#e6f4ea,stroke:#3c8c5a
八方向的策略:只真实生成 5 个方向(正、左下、左、左上、背),右侧 3 个用对应左侧方向的整段帧镜像得到,省一半视频时间(视频是整条链路最慢的一步)。注意要镜像整段帧,只镜像首帧的话后续帧会翻回去,播放时"闪一下"。
8.3 预期与已知风险
计划的评测指标:循环是否闭合、帧间身份漂移、配件是否闪烁、单方向耗时、每方向可用帧比例。
9. 建议:真实项目用低成本方案,还是用先进模型?
flowchart TB
START(["你的需求"]) --> Q1{"是真实的游戏项目吗?"}
Q1 -->|"是:要上线、要交付"| PRO["⭐ 推荐:专业游戏开发工具<br/>+ 先进的 AI 模型<br/>+ 专业美术把关"]
Q1 -->|"否"| Q2{"目的是什么?"}
Q2 -->|"学习原理 / 个人练手"| LOW["可以参考本项目<br/>Qwen-Image-2.1 + Wan2.2"]
Q2 -->|"快速验证一个点子"| Q3{"有预算用先进模型吗?"}
Q3 -->|"有"| PRO
Q3 -->|"没有,且数据不能出本机"| LOW
style PRO fill:#e8f0fe,stroke:#4a6fd8
style LOW fill:#f1f3f4,stroke:#888
我们的推荐
一句话:真实项目请用更好、更专业的工具和模型。本项目只是业余实验,仅供学习参考。
- 做真实的游戏项目:优先使用专业工具和先进模型。 专业的游戏美术流程、成熟的 2D/3D 与动画工具,以及先进的商业 AI 模型,在角色一致性、动画质量、工作流集成和售后支持上都远比本项目成熟。素材出错的返工成本,通常远高于工具和模型的费用。
- 需要专业美术把关。 无论用什么 AI,正式上线的素材都应该由专业美术审核和修整。本项目连"大批量免审"都做不到,更不能替代美术。
- 本项目适合的场景很有限:学习扩散模型的指令改图原理、个人练手、在没有预算且数据不能出本机时做概念验证。
- 如果你要参考本项目,最值得借鉴的是方法,不是结果。 本项目最大的收获是"同图、同指令、同种子对跑"这条纪律:它证伪了看起来很美的 Lightning 加速,也发现了 CFG 静默失效、序列截断这类不会报错的问题。这条纪律在评估任何专业模型时同样适用。
选型提示:先进模型的版本、价格、授权条款各不相同,请按自己项目的约束,用同一套基准图对跑后再决定,不要只看榜单或宣传。
10. 复现
10.1 环境
GPU : 单卡 24GB(RTX 4090 实测)
内存 : 32GB(需组件分批加载)
diffusers: >= 0.41(QwenImage21Pipeline)
transformers: >= 5.17
权重 : models/qwen-image-2.1(官方 diffusers 格式约 31GB)
models/wan2.2-ti2v-5b
10.2 关键参数
10.3 相关脚本
附:经验清单(给想自己做的人)
- 一张图只画一个角色、一个视角;拼板交给代码。
- 所有视角都以正视图为参考,不要串联接力。
- 指令只描述"视角怎么变",不点名任何具体服装、配件、颜色。
- 写明"正视图画面右侧 = 角色左侧",模型才能分清左右。
- 正视图提示词就要写清配件侧别("左腰侧挎刀")。
- 想让大部件在背面保留,用几何位置描述,不写名词。
- 关键要求放在指令最前面,长指令的尾部会被静默截断。
- 用 CFG 就必须传负面词,哪怕是空串。
- 参考图要等比缩放、铺好底色,别先把它弄坏。
- 能出原生透明就别抠图;必须抠图时,先铺边距、再补孔洞。
- 抽卡要成套配对,靠序号不靠肉眼。
- 不信宣传和榜单,同图、同指令、同种子对跑后再下结论。
再次声明:本文是业余实验记录,比不上专业的游戏开发工具和先进的 AI 模型。真实项目请优先选择更好、更专业的方案。 项目地址:github.com/fs7744/meow…,欢迎交流与指正。
本文由 AI图鉴自动抓取并翻译,版权归原作者所有;如需查看原文请点下方链接。