Skip to main content

Chapter 140: Hybrid Rendering Pipelines

混合渲染管线要解决的问题,是把传统光栅化、光线追踪、神经网络推理、后处理和降级路径放进同一帧里,让它们共享同一组场景数据、资源生命周期和帧预算。读完本章后,读者应能追踪一个 frame 从基础几何渲染到神经重建再到最终呈现的路径,并能判断每个 pass 的输入、输出、依赖、成本和失败信号。

本章使用一个贯穿帧作为材料:一个室内走廊场景,地面有粗糙金属反射,墙面有间接光,角色从镜面区域前方经过,目标输出是 1440p 或 4K 的稳定画面。工程目标是在基础 raster pass 上加入半分辨率 ray traced reflection,再用 neural denoiser 清理反射,用 upscaler 输出目标分辨率,同时保留低端设备和性能波动时的 fallback path。

混合管线的难点来自依赖关系。raster pass 产出 color、depth、normal、material、motion vector;ray tracing pass 依赖 acceleration structure、ray payload、roughness、normal 和 depth;neural pass 依赖 noisy radiance、G-buffer、motion vector、history buffer 和模型权重;post-process 依赖最终色彩空间、曝光和 UI 合成顺序。任何一个输入的空间、分辨率、时间戳或格式出错,都会变成闪烁、拖影、反射错位、延迟增加或内存峰值过高。

本章的核心结论是:混合渲染管线的设计单位应是 frame graph 中的资源流,而非某个单独算法。工程判断顺序也应从资源与依赖开始,再看 pass 耗时、推理成本、历史缓存、质量指标和降级阈值。

140.1 混合渲染管线的基本思路

混合渲染管线(Hybrid Rendering Pipeline)指在同一帧内组合多种生成图像的方法。这里的“混合”包含五类对象:raster pass 负责稳定地生成几何可见性和基础材质结果,ray tracing pass 负责补充反射、阴影或间接光等高成本效果,neural pass 负责对噪声图像、低分辨率图像或稀疏采样结果做重建,post-process 负责色彩、曝光、抗锯齿、UI 和最终输出,fallback path 负责在平台能力、帧预算或质量状态变化时给出可控替代路径。

frame graph 是理解混合管线的主入口。它把一帧拆成一组有依赖关系的 pass,并把 texture、buffer、history、临时 tensor、acceleration structure 和最终 back buffer 都视为资源节点。传统渲染中,一个 pass 的输出常常直接进入下一段后处理;混合管线中,一个 pass 的输出还可能成为神经模型的 feature input、历史缓存的写入对象、质量评估的采样对象或降级决策的证据。

在贯穿帧中,raster base pass 先产生场景的低分辨率主 color、depth、normal、roughness、motion vector 和 material id。ray tracing reflection pass 使用 depth 与 normal 重建反射射线起点,查询 acceleration structure,并输出含噪反射 radiance。neural denoiser 读取 noisy reflection、G-buffer 和前一帧 reflection history,输出稳定反射。upscaler 读取低分辨率 color、motion vector、depth、exposure 和 history,把画面重建到目标分辨率。最后的 post-process 处理 tonemapping、bloom、UI 和呈现。

这种组合的关键价值在于把高成本效果压缩到合适的位置。光栅化仍负责大面积可见性和主颜色,因为它在主流 GPU 上吞吐稳定、资源路径清晰;光线追踪用于少量高价值效果,因为它能得到更准确的可见性查询;神经网络推理用于重建缺失信息,因为它能利用历史帧、G-buffer 和训练得到的先验;后处理负责输出一致性,因为它掌握曝光、色彩和屏幕空间信息。fallback path 保证平台缺少 ray tracing、模型推理成本过高或历史数据失效时,画面仍能用 SSR、cubemap、传统 denoiser、动态分辨率或低阶特效完成输出。

混合管线的第一条边界是数据一致性。depth、normal、motion vector、roughness、material id 和 color 必须对应同一个 camera、projection、jitter、viewport 和分辨率映射。neural denoiser 看到的 feature buffer 如果来自未同步的 jitter 或错误的 motion vector,它会把错误的历史样本带入当前帧,结果通常表现为拖影或反射漂移。

