欢迎光临小豌豆知识网!
当前位置:首页 > 生活技术 > 运动娱乐> 动态流式传输视频游戏客户端独创技术105950字

动态流式传输视频游戏客户端

2021-03-03 09:08:13

动态流式传输视频游戏客户端

  背景技术

  视频游戏流式传输技术的可用性和可行性近年来已经增加。然而, 试图将视频游戏流式传输到客户端仍然是困难的并且计算昂贵的。随着 视频游戏继续变得更大和更复杂,此过程只会变得更困难。执行这些游 戏所要求的处理资源可能是显著的。通过低延时连接流式传输视频游戏 的带宽要求也很难满足。此外,由于游戏的大小大,因此在已经购买了 游戏之后可能花费用户的大量时间才能开始玩游戏。

  发明内容

  本公开内容的系统、方法和设备各自具有若干创新方面,其中没 有一个方面单独担负本文所公开的所有期望属性。

  一个实施方案公开了一种计算机实施的方法,用于将游戏应用程 序动态地流式传输到用户计算系统:通过包括配置有计算机可执行指令 的至少一个硬件处理器的服务器计算系统,接收启动游戏应用程序的流 式传输会话的请求,其中所述请求是从不具有本地安装的所述游戏应用 程序的用户计算系统上的瘦客户端(thin client)接收的;实例化所述游 戏应用程序的第一客户端实例,其中所述游戏应用程序包括:第一模拟 引擎,所述第一模拟引擎被配置为执行游戏逻辑,所述游戏逻辑被配置 为控制所述游戏应用程序内的虚拟环境的模拟;以及第一呈现引擎,所 述第一呈现引擎被配置为基于由所述第一模拟引擎生成的状态数据来 渲染帧,以用于流式传输到所述用户计算系统;确定用户计算系统的硬 件计算资源;启动所述游戏应用程序到所述用户计算系统的第一阶段流 式传输;在所述游戏应用程序的第一阶段流式传输期间,从所述用户计 算系统接收用户输入;响应于所述用户输入通过所述第一模拟引擎生成 状态数据;至少部分地基于所述状态数据将所述游戏应用程序的帧渲染 为视频;将所述视频流式传输到所述用户计算设备,以用于在所述用户 计算系统上的视频播放器内显示;基于确定所述用户计算系统的硬件资 源满足第二阶段流式传输的要求,将资产转移到所述用户计算系统,以 在所述用户计算系统上执行第二呈现引擎;基于确定所述第二呈现引擎 正在所述用户计算系统上执行,在所述游戏应用程序内将所述第一呈现 引擎的执行转移到所述第二呈现引擎;停止所述第一呈现引擎的执行; 在所述游戏应用程序的第二阶段流式传输期间,从所述用户计算系统接 收用户输入;响应于所述用户输入通过所述第一模拟引擎生成第二阶段 状态数据;将通过所述第一模拟引擎生成的第二阶段状态数据转移到所 述用户计算系统,以用于由所述第二呈现引擎使用,其中所述第二呈现 引擎被配置为至少部分地基于通过所述第一模拟引擎生成的第二阶段 状态数据来渲染帧,以用于显示所述游戏应用程序的执行。

  所述系统的多个实施方案可以包括以下特征的一个、全部或任何 组合。在一些实施方案中,所述方法包括:基于确定所述用户计算系统 的硬件资源满足第三阶段流式传输的要求,将资产转移到所述用户计算 系统,以在所述用户计算系统上执行第二模拟引擎。在一些实施方案中, 所述方法包括:基于确定所述第二模拟引擎正在所述用户计算系统上执 行,在所述游戏应用程序内将所述第一模拟引擎的执行转移到所述第二 模拟引擎。在一些实施方案中,所述方法包括:停止所述第一模拟引擎 的执行,并且将所述游戏应用程序的完全控制转移到所述用户计算系 统。在一些实施方案中,在所述游戏应用程序的第三阶段流式传输期间, 所述第二模拟引擎被配置为使用所述用户计算系统的硬件资源来执行, 并且所述第二呈现引擎被配置为基于通过所述第二模拟引擎生成的状 态数据使用所述用户计算系统的硬件资源来渲染帧。在一些实施方案 中,将所述第二阶段状态数据写入网络状态流队列,并且将所述第二阶 段状态数据编码,以用于通过网络转移到所述用户计算系统上的状态 流。在一些实施方案中,所述客户端实例上的模拟引擎独立于所述用户计算系统中的呈现引擎执行,其中所述呈现引擎独立于生成所述第二阶 段状态数据的模拟引擎来生成并且渲染帧。在一些实施方案中,所述瘦 客户端是网页浏览器。在一些实施方案中,在第二阶段期间,所述呈现 引擎被配置为渲染所述游戏应用程序的虚拟环境的部分,而不从所述模 拟引擎请求附加的阶段状态数据。在一些实施方案中,所述用户计算系统是虚拟现实系统。

  另一个实施方案公开了一种服务器计算系统,用于将游戏应用程 序动态地流式传输到用户计算系统:通过配置有计算机可执行指令的一 个或多个硬件处理器,所述计算机可执行指令将所述服务器计算系统配 置为:接收启动游戏应用程序的流式传输会话的请求,其中所述请求是 从不具有本地安装的所述游戏应用程序的用户计算系统上的瘦客户端 接收的;实例化所述游戏应用程序的第一客户端实例,其中所述游戏应 用程序包括:第一模拟引擎,所述第一模拟引擎被配置为执行游戏逻辑, 所述游戏逻辑被配置为控制所述游戏应用程序内的虚拟环境的模拟;以 及第一呈现引擎,所述第一呈现引擎被配置为基于由所述第一模拟引擎 生成的状态数据来渲染帧,以用于流式传输到所述用户计算系统;确定 用户计算系统的硬件计算资源;启动所述游戏应用程序到所述用户计算 系统的第一阶段流式传输;在所述游戏应用程序的第一阶段流式传输期 间,从所述用户计算系统接收用户输入;响应于所述用户输入通过所述 第一模拟引擎生成状态数据;至少部分地基于所述状态数据将所述游戏 应用程序的帧渲染为视频;将所述视频流式传输到所述用户计算设备, 以用于在所述用户计算系统上的视频播放器内显示;基于确定所述用户 计算系统的硬件资源满足第二阶段流式传输的要求,将资产转移到所述 用户计算系统,以在所述用户计算系统上执行第二呈现引擎;基于确定 所述第二呈现引擎正在所述用户计算系统上执行,在所述游戏应用程序 内将所述第一呈现引擎的执行转移到所述第二呈现引擎;停止所述第一 呈现引擎的执行;在所述游戏应用程序的第二阶段流式传输期间,从所 述用户计算系统接收用户输入;响应于所述用户输入通过所述第一模拟 引擎生成第二阶段状态数据;将通过所述第一模拟引擎生成的第二阶段 状态数据转移到所述用户计算系统,以用于由所述第二呈现引擎使用, 其中所述第二呈现引擎被配置为至少部分地基于通过所述第一模拟引 擎生成的第二阶段状态数据来渲染帧,以用于显示所述游戏应用程序的 执行。

  所述系统的多个实施方案可以包括以下特征中的一个、全部或任 何组合。在一些实施方案中,所述一个或多个处理器被配置有计算机可 执行指令,所述计算机可执行指令还将所述服务器计算系统配置为:基 于确定所述用户计算系统的硬件资源满足第三阶段流式传输的要求,将 资产转移到所述用户计算系统,以在所述用户计算系统上执行第二模拟 引擎。在一些实施方案中,所述一个或多个处理器被配置有计算机可执 行指令,所述计算机可执行指令还将所述服务器计算系统配置为:基于 确定所述第二模拟引擎正在所述用户计算系统上执行,在所述游戏应用 程序内将所述第一模拟引擎的执行转移到所述第二模拟引擎。在一些实 施方案中,所述一个或多个处理器被配置有计算机可执行指令,所述计 算机可执行指令还将所述服务器计算系统配置为:停止所述第一模拟引 擎的执行,并且将所述游戏应用程序的完全控制转移到所述用户计算系 统。在一些实施方案中,所述一个或多个处理器被配置有计算机可执行 指令,所述计算机可执行指令还将所述服务器计算系统配置为:其中在所 述游戏应用程序的第三阶段流式传输期间,所述第二模拟引擎被配置为 使用所述用户计算系统的硬件资源来执行,并且所述第二呈现引擎被配 置为基于通过所述第二模拟引擎生成的状态数据使用所述用户计算系 统的硬件资源来渲染帧。在一些实施方案,所述一个或多个处理器被配 置有计算机可执行指令,所述计算机可执行指令还将所述服务器计算系 统配置为:将所述第二阶段状态数据写入网络状态流队列,并且将所述 第二阶段状态数据编码,以用于通过网络转移到所述用户计算系统上的 状态流。在一些实施方案中,所述客户端实例上的模拟引擎独立于所述 用户计算系统中的呈现引擎执行,其中所述呈现引擎独立于生成所述第 二阶段状态数据的模拟引擎来生成并且渲染帧。在一些实施方案中,所 述瘦客户端是网页浏览器。在一些实施方案中,在第二阶段期间,所述 呈现引擎被配置为渲染所述游戏应用程序的虚拟环境的部分,而不从所 述模拟引擎请求附加的阶段状态数据。在一些实施方案中,所述用户计 算系统是虚拟现实系统。

  尽管本文公开了某些实施方案和实施例,但是发明的主题超出具 体公开的实施方案中的实施例,延伸到其他替代实施方案和/或用途,以 及其改型和等同物。

  附图说明

  在整个附图中,重复使用附图标记来指示提到的元件之间的对应 关系。提供附图是为了例示本文所描述的主题的实施方案,而不是限制 其范围。

  图1例示了可以实施动态流式传输视频游戏客户端的一个或多个 实施方案的计算环境的一个实施方案。

  图2A-图2F提供了例示了状态流视频游戏引擎的功能的块图的实 施方案。

  图2G例示了配置为实施重放功能的状态流游戏引擎的块图的一 个实施方案。

  图3A-图3B例示了用于使用状态流游戏引擎执行游戏应用程序的 过程的流程图的一个实施方案。

  图4例示了动态流式传输视频游戏客户端的一个实施方式的块图 的一个实施方案。

  图5A-图5C例示了用于使用动态流式传输视频游戏客户端执行游 戏应用程序的过程的流程图的一个实施方案。

  图6例示了计算设备的一个实施方案。

  具体实施方式

  概述

  流式传输视频游戏的困难之一是在远程服务器上执行视频游戏可 能是昂贵的并且计算密集的过程。流式传输系统要求远程服务器执行视 频游戏的模拟和呈现的所有处理,然后视频游戏的呈现通过网络连接作 为视频流提供给客户端计算设备。

  玩家遇到的另一个问题是将视频游戏下载并且安装在他们的计算 系统上。由于视频游戏的大小,安装过程可能是相当耗时的。游戏的大 小在一些实例中可以是通过网络下载超过100GB的数据,这可能花费 许多小时才能完成。如果用户有兴趣与朋友一起玩新游戏或具有有限量 的时间来玩游戏,则此下载过程可能是相当令人失望的。

  本申请的实施方案通过与动态视频游戏客户端一起使用分阶段流 式传输过程来提供这些问题的解决方案。该动态视频游戏客户端可以结 合游戏应用程序流式传输服务利用状态流游戏引擎,以为用户提供在大 量各种的设备上快速开始玩游戏的能力。该状态流游戏引擎可以将视频 游戏的模拟与视频游戏的渲染解耦。视频游戏的模拟通过模拟引擎处 理。视频游戏的渲染通过呈现引擎处理。由模拟引擎生成的数据通过使 用状态流传达到呈现引擎。动态流式传输过程包括不同的阶段以将游戏 应用程序110快速提供给用户。

  视频游戏环境的概述

  图1例示了用于实施动态视频游戏客户端的计算环境100的一个 实施方案。环境100包括网络101、与用户A和用户B相关联的用户计 算系统102以及交互式计算系统130。为了简化讨论并且不限制本公开 内容,图1仅例示了示例性用户计算系统102和交互式计算系统140, 尽管可以使用多个系统。

  用户计算系统102可以经由网络101与交互式计算系统120通信。 尽管仅例示了一个网络101,但是可以存在多个不同的网络和/或分布式 网络112。网络101可以包括任何类型的通信网络。例如,网络101可 以包括广域网(WAN)、局域网(LAN)、蜂窝网络、自组织(adhoc) 网络、卫星网络、有线网络、无线网络等中的一个或多个。在一些实施 方案中,网络101可以包括互联网。

  A.用户计算系统

  图1例示了与用户A和用户B相关联的示例性用户计算系统102。 用户计算系统102可以包括用于通过通信网络101建立通信的硬件部件 和软件部件。例如,用户系统102可以配备有便于经由一个或多个网络 (例如,互联网或内联网)的通信的联网装备和网络软件应用程序(例 如,网页浏览器)。用户计算系统102可以具有不同的本地计算资源, 诸如中央处理单元(CPU)和架构、存储器(memory)、大容量存储装 置(storage)、图形处理单元(GPU)、通信网络可用性和带宽等。此 外,用户计算系统102可以包括任何类型的计算系统。例如,用户计算 系统102可以包括任何类型的计算设备,诸如台式计算机、膝上型计算 机、视频游戏平台、电视机机顶盒、电视机(例如,互联网TV)、网 络使能售货亭(network-enabled kiosk)、汽车控制台设备计算化器具、 可穿戴设备(例如,具有计算功能的智能手表和眼镜)和无线移动设备 (例如,智能电话、PDA、平板计算机等),仅举几个例子。用户计算 系统102的特定的硬件部件和软件部件通常被称为计算资源104。在一 些实施方案中,用户计算系统102可以包括下文关于图5所描述的实施 方案中的一个或多个。

  与用户A和用户B相关联的用户计算系统102提供了用于玩游戏 应用程序110的用户计算系统的不同配置的实施例。用户A系统被例示 为包括游戏应用程序客户端112(也被称为动态游戏应用程序客户端或 分阶段应用程序客户端)。用户B系统例示了游戏应用程序110的传统 安装,其中它被本地安装在用户计算系统上。所述系统的配置不意味着 限制,并且用户B系统可以包括游戏应用程序客户端112,并且如本文 所描述的,用户A系统可以分阶段安装游戏应用程序110,直到它被本 地安装在用户的系统(如关于用户B所例示的)上。用户A计算系统可 以未被配置为在该系统上本地执行游戏应用程序110。例如,用户A计 算系统可以不具有能够执行游戏应用程序的硬件计算资源和/或软件计 算资源。

  用户计算系统102可以包括虚拟现实平台。虚拟现实平台可以指 的是允许游戏的用户与虚拟空间交互如同用户与真实世界交互一样的 平台。虚拟现实平台可以提供模拟用户在虚拟空间中的存在的一个或多 个感官体验。通过虚拟现实平台提供的感官体验可以包括基于视觉、触 觉、听觉、嗅觉的体验和/或其他感官体验中的一个或多个。作为非限制 性实施例,虚拟现实平台可以包括虚拟现实头戴式显示器(virtual reality headsetdisplay)、运动控制器、触觉发生器和/或其他虚拟现实平台中的 一个或多个。

  在一些实施方案中,虚拟现实平台可以包括非虚拟现实平台中的 一个或多个。例如,虚拟现实平台可以包括虚拟现实头戴式显示器和膝 上型计算机设备。作为另一个实施例,虚拟现实平台可以包括被配置为 充当头戴式显示设备的移动设备。设想了用以起虚拟现实平台的作用的 非虚拟现实平台的其他组合和配置。

  虚拟现实平台可以以模拟用户的在在线游戏内的沉浸感的方式来 呈现在线游戏的视图。与当经由非虚拟现实平台玩在线游戏时相比,当 经由虚拟现实平台玩在线游戏时,在线游戏可以具有更高的交互潜力。 例如,虚拟现实平台可以能够支持附加的和/或增加的运动输入、视图、 可见性、反馈和/或用户可以与在线游戏进行的其他交互。

  1.游戏应用程序

  用户计算系统102可以基于至少部分地存储在应用程序数据存储 器106中的软件代码来执行游戏应用程序110。游戏应用程序110也可 以被称为视频游戏、游戏、游戏代码和/或游戏程序。游戏应用程序110 应被理解为包括计算设备102可以使用以将游戏提供给用户玩的软件代 码。游戏应用程序110可以包括将待执行的处理器指令通知给计算设备102的软件代码,但是也可以包括在玩游戏中使用的数据,诸如与游戏 模拟、渲染、动画有关的数据和其他游戏数据。

  在所例示的实施方案中,用户计算系统102能够执行机器可读指 令,所述机器可读指令被配置为执行存储在用户计算系统上的数据存储 器(例如,应用程序数据存储器106)上的游戏应用程序110。游戏应 用程序110,当被执行时,包括状态流游戏引擎120、游戏数据114和 游戏状态信息116。游戏应用程序,当被执行时,被配置为生成供用户 与游戏应用程序110交互的虚拟环境。

  在一些实施方案中,用户计算系统102可以被配置为使用客户端/ 服务器架构执行在分布式环境中存储和/或执行的游戏应用程序110。例 如,用户计算系统102可以执行游戏应用程序110的一部分,并且交互 式计算系统130或交互式计算系统130的应用程序主机系统132可以执 行游戏应用程序110的另一部分。例如,游戏应用程序可以是大型多玩家在线角色扮演游戏(MMORPG),该游戏包括通过用户计算系统102执 行的客户端部分和通过一个或多个应用程序主机系统132执行的服务器 部分。游戏应用程序110可以在用户计算系统102上执行,或在分布式 应用程序上执行,该分布式应用程序包括在用户计算系统102上执行的 一部分和在应用程序主机系统122中的至少一个上执行的一部分。在一 些实施方案中,游戏应用程序110可以完全在交互式计算系统130上执 行,并且交互式计算系统130可以通过网络101将游戏应用程序110的 游戏设置流式传输到用户计算系统102。

  i.状态流游戏引擎

  在运行期间,状态流游戏引擎120执行游戏逻辑、控制游戏设置 的模拟的执行以及游戏应用程序110内的渲染。状态流游戏引擎120可 以包括模拟引擎122和呈现引擎124(如图2A和图2B中所例示的)。 模拟引擎122可以执行游戏逻辑并且控制游戏设置模拟的执行。呈现引 擎124可以控制游戏设置帧的渲染的执行以及帧的呈现的输出。

  模拟引擎122可以读入游戏规则并且基于从一个或多个用户接收 的输入来生成游戏状态。模拟引擎122可以控制游戏应用程序内的个体 对象(诸如虚拟部件、虚拟效果和/或虚拟角色)的执行。模拟引擎122 可以管理和确定角色移动、角色状态、碰撞检测,可以基于碰撞得出角 色所期望的运动。模拟引擎122接收用户输入并且确定角色事件,诸如动作、碰撞、奔跑、投掷、攻击和适合于游戏的其他事件。角色事件可 以通过角色移动规则来控制,所述角色移动规则确定角色响应于事件应 作出的适当运动。模拟引擎122可以包括可以确定角色的新姿势的物理 引擎。物理引擎可以将以下项作为其输入:各种角色的骨架模型、环境 设置、角色状态诸如当前姿势(例如,被表达为位置、关节角度或其他 规格的身体部位的位置)以及通过角色移动模块提供的身体部位和运动 的速度(线速度和/或角速度),它们可以呈一些或全部身体部位的力/ 转矩矢量集合的形式。根据此信息,物理引擎使用物理规则生成角色的 新姿势,并且这些新姿势可以被用来更新角色状态。模拟引擎122根据 定义的游戏规则提供用户输入,以控制游戏应用程序的各个方面。游戏 规则的实施例包括得分规则、可能的输入、动作/事件、响应于输入的移 动等。其他部件可以控制接受什么输入以及游戏如何进行以及游戏设置 的其他方面。

  模拟引擎122可以输出图形状态数据,所述图形状态数据由呈现 引擎124使用以在游戏应用程序内生成并且渲染帧。每个虚拟对象可以 被配置为通过模拟引擎122处理的状态流过程。每个状态流过程可以生 成用于呈现引擎124的图形状态数据。例如,状态流过程可以包括各种 虚拟对象,诸如发射器、灯、模型、封堵器(occluder)、地形、视觉 环境以及与游戏应用程序一起影响游戏的状态的其他虚拟对象。本文进 一步详细描述了模拟引擎122的执行。

  呈现引擎124可以在游戏应用程序内使用图形状态数据生成并且 渲染帧以便输出到显示器。呈现引擎124可以组合虚拟对象,诸如虚拟 角色、动画对象、非动画对象、背景对象、照明、反射等,以生成用于 显示的完整场景和新帧。呈现引擎124在渲染过程期间考虑了表面、颜 色纹理以及其他参数。呈现引擎124可以将虚拟对象(例如,虚拟环境 中的照明和虚拟角色图像与非动画对象和背景对象)组合以生成并且渲 染帧。本文进一步详细描述了呈现引擎124的执行。

  参考2019年3月29日提交的、且标题为“State Stream Game Engine”的第16/369,514号专利申请进一步描述了状态流游戏引擎,所 述专利申请的全部内容通过引用纳入本文。

  ii.游戏数据

  游戏数据114可以包括游戏规则,预先记录的运动捕捉姿势/路径、 环境设置、环境对象、约束条件、骨架模型、路线信息和/或其他游戏应 用程序信息。游戏数据114的至少一部分可以存储在应用程序数据存储 器106中。在一些实施方案中,游戏数据114的一部分可以被远程地接 收和/或存储,诸如在数据存储器134中,在这样的实施方案中,可以在 游戏应用程序的运行时间期间接收游戏数据。

  iii.游戏状态数据

  在运行时间期间,游戏应用程序110可以存储游戏状态数据116, 所述游戏状态数据可以包括游戏状态、角色状态、环境状态、场景对象 存储、路线信息和/或与游戏应用程序110的运行时间状态相关联的其他 信息。例如,游戏状态数据116可以识别游戏应用程序110在特定时间 点的状态,诸如角色位置、角色定向、角色动作、游戏等级属性以及对 游戏应用程序的状态有贡献的其他信息。游戏状态数据116可以包括模 拟状态数据和图形状态数据。模拟状态数据包括由模拟引擎122使用以 执行游戏应用程序的模拟的游戏状态数据。图形状态数据包括基于模拟 状态数据生成的并且由呈现引擎124使用以生成并且渲染帧以便输出诸 如输出到用户计算系统102的显示器的游戏状态数据。图形状态数据可 以通过状态流过程生成并且被包括在SSDP中。

  2.动态游戏应用程序客户端

  动态游戏应用程序客户端112(也被称为分阶段游戏应用程序客户 端、动态客户端或游戏应用程序客户端)可以被配置为与游戏应用程序 流式传输服务136通信,以由用户在用户计算系统上玩一个或多个游戏 应用程序(诸如游戏应用程序110)。游戏应用程序流式传输系统136 使用游戏应用程序流式传输服务136的计算资源来在客户端实例140中执行游戏应用程序110。游戏应用程序客户端112可以被配置为与游戏 应用程序流式传输服务136通信,以在用户计算系统102上输出游戏应 用程序110的执行。游戏应用程序客户端112为用户提供界面,以提供 用户输入来控制游戏应用程序的运行,好像游戏应用程序在用户计算系 统102上本地被执行一样。游戏应用程序客户端112可以向用户提供界 面,以选择通过游戏应用程序流式传输服务136可得的游戏应用程序 110。

  动态游戏应用程序客户端112可以动态地转变到不同的分阶段配 置,以实现适用于游戏应用程序110和用户计算系统102的客户端配置。 动态客户端112在适于游戏应用程序110的要求和用户计算系统102的 计算资源的要求的各种运行阶段之间转变。例如,动态客户端112可以 确定用户计算系统102的类型和用户计算系统102可用的计算资源,以 确定用户计算系统102是否能够使用用户计算系统102的计算资源来执 行游戏应用程序110的呈现(例如,游戏应用程序110的渲染)和/或模 拟。该客户端可以从使用从游戏应用程序流式传输系统136流式传输游 戏应用程序110的视频的基于视频播放器的界面的客户端(其中在游戏 应用程序流式传输系统136上执行模拟和呈现)动态地转变到本地客户 端(其中在用户计算系统102上本地地执行模拟和呈现,诸如由用户B 计算系统所例示的)。在一些实施方案中,动态客户端112可以在后台 在多个阶段之间动态地转变,而不中断用户的游戏设置会话。在一些实 施方案中,转变过程可以对用户不透明,并且可以被自动地执行,而没 有来自用户的进一步交互。

  B.交互式计算系统

  交互式计算系统130可以包括一个或多个应用程序主机系统132 和账户数据存储器134。交互式计算系统130可以包括被配置为执行游 戏应用程序104和/或主机应用程序106的一部分的一个或多个计算系 统。在一些实施方案中,一个或多个应用程序主机系统122可以包括可 以托管和/或执行游戏应用程序104和/或主机应用程序106的一个或多 个实例的一部分的一个或多个计算设备,诸如服务器和数据库。在某些 实施方案中,代替执行游戏应用程序104和/或主机应用程序106的一部 分或除了执行游戏应用程序104和/或主机应用程序106的一部分之外, 应用程序主机系统122可以执行另一个应用程序,所述另一个应用程序 可以在应用程序104的一个实例的执行期间补充应用程序104和/或与应 用程序104交互。

  1.应用程序主机系统

  交互式计算系统130可以使得多个用户或计算系统能够访问通过 交互式计算系统130执行或托管的游戏应用程序104和/或主机应用程序 106的一部分。在一些实施方案中,结合交互式计算系统130的应用程 序主机系统132执行游戏应用程序104的一部分。应用程序主机系统134 可以具有一个或多个游戏服务器135,所述一个或多个游戏服务器被配 置为托管在线视频游戏。例如,应用程序主机系统可以具有一个或多个 游戏服务器135,所述一个或多个游戏服务器被配置为托管实例化虚拟 环境(例如,第一人称射击多玩家竞赛)或持续虚拟环境(例如,多玩 家在线角色扮演游戏)。虚拟环境可以使得一个或多个用户能够以同步 方式和/或异步方式与环境交互以及彼此交互。在一些情况下,可以通过 一个或多个游戏服务器135创建或托管持续虚拟环境的多个实例。一组 用户可以被分配给虚拟环境的一个实例或可以访问虚拟环境的一个实 例,而另一组用户可以被分配给虚拟环境的另一个实例或可以访问虚拟 环境的另一个实例。在一些实施方案中,主机应用程序系统132可以执 行托管系统(hosting system),以用于执行游戏环境的各个方面。例如, 在一个实施方案中,游戏应用程序110可以是竞争性游戏,诸如第一人 称射击游戏或体育游戏,并且主机应用程序系统132可以提供用于托管 多玩家游戏实例的专用托管服务(hosting service)(诸如,通过游戏服 务器135),或可以便于由用户计算设备托管的游戏实例的创建。在一 些实施方案中,主机应用程序系统132可以提供供用户彼此虚拟地交互的大厅或其他环境。这样的环境可以包括用于在玩家之间进行交易的环 境,诸如拍卖行或用于便于交易的环境类型。

  2.账户数据存储器

  交互式计算系统130可以包括一个或多个账户数据存储器134,所 述一个或多个账户数据存储器被配置为存储与通过交互式计算系统130 和/或应用程序主机系统132托管的游戏应用程序相关联的用户账户信 息。

  3.游戏应用程序流式传输服务

  游戏应用程序流式传输服务136可以被配置为与交互式游戏应用 程序客户端112通信,以使用游戏应用程序流式传输服务136本地的计 算资源来执行游戏应用程序110。游戏应用程序流式传输服务112可以 被配置为将信息传达到交互式游戏应用程序客户端136,以用于正通过 游戏流式传输服务136执行的游戏应用程序110的运行和输出。游戏应用程序流式传输服务136的客户端(用户A的计算系统)可以在该客户 端的计算系统上交互地玩游戏应用程序,好像它正本地运行一样。游戏 应用程序流式传输服务112可以通过游戏流式传输客户端112接收由用 户计算系统102提供的用户输入,以控制游戏应用程序110的运行。例 如,可以通过动态客户端112输出加载在游戏应用程序流式传输服务136 上的游戏应用程序,并且可以基于从用户的计算系统接收的用户输入来 控制游戏应用程序110。

  i.客户端实例

  客户端实例140可以被实例化在游戏应用程序流式传输系统136 上并且被配置为执行游戏应用程序110。游戏应用程序110与在用户计 算系统102上执行的游戏应用程序110相同。游戏应用程序流式传输服 务136可以执行多个客户端实例140,以为每个请求客户端执行游戏应 用程序110的实例。客户端实例140可以执行游戏应用程序110和状态 流引擎120、游戏数据114和游戏状态数据116。客户端实例140可以 以与用户计算系统102B相同的方式与游戏应用程序主机系统132通信。 客户端实例140是可以分阶段运行的动态客户端实例140。使用游戏应 用程序流式传输系统136的硬件,客户端实例140可以被实例化为虚拟 机实例。进一步参考图4-图5C描述通过客户端实例140的游戏应用程 序110的阶段和执行。

  游戏流式传输服务136可以独立于游戏应用程序主机系统134运 行。游戏应用程序流式传输系统136可以以与用户B的用户计算系统相 同的方式与游戏应用程序主机系统通信。客户端实例140可以执行游戏 应用程序110,如本文关于用户计算系统所描述的。

  如本文所使用的,虚拟环境可以包括在用户计算系统102上实例 化的模拟环境(例如,虚拟空间)。虚拟环境可以在服务器(例如,交 互式计算系统130的应用程序主机系统132)上被实例化——该服务器 是远离该服务器定位的客户端(例如,用户计算系统102)可访问的, 以格式化虚拟环境的视图以便显示给客户端的用户。模拟环境可以具有 地形、表达用户的实时交互和/或包括定位在该地形内的能够在该地形内 运动的一个或多个对象。在一些实施方式中,地形可以是二维地形。在 其他实例中,地形可以是三维地形。在一些实施方式中,地形可以是单 个节点。地形可以包括虚拟环境的维度、和/或虚拟环境“原有的(native)” 表面或对象的表面特征。在一些实施方式中,地形可以描述延伸穿过虚 拟环境的至少相当一部分的表面(例如,地表面)。在一些实施方式中, 地形可以描述在其内定位有一个或多个物体的体积(例如,其内定位有 一个或多个天体的丧失重力的空间的模拟)。虚拟环境可以包括虚拟世 界,但是情况未必如此。例如,虚拟环境可以包括如下游戏空间,该游 戏空间不包括通常与虚拟世界相关联的方面(例如,重力、风景等)中 的一个或多个。通过例示的方式,众所周知的游戏俄罗斯方块(Tetris) 可以被形成为二维地形,其中物体(例如,下落的多边形拼合板 (tetromino))根据预定参数移动(例如,以预定速度下落、以及基于 用户交互水平移动和/或旋转)。

  游戏应用程序110的游戏实例可以包括模拟的虚拟环境,例如,用 户经由用户计算系统102可访问的虚拟环境,该用户计算系统102向用 户呈现虚拟环境的视图。虚拟环境可以具有地形、表达一个或多个用户 的正进行的实时交互和/或包括定位在地形内的能够在地形内运动的一 个或多个对象。在一些实例中,地形可以包括二维地形。在其他实例中,地形可以包括三维地形。地形可以包括空间的维度和/或空间“原有的” 表面或对象的表面特征。在一些实例中,地形可以描述延伸穿过空间的 至少相当一部分的表面(例如,地表面)。在一些实例中,地形可以描 述其内定位有一个或多个物体的体积(例如,其内定位有一个或多个天 体的丧失重力的空间的模拟)。在一些实施方案中,通过计算机部件执 行的实例可以使用同步、异步和/或半同步架构。

  应理解,虚拟环境的状态与视频游戏相关联的方式的以上描述不 意在是限制性的。游戏应用程序可以被配置为以更有限或更丰富的方式 表达虚拟环境。例如,为视频游戏确定的表示视频游戏的实例的游戏状 态的视图可以选自描绘在视频游戏内的给定地方发生的有限的图形集 合。除了相对通用的图形之外,视图还可以包括描述该地方的当前状态 的详情的附加内容(例如,文本、音频、预存储的视频内容和/或其他内 容)。例如,视图可以包括具有要面对的对手的文本描述的通用战斗图 形。设想了视频游戏内的个体地方的其他表达。

  游戏应用程序110生成游戏状态数据116,所述游戏状态数据可以 在游戏应用程序内本地使用并且可以通过网络108传输到交互式计算系 统130。游戏应用程序110的实例的执行可以包括确定与游戏应用程序 相关联的游戏状态。游戏状态信息可以便于在用户计算系统102上向用 户呈现视频游戏的视图。游戏状态信息可以包括定义在其中玩视频游戏 的虚拟环境的信息。

  游戏实例的执行可以使得用户能够通过交互式计算系统130与游 戏应用程序和/或其他用户交互。游戏应用程序可以被配置为响应于通过 网络108从用户计算系统102接收的命令来执行游戏实例中的运行。在 一些实施方案中,用户可以与视频游戏中的要素交互和/或通过视频游戏 彼此交互。

  用户可以通过在与用户相关联的用户计算系统102上实施的客户 端游戏应用程序来参与视频游戏。在通过状态流游戏引擎执行的视频游 戏的游戏实例内,用户可以通过控制与视频游戏相关联的虚拟环境中的 要素中的一个或多个来参与。用户控制的要素可以包括化身、用户角色、 虚拟环境单元(例如,军队)、对象(例如,武器、马匹、车辆等)、 模拟的物理现象(例如,风、雨、地震和/或其他现象)和/或其他用户 控制的要素。

  用户控制的化身可以表示虚拟环境中的用户。用户角色可以包括 英雄、骑士、指挥官、领导、将军和/或可以拥有力量、技能、能力、魔 力、知识和/或任何其他个性化属性的任何其他虚拟环境实体。通过用户 控制的虚拟环境单元可以包括军队和/或可以通过用户成组地(in groups)或全体地(en-mass)训练、招募、捕获和/或以其他方式获取的 任何其他游戏实体。用户控制的对象可以包括武器、车辆、炮弹、魔法 物品、衣柜、靴子、盔甲、背包、药品、治愈药水、和/或用户可以采用 的用于在视频游戏中交互的任何其他虚拟物品。

  用户控制的要素可以在虚拟环境中移动和与虚拟环境交互(例如, 虚拟环境中的用户虚拟环境单元、虚拟环境中的非用户角色、虚拟环境 中的其他对象)。由给定的用户控制和/或与给定的用户相关联的用户控 制的要素可以由给定的用户创建和/或定制。用户可以具有用户可以在虚 拟环境中使用(例如,通过操纵用户角色或其他用户控制的要素、和/ 或其他物品)的虚拟商品和/或货币的“存货”。

  对视频游戏中虚拟要素的控制可以通过由给定的用户通过用户计 算系统102输入的命令来运用。给定的用户可以通过在虚拟环境中交换 的通信来与其他用户交互。这样的通信可以包括文本聊天、即时消息、 私人消息、语音通信和/或其他通信中的一个或多个。用户可以经由他们 的相应的用户计算系统102接收和输入通信。可以通过服务器(例如, 通过应用程序主机系统132)向适当的用户路由通信或从适当的用户路 由通信。

  用户动作通过状态流游戏引擎112的执行和/或表演可以对游戏状 态产生改变,所述改变可以反映用户动作的进展和/或结果。在一些实施 例中,通过用户动作的执行导致的状态改变可以被记录在应用程序数据 存储器106和/或数据存储器134中,以促进贯穿视频游戏的实例的持续 性。在一些实施例中,用户动作的执行可能不对游戏状态产生持续改变 (例如,用户角色相继向前和向后跳跃可能不对其他用户产生任何可感 知的游戏状态改变)。

  给定的用户可以输入具有特定参数的命令,以承担虚拟环境中的 特定行为、动作、功能、动作作用区(sphere)和/或任何其他类型的交 互。例如,给定的用户可以输入命令以构建、升级和/或拆除虚拟建筑物; 收获和/或集合虚拟资源;治愈虚拟用户控制的要素、其他用户控制的非 玩家实体和/或要素;训练、进军、运输、加强、再分配、招募和/或安排军队;攻击、管理、创建、拆除和/或保卫由用户控制的或与用户相关 联的城市、领域、王国、和/或任何其他虚拟环境位置;航空器或运输虚 拟物品;在战斗中与由其他用户控制的非玩家实体和/或虚拟环境要素交 互、竞争或与之在一起;研究技术和/或技能;开采和/或勘探虚拟资源; 完成任务、任务道具和/或作战;运用魔力和/或施展法术;和/或在虚拟 环境中执行任何其他特定行为、动作、功能或动作作用区。在一些实施 例中,给定的用户可以输入命令以与虚拟环境中的环境中的要素竞争, 例如,玩家对环境(PvE)活动。在一些实施例中,给定的用户可以输 入命令以在虚拟环境中相互竞争——例如,玩家对玩家(PvP)活动。

  游戏应用程序110的实例可以包括在游戏应用程序的实例中自动 控制的虚拟实体。这样的虚拟实体可以与任何用户相关联或可以不与任 何用户相关联。这样,该自动控制的虚拟实体可以通过人工智能来生成 和/或开发,该人工智能通过与游戏应用程序有关的提供商、管理员、主 持人和/或任何其他实体配置有游戏应用程序和/或服务器(例如,应用 程序主机系统)。这些自动控制的实体可以不受用户控制在视频游戏中 演进,并且可以与由用户控制的或与用户相关联的实体、其他自动控制 的虚拟环境实体以及虚拟环境的地形交互。根据被配置有服务器(例如, 应用程序主机系统132)的人工智能,某些表现的特质可以与自动控制 的实体相关联。如本文所使用的,在视频游戏的实例中的这样的自动控制的虚拟环境实体被称为“非玩家实体”。

  在在线游戏中,视频游戏的实例可以是持续的。换言之,不论个 体用户当前是否登录和/或参与视频游戏,视频游戏可以继续。退出视频 游戏并且然后稍后过一段时间后登录回的用户可能发现在用户退出的 时间期间通过其他用户与视频游戏的交互虚拟环境和/或视频游戏已经 发生了改变。这些改变可以包括模拟物理空间的改变、用户的存货的改 变、其他用户的存货的改变、由非用户角色经历的改变、和/或其他改变。

  状态流游戏引擎的实施方案

  图2A-图2F以附加的细节例示了状态流游戏引擎120的功能的一 个实施方案。在所例示的实施方案中,状态流游戏引擎120包括模拟引 擎122、呈现引擎124和状态流126,它们被配置为控制用于显示的渲 染的帧的执行和输出。通常,模拟引擎122被配置为执行游戏应用程序 的游戏逻辑和控制运行状态。模拟引擎122与游戏应用程序110的不同 状态生成对象相互作用(interface),并且基于各种游戏规则和约束条 件以及从用户接收的输入来提供游戏应用程序110的模拟和控制。模拟 引擎122响应于由用户提供的输入,并且确定游戏应用程序110如何响 应于虚拟环境中的外部输入以及内部输入。模拟引擎122确定每个虚拟 对象在游戏应用程序内如何起作用和反应。通常,计算设备的CPU执 行通过模拟引擎122处理的功能和过程,但是模拟引擎122的执行不限 于CPU。呈现引擎124被配置为通过生成并且渲染帧以用于在用户计算 系统102或另一个设备上显示来控制游戏应用程序110的呈现的输出。 通常,计算设备的GPU执行通过呈现引擎124处理的许多功能和过程,但是呈现引擎124的执行不限于GPU。

  图2A例示了状态流游戏引擎120的执行的一个实施方案200的一 个实施例。该状态流游戏引擎提供一种系统架构,该系统架构提供将模 拟引擎122的执行与呈现引擎124的执行解耦。模拟引擎122生成SSDP 并且将SSDP发布到状态流126,该状态流可以由状态流管理器管理。 呈现引擎124从状态流126读取SSDP,以生成用以输出的渲染的内容 (例如,帧)。通常,模拟引擎122不直接与呈现引擎124通信。相反, 模拟引擎122生成SSDP并且将SSDP写入状态流126。SSDP由模拟引 擎122生成并且最终确定,之后它在状态流126上对呈现引擎124是可 用的。在最终确定SSDP之后,模拟引擎122可以开始生成下一个SSDP。 仅在SSDP被写入状态流之后,呈现引擎124才可以访问SSDP。呈现 引擎124使用SSDP来在游戏应用程序110内渲染帧。呈现引擎124可 以使用由模拟引擎122生成的SSDP中的任何一个来生成和渲染帧。呈 现引擎124的执行可以在模拟引擎122的执行后至少一个循环来执行, 因为模拟引擎122必须在呈现引擎124可以开始使用包括在SSDP内的 图形状态数据来渲染之前最终确定SSDP。在图2D-图2F中进一步例示 了模拟引擎122和呈现引擎124的执行的一些示例实施方案。

  状态流126可以是用户计算设备102的易失性高速缓存存储器中 的位置。状态流126可以是高速缓存内的具有定义的大小的环形缓冲区, 该环形缓冲区将在定义的时间周期之后连续地重写SSDP。在一些实施 方案中,如本文将更详细地描述的,游戏应用程序110可以具有同时运 行的多个模拟引擎122 122,并且呈现引擎124可以基于由多个模拟引 擎122 122生成的多个SSDP来渲染帧。在这样的实施方案中,每个模 拟引擎122可以与一个不同的状态流相关联,使得每个模拟引擎122在 高速缓存存储器中分配一个不同的逻辑位置以用于写入SSDP。在一些 实施方案中,所有模拟引擎122可以写入公共状态流。

  模拟引擎122在一个模拟循环期间生成一个SSDP,该模拟循环以 独立于渲染循环的速率的速率来执行,在该渲染循环期间,呈现引擎124 输出游戏应用程序的渲染的帧。在所例示的实施方案中,模拟引擎122 具有30Hz的模拟循环。在每个模拟循环期间,模拟引擎122生成一个 SSDP并且将该SSDP写入状态流。呈现引擎124从状态流126读取 SSDP。呈现引擎124渲染帧的速率可以大于模拟引擎122生成SSDP的 速率。呈现引擎124可以内插SSDP,以便以比模拟引擎122生成SSDP 的速率更快的速率来渲染帧。在图2D-图2F中例示了渲染和内插的一些 实施例。尽管在所例示的实施例中,模拟引擎122以固定速率运行并且 呈现引擎124以可变速率运行,但是模拟引擎122和/或呈现引擎124可 以以固定速率或可变速率执行。可以以如由游戏应用程序和/或交互式计 算系统服务器的硬件计算资源和/或客户端计算设备定义的任何频率生 成SSDP。例如,可以以10Hz、15Hz、30Hz、40Hz、60Hz、120Hz或任何其他时间周期生成SSDP。在一些实施方案中,该模拟循环可以 具有可变速率。

  附加地参考图2B和图2C,以附加的细节例示了状态流游戏引擎 120的实施方案200。如所例示的,模拟引擎122可以在游戏应用程序 的运行时间期间生成离散的SSDP,所述离散的SSDP由块S0、S1、S2 等例示。SSDP通过模拟引擎122写入状态流126。在一些实施方案中, SSDP可以作为完整的块被写入状态流126,或可以被逐个地写入状态 流。在任一种情况下,SSDP在状态流上对呈现引擎124是不可用的, 直到SSDP是完整的并且使SSDP对呈现引擎124是可用的为止。在 SSDP是可用的之后,呈现引擎124然后从状态流126读取SSDP。通常, 模拟引擎122和呈现引擎124与状态流的通信是单向的。模拟引擎122 写入状态流,呈现引擎124从状态流读取。模拟引擎122和呈现引擎124 可以在不同线程中运行。以此方式,模拟引擎122可以彼此独立地运行。 只要呈现引擎124落后于SSDP通过模拟引擎122的生成,则呈现引擎 124就可以继续渲染,而不等待下一个SSDP的生成。另外,由于每个SSDP包含渲染所必需的所有状态,因此呈现引擎124不是必须等待 SSDP内的个体状态流过程的状态值的计算和生成。如图2C中所例示 的,每个SSDP由在每个模拟循环期间生成的多个个体状态流过程组成。 所述状态流过程的生成被添加到SSDP,并且在所有状态流过程已经完成之后,SSDP将被最终确定并且在状态流上是可用的。在一些实施方 案中,将以定义的速率(诸如以30Hz)写入SSDP。如所例示的,当完 成循环并且最终确定SSDP(例如,S0)时,模拟引擎122可以开始下 一个SSDP(例如,S1)的生成。

  状态流过程包括游戏应用程序内的状态生成对象,所述状态生成 对象需要被提供给呈现引擎124,以便呈现引擎124具有在生成SSDP 的时间点生成游戏的渲染状态所必需的状态信息。图2C提供了可以包 括在SSDP中的示例状态流过程的缩写列表,诸如,LensFlare、 OccluderMesh、OccluderPlane、OccluderVolume、RenderVolume、GroundHeight等。通常,游戏应用程序内的所有游戏系统都可以通过状 态流。例如,在游戏应用程序内执行的一些游戏系统可以包括模型、发 射器、灯、视觉环境以及其他。为状态流过程生成的图形状态数据与模 拟状态数据的不同之处可以在于,图形状态数据包括呈现引擎124在生 成图形状态数据时重新生成图形虚拟环境所必需的状态子集。图形状态 数据可以是与包括少于执行游戏所要求的所有状态的虚拟对象相关联 的模拟状态数据的经滤波的版本。对于虚拟对象的每个状态流过程,图 形状态数据可以包括静止状态信息和动态状态信息。静态状态信息是指 在对象的整个生命内都相同的状态信息。动态状态信息是指在对象的整 个生命内改变的状态信息。对象在时间X(换言之,生成SSDP的时间) 处的完整图形状态是静态状态信息连同内插的动态状态信息。

  如所讨论的,通过模拟引擎122提供给状态流126的状态数据是 与虚拟对象相关联的模拟状态数据的子集。在状态流过程中包括的图形 状态数据提供呈现引擎124在特定时间点生成游戏的图形状态所必需的 状态数据。图形状态数据可以提供静态状态信息和动态状态信息,诸如 位置、变换以及呈现引擎124在特定时间点重新创建虚拟环境的任何必 需的信息。当为SSDP生成状态流过程时,虚拟环境的状态将被及时冻 结。呈现引擎124能够使用在SSDP内提供的状态信息以在时间点重新 创建游戏应用程序的虚拟环境的至少一部分,类似于虚拟环境的冻结帧 或屏幕截图。在一些实施方案中,SSDP可以提供用于生成并且渲染帧 的默认视点(例如,玩家在游戏应用程序内的视角)。然而,SSDP提 供对于在SSDP的时间点重新创建虚拟环境的图形状态足够的图形状态 数据,并且在该时间处生成图形状态不限于游戏应用程序内的单个视角 (例如,玩家的视角)。SSDP可以提供从任何角度或从摄像机视角重 新创建虚拟环境所要求的状态数据。这允许呈现引擎124基于图形状态 数据从虚拟环境中的任何角度或位置或其部分生成和渲染图形状态的 帧。例如,游戏中的动作可以触发从与玩家的默认视点不同的视角来创 建帧。

  作为图形状态数据的一个例示性实施例,虚拟环境的一个实例内 的移动的汽车上的车轮可以包括用于识别不变特性(诸如,车轮的网格 和皮肤)的静态状态数据以及识别车轮的改变特征(诸如,车轮在虚拟 环境中的位置以及车轮围绕中心轴的旋转)的动态状态数据。车轮的图 形状态数据不需要包括如下数据:其与游戏的模拟相关,诸如车轮的旋 转的速度或汽车在虚拟环境中行驶的速度,但不是相关的或不影响车轮 在游戏应用程序中的渲染。在此实施例中,车轮的‘冻结’状态将被提 供作为用于SSDP内的车轮状态流过程的图形状态数据,并且然后被写 入状态流。呈现引擎124然后可以使用在SSDP内提供的图形状态数据 来渲染帧。生成的帧可以包括车轮的渲染或可以不包括车轮的渲染。然 而,用于车轮的图形状态数据将被包括在SSDP内,以便呈现引擎124 生成游戏环境并且从将包括在正确位置的车轮的视角渲染帧。

  在一些实施方案中,为每个状态流过程生成的图形状态数据可以 被存储为当前SSDP与前一个SSDP之间的差异。游戏内的各种状态变 量中的每个的状态值可以被存储为维护用于对象的状态值的结构体 (struct)。以此方式,模拟引擎122可以确定对象在模拟期间的任何点 处的状态是什么。

  在一些实施方案中,呈现引擎124可以维护由模拟引擎122生成 的当前图形状态数据的副本。模拟引擎122可以被配置为仅写入已经从 前一个状态改变到SSDP的状态值。呈现引擎124可以使用从SSDP接 收的图形状态数据来更新虚拟环境的当前图形状态。以此方式,与为虚 拟环境的当前图形状态生成图形状态数据的完整副本相比,SSDP的大 小可以显著地减少。这也可以减少模拟引擎生成和最终确定SSDP所要 求的时间。

  附加地参考图2D-图2F,例示了模拟引擎122和呈现引擎124的 时序和同步的多个实施方案。模拟引擎122的执行和呈现引擎124的执 行的独立性提供状态流游戏引擎的多个不同的运行模式。图2D-图2F 提供模拟循环和渲染循环的执行的实例的实施例。所述实施例不是限制 性的,并且仅提供用于执行状态流游戏引擎的例示性实施例。呈现引擎 124可以通过在由模拟引擎122生成的前两个SSDP(例如,S0和S1) 之间内插来渲染帧。所例示的实施例提供模拟引擎122和呈现引擎124 在模拟循环期间如何执行的实施例。在所例示的实施例中,呈现引擎124 以180Hz执行渲染循环,并且模拟引擎122以30Hz执行模拟循环,这 对于每个模拟循环导致六个渲染循环。

  呈现引擎124可以基于每个SSDP渲染多个帧。呈现引擎124可以 以比模拟引擎122快的循环时间运行。例如,模拟引擎122可以以30Hz 运行,并且呈现引擎124以更大的速率(例如,180Hz)渲染帧。呈现 引擎124将需要生成多个帧以在每个SSDP的生成之间输出到显示器。 例如,如果模拟引擎122以30Hz在每个模拟循环处生成SSDP,并且 呈现引擎124以120FPS渲染帧,则呈现引擎124将需要在每个模拟循 环生成4个帧,或换句话说每个模拟循环执行四个渲染循环。呈现引擎 124可以使用前一个SSDP(例如,S0)和当前状态(S1),以确定虚 拟环境的图形状态的内插。在一些实施方案中,呈现引擎可以落后于模 拟当前循环不止一个循环。例如,即使当前循环是S4,呈现引擎也可以 使用S0和S1用于帧的生成。

  呈现引擎124不写入或不改变由模拟引擎122写入状态流的图形 状态数据的状态的值。呈现引擎124可以在SSDP已经被呈现引擎124 消耗并且不再被需要之后执行清除SSDP的功能。一旦呈现引擎124已 经完全消耗了一个状态,或如果一个状态从未被使用,则该状态可以从 状态流删除,或被标记以用于删除或重写。

  图2D例示了一个实施方案,其中模拟引擎122在模拟循环结束时 生成并且最终确定SSDP,使得恰好在第六个渲染循环结束之前完成S2。 如果SSDP的生成花费整个模拟循环来完成。在模拟引擎122完成SSDP (S2)之后,模拟引擎122立即开始下一个SSDP(S3)。只要该SSDP 在第六个渲染循环结束之前完成,呈现引擎124就可以继续渲染帧,而 没有延迟。在此实施方案中,在完成SSDP的时间与用于下一个渲染循 环的渲染需要开始之间不存在缓冲区。在该情况下,如果SSDP的最终 确定被延迟,则下一个渲染循环也可以被延迟。

  图2E例示了一个实施方案,其中模拟引擎122在模拟循环结束之 前,诸如在指派给模拟循环时间的总共33毫秒的5.5毫秒内,生成并且 最终确定SSDP。由于SSDP的生成仅花费模拟循环的一部分来完成, 因此模拟引擎122可以将过程资源献给其他过程,诸如在启动下一个 SSDP(S3)之前渲染。在下一个模拟循环开始时,模拟引擎可以生成 下一个SSDP。模拟引擎生成SSDP所花费的时间长度可以基于游戏的 模拟而不同。例如,其中许多状态值正改变的更多动态模拟过程可以导 致以与当用户在游戏应用程序110的模拟内的菜单选择屏幕中时相比更 慢的速率(诸如图2D中所例示的)生成SSDP。

  图2F例示了一个实施方案,其中模拟引擎122在模拟循环结束之 前生成并且最终确定SSDP,使得在第六个渲染循环结束之前一时间的 缓冲区完成S2。SSDP的生成仅花费模拟循环的一部分来完成。在模拟 引擎122完成SSDP(S2)之后,模拟引擎122可以将过程资源献给其 他过程,诸如在下一个SSDP(S3)的启动之前渲染。在此实施方案中, 模拟引擎具有可变的模拟循环,并且模拟引擎开始生成不遵循固定模拟 循环持续时间的SSDP。该SSDP可以包括模拟循环完成该SSDP所花费 的时间。此信息可以由呈现引擎使用以预测模拟循环之间的渲染循环数 目。当模拟循环花费的时间比确定的模拟循环时间长时,也可以使用此信息。例如,如果SSDP的创建花费55毫秒,则呈现引擎可以预测在接 收下一个SSDP之前需要完成更多渲染循环。在这样的情况下,呈现可 以基于预测调整SSDP的内插和渲染循环的数目。

  具有重放功能的状态流游戏引擎

  图3例示了包括重放功能的状态流游戏引擎的块图300。在所例示 的实施方案中,可以通过将SSDP同时写入状态流和存储来实现重放功 能。通常,在状态被呈现引擎124消耗之后,从状态流移除该状态并且 该状态不再可用于通过呈现引擎124渲染。然而,可以通过使模拟引擎 122同时写入计算设备上的存储位置(诸如非易失性存储器)来持续地 保存SSDP。存储位置可以被写入计算设备上的与为状态流指定和指派 的位置不同的位置。呈现引擎124可以将状态从磁盘加载到状态流,以 再次消耗状态。在所例示的实施例中,SSDP正被从存储装置写入第二 状态流。尽管被例示为第二状态流,但是第一状态流和第二状态流可以 是计算设备上的同一指派的存储器位置。在一些实施方案中,状态流游 戏引擎可以使不同的状态流具有不同的指派的存储器位置。

  写入存储器的SSDP可以被用于重放游戏设置会话的序列。例如, 如果用户希望观看游戏的精彩片段的重放,则与请求的事件序列相关联 的SSDP可以从存储装置写入状态流。呈现引擎124可以针对SSDP生 成和渲染帧,以向用户显示重放。可以以与在游戏的游戏设置期间(诸 如英式足球比赛中的进球)原始提供给用户的方式和角度相同的方式和 角度显示数据。另外,状态数据包括呈现引擎124重新创建在游戏应用 程序内的虚拟场景所必需的状态数据,呈现引擎124可以从游戏环境中 的不同视角或视点渲染该重放。例如,该重放可以提供玩家得分的重放, 该重放可以从得分者的视点、守门员的视点、鸟瞰的视点或任何其他视 点显示。场景的重新创建可以通过呈现引擎124的显示管理器控制。在 一些实施方案中,模拟引擎可以生成显示管理器SSDP,显示管理器 SSDP可以由呈现引擎使用以确定正输出用于显示的视点。例如,在游 戏设置期间,显示管理器SSDP可以为呈现引擎提供使用来自状态流A 的SSDP的指令,并且在重放期间,显示管理器SSDP可以为呈现引擎 提供使用来自状态流B的SSDP的指令。

  在游戏设置会话期间写入存储的SSDP可以被存储在环形缓冲区 中。该环形缓冲区可以循环通过定义量的游戏设置时间,诸如10分钟、 15分钟或另一个定义的时间量。SSDP中的一些可以被标记,以使得当 该环形缓冲区循环通过时它们不被重写。可以基于在游戏设置期间发生 的特定事件(诸如踢进一球)或基于通过游戏应用程序的特定规则和参数定义的其他标准来标记SSDP。通常,在SSDP被消耗之后,呈现引 擎124管理SSDP从状态流的移除。在SSDP从存储装置写入状态流的 情况下,当SSDP在被呈现引擎124消耗之前被写到状态流内时,SSDP 可以被重写入存储装置或可以不被从存储装置移除。

  在一些实施方案中,呈现引擎124可以利用多个不同的SSDP来生 成并且渲染帧。呈现引擎124可以从任何数目的状态拉取(pull)状态 信息以生成帧。例如,呈现引擎124可以通过将多个状态组合在一起创 建从多个不同状态生成的图形的拼贴画(collage)来生成一系列帧。

  状态流执行过程

  图3A-图3B例示了用于执行游戏应用程序内的状态流游戏引擎的 过程的流程图的实施方案。这些过程可以全部地或部分地由被配置有执 行游戏应用程序的计算机可读指令的CPU和/或GPU实施。例如,该过 程可以全部地或部分地由游戏应用程序、状态流游戏引擎、模拟引擎 122、状态流和/或呈现引擎124实施。尽管任何数目的系统全部地或部 分地可以实施所述过程,但是为了简化讨论,将关于游戏应用程序、状 态流游戏引擎、模拟引擎122、状态流和/或呈现引擎124描述所述过程。

  模拟引擎执行过程

  图3A例示了用于在状态流游戏引擎内的模拟循环期间执行模拟 引擎122的过程300的一个实施方案。

  在块302处,模拟引擎122在一个模拟循环内启动一个新SSDP。 可以在前一个SSDP之后立即启动新SSDP(诸如,图2D中所例示的), 或可以在前一个SSDP和新SSDP之间存在一时间周期(诸如,图2E- 图2F中所例示的)。该模拟循环可以被配置为周期性(诸如,每30Hz)、 非周期性(诸如,前一个循环一完成就)或基于游戏应用程序的要求(诸 如,在从多玩家游戏中的其他用户计算设备接收输入之后)发生。

  在块304处,模拟引擎122生成模拟内的虚拟对象的至少一部分 的状态数据。在模拟循环期间,模拟引擎可以生成虚拟对象内的虚拟对 象的新状态数据。该模拟可以仅生成虚拟对象的状态数据,其中与前一 个模拟循环相比,所述状态数据在当前模拟循环中被改变。在某个实施 方案中,在每个模拟循环中生成所有虚拟对象的状态数据。模拟引擎可 以仅生成与虚拟环境的一部分相关联的状态数据。例如,在在线游戏中, 模拟引擎可以仅访问与虚拟环境相关联的总状态数据的一部分。

  在块306处,模拟引擎122生成用于呈现引擎124渲染虚拟环境 内的虚拟对象所必需的状态流过程的图形状态数据。图形状态数据可以 是模拟状态数据的子集。在当与前一个模拟状态相比时状态不改变的情 况下,模拟引擎可以不生成用于状态流过程的任何数据。

  在块308处,模拟引擎将图形状态数据写入SSDP。一生成图形状 态数据,用于状态流过程的图形状态数据就可以被写入SSDP。

  在块310处,模拟引擎122最终确定SSDP并且使SSDP在状态流 上对呈现引擎可用。模拟引擎可以将SSDP作为单个块写入状态流,或 可以在模拟循环期间写入状态流并且可以不最终确定或以其他方式使 SSDP可用,直到SSDP完成为止。最终确定的SSDP可以在通过模拟循 环的时序指定的时间写入状态流。状态流可以是易失性高速缓存存储器 中的分派给模拟引擎122的位置。写入可以是单向的,从模拟引擎122 到状态流。在一些实施方案中,SSDP可以具有一个定义的时间周期, 在该时间周期中生成SSDP和将SSDP写入状态流。SSDP可以在模拟循 环结束之前完成。例如,SSDP可以在模拟循环的中途完成。

  在块312处,可选地,模拟引擎122将SSDP写入指派的存储位置, 同时将SSDP写入状态流。分配的存储位置可以位于存储设备上的非易 失性存储装置中。在写入完成之后,过程返回到块602。

  呈现引擎执行过程

  图3B例示了用于执行状态流游戏引擎内的呈现引擎124的过程 350的一个实施方案。

  在块352处,呈现引擎124在一个新渲染循环内从状态流读取至 少一个SSDP。该读取是单向的。呈现引擎124不写修改包括在SSDP 中的图形状态数据。呈现引擎124不直接从模拟引擎122读取数据。

  在块354处,呈现引擎可以基于SSDP来更新虚拟环境的当前图形 状态。呈现引擎可以维护每个虚拟环境的当前图形状态。基于SSDP, 呈现引擎然后可以基于通过SSDP改变和提供的状态值来更新当前状 态。

  在块356处,呈现引擎124使用SSDP(SSDP1)和前一个SSDP (SSDP0)来至少部分地基于渲染帧速率和模拟循环时间周期来确定用 于渲染帧的内插。当模拟循环以定义的周期性发生时,呈现引擎124可 以基于计算的帧速率来确定内插计算。呈现引擎可以基于预测的或定义 的模拟速率以及预测的或定义的帧速率来预测渲染循环的数目。

  在块358处,呈现引擎124基于确定的内插来渲染帧。可以使用 来自SSDP1和SSDP0的图形状态数据来渲染帧。在一些实施方案中, 可以使用来自不止一个SSDP的图形状态数据,以渲染一个或多个帧。 在一些实施方案中,呈现引擎可以使用在当前状态后面多个状态的 SSDP进行渲染。呈现引擎124可以使用SSDP来生成并且渲染帧,而 没有与模拟引擎122的任何交互或依赖。

  在块360处,在渲染循环完成并且状态流不再需要SSDP之后,呈 现引擎124可以清除或以其他方式倾向于清理SSDP。呈现引擎124可 以从状态流删除一个或多个SSDP。在一些实施方案中,呈现引擎124 可以删除消耗的SSDP和/或未消耗但不再需要的SSDP。在一些实施方 案中,状态流是环形缓冲区,并且呈现引擎124标记环形缓冲区内的可 以被重写的SSDP。在渲染循环完成之后,过程返回到块352。

  图4–动态客户端执行阶段

  图4例示了动态客户端112的执行的阶段的块图。动态客户端112 被配置为用户计算系统102上的基于视频播放器的客户端(也被称为瘦 客户端)。动态客户端112可以与交互式计算系统130相互作用,并且 可以被配置为提供允许用户选择尚未本地安装在用户计算系统102上的 游戏应用程序110来玩的界面。用户可以登录识别玩家可用的(例如, 玩家先前购买的或通过订阅可用的)游戏应用程序110的用户账户。游 戏也可以是可供玩家购买的游戏。例如,玩家可以完全彻底地购买游戏 或购买在一个时间段内玩游戏的许可,诸如每月订阅。该界面可以是通 过网页浏览器应用程序可访问的。

  动态客户端112可以被配置为使得用户可以选择游戏应用程序110 玩和请求启动该游戏应用程序的游戏会话。动态客户端112可以允许客 户端分阶段安装游戏,以使得用户可以快速开始玩游戏。在图4中例示 了游戏的阶段。在启动游戏应用程序110之前,动态客户端112可以对 计算资源进行分析,以在用户计算系统102上生成计算配置文件,以确定用户计算系统102可以执行的阶段。执行的最后阶段可以由游戏应用 程序110自动确定。在一些实施方案中,动态客户端可以允许用户选择 用户计算系统102将使用的阶段。一些游戏应用程序110可以被配置为 仅在阶段中的一些中执行。例如,游戏仅可以被配置为在阶段1、阶段2、阶段1和阶段2、或阶段2和阶段3中执行。执行局限可以基于硬件 或软件配置/限制、许可要求或限制、制造商或发布者或经销商限制,或 交互式计算系统130施加的其他限制。

  在阶段1中,用户通过动态客户端112请求玩游戏应用程序110。 动态客户端112将请求传输到游戏应用程序流式传输系统136。基于该 请求,游戏应用程序流式传输系统136可以为用户实例化客户端实例 140。在一些实施方案中,动态客户端112可以与交互式计算系统130 或另一个管理平面层通信,该交互式计算系统130或另一个管理平面层 可以被配置为向游戏应用程序流式传输系统136提供指令,以代表用户 计算系统102实例化客户端实例140。客户端实例140可以以与在用户 计算系统102上执行游戏应用程序110相同的方式执行游戏应用程序 110。客户端实例140执行游戏应用程序110的模拟和呈现。游戏应用程序110的呈现可以作为视频流输出。在一些实施方案中,来自呈现引 擎的输出可以被进一步编码,以用于作为视频流运输到用户计算系统 102。动态客户端112被配置为在用户计算系统102上显示游戏应用程 序110的用户界面。该用户界面可以是与在本地安装有游戏的用户计算 系统102上显示的相同的用户界面。在一些实施方案中,用户计算系统 102上的UI可以包括用于与动态客户端112的特征交互的附加特征。

  动态客户端112提供可用来接收游戏应用程序110的用户输入的界 面。动态客户端112可以被配置为从用户输入设备(例如,控制器、鼠 标和键盘等)接收用户输入。动态客户端112可以提供用户输入给客户 端实例140。客户端实例140的模拟引擎120可以处理用户输入并且生 成游戏应用程序110的状态,该状态然后被输出以使呈现引擎124渲染 用于游戏应用程序110的帧。渲染的帧可以被编码以通过网络传输,并 且可以作为视频流显示在动态客户端112的视频播放器上。动态客户端 112可以在从客户端实例140接收视频流时显示提供给用户的视频流。 只要动态客户端112保持在阶段1中,客户端实例140就可以继续流式 传输视频。

  如果动态客户端112将转变到阶段2,则游戏应用程序流式传输系 统136可以将游戏应用程序110资产转移到用户计算系统102。游戏应 用程序110资产包括由动态客户端112使用以执行用户计算系统102上 的呈现引擎124的资产。在足够数目的资产被加载到用户计算系统102 上以使动态客户端112实施呈现引擎124之后,动态客户端112可以转 变到阶段2。

  在阶段2期间,动态客户端112被配置为使用用户计算系统102 的计算资源来执行呈现引擎。模拟引擎120继续通过客户端实例140执 行。在足够数目的游戏应用程序110资产被加载在用户计算系统102上 之后,用户计算系统102可以实施并且开始执行呈现引擎124。呈现引 擎124的执行可以通过回填由模拟引擎120生成的SSDP开始。呈现引 擎124可以从状态流接收SSDP。可以在客户端实例140、用户计算系统 102和/或两个系统上执行状态流。状态流提供用户计算系统102可以获 取SSDP所通过的界面。通过网络发送SSDP,以使得它们可以是由呈 现引擎124可访问和读取的。呈现引擎124可以被配置为通过网络请求SSDP或访问用户计算系统102上的本地状态流。在一些实施方案中, 在从阶段1转变到阶段2期间,模拟引擎可以同时将SSDP写入客户端 实例上的状态流队列和写入网络状态流队列,该网络状态流队列被配置 为将SSDP编码并且将SSDP通过网络传输到用户计算系统102。在用 户计算系统接收之后,SSDP被写入用户计算系统上的状态流。呈现引 擎然后可以从用户计算系统102状态流读取SSDP。

  在呈现引擎124已经被填充有游戏应用程序110的呈现的执行所必 需的SSDP之后。用户计算系统102上的呈现引擎124可以与客户端实 例140上的呈现引擎124同时开始执行。用户计算系统102上的视频播 放器也可以继续与用户计算系统102上的呈现引擎124同时运行。一旦 呈现引擎124使用用户计算系统102的资源完全运行,用户计算系统102 上的呈现引擎124将游戏应用程序流式传输系统136上的呈现引擎124 替换为活动的呈现引擎124。视频播放器可以停止执行,并且由用户计 算系统102上的呈现引擎124生成的渲染的帧替换由视频播放器播放的 视频帧。在一些实施方案中,当用户计算系统102上的呈现引擎接管时, 由用户计算系统102上的呈现引擎124显示的渲染的帧是用于由视频播 放器显示的序列中的下一个帧。在一些实施方案中,由用户计算系统102 上的呈现引擎124显示的渲染的帧实质上是用于由视频播放器显示的下 一个帧,例如该帧可以是被调度为在序列化用于由游戏应用程序流式传 输系统136显示的帧的1秒或2秒内发生的前一个帧或后一个帧。该帧 可以是从与被调度用于在视频播放器上显示的随后的视频帧的SSDP相 同的SSDP生成的帧。在用户计算系统102的呈现引擎124变成活动的 之后,客户端实例140呈现引擎124变成非活动的。另外,模拟引擎可 以停止将SSDP写入状态流并且仅写入网络状态流队列。用户计算系统 102在阶段2中的运行减少了客户端实例140上的计算载荷,因为客户 端实例140呈现引擎124在阶段2期间变成非活动的并且停止渲染帧。 用户计算系统102呈现引擎124变为活动的呈现引擎124,并且继续通 过网络状态流队列从客户端实例140模拟引擎120接收SSDP。

  通过将呈现引擎124转移到用户计算系统102,用户计算系统102 能够在虚拟环境中执行活动,所述活动不改变状态,但是可以改变在虚 拟环境中向用户显示的视点。由于呈现引擎124能够基于创建SSDP时 的状态来渲染整个场景。在一些实例中,虚拟环境中的用户的视点可以 被操纵,而不要求由模拟引擎120生成指令,诸如当该视点的改变不改 变游戏状态时。例如,在视频游戏中跳跃的虚拟角色将改变游戏的状态 并且要求将跳跃用户输入发送到模拟引擎120,以生成另一个SSDP,以 使得呈现引擎124可以基于更新的状态信息来渲染帧。但是,如果虚拟 角色仅仅将视点从注视房间内的天花板改变到注视房间内的地板,则这 可能不改变虚拟角色的状态。相反,它将仅改变在虚拟环境中的视点。 由于虚拟环境的状态已经被包含在SSDP中,因此呈现引擎124可以比 将视点动作的改变发送到客户端实例140所要求的更快地渲染帧,然后 渲染与注视动作相关联的帧以将更新的帧提供回到用户计算系统102。 基于非状态改变用户输入更新渲染的过程可以减少用户在玩游戏应用 程序110时经历的延时。另外,在虚拟现实环境中,在用户的视点是基 于用户的头部的位置的情况下,在呈现引擎124上的渲染可以是在将延 时减少到可容忍的水平方面非常重要的,该可容忍的水平将有助于减少 用户经历晕动病或恶心的机会。

  在一些应用程序中,保持在阶段2中可以是优选的。例如,如果 游戏服务器正主动地更新多玩家游戏中的虚拟角色的状态,如果模拟引 擎120可以具有到应用程序主机系统132的更好的连接,则它可以帮助 减少延时。另外,为了防止在游戏期间作弊,它可以是有用的。由于在 用户计算系统102上没有执行任何模拟,因此用户可能难以在游戏期间 作弊。仅用户输入将由计算系统接收。当角色对正提供给服务器的输出 的控制仅限于用户输入时,可以更难以哄骗或入侵系统。

  在一些实施方案中,客户端实例140可以在系统转变到阶段2之 后继续监视用户计算系统102的帧速率,以保证用户计算系统102的质 量水平是令人满意的。例如,客户端实例140可以评估帧速率,以确定 由用户计算系统102呈现引擎124生成的帧速率是否正满足游戏应用程 序110的执行的最小阈值。例如,最小帧速率可以是30FPS、60FPS或 另一个值。该阈值可以是在阶段1中实现的帧速率的百分比差。

  如果用户计算系统102将转变到阶段3,则客户端实例140可以在 阶段2期间继续将游戏应用程序110资产转移到用户计算系统102。游 戏应用程序流式传输系统136将继续转移资产直到游戏应用程序110被 完全加载到用户计算系统102上。一旦游戏资产加载完成。用户计算系 统102将执行模拟引擎120并且激活它,以使得它与客户端实例140上 的活动的模拟引擎120正同时运行。客户端实例140可以将客户端实例 140模拟引擎120的执行和整个客户端架构转移到用户计算系统102的 动态客户端112。模拟引擎120的执行的转移导致用户计算系统102模 拟引擎120变成活动的模拟引擎120,并且导致客户端实例140模拟引 擎120变成非活动的。在用户计算系统102上,模拟引擎120与客户端 实例140模拟引擎120正同时执行,使得正为用户计算系统102呈现引 擎124生成大体上相同的状态数据。当模拟引擎120的执行转移到用户 计算系统102时,正通过客户端实例140执行的所有客户端架构活动都 转移到用户计算系统102,使得用户计算系统102不再是活动的。游戏 服务器与客户端实例140之间的通信从客户端实例140移交给用户计算 系统102。

  当客户端实例140逐步减少(wind down)游戏应用程序110的执 行并且完全停止客户端实例140的执行时。在一些实施方案中,客户端 实例140可以继续监视用户计算系统102并且执行确定的时间量以验证 游戏应用程序110继续没有问题地执行。这可以是对用户不透明的改变, 使得动态客户端112在游戏会话的运行时间期间转变,而不要求来自用户的任何交互。从客户端实例140到用户计算系统102的转变可以提高 游戏设置质量、帧质量和/或游戏应用程序110的呈现的分辨率。转变可 以减少用户输入和显示响应之间的显示延时。交互式计算系统130从用 户计算系统102接收由客户端实例140先前提供的游戏设置数据。交互 式计算系统130基于用户计算系统102与游戏设置服务器的交互来将游 戏设置数据提供给用户计算系统102。传达到服务器135的游戏设置数 据可以指的是在游戏应用程序在客户端上的运行期间游戏应用程序110 与服务器具有的任何类型的通信。在阶段1和阶段2中,此类型的通信 通过客户端实例处理,并且在阶段3中,此类型的通信被移交给用户计 算系统102。用户计算系统102继续将游戏应用程序110作为独立运行 的(standalone)游戏应用程序110执行,诸如关于图1中所例示的用户 B计算系统所例示的。

  动态客户端执行

  图5A-图5C例示了用于使用动态客户端执行游戏应用程序的过程 500的流程图的实施方案。所述过程可以全部地或部分地通过CPU和/ 或GPU实施,所述CPU和/或GPU被配置有执行通过网络与客户端(例 如,用户计算系统102)通信的服务器(例如,交互式计算系统130) 上的游戏应用程序的计算机可读指令。例如,所述过程可以全部地或部 分地由游戏应用程序110、游戏应用程序客户端112、状态流游戏引擎 120、模拟引擎122、状态流126、呈现引擎126、交互式计算系统130、 游戏应用程序主机系统134、游戏服务器135、游戏应用程序流式传输 系统136和/或客户端实例140实施。尽管任何数目的系统全部地或部分 地可以实施所述过程,但是为了简化讨论,将关于交互式计算系统130 以及其部件来描述所述过程。

  具体参考图5A,在块502处,交互式计算系统130接收在用户计 算系统102上启动游戏应用程序110的请求。该请求可以来自在用户计 算系统102上执行的动态客户端112。在一些实施方案中,该请求可以 来自用户计算系统102上的另一个应用程序,诸如浏览器应用程序。在 一些实施方案中,可以指示浏览器应用程序启动动态客户端112的下载, 以继续玩游戏应用程序的过程。在一些实施方案中,浏览器应用程序可 以起用于过程500的至少一部分的动态客户端112的作用。

  在块504处,交互式计算系统130将客户端实例实例化在游戏应 用程序流式传输系统136上。客户端实例140在游戏应用程序流式传输 系统136上的实例化可以是虚拟机的实例化,该虚拟机的实例化在游戏 应用程序流式传输系统136上执行,并且运行游戏应用程序110的执行 和与用户计算系统102交互所要求的适当的操作系统和应用程序。实例 化在游戏应用程序流式传输系统136上的客户端实例140可以是在交互 式计算系统130内与应用程序主机系统132逻辑上分离的服务。交互式 计算系统130可以包括应用程序主机系统,该应用程序主机系统包括被 配置为执行游戏应用程序110的服务器侧功能的一个或多个游戏服务器 135。客户端实例140可以与游戏服务器通信,好像它们是在交互式计 算系统130外部执行的用户计算系统102一样。例如,在多玩家第一人 称射击游戏中,应用程序主机系统132可以在游戏服务器135上托管在 线多玩家游戏,以使多个不同的用户彼此对战。

  在块506处,交互式计算系统130可以被配置为确定用户计算系 统102的计算配置文件。该计算配置文件可以识别硬件资源(诸如,CPU 资源、GPU资源、存储器和其他硬件资源)、固件信息、设备驱动器信 息、软件信息(诸如操作系统、浏览器类型、安装的软件、软件版本和 其他软件信息)、网络信息(诸如,IP地址、延时、带宽和其他网络信 息)以及与用户计算系统102相关联的其他信息。该计算配置文件可以 被用来确定将如何在用户计算系统102上使用动态客户端。例如,与游 戏的兼容性和动态客户端112的执行的阶段。

  在块508处,交互式计算系统130启动客户端实例140和动态客 户端112上的游戏应用程序的执行。使用客户端实例140的硬件资源来 执行该游戏。客户端实例140上的游戏应用程序的执行可能除了渲染的 帧将从客户端实例140提供给用户计算系统102之外与游戏正在图1中 的用户B的用户计算系统102上执行一样。动态客户端112的用户界面 可以是视频播放器,该视频播放器似乎具有与在用户B的用户计算系统 102上执行的游戏应用程序的用户界面相同的功能。例如,尽管界面是 游戏应用程序的视频流,但是如果用户选择与UI要素相关联的UI的部 分,则在该视频流内显示的用户界面的要素提供相同的功能。

  在块510处,交互式计算系统130从用户计算系统102接收用户 输入以与游戏应用程序110相互作用。通过网络从动态客户端112接收 用户输入。客户端实例140的游戏应用程序110至少部分地基于所述输 入执行游戏应用程序110的模拟。该模拟可以通过状态流引擎120的模 拟引擎120执行。模拟引擎120基于模拟的执行来生成状态数据并且提 供该状态数据用于通过呈现引擎124呈现。呈现引擎124可以渲染帧, 以用于作为帧视频流在动态客户端112内输出,诸如以定义的速率。例 如,可以以特定速率,诸如30FPS、60FPS或另一个速率设定由呈现引 擎124输出的渲染的帧视频流。帧可以被尽可能快地渲染,并且可以以 可变帧速率被提供给用户计算系统102。在一些实施方案中,提供视频 流内的帧的速率可以是用户计算系统102与游戏应用程序流式传输系统 136之间的带宽和网络延时的函数。交互式计算系统130和动态客户端 112可以在阶段1中继续执行游戏应用程序110。

  在块512处,交互式计算系统130确定动态客户端112是否将继续 进行到阶段2。是否继续进行到阶段2的确定可以取决于各种因素,诸 如硬件资源、游戏兼容性、游戏特性、用户偏好、网络特性以及确定是 否将游戏应用程序110的处理中的一些迁移到用户计算系统102的其他 因素。如果交互式计算系统130确定动态客户端112将继续进行到阶段 2,则过程继续进行到B,并且继续到块520。如果交互式计算系统130 确定动态客户端112将不继续进行到阶段2,则过程继续进行到块514, 以确定是否已经达到了停止条件。如果已经满足了停止条件,则过程结 束,并且客户端实例140可以被结束。与用户的账户相关联的用户/游戏 数据可以与用户账户一起存储。例如,可以为用户保存与游戏应用程序 110相关联的游戏成就和相同的游戏文件,使得即使用户最初使用的客 户端实例140已经被结束,也可以重新开始游戏,而不损失进展。

  现在参考图5B,在块520处,游戏应用程序流式传输系统136可 以将游戏应用程序110资产转移到用户计算系统102,以便用户计算系 统102执行呈现引擎124。游戏应用程序流式传输系统136可以对动态 客户端112上的呈现引擎124的执行所需要的游戏应用程序110资产进 行优先级排序。在已经提供了用于执行用户计算系统102上的呈现引擎 124的所有必需资产之后,过程可以继续进行到块522。

  在块522处,游戏应用程序流式传输系统136可以启动用户计算 系统102上的呈现引擎124的执行。呈现引擎124可以被配置为通过动 态客户端112与客户端实例140上的呈现引擎124同时执行和激活。游 戏应用程序流式传输系统136可以提供由客户端实例140呈现引擎124 所使用以生成并且渲染帧的状态数据。用户计算系统102呈现引擎124 可以接收来自客户端实例的SSDP。例如,模拟引擎可以将SSDP写入 网络状态流队列,所述SSDP然后被编码并且被写入用户计算系统102 上的状态流。用户计算系统102和客户端实例140上的呈现引擎124可 以继续同时运行,直到游戏应用程序流式传输系统136确定用户计算系统102上的呈现引擎124正以全容量(full capacity)运行并且与客户端 实例140呈现引擎124大体上同步。此时,过程继续进行到块524。

  在块524处,游戏应用程序流式传输系统136可以将客户端实例 140呈现引擎124的执行转移到用户计算系统102呈现引擎124。呈现 引擎124的执行的转移导致用户计算系统102呈现引擎124变成活动的 呈现引擎124,并且导致客户端实例140呈现引擎124变成非活动的。 在用户计算系统102上,呈现引擎124与视频播放器同时执行,使得大 体上相同的帧正通过视频流提供并且正由用户计算系统102呈现引擎 124渲染。

  在块526处,客户端实例140停止将视频流式传输到用户计算系 统102,并且用户计算系统102从视频播放器转变到正由用户计算系统 102呈现引擎124渲染的帧。这可以是对用户不透明的改变,使得视频 播放器被停止,而不要求来自用户的任何交互。从视频播放器到呈现引 擎124的转变可以提高帧质量和/或游戏应用程序110的呈现的分辨率。 该转变可以减少用户输入和显示响应之间的显示延时。

  在块528处,交互式计算系统130从用户计算系统102接收用户 输入,以与游戏应用程序110相互作用。通过网络从动态客户端112接 收用户输入。客户端实例140的游戏应用程序110至少部分地基于所述 输入执行游戏应用程序110的模拟。该模拟可以通过状态流引擎120的 模拟引擎120执行。模拟引擎120基于该模拟的执行生成状态数据,并 且提供所述状态数据用于通过用户计算系统102呈现引擎124呈现。用 户计算系统102呈现引擎124可以使用用户计算系统102的硬件资源来 渲染帧并且将帧输出以用于在用户计算系统102上显示。用户计算系统 102的帧速率可以基于用户计算系统102的硬件资源,并且可以相对于 客户端实例140所施加的任何帧速率限制而增加。例如,与视频的流式 传输相比,由模拟引擎120提供给用户计算系统102呈现引擎124的状 态数据要求显著更少的网络带宽。可以由用户计算系统102以可变的帧 速率或以定义的速率尽可能快地渲染帧。交互式计算系统130和动态客 户端112可以在阶段2中继续执行游戏应用程序110。

  在块530处,交互式计算系统130确定动态客户端112是否将继续 进行到阶段3。是否继续进行到阶段3的确定可以取决于各种因素,诸 如硬件资源、游戏兼容性、游戏特性、用户偏好、网络特性以及确定是 否将游戏应用程序110的过程中的一些迁移到用户计算系统102的其他 因素。如果交互式计算系统130确定动态客户端112将继续进行到阶段 3,则过程继续进行到C,并且继续到块540。如果交互式计算系统130 确定动态客户端112将不继续进行到阶段3,则过程继续进行到块532 以确定是否已经达到了停止条件。如果已经满足了停止条件,则过程结 束,并且客户端实例140可以被结束。与用户的账户相关联的用户/游戏 数据可以与用户账户一起存储。例如,可以为用户保存与游戏应用程序 110相关联的游戏成就和相同的游戏文件,使得即使用户最初使用的客 户端实例140已经被结束,也可以重新开始游戏,而不损失进展。

  现在参考图5C,在块540处,游戏应用程序流式传输系统136可 以将游戏应用程序110资产转移到用户计算系统102,以便用户计算系 统102执行模拟引擎120,并且将整个客户端架构从客户端实例140转 变到用户计算系统102。在已经提供了用于在用户计算系统102上本地 执行模拟引擎120以及执行客户端架构的所有必需的资产之后,过程可 以继续进行到块542。

  在块542处,游戏应用程序流式传输系统136可以启动用户计算 系统102上的模拟引擎120的执行。模拟引擎120可以被配置为通过动 态客户端112与客户端实例140上的模拟引擎120同时执行和激活。用 户计算系统102可以开始基于用户输入使用用户计算系统102模拟引擎 120来生成状态数据,以生成并且渲染帧。用户计算系统102可以继续 将用户输入发送到客户端实例140。用户计算系统102和客户端实例140 上的模拟引擎120将继续同时运行,直到游戏应用程序流式传输系统136 确定用户计算系统102上的模拟引擎120正以全容量运行并且与客户端 实例140模拟引擎120大体上同步。此时,过程继续进行到块524。

  在块544处,游戏应用程序流式传输系统136可以将客户端实例 140模拟引擎120的执行和整个客户端架构转移到用户计算系统102的 动态客户端112。模拟引擎120的执行的转移导致用户计算系统102模 拟引擎120变成活动的模拟引擎120,并且导致客户端实例140模拟引 擎120变成非活动的。在用户计算系统102上,模拟引擎120与客户端 实例140模拟引擎120同时执行,使得正为用户计算系统102呈现引擎 124生成大体上相同的状态数据。当模拟引擎120的执行转移到用户计 算系统102时,正通过客户端实例140执行的所有客户端架构活动都转 移到用户计算系统102,使得用户计算系统102不再是活动的。游戏服务器与客户端实例140之间的通信从客户端实例140移交到用户计算系 统102。

  在块546处,客户端实例140逐步减少游戏应用程序110的执行, 并且完全停止客户端实例140的执行。在一些实施方案中,客户端实例 140可以继续监视用户计算系统102并且执行确定量的时间,以验证游 戏应用程序110继续没有问题地执行。这可以是对用户不透明的改变, 使得动态客户端112在游戏会话的运行时间期间转变,而不要求来自用 户的任何交互。从客户端实例140到用户计算系统102的转变可以提高 游戏设置质量、帧质量和/或游戏应用程序110的呈现的分辨率。该转变 可以减少用户输入和显示响应之间的显示延时。

  在块548处,交互式计算系统130从用户计算系统102接收先前 通过客户端实例140提供的游戏设置数据。在块550处,交互式计算系 统130基于用户计算系统102与游戏设置服务器的交互将游戏设置数据 提供给用户计算系统102。用户计算系统102继续将游戏应用程序110 作为独立运行的游戏应用程序110执行,诸如关于图1中的用户B所例 示的。

  计算设备的概述

  图6例示了根据本公开内容的计算设备10的一个实施方案。计算 设备10的其他变型可以代替本文明确呈现的实施例,诸如移除部件或 向计算设备10添加部件。计算设备10可以包括游戏设备、智能电话、 平板计算机、个人计算机、膝上型计算机、智能电视、汽车控制台显示 器、服务器等。如所示出的,计算设备10包括处理单元20,该处理单 元20与计算设备10的其他部件以及计算设备10的外部部件交互。包 括与介质12通信的介质读取器22。介质读取器22可以是能够读取光盘 (诸如CD-ROM或DVD)的光盘读取器,或能够从游戏介质12接收和 读取数据的任何其他类型的读取器。所述计算设备中的一个或多个可以 被用来实施本文所公开的系统中的一个或多个。

  计算设备10可以包括分离的图形处理器24。在一些情况下,图形 处理器24可以内置在处理单元20内。在一些这样的情况下,图形处理 器24可以与处理单元20共享随机存取存储器(RAM)。替代地或附加 地,计算设备10可以包括与处理单元20分离的分立图形处理器24。在 一些这样的情况下,图形处理器24可以具有与处理单元20分离的RAM。 计算设备10可以是手持视频游戏设备、专用游戏控制台计算系统、通 用膝上型计算机或台式计算机、智能电话、平板计算机、汽车控制台或 其他合适的系统。

  计算设备10还包括用于使能输入/输出的各种部件,诸如I/O 32、 用户I/O 34、显示I/O 36和网络I/O 38。I/O 32与存储元件40交互,并 且通过设备42与可移动存储介质44交互,以为计算设备10提供存储。 处理单元20可以通过I/O 32通信以存储数据,诸如游戏状态数据和任 何共享数据文件。除了存储装置40和可移动存储介质44之外,还示出 了计算设备10包括ROM(只读存储器)46和RAM 48。RAM 48可以 用于频繁存取的数据。

  用户I/O 34被用来在处理单元20和用户设备(诸如游戏控制器) 之间发送和接收命令。在一些实施方案中,用户I/O可以包括触摸屏输 入。触摸屏可以是电容性触摸屏、电阻性触摸屏或被配置为通过来自用 户的触觉输入来接收用户输入的其他类型的触摸屏技术。显示I/O 36提 供被用来显示来自正玩的游戏的图像的输入/输出功能。网络I/O 38被用 于网络的输入/输出功能。可以在游戏的执行期间使用网络I/O 38。

  通过显示I/O 36产生的显示输出信号包括用于在显示设备上显示 由计算设备10产生的视觉内容的信号,所述视觉内容诸如是图形、用 户界面、视频和/或其他视觉内容。计算设备10可以包括被配置为接收 通过显示I/O 36产生的显示输出信号的一个或多个集成显示器。根据一 些实施方案,通过显示I/O 36产生的显示输出信号也可以被输出到计算设备10外部的一个或多个显示设备,诸如显示器16。

  计算设备10还可以包括可以与游戏一起使用的其他特征,诸如时 钟50、闪存52和其他部件。音频/视频播放器56也可以被用来播放视 频序列,诸如电影。应理解,可以在计算设备10中设置其他部件,并 且本领域技术人员将理解计算设备10的其他变型。

  程序代码可以被存储在ROM 46、RAM 48或存储装置40(其可以 包括硬盘、其他磁性存储装置、光学存储装置、其他非易失性存储装置 或这些的组合或变型)中。程序代码的一部分可以被存储在可编程的 ROM(ROM、PROM、EPROM、EEPROM等)中,程序代码的一部分 可以被存储在存储装置40中,和/或被存储在可移动介质上,所述可移 动介质诸如是游戏介质12(其可以是CD-ROM、盒带、存储器芯片等, 或可以是根据需要通过网络或其他电子通道获得的)。通常,程序代码 可以被发现嵌入在有形的非暂时性信号承载介质中。

  随机存取存储器(RAM)48(并且可能是其他存储装置)可用于 根据需要存储变量以及其他游戏和处理器数据。使用RAM并且RAM 保持在应用程序的执行期间生成的数据,并且RAM的部分还可能保留 用于帧缓冲区、应用程序状态信息和/或需要的或可用于解译用户输入和 生成显示输出的数据。通常,RAM 48是易失性存储装置,并且当计算 设备10关闭或丢失电力时,RAM 48内存储的数据可能丢失。

  当计算设备10读取介质12并且提供应用程序时,可以从游戏介 质12读取信息并且将所述信息存储在存储器设备(诸如RAM 48)中。 此外,来自存储装置40、ROM 46、经由网络访问的服务器(未示出) 或可移动存储介质46的数据可以被读取并且被加载到RAM 48中。尽 管数据被描述为在RAM 48中查找,但是应理解,数据不必须被存储在 RAM 48中,并且可以被存储在处理单元20可访问的其他存储器或可以 被分布在几个介质(诸如介质12和存储装置40)之间。

  应理解,根据本文所描述的任何具体实施方案不一定可以实现所 有的目标或优点。因此,例如,本领域技术人员将认识到,某些实施方 案可以被配置为以实现或优化如本文所教导的一个优点或一组优点而 不一定实现如本文可能教导或暗示的其他目标或优点的方式运行。

  本文所描述的所有过程均可以体现在软件代码模块中并且经由软 件代码模块完全自动化,所述软件代码模块由包括一个或多个计算机或 处理器的计算系统执行。代码模块可以被存储在任何类型的非暂时性计 算机可读介质或其他计算机存储设备中。一些或所有所述方法可以以专 用的计算机硬件来实施。

  根据本公开内容将明了除本文所描述的那些之外的许多其他变 型。例如,根据实施方案,本文所描述的算法中的任何一个的某些动作、 事件或功能可以以不同的顺序执行,或可以被添加、合并或完全被省略 (例如,对于算法的实行而言,并非所有描述的动作或事件都是必需 的)。此外,在某些实施方案中,动作或事件可以被同时执行,例如, 通过多线程处理、中断处理或多个处理器或处理器内核被并行执行或在 其他并行架构上被同时执行,而不是被顺序地执行。此外,不同的任务 或过程可以由可以一起运行的不同机器和/或计算系统来执行。

  结合本文所公开的实施方案描述的各种例示性逻辑块和模块可以 由机器实施或执行,所述机器诸如是处理单元或处理器、数字信号处理 器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或 其他可编程逻辑器件、分立门或晶体管逻辑、分立硬件部件或被设计成 执行本文所描述的功能的其任何组合。处理器可以是微处理器,但在替 代方案中,处理器可以是控制器、微控制器或状态机,其组合等。处理 器可以包括被配置为处理计算机可执行指令的电路。在另一个实施方案 中,处理器包括执行逻辑操作而不处理计算机可执行指令的FPGA或其 他可编程器件。处理器还可以被实施为计算设备的组合,例如,DSP和 微处理器的组合、多个微处理器、一个或多个微处理器连同DSP内核或 任何其他这样的配置。虽然本文主要关于数字技术描述了处理器,但是 处理器还可以包括主要是模拟性的部件。例如,本文所描述的信号处理 算法中的一些或全部可以被实施在模拟电路或混合模拟和数字电路中。 计算环境可以包括任何类型的计算机系统,包括但不限于:基于微处理器的计算机系统、大型计算机(mainframe computer,主机计算机)、数 字信号处理器、便携式计算设备、设备控制器或器具内的计算引擎,仅 举几个例子。

  除非另外特别说明,否则条件性用语,诸如“能(can)”、“可(could)”、“可能(might)”或“可以(may)”等,应在上下文中 如通常所使用的被理解为表达:某些实施方案包括某些特征、要素和/ 或步骤,而其他实施方案不包括所述的某些特征、要素和/或步骤。因此, 这样的条件性用语通常并不意在暗示:特征、要素和/或步骤以任何方式 是一个或多个实施方案所需要的,或一个或多个实施方案必定包括用于 判定--在具有或不具有用户输入或提示的情况下--这些特征、要素和/或 步骤是否被包括在任何具体实施方案中或是否要在任何具体实施方案 中执行的逻辑。

  除非另外特别说明,否则析取性(disjunctive)用语,诸如短语“X、 Y或Z中的至少一个”,应在上下文中如通常所使用的被理解为表示: 项、术语等可以是X、Y或Z,或它们的任何组合(例如,X、Y和/或 Z)。因此,这样的析取性用语通常并不意在并且不应当暗示,某些实 施方案需要至少一个X、至少一个Y或至少一个Z均存在。

  在本文所描述的和/或在附图中所描绘的流程图中的任何过程描 述、要素或块均应被理解为潜在地表示包括用于实施过程中的特定逻辑 功能或要素的一个或多个可执行指令的代码模块、代码段或代码部分。 在本文所描述的实施方案的范围内包括替代的实施方式,在所述替代的 实施方式中,要素或功能可以被删除、不按照所示出的或讨论的顺序执 行,包括大体上同时执行或以颠倒的顺序执行,这取决于所涉及的功能, 如本领域技术人员会理解的。

  除非另外明确说明,否则冠词,诸如“一个(a)”或“一(an)”, 通常应被解释为包括一个或多个所描述的项。相应地,诸如“被配置 成……的设备”之类的措辞意在包括一个或多个所叙述的设备。这样的 一个或多个所叙述的设备还可以被共同配置为执行所陈述的叙述项 (recitation)。例如,“被配置为执行叙述项A、B和C的处理器”可 以包括结合被配置为执行叙述项B和C的第二处理器工作的、被配置为 执行叙述项A的第一处理器。

  应强调,可以对上述实施方案做出许多变型和修改,这些变型和 修改的要素应被理解为在其他的实施例之中。所有这样的修改和变型都 意在被包括在本文在本公开内容的范围内。

《动态流式传输视频游戏客户端.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式(或pdf格式)