🎨 素材管线生成器

把“想要一套游戏素材”变成可追踪、可重试、可验收、可发布的生产流水线。目标不是生成几张图,而是稳定交付可直接被 HOOP 游戏使用的透明素材包。
Gode · 2026-08-16 · 对接现有 game-assets/{pack}/manifest.json

0. 结论先行

唯一真相
发布后的素材包以 R2 中的 manifest.json + 同目录文件 为唯一清单。数据库只记录生产任务、审核与成本,不复制“已发布包清单”。
终局流水线
规格化 → 批量生成 → 抠图/清边 → 派生尺寸 → 自动质检 → 失败回炉 → 人工抽检 → manifest 打包 → 原子发布 → Workshop 自动出现。
核心边界
模型返回成功不等于素材合格。透明度、边缘、尺寸、主体完整性、包内一致性和授权信息全部过闸,才允许发布。
首版范围
先做人物、角色、道具、UI 元件和普通背景;头发、玻璃、烟雾、火焰等半透明难例进入增强队列,不拖死主线。

1. 目标与非目标

目标

  • 同一批素材共享风格、视角、光源、尺寸和留白。
  • 输出透明 PNG/WebP、缩略图、预览图与 manifest。
  • 每个失败有明确原因,可重跑某一步而非整包重做。
  • 发布后无需登记,现有 GET /v1/games/assets 自动列出。
  • 模型、提示词、种子、成本、质检结果全可追溯。

非目标

  • 首版不训练自有基础生成模型。
  • App 不持有模型或 R2 写入密钥。
  • 不把人工审美完全伪装成自动化。
  • 未注明来源/授权的素材不进正式库。
  • 不做“上传成功即发布”的危险捷径。

2. 总体架构

Workshop / API任务编排器生成适配器抠图与派生质检引擎审核台打包发布器R2 / Workshop
组件职责不负责
Asset API创建/查看/取消任务,批准发布,读取进度不执行重型图像处理
Orchestrator状态机、幂等、重试、并发、预算、任务拆分不理解具体模型 SDK
Provider Adapter统一不同生成服务的输入输出不决定素材是否合格
Cutout Worker主体分割、alpha matting、去白边、边缘净化不覆盖原始文件
QA Worker机器指标、视觉审查与规则判定不直接覆盖失败品
Packagermanifest、校验和、目录布局、原子发布不维护第二份发布清单

3. 一单素材怎样走完

  1. 创建 brief:包名、用途、风格、类型、数量、画布、视角、光线、调色板、授权、透明背景要求。
  2. 冻结风格 DNA:先生成 4–8 张候选;选中后锁 style prompt、negative prompt、seed family、palette 和构图规则。
  3. 展开 shot list:把“20 个道具”拆成 20 个有稳定 ID 的 item,单项可重跑。
  4. 生成原图:保留模型原始响应;后续产物从原图派生。
  5. 抠图:主体 mask → alpha matte → 去色边 → 小孔修复 → 阴影策略 → 透明 PNG。
  6. 派生:标准画布、缩略图、1x/2x、WebP 预览、可选 sprite sheet。
  7. 自动质检:文件、像素、边缘、视觉、一致性、授权六道闸。
  8. 失败回炉:按原因回到必要步骤;边缘坏只重抠,主体缺失才重生成。
  9. 人工抽检:首包全检;稳定后抽样,低置信项强制检。
  10. 原子发布:先写 staging,完整校验后复制到正式前缀,最后写 manifest;manifest 出现才代表包可见。

4. 抠图程序

普通主体通道
成熟分割模型产粗 mask,alpha matting 精修边缘;适用于角色、物件、UI 图标,是首版主通道。
半透明增强通道
头发、玻璃、烟雾、火焰走专用 matting + 人工抽检;不能用硬阈值把半透明切没。
source.png
 → foreground segmentation
 → trimap / alpha matting
 → edge color decontamination(去白边/绿边)
 → remove islands + fill tiny holes
 → preserve soft shadow(按素材规格)
 → crop bbox + safe padding
 → standard transparent canvas
 → asset.png + mask.png + debug_edge.png
指标首版判据失败动作
背景残留透明区高不透明孤岛面积受限重做 mask/连通域清理
主体完整主体不接触裁切安全线;无缺肢/缺角扩大 bbox 或重生成
白边/色边边缘环色差低于包内基准decontaminate 重跑
软边不得把 alpha 全二值化转增强 matting
空图有效 alpha bbox 必须落在规格范围直接判失败

具体阈值必须用真实素材集校准;蓝图只钉测量方法,不把未测数字写成永恒真理。

5. 六道质量闸门

Q1 文件闸
格式、解码、尺寸、色彩空间、alpha、大小、checksum。
Q2 几何闸
主体 bbox、留白、锚点、方向、像素密度、画布一致。
Q3 边缘闸
背景残留、锯齿、白边、孔洞、半透明边缘。
Q4 视觉闸
主体正确、无多肢、无文字乱码、视角和光源符合 brief。
Q5 一致性闸
调色板、线粗、透视、阴影、比例、饱和度与同包基准比较。
Q6 权利闸
来源、模型、生成时间、许可证、禁用品牌/角色检查齐全。