第二条边界是资源生命周期。neural pass 引入模型权重、intermediate tensor、history feature 和模型输出,这些资源会和 render target、G-buffer、ray tracing output 同时占用显存。frame graph 需要明确哪些资源可复用,哪些资源跨帧保留,哪些资源必须在呈现前释放。资源生命周期写清后,内存峰值、barrier 数量和异步队列机会才有可观察依据。

第三条边界是质量回退。混合管线的每个高级效果都应有降级梯度:ray traced reflection 可从全分辨率降到半分辨率,从多 ray 降到单 ray,从实时追踪降到 probe 或 SSR;neural denoiser 可从高质量模型降到轻量模型,从跨帧 history 降到单帧 filter;upscaler 可降低输出目标或切换到传统 temporal upsample。降级梯度的设计目标是让 frame budget、显存和视觉稳定性在压力下仍有可控出口。

140.2 Hybrid Classical Neural Rendering Workflow

Hybrid Classical Neural Rendering Workflow 可以拆成六个阶段:classical pass 产生几何和物理约束,neural inference 根据这些约束重建缺失细节,cache 复用上一帧和空间邻域信息,denoise 清理随机采样噪声,upscale 提升输出分辨率,quality fallback 根据成本和质量信号选择替代路径。这个顺序体现了数据依赖:神经网络推理的输入质量由 classical pass 决定,缓存可靠性由 motion vector 和 disocclusion 判断决定,降级策略由前面阶段的成本与质量共同触发。

classical pass 在这个 workflow 中承担“约束提供者”的角色。它输出的 depth 告诉后续阶段像素属于哪个表面,normal 告诉反射和光照的局部方向,roughness 告诉反射应该锐利还是模糊,motion vector 告诉历史样本如何重投影,material id 告诉模型或 filter 不同材质之间的边界。缺少这些约束时,neural pass 会把图像重建变成纯屏幕空间猜测,稳定性和边界保持能力会明显下降。

neural inference 的工作定义是:在一帧内把 feature buffer、历史缓存和模型权重送入推理运行时,输出可直接进入后续渲染的图像或特征。它在 frame graph 中通常表现为 compute pass、vendor SDK pass、图形 API 外接推理运行时或平台专用 neural accelerator 调用。工程上要关心四件事:输入 tensor 的格式和布局,模型权重的加载与驻留,推理 pass 和图形 pass 的同步,输出资源进入后续 composite 或 upscaler 的状态转换。

cache 在混合管线中既包含传统 history buffer,也包含神经模型需要的特征历史。贯穿帧中的 reflection history 保存上一帧清理后的反射结果,color history 保存上一帧 upscaler 输出,feature history 可能保存低维 latent 或置信度。cache 的有效性取决于重投影关系:motion vector 把上一帧像素映射到当前帧,depth 与 normal 检查是否仍属于同一表面,roughness 与 material id 检查材质边界是否变化,disocclusion mask 标记新露出的区域。

Denoise 阶段解决的是采样噪声。ray traced reflection 在实时帧预算下常常使用低 sample count,原始输出会有随机噪声、空洞和时域闪烁。传统 denoiser 依赖手工设计的空间滤波、时域累积和边缘停止条件;neural denoiser 把 noisy radiance、G-buffer 和 history 作为输入,输出更稳定的反射或间接光。它的质量仍受输入约束控制:motion vector 错误会产生拖影,normal 不连续会污染边界,roughness 错误会让高光半径不稳定。

Upscale 阶段解决的是像素预算。管线可以在较低分辨率执行 raster、ray tracing 或部分 neural pass,再由 upscaler 输出目标分辨率。upscaler 的输入通常包含低分辨率 color、depth、motion vector、exposure、reactive mask 和 history。reactive mask 的作用是标记快速变化、透明、粒子、屏幕空间反射、动画纹理等区域,让 upscaler 减少历史样本的权重。这个 mask 在混合管线中很关键,因为神经 denoise 与 temporal upscale 都会使用历史信息,错误的历史权重会放大拖影。

质量回退路径应在 workflow 设计阶段写入。贯穿帧中可设定一个梯度:优先降低 ray tracing 分辨率,再降低 reflection sample count,再使用更短的 denoiser history,再切换到传统 SSR 与 probe 组合,再降低输出分辨率或 upscaler quality mode。这个顺序来自视觉影响与成本收益的比较:反射分辨率下降常常比主画面分辨率下降更容易被接受,短暂降低反射质量通常比破坏 UI 清晰度更可控。

