本节摘要:运动到成像延迟(MTP)是头部转动到新画面送达视网膜的全程耗时,是眩晕的头号视觉推手。本节把它拆成传感、逻辑、渲染、输出四段,给出逐段测量方法;随后引入异步时间扭曲与异步空间扭曲两件兜底工具,讲清它们能掩盖什么、掩盖不了什么,以及注视点渲染如何从源头减负。
本章追凶至此进入案发现场核心:小周报告中"画面追不上"的那一下,就是 MTP 突破了她耐受阈值的瞬间。本节是视觉防线的技术密度之巅,也是第五章帧预算思想的源头——延迟账与帧预算账,本是同一本账。
第一段传感与读取:陀螺仪以远高于刷新率的频率采样,但数据要等合成器在帧起点读取,采样间隔本身贡献平均半段等待。第二段逻辑:输入处理、脚本、物理、场景剔除,CPU 把这一帧要画什么准备好。第三段渲染:GPU 双眼绘制,是最大也最弹性的一笔。第四段输出:渲染完成要等显示扫描周期,扫描逐行点亮像素,顶端像素先亮、底端后亮,像素从首行点亮到 Eye 到达(光线离开屏幕进入眼睛)又贡献一段。四段相加,就是从"头开始转"到"对应画面进眼睛"的全程。
工程上要有两个清醒认知。其一,延迟由最慢的段决定节奏:渲染超支一毫秒,整帧顺延一毫秒,还会挤掉输出等待窗口,连锁反应远超直觉。其二,不同段的可压缩性完全不同:传感段靠高采样率硬件;逻辑段靠优化与裁剪;渲染段手段最多(减负、并发、预测);输出段由刷新率钉死——这正是第二节把刷新率设为红线的原因。
平台通常提供帧时序数据(如合成器报告的各阶段时间戳),自查步骤如下:先读合成器时间戳,确认目标帧间隔与实际帧间隔的差值;再开引擎的性能分析器,把逻辑段按模块细分(脚本、物理、剔除各占多少);渲染段用 GPU 时间戳查询取双眼平均;输出段按刷新率折算扫描耗时加 Eye 端余量。四段数字相加应与端到端实测大致吻合(可由高速摄像机拍摄真实头部转动与画面响应估算全程),对不上的差额通常是队列等待——提交队列积压时,渲染"完成"不等于"上屏"。
一次典型的延迟账目(一体机、稳定帧率下,单位毫秒,量级示意) 传感与读取 ~2 (采样间隔均值 + 传输) 逻辑 CPU ~3 (脚本 1.2 / 物理 0.8 / 剔除与其他 1.0) 渲染 GPU ~7 (双眼合计,注视点渲染可再省) 输出扫描与余量 ~4 (扫描半程 + Eye 端) 合计 ~16 对应一次完整运动到成像 红线共识:合计越接近一个帧间隔,掉帧时的体感劣化越剧烈
💡 关键直觉:延迟优化的第一刀永远砍渲染段,因为它最肥最弹性;逻辑段第二;传感与输出基本是硬件定数。把优化精力按账目比例分配,而不是按团队熟悉度分配。
异步时间扭曲(ATW)的原理:渲染线程与合成线程解耦,合成器在最后时刻拿最新头部姿态,把已完成的旧帧重新投影扭曲后再上屏。效果是头部转动时画面"贴脸"跟手,即使渲染掉帧,视野边缘也基本稳定——它消除的是形态二冲突(身体动、画面滞后)的大头。代价与局限同样明确:新出现的前景物体、渲染内容本身的位置(世界内移动)无法靠姿态扭曲修正,于是有了异步空间扭曲(ASW),用前一帧的运动矢量估算被跳过的画面,像视频插帧一样补帧。ASW 救得了世界内运动,却会引入涂抹伪影,快速纹理上尤其明显。
两条纪律。第一,重投影是安全网不是常态:一旦仪表盘显示重投影率持续高于低个位数百分比,说明真实渲染已经超支,应回第五章的预算预案降级画质,而不是容忍扭曲常驻——伪影积累同样以不适形式被感知。第二,ATW 对"手柄等外部设备姿态"无效:手柄位置是在渲染时确定的,若手柄预测出错,画面里的手仍会抖,这是第三章追踪预测要接手的问题。
重投影率体检口径(合成器统计) 重投影率 = 被扭曲上屏的帧数 / 总上屏帧数 健康区 < 2% 观察区 2%~10% 危险区 > 10% 处理顺序:查瓶颈段 -> 按第五章预案降级 -> 复测重投影率 -> 复测量表分数
重投影是事后救场,注视点渲染(第二节三角谈判里的调节阀)是事前减负:对注视区全分辨率、外围降采样,GPU 支出立减。它与延迟有一条隐蔽的耦合:眼动数据自带十几毫秒量级的延迟,若渲染管线再排队,降采样区可能错位到注视区边缘,用户扫视时会看到"清晰区追着眼睛跑"。因此启用前必须测量眼动到生效的全程延迟,并把降采样边界做足过渡带。没有眼动硬件时,退而求其次用头部朝向近似注视中心,省得少一些但零风险。
场景:测试报告"快速转头时画面发糊、边缘撕裂",重投影率约一成。按流程走:第一步分段计时,发现渲染段接近整帧,逻辑段正常,判定渲染超支。第二步减负三板斧:确认注视点或多分辨率着色已启用、阴影贴图降一档、半透明物件排序简化。第三步复测:重投影率回落到健康区,但量表视觉分项仍偏高。第四步追因:实拍发现暗场闪烁——低占空比驱动叠加低亮度场景,把场景基准亮度上调并将闪烁敏感的粒子特效降频。第五步归档:账目、改动、前后量表分数一并写入工程手册,供下一轮预算评审引用。
⚠️ 常见坑:把 ATW 当优化手段写进排期。它能兜住姿态延迟,兜不住内容超支;团队若在排期上依赖 ATW"反正有兜底",上线遇到世界内高速运动(赛车、跳跃)就会现出原形。
延迟账本要落到三个标准动作上验收,覆盖三类 worst case。动作一:匀速连续转头(左右各一个来回,速度接近日常环顾)——考察常规链路的稳定段;好系统的标准是视野边缘无可见拖拽。动作二:急甩后急停(模拟被声音吸引的回头)——考察预测与重投影的极限;好系统的标准是急停瞬间画面无回弹,姿态预测在停顿处收敛干净。动作三:边走边转头(移动中环顾)——虚拟移动的光流叠加头部旋转,是冲突剂量的最高峰;好系统的标准是 3.3 节的缓冲技术配合延迟优化后,此场景量表分数仍在健康区。三个动作各配一段录像与一组量表分数,构成延迟验收的固定考卷——比任何单点毫秒数字都更接近"体感"。
延迟防线跨三个角色,职责接口要书面化。引擎与玩法团队对逻辑段与渲染段负责:账目里这两段是"可优化主体",预算执行的第一责任人。系统与平台团队对传感与输出段负责:采样率配置、合成器行为、刷新率档位,属于"硬件定数但可配置"的范围。测试团队对账本的诚实性负责:分段计时方法、黄金场景考卷、量表复测流程,由测试定义并守卫。接口模糊的典型事故:渲染超支被当成"设备不行",传感延迟被当成"渲染没优化好"——账本公开、段责到人,这类扯皮才会消失。
输出段还有一个容易漏查的变量:像素发光时长的驱动方式。低占空比驱动(每帧只短暂点亮)能压低运动模糊——画面在视网膜上"停留"的时间短,拖影随之减轻;代价是单帧亮度损失与潜在的闪烁感,低亮度场景里两者叠加,正是 2.1 与 2.2 反复出现的暗场不适的深层原因之一。排查暗场不适时,把驱动方式纳入怀疑名单:同一场景在高占空比模式下复测,若不适明显缓解,说明问题不在内容而在输出段配置。这一小节的实用结论:显示链路的问题清单要一直延伸到"像素怎么被点亮",工程上没有"太底层不用管"的环节。
至此视觉防线贯通:光学、三角、时序三节连起来,就是"把画面做稳"的完整作业指导书。但画面稳住只是让世界不再拖拽你——世界要真的跟得上身体,还得靠追踪与运动对齐,这是下一章的任务。