外观
评测 GNN × XPBD 混合布料:长序列、完整消融与运行时预算
约 5492 字大约 18 分钟
2026-08-28
一个混合布料求解器很容易做出“某一段看起来不错”的演示:挑一个有利的动画相位,给 GNN 一个合适的引导强度,再增加几次 XPBD 校正,短视频往往足够稳定。但真正的问题不是它能否生成一次好结果,而是:在固定运行预算下,它是否比纯 GNN 或纯 XPBD 更准、更稳,并且这种优势能否跨服装、拓扑、动作和材质重复出现?
本文给出一套工程评测框架。先说明来源边界:MeshGraphNets 报告 one-step、50 步和整段 rollout RMSE,并用输入噪声增强自回归稳定性;HOOD 在层次结构消融中比较验证目标值、梯度范数和推理时间,并另做视觉偏好评测;Small Steps 在相同数量的约束求解遍历下比较子步策略的约束误差、数值阻尼和耗时;Differentiable XPBD 评估能量行为与物理参数反演。下面把位置、应变、穿透、能量、稳定时间、尾延迟和成对视觉评测组合成同一验收协议,是本文提出的工程方法,不是上述任一论文规定的标准。
1. One-step 只回答局部问题
One-step 测试应从参考数据状态 st 出发,只预测 t+1。若模型使用多帧历史,整段历史也必须来自参考数据;人体姿态、碰撞体和外力等条件输入则按部署时可获得的信息提供。它适合检查数据、单位、积分和网络输出是否对齐,也可以初筛 checkpoint,却不能证明长期稳定,更不能单独决定最终 checkpoint。最终选择只能使用验证集上的 rollout、约束违例和性能指标,测试集只用于一次最终报告。
先固定自由动态顶点集合 F,并在测试前定义参考长度 Lref,例如静止服装包围盒对角线或静止面积平方根;定义一旦选定,就不能随方法或运动帧变化。位置误差先以长度单位报告质量加权 RMSE,再给出无量纲版本:
RMSEx(1)=∑i∈Fmi∑i∈Fmi∥x^it+1−xit+1∥2,Ex(1)=LrefRMSEx(1).
其中 RMSEx 的单位是长度,Ex 无量纲。速度误差使用同样的质量权重,原始值单位为长度/时间;若还要给无量纲值,则必须预先声明固定的 Vref,而不是除以可能接近零的逐帧真值速度。还要明确速度来自数据、有限差分,还是 XPBD 校正后的位置回写。若训练目标是加速度,应分别报告网络原始输出、积分后的 proposal,以及经过 XPBD 后的最终状态;否则一个坏 predictor 可能被强投影掩盖。
One-step 表至少包含三列:积分后的 GNN proposal、XPBD correction 和最终状态。为避免质量范数和稳定常数的量纲含混,先定义
rmsM(z)=∑i∈Fmi∑i∈Fmi∥zi∥2,
再记录
Eproj=rmsM(xproposal−xt)+εxrmsM(xfinal−xproposal),
其中 εx 与位置同量纲,并相对 Lref 固定。这个比值可以看出到底是网络在预测,还是 XPBD 每帧都在替它重做结果;分母接近零的静止帧应单独统计,不能靠 εx 隐藏。固定点和运动学点不进入 F,其跟随误差另表报告,不能用大量已知边界点稀释 RMSE。
2. Rollout 要报告曲线,而不是一个平均数
Rollout 从首帧参考状态开始,此后只回灌方法自己的布料动态状态;不能在中途偷偷注入真值位置、速度或隐藏历史。人体动画等部署时本就已知的运动学条件可以继续使用参考驱动,但必须明确它们不是被预测量。至少报告短、中、长三个按物理时间定义的窗口,并保留逐帧曲线;比较不同子步数时要在相同物理时刻采样,不能把“步数相同”误当成“时长相同”。一个整段平均值会把早期精度、后期崩溃和动画静止区间混在一起。
长程位置 RMSE 也不是永远可靠。混沌或强接触系统在相位分离后,两个都合理的轨迹仍可能逐点相距很远;MeshGraphNets 对长 rollout 的讨论就提醒了这种 decoherence。超过相干窗口后,应增加频谱、褶皱尺度、速度分布和接触事件统计,同时保留失败率。不能因为 RMSE 失去解释力就删掉它,也不能只凭“看起来都合理”宣布等价。
建议按下列维度同时记录:
| 维度 | 指标与量纲 | 必须补充的分布信息 |
|---|---|---|
| 位置 / 速度 | RMSEx [长度]、Ex [-]、RMSEv [长度/时间] | 每帧曲线、时间归一化 AUC、P50/P95、末帧 |
| 拉伸 | 边应变 ϵstretch [-] | 拉伸/压缩分开统计,绝对值 P95/P99、最大值、超阈值边比例 |
| 弯曲 | 环绕后的二面角误差 [rad] | 绝对误差 P50/P95/P99、最大值 |
| 穿透 | 有符号距离的负部 [长度] | 穿透比例、条件深度分位数、最长连续持续时间 [s] |
| 能量 | 动能、势能、弹性能、外功、耗散 [J] | 收支残差曲线、峰值、周期净变化 |
| 稳定性 | 首次失败时间 Tfail [s] | 失败类型、生存曲线与右删失样本 |
| 性能 | 各阶段 CPU/GPU 时间 [ms]、显存 [MiB] | P50/P90/P99、最大值、超预算率、冷/热启动 |
这里的时间归一化 AUC 指 T−1∫0TE(t)dt;若使用离散帧,则按真实 Δt 加权。轨迹长短不一时,不能直接累加误差,也不能把所有帧摊平后假装它们是独立样本:应先得到每条轨迹的统计量,再跨轨迹汇总。
其中边拉伸可写成
ϵestretch=le0∥xi−xj∥−1,
拉伸应变是有符号量,正值为拉伸、负值为压缩;若只报告 signed P95,严重压缩可能被漏掉。弯曲误差应使用
Δθ=atan2(sin(θ^−θ),cos(θ^−θ))
做 2π 环绕,并统一以弧度统计,避免 179∘ 到 −179∘ 被算成巨大跳变。约定有符号距离 ϕ≥0 为允许侧,零厚度碰撞体的穿透深度为 di−=max(0,−ϕ(xi));若布料厚度为 r,则改为 max(0,r−ϕ)。深度分位数应在已穿透样本上计算,并同时报告全体样本的穿透比例,否则大量零值会让 P95 看似为零。自碰撞则需要独立的非相邻点-三角形与边-边对统计,不能只数贴近顶点。
能量尤其容易误用。受骨骼驱动、风、摩擦和阻尼的布料本来就不守恒;若约定外界对布料做正功为 Wexternal>0、累计耗散为 D≥0,合理量是能量收支残差
RE(t)=E(t)−E(0)−Wexternal(0,t)+D(0,t),
它的单位是焦耳。移动附着点、运动碰撞体、风和用户交互的功都必须计入 Wexternal,摩擦与显式阻尼则计入 D;二者的划分要采用统一符号约定,不能把同一份耗散重复计算。漏记任一项时,RE 只能作为诊断量,而不能被解释为守恒误差。只有无外力或外功可计算的受控场景,才能把能量漂移直接解释为数值误差。Differentiable XPBD 在受控模型中比较 XPBD 变体的物理合理性和能量行为,也指出未计入重力等外部能量会限制能量修正;这不意味着任意生产场景都应采用“总能量恒定”作为门禁。
Tfail 是首次出现预先定义失败条件的时间,例如 NaN、三角形翻转、持续穿透、拉伸越界或求解超时。阈值必须在看结果前冻结,并同时报告“到测试结束仍未失败”的右删失样本,不能把它们当成恰好在末帧失败,也不能只对已失败样本求平均。建议报告生存曲线、固定时长成功率,必要时再给受限平均生存时间。
门禁阈值不是跨项目通用的物理常数。应先在可信的经典求解器、数据真值和目标硬件预算上确定量纲与容差,再在查看候选方法结果之前登记阈值。若准确度、稳定性和耗时无法同时排序,就发布 Pareto 前沿,不要用一组临时权重压成单个总分;总分很容易让严重穿透被少量速度收益抵消。
3. 泛化测试必须按因素分层
随机拆帧会把同一轨迹的相邻状态泄漏到训练集和测试集。测试单位应至少是完整轨迹;要验证服装泛化时,还必须按服装或拓扑整体留出。
| 分层轴 | 域内测试 | 插值测试 | 外推测试 |
|---|---|---|---|
| 服装 | 已见模板与尺寸 | 已见类型的新比例 | 未见衣片形状、面积与长宽比 |
| 拓扑 | 已见连通图 | 新网格密度、局部不规则性 | 新连通分量、孔洞、缝合或动态边 |
| 动作 | 已见动作与速度 | 动作混合、不同起始相位 | 更快速度、更大幅度、强接触 |
| 材质 | 训练采样中心 | 范围内未见组合 | 范围边界、范围外与空间异质材质 |
单轴通过还不够。应额外保留组合留出,例如“未见服装 × 快动作 × 较硬材质”,因为图邻域、接触频率和约束刚度会相互影响。各分层使用相同指标,但不能只汇总成一个总平均;失败常常集中在样本较少、价值却最高的外推层。
若预测与参考采用不同分辨率,或任一方法会动态重网格,逐顶点一一对应便不再成立。此时必须预先规定从预测表面到参考表面的映射,或改用双向表面距离、采样后的几何误差与质量积分;不能按数组下标计算“位置 RMSE”。映射与采样误差应单独量化,并对所有方法共用同一套实现。若参考求解与预测始终共享同一测试网格,则可继续使用逐顶点误差,但也要保留质量权重,避免密集区域支配结果。
4. 消融必须做完整因子矩阵
完整消融分成两层。第一层回答“哪个组件带来收益”,至少包含:
| 配置 | 学习 proposal | XPBD 最终投影 | 目的 |
|---|---|---|---|
| 纯 XPBD | 否 | 是 | 经典求解基线 |
| 纯 GNN | 是 | 否 | 学习模型基线;即使不适合上线,也必须如实计入失败 |
| GNN + XPBD | 是 | 是 | 完整混合方案 |
| 逐组件移除 | 视配置而定 | 视配置而定 | 归因 world edge、层次图、碰撞特征、rollout 训练或其他被声称有效的组件 |
“逐组件移除”不是任选几个容易解释的开关。组件表至少要覆盖物理训练损失、world/body edge、层次消息传递、XPBD 结构投影、接触安全投影和失败回退中实际启用的部分。凡是正文声称贡献了精度、稳定性或速度的组件,都必须在同一训练与评测协议下单独关闭;对理论上可能耦合的组件,再保留预先指定的二阶交互项。纯 GNN 若会穿透,也应作为隔离环境中的基线报告穿透率和失败时间,而不是因“不安全”从表中消失。失败回退会截断坏轨迹,因此“原始方法”和“原始方法 + 回退”必须各报一份,不能让重置次数替模型稳定性遮羞。
第二层回答“数值预算如何分配”。混合系统至少有五个相互耦合的旋钮:
- 每视觉帧的子步数 S;
- GNN 引导强度 γ;
- 每子步 XPBD 迭代数 K;
- 拉伸与弯曲 compliance αstretch、αbend。
γ 必须有可复现定义,例如残差加速度 a=abase+γagnn,而不是界面上的无量纲滑杆。正 compliance 应在对数尺度采样,并分别扫描拉伸与弯曲;若要测试无限刚约束,α=0 必须作为独立离散点,不能塞进对数坐标。只写“物理强度”会掩盖两个约束族的补偿。
正确实验是 S×γ×K×αstretch×αbend 的全因子设计;若组合过多,则使用在看结果前登记的分数因子或响应面设计,并明确哪些交互项因此无法估计。不能先挑最佳 γ、固定后再调 K,也不能把 αstretch 与 αbend 合并成一个“物理强度”。
匿名本地观察(非论文结论): 某次原型评测先在单一参数点凭短片给三个候选方案排序;补跑“子步数 × 引导强度”矩阵后,方案次序在不同区域发生反转。它只说明局部观感无法隔离交互项,不证明任何具体参数普遍更优。每个矩阵格都要跑相同的序列、起始相位与配对随机种子,并同时展示质量和耗时。
Small Steps 还提醒我们:总约束投影次数相同,不代表数值行为相同;S 个小步、每步一次投影,可能比一个大步内做 S 次迭代具有更小的约束误差和阻尼。因此报告应包含三张切片:
- 固定每子步 K,观察增加 S 后的质量与成本;
- 固定结构约束遍历预算 S⋅K=B,比较“更多子步”和“更多迭代”;
- 固定真实墙钟预算,比较最终可部署配置。
如果 GNN 每子步调用一次,增加 S 还会同时增加网络成本;如果只在视觉帧调用一次,则必须说明引导如何分配到子步。两者不能放在同一性能图中而不标注。S⋅K 只代表遍历次数:活动接触数量随状态变化时,还要记录实际评估和投影的约束数,以及碰撞检测刷新次数。
所谓“同一预算”还必须冻结视觉帧步长、输入信息、碰撞厚度与检测刷新策略、数值精度、图构建策略、硬件和并发实例数。端到端耗时要包含图更新、GNN、碰撞、约束与同步,不能只匹配 S⋅K。各方法只能在验证集上调参,并获得事先约定的近似调参预算;训练计算量与运行时预算分开报告。最终可采用两种公平视图:一是在相同 P99 帧时上限内比较质量,二是在达到相同质量门槛时比较成本。
5. 动画 wrap 会伪造稳定性
匿名本地观察(非论文结论): 某次原型评测复查播放链路时发现,动画 wrap 含有边界重复帧,而且每轮 wrap 都重置布料状态;固定相位采样因而把反复冷启动误判为长序列稳定。该观察不包含具体资产、项目或参数,只用于说明测试夹具也必须审计。这个陷阱同时污染误差和性能:重复帧降低驱动强度,重置清除了已经积累的速度、应变和穿透。
第 3 篇的初步视觉对照可以帮助理解不同求解路径的直观差异,但这里只把它视为定性材料;正式结论仍以连续 rollout、完整矩阵和预算对齐后的数据为准。
正确协议是:
- 动画可以循环,但布料位置、速度、GNN 历史状态和其他持续状态不得随 wrap 重置;
- 先验证首尾姿态、碰撞体速度和时间戳连续,边界重复帧单独标记;
- 从多个动画相位启动等长 rollout,避免只选择最平稳的起点;
- 将初始化后的 warm-up 与 steady state 分开报告,边界窗口也单独报告;
- 真正需要冷启动的产品流程另设测试,不与持续运行结果混合。
连续 rollout 不等于无限重复同一短片。还应包含非循环长动作、速度扰动和外力脉冲,检查系统在偏离训练轨迹后是否能恢复。
6. 随机种子与 GPU 非确定性
至少区分三类随机性:训练初始化和数据顺序、测试初态扰动、GPU 执行顺序。图消息的 scatter/reduction、原子累加、并行约束批次和接触对排序,都可能因浮点非结合性产生微小差别;自回归系统会把这种差别逐步放大。
每个关键配置应跨预先登记的多个训练种子和 rollout 扰动种子,报告逐种子结果、中位数、置信区间与失败次数,而不是挑最佳 checkpoint。置信区间的重采样单位应是独立轨迹或独立训练运行,不能把同一自回归轨迹中的数千帧当成数千个独立样本。还应让同一 checkpoint、同一初态重复运行,并在每次运行前重置全部持久状态,单独估计执行层非确定性。调试阶段可以使用确定性聚合或串行约束顺序建立参考,但生产性能必须在真实并行模式下测量;确定性参考和发布配置是两个结果集。
成对消融必须共享场景、起始相位和扰动种子。否则配对优势会被样本难度差异淹没。若 GPU 无法做到逐位复现,就发布容差、分位数和失败概率,而不是声称两个浮点结果应完全一致。
7. 运行预算看尾延迟,不只看平均 FPS
把一帧拆成图构建、GNN、碰撞候选、XPBD、速度更新、CPU/GPU 传输和同步等待。计时 GPU 工作时必须使用时间戳查询;显式同步只应用于隔离基准或端到端边界,单测 CPU 提交时间会低估成本。异步阶段可能重叠,所以各阶段时间之和不一定等于端到端帧时,两者都要报告。先预热模型、内存池和 shader,再测 steady state;首次图编译、缓存建立与内存扩容则放入 cold-start 表。
平均 FPS 会隐藏偶发的接触边暴涨和求解尖峰。发布表至少给出 P50、P90、P99、最大帧时、显存峰值,以及超过帧预算的比例;按服装规模和接触强度分桶。每张表必须写明测量帧数、独立重复次数、并发实例数、硬件、驱动、精度、功耗/时钟策略与是否包含渲染;最大值没有样本数就不可比较。尾延迟置信区间按独立运行或分块 bootstrap 估计,不能把强自相关的连续帧当独立样本。对实时系统,“P99 不越预算”通常比平均快一毫秒更有价值。
视觉评测采用随机左右顺序的成对 A/B:相同相机、光照、播放速度和起始状态,观察者不知道方法名,并允许“无明显差别”。问题应拆成稳定性、材料感、碰撞可信度和整体偏好,而不是只问“哪个好”。报告偏好比例、观察者数量和置信区间,并把视频偏好与数值失败对照;视觉票数不能覆盖穿透或超时门禁。
8. 一份可审计的结果页
最终结果不应只剩“最佳配置”。建议同时发布:
- 数据切分、四个泛化轴以及拓扑变化时的几何映射;
- one-step、短中长 rollout 的逐帧曲线;
- 组件消融、完整数值因子矩阵及等遍历、等墙钟切片;
- checkpoint 选择规则、每个配置的随机种子、失败次数、删失样本和置信区间;
- warm-up、steady state、wrap 边界和 cold start 的独立结果;
- 指标单位与归一化常数、样本数、分阶段 P50/P90/P99 性能与成对视觉评测。
论文提供了可复用的实验思想,但没有一篇论文替我们定义生产门禁。混合求解器是否有价值,最终要由长序列约束违例、跨分布失败率和真实尾延迟共同回答。只有当完整矩阵仍支持最初结论,且动画相位、重置与 GPU 随机性都不能把它推翻,才值得把一次演示称为稳定方案。
参考资料
- Pfaff et al., Learning Mesh-Based Simulation with Graph Networks, ICLR 2021.
- Grigorev et al., HOOD: Hierarchical Graphs for Generalized Modelling of Clothing Dynamics, CVPR 2023.
- Macklin et al., Small Steps in Physics Simulation, SCA 2019.
- Drysch, Stotko, Klein, Differentiable XPBD for Gradient-Based Learning of Physical Parameters from Motion, VMV 2025.