这个 workflow 的可复用判断顺序是:先确认 classical pass 输出的 feature 是否完整,再确认 neural pass 的输入空间、分辨率和时间关系,再确认 cache 是否有可靠的重投影证据,再用 GPU timestamp 分离 denoise、upscale、composite 的成本,最后根据视觉失败类型选择降级位置。这个顺序能把“画面不稳定”拆成可检查的资源、数学关系、pass 耗时和质量阈值。

140.3 构建混合管线实例

构建实例时,先把贯穿帧拆成明确的 pass 和资源。目标画面是低分辨率 raster base 加半分辨率 ray traced reflection,再通过 neural denoiser 和 upscaler 输出高分辨率画面。这个例子选择反射作为 ray tracing 效果,因为反射对法线、粗糙度、motion vector 和历史缓存都敏感,能覆盖混合管线中最常见的数据依赖问题。

下面的 frame graph 表示一次典型资源流。图中每个节点都是一个可计时、可标记、可检查资源状态的阶段。

这个图的关键路径是 Raster base pass → G-buffer → Ray traced reflection pass → Neural denoiser → Composite → Upscale → Present。G-buffer 处在分叉点,因为它同时服务 ray tracing、denoising 和 upscaling。history buffer 处在回路上,因为当前帧输出会成为下一帧输入。只要这两个位置的资源状态、分辨率或坐标关系出错,后续多个 pass 会同时出现症状。

第一步是建立 raster base pass。它输出低分辨率 color,并同时写出 depth、normal、roughness、motion vector 和 material id。这里的 motion vector 要使用与 upscaler 和 denoiser 一致的 jitter 约定;normal 要明确处于 view space、world space 或 encoded tangent space;roughness 要与材质系统中的反射模型一致。若某个 feature buffer 是压缩格式,后续 pass 需要知道解码范围和精度。

第二步是建立 ray traced reflection pass。它读取 acceleration structure、depth、normal、roughness 和相机矩阵,为屏幕像素生成反射射线。为了控制成本,可以用半分辨率执行,并把粗糙表面的 ray budget 降低。输出资源命名为 reflection_noisy_half,含义是半分辨率、含噪、待清理的反射 radiance。这个命名让后续 pass 和调试工具能直接看出资源阶段。

第三步是接入 neural denoiser。它读取 reflection_noisy_half、depth、normal、roughness、motion vector、disocclusion mask 和上一帧 reflection_clean_history,输出 reflection_clean_halfreflection_clean_full。如果模型输出半分辨率,composite 阶段要负责按 roughness 和 normal 引导上采样;如果模型直接输出全分辨率,内存和推理成本会增加,但 composite 路径更简单。选择哪一种,应根据 reflection pass 时间、denoiser 时间、目标平台显存和视觉边界稳定性判断。

第四步是 composite。它把 clean reflection 合入低分辨率主 color,通常还会叠加 direct lighting、ambient、screen-space effects 和透明物体。透明物体、粒子、屏幕空间动画纹理和 UI 对 history 很敏感,应在 composite 或 upscaler 输入中写入 reactive mask。这个 mask 的目的,是让后续 temporal reconstruction 知道哪些区域需要更依赖当前帧。

第五步是 upscaler。它读取 composite 后的低分辨率 color、depth、motion vector、exposure、reactive mask 和 color history,输出目标分辨率 color。upscaler 输出后进入 post-process,完成 tonemapping、bloom、film grain、UI、color grading 和 present。对于 UI,常见做法是先把 3D 场景 upscaling 到目标分辨率,再以目标分辨率合成 UI,这样文本和图标保持清晰。

第六步是写入 history。当前帧的 clean reflection 和 upscaled color 会成为下一帧 cache。history 写入应发生在对应资源稳定之后,并与下一帧读取建立明确同步。若使用多帧 in-flight,history buffer 还要区分 frame index,防止上一帧资源被当前帧提前覆盖。

这个实例的资源表可以按阶段检查。

