使用交织合成第二眼睛视口转让专利

申请号 : CN201580073961.8

文献号 : CN107211117B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : D·C·朱E·A·C·拉法耶J·P·科普夫A·沃尔曼Y·德加雷夫李炅潣S·格里赞

申请人 : 微软技术许可有限责任公司

摘要 :

提供了一种用于在使用交织来合成第二眼睛视口时使用以便降低带宽成本的客户端设备和方法。客户端设备可以包括接收用户输入流的用户输入设备、立体显示设备、处理器和保持用于客户端应用程序的指令的存储设备,这些指令由处理器可执行以在客户端应用程序的视图插值模块处获取表示用于用户的第一眼睛的场景的当前视图的当前绘制的绘制表面和表示用于用户的第二眼睛的场景的过去的视图的先前绘制的绘制表面,基于当前绘制的绘制表面和先前绘制的绘制表面来合成并且显示表示用于用户的第二眼睛的场景的当前视图的当前第二眼睛视口。

权利要求 :

1.一种用于使用交织来合成第二眼睛视口的客户端设备,包括:用户输入设备,所述用户输入设备接收用户输入流;

立体显示设备;

处理器;以及

存储设备,所述存储设备保持用于客户端应用程序的指令,所述指令由所述处理器可执行以:在所述客户端应用程序的视图插值模块处获取表示用于用户的第一眼睛的场景的当前视图的当前绘制的绘制表面以及表示用于所述用户的第二眼睛的所述场景的过去视图的先前绘制的绘制表面;

基于所述当前绘制的绘制表面和所述先前绘制的绘制表面来合成表示用于所述用户的所述第二眼睛的所述场景的当前视图的当前第二眼睛视口,其中合成所述当前第二眼睛视口包括用以进行以下操作的指令:从所述当前绘制的绘制表面向所述当前第二眼睛视口重新投影;

检测所述当前第二眼睛视口中的一个或多个视觉孔;以及基于所述先前绘制的绘制表面来插值用于所述一个或多个视觉孔的一个或多个像素数据项;

在所述立体显示设备上显示所述合成的当前第二眼睛视口。

2.根据权利要求1所述的客户端设备,其中所述第一眼睛在左眼与右眼之间交替。

3.根据权利要求1所述的客户端设备,还包括用以进行以下操作的指令:在所述客户端应用程序的所述视图插值模块处获取用于所述当前绘制的绘制表面的深度图;

检测用于所述当前绘制的绘制表面的所述深度图中的深度差异;以及其中所述客户端应用程序被配置为基于所检测的深度差异来检测所述一个或多个视觉孔。

4.根据权利要求1所述的客户端设备,其中用以基于所述先前绘制的绘制表面来插值用于所述一个或多个视觉孔的一个或多个像素数据项的指令包括用以进行以下操作的指令:从所述先前绘制的绘制表面向所述当前第二眼睛视口重新投影。

5.根据权利要求4所述的客户端设备,其中用以基于所述先前绘制的绘制表面来插值用于所述一个或多个视觉孔的一个或多个像素数据项的指令,还包括用以进行以下操作的指令:在从所述先前绘制的绘制表面的重新投影之后,检测所述当前第二眼睛视口中的一个或多个剩余的视觉孔;以及基于所述先前绘制的绘制表面来填充所述一个或多个剩余的视觉孔。

6.根据权利要求5所述的客户端设备,还保持用以进行以下操作的指令:基于所述用户输入流来计算用户视点的变化速率;以及其中所述客户端应用程序被配置为基于所计算的用户视点中的变化速率来检测所述一个或多个剩余的视觉孔。

7.根据权利要求5所述的客户端设备,其中用以填充所述一个或多个剩余的视觉孔的指令包括用以进行以下操作的指令:对于所述一个或多个剩余的视觉孔中的每个剩余的视觉孔,确定所述当前第二眼睛视口中的像素位置;以及从与所述一个或多个剩余的视觉孔中的每个剩余的视觉孔的所述当前第二眼睛视口中的所述像素位置相对应的所述先前绘制的绘制表面中的像素位置来复制像素数据。

8.根据权利要求1所述的客户端设备,其中所述当前绘制的绘制表面和所述先前绘制的绘制表面具有比所述客户端应用程序的视口更宽的视场。

9.一种用于使用交织来合成第二眼睛视口的方法,包括:在执行客户端应用程序的客户端设备处:

在所述客户端应用程序的视图插值模块处获取表示用于用户的第一眼睛的场景的当前视图的当前绘制的绘制表面以及表示用于所述用户的第二眼睛的所述场景的过去视图的先前绘制的绘制表面;

基于所述当前绘制的绘制表面和所述先前绘制的绘制表面来合成表示用于所述用户的所述第二眼睛的所述场景的当前视图的当前第二眼睛视口,其中合成所述当前第二眼睛视口包括:从所述当前绘制的绘制表面向所述当前第二眼睛视口重新投影;

检测所述当前第二眼睛视口中的一个或多个视觉孔;以及基于所述先前绘制的绘制表面来插值用于所述一个或多个视觉孔的一个或多个像素数据项。

10.根据权利要求9所述的方法,其中所述第一眼睛在左眼与右眼之间交替。

11.根据权利要求9所述的方法,还包括:

在所述客户端应用程序的所述视图插值模块处获取用于所述当前绘制的绘制表面的深度图;

检测用于所述当前绘制的绘制表面的所述深度图中的深度差异;以及其中所述客户端应用程序被配置为基于所检测的深度差异来检测所述一个或多个视觉孔。

12.根据权利要求9所述的方法,其中基于所述先前绘制的绘制表面来插值用于所述一个或多个视觉孔的一个或多个像素数据项包括:从所述先前绘制的绘制表面向所述当前第二眼睛视口重新投影。

13.根据权利要求12所述的方法,其中基于所述先前绘制的绘制表面来插值用于所述一个或多个视觉孔的一个或多个像素数据项还包括:在从所述先前绘制的绘制表面的重新投影之后,检测所述当前第二眼睛视口中的一个或多个剩余的视觉孔;以及基于所述先前绘制的绘制表面来填充所述一个或多个剩余的视觉孔。

14.根据权利要求13所述的方法,还包括:基于用户输入流来计算用户视点的变化速率;以及其中所述客户端应用程序被配置为基于所计算的用户视点中的变化速率来检测所述一个或多个剩余的视觉孔。

15.根据权利要求13所述的方法,其中基于所述先前绘制的绘制表面来填充所述一个或多个剩余的视觉孔包括:对于所述一个或多个剩余的视觉孔中的每个剩余的视觉孔,确定所述当前第二眼睛视口中的像素位置;以及从与所述一个或多个剩余的视觉孔中的每个剩余的视觉孔的所述当前第二眼睛视口中的所述像素位置相对应的所述先前绘制的绘制表面中的像素位置来复制像素数据。

16.根据权利要求9所述的方法,其中所述当前绘制的绘制表面和所述先前绘制的绘制表面具有比所述客户端应用程序的视口更宽的视场。

17.一种用于使用交织来合成第二眼睛视口的客户端设备,包括:用户输入设备,所述用户输入设备接收用户输入流;

立体显示设备;

处理器;以及

存储设备,所述存储设备保持用于客户端应用程序的指令,所述指令由所述处理器可执行以:通过网络从服务器设备接收具有用于用户的第一眼睛的预测的用户视点的预测的场景的当前绘制的绘制表面;

在所述客户端应用程序的视图插值模块处获取具有用于所述用户的第二眼睛的先前预测的用户视点的先前预测的场景的先前绘制的绘制表面;

从所述用户输入设备在用户输入流中接收随后的用户导航输入;

基于所述随后的用户导航输入来确定用于所述第一眼睛的实际用户视点和用于所述第二眼睛的实际用户视点;

基于用于所述第一眼睛的所述预测的用户视点和用于所述第一眼睛的所述实际用户视点来确定用户视点错误预测;

从所述当前绘制的绘制表面重构用于所述用户的所述第一眼睛的用于所述实际用户视点的第一视口;

基于所述当前绘制的绘制表面和所述先前绘制的绘制表面来合成用于所述用户的所述第二眼睛的用于所述实际用户视点的第二视口;以及在所述立体显示设备上显示所述第一视口和所述第二视口。

18.根据权利要求17所述的客户端设备,其中用于第一眼睛的视图在用于左眼的视图与用于右眼的视图之间交替。

说明书 :

使用交织合成第二眼睛视口

背景技术

[0001] 近来,计算机内容越来越多地被转移到云平台,在云平台,专用服务器通过广域网绘制并且流式传输内容至客户端计算设备。在基于云的流媒体游戏的类型中,这样的流媒体平台使得服务提供商能够集中数据中心服务器处的游戏中的图形场景的绘制过程。服务器侧绘制提供了几个优点。首先,客户端计算设备可以利用强大的服务器GPU 提供的高端图形,以使得用户能够在不太强大的客户端计算设备上享受高端图形。第二,开发人员可以使其软件专门针对数据中心服务器,以缓解平台兼容性问题并且提高平台性能调整的效率。第三,集中到数据中心服务器增加了错误修复、软件更新、硬件更新和内容添加的难易程度。最后,用户可以选择已经加载在数据中心服务器上的大量内容,并且立即将该内容流式传输到其客户端计算设备。
[0002] 基于云的流媒体平台的一个缺点在于广域网络可能经受由于网络拥塞、分组丢失等导致的高的等待时间、以及/或者由用户与服务器之间的大距离引起的持续地高的等待时间,这可能降低用户实时体验流媒体内容的能力,而没有频繁的停顿和延迟。当前流媒体平台尝试通过使用内容缓冲区来解决这个问题。为了实现内容缓冲区,服务器将内容流式传输到客户端计算设备,在客户端计算设备处,内容被放置到内容缓冲区中,内容缓冲区存储内容用于显示给用户。客户端计算设备等待直到在播放给用户之前已经缓冲了足够的内容。在足够的内容被存储在缓冲区中之后,内容被显示给用户。当内容被显示时,缓冲区将重新填充有来自服务器的流媒体内容。在没有缓冲区的情况下,高的等待时间会导致播放暂停;然而,在具有缓冲区的情况下,不需要暂停播放,这是因为仅在将数据流下载到缓冲区中时发生暂停。通过这种方式,流媒体内容可以被播放给用户而没有感觉到延迟,这是因为由于等待时间而导致的下载的延迟被缓冲区吸收。然而,虽然缓冲可以减少用户对流媒体内容中的延迟的感知,但是当应用于其中在客户端计算设备处的用户输入被发送到服务器并且影响绘制的内容的应用(诸如游戏)时,缓冲存在相当大的缺点。在这些绘制应用中,由于在计算设备处接收到内容与向用户显示内容之间的通信时间滞后,缓冲实际上可以增加用户对等待时间的感知。由于在用户输入与显示的内容的响应之间产生小的滞后,小的通信时间滞后可能对用户造成烦扰。然而,大的通信时间滞后可能使这种网络上的实时游戏变得令人沮丧并且不切实际。

