测量渲染时间

Measure render time

本文关键字:时间 测量      更新时间:2023-09-26

我有一个WebGL场景,以及一组可以用来平衡渲染质量和速度的参数。我想以尽可能高的质量向用户显示场景,只要帧速率不会因此而低于某个阈值。为了实现这一点,我必须以某种方式测量"当前"帧速率以响应质量的变化。

但只要用户不与之交互(例如使用鼠标旋转相机),场景就是静态的。我不想让一个循环一直重新渲染相同的场景,即使没有任何变化。如果场景停止移动,我想停止渲染。这意味着我不能简单地平均连续帧之间的时间,因为我无法区分渲染器很慢和用户只是移动鼠标更慢。

我在启动时多次考虑渲染场景,并据此判断帧速率。但是,由于从当前摄像机位置可见的场景部分,或者由于画布外的用户交互,场景的复杂性可能会随时间而变化。因此,我必须随着场景复杂性的变化而调整质量。在每次释放鼠标后运行校准循环可能是一种选择。

我还考虑过使用 finish 调用而不是 flush 调用来准确测量渲染时间。但是,当我等待 GL 完成渲染时,我的应用程序基本上没有响应,特别是无法对鼠标事件进行排队。由于我设想渲染理想地以目标阈值帧速率占用两帧之间的所有时间,因此这可能相当糟糕。我可能会在某些情况下使用finish而不是flush,例如在鼠标释放后。

在 WebGL 应用程序中实现所需的帧速率或定期测量渲染时间的最佳方法是什么?

为什么不能使用平均渲染时间?

仅仅因为渲染频率较低,并不意味着无法平均渲染时间。只是需要更长的时间才能获得准确的平均值。

一旦用户开始移动鼠标,您将获得大量数据,无论如何,这应该很快就会为您提供平均渲染速率。