阶段主要输入主要输出需要检查的证据
Raster basemesh、material、camera、jitterlow color、depth、normal、roughness、motionfeature buffer 与相机、分辨率、jitter 一致
Ray traced reflectionacceleration structure、depth、normal、roughnessnoisy reflectionray budget、输出分辨率、反射命中率
Neural denoisernoisy reflection、G-buffer、historyclean reflection输入 tensor 布局、history 重投影、推理耗时
Compositelow color、clean reflection、lightingscene color反射混合权重、透明区域、reactive mask
Upscalerscene color、depth、motion、historyoutput color输出清晰度、拖影、边缘稳定性
Post and presentoutput color、UI、exposureback buffer色彩空间、UI 合成顺序、present 延迟

从这个表能得到一个工程规则:每个 pass 都要声明输入、输出和证据。输入决定它能做什么,输出决定后续 pass 如何使用它,证据决定调试时能否定位问题。混合管线的复杂度高,但每个 pass 都能用这个三元组拆开。

140.4 性能衡量与调优方法

混合管线的性能衡量要同时覆盖 GPU pass time、inference cost、memory footprint、latency、quality metric 和降级阈值。单看平均帧率会掩盖关键问题,因为神经推理可能稳定占用 1 毫秒,却在模型加载、history resize、queue sync 或显存压力时制造长尾帧。调优应围绕一帧的时间线和资源峰值展开。

GPU pass time 指每个图形或 compute pass 在 GPU 上的实际耗时。它应使用 timestamp query、GPU profiler marker 或平台工具记录。贯穿帧中至少要分别测量 raster base、ray traced reflection、neural denoiser、composite、upscaler、post-process 和 present 前等待。这样才能判断瓶颈来自 ray traversal、模型推理、带宽写入、后处理或同步。

Inference cost 指神经模型在一帧内带来的全部成本。它包含模型权重驻留、输入 tensor 准备、layout conversion、推理执行、输出资源转换和必要同步。若使用 vendor SDK,成本可能被封装在一个图形 API pass 内;若使用独立推理运行时,成本还会包含跨队列或跨 runtime 的资源互操作。调试时要把“模型计算时间”和“为了喂给模型而做的格式转换与同步时间”分开记录。

Memory footprint 指当前帧和跨帧缓存共同占用的显存。混合管线新增的显存通常来自模型权重、intermediate tensor、history buffer、额外 G-buffer、半分辨率或全分辨率 ray output,以及多帧 in-flight 的重复资源。内存峰值应按分辨率和质量档位计算。4K 输出下,一个全分辨率 RGBA16F history buffer 的开销会明显高于半分辨率输出;多个 history 与 tensor 同时存在时,显存压力会改变资源驻留和带宽行为。

Latency 指输入到画面输出之间的端到端延迟。混合管线可能通过 upscaler、frame generation、异步 compute 或云端编码获得更高视觉帧率,但交互延迟仍要看输入采样、CPU 提交、GPU 执行、推理、present、编码、网络和显示链路。实时交互系统中,延迟调优优先保证当前帧响应和帧间稳定,再追求更高重建质量。

Quality metric 要覆盖自动指标和人工可观察信号。自动指标可以包括 temporal stability、edge error、反射区域 variance、SSIM、PSNR 或与离线高质量参考的差异;人工信号包括拖影、边缘抖动、反射断裂、噪声残留、过度平滑、UI 模糊、透明物体残影和暗部闪烁。混合管线中,质量问题应和资源路径绑定记录:例如“角色经过反射区域时拖影”对应 motion vector、reactive mask、disocclusion 和 denoiser history。

降级阈值应提前定义。一个实用阈值包含三类触发信号:时间触发、显存触发和质量触发。时间触发例如连续 8 帧超过 16.6 ms 的 90% 预算;显存触发例如 history 与 tensor 造成显存接近平台限制;质量触发例如 disocclusion 面积过大、motion vector 缺失区域过多或反射噪声超出可接受范围。阈值需要滞回设计,防止质量档位在相邻帧频繁跳变。

调优顺序可以固定为六步。先锁定目标预算,例如 60 FPS 对应约 16.6 ms,120 FPS 对应约 8.3 ms。再为每个 pass 打 GPU marker,分离 raster、ray tracing、denoise、upscale 和 post 的耗时。接着检查资源转换和同步,特别是 neural pass 前后的 layout conversion、barrier 和 queue wait。然后计算显存峰值,区分可复用临时资源和跨帧 history。随后用固定场景比较质量,覆盖静态镜头、快速相机、角色穿过反射、透明粒子和暗部高频材质。最后写入降级梯度,并验证切换时没有明显闪烁、history 污染或 UI 模糊。

