绑定会在哪里出问题
一个在某个查看器里正常、换个查看器就炸开的绑定模型,几乎从来不是网格的问题,而是蒙皮的问题。蒙皮问题只藏在三个地方:骨骼层级、蒙皮权重和逆绑定矩阵。本工具直接从文件里把这三样都读出来。
影响数量
每个顶点都会绑定到若干根骨骼。实时管线会给这个数量设上限——四是几乎通用的极限,而不少移动端和 WebGL 路径更倾向于二。「影响」标签页会给出一张直方图:多少顶点用了一根骨骼,多少用了两根、三根、四根,以及有多少顶点完全没有权重。
最后一类最要紧。所有权重都为零的顶点,在蒙皮生效的那一刻就会塌陷到绑定位置,表现出来就是撕裂的面或者一根射向远方的尖刺。它在绑定姿势下完全看不出来,动画第一帧就一目了然。
glTF 可以通过额外的 JOINTS 集声明每个顶点超过四个影响,但几乎没有任何程序会加载它们。文件这么做时本工具会提示你,因为这意味着你在制作软件里确认过的形变,并不是别人会看到的形变。
什么也不做的骨骼
一根不影响任何顶点的骨骼,仍然会占用蒙皮 uniform 缓冲区中的一个位置,仍然每帧都要更新。整条手指骨链在导出后原样保留、而整只手的顶点却全绑在手腕上,这种情况相当常见。「骨骼」标签页会显示每根骨骼影响的顶点数和权重总和,无用的骨骼因此会直接排到最下面。
逆绑定矩阵
每个关节都存有一个用来抵消其绑定变换的矩阵。这里的检查非常具体:骨骼与矩阵是否一一对应?是否有矩阵不可逆或者含有 NaN?还有最有用的一条——骨骼的世界矩阵乘以它的逆绑定矩阵,结果是不是单位矩阵?如果文件保存在绑定姿势下,结果就应当是单位矩阵。偏差很大并不违规,但当角色形变得像被对折了一样时,这是第一个该看的地方。
名称与根骨骼
重名的骨骼在 glTF 中是合法的,对重定向却是致命的,因为所有重定向系统都靠字符串来定位骨骼。同一个骨架里出现不止一根根骨骼,通常说明导出时出了岔子。这两种情况都会被标记出来。
从设计上就是私密的
解析全部在你的浏览器中完成。没有任何内容被上传,未发布的角色和受保密协议约束的客户绑定文件都留在你自己的机器上。
Tiny Online Tools







