N1.11.4latency jitter设计研究

延迟的波动比延迟的均值更难被适应

别名: 延迟抖动 · 延迟方差 · variable latency · frame-time variance

概念解释

二十毫秒每次都准,和「平均二十毫秒、来回在十二和四十之间跳」,不是同一种延迟。前一种稳定,运动系统可以按固定滞后去预测下一次头在哪;后一种叫延迟抖动(latency jitter)——同一动作有时几乎贴脸,有时慢半拍,预测被打乱。人适应得了偏高但稳定的均值,适应不了均值底下那条乱的时间轴。

它比较的是方差和均值,不是哪一段链路最长,也不是丢一帧时墙怎么跳。

机制

前庭信号和视觉后果之间,神经系统在学一个延迟。恒定延迟像戴上度数不变的棱镜:几天内指向误差会收。延迟每帧抽签,学到的补偿永远差一截,残余误差表现为「手跟不上」和「世界有时黏、有时滑」。预测控制对噪声比对应偏置更差:偏置可以减掉,噪声只能靠把增益打低,于是动作变保守、变慢。

造成抖动的常见来源不是传感器本身,而是排队:某一帧 GPU 超时、热节流、后台突然占核、垂直同步从「刚赶上」掉到「等下一格」,延迟一次跳一个刷新周期。均值看起来仍可接受,分布的尾巴已经在超阈。

所以只报平均运动到光子,会把一条时好时坏的体验写成合格。

怎么研究

用同一均值、两套分布:恒定延迟 vs 在该均值两侧按给定标准差抖动(或按双峰:赶上 vs 等下一帧)。任务用指向、追踪头动目标、或时间 reproductions。

自变量:均值、抖动的标准差或峰值、抖动是否与头速相关。 因变量:指向误差、追踪滞后的方差、不适、是否报告「有时突然发黏」。

光电二极管的直方图比单次均值有用:要看 95 分位和最大跳变,不只看期望。

边界

几乎不转头、不伸手的被动观看,抖动很难和均值分开,主诉会变弱。抖动若被限制在一个刷新周期以内,且显示侧仍每拍都用最新姿态,应用侧的帧时波动会被挡住一截——测应用帧时方差不等于测到眼睛的抖动。云端链路的抖动和本机排队不是同一数量级,也不能用同一条适应结论。实验室里用固定人工延迟(加法器)造出来的抖动,比真实系统「偶发等一帧」更密、更好学,外推会偏乐观。

怎么落地

  • 验收写分位数和最大帧间隔,不写「平均 xx ms」单独过关。
  • 把偶发超时从关键路径上挪走:热节流、着色器编译、同步加载不要出现在已经开始转头的会话里。
  • 宁可稳定地多用一个刷新周期,也不要在「刚刚赶上」和「掉一格」之间来回翻——翻的那一下就是抖动。
  • 验证:连续采运动到光子或帧间隔至少一两分钟,画直方图。均值合格而 95 分位跨了一个刷新周期,按抖动失败处理;用同一套动作在恒定延迟下对照,适应后的误差应变小。

延伸

  • 同组N1.11.1 端到端延迟是多段串联,优化只对最长的那段有效 · N1.11.2 重投影把渲染频率与显示频率解耦 · N1.11.3 丢帧在头动时表现为世界位置跳变,而不是画面变慢
  • 相邻N1.05 运动到光子延迟 · N1.12 刷新率与残像
  • 站内检索latency jitter · frame-time variance · variable latency

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/N1.11.4