
一张图集换遍所有配色sprite-gen Recolor 确定性变色与骨骼图层合成完全指南【免费下载链接】sprite-genGenerate clean 2D game sprites animation atlases — component-row pipeline: state rows, alpha cleanup, frame extraction, runtime atlases. Codex/Claude skill.项目地址: https://gitcode.com/gh_mirrors/sp/sprite-gensprite-gen是开源的 2D 游戏精灵与动画图集生成工具它的Recolor命令能通过调色板映射从一张基础图集确定性地烘焙 N 个配色变体而骨骼图层合成layer tracks则用整数坐标枢轴把角色部件逐层叠加成新动作——两者都保证同一输入必然产出同一输出字节。这篇文章带你从零走完「一张 base 图集 → 一整套配色与组合资产」的完整流程 为什么选择「烘焙」而不是运行时着色点阵像素画的生死线在于色板控制。sprite-gen 的 Recolor 走的是**离线烘焙bake**路线而不是游戏里的着色器实时染色像素级可质检——每张变体图集都是一个真实 PNG可以逐像素 diff⚡渲染零开销——游戏直接加载烘焙好的 PNG不跑任何滤镜契约一致——每个配色变体与 base 图集共用同一份manifest.json.frame_layout引擎换图不改代码确定性——同一输入字节 → 同一输出字节烘焙全程不做浮点重采样只重写 RGB、完整保留 alpha。核心实现位于 sprite_gen/effects/recolor.py完整规则见 docs/recolor.md。第一步起草调色板recolor-palette动手之前先让工具帮你把 base 图集里的颜色「数」出来sprite-gen recolor-palette --base sprite-sheet-alpha.png --out palette.draft.json扫描所有不透明像素默认alpha 8输出按频率降序、十六进制升序排列的颜色列表——全序保证重复执行结果一致--max-colors N只保留前 N 种颜色并明确报告丢掉了多少像素绝不静默截断不加--out时 JSON 直接打印到终端。草稿的kind是sprite-gen-palette它只是创作脚手架把这份 hex 列表手工编辑成下一节的 recolor spec就能进入真正的变色环节。第二步编写 recolor spec一条命令烘焙全部配色spec 是一个 JSON 文件每个变体给出「源色 → 目标色」映射{ version: 1, kind: sprite-gen-recolor, match: exact, tolerance: 0, variants: [ { name: moss, map: { #b42828: #3a7a3a, #f0c000: #c8a040 } }, { name: azure, map: { #b42828: #2850b4, #f0c000: #80c0e0 } } ] }然后一条命令烘焙所有配色sprite-gen recolor --run-dir run-dir --spec recolor.spec.json输出落在run-dir/variants/下variants/ moss.png azure.png moss.manifest.json # 每个变体一份运行时 manifest azure.manifest.json recolor.report.json # 「这次烘焙到底做了什么」的唯一事实来源两种匹配模式在 spec 的match字段声明模式行为适用场景exact默认像素 RGB 必须与源色完全相等才替换点阵像素画的安全默认抗锯齿边缘像素绝不被触碰tolerance在切比雪夫距离tolerance内的不透明像素也替换最近源色胜出软边插画纯整数运算依然确定性exact却写了非零tolerance会被直接拒绝——一个行为不允许有两条真相 ⚖️报告契约没有静默回退。recolor.report.json逐变体记录substituted_pixels重写的总像素数、substitutions[]每条映射的命中数pixels: 0意味着源色拼错了、unused_sources[]零命中的映射条目、passthrough_colors[]映射没覆盖而被原样保留的颜色点名加计数。落在映射之外的任何颜色都不可能悄悄溜走而不被点名——修好映射而不是糊弄过去。第三步在 Curation 视图里闪对比、一键采纳烘焙完成后打开常规 curation 视图sprite-gen curation --run-dir run-dir/api/run会附带recolor数据块界面实现见 sprite_gen/serve/curator/src/recolor.js提供三样东西一个堆叠舞台——所有变体图集占据同一位置悬停列表行就原地切换当前显示的图blink 闪对比。并排对比要靠眼睛来回扫容易漏掉细微的色板差异闪对比不会帧格缩略图——从manifest.frame_layout裁出第一帧做小图配色差异一目了然Adopt 按钮——把选中的变体名写进 curation 侧车{ version: 1, kind: sprite-gen-curation, recolor: { picked: moss } }一个值得玩味的设计细节选择以变体名而非帧索引为键。配色是「颜色决策」不是「帧生成」——重新烘焙不会让已采纳的moss变成陈旧状态。即使某次烘焙不再产出这个名字旧选择也会被保留并显示pickedKnown: false横幅绝不静默清除。骨骼图层合成标记点枢轴 整数平移的确定性叠加「一张图集」不止能换配色还能换骨架。sprite-gen 的 layer tracks 让一个 run 声明rig——角色类型 profilehumanoid_biped/quadruped/blob_or_tentacle/prop 每帧的整数坐标标记点landmarks如root枢轴、crown头顶、hand_r右手。声明在哪些帧上缺失、坐标落在格外都会被拒绝——绝不从几何形状里猜track——每行声明轨道角色轨道画什么base完整身体action_overlay盖在 base 之上的局部动作prop_effect挂在标记点上的道具/特效如一把浇水壶full_body_override整体替换 base双手挥砍这类无法拆分的动作layers 组合——指定堆叠顺序列表从底到顶与每层如何对齐到身体行的标记点上。文档示例就是「行走的下半身 握在hand_r标记点上的浇水壶」组合成down_walk_watering。合成合同是纯确定性的整数平移 alpha 混合没有旋转、缩放或重采样——所以同一输入必然产出同一字节验证方法就是组合两遍比对 SHA-256。旋转缩放早在 curation 阶段就烧进源帧里了。烘焙命令sprite-gen compose-layers --run-dir run-dir行为规则很硬核所有组合先在内存中全部完成任何一处违例 → 整体失败、列出全部诊断、一个文件都不写成功后输出layers/name.pnglayers/name.manifest.jsonlayers/layers.report.json记录每层的偏移量、裁剪像素数、源行 revision发布是一个事务——所有文件先写成临时文件再原子换入中途磁盘写满也不会留下半成品。实现见 sprite_gen/compose/layers.py声明校验SSoT与 sprite_gen/compose/compose_layers.py合成烘焙契约全文见 docs/layer-tracks.md。收尾一条流水线一套可交付资产base 图集 ──recolor──▶ variants/N 个配色 报告 │ └─compose-layers─▶ layers/骨骼组合图集 报告最终交付variants/picked.png及其兄弟 manifest、layers/下的组合图集、外加运行时直接可读的frame_layout。base 图集始终是几何事实来源SSoT配色与组合都只是它确定性的延伸。延伸阅读 官方文档总索引docs/README.md Recolor 参考docs/recolor.md 图层轨道契约docs/layer-tracks.md️ Curation 侧车与视图docs/curation.md 行为总纲SKILL.md【免费下载链接】sprite-genGenerate clean 2D game sprites animation atlases — component-row pipeline: state rows, alpha cleanup, frame extraction, runtime atlases. Codex/Claude skill.项目地址: https://gitcode.com/gh_mirrors/sp/sprite-gen创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考