图 3 机械教舰船候选:机械教用红黑黄铜、机械圣殿、高塔、圆形节点和工业引擎拉开识别度。
三、把 AI 输出变成可重复管线,而不是一次性聊天记录这套工作流里,我尽量不让关键步骤停留在聊天窗口。凡是会反复用到的东西,都落到仓库里:生成器、尺寸校验、静态验证、几何拟合、武器挂点拟合、同步脚本、实机验证 mission。
· build_alpha.ps1 串起资产生成、武器数据生成、几何拟合、挂点拟合和Java 打包。
· validate_static.py 检查 CSV 行宽、JSON解析、variant 引用、weapon/wing 引用和资产 manifest。
· fit_ship_geometry.py 根据 PNGalpha 拟合 bounds、collisionRadius 和 engineSlots。
· fit_weapon_slots.py 根据当前贴图重新放置weaponSlots。
· indsep_validation mission 在战斗中输出武器开火、wing发射和资源缺失日志。
这样做的好处是,AI 每次不是“重新猜一遍项目结构”,而是在已有脚本和文档上继续推进。出错也更容易定位:到底是提示词问题、贴图问题、.ship 坐标问题,还是 Starsector loader 问题。
四、生图不直接进游戏,先进入候选池我现在把 AI 图当作“候选素材”,不是最终资产。
1. 用明确尺寸生成大图源。
2. 使用纯色背景,例如 #00ff00。
3. 本地去背景,生成透明 PNG。
4. 裁切主体。
5. 缩放并居中到 .ship 要求的实际尺寸。
6. 接入 Mod。
7. 静态验证。
8. 实机截图确认。
| 最近补充的舰船生图硬规则
不生成尾焰;不绘制完整炮塔和炮管;只绘制炮塔底座、炮位环、炮廓开口、硬点插座、发射舱门;光照使用均匀漫射光,只用轻微环境光遮蔽突出结构层次;不要强烈定向光、高光、电影边缘光。 |
图 4 舰载机候选:Fury 截击机和 Starhawk 轰炸机单独做对照板,小尺寸资产先看可读性。
五、尺寸和透明背景一定要脚本化Starsector 对 sprite 尺寸非常敏感。我的做法是最终 PNG 必须和.ship 里的 width / height 一致。比如一艘船 .ship 里是 132x218,那么最终贴图就必须是 132x218。
我写了校验脚本检查 PNG 是否存在、尺寸是否等于 .ship 定义、ship /variant / weapon 引用是否都存在、是否还有 placeholder / missing 资产,以及 weapon / wing / hull 数量是否符合当前版本目标。
六、碰撞体、引擎和武器挂点不能靠默认模板这一块踩坑最多。一开始舰船贴图已经换成“舰艏朝上、引擎朝下”的新图,但.ship 里的碰撞体、引擎位置和武器槽位还沿用旧的横版模板。
· 船体碰撞范围和图片不贴合。
· 引擎火焰喷在错误位置。
· 武器不在炮位上。
· 贴图方向和 Starsector 坐标语义不一致。
后来单独写脚本拟合 alpha 轮廓,生成 bounds、collisionRadius和 engineSlots。另一个容易搞错的点是:图片里看起来是上方舰艏、下方引擎,但 Starsector .ship 局部坐标里,非战机舰船的 +X 才是前方。
图 5 碰撞体和引擎槽位叠加:青色线是bounds,红色标记是 engineSlots;用叠加图检查碰撞体和喷口位置。
图 6 武器挂点修正前:旧模板挂点和新贴图炮位不匹配,容易出现武器漂浮或压在错误结构上。
图 7 武器挂点修正后:修正后把弹道、能量、导弹槽位放到炮塔底座、炮廓或发射舱附近。
七、用验证 mission和日志做回归【其实就是gpt写了个测试用的战役,然后用computer use自己点进去战役自己部署舰船测试】
我不太想只靠“进游戏看一眼没崩”来验收,所以做了一个专门的验证 mission。它会覆盖当前版本的主要舰船、武器和 wing,然后在战斗中输出日志。
· 15 种武器是否都加载。
· 15 种武器是否都实际开火。
· 2 种 wing 是否发射。
· projectile / missile / beam 是否出现。
· 是否有缺失武器、缺失 wing 或资源加载错误。
图 8 实机战斗验收:验证 mission 中确认舰船、战机、武器、弹体和光束在实机中能加载并开火。
八、目前这套流程的优点和问题
| 优点 | 问题 |
| 设计目标不会随着生图结果漂移。 | |
| 每张图都有接入尺寸和验证标准。 | |
| 静态验证和实机验证能挡住很多低级错误。 | |
| AI 图只作为候选,不会绕过筛选直接进包。 | |