我是单打作者,使用Web技术制作游戏,而我独自无法完成的部分是CG方面。因此过去几个月来,我一直在测试代理人能够承担多少工作:绘制角色、将其切分为层、搭建骨骼、为其添加闲置动画、从视频中重新映射动画。搭建和动画部分变成了开源工具链 rig-c(MIT 许可证,https://github.com/rig-c)。本帖子讲述出现的问题以及如何解决,因为解决的方法才是有意思的。

如果想先看到输出效果,可以参考演示:https://rig-c.org/examples/ 在浏览器中播放 20 个 rig(五个角色从一张组合插图中切出,每个角色四套服装;还有 Bones 开关)。

问题。在我的设置中,代理人的反馈仅是文件是否能解析,而 Spine 的解析器非常宽容。以 4.2 方式写的约束在 4.3 中会直接消失。如果给曲线四个数字而不是它想要的,就会得到 NaN。如果网格的顶点数恰好等于其 UV 数量,骨骼权重会在不留痕迹的情况下被丢弃。文件加载成功,代理人说 "完成",而且它没有撒谎。我后来才发现,当动画中出现部分脱离时。

解决办法。我不再把 rig 当作代理人写的东西,而是把它当作提交给编译器的东西。代理人会生成两个 JSON 文件(rig spec、motion spec);rigc 会将它们与一系列命名断言(默认 Spine 配置下 36 条;parts 工具在更严格的 rig-play 配置下,运行全部 50 条)进行校验,要么生成 Spine 4.3 数据,要么一无所产生。没有跳过检查的选项。让我惊讶的是,拒绝信息的措辞非常重要。下面是当缺少部件图片时,代理人看到的内容:

FAIL A17_ATLAS_PAGE_FILES_EXIST: page "../images/hull.png" is not on disk at …/images/hull.png

它明确指出了找不到的文件以及搜索的位置,因此代理人可以直接修正而无需阅读文档;能够衡量的检查会同时给出找到的值和期望的值,例如网格顶点的权重和为 0.9000。无论如何,我花在阅读这些行上的时间比阅读文档的时间还多。另一条有价值的规则是:编译器永不猜测。如果一个数字不在规范中,它是报错并指出字段名,而不是给出 "合理的默认值",这使得构建记录真实反映了实际测量的内容。

它无法解决的问题。检查只确认数据在结构上是有效的,并不关乎外观。一个头与躯干相邻的 rig 依然会通过,因为这些是规范要求的数值。因此,最终仍需要人工检查,输出会直接导入到 Spine 编辑器中。运动也有限制:把一张图强行通过跑步或舞蹈,无法产生原始图本没有的内容;轻微运动(闲置、手势、行走)可以正常重新映射,强烈的运动则需要替换图。这是经过测量的,而非臆测;姿势工具的 README 中有表格。

它是否适用于从未见过它的代理人?我在公开考试(https://rig-c.org/exam/)中进行测试:全新会话仅获得已安装包的 README 和 --help,需要在每条命令之前自行写下预期结果。10 月 20 日,来自三个家族的八个模型完成了全部五项任务。六个模型在机器检查的所有行上通过了舞蹈任务;随后,一位人工盲目评估渲染的剪辑,给这六个模型的分数在 3 到 9 分之间。因此,检查只能看到运行是否通过,却几乎无法反映实际评分。失败的尝试也被保存,放在 trials 目录中,每个都标记了导致失败的具体数值。

实用提示:如果你尝试它,任何 rig-c 步骤都不需要 GPU,也不发送模型权重;绘制和层分割来自你自己运行的图像模型(层分割使用 See-through)。入门指南从已有绘制和层分割的已发表示例开始,仅使用 Bun,不需要 Python:https://rig-c.org/docs/getting-started/ 。播放器没有 Spine 运行时;它通过 <img> + CSS matrix() 来姿态化刚性部件,并提供针对 Pixi、Phaser 和 Three 的适配器。

给做这类工作的人的提问:当解析器和验证器都通过一个仍然看起来错误的 rig 时,你会向代理人提供什么反馈?我目前只用 "人工在最后查看" 以及一条拒绝并标明名称的验证器。如果你发现了更好的方法,我很想听。