动态分辨率组件
动态分辨率(Dynamic Resolution, DR)是一种根据当前帧的性能动态调整渲染分辨率的技术,旨在在保证目标帧率的前提下,最大化画质。其典型应用场景为 GPU 负载较高时自动降低分辨率,负载降低后再提升分辨率。
工作流程
性能采样 每帧采集 GPU(或 CPU)渲染耗时,通常通过帧时间(Frame Time)或帧率(FPS)来衡量。
目标帧率与当前性能对比 设定目标帧率(如 60FPS),计算目标帧时间(如 16.67ms)。将当前帧的实际耗时与目标帧时间进行比较,得到“headroom”(裕量)。
分辨率缩放因子调整
- 如果当前帧耗时高于目标(headroom < 0),则降低分辨率(减小 scale factor)。
- 如果当前帧耗时低于目标(headroom > 0),则可以尝试提升分辨率(增大 scale factor),但通常会有计数器和阈值,避免频繁抖动。
- 分辨率缩放有最小/最大限制,防止画质过差或资源浪费。
应用缩放因子 将新的 scale factor 应用到渲染目标(Render Target),动态调整渲染分辨率。
平滑与抗抖动 通过滑动窗口、计数器、阈值等机制,避免分辨率频繁波动,提升用户体验。
关键参数
- 目标帧率/帧时间:决定性能基准。
- 最小/最大缩放因子:限制分辨率变化范围。
- 采样帧数:用于统计平均性能。
- 调整步长/阈值:控制分辨率调整的灵敏度和幅度
属性面板

注意事项:
- 动态分辨率脚本只能挂载在相机下,其他场景对象无法挂载
- 动态分辨率功能只在运行时工作,编辑器只用来配置参数
- 动态分辨率需要实时检测GPU Frame Time,因此依赖timer_query扩展,如果当前硬件不支持该扩展将自动转为CPU帧时间计算,动态调节效果可能无法达到预期
主要参数介绍
| 参数 | 描述 |
|---|---|
| Enable | 是否启用功能 |
| TargetFPS | 目标帧率 |
| MinScaleFactor | 最小缩放系数,例如0.5代表最小减少到分辨率的一半 |
| MaxScaleFactor | 最大缩放系数,例如1.0代表最大提示到原始分辨率 |
| FrameTimingCount | 统计帧时间数量,例如5代表选取最近5帧时间计算一次缩放系数 |
| TimingFrameInterval | 帧时间计算间隔,例如5代表间隔5帧计算一次缩放系数,0代表每帧都计算 |
| DelayInitFrames | 延时初始化帧数,为了避免刚开始运行时帧时间波动,可以延时帧数启动动态分辨率计算 |
| DeltaThreshold | “帧耗时变化量”阈值,衡量 GPU 耗时的波动幅度,用于判断当前帧 GPU 耗时的变化是否足够小,系统是否处于稳定状态。 |
| HeadroomThreshold | “性能余量”阈值,衡量当前帧 GPU 耗时与目标帧耗时的差距(headroom)是否足够大,用于判断当前 GPU 性能是否有足够的富余,可以考虑提升分辨率 |
| ScaleHeadroomClampMin | 限制分辨率提升时“裕量百分比”映射的最小值,防止分辨率提升过于激进,保证分辨率提升的平滑性和可控性 |
| ScaleHeadroomClampMax | 限制分辨率提升时“裕量百分比”映射的最大值,防止分辨率提升过于激进,保证分辨率提升的平滑性和可控性 |
| ScaleIncreaseSmallFactor | 控制分辨率提升时的最小步进,防止分辨率提升过快导致画面抖动 |
| ScaleIncreaseBigFactor | 控制分辨率提升时的最大步进,防止分辨率提升过快导致画面抖动 |
| ScaleRaiseCounterLimit | 控制分辨率提升操作的触发频率,用于防止分辨率因性能波动而频繁变化,保证画面平滑过渡 |
| ScaleRaiseCounterSmallIncrement | 控制分辨率提升计数器的“小步进”累加速度,决定了在性能充裕但变化平稳时,分辨率提升的“等待时间” |
| ScaleRaiseCounterBigIncrement | 控制分辨率提升计数器的“大步进”累加速度,用于性能明显变好时加速分辨率提升,数值越大,分辨率提升触发得越快,画质恢复更迅速 |
| UseCpuWhenGpuInvalid | 当GPU无法支持帧时间获取时采用CPU代替 |
| ApplyToXR | 是否应用到XR平台 |
运行时脚本
动态分辨率组件在运行时的脚本是NDynamicResolutionComponent,主要提供如下接口
| 接口 | 描述 |
|---|---|
| IsEnableDynamicResolution | 是否启用动态分辨率 |
| SetEnableDynamicResolution | 设置启动/禁用动态分辨率 |
| Reset | 重置当前计算 |
| GetResolutionScaleFactor | 获取当前分辨率缩放系数 |
| SetTargetFPS | 设置目标帧率 |
| GetTargetFPS | 获取目标帧率 |

