跳到正文

角色远离原点后出现抖动 ​

在姿态模式下移动角色,使其远离世界原点后,播放动画时可能出现网格顶点局部抖动或形变。这通常是 Blender 在大坐标下浮点精度不足,误差经骨架与约束计算后显现的结果。抖动出现的距离取决于 Rig 结构与场景设置,没有适用于所有工程的统一阈值。

现象与测试结果 ​

在 Blender 5.2.3 中,将角色的 c_pos 总控移至不同距离,播放同一段 24 帧测试动作,并统计头部、身体、面罩和结构网格共 67,395 个顶点相对原点位置的偏差:

距离原点RMS 偏差最大偏差
100 米0.018 毫米0.182 毫米
500 米0.071 毫米0.683 毫米
1,000 米0.145 毫米1.403 毫米
2,000 米0.288 毫米2.020 毫米
5,000 米1.069 毫米11.699 毫米
10,000 米2.321 毫米34.669 毫米

偏差总体随距离增加,但会因姿态及约束计算而波动。以下视频分别展示灰模与材质渲染下,从原点至 10,000 米的对比:

姿态模式与物体模式对比 ​

下方从左至右依次为原点基准、姿态总控移动至 10,000 米、骨架对象整体移动至 10,000 米。三组使用相同动作;物体模式组的姿态总控仅作小幅移动。该 Rig 在物体模式下整体移动后,误差有所减小,但仍未消除。

该角色的面部由独立骨架控制,并通过父子级骨骼约束跟随主骨架运动。额外的约束计算可能进一步累积浮点误差,使面部在远离原点时出现抖动。

处理建议 ​

角色绑定与动画制作宜在世界原点附近进行。需要制作远距离场景时,尽量调整场景或采用浮动原点方式,使角色、骨架及约束目标保持在原点附近,避免在姿态模式下将整套 Rig 移至大坐标处继续制作动画。

原因 ​

Blender 的变换计算采用有限精度浮点数。坐标绝对值增大时,可表示数值之间的间隔也随之增大。网格经过骨架、矩阵、IK 与约束等多级运算后,舍入误差可能累积,并使动画求值结果出现差异,最终表现为局部抖动或形变。

参考:Blender 手册:限制、Blender 动画模块项目说明、远离原点时 Rig 变形案例。

代码以 MIT 协议开源,文档内容采用 CC BY-NC-SA 4.0 协议。