PASS 自动通过REVIEW 低置信人工看RETRY 可自动修复REJECT 规格或权利问题

6. 状态机与重试

DRAFT → PLANNED → GENERATING → CUTTING_OUT → DERIVING → QA
                                              ├→ APPROVAL → PACKAGING → PUBLISHED
                                              ├→ RETRY_QUEUED → 对应步骤
                                              └→ REJECTED / CANCELLED

7. 数据模型

表/对象关键字段用途
asset_jobsid, room_id, pack_id, status, brief_json, budget, spent, created_by一次素材包生产任务
asset_itemsid, job_id, stable_key, spec_json, status, chosen_variant角色/道具等单项
asset_attemptsitem_id, stage, provider, model, prompt_hash, seed, input/output keys, cost, latency, error追溯与计费
asset_qa_resultsattempt_id, rule, score, threshold, verdict, evidence_key每道质检证据
asset_approvalsjob/item, reviewer, verdict, note, at人工审核案底
R2 staginggame-assets-staging/{job}/{item}/...中间产物
R2 productiongame-assets/{pack}/manifest.json + files已发布唯一真相

数据库是生产过程账本;R2 manifest 是发布事实。两者职责不同,不构成手抄镜像。

8. manifest v1 合同

{
 "schema_version":1, "id":"neon-ui-v1", "name":"Neon UI", "version":"1.0.0",
 "style":"neon", "types":["ui","sprite"], "license":"HOOP-generated",
 "provenance":{"generator":"pipeline","job_id":"...","created_at":"..."},
 "files":[{"id":"button-primary","path":"ui/button-primary.png","kind":"ui",
   "width":512,"height":256,"sha256":"...","anchor":[0.5,0.5],
   "tags":["button","primary"]}]
}

9. API 与事件

接口/事件作用
POST /v1/asset-jobs建任务;返回预算预估与展开后的 item 数
GET /v1/asset-jobs/{id}包级进度、成本、失败原因、待审核项
POST /v1/asset-jobs/{id}/approve批准打包;校验 QA 与权限
POST /v1/asset-items/{id}/retry按失败阶段重跑
POST /v1/asset-jobs/{id}/cancel幂等取消
asset.job.progress推 Workroom 真实进度
asset.job.review_required通知人工查看低置信项
asset.pack.published通知发布成功与 Workshop 链接

10. Workshop 产品界面

右上角 +
Workshop 页保持“设置服务”,不混成生成素材入口。素材生成入口属于 Assets 段。
Assets 段
空库、读不到、有包三态继续分明;增加“生成素材包”后进入任务页。
任务页
包进度、item 网格、原图/抠图对照、QA 红黄绿、成本、重试和批准发布。
发布后
Workshop 仍从现有只读端点列包,不新增登记动作。

11. 安全、权限与版权

12. 可观测性与成本闸

成功率
按 provider/model/kind/stage 分开。
一次通过率
不回炉即 PASS 的比例。
合格素材成本
总成本 ÷ 最终 PASS 数。
P95 延迟
总耗时与阶段耗时。

13. 测试与验收

  1. 单元:状态转换、幂等键、manifest 校验、阈值判定、失败分类。
  2. 契约:每个 provider adapter 用固定样本,返回格式变化立即红。
  3. 图像 golden:普通边缘、头发、玻璃、烟雾、阴影、白底、复杂底。
  4. 故意红:空 PNG、全不透明背景、断肢、白边、坏 manifest、少文件必须被拦。
  5. E2E:建包→生成→抠图→QA→批准→R2→现有端点出现→裸浏览器游戏加载。
  6. 故障注入:429/超时、worker 中途死、重复消息、R2 写一半、发布后读延迟。

14. 分刀开工清单

第几刀稳定 IDJeff 看得到的交付物完成证据
1AG-01brief + manifest v1样例 JSON 通过校验器
2AG-02单图抠图 CLI:输入图→透明 PNG + debug 图难例 golden + 故意红
3AG-03六道 QA CLI 与报告坏样本逐类被拦
4AG-04数据库任务账本 + 状态机迁移、并发、幂等测试
5AG-05队列与 worker,先接一个 provider重复消息不重复收费
6AG-06风格 DNA + shot list + 单项重试首个 10-item 同风格包
7AG-07审核台真实浏览器/真机截图
8AG-08Packager + 原子发布杀进程也不出现半包
9AG-09Workshop 入口与进度创建到发布完整 E2E
10AG-10第二 provider、成本路由、半透明增强A/B 成本与通过率

15. P1 上线门槛

一句话验收:给系统一句素材需求,它能交出风格一致、边缘干净、授权清楚、能在游戏里直接加载的素材包;任何一步坏了,都知道坏在哪,并只重做该重做的那一步。