延迟的波动比延迟的均值更难被适应
别名: 延迟抖动 · 延迟方差 · variable latency · frame-time variance
概念解释
二十毫秒每次都准,和「平均二十毫秒、来回在十二和四十之间跳」,不是同一种延迟。前一种稳定,运动系统可以按固定滞后去预测下一次头在哪;后一种叫延迟抖动(latency jitter)——同一动作有时几乎贴脸,有时慢半拍,预测被打乱。人适应得了偏高但稳定的均值,适应不了均值底下那条乱的时间轴。
它比较的是方差和均值,不是哪一段链路最长,也不是丢一帧时墙怎么跳。
机制
前庭信号和视觉后果之间,神经系统在学一个延迟。恒定延迟像戴上度数不变的棱镜:几天内指向误差会收。延迟每帧抽签,学到的补偿永远差一截,残余误差表现为「手跟不上」和「世界有时黏、有时滑」。预测控制对噪声比对应偏置更差:偏置可以减掉,噪声只能靠把增益打低,于是动作变保守、变慢。
造成抖动的常见来源不是传感器本身,而是排队:某一帧 GPU 超时、热节流、后台突然占核、垂直同步从「刚赶上」掉到「等下一格」,延迟一次跳一个刷新周期。均值看起来仍可接受,分布的尾巴已经在超阈。
所以只报平均运动到光子,会把一条时好时坏的体验写成合格。
怎么研究
用同一均值、两套分布:恒定延迟 vs 在该均值两侧按给定标准差抖动(或按双峰:赶上 vs 等下一帧)。任务用指向、追踪头动目标、或时间 reproductions。
自变量:均值、抖动的标准差或峰值、抖动是否与头速相关。 因变量:指向误差、追踪滞后的方差、不适、是否报告「有时突然发黏」。
光电二极管的直方图比单次均值有用:要看 95 分位和最大跳变,不只看期望。
边界
几乎不转头、不伸手的被动观看,抖动很难和均值分开,主诉会变弱。抖动若被限制在一个刷新周期以内,且显示侧仍每拍都用最新姿态,应用侧的帧时波动会被挡住一截——测应用帧时方差不等于测到眼睛的抖动。云端链路的抖动和本机排队不是同一数量级,也不能用同一条适应结论。实验室里用固定人工延迟(加法器)造出来的抖动,比真实系统「偶发等一帧」更密、更好学,外推会偏乐观。
怎么落地
- 验收写分位数和最大帧间隔,不写「平均 xx ms」单独过关。
- 把偶发超时从关键路径上挪走:热节流、着色器编译、同步加载不要出现在已经开始转头的会话里。
- 宁可稳定地多用一个刷新周期,也不要在「刚刚赶上」和「掉一格」之间来回翻——翻的那一下就是抖动。
- 验证:连续采运动到光子或帧间隔至少一两分钟,画直方图。均值合格而 95 分位跨了一个刷新周期,按抖动失败处理;用同一套动作在恒定延迟下对照,适应后的误差应变小。