贯穿帧如果出现帧时间超标,优先看时间线中最长且可降级的 pass。若 ray traced reflection 占 3.5 ms,neural denoiser 占 2.2 ms,upscaler 占 1.1 ms,raster base 占 6 ms,post 占 0.8 ms,总体已接近 16.6 ms,则第一轮调优应测试反射半分辨率、反射 ray budget、denoiser 模型档位和反射 history 长度。若质量失败集中在角色边缘拖影,则应先检查 motion vector、reactive mask、disocclusion 和 history clamp,再调整模型档位。

这个方法把性能和质量放到同一张证据表里。每次调优都要记录“改了哪个 pass、改变了哪种资源、节省了多少时间、增加了哪些视觉风险”。没有这张表,混合管线很容易变成多个高级技术堆叠,最终缺少可维护的性能解释。

140.5 Hybrid Rendering Applications in Games Preview Tools and Cloud Rendering

混合渲染在游戏中的落地重点是稳定帧预算、平台覆盖和质量档位。游戏帧通常要求输入响应稳定,场景内容变化剧烈,并且要覆盖多种 GPU、主机和显示目标。混合管线适合把 raster 作为基础路径,把 ray tracing 用在反射、阴影、环境光遮蔽或全局光照的部分效果上,再用 denoiser 和 upscaler 把低 sample 或低分辨率结果重建成稳定画面。游戏中的 fallback path 要和画质设置、硬件能力查询、动态分辨率和场景负载联动。

游戏场景的主要失败信号是时域不稳定。快速相机、角色遮挡、透明粒子、动态灯光、动画材质和屏幕空间特效都会挑战 history。调试时应把这些区域单独标记出来,并检查 motion vector、reactive mask 和 disocclusion mask。画质选项也应表达真实成本,例如“反射质量”影响 ray resolution、sample count、denoiser 输入和 history;“重建质量”影响 upscaler 档位、模型成本和输出稳定性。

影视预览和设计工具中的混合渲染重点是交互式 lookdev。用户移动灯光、材质、相机或模型时,需要快速反馈;停止交互后,可以逐步提高采样、denoise 质量和输出分辨率。这里的 frame graph 可以有两种模式:交互模式使用低采样、轻量 denoise 和快速 upscale;停顿模式使用更多 ray、更多 history 和更高质量重建。工具型场景的 fallback path 通常围绕交互延迟,而游戏场景更强调连续帧稳定。

设计工具还需要保留可解释性。艺术家看到材质过亮、反射过糊或阴影闪烁时,需要知道问题来自材质参数、光照设置、ray budget、denoiser 还是 upscaler。工程上可以提供 pass overlay:显示 roughness、normal、motion vector、reflection noisy、reflection clean、history confidence 和 final output。overlay 的价值在于把视觉反馈还原到资源路径,而非把所有问题归给最终画面。

云渲染中的混合管线要把 server GPU、编码器、网络和 client display 放入同一延迟链。服务端可以执行高质量 raster、ray tracing 和 neural denoise,再把输出编码成视频流;也可以服务端输出较低分辨率或较低码率画面,由客户端执行轻量 upscale 或 sharpening。前一种方式节省客户端计算,后一种方式可能降低网络带宽,但会增加客户端兼容性和端侧延迟管理需求。

云场景的降级阈值还要考虑网络状态。若 GPU 端帧时间稳定但网络码率下降,系统可以降低输出分辨率、调整编码参数或把部分细节重建放到客户端。若 GPU 端已经超预算,降低 ray tracing 质量或 neural pass 质量更直接。若客户端性能受限,服务端应输出更接近最终显示的画面。云渲染的混合策略本质上是在 GPU 时间、服务器显存、编码质量、网络带宽和客户端能力之间做统一预算。

这三类应用共享同一判断框架:先确定交互目标和帧预算,再确定 classical pass 提供哪些稳定约束,再决定 ray tracing 或 neural pass 承担哪种高价值效果,最后设计可观察的 quality fallback。差异在于权重:游戏重视帧稳定和平台覆盖,预览工具重视交互反馈和可解释 overlay,云渲染重视端到端延迟和码率适配。

