在当今数字化浪潮中,云计算已成为IT行业的中流砥柱。云游戏作为这一领域的崭新亮点,通过将游戏渲染的任务从玩家个人设备转移至集中式的渲染服务器,正在开始改变游戏的游玩体验。然而目前高帧率的云游戏都面临着一个难题,那就是云游戏画面撕裂。游戏画面撕裂是游戏自诞生以来便一直存在的棘手问题。在传统本地游戏中,这个问的发生是因为显示器的刷新率和显卡(GPU)生成图像的帧率之间的不同步。如果显示器正在刷新一个新的图像时,而GPU正好在生成下一帧,显示器上下两部分获取到非同一帧的画面就会导致画面撕裂。
为了解决这个问题,常见的方法是启用垂直同步(V-Sync)技术,该技术通过降低显卡输出帧率以同步显示器的静态刷新率,从而减少或消除撕裂现象。然而,垂直同步会导致输入延迟,而且在显卡输出帧率低于显示器静态刷新率时会导致帧率大幅下降(显卡帧率到不到显示器帧率时,垂直同步会将显卡帧率限制到显示器帧率的一半),影响游戏性能表现。因此在一些情况下,玩家可能为了保证游戏性能表现,会关闭垂直同步。
针对垂直同步的缺点,显卡公司英伟达和AMD各自推出了G-Sync和FreeSync技术,该技术反向通过动态调整显示器的刷新频率来同步显卡帧率,这种技术在显卡帧率介于下限帧率(G-SYNC支持超低下限4-10hz都可以工作,G-Sync Compatible(G-Sync的兼容版)和FreeSync多数是42HZ)和显示器最高刷新率之间时,可以在保证游戏流畅度和低延迟的同时有效解决画面撕裂的问题,但该技术需要显示器兼容。
垂直同步和G-Sync、FreeSync等技术都是为了解决本地游戏画面撕裂的问题。而云游戏一般分为以下几个步骤:云端显卡输出画面->采集画面并编码->网络传输->客户端接收并解码->输出至本地显示器。目前云游戏主要采用WGC/DXGI技术和显卡欺骗器实现画面采集(无法兼容G-Sync和FreeSync),因此云游戏普遍的防撕裂方案还是在[云端显卡输出画面->采集画面并编码]和[客户端接收并解码->输出至本地显示器]阶段使用垂直同步技术。而表现更好的G-Sync/FreeSync技术则仅能用在客户端解码阶段。
本文所提出的基于自适应同步技术针云游戏场景画面撕裂的解决办法是通过帧率同步技术,虚拟显示器技术,结合已有的G-Sync和Free-Sync自适应同步技术共同作用以达到三个视频流帧率同步以消除云游戏画面撕裂的问题。
具体包括以下步骤:
1)开发一个虚拟显示器(vMonitor),该虚拟显示器的驱动加入G-Sync compatible和FreeSync兼容层。云端主机挂载该虚拟显示器,并在云端显卡驱动开启G-Sync compatible或FreeSync功能。该虚拟显示器作用是替代原本用于画面采集的DXGI或WGC技术,直接接收显卡输出的画面并转给编码模块。该虚拟显示器可以实现DXGI或WGC所无法实现的G-Sync compatible或FreeSync技术,可以在接收显卡输出画面时消除采集阶段的画面撕裂。
2)进行云游戏时,云端主机的显卡将渲染好的画面传输给虚拟显示器,同时通过G-Sync/FreeSync协议动态调整虚拟显示器的刷新率,云游戏编码程序接收虚拟显示器的原始视频数据和帧率信息(由G-Sync/FreeSync协议提供),编码程序按照帧率信息以动态帧率(VFR)进行视频编码,在编码时需要对低于G-Sync/FreeSync技术下限值的帧率(一般低于42FPS)进行重复采样使其在客户端侧的G-Sync/FreeSync生效。最后将编码后的视频流发送给客户端。
3)客户端显卡和实体显示器也开启G-Sync/FreeSync功能,在接收到视频流后将视频进行解码,解码出的视频直接输出至显示器。