专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

图像撕裂与掉帧

计算机显示方式

光栅扫描显示

51_1.png

光栅显示系统组成

  • 显示器:显示内容来自帧缓存区
  • 视频控制器:控制刷新部件,复制帧缓存区与显示器的对应关系
  • 帧缓存区:存储渲染数据

图像是由像素阵列组成的。在光栅扫描显示器中,电子束横向扫描屏幕,一次一行,从顶到底依次进行。每一行称为一个扫描行(scan line)。当电子束横向沿每一行移动时,电子束的强度不断变化,从而建立两点组成的一个图案。图形定义保存在称为刷新缓存(refresh buffer)或帧缓存(frame buffer)的存储器中。

  • 这里的帧指的是整个屏幕范围。
  • 该存储器保存一组对应屏幕所有点的强度值。
  • 电子束在屏幕上逐点移动时由从刷新缓存取出的强度值控制其强度。
  • 每个可由电子束点亮的屏幕点称为一个像素(pixel或pel,是picture element的简写)。
  • 由于刷新缓存用来存储屏幕颜色值,因此它也称为颜色缓存(color buffer)。
  • 除了颜色之外,像素的其他信息也存储在缓存中,因而不同的缓冲区域有时统称为“帧缓存”。
  • 光栅扫描系统对于屏幕的每一点都有存储强度信息的能力,从而使之较好地适用于包含细微阴影和彩色模式的场景的逼真显示。

51_2.png

除了逐行扫描外还有隔行扫描,区别就是一个是一行一行画,一个是隔着一行画

图像撕裂

理想的成像过程:

单缓存模式下

  • GPU进行渲染
  • 渲染结果存储在帧缓存区
  • 视频控制器读取帧缓存区的数据
  • 数模转换(数字信号->模拟信号)
  • 显示

理想总是美好的

人眼视觉暂留现象,想要让人感觉视频是流畅的,GPU需要在每秒处理更多帧的图像。假如显示器还没有显示完上一帧图像,正在逐行扫描中,而GPU计算速度优于显示器的处理速度,已经渲染完成了下一帧图像,并更新到帧缓存区,视频控制器读取新一帧数据数据给显示器,造成了图像撕裂的现象。多发生在大型网络游戏中。

51_3.png

图像撕裂解决策略

苹果使用的策略是:垂直同步Vsync+双缓存区

  • 垂直同步:在帧缓存区加锁,上一帧显示完后视频控制器才会读取新的数据,防止撕裂
  • 双缓存区:设计双缓存区来进行数据读取&存储的轮换

51_4.png

开启垂直同步,显卡绘制3D图形前会等待垂直同步信号,当该信号到达时,显卡开始绘制3D图形,如果显卡性能较为强劲,在下个垂直同步信号到来之前已经完成了对该帧的渲染,显卡就会暂停处理,等下个垂直同步信号到来后才开始渲染下一帧。通俗的来讲,垂直同步就是让显卡每秒输出的帧数等于显示器的刷新率。

掉帧

重复渲染同一帧数据叫掉帧

51_5.png使用苹果策略,开启垂直同步等待同步信号,当信号到达时,CPU/GPU还未处理好图像数据,A帧被重复,造成了掉帧,感觉界面略有卡顿。

设计三缓存区进行补救,但仍旧不能完全保证解决掉帧问题,只是更合理使用CPU/GPU,减少掉帧次数。

屏幕卡顿原因

  • CPU/GPU渲染流程线耗时过长,造成掉帧
  • 未解决撕裂问题,使用垂直同步+双缓存区策略造成掉帧

推荐:

文章永久链接:https://tech.souyunku.com/31390

未经允许不得转载:搜云库技术团队 » 图像撕裂与掉帧

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们