本文记录发布时的实现与测量。文中的版本号、费用和检查数量属于该阶段;后续兵种安装记录见吸血鬼交付,现行工具入口见独立仓库

上一篇把英雄无敌 3 的引擎和文件格式摸清了。这篇讲后面发生的事:我写了两个检查, 然后它们各自给了我一串自信但错误的数字。

第一个:锚点漂移

验证器要拦的是引擎不报错、画面却坏掉的那类问题。其中一项是逐帧量 alpha 包围盒, 兵种要是在画布里游走就报警——那看着就是在滑行。

然后我拿它去跑英雄无敌 3 自己的素材,出来八条警告。

warning  1x: group 5 (DEATH) drifts -- ground line 9.0px, centre 23.0px
warning  1x: group 12 (ATTACK_FRONT) drifts -- ground line 3.0px, centre 50.5px

原版骷髅没毛病,是我的阈值有毛病。

动作组那个 12 像素的上限是我拍脑袋定的。可突刺本来就要移动地面线,挥剑会把包围盒中心 拽到躯干外面去——光 ATTACK_FRONT 中心就跑了 50px。这儿根本没有站得住脚的绝对值, 所以我把阈值删了,只报数字,让人自己跟原版比。

待机组则是不该看中心。MOUSEON 是把剑从平举到竖起,中心挪了 9px,脚一个像素没动。 现在待机只看地面线。

改完再跑原版:零错误零警告。我造的那些坏样本照样全中。

第二个:剪影重叠度

概念阶段我又建了个闸门:把候选图缩到游戏尺寸,抠剪影,跟原版算重叠。定的线是 70% 算 同一个兵种,低于 50% 战场上认不出来。

第一张概念稿它给了 31%。这数字有三处错。

图是不透明的。 图像模型出的不是抠图,所以"剪影"就是整张矩形。

然后我用从边缘泛洪去抠背景,把角色围出来的空隙填实了。 腿之间那块、横在身前的剑 下面那块——而剪影优先的设计恰恰吃这些空隙。改成按颜色全局抠才对,这也是生成器现在 非要绿幕背景的原因。

第三个问题在指标本身。 概念稿是自由姿势,原版是某一个特定动画帧,光朝向反了分数 就能腰斩。拿重叠度当概念阶段的闸门,本身就选错了东西——再好的概念稿也过不了。

现在闸门换成比例:等高归一化后的宽高比。这个跟姿势无关,而且直接对应"它占格子的 方式像不像原版"。重叠度还报,取两个朝向里高的那个,但标明只作参考——它该用在后面, 拿渲染帧比对它要替换的那一帧。

第一版骷髅概念稿:偏宽 51%。把 prompt 里的站姿收紧再跑:14%,进区间了。

概念稿在游戏尺寸下与原版剪影对照
修好之后的检查。从左到右:候选图 1x、2x、4x,它在游戏尺寸下的剪影,原版的剪影。1x 那格才是玩家看到的。

顺手跑了整个墓园城

指标靠谱了,就把墓园城十四个兵种一起过一遍。正面稿,1024×1440,用 Black Forest Labs 的 FLUX.2 [pro] 生成,每张 4.5 credits, 一共 63,约六毛钱。

比例是逐个兵种量的,不能用一个数糊弄——它们差得远:幽灵 0.33,巫妖 0.41,人形 0.45 到 0.53,龙 0.76,骑马骑士 0.81 到 0.84。用一个全阵营通用的数,会放过一个长得像骑士的幽灵。

结果十四个过八个。

墓园城十四个兵种概念稿
全部十四个,正面。绿色是比例在 15% 区间内,红色是超出。

六个不合格全是偏宽,一个偏窄的都没有。 这是系统性偏置:图像模型爱给角色留地方, 站开、张臂、展翅;而英雄无敌 3 的兵种是紧的,因为得待在一个六边形里。我 prompt 里 那句 “compact upright framing” 压不住这个倾向。

偏差是单向的,所以知道该往哪边改。

两次都是同一个教训

我两次写检查,两次自我感觉良好,两次拿到自信而错误的数字。两次修好的办法也一样: 找一份我已经知道答案的数据,拿它去跑。

指标写完得拿一份已知答案的数据跑一遍,不然不知道它在量什么。原版素材就摆在那儿。

代码:预览工具和漂移检查的校准在 PR #6, 概念稿闸门和墓园城批量生成在 PR #10

工具在 h3-art-pipeline 维护;模型和完整 mod 留在本地。工具迁移与复现

历史记录

历史原文与修订记录(展开阅读)