发明内容

[0003] 为了解决这些问题,提供了一种用于在使用交织来合成第二眼睛视口时使用以便降低带宽成本的客户端设备和方法。客户端设备可以包括接收用户输入流的用户输入设备、立体显示设备、处理器和保持用于客户端应用程序的指令的存储设备,这些指令由处理器可执行以在客户端应用程序的视图插值模块处获取表示用于用户的第一眼睛的场景的当前视图的当前绘制的绘制表面和表示用于用户的第二眼睛的场景的过去的视图的先前绘制的绘制表面,基于当前绘制的绘制表面和先前绘制的绘制表面来合成表示用于用户的第二眼睛的场景的当前视图的当前第二眼睛视口,并且在立体显示设备上显示合成的当前第二眼睛视口。
[0004] 提供本发明内容以便以简化的形式介绍在下面的具体实施方式中进一步描述的概念的选择。本发明内容不旨在标识所要求保护的主题的主要特征或基本特征,也不旨在用于限制所要求保护的主题的范围。此外,所要求保护的主题不限于解决在本公开的任何部分中指出的任何或所有缺点的实现。

附图说明

[0005] 图1是包括通过网络与客户端设备通信的服务器设备的一个实施例的计算系统的示意图。
[0006] 图2A是对于标准云游戏平台的响应于用户输入从输入到显示的帧的帧时间的时间线。
[0007] 图2B是对于图1的计算系统的一个实施例的响应于用户输入从输入到显示的帧的帧时间的时间线。
[0008] 图3A是示出由图1的绘制模块绘制的较宽视场的图形视图。
[0009] 图3B是示出具有被包括在图3A的绘制的较宽视场内的实际查看区域的实际的用户视点的图形视图。
[0010] 图3C是示出被包括在图3B的实际查看区域内的未显示的绘制的像素数据项的部分的图形视图。
[0011] 图4是图1的绘制表面的透视图实施例的图示。
[0012] 图5是图1的绘制表面的剪切的透视图实施例的图示。
[0013] 图6是用于图4的透视图实施例的预测的用户取向的预测的查看区域的图示。
[0014] 图7是用于图4的透视图实施例的实际的用户取向的实际的查看区域的图示。
[0015] 图8是图1的绘制表面的边缘实施例的图示。
[0016] 图9是用于图8的边缘实施例的预测的用户取向的预测的查看区域的图示。
[0017] 图10是用于图8的边缘实施例的实际的用户取向的实际的查看区域的图示。
[0018] 图11是用于图1的可能的备选脉冲输入序列的图形视图和时间线。
[0019] 图12A至图12D是示出图11的备选脉冲输入序列的俯视俯视图。
[0020] 图13是用于图11的备选脉冲输入序列的子采样和时移的图形视图和时间线。
[0021] 图14是示出用于被配置为计算预测的未来的导航输入并且将未来的场景绘制到绘制表面的服务器设备的方法的流程图。
[0022] 图15是具有由图1的绘制模块绘制的预测的用户视点的场景的俯视透视图。
[0023] 图16是示出可以从图14的方法发生的用户视点错误预测的俯视透视图。
[0024] 图17是用于填充由图15的用户视点错误预测引起的视觉孔的空间插值方法的俯视透视图。
[0025] 图18是用于填充由图15的用户视点中期预测引起的视觉孔的时间插值方法的俯视透视图。
[0026] 图19是用于填充由图15的用户视点错误预测引起的视觉孔的深度剥离方法的俯视透视图。
[0027] 图20是示出被配置为从图1的绘制的绘制表面重构用于实际的用户视点的视口的客户端设备的方法的流程图。
[0028] 图21是图1的客户端设备的头戴式显示器实施例的图示。
[0029] 图22是对于图21的HMD实施例的当合成用于第二眼睛的视口时由于深度差异和瞳孔间距离而可能产生的视觉孔的俯视透视图。
[0030] 图23是用于合成图22的第二眼睛的视口的交织方法的图形视图。
[0031] 图24是示出可能由图23的交织方法产生的视觉孔的图形视图。
[0032] 图25是示出用于被配置为从具有用于第一眼睛的用户视点的绘制的绘制表面合成用于第二眼睛的视口的客户端设备的方法的流程图。

具体实施方式

