Files
dc-docs/output/feishu-docs/EpZZw1rT9iBZDFkrwo2cgImpngb.md
T
2026-06-23 14:43:31 +08:00

305 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# EpZZw1rT9iBZDFkrwo2cgImpngb
Source: https://dianchukeji.feishu.cn/wiki/EpZZw1rT9iBZDFkrwo2cgImpngb
# 一.工作内容概述
- 碎片收集系统功能收尾,bug修复
- 参照agent-sprite-forge项目,仿写 Codex 生图 Skill
# 二.参考项目学习分析
参考了 agent-sprite-forge 项目的设计思路。该项目的核心并不是简单提供一组 sprite prompt 模板,而是提供了一套面向 Agent 的 2D 游戏资产生产流程。
参考项目: https://github.com/0x0funky/agent-sprite-forge
它的基本工作方式是:
其中最值得参考的是它对职责的拆分:
- **Agent 负责创意判断和流程决策**
- **图像模型负责生成原始视觉结果**
- **Python 脚本负责确定性的工程处理**
也就是说,参考项目并不指望 AI 一次性输出完美工程资产,而是让 AI 负责视觉生成,再通过脚本完成:
- 去背景
- despill
- 切帧
- 对齐
- 统一缩放
- 透明导出
- GIF 预览
- metadata 输出
- QC 检查
这种设计思路比较适合迁移到 UI 资产生产中。因为 UI 资产同样存在“视觉生成”和“工程可用”之间的断层:AI 可以生成好看的 UI 效果图,但要进入项目使用,还需要拆分、透明化、去边缘污染、统一命名和质检。
# 三.Codex Skill仿写思路
基于参考项目,本次没有直接照搬 sprite 生产流程,而是提取其核心模式:**Agent原生生图能力+本地确定性后处理,**然后将其迁移到静态 UI 资产生产中。
两者的对应关系大致如下:
> [嵌入电子表格: Yvh9suruJhMp5otWY3Ac...]
因此,这个Skill的核心目标被定义为:
**将 AI 生成的 UI 效果图,进一步转化为可交付的独立透明 PNG 资产包。**
而不是只停留在“生成一张完整 UI 图”。
# 四.Skill 最终流程设计
设计的Skill流程如下:
### 4.1 需求确认
在用户提出 UI 需求后,Codex 先对需求进行整理和确认,包括:
- 页面类型
- 画布尺寸
- 视觉风格
- 功能元素清单
- 是否有参考图
- 输出目标
- 拆分原则
默认策略为:
- 默认输出透明 PNG 资产包
- 默认按最小可用单元拆分
- 默认普通文本不生成 PNG
- 默认装饰性文本作为 PNG 资产生成
- 默认生成黑 / 白 / 蓝底预览
- 默认启用后处理与 QC
### 4.2 整体效果图
效果图阶段用于确认整体视觉方向,包括:
- 整体风格
- 页面布局
- 色彩体系
- UI 密度
- 功能区层级
- 按钮 / 面板 / 图标的大致视觉语言
这一阶段的重点不是生成最终资产,而是确认设计方向。
同时,效果图生成时需要考虑后续拆分,避免 UI 元素过度融合,例如按钮、图标、文字、装饰和背景混成一体。
### 4.3 布局规格图
效果图确认后,会生成布局规格图,用于确认:
- 画布尺寸
- 安全区
- 主要功能区边界
- 核心组件尺寸
- 主要间距
- 主要对齐关系
布局规格图不是重新生图,而是基于 layout_spec.json 程序化标注,输出:
- layout_spec.json
- annotated_layout.png
这一步的作用是把“视觉确认”进一步转成“结构确认”,为后续拆分清单和资产生成提供依据。
### 4.4 拆分清单
拆分采用“最小可用单元”原则。需要独立拆分的元素包括:
- 按钮底板
- 按钮图标
- 面板底板
- 资源栏底板
- 资源图标
- 加号按钮
- 红点提醒
- 角标
- 奖励框
- 奖励图标
- 进度条底槽
- 进度条填充
- 装饰件
- 装饰性标题 / Logo / 艺术字
普通可编辑文本不进入图片生成流程,只记录到 manifest
装饰性文本、Logo、活动标题艺术字则作为图片资产单独生成。
### 4.5 单资产生成
单资产生成阶段默认优先使用:agent_native_image_generation,即 **Agent 调用自身可用的生图能力生成 raw asset**。
如果当前运行环境不支持 Agent 原生生图,则需要通过 API provider 补足生图能力;两者都不可用时,不允许退化为程序绘制占位图。
同时明确禁止将以下内容作为最终交付资产:
- SVG
- PIL 程序绘制
- procedural shapes
- mock assets
- placeholder graphics
这些只能用于 smoke test 或调试,不能作为正式资产交付。
### 4.6 后处理
后处理部分复用了昨日开发的图片后处理工具能力,并将其拆成代码库,用于处理:
- Color Key Matting
- PyMatting 单主体抠图
- despill 去背景色污染
- alpha-aware resize
- RGB bleed
- alpha contract / feather
- 黑 / 白 / 蓝底预览
- 基础 QC
- postprocess_report 输出
后处理的职责是解决工程问题,例如:
- 透明背景
- 边缘污染
- 灰边 / 黑边 / 紫边
- 缩放后脏边
- 透明区 RGB 污染
但后处理不负责修复美术生成错误,例如图标语义错误、风格不一致、普通文本被画进资产等问题。
# 五.关键问题与修正
在测试过程中发现,单资产生成阶段存在一个比较明显的问题:即使整体效果图已经确认,单独生成某个 UI 元素时,模型仍可能根据资产名称生成“通用版本”,而不是继承效果图中的具体风格。
例如,效果图中的设置按钮是绿色 Q 版 UI 风格,但单独生成“设置齿轮”时,模型可能会生成灰色金属齿轮。这说明,仅在提示词中写“保持和效果图一致”并不够。模型很容易受到通用语义影响,比如:
- 设置齿轮通常被理解为灰色金属齿轮;
- 系统胶囊按钮通常被理解为灰白色通用胶囊;
- 加号、资源图标、红点等也可能被生成成通用 UI 素材,而不是当前页面里的风格。
针对这个问题,当前 Skill 增加了更强的“效果图继承机制”,让单资产生成不再是重新设计一个图标,而是尽量从已确认效果图中提取风格信息,再生成同风格的拆分资产。
### 5.1 以效果图为基准生成单资产
单资产生成不再被视为“重新画一个图标”,而是被定义为:**基于已确认效果图,生成同一套 UI 风格下的独立资产。**
因此,每个资产生成时都会参考以下信息:
- 最终确认的整体效果图;
- 该元素在效果图中的局部参考图;
- 整体 UI 的风格描述;
- 当前资产的生成说明。
这样做的目的是减少模型自由发挥,避免它生成脱离当前页面风格的通用图标。
### 5.2 局部参考图
对于拆分清单中已经标出位置的元素,会从最终效果图中裁剪出对应区域,作为该元素的局部参考图。
这张局部参考图的作用是帮助模型理解:当前要生成的不是任意一个设置按钮,而是这个页面里已经出现过的、具有特定颜色和材质的设置按钮。
它主要用于约束:
- 颜色;
- 外形;
- 描边;
- 高光;
- 阴影;
- 材质倾向;
- 整体视觉重量。
### 5.3 提取局部设计特征
在获得局部参考图后,系统会尝试从中提取一些可用的设计特征,例如:
- 主色;
- 辅色;
- 高光色;
- 阴影色;
- 描边色;
- 主色系;
- 大致尺寸比例;
- 大致形状;
- 材质倾向。
这些信息会被写入当前资产的生成说明里,用于强化提示词约束。
需要注意的是,这一步并不是“自动完美还原设计”。如果局部参考图太小、被遮挡,或者和背景混在一起,提取结果就可能不完整。因此,提取出的特征只作为辅助约束,必要时还需要 Agent 根据整体效果图和页面风格进行补全。
### 5.4 颜色锁定机制
为了减少颜色漂移,当前 Skill 增加了“颜色锁定”机制。
简单来说,就是从局部参考图中提取目标配色,并明确写入单资产生成提示词。例如,对于绿色设置按钮,会提取出类似这样的配色要求:
对应到生成提示词中,会明确要求:
- 必须使用绿色卡通 UI 配色;
- 禁止生成灰色金属齿轮;
- 禁止生成银色齿轮;
- 禁止工业质感;
- 禁止通用设置图标风格。
这样可以尽量让模型按照当前页面的配色体系生成资产,而不是根据“设置齿轮”的通用印象生成灰色金属图标。
### 5.5 失败处理规则
如果生成结果仍然出现颜色、风格或语义不一致,比如绿色设置按钮又变成灰色齿轮,则不对整套 UI 重新生成,只针对当前资产重新生成。
当前规则是不使用以下兜底方式:
- 不做多候选筛选;
- 不做脚本重着色;
- 不直接从效果图裁剪作为最终资产。
也就是说,流程保持为:
这样可以避免局部问题影响整套资产生产流程,同时保持最终资产仍然来自生图模型,而不是程序重绘或直接裁剪。
# 六.最终效果验证
### 6.1 产出质量验证
本轮测试已经完整跑通从单资产生成、后处理、QC、资源汇总到打包交付的流程。最终共生成 25 个透明 PNG 资产,并完成后处理报告(postprocess reports)、质检报告(QC reports)、资产汇总预览图(contact sheet)和资产包输出。最终 QC 结果为 FAIL 0、WARN 25,说明流程已经能够完成交付,但所有资产仍存在不同程度的质量警告,主要集中在边缘、颜色或视觉复核项上。
从资源汇总看,简单 UI 组件的处理效果相对较好,例如按钮底板、资源栏、红点、加号、金币、闪电等。这类资产通常具备以下特征:
- 轮廓清晰;
- 颜色块明确;
- 半透明区域少;
- 边缘结构简单;
- 不包含复杂毛发、粒子、阴影或柔光。
因此,当前的 color key、despill、alpha-aware resize 和 RGB bleed 流程,**对这类标准 UI 组件是有效的,基本符合透明 PNG 资产交付的要求。**
![图片](../feishu-images/EpZZw1rT9iBZDFkrwo2cgImpngb_XfyRbGpgbooP.png)
但对于复杂插画类资产,边缘质量仍然不够稳定。例如牛角色、公告图标、好友对战装饰图、皮肤图标等,这类素材通常包含:
- 毛发或复杂外轮廓;
- 柔和阴影;
- 半透明高光;
- 小粒子、小装饰;
- 较复杂的体积光和颜色过渡。
![图片](../feishu-images/EpZZw1rT9iBZDFkrwo2cgImpngb_OaHwb2PGQoBM.png)
这些内容在生成阶段就已经和 key 背景发生一定混合,导致后处理只能缓解边缘污染,无法完全还原干净的 alpha。尤其是阴影和柔光类区域,本身就是低透明度、低饱和度、模糊边缘的图形,很容易在抠图过程中出现残留、断裂或边缘发脏的问题。
因此,本轮质量验证的结论是:
当前 Skill 已经能够跑通完整资产交付流程,并且对硬边 UI 组件和简单图标具备较好的处理效果;但复杂插画、角色头像、柔光阴影、粒子装饰等资产仍需要找寻更好的解决方案。
后续不应继续尝试用同一套后处理参数覆盖所有资产,而是需要根据资产类型区分处理方式:
- 硬边 UI 组件:按钮、面板、资源栏、进度条;
- 简单图标:金币、体力、加号、红点;
- 复杂插画:角色、头像、装饰图;
- 阴影 / 光效:柔光、投影、粒子;
- 艺术字 / 标题:Logo、活动标题、特殊字体。
不同类型应使用不同的后处理 preset 和 QC 标准。
### 6.2 耗时与成本问题
本轮测试也暴露出比较明显的效率问题:
- 首板拆分清单共包含 25 个 UI 元素。按照当前 Skill 流程,每个元素都需要先单独生成 raw asset,再进入本地后处理和 QC。实际运行中,25 个 raw asset 的生成整体耗时约 3 小时 24 分钟,是本轮流程中最主要的耗时阶段。相比之下,后处理和 QC 本身耗时很短:首轮 postprocess / QC 约 17.5 秒,背景色自动采样与修正约 1.6 秒,第二轮 postprocess / QC 约 15.3 秒。
这说明**当前流程的主要瓶颈不在 Python 后处理,而在单资产生图和 Agent 调度阶段。**
主要原因包括:
#### 1. 单资产逐个生成导致调用次数过多
当前流程为了保证最小可用单元的独立性,要求每个元素单独生成。25 个元素意味着至少 25 次生图任务。虽然本轮没有发生 raw asset 的重新生图重试,但单次生成叠加后仍然带来较高耗时。
#### 2. Agent-native 生图存在调度开销
本轮 raw generation 阶段总耗时约 204 分钟,其中真正 image tool 等待和 Agent 间隔混合在一起,无法精确拆分。复盘中估算,生图等待约占 45%~65%,Agent 组织 prompt、复制文件、状态检查和无效动作约占 35%~55%。
#### 3. 后半段出现大量无效中间动作
前 15 张资产平均耗时约 1.5~4 分钟,较接近正常生图等待;但后 10 张平均耗时上升到 8~42 分钟。从 Codex 复盘结果看,后半段变慢的主要原因不是图片本身更复杂,而是 Agent 中间发生了大量无效 shell 输出、重复状态消息和重复检查,导致每张图之间的组织时间被明显拉长。
这里的“无效中间动作”主要指:Agent 在两次生图之间反复打印状态、重复确认剩余资产列表、重复检查 raw 文件是否存在、重复解释下一步,甚至执行一些只输出提示文本但不推进流程的 shell 命令。这些动作不会直接生成资产,也不会进入后处理,但会增加等待时间和 token 消耗。
#### 4. token 消耗主要来自重复规则和长报告
当前环境没有暴露精确 token 计量,因此只能做相对估算。复盘中判断,token 消耗较高的部分主要包括:用户多次内联完整 SKILL.md、多次读取长脚本和报告、25 个 asset brief 生成逻辑中的重复规则、raw 生成阶段的大量重复状态消息,以及最终 QC summary 的全量输出。
#### 5. prompt 公共规则重复
每个 asset brief 的 prompt 约 459~569 字符,英文词数约 70~88 词,单条 prompt 本身不算特别长。但其中重复包含大量公共规则,例如 isolated asset、flat chroma key background、match approved UI、no ordinary text、no full UI screenshot、no watermark 等。后续可以将这部分公共规则模板化,只让每个资产填充差异描述。
> :bulb:
基于本轮测试,当前判断是:
Skill 的流程逻辑是成立的,但当前执行方式还不适合直接进行高吞吐的全量批量生产。
主要瓶颈集中在单资产逐个生图和 Agent 调度成本,而不是本地后处理。
### 6.3 效率优化方向
针对本轮测试中暴露出的耗时问题,后续可以从以下几个方向优化。
#### 1. 增加“验证模式 / 正式模式”
首轮不建议直接执行完整拆分清单,而是先进入验证模式,只选择 5~8 个代表资产跑完整链路,例如:
- 1 个按钮底板;
- 1 个资源栏;
- 1 个图标;
- 1 个角标;
- 1 个复杂插画;
- 1 个装饰件;
- 1 个面板底板。
先验证生图一致性、透明化质量、边缘质量、QC 和交付结构,确认流程稳定后,再进入正式模式全量生成。
#### 2. 拆分清单增加优先级
拆分清单可以增加 P0 / P1 / P2 优先级:
- P0:首轮必须验证的核心资产;
- P1:正式包需要生成的主要资产;
- P2:可后续补充的小装饰、弱功能元素、非核心变体。
这样可以避免每次测试都默认全量执行,减少无效消耗。
#### 3. 引入“同类资产组生成”
当前流程是每个资产单独生成,调用次数较多。后续可以将功能相近、形式相近、风格一致的小资产放在同一张图里生成,再由后处理切分成独立 PNG。
适合资产组生成的类型包括:
- 小图标组;
- 资源图标组;
- 角标 / 红点组;
- 同规格按钮底板组;
- 小装饰组。
这样可以将 25 次生图压缩为更少的资产组生图任务,降低总耗时和 token 消耗,同时也有助于提高同组资产之间的风格一致性。
#### 4. 增加静默批量执行模式
后续 raw asset 批量生成时,应减少 Agent 在每个资产之间的状态解释和重复确认。
可以在批量生成前先写入 asset_generation_queue.json,明确每个资产的生成顺序、状态和 raw 输出路径。生成过程中不再反复扫描目录或解释下一步,只在以下情况输出信息:
- 批量开始;
- 某个资产失败;
- 需要用户确认;
- 批量完成。
这样可以减少重复状态消息、无效 shell 输出和目录检查带来的时间与 token 消耗。
#### 5. 禁止无效 shell 输出
后续 Skill 可以明确规定:shell 命令必须有实际工程作用,不能只是打印“下一步”“继续”“准备调用工具”等状态文本。
允许的 shell 操作应限定为:
- 读取必要输入;
- 写入或更新必要输出;
- 调用处理脚本;
- 校验生成文件;
- 打包交付物。
这可以减少 Agent 在批量生成阶段的空转操作。
#### 6. 模板化 prompt 公共规则
当前每个资产 prompt 中都重复包含大量公共约束。后续可以将公共规则抽成 shared prompt suffix,由 prompt_builder.py 自动拼接。每个资产只需要填写差异化字段,例如:
- asset_id;
- asset type;
- expected visual;
- target palette;
- forbidden styles;
- reference crop。
这样可以减少 Agent 重复组织 prompt 的 token 消耗,也能提升 prompt 一致性。
#### 7. raw 生成后立即自动采样 key 背景色
本轮首轮 postprocess / QC 全部 FAIL 的一个重要原因是:生图工具实际输出的 key 背景色并不严格等于预期色值,存在漂移和轻微渐变。后续应在 raw asset 生成后立即自动采样四角背景色,并回写 brief 中的 key color,再进入后处理。
这样可以避免后处理阶段再次整批失败。
#### 8. 批量化后处理和 QC
后处理和 QC 本身耗时较短,但仍应继续减少 Agent 逐个调用脚本的次数。后续可以保持或强化批量脚本方式,例如:
- 批量 postprocess;
- 批量 QC;
- 批量生成 manifest;
- 批量生成 qc_summary;
- 批量生成 contact sheet。
让 Python 一次性处理多个资产,而不是由 Agent 对每个资产逐个调用脚本。
#### 9. 增加性能日志
后续应增加 pipeline_metrics.json 或 asset_generation_timeline.json,记录每个阶段和每个资产的耗时、状态、重试次数和输出路径。
建议记录字段包括:
- 阶段开始时间;
- 阶段结束时间;
- 每个资产生成耗时;
- 是否发生重试;
- 重试原因;
- raw 输出路径;
- postprocess 耗时;
- QC 耗时;
- 最终状态。
这样后续可以更准确地区分瓶颈来自生图等待、Agent 调度、文件检查、脚本执行还是重试。