以下完整保留本次整理前的原文、图片和删除线。这里的“当前”“尚未完成”和“下一步”均指各段写作或标注时的状态;旧版本号、旧工具路径与试稿不能作为现行操作说明。

2026-09-09 工具迁移: 后续代码在 h3-art-pipeline 维护,原 tools/creature-art/tools/town-art/ 对应新仓库的 creature-art/town-art/。本文的旧路径和 PR 链接保留作历史记录。迁移与复现说明

上一篇把英雄无敌 3 的引擎和文件格式摸清了。这篇讲后面发生的事:我写了两个检查, 然后它们各自给了我一串自信但错误的数字。

第一个:锚点漂移

验证器要拦的是引擎不报错、画面却坏掉的那类问题。其中一项是逐帧量 alpha 包围盒, 兵种要是在画布里游走就报警——那看着就是在滑行。

然后我拿它去跑英雄无敌 3 自己的素材,出来八条警告。

warning  1x: group 5 (DEATH) drifts -- ground line 9.0px, centre 23.0px
warning  1x: group 12 (ATTACK_FRONT) drifts -- ground line 3.0px, centre 50.5px

原版骷髅没毛病,是我的阈值有毛病。

动作组那个 12 像素的上限是我拍脑袋定的。可突刺本来就要移动地面线,挥剑会把包围盒中心 拽到躯干外面去——光 ATTACK_FRONT 中心就跑了 50px。这儿根本没有站得住脚的绝对值, 所以我把阈值删了,只报数字,让人自己跟原版比。

待机组则是不该看中心。MOUSEON 是把剑从平举到竖起,中心挪了 9px,脚一个像素没动。 现在待机只看地面线。

改完再跑原版:零错误零警告。我造的那些坏样本照样全中。

第二个:剪影重叠度

概念阶段我又建了个闸门:把候选图缩到游戏尺寸,抠剪影,跟原版算重叠。定的线是 70% 算 同一个兵种,低于 50% 战场上认不出来。

第一张概念稿它给了 31%。这数字有三处错。

图是不透明的。 图像模型出的不是抠图,所以"剪影"就是整张矩形。

然后我用从边缘泛洪去抠背景,把角色围出来的空隙填实了。 腿之间那块、横在身前的剑 下面那块——而剪影优先的设计恰恰吃这些空隙。改成按颜色全局抠才对,这也是生成器现在 非要绿幕背景的原因。

第三个问题在指标本身。 概念稿是自由姿势,原版是某一个特定动画帧,光朝向反了分数 就能腰斩。拿重叠度当概念阶段的闸门,本身就选错了东西——再好的概念稿也过不了。

现在闸门换成比例:等高归一化后的宽高比。这个跟姿势无关,而且直接对应"它占格子的 方式像不像原版"。重叠度还报,取两个朝向里高的那个,但标明只作参考——它该用在后面, 拿渲染帧比对它要替换的那一帧。

第一版骷髅概念稿:偏宽 51%。把 prompt 里的站姿收紧再跑:14%,进区间了。

概念稿在游戏尺寸下与原版剪影对照
修好之后的检查。从左到右:候选图 1x、2x、4x,它在游戏尺寸下的剪影,原版的剪影。1x 那格才是玩家看到的。

顺手跑了整个墓园城

指标靠谱了,就把墓园城十四个兵种一起过一遍。正面稿,1024×1440,用 Black Forest Labs 的 FLUX.2 [pro] 生成,每张 4.5 credits, 一共 63,约六毛钱。

比例是逐个兵种量的,不能用一个数糊弄——它们差得远:幽灵 0.33,巫妖 0.41,人形 0.45 到 0.53,龙 0.76,骑马骑士 0.81 到 0.84。用一个全阵营通用的数,会放过一个长得像骑士的幽灵。

结果十四个过八个。

墓园城十四个兵种概念稿
全部十四个,正面。绿色是比例在 15% 区间内,红色是超出。

六个不合格全是偏宽,一个偏窄的都没有。 这是系统性偏置:图像模型爱给角色留地方, 站开、张臂、展翅;而英雄无敌 3 的兵种是紧的,因为得待在一个六边形里。我 prompt 里 那句 “compact upright framing” 压不住这个倾向。

偏差是单向的,所以知道该往哪边改。

两次都是同一个教训

我两次写检查,两次自我感觉良好,两次拿到自信而错误的数字。两次修好的办法也一样: 找一份我已经知道答案的数据,拿它去跑。

指标写完得拿一份已知答案的数据跑一遍,不然不知道它在量什么。原版素材就摆在那儿。

代码:预览工具和漂移检查的校准在 PR #6, 概念稿闸门和墓园城批量生成在 PR #10