[0033] 图1总体上示出了其中基于预测的未来的客户端侧导航输入来执行场景的服务器侧绘制的计算系统10。通过预测未来的客户端导航输入,计算系统10不仅可以绘制具有适合于最新的用户输入的视场的场景,而且可以绘制适合于预测的未来的客户端侧导航输入的较大的视场。如下面详细地描述的,这个较大的视场被发送到客户端设备,在客户端设备处,可以基于在客户端设备处接收到的最新的实际用户输入来适当地修改和向用户显示这个较大的视场。这样的方法提供了计算系统的清晰响应性的潜在优点,从而减少了在用户输入与响应于用户输入的服务器侧绘制的内容的显示之间的用户感觉到的等待时间。
[0034] 计算系统10通常包括被配置为通过网络16与服务器设备14通信的客户端设备12,网络16可以是诸如因特网等广域网、或其他合适的计算机网络。客户端设备12包括处理器18、易失性存储器20、非易失性存储设备22、和被配置为从客户端设备12的用户接收用户输入的至少一个用户输入设备24。如下所述,非易失性存储设备22 保持由处理器18可执行以执行各种客户端侧功能的客户端应用程序 26的指令。类似地,服务器设备14包括处理器
28、易失性存储器30 和相关联的非易失性存储设备32。如下所述,非易失性存储设备32 保持由处理器28可执行以执行各种服务器侧功能的服务器应用程序 34的指令。
[0035] 在计算系统10中,客户端设备12通常收集客户端侧用户输入,并且将该用户输入通过网络转发到服务器设备14,服务器设备14又基于用户输入来绘制内容,并且将所绘制的内容通过网络16发送回客户端设备12。如以上简要所述,通过网络16传播的数据可能经历由于网络拥塞导致的传输延迟或由于设备故障导致的分组丢失,从而触发TCP慢启动并且在TCP/IP协议下需要耗时的重传或由用户与服务器之间的较大距离引起的持续高的等待时间。因此,客户端设备和服务器设备可以在高等待时间期间通过网络16进行通信。如下面详细地描述的,为了减少客户端设备处的用户输入与响应服务器绘制的内容在客户端设备处的随后的显示之间的感知到的通信时间滞后,实现了一种预测绘制方案,其中服务器设备基于未来的预测的输入状态来绘制额外的内容,并且客户端设备基于当前用户输入来执行运行时决策逻辑,以确定要显示的绘制的内容的特定部分,并且插值像素数据项以填充由于所接收的绘制的内容中的任何不足而留下的任何视觉孔。
[0036] 首先转到客户端设备12,应当理解,客户端设备12在用户输入缓冲区38处从用户输入设备24接收用户输入流36。用户输入缓冲区 38存储和组织用户输入流36并且将来自用户输入流36的当前用户导航输入40发送到服务器设备14上的服务器应用程序34。应当理解,作为若干示例,客户端设备12可以是移动计算设备(诸如,智能电话、平板计算机或头戴式增强现实计算设备)、个人计算设备或游戏控制台。例如,用户输入设备24可以是例如安装到可佩戴的计算设备(诸如,头戴式增强现实设备)的触摸屏、键盘、鼠标和/或传感器 (例如,陀螺仪、加速度计、深度相机和/或RGB相机)。应当理解,诸如当前用户导航输入40等导航输入是由客户端应用26和服务器应用34解释以通过虚拟空间导航用户的输入。例如,客户端应用程序 26和服务器应用程序34可以被配置为包括占用二维游戏空间或三维游戏空间的虚拟世界的游戏。导航输入可以由在客户端应用程序26 和服务器应用程序34中实现的程序逻辑来解释,以使玩家角色能够沿导航输入指示的方向行进通过游戏空间。还应当理解,用户输入还可以包括一个或多个实际的脉冲输入41,它们是非导航输入,诸如激活对象,激活能力等。例如,在第一人称视角战斗游戏的上下文中,脉冲输入可能导致玩家角色挥动武器,用武器攻击,变为不可见,点燃火炬等。这些输入本身不会导致玩家角色在游戏虚拟世界中的导航。
[0037] 服务器应用程序34又在预测模块42处接收当前用户导航输入 40。预测模块42计算预测的未来的导航输入44。应当理解,作为若干示例,预测的未来的导航输入44可以使用神经网络时间序列预测模型、线性和多项式回归模型、或马尔可夫模型来计算。如下所述,在一个示例性实施例中,应用离散时间马尔可夫链来计算预测的未来的导航输入44。非导航实际脉冲输入41也在服务器设备14处被接收。虽然这些输入确实影响服务器应用程序的应用状态47,但是在一个实施例中,它们不用于预测导航输入,并且因此在图中未被示出为被传递给预测模块42,但是被示出为通常被服务器应用程序34接收。
[0038] 在可以由预测模块42实现的一个示例马尔科夫模型中,时间被量化,每个离散间隔表示服务器应用程序34的时钟刻度。随机变量导航向量Nt表示在时间t的3-D转换和旋转的变化: Nt={δx,t,δy,t,δz,t,θx,t,θy,t,θz,t}。上述每个分量被量化。Nt表示作为当前用户导航输入40从客户端接收的实际经验导航向量。预测模块42 计算状态估计问题以找到最大似然估计 其中λ是在客户端设备 12与服务器设备14之间在网络16上的往返时间(RTT)。
[0039] 使用马尔科夫模型,导航向量在下一时间步长的概率分布仅取决于当前时间步长的导航向量:p(Nt+1|Nt)。预测模块42将下一时间步长的最可能的导航向量预测为:
[0040]
[0041] 其中Nt=nt指示通过对实际用户输入nt进行采样而向当前时间步长分配固定值。在很多情况下,RTT长于单个时间步长(例如,32ms)。为了处理这种情况,预测模块42将一个RTT之后的最可能的值预测为:
[0042]
[0043] 其中λ表示以时钟刻度为单位表示的RTT等待时间。
[0044] 已经发现,当由预测模块42实现时,上述马尔科夫模型具有令人满意的效果,即Nt+1无记忆性(即,独立于过去的给定的Nt)并且附加的用户输入历史(以更长的马尔科夫链的形式)在预测精度方面没有示出可测量的好处。预测模块42独立地对待向量N的每个分量,并且构建六个单独的模型。这种方法的有益效果是,在估计N时需要较少的训练,并且已经发现,独立地对待向量分量不会损害预测精度。
[0045] 在计算预测的用户导航输入44之后,预测模块42基于在服务器设备与客户端设备之间的在通信滞后时间(例如,一个RRT)内的应用状态47的当前应用状态来确定可能发生的不同排列的脉冲输入的多个备选脉冲输入序列46。如上所述,脉冲输入是非导航用户输入,诸如挥舞武器,用武器攻击,激活诸如火炬等对象,激活诸如不可见性等能力,等等。在一个示例性实施例中,预测模块42考虑可能在一个RTT中发生的所有可能的脉冲输入序列。例如,根据服务器应用程序34和客户端应用程序26的程序逻辑,用户可以在客户端应用程序26的每个时钟刻度处激活发射武器的脉冲输入。因此,如果RTT 是两个时钟刻度,则预测模块42考虑与以下各项相对应的脉冲输入序列:在两个时钟刻度处发射武器,以及在第一时钟刻度而不是第二个时钟刻度处发射武器,不在第一时钟刻度处发射武器而是在第二时钟刻度处发射武器,或者不在任何时钟刻度处发射武器。因此,这四种备选的可能性将被包括在多个备选的脉冲输入序列46内。在网络等待时间较长的情况下,诸如如果RTT是8个时钟刻度长,则可能的脉冲输入序列的状态空间可能变得不合需要地大。
[0046] 为了减少可能在一个RTT期间发生的可能的备选脉冲输入序列的数目,预测模块42通常仅允许脉冲输入激活以大于服务器应用程序34和客户端应用程序26的一个时钟刻度的子采样周期σ来发生。该子采样将预测模块42考虑的所有可能的脉冲输入序列的状态空间减小到2λ/σ。
[0047] 预测模块42将预测的未来的导航输入44和多个备选脉冲输入序列46发送到绘制模块48。绘制模块48从绘制表面库52中检索多个绘制表面50。基于预测的未来的导航输入44、多个备选脉冲输入序列46、以及服务器应用程序34的应用状态47的当前应用状态,绘制模块48将具有预测的用户视点的多个未来的场景绘制到多个绘制表面50和相应的多个深度图51。每个深度图51包含表示从与预测的用户视点相对应的点到每个绘制的绘制表面中的每个像素(或像素组) 的在虚拟世界(游戏空间)中的距离的深度值。绘制模块48将绘制的绘制表面54发送到联合编码器56。期望预测的未来的导航输入44 将不总是完全匹配从用户输入的实际导航输入。为了解决用户视点错误预测,绘制模块48使用比客户端设备12处的客户端应用程序26 的视口大的视场来绘制未来的场景。通过使用更大的视场来绘制,即使实际的用户视点具有与预测的用户视点不同的取向,诸如用户正在比预测更远地向右看,实际的用户视点具有高的概率仍然被包含在绘制的较大视场内。当使用更大的视场来绘制时,多个绘制表面50不一定像游戏应用的视口中一样是矩形的。在一些实施例中,多个绘制表面可以是立方体图、剪切的立方体图、边缘、四面体或其他类型的绘制表面。
[0048] 为了执行绘制,绘制模块48的示例性实施例创建多个从属实例,每个从属实例是原始服务器应用程序34的修改实例。从属实例被配置为根据服务器应用程序34的程序逻辑来执行预测的未来的导航输入44以及来自多个备选脉冲输入序列46的一个备选脉冲输入序列。对于每个从属实例,基于预测的未来的导航输入44来确定预测的用户视点。在执行服务器应用程序的程序逻辑之后,每个从属实例基于其接收到的应用状态47的当前应用状态和备选脉冲输入序列将来自预测的用户视点的其自己的未来的场景绘制到绘制表面,并且创建未来的场景的相应的深度图。在绘制之后,每个从属场景将其自己的绘制的绘制表面和深度映射表发送到绘制模块48中的主进程。主进程可以取决于RTT的长度来改变从属实例的数目,并且负责转发由每个从属实例完成的绘制用于由联合编码器56进行下游处理。
[0049] 应当理解,并不是所有脉冲输入和导航输入的推测性序列都将是正确的,并且实际上也可能没有一个推测性序列是正确的。因此,从属实例可能已经执行作为错误预测的脉冲输入和导航输入的推测性序列,并且将具有不正确的应用状态。为了解决这个问题,系统可以使用以下技术中的一种或多种来将不正确的从属实例回滚到正确的应用状态:页面级检查点、对象级检查点和恢复功能。
[0050] 对于页面级检查点,服务器应用程序保持与服务器应用程序的过去的应用状态相对应的存储器的页面的副本,以便在当前应用状态是由导航输入和脉冲输入的不正确的推测性输入序列导致的情况下回滚到过去的应用状态。为了实现这一点,服务器应用程序实现页面级的写时复制。在导航输入或脉冲输入的推测性序列开始时,服务器应用程序将所有页面标记为只读。当出现页面错误时,服务器应用程序会复制原始页面,并且将故障页面的保护级别设置为读写。当新的输入到达时,服务器应用程序将无效并且丢弃与新的输入不匹配的推测性输入序列。为了回滚到检查点,服务器应用程序使用其创建的原始页面的副本来复制回原始内容。服务器应用程序丢弃自上一检查点以来由于新的对象分配而创建的任何页面。另外,在推测性序列期间由删除的对象产生的页面解除分配被推迟,这是因为如果推测性序列不正确,则那些被删除的对象可能需要被恢复。
[0051] 对于对象级检查点,每个对象的生命周期由服务器应用程序来跟踪。为了回滚推测性序列,在检查点被回滚时不存在的对象将被删除,并且自检查点被回滚以来在不正确的推测性序列期间被删除的对象将被恢复。
[0052] 在从绘制模块48接收到绘制的绘制表面54之后,联合编码器56 对绘制的绘制表面54联合编码,并且将编码的绘制的绘制表面58通过网络16发送到客户端设备12处的解码器60。在示例性实施例中,联合编码器56将绘制的绘制表面54划分成宏块(例如,64×64位)。联合编码器的搜索处理标识在帧内、帧间和跨与每个从属实例相对应的绘制的绘制表面的不同流等效(在有损域中)的宏块。联合编码器 56的编码的目的是减少表示编码的绘制的绘制表面的数据量,以增加数据传输的速度并且减少带宽消耗,这有助于降低用户在客户端设备 12处对等待时间的感知。
[0053] 在客户端设备12的解码器60处,编码的绘制的绘制表面58被解码,并且解码的绘制的绘制表面61被发送到视图插值模块62。视图插值模块62另外接收来自预测模块42的多个备选脉冲输入序列46 和来自绘制模块48的多个深度图51。
[0054] 用户输入缓冲区38在来自用户输入设备24的用户输入流38中接收随后的用户导航输入64和随后的脉冲输入序列66,并且向视图插值模块62发送随后的用户导航输入64和随后的脉冲输入序列66。因此,应当理解,多个备选脉冲输入序列46、编码的绘制的绘制表面 58、和从服务器设备14接收的深度图51以量化时间步长(例如,T= 0)基于用户输入来计算和预测,用户输入对于服务器设备是当前的但是由于客户端服务器通信中的时滞现在对于客户端设备是过去的输入。还应当理解,从用户输入缓冲区38接收的随后的用户导航输入和随后的脉冲输入序列66表示来自稍后的量化的时间步长(例如, T=1)的用户输入,其是在客户端设备处接收的最当前的用户输入。
[0055] 视图插值模块62被配置为从基于随后的脉冲输入序列66(即,对应于其)的多个备选脉冲输入序列46中选择备选脉冲输入序列。在示例性实施例中,视图插值模块62被配置为将多个备选脉冲输入序列46中的每个备选脉冲输入序列与随后的脉冲输入序列66相比较,并且确定哪个备选脉冲输入序列与随后的脉冲输入序列66相匹配。因此,例如,如果电流脉冲输入序列66被输入以连续地发射武器两次,则选择与连续地发射武器两次相对应的备选脉冲输入序列 66。
[0056] 视图插值模块62还被配置为选择与所选择的备选脉冲输入序列相对应的绘制的绘制表面。视图插值模块62基于多个深度图51和随后的用户导航输入,通过从所选择的绘制的绘制表面重新投影到客户端应用程序26的视口来重构实际的用户视点的视口。视图插值模块 62发送重构的视口68以在显示设备70上显示。
[0057] 因此,客户端应用程序26被配置为与服务器应用程序34通信,以将用户输入发送到服务器设备14并且响应于来自服务器应用程序 34的下载预测性绘制内容,并且对预测性绘制内容进行基于图像的绘制技术以响应于用户当前输入来重构和显示绘制的视口。
[0058] 现在转到图2A,示出了用于标准云游戏平台的客户端-服务器通信流程。在这样的标准云游戏平台中,作为从客户端设备接收到用户输入的时刻到对应于该用户输入的帧被绘制和显示的时刻所经过的时间的帧时间必须包括完整的RTT。这是由于以下固有事实:在这样的云游戏平台中,服务器无法开始绘制帧,直到其接收到该帧的用户输入,这占据了一半的RTT。在绘制帧之后,然后客户端设备将占用另一半RRT来通过网络接收帧。因此,无论服务器绘制帧多快,从用户输入命令的时间到用户可以看到该输入的结果的时间的帧时间是至少一个RTT。如果网络上的RTT长,则帧时间将变得不切实际,并且阻碍用户对内容的体验。
[0059] 图2B示出了图1所示的配置的系统10的客户端-服务器通信流程。利用该配置,用户在时间T0类似地录入输入0。输入0将占用一半的RTT在服务器设备处被接收。然而,在T2,并非绘制输入0 的帧,服务器设备基于用户输入0来预测用户输入1-5。服务器设备然后绘制与该输入序列相对应的帧,并且将该绘制的帧5发送到客户端设备。帧5占用一半的RTT来通过网络传播并且在客户端设备处被接收。应当理解,在用户甚至录入输入5之前,客户端设备已经从服务器设备接收到与预测输入5相对应的绘制的帧。因此,在用户输入实际输入5之后,客户端设备通过从绘制的帧5重新投影到实际用户输入5的视口来重构实际用户输入5的视口,以校正由服务器设备进行的任何错误预测。然后重构的视口可以被显示给用户。从用户的角度来看,从该用户输入实际输入5到示出与实际输入5相对应的绘制视口的帧时间是可忽略的短时间。应当理解,图2B描绘了用户输入流和所显示的视口流,使得对应于输入0的视口与发送到服务器设备的输入0一起也被显示给用户,其中输入0的视口从基于从时间T-4、T-3、T-2和T-1的预测的用户输入绘制的绘制的帧来重构。
[0060] 可以由服务器设备进行的一种类型的错误预测是用户取向的错误预测。图3A描绘了具有导致预测的查看区域300的预测的用户视点的3D空间。如图3A所示为了解决用户取向错误预测的可能性,而不是仅为客户端设备上的客户端应用程序的视口绘制预测的查看区域300,更宽的视场302使用在预测的查看区域300之外的绘制的非显示部分301来被绘制,并且因此将在以预测的查看区域300 为中心的客户端应用程序的视口之外。在接收到随后的用户导航输入之后,可以确定实际的用户视点。如果实际的用户视点与预测的用户视点相同,则可以将预测的查看区域300安全地显示给用户,而不改变,并且不向用户显示绘制的未显示区域301。然而,实际的用户视点可能偏离预测的用户视点。例如,如图3B所示,与预测的用户视点相比,用户的头部可以以略微不同的方式(在图中略微向右) 被定位和定向。这种偏差在本文中被称为用户取向中期预测。如图3B所示,如果仅绘制预测的查看区域300,则客户端设备将不具有足够的可视数据来重构实际查看区域304的视口。然而,如图3C所示,由于根据上述技术来绘制更宽的视场302,所以在预测的查看区域之外的实际查看区域的部分303仍然被包含在绘制的更宽的视场 302内。因此,包括与实际查看区域304的部分303相对应的绘制的非显示区域301的部分在内的绘制的更宽的视场302可以被重新投影到实际查看区域304的客户端应用的视口,并且被显示给用户,而不要求服务器设备重新绘制场景。应当理解,尽管查看区域被示意性地示出为圆形,但是查看区域可以是很多不同种类的形状,诸如对应于客户端应用程序的视口的矩形。另外,虽然绘制的更宽的视场也被示意性地描绘为圆形,但是它也可以具有很多不同种类的形状,诸如立方体图、剪切的立方体图、边缘、四面体等。
[0061] 当在3D空间中绘制到更宽的视场时,可以使用诸如立方体图、剪切的立方体图、边缘、四面体等绘制表面。通过关于在立方体图定义的立方体之内的视点的方向,图4示出了立方体图绘制表面的实施例,其具有前平面、左平面、右平面、上平面、下平面、和未示出的背平面。使用6个面的完整立方体图,用户视点完全被包括在立方体图中,并且任何用户取向的视口可以从绘制的立方体图来重构。
[0062] 通常,绘制到立方体图的所有6个面是不必要的,因为实际的用户视点不太可能偏离预测的用户视点,以明显需要在当前用户视角的相反方向的绘制。剪切的立方体图的实施例如图5所示。在剪切的立方体图的本实施例中,在预测的用户视点的方向上的立方体的前平面被完全绘制。然而,仅绘制左平面、右平面、上平面和下平面的部分。图5中的虚线标记用于示例绘制的剪切区域,其中剪切区域之外的区域不被绘制。基于预测误差的预期方差来确定剪切的百分比,由服务器设备的预测模块进行错误预测的期望幅度的量化。如果方差较高,则立方体图的较大部分将被绘制。相反,如果方差较低,则可以安全地绘制立方体图的较小部分,从而降低带宽消耗。
[0063] 图6描绘了具有预测的用户视点的绘制的透视图,预测的用户视点位于由立方体图定义的立方体的中间,立方体图在前平面上具有朝向预测的场景的预测的用户取向。预测的查看区域600是立方体图的整个绘制的前平面。
[0064] 图7示出了具有实际的用户取向的实际的用户视点。从实际的用户视点来看,实际查看区域700不同于预测的查看区域600。然而,由于透视图的右平面也被绘制为绘制的较宽视场的一部分,所以实际查看区域700的视口可以通过将绘制的前平面的相应部分和绘制的右平面的相应部分重新投影到实际的用户视点的客户端应用程序的视口来重构。
[0065] 在绘制表面的另一实施例中,使用边缘形状。图8示出了边缘形状,其中左平面和右平面被绘制并且成角度使得两个平面在边缘处相交。未来的场景被绘制到边缘,使得具有预测的用户取向的预测的用户视点朝向两个平面相交的边缘的锐角侧,并且具有预测的查看区域 900,如图9所示。
[0066] 图10示出了具有实际的用户取向的实际的用户视点。从实际的用户视点来看,实际的查看区域1000不同于预测的查看区域900。然而,由于边缘的右平面被绘制超出了被包含在预测的查看区域900中的部分,所以实际的查看区域1000仍然被包含在绘制的边缘绘制表面中。因此,实际的查看区域1000的视口可以通过从绘制的左平面的相应部分和绘制的右平面的对应部分重新投影到实际的用户视点的客户端应用程序的视口来重构。
[0067] 应当理解,通常,实际的用户视点将接近预测的用户视点的可能性很高。因此,可以增加实际的用户视点的绘制质量,同时通过基于可能性的凹形(foveation)——一种将像素重新分配到更可能被查看的区域的技术——同时减少服务器、客户端和网络带宽成本。通过基于可能性的凹形,绘制的绘制表面在实际被查看的可能性高的区域以高的分辨率被绘制并且在实际被查看的可能性低的区域以低的分辨率被绘制。
[0068] 在使用剪切的立方体图和基于可能性的凹形的实施例中,实际被查看的最可能的位置是立方体的前平面,其是预测的查看区域。因此,剪切的立方体图的前平面以比剪切的立方体图的上平面、下平面、左平面和右平面更高的分辨率被绘制。
[0069] 现在转到图11,可能的备选脉冲输入序列的数目取决于服务器设备与客户端设备之间的通信滞后时间(例如,一个RTT)。在图11 所示的示例中,通信滞后时间(T0,T1,T2)足够长,使得两个脉冲输入可以在通信滞后时间内被激活。服务器应用程序的实施例可以是游戏应用。在本实施例中,应用状态可以包括游戏世界的当前状态,包括用户角色的当前状态。例如,在游戏应用程序的当前应用状态下,用户可能只能解锁单个武器并且没有能力。因此,如图11所示,服务器应用程序的当前应用状态仅允许一种类型的脉冲输入,其可以是用户发射其一个武器,并且因此在任何时间T,单个脉冲输入被激活或脉冲输入未被激活。
因此,当前应用状态允许单个脉冲输入的四个排列:序列1103[无激活,无激活];序列1104[无激活,激活];序列1105[激活,无激活];和序列1106[激活,激活]。
[0070] 在示例性实施例中,使用服务器应用逻辑来执行来自图11的每个备选脉冲输入序列,作为示例,服务器应用逻辑可以是如上所述的游戏应用,并且未来的场景基于预测的未来的导航输入和每个备选脉冲输入序列来绘制。图12A至图12D示出了要根据上述实施例来绘制的未来的场景的俯视图。在图12A至图12D中,预测的用户视点先前从预测的未来的导航输入来获得,并且对于图12A至图12D中的每个是相同的。图12A是与图11的序列 1103相对应的场景,其为[无激活,无激活]。图12B、图12C和图12D分别对应于序列1104、序列1105和序列1106。在本实施例中,脉冲输入是发射武器。因为图12A对应于无脉冲输入激活的序列,并且因此武器从不被发射,所以没有子弹被绘制。图12B对应于序列[无激活,激活],因此武器将紧在场景被绘制之前被触发,并且子弹仍将靠近用户。另一方面,图12C对应于序列 [激活,无激活],这意味着子弹在T1被发射,并且没有子弹在T2被发射,因此,单个子弹将被绘制远离用户,因为第一子弹在T2期间已经行进。图12D对应于序列[激活,激活],其中子弹在T1和T2被发射。因此,场景使用两个子弹被绘制,一个远离用户,一个靠近用户。
[0071] 在一些实施例中,服务器设备与滞后设备之间的通信滞后时间可能很高。在图13所示的实施例中,通信滞后时间是8个时钟刻度的 RTT。如果在每个时钟刻度考虑脉冲输入激活,即使只有一个脉冲输入类型,状态空间将是2^8或256个可能的备选脉冲输入序列。在图 13所示的示例中,通过只允许以大于服务器应用程序和客户端应用程序的一个时钟刻度的子采样周期发生脉冲输入激活来减小状态空间。在图13中,仅允许脉冲输入激活在T3和T7发生,导致2^2或4个可能的备选脉冲输入序列的状态空间。
[0072] 仅允许脉冲输入激活以比服务器应用程序和客户端应用程序大一个时钟刻度的子采样周期发生,可能导致在客户端设备处从用户输入设备接收到的随后的脉冲输入激活,其没有落在要丢失的子采样的刻度上。图13所示的量化逻辑通过在时间上向前或向后时移脉冲输入以与最近的子采样刻度对准来缓解脉冲输入数据的这种潜在损失。时移是可能的,因为备选脉冲输入序列用于尚未向用户显示的未来的事件。因此,来自用户的实际脉冲输入可以被时移以与最近的子采样刻度对准,只要该刻度的场景尚未被显示给用户。在图13所示的实施例中,客户端设备接收对应于备选脉冲输入序列1104、序列1105、序列1106和序列1106的四个绘制场景。例如,实际的脉冲输入序列是T1处的脉冲输入激活和T8处的脉冲输入激活,则T1处的脉冲输入激活可以被向前时移以在子采样刻度T3处发生,并且T8处的脉冲输入激活可以被向后时移以在子采样刻度T7处发生。因此,对应于在T3和 T7两者处具有脉冲输入激活的备选脉冲输入序列1106的绘制的场景可以用于重构要显示给用户的视口。
[0073] 图14示出了根据本公开的实施例的用于预测用户输入并且绘制应用的未来的场景的方法1400的流程图。参考以上在图1中描述和所示服务器设备14和客户端设备12的软件和硬件部件来提供方法 1400的以下描述。应当理解,方法1400也可以在其他上下文中使用其他合适的硬件和软件部件来执行。
[0074] 方法1400开始于1402,并且包括在服务器设备上执行的服务器应用程序处通过网络从来自客户端设备的用户导航输入流中接收当前用户导航输入。方法1400前进到1404,并且包括基于当前用户导航输入和服务器应用程序的当前应用状态来计算预测的未来导的航输入,如上所述。
[0075] 方法1400前进到1406,包括确定是否可以在服务器应用程序中激活脉冲输入。在仅考虑导航输入并且不具有脉冲输入的服务器应用程序的实施例中,方法1400前进到1408,并且包括基于预测的未来的导航输入来向绘制表面绘制未来的场景。服务器设备可以使用比在客户端设备上执行的客户端应用程序的视口更宽的视场来绘制未来的场景。如上所述,作为几个非限制性示例,绘制表面可以是立方体图、剪切的立方体图、边缘或四面体。方法1400前进到1410,并且包括通过网络将绘制的绘制表面发送到客户端设备。
[0076] 在考虑导航输入和脉冲输入二者的服务器应用程序的另一实施例中,方法1400从1404前进到1406到1412,并且包括基于服务器应用程序的当前应用状态来确定可以在服务器设备与客户端设备之间的通信滞后时间内发生的不同排列的脉冲输入的多个备选脉冲输入序列。为了减少在通信滞后时间内可能出现的可能的脉冲输入序列的状态空间,服务器设备可以确定脉冲输入仅在大于服务器应用程序的一个时钟刻度的子采样周期上发生。
[0077] 方法1400前进到1414,并且包括基于备选脉冲输入序列中的每个以及预测的未来的导航输入来向多个绘制表面绘制多个未来的场景。服务器设备可以使用比在客户端设备上执行的客户端应用程序的视口更宽的视场来绘制多个未来的场景。作为若干非限制性示例,绘制表面可以是立方体图、剪切的立方体图、边缘或四面体。方法1400 前进到1416,并且包括通过网络将多个备选脉冲输入序列和多个绘制的绘制表面发送到客户端设备。
[0078] 现在转到图15,示出了具有预测的用户视点的预测的场景的俯视图。在本实施例中,预测的场景、以及包含绘制的绘制表面中的每个像素的深度信息的深度图由服务器设备绘制给绘制表面,并且被发送给客户端设备。当在服务器设备处被绘制时,场景是未来的场景,这是因为它基于预测的未来的导航输入被绘制。当绘制的表面到达客户端设备时,在通过网络运行半个RTT之后,由服务器设备绘制的场景不再是未来的场景,而是预测的场景。
[0079] 图16描绘了可用于客户端设备的绘制的绘制表面和深度图的组合视觉。在本实施例中,从预测的用户视点来看,视觉信息(例如,像素数据项)仅可用于对象的前表面。在接收到随后的用户导航输入之后,客户端设备基于随后的用户导航输入来确定实际的用户视点。然后,客户端设备可以基于预测的用户视点和实际的用户视点来确定图16所示的用户视点错误预测。
[0080] 接下来,客户端设备通过从绘制的绘制表面重新投影到重构的视口,从绘制的绘制表面来重构用于实际的用户视点的视口。在客户端设备的示例性实施例中,为了从绘制的绘制表面重新投影到实际的用户视点的视口,客户端使用绘制的绘制表面和深度图的RGBD(epth) 数据从实际的用户视点的角度重画场景。为了重画场景,客户端设备将从实际的用户视点射出的射线投射到由绘制表面和相应的深度图定义的场景中。例如,射线1600从实际的用户视点被投射,并且与预测的场景中的正方形的一部分相交。在确定了射线1600和正方形的相交之后,可以将与射线1600相交的正方形的该部分的像素信息复制到与投影射线1600的发起点相对应的重构的视口中的位置。类似地,射线1602还与对象相交,六边形和与射线1602相交的六边形部分的像素数据项可以被复制到与射线1602的发起点相对应的位置中的重构的视口。应当理解,在上述实施例中,可以使用射线投射、射线追踪、射线跟踪和其他技术来投射射线。
[0081] 图16所示的用户视点错误预测包括用户位置错误预测。因此,在本示例中,实际的用户视点从与预测的用户视点查看场景不同的角度来查看场景。这可能导致实际的用户视点查看未被预测的用户视点查看的场景的部分,并且因此不会在绘制模块的初始实现中被绘制到绘制的绘制表面。例如,从实际的用户视点投射的射线1604和射线 1606不与绘制的绘制表面和深度图中的任何位置相交,并且绘制的绘制表面不包含射线1604和射线1606指向的位置的视觉数据,因为它们指向未被预测的用户视点查看的区域。
[0082] 在未来的场景被绘制到如图3A至图3C和图4至图10 所示的更宽视场的实施例中,射线1606与预测的用户视点查看的区域之外的绘制的非显示数据相交、以及与客户端设备上的客户端应用程序的视图插值模块相交,以将绘制的绘制表面的未显示部分重新投影到实际的用户视点的重构的视口。
[0083] 然而,甚至在包括绘制到比客户端应用程序的视口更宽的视场的实施例中,将不存在图16所示的射线1604的视觉信息,这是因为它查看没有被预测的用户视点查看的在正方形之后的区域,因此不会在服务器设备的绘制模块的天真(naive)更宽的视场实施例中被绘制。因此,射线1604指向被包含在绘制的绘制表面内的视觉信息中的空白,并且从具有预测的用户视点的绘制的绘制表面重新投影将在对应于射线1604的发起点的重构的视口上导致视觉孔。
[0084] 为了填充在从绘制的绘制表面到实际的用户视点的重构的视口的重新投影之后留下的任何视觉孔,客户端设备上的客户端应用程序的视图插值模块插值一个或多个像素数据项以使用基于图像的绘制方法填充重构的视口中的一个或更多视觉孔。应当理解,可以使用多个基于图像的绘制方法,例如,空间视图插值、时间视图插值、深度剥离等。在一个实施例中,使用空间视图插值方法,其中屏幕间隔网格被投影到与具有预测的用户视点的预测的场景的绘制的绘制表面相对应的深度图的深度缓冲区上。
[0085] 图17示出了由绘制的绘制表面与深度图组合定义的预测的场景的俯视图、以及被投影到深度图的深度缓冲区上的屏幕空间网格。在图17所示的示例中,投影屏幕空间网格将产生边缘1700、边缘1702、边缘1704和边缘1706。这些边缘出现在其中例如存在前景对象和背景对象的深度缓冲区中的深度差异处。在边缘1700的情况下,三角形是前景对象,在三角形后面的左壁部分是背景对象,并且空间屏幕网状网格的边缘1700在两个对象之间延伸。类似地,边缘1702在正方形与左壁部分之间延伸,边缘1704在正方形与右壁部分之间延伸,并且边缘1706在右壁部分与六边形之间延伸。
[0086] 在示例性实施例中,视图插值模块将来自实际的用户视点的射线投射到屏幕空间网状网格。如图17所示,射线1604从实际的用户视点投射到空间网状网格并且与边缘1704相交。在确定射线1604与边缘1704相交之后,视图插值模块计算在与射线1604的发起位置相对应的重构的视口上像素位置的像素颜色。应当理解,可以使用不同的方法来计算像素颜色。例如,可以从边缘在其间延伸的前景对象的像素颜色和背景对象的像素颜色的混合来计算像素颜色,或者可以从用于边缘的默认颜色中选择像素颜色。在一个实施例中,仅基于背景对象的颜色来计算像素颜色。应当理解,在上述实施例中,可以使用射线投射、射线追踪、射线跟踪和其他技术来投射射线。
[0087] 在一些实施例中,通过在小窗口尺寸(例如,5×5)上施加最小过滤器,被投影到深度图的深度缓冲区上的屏幕空间网状网格的边缘在宽度方面被扩展一个或多个像素,使得前景对象显得更大。扩展边缘可以帮助保留前景对象的形状,并且减少所产生的视觉伪影的影响。
[0088] 在另一实施例中,视图插值模块通过从先前绘制的视口的一部分重新投影使用时间视图插值方法来插值一个或多个像素数据项。本实施例的示例在图18中示出,其中中心壁部分从预测用户视点查看被正方形阻挡,并且不会被绘制模块的天真(naive)实施例绘制。在本示例中,用户正从右到左移动,并且服务器设备预测直接向左移动到预测的用户视点。在接收到预测的用户视点的绘制的绘制表面和深度图之后,客户端设备接收随后的用户导航输入,并且确定用户实际上比预测更远地向左移动,并且实际上在当前的实际的用户视点处。当重构当前的实际的用户视点的视口时,视图插值模块需要插值其中存在视觉孔的射线1802的像素数据。虽然与射线1802相交的中心壁部分没有被包含在预测的用户视点的绘制的绘制表面内,但是中心壁部分通过射线1804从过去的实际的用户视点被查看,并且将被包含在过去的实际的用户视点的先前绘制的视口中。为了插值射线1802的像素数据,视图插值模块从包含与射线1802相交的中心壁部分的像素数据项的过去的实际的用户视点的先前绘制的视口的一部分重新投影。
[0089] 图19描绘了使用深度剥离来绘制多个深度层的组合的实施例。在图19所示的示例中,三个深层被绘制成组合绘制表面。第一深度层包含用于背景壁的像素数据项,第二深度层包含三角形和六边形的前表面的像素数据项,第三深度层包含正方形的前表面的像素数据项。在确定用户视点错误预测之后,客户端设备的视图插值模块的实施例从组合深度层绘制表面重新投影到实际的用户视点的视口。当重新投影时,视图插值模块可以将来自实际的用户视点的射线投射到作为多个深度层的组合的绘制表面。例如,从实际的用户视点投射的射线1904与深度层2中的六边形和深度层3中的壁相交。由于像素数据项可用于壁和六边形,视图插值模块确定六边形从实际用户视点来看在壁前方,并且将六边形的像素数据项重新投影到实际的用户视点的视口,并且丢弃在六边形后面的壁部分的像素数据项。从实际的用户视点投射的射线1902与深度层1或深度层2中的任何对象不相交,仅与深度层
3中的壁相交。因此,视图插值模块可以仅将与射线1902 相交的壁的部分的像素数据项重新投影到实际的用户视点的视口。应当理解,与射线1902相交的壁部分从预测的用户视点没有被查看到,但是在被绘制到被发送到客户端设备的绘制表面的多个深度层的组合中的深度层3中在服务器设备处被绘制。
[0090] 在上述配置的一个实施例中,被绘制到绘制表面的多个深度层中的深度层的数目不超过可调节的阈值。一些对象或场景可以具有复杂的深度剖面,并且具有潜在的大量深度层(例如,叶子或粒子系统)。大量的深层可能导致潜在的无限制的存储器需求。通过将潜在的深度层的数目限制为阈值,可以防止潜在的无限制的存储器需求这一问题。
[0091] 图20示出了根据本公开的实施例的用于重构实际的用户视点的视口的方法2000的流程图。参考以上在图1中描述和示出的服务器设备14和客户端设备12的软件和硬件部件来提供方法2000的以下描述。应当理解,方法2000也可以在其他上下文中使用其他合适的硬件和软件部件来执行。
[0092] 方法2000开始于2002,并且包括确定在客户端设备上执行的客户端应用程序是否包括脉冲输入。如果客户端应用程序仅允许输入导航输入,而不允许输入脉冲输入,则方法2000前进到2004,并且包括通过网络从服务器设备接收具有预测的用户视点的预测的场景的绘制的绘制表面,其中绘制的绘制表面具有比客户端应用程序的视口更宽的视场,并且在以预测的用户视点为中心的客户端应用程序的视口中未显示的区域中包括多个未显示的绘制的像素数据项。
[0093] 方法2000前进到2006,并且包括在用户输入流中接收随后的用户导航输入。在接收到随后的用户导航输入之后,方法200前进到 2014,并且包括基于随后的用户导航输入来确定实际的用户视点。接下来,方法2000前进到2016,并且包括基于预测的用户视点和实际的用户视点来确定用户视点错误预测。
[0094] 在确定存在用户视点错误预测时,方法2000前进到2018,并且包括从绘制的绘制表面重构实际的用户视点的视口,其中实际的用户视点的视口包括多个未显示的绘制的像素数据项的一部分。应当理解,将向用户显示被包括在实际的用户视点的视口中的多个未显示的绘制的像素数据项的一部分,而没有被包括在实际的用户视点的视口中的多个未显示的绘制的像素数据项的剩余部分将保持不被显示。
[0095] 在重构步骤2018期间,方法2000前进到子步骤2020和2022。步骤2020包括从绘制的绘制表面的一部分重新投影到实际的用户视点的视口。应当理解,在重新投影之后,由于用户视点错误预测,视觉孔可能保留在实际的用户视点的视口中,如上所述。为了填补这些视觉孔,方法2000前进到步骤2022,并且包括插值一个或多个像素数据项以填充重构的视口中的一个或多个视觉孔。应当理解,一个或多个像素数据项可以通过多种不同的方法来插值,例如,通过空间插值、时间插值或深度剥离。
[0096] 完成步骤2022的一个示例方式使用空间插值,如子步骤2022A 所示。在子步骤2022A,方法可以包括将屏幕空间网状网格投影到与预测的场景的绘制的绘制表面相对应的深度图的深度缓冲区上。屏幕空间网状网格可以包括在预测的场景中在前景对象与背景对象之间延伸的边缘。接下来,子步骤2022A可以包括将屏幕空间网状网格中的边缘在宽度方面扩展一个或多个像素。然后,子步骤2022A可以包括将来自实际的用户视点的射线投射到屏幕空间网状网格。接下来,子步骤2022A确定射线与屏幕空间网状网格中的边缘相交。
最后,子步骤2022A可以包括基于预测的场景中的背景对象的颜色来计算插值的一个或多个像素数据项的像素颜色。应当理解,当投射射线时,可以使用射线投射、射线追踪、射线跟踪和其他射线技术。
[0097] 使用时间插值的步骤2022的另一子步骤在子步骤2022B处示出,并且包括从先前绘制的视口的一部分重新投影。使用深度剥离的步骤 2022的子步骤在2022C处示出,并且包括从绘制的绘制表面重新投影。根据子步骤2022C,绘制的绘制表面可以是多个深度层的组合,并且多个深度层中的多个深度层通常不超过可调节的阈值。
[0098] 在重构实际的用户视点的视口之后,方法2000前进到步骤2024,包括在显示设备上显示实际的用户视点的视口。
[0099] 返回到步骤2002,如果客户端应用程序包括脉冲输入,则方法 2000前进到步骤2008,并且包括通过网络从服务器设备接收多个备选脉冲输入序列和与多个备选脉冲输入序列相对应的多个绘制的绘制表面。应当理解,多个绘制的绘制表面每个可以使用预测的用户视点并且使用比客户端应用程序的视口更宽的视场来绘制,并且在没有被显示在以预测的用户视点为中心的客户端应用程序的视口中的区域中包括多个未显示的绘制的像素数据项。
[0100] 方法2000前进到步骤2010,并且包括在用户输入流中接收随后的用户导航输入和随后的脉冲输入序列。接下来,方法2000前进到 2012,并且包括基于随后的脉冲输入序列从多个备选脉冲输入序列中选择备选脉冲输入序列,并且从与所选择的备选脉冲输入序列相对应的多个绘制的绘制表面中选择绘制的绘制表面。应当理解,可以使用各种标准来进行该选择。在一个实施例中,选择与随后的脉冲输入序列相匹配的备选脉冲输入序列。在其他实施例中,选择最接近随后的脉冲输入序列的备选脉冲输入序列。还应当理解,可以相应地以大于客户端应用程序的一个时钟刻度的子采样周期确定备选脉冲输入序列。在这样的实施例中,方法2012可以包括在选择备选脉冲输入序列之前将随后脉冲输入序列的每个脉冲输入时移到多个备选脉冲输入序列的最近的子采样刻度。
[0101] 在选择备选脉冲输入序列和相应的绘制的绘制表面之后,方法 2000以与上述相同的方式进行步骤2014、2016、2018、2020、2022 和2024。
[0102] 如图21所示,上述客户端设备12可以包括立体显示器70A。在示例性实施例中,立体显示器70A可以以头戴显示器(HMD)的形式被包括在客户端设备12A中。HMD客户端设备12A的立体显示器 70A具有左显示器L和右显示器R,每个显示器都向穿戴HMD的用户的相应的左眼投影图像和右眼投影图像。HMD客户端设备12A可以通过诸如安装在设备上的传感器(例如,陀螺仪、加速度计、RGB 相机、深度相机等)等用户输入设备24A来接收用户输入。HMD客户端设备可以通过网络将从安装的传感器接收到的数据发送到服务器设备。在一个实施例中,HMD客户端设备从针对预测的用户左眼视点和预测的用户右眼视点实现方法1400的服务器设备接收预测性内容。预测性内容可以是绘制的绘制表面和深度图、或者多个绘制的绘制表面和深度图以及多个备选脉冲输入序列。在本实施例中,HMD 客户端设备执行方法2000两次,以从与用户左眼相对应的预测性内容来重构用户左眼的实际的用户视点的视口,并且从与用户右眼相对应的预测性内容来重构用户右眼的实际的用户视点的视口。
[0103] 在另一实施例中,为了减少带宽消耗,服务器设备仅针对用户第一眼睛的预测的用户视点来执行方法1400。服务器设备可以在每次绘制通过时在用户的左眼与用户的右眼之间交替第一眼睛,使得HMD 客户端设备接收在用户的左眼的预测的用户视点与用户的右眼的预测的用户视点之间交替的预测性内容。在本实施例中,HMD客户端设备执行方法2500,以基于刚刚从服务器设备接收到的当前预测性内容以及先前从服务器设备接收到的先前预测性内容来重构用户的第一眼睛的实际的用户视点的视口和用户的第二眼睛的实际的用户视点的第二视口。应当理解,在本实施例中,当前预测性内容从第一眼睛的预测的用户视点来绘制,并且先前的预测性内容从第二眼睛的预测的用户视点来绘制。还应当理解,根据方法1400,预测性内容可以是由服务器设备产生的绘制的绘制表面、或者多个绘制的绘制表面和多个备选脉冲输入序列。
[0104] 现在转到图22,立体显示器利用两个绘制的视口用于显示,一个用于用户的左眼,一个用于用户的右眼。在图22所示的示例中,服务器设备发送具有用于第一眼睛的用户视点的场景的绘制的绘制表面和深度图。在本示例中,第一眼睛是用户的左眼,并且没有用户视点错误预测,使得左眼的实际的用户视点与左眼的预测的用户视点相匹配。因此,通过将绘制的绘制表面所表示的场景简单地投影到左眼的视口,可以构成左眼的视点。然而,作为用户的右眼的第二眼睛的视点以瞳孔间距离——即穿戴HMD客户端设备的用户的瞳孔之间的距离——被转变到第一眼睛的右侧。因为,在本示例中,HMD客户端设备仅具有用于左眼的当前绘制的绘制表面,所以HMD客户端设备需要基于具有用于第一眼睛的用户视点的绘制的绘制表面来插值第二眼睛的视口。因此,HMD客户端设备的视图插值模块使用具有用于第一眼睛的用户视点的绘制的绘制表面的绘制的内容将场景重新投影到第二眼睛的视口。
[0105] 在图22所示的示例中,视图插值模块将来自第二眼睛的用户视点的射线投射到由具有用于第一眼睛的用户视点的绘制的绘制表面所表示的场景。射线2500和射线2502与被包含在绘制的绘制表面的绘制的内容中的场景中的位置相交。因此,可以将与和射线2500和射线2502相交的位置相对应的绘制的绘制表面的像素数据项添加到与射线2500和射线2502的发起点相对应的位置处的第二眼睛的视口。应当理解,在上述实施例中,可以使用射线投射、射线追踪、射线跟踪和其他技术来投射射线。
[0106] 然而,射线2504和射线2506指向没有被包含在具有用于第一眼睛的用户视点的绘制的绘制表面的绘制的内容中的位置。在一个实施例中,HMD客户端设备的视图插值模块插值像素数据项以填充由没有与绘制的绘制表面中的绘制的内容相交的射线留下的这些视觉孔。应当理解,可以使用图17所示的空间视图插值方法使用射线1604,使用图18所示的时间视图插值方法使用射线1804,以及使用图19 所示的深度剥离方法使用射线1902,来插值射线2504的视觉孔的像素数据项。在接收具有比HMD客户端设备的视口更宽的视场的绘制的绘制表面的HMD客户端设备的实施例中,可以插值与射线2506 相对应的视觉孔,如图3A、图3B和图3C所示。
[0107] 在服务器设备在绘制场景时在左眼的用户视点与右眼的用户视点之间交替的实施例中,HMD客户端设备不仅基于表示用户的第一眼睛的场景的当前视图的当前绘制的绘制而且基于表示用户的第二眼睛的场景的过去的视图的先前绘制的绘制表面来合成用于第二眼睛的视口。应当理解,由于在本实施例中服务器设备在每个绘制通过之后在眼睛之间交替,所以先前绘制的绘制表面所表示的场景的过去的视图在过去将仅在30-100ms的量级。还应当理解,服务器设备可以根据其他周期性(诸如,每两个或三个绘制通过)在左眼与右眼之间交替。
[0108] 在图23所示的示例中,服务器从第一眼睛的用户视点来绘制场景,并且将当前绘制的第一眼睛绘制表面发送到HMD客户端设备。在HMD客户端设备处,视图插值模块从当前绘制的第一眼睛绘制表面重新投影到当前的合成的第二眼睛视口。在第一重新投影之后,在当前的合成的第二眼睛视口中可能存在视觉孔,如图22中的示例中所述。这些视觉孔通过从先前绘制的第二眼睛绘制表面重新投影到当前的合成的第二眼睛视口来被填充。应当理解,在本实施例中,当前绘制的第一眼睛绘制表面和先前绘制的第二眼睛绘制表面在服务器设备处被绘制,并且不包含可能具有视觉伪影的插值或重构的数据。还应当理解,作为若干非限制性示例,绘制表面可以是很多种形状,诸如立方体图、剪切的立方体图、边缘、四面体或矩形。
[0109] 如图22所示,如图22所示由于深度差异和瞳孔间距离而导致的从当前绘制的第一眼睛绘制表面重新投影后产生的视觉孔与由于用户视点随时间的变化而导致的从先前绘制的第二眼睛绘制表面重新投影之后产生的视觉孔不相关。来自当前绘制的第一眼睛绘制表面的重新投影将倾向于在当前的合成的第二眼睛视口中引起视觉孔,其中场景中存在大的深度差异,如图22所示。在一些实施例中,服务器设备挤出每个绘制的绘制表面的深度图。在这些实施例中,场景中的深度差异可以由HMD客户端设备基于深度图来检测。应当理解,深度图可以作为深度缓冲区或用于深度图的任何其它合适的数据结构被传输到HMD客户端设备。
[0110] 回到图22,深度图中的大的深度差异的示例是正方形与壁之间的深度差异。这种深度差异与第一眼睛与第二眼睛之间的瞳孔间距离相结合导致当从当前绘制的第一眼睛绘制表面重新投影到与射线2504 的发起点相对应的当前的合成的第二眼睛视口上的位置的当前的合成的第二眼睛视口时存在视觉孔。因此,可能在具有较大深度差异的位置处出现视觉孔,并且可以基于大的深度差异的位置来有效地检测这些视觉孔。在一些实施例中,当在被重新投影的绘制表面中确定射线不与绘制的内容相交时,在重新投影过程期间记录视觉孔。
[0111] 当用户视点的变化速率高时,从先前绘制的第二眼睛绘制表面重新投影将在当前的合成的第二眼睛视口中导致视觉孔。在一些实施例中,基于从用户接收的用户输入流(例如,通过一个RTT的总的头部旋转距离)来计算用户视点的变化速率。应当理解,如果用户视点的变化速率低或为零(例如,用户最近没有输入导航输入),则先前绘制的第二眼睛绘制表面将具有与当前的合成的第二眼睛视口相同的用于第二眼睛的用户视点。因此,如果用户视点的变化速率低或为零,则从先前绘制的第二眼睛绘制表面到当前的合成的第二眼睛视口的重新投影将导致最小限度的视觉孔。
[0112] 图24示出了用户视点的变化速率高的示例。在本示例中,用户已经快速地向右移动。因此,当前用户视点远在过去的用户视点的右侧。在本示例中,先前绘制的第二眼睛绘制表面是与在HMD客户端设备上执行的客户端应用程序的视口相同大小的矩形。从先前绘制的第二眼睛绘制表面重新投影到当前的合成的第二眼睛视口将导致与包含六边形的合成的第二眼睛视口的部分相对应的视觉孔,因为,由于用户视点的高变化速率,在与包含六边形的合成的第二眼睛视口的部分相对应的先前绘制的绘制表面中没有绘制的内容。
[0113] 在从先前绘制的第二眼睛绘制表面重新投影到当前的合成的第二眼睛视口之后,在当前的合成的第二眼睛视口中仍然可能存在视觉孔。在一些实施例中,使用从先前绘制的第二眼睛绘制表面的屏幕空间颜色拾取来填充这些剩余的视觉孔。在这些实施例中,HMD客户端设备的视图插值模块可以确定作为视觉孔的当前的合成的第二眼睛视口中的位置,并且从先前绘制的第二眼睛绘制表面中的相应位置复制像素数据。
[0114] 图25示出了根据本公开的实施例的用于对用于立体视觉的当前第二眼睛视口插值的方法2500的流程图。参考以上在图1中描述和所示服务器设备14和客户端设备12的软件和硬件部件来提供方法 2500的以下描述。应当理解,方法2500也可以在其他上下文中使用其他合适的硬件和软件部件来执行。
[0115] 方法2500开始于2502,并且包括在客户端应用程序的视图插值模块处获取表示用于用户的第一眼睛的场景的当前视图的当前绘制的绘制表面和表示用于用户的第二眼睛的场景的过去的视图的先前绘制的绘制表面。应当理解,当前绘制的绘制表面和先前绘制的绘制表面可以使用比客户端设备的视口更宽的视场来绘制。此外,作为若干示例,绘制表面可以是很多种形状,自然立方体图、剪切的立方体图、边缘或四面体。还应当理解,在每个绘制通过时绘制的第一眼睛可以在用户的左眼与用户的右眼之间交替。在一个实施例中,该绘制过程可以在将绘制的绘制表面发送到执行方法2500的客户端设备的服务器设备上来完成。在另一实施例中,服务器设备可以根据方法 1400来绘制预测的场景,并且通过网络将用户的左眼或右眼的预测的视点的预测的场景的绘制的绘制表面发送到用户设备。
[0116] 接下来,视图插值模块基于当前绘制的绘制表面和先前绘制的绘制表面来合成表示用户的第二眼睛的场景的当前视图的当前第二眼睛视口。该合成在方法2500的剩余的步骤中完成。方法2500前进到 2504,并且包括从当前绘制的绘制表面重新投影到当前第二眼睛视口。
[0117] 方法2500前进到2506,并且包括检测当前第二眼睛视口中的一个或多个视觉孔。在一个实施例中,检测当前第二眼睛视口中的一个或多个视觉孔基于当前绘制的绘制表面的深度图中的检测到的深度差异,深度图在客户端应用程序的视图插值模块处获得。接下来,方法2500基于先前绘制的绘制表面来插值一个或多个视觉孔的一个或多个像素数据项。
[0118] 方法2500通过前进到2508来插值一个或多个像素数据项,并且包括从先前绘制的绘制表面重新投影到当前第二眼睛视口。方法2500 前进到2510,并且包括在从先前绘制的绘制表面重新投影之后检测当前第二眼睛视口中的一个或多个剩余的视觉孔。在一个实施例中,检测一个或多个剩余的视觉孔基于根据从用户接收的用户输入流计算的用户视点的计算的变化率。接下来,方法2500基于先前绘制的绘制表面来填充一个或多个剩余的视觉孔。
[0119] 方法2500通过前进到2512来填充一个或多个剩余的视觉孔,并且包括针对一个或多个剩余的视觉孔中的每个确定当前第二眼睛视口中的像素位置。方法2500前进到2514,并且包括从与一个或多个剩余的视觉孔中的每个的当前第二眼睛视口中的像素位置相对应的先前绘制的绘制表面中的像素位置复制像素数据。在一个实施例中,将像素数据从先前绘制的绘制表面直接复制到当前第二眼睛视口中的相应位置。
[0120] 在一些实施例中,方法2500与用于从服务器设备接收预测性绘制内容的HMD客户端设备的实施例的方法2000组合。在这些实施例中,服务器设备根据方法1400绘制内容,以在用户的左眼与右眼之间交替。HMD客户端设备接收具有用户的第一眼睛的预测的用户视点的预测的场景的当前绘制的绘制表面,并且在客户端应用程序的视图插值模块处获取具有用户的第二眼睛的先前预测的用户视点的先前预测的场景的先前绘制的绘制表面。在一些实施例中,先前绘制的绘制表面从存储器HMD客户端设备来获取。
[0121] 接下来,HMD客户端设备从用户输入设备在用户输入流中接收随后的用户导航输入。然后,基于随后的用户导航输入,确定第一眼睛的实际的用户视点和第二眼睛的实际的用户视点。然后,HMD客户端设备继续进行基于第一眼睛的预测的用户视点和第一眼睛的实际的用户视点来确定用户视点错误预测。应当理解,本实施例中的第一眼睛是服务器设备绘制到绘制表面并且被HMD客户端设备接收作为当前绘制的绘制表面的眼睛。如果存在用户视点错误预测,则HMD 客户端设备不能简单地将绘制的绘制表面投影到第一眼睛的视口,而是需要使用视图插值来从当前绘制的绘制表面为用户的第一眼睛重构实际的用户视点的第一视口。为了重构实际的用户视点的第一视口,HMD客户端设备可以使用方法2000、或方法2000中包含的步骤的组合。
[0122] 接下来,HMD客户端设备继续进行以基于当前绘制的绘制表面和先前绘制的绘制表面来针对用户的第二眼睛合成实际的用户视点的第二视口。为了合成实际的用户视点的第二视口,HMD客户端设备可以使用方法2500、或方法2500中包含的步骤的组合。应当理解,用户的第二眼睛的实际的用户视点将以瞳孔间距离被转变到第一眼睛的实际的用户视点的左侧或右侧。还应当理解,对于第二眼睛的过去的用户视点而不是对于第二眼睛的当前用户视点来预测先前绘制的绘制表面的用户的第二眼睛的先前预测的视点。然而,仍然可以使用先前绘制的绘制表面和当前绘制的绘制表面来应用方法2500。
[0123] 在重构第一眼睛的第一视口并且合成第二眼睛的第二视口之后, HMD客户端设备继续进行以在立体显示设备上显示第一视口和第二视口。应当理解,组合方法2000和方法2500的上述实施例不限于 HMD客户端设备。作为另一非限制性示例,上述实施例也可以应用于具有立体屏幕的台式计算机。
[0124] 在一些实施例中,本文中描述的方法和过程可以与一个或多个计算设备的计算系统相关联。特别地,这样的方法和过程可以被实现为计算机应用程序或服务、应用程序接口(API)、库和/或其他计算机程序产品。
[0125] 图1示意性地示出了可以实现上述方法和过程中的一个或多个的计算系统10的非限制性实施例。计算系统10以简化的形式示出。计算系统10可以采用一个或多个个人计算机、服务器计算机、平板计算机、家庭娱乐计算机、网络计算设备、游戏设备、移动计算设备、移动通信设备(例如,智能电话)和/或其他计算设备的形式。
[0126] 计算系统10包括客户端设备12上的逻辑机器18和服务器设备 14上的逻辑机器28。计算系统10还包括客户端设备12上的存储机器22和服务器设备14上的存储机器32。计算系统10可以可选地包括显示子系统70、输入子系统24和/或图1中未示出的其它部件。
[0127] 逻辑机器18和逻辑机器28包括被配置为执行指令的一个或多个物理设备。例如,逻辑机器可以被配置为执行作为一个或多个应用、服务、程序、例程、库、对象、部件、数据结构或其他逻辑构造的一部分的指令。可以实现这样的指令以执行任务,实现数据类型,变换一个或多个部件的状态,实现技术效果,或以其他方式获得期望的结果。
[0128] 逻辑机器可以包括被配置为执行软件指令的一个或多个处理器。附加地或备选地,逻辑机器可以包括被配置为执行硬件或固件指令的一个或多个硬件或固件逻辑机器。逻辑机器的处理器可以是单核或多核的,并且在其上执行的指令可以被配置为顺序、并行和/或分布式处理。逻辑机器的各个部件可选地分布在两个或更多个单独的设备之间,其可以远程地定位和/或被配置用于协处理。逻辑机器的各方面可以由以云计算配置来配置的可远程访问的联网计算设备来虚拟化和执行。
[0129] 存储机器22和存储机器32包括被配置为保持由逻辑机器可执行以实现本文中描述的方法和过程的指令的一个或多个物理设备。当实现这种方法和过程时,可以变换存储机器22和存储机器32的状态,例如,以保持不同的数据。
[0130] 存储机器22和存储机器32可以包括可移除和/或内置设备。存储机器22和存储机器32可以包括光学存储器(例如,CD、DVD、 HD-DVD、蓝光盘等)、半导体存储器(例如,RAM、EPROM、EEPROM 等)和/或磁存储器(例如,硬盘驱动器、软盘驱动器、磁带驱动器、 MRAM等)等。存储机器22和存储机器32可以包括易失性、非易失性、动态、静态、读/写、只读、随机存取、顺序存取、位置可寻址、文件可寻址和/或内容可寻址设备。
[0131] 应当理解,存储机器22和存储机器32包括一个或多个物理设备。然而,本文中描述的指令的各方面可以由没有被物理设备在有限的持续时间内保持的通信介质(例如,电磁信号、光信号等)来传播。
[0132] 逻辑机器18和逻辑机器28以及存储机器22和存储机器32的各方面可以一起集成为一个或多个硬件逻辑部件。这样的硬件逻辑部件可以包括现场可编程门阵列(FPGA)、程序和应用特定的集成电路 (PASIC/ASIC)、程序和应用特定的标准产品(PSSP/ASSP)、系统级芯片(SOC)和复杂可编程逻辑器件(CPLD)。
[0133] 术语“模块”、“程序”和“引擎”可以用于描述被实现为执行特定功能的计算系统10的方面。在一些情况下,模块、程序或引擎可以经由执行由存储机器22和存储机器32保持的指令的逻辑机器18 和逻辑机器28来实例化。应当理解,不同的模块、程序和/或引擎可以从相同的应用、服务、代码块、对象、库、例程、API、函数等来实例化。同样,相同的模块、程序和/或引擎可以由不同的应用、服务、代码块、对象、例程、API、函数等来实例化。术语“模块”、“程序”和“引擎”可以包括单个或多组可执行文件、数据文件、库、驱动程序、脚本、数据库记录等。
[0134] 应当理解,本文中使用的“服务”是跨多个用户会话可执行的应用程序。服务可以可用于一个或多个系统部件、程序和/或其他服务。在一些实现中,服务可以在一个或多个服务器计算设备上运行。
[0135] 当被包括时,显示子系统70可以用于呈现由存储机器22和存储机器32保持的数据的视觉表示。该视觉表示可以采用图形用户界面 (GUI)的形式。由于本文中描述的方法和过程改变了由存储机器保持的数据,并且因此变换了存储机器的状态,所以显示子系统70的状态同样可以被变换以便在视觉上表示底层数据的变化。显示子系统 70可以包括实际上利用任何类型的技术的一个或多个显示设备。这样的显示设备可以与共享外壳中的逻辑机器18和逻辑机器28和/或存储机器22和存储机器32组合,或者这样的显示设备可以是外围显示设备。
[0136] 当被包括时,输入子系统24可以包括或与一个或多个用户输入设备(诸如键盘、鼠标、触摸屏或游戏控制器)接口。在一些实施例中,输入子系统可以包括或与所选择的自然用户输入(NUI)部件接口。这种部件可以是集成的或外围的,并且输入动作的转导和/或处理可以在板上或板外处理。示例NUI部件可以包括用于语音和/或声音识别的麦克风;用于机器视觉和/或手势识别的红外、彩色、立体和/ 或深度相机;用于运动检测和/或意图识别的头部跟踪器、眼动仪、加速度计和/或陀螺仪;以及用于评估脑活动的电场感测部件。
[0137] 应当理解,本文中描述的配置和/或方法本质上是示例性的,并且这些具体实施例或示例不应当在限制意义上来理解,因为很多变化是可能的。本文中描述的特定例程或方法可以表示任何数目的处理策略中的一个或多个。因此,所示出和/或描述的各种动作可以以示出和/ 或描述的顺序,以其他顺序,并行地执行,或被省略。同样,上述处理的顺序可以改变。
[0138] 本公开的主题包括本文中公开的各种过程、系统和配置以及其他特征、功能、动作和/或属性的所有新颖和非显而易见的组合和子组合、以及其任何和所有等同物。
[0139] 权利要求支持部分
[0140] 本公开的主题在以下段落中进一步描述。一个方面是一种用于使用交织来合成第二眼睛视口的客户端设备,其包括:接收用户输入流的用户输入设备、立体显示设备、处理器、以及保持用于客户端应用程序的指令的存储设备,这些指令由处理器可执行以在客户端应用程序的视图插值模块处获取表示用于用户的第一眼睛的场景的当前视图的当前绘制的绘制表面以及表示用于用户的第二眼睛的场景的过去的视图的先前绘制的绘制表面,基于当前绘制的绘制表面和先前绘制的绘制表面来合成表示用于用户的所述第二眼睛的场景的当前视图的当前第二眼睛视口,并且在立体显示设备上显示合成的当前第二眼睛视口。客户端设备可以附加地或备选地包括其中第一眼睛在左眼与右眼之间交替。客户端设备可以附加地或备选地包括其中用以基于当前绘制的绘制表面和先前绘制的绘制表面来合成当前第二眼睛视口的指令包括用以进行以下操作的指令:从当前绘制的绘制表面向当前第二眼睛视口重新投影,检测当前第二眼睛视口中的一个或多个视觉孔,并且基于先前绘制的绘制表面来插值用于一个或多个视觉孔的一个或多个像素数据项。客户端设备可以附加地或备选地包括用以进行以下操作的指令:在客户端应用程序的视图插值模块处获取用于当前绘制的绘制表面的深度图,检测用于当前绘制的绘制表面的深度图中的深度差异,以及其中客户端应用程序被配置为基于所检测的深度差异来检测一个或多个视觉孔。客户端设备可以附加地或备选地包括其中用以基于先前绘制的绘制表面来插值用于一个或多个视觉孔的一个或多个像素数据项的指令包括用以进行以下操作的指令:从先前绘制的绘制表面向当前第二眼睛视口重新投影。客户端设备可以附加地或备选地包括其中用以基于先前绘制的绘制表面来填充一个或多个视觉孔的指令还包括用以进行以下操作的指令:在从先前绘制的绘制表面的重新投影之后,检测当前第二眼睛视口中的一个或多个剩余的视觉孔,并且基于先前绘制的绘制表面来填充一个或多个剩余的视觉孔。客户端设备可以附加地或备选地包括保持用以进行以下操作的另外的指令:基于用户输入流来计算用户视点的变化速率,并且其中客户端应用程序被配置为基于所计算的用户视点的变化速率来检测一个或多个剩余的视觉孔。客户端设备可以附加地或备选地包括其中用以填充一个或多个剩余的视觉孔的指令包括用以进行以下操作的指令:对于一个或多个剩余的视觉孔中的每个剩余的视觉孔,确定当前第二眼睛视口中的像素位置,以及从与一个或多个剩余的视觉孔中的每个剩余的视觉孔的当前第二眼睛视口中的像素位置相对应的先前绘制的绘制表面中的像素位置来复制像素数据。客户端设备可以附加地或备选地包括其中当前绘制的绘制表面和先前绘制的绘制表面具有比客户端应用程序的视口更宽的视场。
[0141] 另一方面提供了一种用于使用交织来合成第二眼睛视口的方法,其包括在执行客户端应用程序的客户端设备处:在客户端应用程序的视图插值模块处获取表示用于用户的第一眼睛的场景的当前视图的当前绘制的绘制表面以及表示用于用户的第二眼睛的场景的过去的视图的先前绘制的绘制表面,并且基于当前绘制的绘制表面和先前绘制的绘制表面来合成表示用于用户的所述第二眼睛的场景的当前视图的当前第二眼睛视口。该方法可以另外地或备选地包括其中第一眼睛在左眼与右眼之间交替。该方法可以另外地或备选地包括其中基于当前绘制的绘制表面和先前绘制的绘制表面来合成当前第二眼睛视口还包括:从当前绘制的绘制表面向当前第二眼睛视口重新投影,检测当前第二眼睛视口中的一个或多个视觉孔,以及基于先前绘制的绘制表面来插值用于一个或多个视觉孔的一个或多个像素数据项。该方法可以另外地或备选地包括在客户端应用程序的视图插值模块处获取用于当前绘制的绘制表面的深度图,检测用于当前绘制的绘制表面的深度图中的深度差异,并且其中客户端应用程序被配置为基于所检测的深度差异来检测一个或多个视觉孔。该方法可以另外地或备选地包括其中基于先前绘制的绘制表面来插值用于一个或多个视觉孔的一个或多个像素数据项包括:从先前绘制的绘制表面向当前第二眼睛视口重新投影。该方法可以另外地或备选地包括其中用以基于先前绘制的绘制表面来填充一个或多个视觉孔的指令还包括:在从先前绘制的绘制表面的重新投影之后,检测当前第二眼睛视口中的一个或多个剩余的视觉孔,并且基于先前绘制的绘制表面来填充一个或多个剩余的视觉孔。该方法可以另外地或备选地包括基于用户输入流来计算用户视点的变化速率,并且其中客户端应用程序被配置为基于所计算的用户视点的变化速率来检测一个或多个剩余的视觉孔。该方法可以另外地或可选地包括其中用以基于先前绘制的绘制表面来填充一个或多个剩余的视觉孔包括:对于一个或多个剩余的视觉孔中的每个剩余的视觉孔,确定当前第二眼睛视口中的像素位置,以及从与一个或多个剩余的视觉孔中的每个剩余的视觉孔的当前第二眼睛视口中的像素位置相对应的先前绘制的绘制表面中的像素位置来复制像素数据。该方法可以附加地或备选地包括其中当前绘制的绘制表面和先前绘制的绘制表面具有比客户端应用程序的视口更宽的视场。
[0142] 另一方面提供了一种用于使用交织来合成第二眼睛视口的客户端设备,其包括接收用户输入流的用户输入设备、立体显示设备、处理器、和保持用于客户端应用程序的指令的存储设备,这些指令由处理器执行可执行以进行以下操作:通过网络从服务器设备接收具有用户的第一眼睛的预测的用户视点的预测的场景的当前绘制的绘制表面,在客户端应用程序的视图插值模块处获取具有用户的第二眼睛的预先预测的用户视点的先前预测的场景的先前绘制的绘制表面,从用户输入设备在用户输入流中接收随后的用户导航输入,基于随后的用户导航输入来确定第一眼睛的实际的用户视点和第二眼睛的实际的用户视点,基于第一眼睛的预测的用户视点和第一眼睛的实际的用户视点来确定用户视点错误预测,从当前绘制的绘制表面重构用户的第一眼睛的实际的用户视点的第一视口;基于当前绘制的绘制表面和先前绘制的绘制表面来合成用户的第二眼睛的实际的用户视点的第二视口,并且在立体显示设备上显示第一视口和第二视口。客户端设备可以附加地或备选地包括其中第一眼睛的视图在左眼的视图与右眼的视图之间交替。