混合渲染管线的最终设计产物应是一份 frame graph、一个资源生命周期表、一组 GPU markers、一套质量案例和一条降级梯度。frame graph 说明数据如何流动,资源表说明内存如何占用,markers 说明时间如何消耗,质量案例说明视觉风险如何暴露,降级梯度说明压力下系统如何保持可控输出。把这些对象连起来,混合管线才具备工程可维护性。

最小自检任务

给定一个室内走廊场景,目标是 60 FPS。当前管线在 1440p 输出下测得:raster base 6.0 ms,ray traced reflection 3.5 ms,neural denoiser 2.2 ms,composite 0.7 ms,upscaler 1.1 ms,post-process 0.8 ms,present 前等待 0.9 ms。反射 history 和 color history 合计占用 520 MB,模型权重与 intermediate tensor 占用 340 MB。角色经过镜面地面时,角色轮廓附近出现 3 到 5 帧拖影,透明粒子附近有反射残影。请设计排查顺序和第一轮降级策略。

答案要点

先计算时间预算。60 FPS 对应约 16.6 ms,当前可见 pass 合计 15.2 ms,再加 present 前等待后接近预算上限,说明系统缺少负载波动空间。第一轮性能排查应先给 raster、ray traced reflection、neural denoiser、upscaler 和 present wait 设置 GPU marker,确认 present wait 来自队列同步、swapchain 等待还是 neural pass 前后的资源转换。

再排查拖影对应的数据路径。角色轮廓拖影优先检查 motion vector 是否覆盖 skinned mesh、角色边缘和 jitter 约定;透明粒子残影优先检查 reactive mask 是否标记透明、粒子和快速变化区域;镜面地面反射拖影还要检查 disocclusion mask、depth test、normal 连续性和 reflection history clamp。这个顺序把视觉症状映射到 G-buffer、mask 和 history,而非直接修改最终后处理参数。

第一轮降级应优先作用在反射路径。可把 ray traced reflection 保持半分辨率并降低 rough surface 的 ray budget,或在角色快速穿过反射区域时缩短 reflection history 权重;若 neural denoiser 仍占用 2.2 ms 且拖影来自 history,可切换轻量模型或降低 denoiser history 长度。主画面 upscaler 暂时保持不变,因为它影响全屏清晰度和 UI 合成稳定性。

内存方面,应确认 history buffer 是否按分辨率、格式和多帧 in-flight 数量计算。若 860 MB 的 history、weight 和 tensor 造成显存压力,可以复用半分辨率临时 tensor、压缩部分 feature history,或在低质量档位释放高质量模型权重。降级阈值应加入滞回,例如连续多帧超过预算才降低反射质量,连续稳定后再恢复,减少档位跳变带来的闪烁。

本章知识点总结

  • 混合单位:混合渲染管线应按 frame graph 的资源流设计,每个 pass 都要声明输入、输出和依赖。
  • Raster 角色:raster pass 提供稳定的可见性、基础颜色和 G-buffer,是后续 ray tracing 与 neural pass 的约束来源。
  • Ray 角色:ray tracing pass 适合承担反射、阴影或间接光等高价值效果,并通过分辨率和 ray budget 控制成本。
  • Neural 角色:neural pass 通过 feature、history 和模型权重重建缺失信息,质量受输入空间、motion vector 和 cache 可靠性约束。
  • Cache 边界:history buffer 必须通过 motion vector、depth、normal、material 和 disocclusion 检查有效性。
  • Denoise 路径:denoiser 处理低 sample ray output 的噪声,拖影通常要回到 history、mask 和 feature buffer 排查。
  • Upscale 路径:upscaler 把低分辨率场景重建到目标分辨率,输入需要包含 depth、motion、exposure、reactive mask 和 history。
  • Fallback 梯度:降级策略应提前写入质量档位,优先选择视觉影响较小且节省明显的 pass。
  • 性能证据:GPU timestamp、profiler marker、显存峰值和 present wait 是定位混合管线瓶颈的基础证据。
  • 推理成本:inference cost 包含模型执行、输入输出转换、权重驻留、tensor 分配和同步开销。
  • 质量指标:混合管线的质量评估要同时覆盖自动指标和可观察症状,并把症状映射回资源路径。
  • 应用差异:游戏重视帧稳定和平台覆盖,预览工具重视交互反馈和 overlay,云渲染重视端到端延迟和码率适配。