相关申请的交叉引用
本申请要求于2018年10月5日提交的美国临时申请序列号no.62/741,761,于2018年7月24日提交的美国临时申请序列号no.62/702,844,于2018年9月4日提交的美国临时申请序列号no.62/726,863,以及于2018年10月5日提交的美国临时申请序列号no.62/742,259的优先权,其全部内容通过引用合并于此。
本公开总体上涉及用于呈现计算机应用的数据的系统和方法,并且特别涉及用于向远程设备呈现在本地设备上执行的计算机应用的数据的系统和方法。
背景技术:
随着更小、更轻以及更可移动的个人设备的增加,以及伴随着内容点播服务的普及,用户对软件应用的期望已经发生变化。例如,软件经常被期望更像流媒体视频内容一样被立即访问;具有较少的资源占用;并易于与他人共享。传统软件(可能需要在使用前购买、下载和安装)可能不符合一些用户的要求。此外,对于越来越多的移动计算设备(包括可穿戴设备),传统软件可能是过于资源密集的,该设备必须与物理大小、形状和重量的限制(限制这些设备的存储,处理能力和电池容量)相抵触,并且可能需要与有限带宽的蜂窝数据方案兼容。
对上述内容的一种响应是使软件应用具有“共享”功能,由此用户可以远程地访问(例如,观察或与之交互)在主机设备上执行的应用。由于应用共享消除了远程用户在其计算设备上安装或执行应用的需要,因此降低了他们的进入门槛,从而鼓励了“共享”应用的使用和增加。
应用共享并非没有潜在的问题。应用共享的一些示例涉及流式传输预渲染的视频数据,这些数据表示应用的视觉输出;然而,由于这种视频数据可能是带宽密集的,因此这些应用的实际使用可能被限于高带宽环境,从而排除它们在许多移动数据方案上的使用。期望主机计算设备与一个或多个远程计算设备共享软件应用,使得所有这种设备的用户可以同时查看该软件应用和/或与该软件应用交互,而无需远程设备在本地安装或执行该软件应用。进一步期望最小化必须在主机设备和远程设备之间传送的数据量,以便于在低带宽环境中使用。
技术实现要素:
公开了用于共享计算设备的软件应用的系统和方法。根据一些示例,具有第一处理器的主机设备经由第一处理器执行应用。主机设备确定应用的状态。生成与应用状态相对应的场景图,并将场景图呈现给具有显示器和第二处理器的远程设备。远程设备被配置为响应于接收到场景图,在没有经由第二处理器执行应用的情况下,向显示器渲染与场景图相对应的视图。
附图说明
图1a-1e示出根据本公开的示例的可以参与应用共享的示例计算机系统。
图2a示出根据本公开的示例的示例计算机系统中的示例数据流。
图2b示出根据本公开的示例的包括多个独立应用的示例计算机系统中的示例数据流。
图3a示出根据本公开的示例的示例计算机系统的组件,该示例计算机系统可以使用集中式场景图向显示器渲染来自多个独立应用的3d数据。
图3b示出根据本公开的示例的关于包括多个独立客户端应用的示例计算机系统的示例客户端应用的方面。
图3c示出根据本公开的示例的关于包括多个独立应用的示例计算机系统的示例渲染器的方面。
图4a-4b示出根据本公开的示例的用于应用共享的系统的示例图。
图5示出根据本公开的示例的用于应用共享的系统的示例图。
图6示出根据本公开的示例的应用共享的示例流程图。
图7示出根据本公开的示例的可体现在便携式或非便携式设备内的系统架构的示例。
具体实施方式
在下面的示例描述中,参考形成其一部分的附图,并且在附图中通过图示的方式示出了可以实践的特定示例。应当理解,在不脱离所公开示例的范围的情况下,可以使用其它示例,并且可以进行结构改变。
图1a至1e示出具有显示器的各种示例计算机系统。图1a示出连接到外部监视器的示例台式计算机。图1b示出包括显示器的示例膝上型计算机。图1c示出包括集成显示器的示例移动设备。图1d示出包括显示器的示例电视。图1e示出包括头戴式显示器的示例计算机系统。本公开不限于任何特定类型的计算机系统、任何特定类型的显示器或将计算机系统连接到显示器的任何特定部件。本公开进一步不限于二维显示器;特别地,可以设想是诸如立体显示器的三维显示器。
本公开设想将集中式渲染技术用于应用共享。例如,在美国专利申请序列号no.15/940,892和no.16/011,413中描述了该技术,在此通过引用将其二者的全部内容并入在此。通过使用集中式渲染技术,如下所述以及在上述应用中,共享应用的本地和远程用户可以独立地渲染图形数据,该图形数据准确地呈现共享应用的令人信服的视图。通过独立地渲染图形数据,而不是例如从主机设备接收预先渲染的图形数据,可以降低在此所述的应用共享系统和方法的带宽需求。
集中式渲染
在一些示例计算机系统中,要在显示器上以图形方式呈现(作为“渲染场景”)的数据包括表示三维空间(“3d数据”)中的对象(诸如包括多边形的2d或3d几何图元)的数据,并且在显示器上呈现3d数据包括呈现与如从沿着视轴(“显示场景”)取向的视图原点观看的三维空间中的对象相对应的图像。例如,在计算机系统上运行的软件应用(诸如使用3d引擎的视频游戏)中,3d数据可以包括三维游戏世界中对象的空间坐标、取向和/或视觉特性,以及描述游戏世界中视图原点和视轴的数据。3d数据还可包括和与要被渲染的对象相关联的纹理有关的数据,与对象有关的着色器参数以及影响对象可以如何被显示的其它信息。例如,在“渲染”或“绘制”阶段期间,游戏可以指导软件和/或硬件“管道”以创建渲染的场景以作为显示的场景呈现在显示器上。该呈现可以包括场景中的内容的视图。这样的内容可以单独地或与“真实世界”内容结合地包括数字内容(例如,覆盖在通过透射显示器观看的真实世界内容上的数字内容)。包括虚拟内容的视图可以表示观察该内容的用户期望看到的内容。例如,当用户处于第一取向时呈现的第一视图可以描绘将从第一取向被看到的内容。如果用户旋转到第二取向,则第二视图可以呈现与如将从第二取向(即从反映用户已关于第一取向旋转的视角)被看到的内容相同的内容。通常,希望所得图像反映用户对视觉世界的期望。特别地,通常希望更靠近视图原点的第一不透明对象遮挡在第一对象后面的第二对象。未正确遮挡的对象可使用户困惑,并且可能无法清楚地呈现对象在三维空间中的位置。在一些示例计算机系统中,遮挡是通过排序来实现的,其中,在距视图原点较远的对象之上对更靠近视图原点的对象进行排序或绘制。
对多个对象进行排序以在显示器上呈现,使得一个对象实际上遮挡另一个对象,这需要有关对象之间的关系的信息,例如三维空间中对象之间的空间关系。一些示例计算机系统利用场景图来表示一个或多个对象(诸如将要被渲染为场景的对象)之间的关系(例如,层次关系)。如在此所使用的,场景图是表示这种关系的任何数据结构。例如,在场景图中,可以将要呈现的渲染对象表示为图形中的节点,其中节点之间的关系表示对象之间的逻辑或空间关系。然后,渲染器可以根据本领域已知的技术来遍历场景图,以实现适当遮挡的方式渲染或准备对象中的至少一个以进行显示。例如,渲染器可以创建具有节点的对象的场景;但是在显示器上的对应呈现只能是所渲染对象的子集,使得在渲染器中被另一个对象遮挡的对象将仅部分呈现在所得显示场景中(例如,使得显示对象的非遮挡部分,而不显示遮挡的部分)。这种选择性显示可能是有益的:例如,如果在给定时间段内仅需要能够查看从第二应用运行的第二对象,则可以有效地遮挡从第一应用运行的第一对象。在一些示例中,场景图是位于包括3d数据的应用和用于渲染该3d数据以呈现到屏幕的渲染器之间的中间数据结构:在一些示例中,应用将场景信息写入场景图,并且场景图稍后可被渲染器用来渲染场景或输出显示的场景。
图2a示出示例计算机系统200中的示例数据流。在系统200中,单个应用210可以将数据写入场景图240,渲染器250可以使用该场景图240来渲染对象220以在显示器290上呈现。例如,对象220可以包括多个对象(例如,多边形),它们一起包括两只人手(手232和手236)的3d表示;并且该应用可以例如在渲染或绘制阶段期间从沿着视轴取向的视图原点的角度引导将要在显示器上被呈现的对象220。在该示例中,手232和手236在握手中互锁;由于手的相对定位,观看者期望关于视图原点和视轴的遮挡手236的部分的手232的一些部分以及包括遮挡手232的部分的手236的一些多边形。应用210可以将描述对象220之间的关系(诸如包括对象220的多边形之间的空间关系)的信息写入场景图240,该信息可用于识别哪些多边形应遮挡其它多边形,也就是说,哪些多边形应当被排序以显示在其它多边形之上。例如,场景图240可以反映多边形234(其属于手232)位于视图原点和包括手236的多边形之间,并且因此应该遮挡手236中的那些多边形;并且多边形238(其属于手236)位于视图原点和包括手232的多边形之间,并因此应当遮挡手232中的那些多边形。然后,渲染器250可以输出对象220或对象220的子集(例如,仅手232;仅手232的未遮挡部分;或仅手236),以用于与所期望的遮挡一致的经由显示器290的呈现。
图2b示出使用两个独立应用的示例计算机系统201中的示例数据流。当图2a的示例被扩展以渲染由多个独立应用修改的场景时,如图2b中所示,可能出现渲染问题。例如,在示例计算机系统201中,应用212和应用214二者将数据写入场景图240,以向单个显示器290渲染它们相应的3d数据。在图2b中,应用212尝试渲染和呈现对象222(其包括包含手232的对象);以及应用214拒绝渲染和呈现对象224(其包括包含手236的对象)。图2b中所示的示例可能具有实现要渲染的对象的实际遮挡的困难:如果应用212和应用214是独立的(“沙盒”)应用,则应用212无法访问与应用214的对象224(包括手236及其组成对象)有关的数据,并且同样,应用214无法访问与应用212的对象222(包括手232及其组成对象)有关的数据。也就是说,在一些示例中,应用212和应用214都无法完全识别对象222和对象224之间的关系。因此,应用212和应用214都无法将信息写入到场景图240,该信息对于识别哪些对象遮挡其它对象或在显示器上应当按什么顺序对对象进行排序可能是必需的。此外,各种子系统(诸如照明、阴影、动画、粒子和碰撞检测)可能无法如预期表现。结果可能是不切实际、笨拙且令人困惑的渲染图形数据。此外,由于这样的渲染系统可能无法利用渲染优化(诸如剔除),因此这些系统可能在计算上效率低下。
诸如在美国专利申请序列号no.15/940,892和nol.16/011,413中描述的集中式渲染,提供了针对在从多个独立应用中渲染3d数据的系统中可能发生的这种问题的解决方案。在多个独立应用提供将要被渲染的3d数据的系统(诸如图2b中的示例计算机系统201)中,可以使用集中式场景图代替传统场景图,诸如图2b中的场景图240。如在此所述,在一些示例中,集中式场景图可包括从多个单独的输入源接收3d数据的系统;将与该3d数据相对应的信息写入中心位置;并维护该信息以供渲染器访问,该渲染器基于该3d数据创建包括对象的渲染场景。该渲染场景可用于生成反映现实对象遮挡的输出(诸如图形输出);计算效率;视觉效果(诸如灯光和阴影投射);或物理效果(诸如碰撞检测)或否则在不利用集中式场景图的系统中将很难或不可能实现的被遮挡的对象的部分显示。
在一些示例中,示例计算机系统包括多个应用,每个应用包括表示公共3d环境中的一个或多个对象的3d数据。多个应用中的每个应用都可以存在于“沙盒”环境中,使得其对于其它应用是不可知的:例如,每个相应应用的数据可以独立于每个其它应用的数据;每个应用可能无法访问每个其它应用的数据;并且尽管应用中的每个应用的3d数据可对应于相同的3d环境,但是每个应用都维护自己的3d环境实例。例如,每个应用可以表示在线多玩家视频游戏中的一个玩家,其中每个玩家都存在于同一游戏世界或3d环境的实例中,但不能直接访问其他玩家的数据。在此类示例中,可能需要在游戏世界的单个实例中同时渲染所有玩家,但是可能不期望(或在计算上禁止)针对每个玩家维护渲染每个其他客户端参与者的3d数据所需的信息。此外,出于安全目的,可能期望限制对于其他玩家可用的玩家信息。
在一些示例中,多个沙盒应用中的每个沙盒应用可以独立地将与其3d数据相对应的信息写入本地场景图,该信息随后被写入公共的集中式场景图。然后,可以由渲染器遍历集中式场景图,以基于由每个应用提供的集合3d数据来渲染场景以将其作为图像呈现在显示器上。通过将来自多个沙盒应用中的每个沙盒应用的3d数据传递到单个集中式场景图,渲染器可以应用有益的技术,诸如遮挡、光照效果和渲染优化(诸如表面剔除),该技术需要或受益于同时了解所有应用的3d数据。这些益处是在限制每个沙盒应用所需的计算开销的同时实现的:从单个应用的角度来看,所有应用需要做的就是更新单个场景图以反映其3d数据,其中由系统的另一个组件执行其它操作。此外,可以通过维护沙盒应用之间的分离来获得安全性益处。
图3a示出示例计算机系统300的组件,该示例计算机系统300可以使用集中式场景图向显示器渲染来自多个独立应用的3d数据。所示示例利用客户端-服务器拓扑;然而,本公开不限于客户端-服务器示例。在示例计算机系统300中,第一客户端应用310和第二客户端应用320各自(在一些示例中,通过网络)将3d数据传送到客户端-服务器接口330。在一些示例中,客户端应用310和320是彼此独立地操作并将其3d数据独立地传送到客户端-服务器接口330的“沙盒化”应用。客户端-服务器接口330可以从客户端应用310和320接收更新的3d数据,并且(在一些示例中,通过网络)将该3d数据传送到服务器侧主机应用340。在一些示例中,客户端-服务器接口330使用多线程技术来使用多个处理器线程将3d数据接收、处理和/或传送给主机应用340。在一些示例中,客户端-服务器接口包括用于控制(诸如通过节流)3d数据被传送到主机应用340的速率的逻辑。主机应用340可以使用从客户端-服务器接口接收的3d数据来更新集中式场景图350,使得集中式场景图350反映从客户端应用310和320接收的3d数据。在一些示例中,集中式场景图350包括场景图的多个版本,并且已知的版本控制技术用于允许对集中式场景图350的更新并行发生。然后,渲染器360可以遍历集中式场景图350,适当地应用优化和效果,并生成将要被显示在诸如计算机监视器的显示器370上的输出(例如,图形输出包括客户端应用310和320中的至少一个客户端应用的数据,并且在一些实施例中,仅包括一个客户端应用的遮挡部分而没有遮挡应用数据)。
图3b示出关于图3a中所示的示例计算机系统300的示例客户端应用310的方面。在所示的示例中,3d数据312表示将要在显示器370上被呈现的3d环境中的图形对象(诸如几何图元,例如多边形)。3d数据312可以由客户端应用310更新(314)。例如,如果客户端应用310是具有每秒迭代六十次的渲染循环的应用,则客户端应用310可以每秒六十次更新3d数据312以反映在应用的操作过程期间应被反映在渲染输出中的该数据的改变。在一些示例中,3d数据312被表示为本地场景图316,该本地场景图316对于每个客户端应用310可以是本地的。在一些示例中,本地场景图316可以包括与集中式场景图350中的数据相对应的数据(诸如节点)。随着3d数据312被更新(314),客户端应用310可以更新本地场景图316以反映3d数据312的最新版本。随着本地场景图316被更新,客户端应用310可以使用它来生成(317)客户端数据318。在一些示例中,客户端数据318可以完整地表示本地场景图316。在一些示例中,客户端数据318可以表示自从先前的客户端数据318被发送到客户端-服务器接口330以来对本地场景图316所做的改变。例如,客户端数据318可以包括被添加到本地场景图316或从本地场景图316删除的节点;本地场景图316中节点之间的关系的改变;或本地场景图316中节点的特性的改变。在一些示例中,客户端数据318可使用标识符(诸如与场景图节点相对应的标识号)来识别来自本地场景图316的数据与集中式场景图350上的对应数据之间的关系。客户端数据318然后可以被传送到客户端-服务器接口330,以最终传送到主机应用340。在一些示例中,客户端数据318到客户端-服务器接口330的传送可以通过网络发生。在一些示例中,可以将客户端助手应用与客户端应用310结合使用,以从本地场景图316或3d数据312生成客户端数据318。
关于客户端应用310所描述的方面可以类似地描述客户端应用320,或包括示例计算机系统300的其它客户端应用(连同客户端应用310一起)。本领域技术人员将认识到,在此描述的系统和方法可以被扩展为包括任何数量的客户端应用和客户端数据,并且本公开不限于任何这种数量;此外,随着客户端应用增加的数量,一些益处(例如,计算效率上的提高)可能变得更加明显。如上所述,客户端应用310和320可以是不共享数据或功能的沙盒应用。例如,在示例计算机系统300中,客户端应用320可以具有属于客户端应用310而与3d数据312和本地场景图316无关的其自己的3d数据和本地场景图。然而,在包括示例计算机系统300的一些示例中,单个客户端服务器接口300由多个客户端应用(诸如客户端应用310和320)共享。
尽管关于3d数据描述了上述示例,但是本公开不限于三维数据或3d环境中的数据。可以将以上示例概括为任意数量的维度的图形数据,包括2d图形数据。
图3c示出关于图3a和图3b中所示的示例计算机系统300的示例渲染器360的方面。在一些示例中,渲染器360包括主机应用340的一部分。在一些示例中,渲染器360可以是示例计算机系统300的另一组件的一部分,或者可以是单独的组件或应用。在一些示例中,渲染器360可以在与示例计算机系统300的一个或多个组件不同的物理硬件中实现,并且可以通过网络与那些组件中的一个或多个组件通信。
在图3c中所示的示例中,渲染器360在集中式场景图350的版本352上操作。在该示例中,渲染器的作用是基于集中式场景图350的版本352创建包括诸如用于在显示器370上呈现的输出或图形输出的数据的渲染场景。作为该过程的一部分,渲染器360可以使用已知的场景图遍历技术遍历(362)版本352。在遍历362期间或之后,渲染器360可以适当地更新(364)集中式场景图350以反映遍历的结果。例如,作为遍历362的一部分,渲染器360可以识别应当从集中式场景图350中被删除的孤立节点。在遍历362和/或更新364之后,渲染器360可以将各种优化366应用于场景。例如,渲染器360可以剔除被遮挡或不可见的表面,以避免消耗不必要的计算资源。在遍历362和/或更新364之后,渲染器360可以将一个或多个视觉效果367应用于场景。例如,在一些示例中,渲染器360可以应用照明效果或阴影效果;应用一个或多个着色器;应用粒子效果;和/或应用物理效果。最后,渲染器360可以将数据输出到图形输出管道,其结果可以在显示器370上显示输出。
在一些情况下,可以将优化应用于上述系统和方法,以减少场景图数据的大小,例如,将要通过计算机网络(诸如经由客户端-服务器接口330)发送的场景图数据的量。例如,在场景图包括对于渲染的图形输出可能不可见的节点(或参考资产)的情况下,这些节点可以从将要被发送的场景图数据中排除。同样,当从场景图中移除引用资产的节点时,可以卸载资产。此外,为了提高性能,仅在需要渲染节点时才可以插入节点,当节点可能对渲染的场景没有明显影响时(例如,用户可能无法感知节点的缺失),避免在场景图形数据中包括节点的开销。
在一些情况下,可以将不同级别的详细信息(lod)应用于资产,以减小总体数据大小。不同lod可以帮助确保资产不会比特定查看上下文中所保证的更加数据密集。例如,当预期的显示大小不能保证较高分辨率图像的数据大小时,可以用低分辨率图像代替较高分辨率图像。这可以例如通过减少传输比必要的更大的资产(例如,更高分辨率的图像)所需的网络带宽量来改善系统性能。
应用共享
在此公开的系统和方法的示例可以用于允许多个客户端共享(例如,查看并与之交互)在单个主机客户端上执行的公用软件应用的内容。可能期望避免在与主机客户端进行通信的每个远程客户端上安装软件应用的需要;此外,可能期望跨应用的多个用户同步输入和控制信息。在客户端具有有限的计算资源(例如磁盘存储)或用户可能缺乏时间,复杂或不愿意安装软件应用的示例中,这可能是有利的。类似地,软件提供商可能希望通过减少与该应用交互所需的步骤数量(例如,通过允许用户共享该应用的另一用户版本)来鼓励用户使用该软件应用。此外,在此公开的系统和方法可以通过在每个远程设备处本地地渲染内容(例如,通过利用上述集中式渲染系统和方法,而不是通过将视频输出从主机设备传输到远程设备),来最小化网络带宽使用。在一些示例中,用于托管、共享、查看软件应用或与软件应用交互的计算设备可以对应于头戴式显示设备,诸如对应于上述图1e中所示的示例设备;共享内容可以显示在头戴式设备的显示器上;并且用户可以经由头戴式设备的传感器或输入设备与共享软件应用进行交互。
图4a示出用于实现上述应用共享的示例的示例系统400。在该图中,四个相应的计算设备(410、420、430和440)的四个用户(praveen、lisa、leonid和naruto)希望共享三个单独的软件应用(象棋、计算器和拼字游戏),其中每个应用仅在客户端计算设备中的一个上执行。系统400包括服务器450,该服务器450在一些示例中可以对应于云服务器。在示例系统400中,计算设备410、420、430和440中的每一个与服务器450通信,但是不必与其它计算设备直接通信。
在示例系统400中,三个软件应用(象棋、计算器和拼字游戏)中的每个软件应用在客户端计算设备410、420、430或440中的一个上执行,但是可以由未在其上执行的客户端计算设备中的每一个查看和/或与之交互。例如,如图所示,象棋应用正在设备410上执行;并且设备420、430和440中的每一个都能够通过渲染相应设备本地的象棋场景图来查看象棋应用(诸如上述,可以优选地使用集中式渲染系统和方法将场景图渲染在显示器上)。类似地,在该示例中,计算器应用被示为在设备410上与象棋应用同时运行,并且设备420、430和440中的每个设备能够经由相应设备本地的计算器场景图来渲染计算器应用的视图。另外,在该示例中,示出了拼字游戏应用在设备420上执行,并且设备410、430和440中的每个设备能够经由在相应设备本地的拼字游戏场景图来渲染拼字游戏应用的视图。这样,四个设备410、420、430和440中的每个设备能够查看三个应用中的每一个:通过本地执行应用(如在设备410中执行象棋应用和计算器应用),或通过渲染来自本地场景图的视图(如在设备430中存储象棋应用、计算器应用和拼字游戏应用中的每一个的本地场景图)。如下所述,服务器450操作以在设备410、420、430和440之间交换数据。在一些示例中,诸如下述,服务器450可以维护与每个应用(例如,象棋、计算器、拼字游戏)相对应的场景图的其自己的本地副本;这可以为加入预先存在的应用共享会话的设备提供基础场景图。
在示例系统400中,主机系统执行应用(例如,设备410执行象棋应用)并与一个或多个远程设备(例如,设备420、430和440)共享。在不将应用安装在设备本身上的情况下,远程设备查看共享的应用并与之交互可能是有利的。例如,在所示的示例中,远程设备420和440没有安装象棋应用;当发起共享会话时,托管象棋应用的设备410可以向远程设备420和440提供必要的数据,诸如所需的资产。然而,在一些示例中,可以通过在远程设备上安装这样的数据来减少或避免提供该数据的开销。例如,在所示的示例中,远程设备430在加入共享会话之前在设备上安装了象棋应用,这可以消除设备410向远程设备430提供用于象棋应用的资产和其它数据的需要。然而,在该示例中,象棋应用未在远程设备430上执行(即,不是由远程设备430的处理器执行),而是在设备410上执行,例如,在初始化期间,远程设备430依赖于针对所需的应用数据的象棋应用的其自身的本地安装。
图5示出主机设备(例如,设备410)执行应用510(例如,象棋)并与远程设备(例如,设备420)共享该应用以使得远程设备的用户可以查看诸如上面关于示例系统400所述的应用并与之交互的示例。如上所述,远程设备不需要安装该应用:例如,在应用共享会话开始时,主机设备可以向远程设备提供所需的初始化数据,诸如所需的资产(例如,纹理,模型数据,音频文件,粒子效果,动画数据),而无需远程设备执行单独的安装过程。诸如下述,在共享应用时,主机设备可以向远程设备提供应用状态数据和/或一个或多个场景图。在一些示例中,远程设备可以向主机设备提供输入数据(例如,呈现按钮输入,手势输入,触摸输入);用户数据(例如,用户的身份详细信息、活动历史记录和/或社交媒体在场信息);和/或传感器数据(例如gps坐标、相机数据、麦克风数据)。在图5中,应用510表示在主机设备410上执行的应用。在一些示例中,多个应用可以在设备410上同时执行,诸如在图4a中的设备410上执行的象棋和计算器应用;尽管所示示例描述了单个共享应用,但可以将其扩展到多个共享应用。在一些这样的示例中,主机设备可以维护并共享两个或更多个独立的场景图(例如,三个场景图,每个场景图对应于三个共享应用中的一个)。如上所述,在一些示例中,单个场景图可以对应于两个或更多个应用(例如,与象棋和拼字游戏相对应的单个场景图)。此外,如在此所述,尽管远程设备420关于主机设备410是远程的,但是其不必与主机设备410在物理上或在电子上分离。在一些示例中,远程设备420可以物理地或电子地连接到主机设备410,或者可以是单个物理设备的组件或模块。这样,可以在平台级别实现应用共享。例如,可以在单个平台(诸如移动设备操作系统(例如,ios、android)或头戴式设备的操作系统)的组件或区域之间共享应用。在一些示例中,可以跨平台以该方式共享应用;例如,这可以实现以下行为:在第一平台的用户(例如,运行ios的移动设备)和第二不同平台的用户(例如,运行自定义操作系统的头戴式虚拟现实系统)之间共享应用的行为。
共存服务540是使主应用能够与远程设备共享的助手应用。在该示例中,共存服务540在主机设备410上与应用510同时执行并且关于应用510沙盒化,并且使应用510能够与远程设备420共享。在一些示例中,如下所述,应用510与其共享的每个设备(例如,图4a中的设备420,430,440)可以执行相应的共存服务应用。例如,在图5中所示的示例中,远程设备420执行其自己的远程共存服务570,该远程共存服务570可以包括主机共存服务540的一些或全部特征。例如,远程共存服务570可以包括主逻辑循环574和远程渲染引擎客户端576。
在所示的示例中,主机共存服务540合并了用于经由云服务器450向远程设备(例如420)发送数据(例如图形数据、输入数据)和从远程设备接收数据的传输功能。例如,在示例中,本地端点542可以充当用于与应用510交换数据的终端,并且端点550可以充当用于与云服务器450交换数据的终端。在该示例中,主机共存服务540进一步包括主应用逻辑循环544,该主应用逻辑循环544可以执行与主机共存服务540相关联的各种功能。这些功能可以包括在主机设备410和远程设备之间进行数据交换的中介;从共享应用510添加和移除远程设备;用户界面功能(可包括表示远程用户的“头像”功能);聊天功能;文件传输(例如,在主机设备410和诸如远程设备420的远程设备之间交换数据,包括与应用510相关联的资产);和/或生成图形输出。共存服务540的图形输出(其可以包括场景图)可以被呈现给渲染引擎客户端546,该渲染引擎客户端546在一些示例中可以对应于以上关于3a和图3b所述的客户端-服务器接口330。渲染引擎客户端546然后可以向渲染引擎服务器560(其在一些示例中可以对应于以上关于图3a和图3b描述的服务器340)呈现图形数据,以被渲染在主机设备410上(例如,如以上关于图3c中所示的过程360所述)。然而,在一些示例中,共存服务540可以仅包括有限的特征,并且可以是在没有任何用户输入或显示输出的情况下执行的后台处理。
参考图5中所示的示例,应用510可以包括输入接收器512,该输入接收器512可以接收和处理来自设备410的主机输入506(例如,经由与设备410相关联的输入服务)。主机输入506可以包括经由诸如键盘或鼠标的传统输入设备;经由头戴式设备的传感器(例如相机、眼睛跟踪传感器、麦克风);经由手持输入外围设备;或通过任何其它合适的设备接收的输入。在一些示例中,输入506可以由与头戴式增强现实设备相关联的一个或多个传感器或输入设备来提供。在一些示例中,诸如下述,代替来自主机设备410的主机输入或除了主机输入之外,输入接收器512可以接收由远程设备提供的输入。
应用510可以进一步包括主应用逻辑级514。由512接收的输入可以作为输入被提供给应用逻辑级514。应用逻辑级514可以包括主应用循环,该主应用循环接受输入,执行应用逻辑(例如,象棋应用的游戏逻辑),维护一些应用状态,并提供一些输出(例如,显示输出)。应用逻辑级514可以包括确定用于主机设备410以及与共享该应用的每个远程设备(例如,远程设备420)的应用的场景图;在一些示例中,本地设备和远程设备中的一个或多个可以共享相同的场景图。以上关于图3b中所示的客户端应用310描述了由应用逻辑级514执行的示例图形处理。然而,本公开不限于任何特定应用或任何特定应用逻辑514。
应用510可以进一步包括渲染引擎客户端516,该渲染引擎客户端516在一些示例中可以对应于以上关于图3a和图3b所述的客户端-服务器接口330。在一些示例中,渲染引擎客户端516可以与上述渲染引擎客户端546相同,或者可以与上述渲染引擎客户端546共享公用组件。从应用逻辑级514,应用逻辑的显示数据可以被提供给渲染引擎客户端516,例如,诸如以上关于图3a和图3b所述的。渲染引擎客户端516可以是主机设备410本地的客户端实用程序,其基于应用逻辑级514的输出来生成一个或多个场景图,每个场景图对应于应用510。在一些示例中,应用510可以生成与应用510将要与之共享的每个设备(例如420)的场景图。这样的场景图可以是相同的,或者对于一个或多个设备是唯一的。在一些示例中,可以基于每个远程设备来优化场景图,诸如通过仅包括每个远程设备所需的数据。例如,远程设备420可以向主机设备410提供指示远程设备420的用户的视野和相机原点的数据;主机设备410可以相应地计算场景图的哪些元素对于远程设备420的用户可以是可见的(即,哪些元素在与相机原点和视野相对应的视图中可以是可见的);以及从场景图中为远程设备420删除不可见元素。还可以基于有关场景图中哪些元素在远程设备上可见的信息(例如,远程设备上的详细信息设置级别或分层信息)执行类似的优化。
为了向主机设备410的本地用户呈现应用510的视图(例如,表示用户的应用视图),渲染引擎客户端516可以生成与本地用户的视图相对应的场景图,并且然后向渲染引擎服务器560呈现该场景图以及相关联内容,该渲染引擎服务器560可以在设备410的显示器上显示应用510的对应视图。该过程可以对应于以上关于图3a和图3b所述的过程。渲染引擎客户端516可以但不必直接向渲染引擎服务器560呈现场景图和相关联内容。在一些示例中,渲染引擎客户端516可以将场景图和内容呈现给端点,套接字(socket),管道或任何其它合适的进程间通信机制,以呈现给渲染引擎服务器560。
在一些示例中,渲染引擎服务器560可以在主机设备410本地;在一些示例中,渲染引擎服务器可以在远程设备(诸如专用服务器)上,或者在连接到设备410的另一设备上,诸如在对等网络中。渲染引擎客户端516和渲染引擎服务器560都不需要是专用的硬件模块;在一些示例中,渲染引擎客户端516和/或渲染引擎服务器560可以是纯软件模块,诸如单独的应用(例如,在单个平台上同时运行的单独的应用)或多线程应用的单独的线程。然而,在一些示例中,可以在诸如专用服务器和/或专用图形处理硬件(例如,gpu)的专用硬件上执行一个或多个渲染引擎功能(例如,由图3c中所示的渲染器360执行的那些)。通过在专用硬件上执行计算密集型功能,可以在用户设备(例如,设备410)上释放计算资源。当用户设备包括电池寿命,计算资源和物理空间非常宝贵的移动硬件(例如,移动电话,头戴式耳机)时,这可能特别有价值。
渲染引擎服务器560可以包括诸如上述的集中式场景图和渲染器。在一些示例中,多个客户端应用(例如,在设备410上同时执行的象棋应用和计算器应用)可以同时将内容和/或场景图数据提供给渲染引擎服务器560。此外,在一些示例中,渲染引擎服务器560包括客户端应用代码,并且可能对于渲染引擎客户端516呈现给它的这些数据的特定来源是不可知的。这可以允许其与各种应用(诸如上述的象棋和计算器应用)一起使用,而无需渲染引擎服务器包括每个这种应用的自定义逻辑。同样,这可以允许诸如象棋和计算器应用的应用与共存服务合作,以在无需任何自定义编程的情况下启用应用共享功能,鼓励此类应用的生产、采用和使用。
在图5中所示的示例中,渲染引擎客户端516可以将图形数据提供给主机共存服务540。在一些示例中,可以将该图形数据提供给端点(例如,端点520),或者提供给套接字或另一种合适的进程间通信机制。图形数据可以包括旨在呈现给远程设备420的远程图形数据。例如,远程图形数据可以包括与应用510相对应的将要被渲染并显示在远程设备420上的场景图或部分场景图。对于这种远程图形数据,端点520可以将该远程图形数据提供给与该远程设备相对应的另一个端点550;从端点550,数据可以被传送到在远程设备420上执行的远程共存服务570(例如,经由云服务器450和/或与远程共存服务相对应的远程端点580)。
在一些示例中,一旦在远程共存服务570处接收到远程图形数据(例如,包括场景图),则可以将其提供给远程共存服务的主逻辑循环574,该主逻辑循环574可以使用远程图形数据确定在远程设备420上被渲染的视图。例如,诸如上述,远程共存服务570可以生成和更新本地场景图。在一些示例中,可以将远程图形数据直接提供给渲染引擎客户端576。然后,渲染引擎客户端576可以将数据提供给渲染引擎服务器590,在这里可以将其渲染到显示器,诸如设备420的显示器。
在一些示例中,远程设备420不能与应用510交互,而是充当仅渲染应用的视图的观众。然而,在其它示例中,远程设备420可以诸如经由提供给远程设备420的输入与应用510交互。在一些情况下,该输入可以影响远程设备对应用510的视图(例如,通过调节显示参数),而无需返回给主机设备410的通信。但是,在一些示例中,远程设备420可以将输入提供回主机设备410,该输入可以作为输入传递给在主机设备410上执行的应用510。例如,如果应用510是象棋应用,则远程设备420可以向主机设备410提供指示用户期望的棋步的用户输入。在所示示例中,远程共存服务570包括远程输入接收器572,该远程输入接收器572接收远程设备420的输入(例如,经由输入服务566)。远程输入接收器572和输入服务566可以分别对应于以上关于主机设备410描述的输入接收器512和输入服务506。例如,远程输入接收器572可以接收经由传统输入设备(例如,键盘或鼠标);经由头戴式设备的传感器;经由手持输入外围设备;或通过任何其它合适的设备提供的输入。该输入数据可以被作为输入提供给远程共存服务570的主循环574。
在输入数据影响远程设备的应用视图而不影响应用自身执行的示例中,主循环574可以确定输入数据应如何影响应用的视图,并向渲染引擎客户端576(其随后将图形数据提供给渲染引擎服务器590)呈现对应的图形数据。在输入数据被传送回主机设备410的示例中,主循环574可以将数据呈现给端点580,该端点580可以将数据传送回主机共存服务540的端点550。从此处,可以将数据传送回应用510(例如,经由端点542和520以及输入接收器512),在这里它可以作为远程输入被呈现给主应用逻辑循环514。应用逻辑循环514然后可以将远程输入合并到应用510的更新场景图中;例如,在象棋应用中,应用逻辑循环514可以根据从远程设备接收的用户输入来更新游戏状态,以相应地移动棋子;以及生成反映棋子的更新位置的新的场景图。然后可以诸如经由上述机制将更新的场景图呈现给远程设备420。这样,远程设备420能够向应用510提供输入,并接收考虑远程设备的输入的更新的场景图。
代替上述远程图形数据或除了上述远程图形数据之外,由渲染引擎客户端516提供的图形数据还可以包括旨在在主机设备410上渲染和呈现的主机图形数据。可以经由端点520将该主机图形数据呈现给主机共存服务540,例如作为对主循环544的输入。然后,可以将该图形数据呈现给主机共存服务540的渲染引擎客户端546;从此处,可以将其呈现给主机渲染引擎服务器560。渲染引擎服务器560可以渲染单个视图,该单个视图合并了来自诸如上述两个来源的图形数据:例如,与本地应用510相对应的图形数据,以及与主机共存服务540相对应的图形数据。
虽然图5中所示的示例示出在主机设备上执行并且与远程设备共享的单个应用510,但是该示例可以被扩展到在主机设备上执行并且与远程设备共享的多个应用。如上所述,用于这种多个应用的图形数据可以由单个场景图(例如,对应于两个应用的一个场景图)或者由两个或更多个场景图(例如,两个场景图,每个场景图对应于一个应用)表示。此外,在图5中所示的示例中描述的远程设备420还可以执行可以与其它设备(包括设备410)共享的其自己的附加应用。例如,图4a示出执行与设备410共享的拼字游戏应用的设备420。在此类示例中,关于远程设备420执行的那些应用,远程设备420可以被认为是主机设备。设备和共享应用的其它配置将是显而易见的,并且本公开不限于任何特定的这种配置。例如,可以在单个平台(例如,ios)上运行的应用之间,在不同平台(例如,ios和android)上运行的应用之间或一些组合之间共享应用。
图6示出流程图,该流程图示出根据本公开的在执行应用(例如,图5中的应用510,其可以是象棋应用)的主机设备(例如,图4a和图5中的设备410)与共享那个应用的远程设备(例如,图4a和图5中的设备420)之间的示例数据流(如关于该示例所使用的,“主机”是指主机设备410本地的进程和数据,该主机设备410是在共享会话中执行应用510的设备,而“远程”是指远离设备410的进程和数据,诸如在设备420处的进程和数据。设备420可以下载或安装应用510,但不在共享会话中执行它)。在图6中所述的示例进程中,远程设备的用户可以查看该应用并与之交互,而无需将该应用安装在远程设备上。在示例的阶段610处,主机设备410的用户发起应用510的共享。可以使用诸如以下进一步描述的任何合适的技术来发起应用共享,例如通过与经由主机设备410的上下文菜单或系统对话框呈现的“共享”选项进行交互(在一些示例中,远程设备的用户而非主机设备可以发起共享应用)。作为响应,在阶段612处,在设备410上执行的主机共存服务(例如,主机共存服务540)注册应用610以进行共享并执行任何必要的初始化。主机共存服务(例如,经由服务器450)与正在共享应用510的远程共存服务(例如,在设备420上执行的远程共存服务570)通信(在一些示例中,诸如在远程设备未下载或安装应用510的情况下,该阶段可以包括向远程设备发送所需的资产或其它应用数据)。作为响应,在阶段614处,远程共存服务可以创建与应用510相对应的远程设备420本地的远程场景图(或在该示例中为子场景图)。如上所述,在远程设备420上执行(或与之通信)的渲染引擎服务器可以渲染诸如以上关于图3a-3c所述的该远程场景图,并且提供与属于设备420的用户的应用510的视图相对应的显示输出(例如,在设备420的显示器上)。
在阶段620处,主机设备410可以确定应当被呈现给诸如上述的设备420的应用510的场景图(例如,与设备420的用户的相机位置相对应的应用510的3d相机视图),并且向主机共存服务540发送反映场景图的数据。在阶段622处,当接收到反映场景图的数据时,主机共存服务540例如经由服务器450使用远程端点、套接字或用于传送数据的其它合适机制将数据转发至远程共存服务570。在阶段624处,当接收到反映场景图的数据时,远程共存服务570更新或替换(例如,经由渲染引擎客户端576)在如上所述的阶段614处创建的远程场景图。诸如上述,然后可以经由渲染引擎服务器590在设备420处渲染该远程场景图。通过仅将该更新的数据从主机设备传送到远程设备,与发送原始图像数据(例如,视频帧)或其它存储密集型数据相比,带宽使用受到限制。
设备410可以针对附加设备(诸如远程设备430和440,并且包括主机设备410)在阶段620处重复该过程。对于每个相应的设备,诸如上述,渲染引擎客户端516可以确定应当被呈现给该设备的应用510的场景图。对于将要在主机设备410上被显示的场景图,渲染引擎客户端516可以生成或更新场景图,并将其呈现给渲染引擎服务器560以进行渲染,诸如以上关于图3a-3c所述。
在其中远程设备420经由提供输入来与应用510交互而不是仅被动地显示应用510的视图的示例中,在阶段630处,远程共存服务570可以例如经由与输入服务566通信的远程输入接收器572接受来自远程设备420的输入(其行为可以对应于如上所述的主机输入接收器512和输入服务506)。在阶段632处,远程共存服务570可以将输入事件数据转发至主机共存服务540,该主机共存服务540在阶段634处接收输入事件数据。在阶段636处,主机共存服务540可以将输入事件数据转发至本地应用510,在此可以在阶段638处(例如由输入接收器512)接收它,并将其作为输入提供给应用逻辑514。
在阶段640处,应用逻辑514可以根据诸如上述从主机设备410接收的主机输入来更新主机场景图,并且在其中远程设备(例如,远程设备420)提供输入的示例中,应用逻辑514可以在更新场景图时另外合并该远程输入。例如,如果应用510是象棋应用,并且由应用510在阶段630接收到的远程输入对应于移动棋子的远程设备420的用户,则应用510可以相应地更新游戏状态(这可能影响被呈现给共享该应用的所有设备以及主机设备410的数据);并生成反映新游戏状态的对应更新场景图(例如,在棋盘上的其更新位置中的棋子)。
在阶段650处,主机应用510基于阶段640的结果向远程设备420发送更新。在阶段652处将这些更新提供给主机共存服务540,并且在阶段654处提供给远程共存服务570。阶段652、652和654可以分别对应于上述的阶段620、622和624,并且当主机设备410托管应用510并且远程设备420查看其应用的共享版本和/或与之交互时,上述步骤可以无限重复。在一些示例中,可以通过调整由主机设备提供更新的速率来控制上述过程的带宽使用。例如,增加在更新之间(例如,在阶段620与阶段650之间)经过的时间可以减少所需的带宽。在美国专利申请序列号no.15/940,892和no.16/011,413中描述了用于适应数据吞吐的变化以及用于使可具有不同数据吞吐速率的设备同步的示例系统和方法。另外,在一些示例中,可以通过限制更新中发送的场景图的内容来优化主机应用510和远程设备420之间的更新的数据大小。例如,如上所述,主机应用可以确定(例如,在阶段650处)在远程设备420处可能不可见的(例如,因为它们存在于远程设备420的预测的相机视图之外)的场景图的元素,并且可以在向远程设备420发送场景图之前,从场景图中剔除那些元素。
在一些示例中,云服务器或其它合适的存储装置可以维护共享应用的基本场景图,以便于新的远程设备加入已经进行的共享会话。例如,关于图4a,云服务器450可以维护分别对应于象棋应用、计算器应用和拼字游戏应用中的每个应用的场景图。在这样的示例中,当应用与附加远程设备(例如,远程设备430)开始共享时,该设备最初可以采用云服务器上存在的基本场景图呈现,使新的远程设备可以加入进行中的应用,而没有创建与应用相对应的新的场景图的开销。在这样的示例中,主机设备410可能有必要向远程设备呈现增量更新(例如,自先前更新以来的变化);由于基本状态场景图始终可从云服务器450获得,因此远程设备仅需要获得基本状态场景图以及自对应基本状态以来的变化,以便重建与应用510的当前状态相对应的场景图。
在上述示例中,主机设备(例如,设备410)执行应用,并与远程设备(例如,设备420)共享该应用。主机设备生成场景图并将其发送到远程设备,远程设备从该场景图渲染视图以用于显示。在上述示例中,主机设备还为其自身生成场景图(该场景图可以是或可以不是被发送到远程设备的同一场景图),并且主机设备使用场景图渲染视图以在主机设备上显示。在主机设备和远程设备属于希望参与同一共享应用的两个用户的情况下,例如,主机设备的用户可能希望在共享的象棋应用中扮演远程设备的用户,这可能是期望的。然而,在一些示例中,主机设备可以简单地向每个远程设备发送场景图,而无需为其自身渲染视图。
图4b描述一个这种“无头(headless)”示例。在图4b中所示的示例400a中,主机设备(例如,图4b中的450a)可以是专用主机实体,诸如数据中心、云服务器或一个或多个联网服务器,其被配置用于与诸如上述的远程设备(例如,远程设备410a、420a、430a和440a)共享应用的主要目的。例如,在主机设备可以访问比与其通信的远程设备更大的计算资源的情况下,该配置可能是有利的。在所示示例中,主机设备450a执行一个或多个应用(例如,象棋、计算器、拼字游戏)。诸如图4b中所示,主机设备450a可以针对那些应用中的每个应用生成并维护场景图,并且诸如上述向每个远程设备发送那些场景图。然后,每个远程设备可以确定本地视图,并且可以将该视图显示给其相应的用户。
在主机设备上执行的逻辑可以关于远程设备更新诸如上述的应用的状态。例如,主机设备逻辑可以接收远程设备的更新的位置,例如,当设备的用户从客厅移动到厨房时的更新。当用户走进厨房时,可以从远程设备向主机设备提供新位置;然后可以从主机设备向远程设备提供更新的场景图和/或相关联的资产,该远程设备可以随后查看新内容。
在一些示例中,主机设备可被配置为托管大量应用,并且在一些示例中,连接到主机设备的远程设备从不需要下载或安装该应用,而是在发起共享会话时依靠主机设备向远程设备提供应用的所有必要数据。应用可以使用任何合适的托管框架在主机设备上作为服务器侧程序运行。在一些情况下,主机设备上应用的单个实例可以与不同的客户端参与者共享。以该方式可以实现无缝的跨平台应用共享。
在一些示例中,执行或共享应用的请求可以由诸如上述的主机设备(例如,图4b中的主机设备450a)或远程设备(例如,图4b中的远程设备410a、420a、430a或440a)发起。共享请求可以被请求的另一方接受或拒绝(例如,主机设备请求中的远程设备,或远程设备请求中的主机设备)。
可以使用任何合适的方法来发起执行或共享应用。在一些示例中,用户可以诸如通过与传统用户界面(例如,列出了对应用的选择的菜单)进行交互来明确发起执行或共享应用。在一些示例中,计算设备(例如,关于图4b的设备410a)的用户可以通过与触发器进行交互,诸如通过扫描(例如,经由头戴式设备的相机)包含qr码、条形码、url的视觉目标或可以包括主机设备(例如,关于图4b的主机设备450a)的寻址信息的其它数据,来发起执行或共享应用。在一些情况下,触发器可以包括进入或退出诸如由gps单元检测到的特定位置,并且寻址信息可以与该位置相关联(例如,经由查找表)。在一些示例中,单个触发器可以与两个或更多个应用相关联。
响应于交互,用户设备可以使用寻址信息来将请求传送给主机设备。响应于接收到该请求,主机设备可以发起与用户设备共享应用(例如,如以上关于图6的阶段610所述);将文件提供给用户设备(例如,将要在用户设备上被运行的可执行文件);或采取其它措施。在用户设备与虚拟环境进行交互的示例中,可以将这样的触发器放置在虚拟环境中(在一些情况下,由共享的虚拟环境的其他用户使用诸如持久坐标系(pcf)数据的空间信息),并且用户与虚拟环境中的那些触发器的交互可导致如上所述执行或共享应用。此外,在一些情况下,触发器可以与传感器数据(诸如经由头戴式设备的相机接收到的图像)相关联。例如,用户可在特定位置(例如,真实世界的位置或虚拟环境中的位置)遇到棋盘。通过查看、接近、触摸或以其它方式与棋盘交互,用户可以发起执行或共享象棋应用的请求(例如,如以上关于图6所述)。以该方式,应用不仅可以被用户主动执行和/或共享(例如,经由传统用户界面);而且可以经由与真实、虚拟或混合(例如,增强现实)环境中的对象和位置的有机交互被执行和/或共享。
在一些情况下,可以使用与用户环境有关的数据(例如,诸如gps数据的传感器数据或头戴式设备的相机数据)来向应用提供一个或多个参数。例如,当请求共享象棋应用时,用户的当前位置可被用于识别当前天气和一天中的时间,这可用于确定象棋应用的视觉环境影响(例如,对时间敏感的照明)。类似地,在一些示例中,可以关于上下文信息来预测执行或共享应用的请求;例如,用户可以能够向他或她附近的其它设备发送共享请求。在一些示例中,可能希望“无头”主机设备(例如450a)基于上下文信息向远程用户(例如410a、420a、430a、440a的用户)提供应用共享请求;例如,主机设备可以被配置为在主题公园处检测到用户的位置时向用户呈现共享主题公园应用的请求。在一些实施例中,可能不需要许可,并且内容可以与用户自动共享。在一些实施例中,数据可以被用于发起应用,但是可以不提供给应用本身。例如,反映用户当前位置的个人数据可被用于基于该位置触发应用,但是可能会阻止应用数据访问该个人数据,诸如以提升用户的隐私和机密性。发起应用共享请求的其它方式将是显而易见的,并且在本公开的范围内。
计算机系统的以上示例过程可以由任何合适的逻辑电路来提供。合适的逻辑电路可以包括一个或多个计算机处理器(例如,cpu、gpu等),当执行在软件程序中实现的指令时,该处理器执行处理。另外,也可以经由在硬件逻辑电路中实现的对应逻辑设计来提供该过程,该硬件逻辑电路诸如是可编程逻辑(例如,pld、fpga等)或实现提供过程的逻辑设计的定制逻辑(例如,asic等)。此外,可以经由结合了运行软件的一个或多个处理器和硬件逻辑电路二者的实现方式来提供该处理。
图7示出可以用于实现任何或所有以上示例的示例系统700。以上示例(全部或部分)可以体现在任何便携式设备(包括可穿戴设备)或非便携式设备中,例如通信设备(例如,移动电话、智能电话)、多媒体设备(例如,mp3播放器、电视、收音机)、便携式或手持式计算机(例如平板计算机、上网本、膝上型计算机)、台式计算机、多合一台式计算机、外围设备、头戴式设备(其可包括,例如,集成显示器)或适于包括示例系统架构700的任何其它系统或设备,包括这些类型的设备中的两种或更多种的组合。以上示例可以体现在两个或更多个物理上分离的设备中,诸如经由无线网络进行通信的两个或更多个计算机。以上示例可以体现在两个或更多个物理上不同的设备中,诸如将数据传送到头戴式显示器和/或从头戴式显示器传送数据的腰带包。图7是系统700的一个示例的框图,该系统700通常包括一个或多个计算机可读介质701、处理系统704、i/o子系统706、射频(rf)电路708、音频电路710和传感器电路711。这些组件可以通过一个或多个通信总线或信号线703耦合。
显而易见的是,图7中所示的架构仅仅是系统700的一个示例架构,并且该系统700可以具有比所示出的更多或更少的组件,或者组件的不同配置。图7中所示的各种组件可以以硬件、软件、固件或其任何组合来实现,包括一个或多个信号处理和/或专用集成电路。
参考图7中的示例系统架构700,rf电路708可以用于通过无线链路或网络向一个或多个其它设备发送和接收信息,并且包括用于执行该功能的熟知的电路。rf电路708和音频电路710可以经由外围设备接口716耦合到处理系统704。接口716可以包括用于在外围设备和处理系统704之间建立和维持通信的各种已知组件。音频电路710可以被耦合到音频扬声器750和麦克风752,并且可以包括用于处理从接口716接收的语音信号以使用户能够与其他用户实时通信的已知电路。在一些示例中,音频电路710可以包括耳机插孔(未示出)。
传感器电路711可以被耦合到各种传感器,包括但不限于一个或多个发光二极管(led)或其它发光器、一个或多个光电二极管或其它光传感器、一个或多个光热传感器、磁力计、加速度计、陀螺仪、气压计、罗盘、接近传感器、相机、环境光传感器、温度计、gps传感器、眼动电图(eog)传感器和可以感测剩余的电池寿命、功耗、处理器速度、cpu负载等的各种系统传感器。在诸如涉及头戴式设备的示例中,可以结合与用户的眼睛有关的功能(诸如跟踪用户的眼睛运动,或者基于他或她的眼睛的图像来识别用户)来采用一个或多个传感器。
外围设备接口716可以将系统的输入和输出外围设备耦合到处理器718和计算机可读介质701。一个或多个处理器718可以经由控制器74与一个或多个计算机可读介质701通信。计算机可读介质701可以是可以存储供一个或多个处理器718使用的代码和/或数据的任何设备或介质(不包括信号)。在一些示例中,介质701可以是非暂态计算机可读存储介质。介质701可以包括存储器层次结构,包括但不限于高速缓存、主存储器和辅助存储器。可以使用ram(例如sram、dram、ddram)、rom、flash、磁和/或光存储设备(诸如磁盘驱动器、磁带、cd(光盘)和dvd(数字视频光盘))的任何组合来实现存储器层次结构。介质701还可以包括用于承载指示计算机指令或数据的信息承载信号(但不包括信号并且不包括调制信号时的载波)的传输介质。例如,传输介质可以包括通信网络,包括但不限于互联网(也称为万维网)、内部网、局域网(lan)、广域网(wlan)、存储区域网(san)、城域网(man)等。
一个或多个处理器718可以运行被存储在介质701中的各种软件组件以执行系统700的各种功能。在一些示例中,软件组件可以包括操作系统722、通信模块(或指令集)724、i/o处理模块(或指令集)726、图形模块(或指令集)728和一个或多个应用(或指令集)730。这些模块中的每一个以及上面提到的应用可以对应于用于执行上述一个或多个功能和本申请中描述的方法的一组指令(例如,在此描述的计算机实现的方法和其它信息处理方法)。这些模块(即,指令集)不需要被实现为单独的软件程序、过程或模块,并且因此在各种示例中,这些模块的各种子集可以被组合或以其它方式重新布置。在一些示例中,介质701可以存储以上识别的模块和数据结构的子集。此外,介质701可以存储以上未描述的附加模块和数据结构。
操作系统722可以包括各种过程、指令集、软件组件和/或驱动程序,用于控制和管理通用系统任务(例如,存储器管理、存储设备控制、电源管理等),并促进各种硬件和软件组件之间的通信。
通信模块724可以促进通过一个或多个外部端口736或经由rf电路708与其它设备的通信,并且可以包括用于处理从rf电路708和/或外部端口736接收的数据的各种软件组件。
图形模块728可以包括各种已知的软件组件,用于在一个或多个显示表面上渲染、动画化和显示图形对象。显示表面可以包括2d或3d显示器。显示表面可以被直接或间接地耦合到示例系统700的一个或多个组件。在涉及触摸感测显示器(例如,触摸屏)的示例中,图形模块728可以包括用于在触摸感测显示器上渲染、显示和动画化对象的组件。在一些示例中,图形模块728可以包括用于渲染到远程显示器的组件。在一些示例中,诸如包含相机的那些示例,图形模块728可以包括用于创建和/或显示通过将相机数据(诸如从头戴式相机捕获的)或摄影数据(诸如卫星捕获的图像)与渲染的图形对象进行合成而形成的图像的组件。在一些示例中,图形模块可以包括用于向头戴式显示器渲染图像的组件。在一些示例中,图像可以包括虚拟内容的元素(例如,三维虚拟环境中的对象)的视图和/或物理世界的视图(例如,指示用户的物理环境的相机输入)。在一些示例中,显示器可以呈现虚拟内容和物理世界的视图的合成。在一些示例中,物理世界的视图可以是经渲染的图像;在一些示例中,物理世界的视图可以是来自相机的图像。
一个或多个应用730可以包括系统700上安装的任何应用,包括但不限于浏览器、地址簿、联系人列表、电子邮件、即时消息、文字处理、键盘仿真、小部件、支持java的应用、加密、数字版权管理、语音识别、语音复制、位置确定功能(诸如由全球定位系统(gps)提供的功能)、音乐播放器等。
i/o子系统706可以被耦合到眼睛i/o设备712和一个或多个用于控制或执行各种功能的其它i/o设备714。例如,眼睛i/o设备712可以经由眼睛i/o设备控制器732与处理系统704通信,该眼睛i/o设备控制器732可以包括用于处理眼睛输入(例如,用于眼睛跟踪的传感器)或用户手势输入(例如,光学传感器)的各种组件。一个或多个其它输入控制器734可以从其它i/o设备714接收电信号/向其它i/o设备714发送电信号。其它i/o设备714可以包括物理按钮、拨盘、滑块开关、操纵杆、键盘、触摸板、其它显示屏,或其任何组合。
i/o处理模块726可以包括用于执行与眼睛i/o设备712和/或其它i/o设备714相关联的各种任务的各种软件组件,包括但不限于接收和处理经由眼睛i/o设备控制器732从眼睛i/o设备712或经由i/o控制器734从其它i/o设备714接收的输入。在一些示例中,i/o设备714和/或i/o处理模块726可以执行与手势输入相关联的各种任务,该任务可以通过触觉或非触觉手段来提供。在一些示例中,手势输入可以例如由用于检测用户的眼睛、手臂、手和/或手指的运动的相机或另一传感器提供。在一些示例中,i/o设备714和/或i/o处理模块726可以被配置为在显示器上识别用户希望与之交互的对象,例如,用户指向的gui元素。在一些示例中,眼睛i/o设备712和/或i/o处理模块726可以被配置为(例如借助于光学或eog传感器)以执行眼睛跟踪任务,诸如识别用户正在查看的对象或显示器上的区域。在一些示例中,设备(诸如硬件“信标”)可以由用户穿戴或握持,以辅助触摸i/o设备712和/或i/o处理模块726完成与手势有关的任务,诸如识别用户的手相对于2d或3d环境的位置。在一些示例中,眼睛i/o设备712和/或i/o处理模块726可以被配置为基于与用户的眼睛有关的传感器输入(诸如来自相机传感器的数据)来识别用户。
在一些示例中,图形模块728可以在gui中向用户显示视觉输出。视觉输出可以包括文本、图形、视频及其任何组合。视觉输出中的一些或全部可以对应于用户界面对象。在一些示例中,i/o设备712和/或714和/或控制器732和/或734(以及介质701中的任何相关模块和/或指令集)可以检测和跟踪手势和/或眼睛运动,并且可以将检测到的手势和/或眼睛运动转换为与图形对象(诸如一个或多个用户界面对象)的交互。在眼睛i/o设备712和/或眼睛i/o设备控制器732被配置为跟踪用户的眼睛运动的示例中,用户可以通过观看它们来直接与图形对象进行交互。
可以诸如由眼睛i/o设备712或另一个i/o设备714基于正在被显示的内容和/或计算系统的一个或多个状态来提供反馈。反馈可以被光学地(例如,光信号或显示的图像)、机械地(例如,触觉反馈、触摸反馈、力反馈等)、电气地(例如,电刺激)、嗅觉地、听觉地(例如,哔哔声等)等或其任何组合并且以可变或不变的方式显示。
系统700还可以包括用于为各种硬件组件供电的电源系统744,并且可以包括电源管理系统、一个或多个电源、充电系统、电源故障检测电路、电源转换器或逆变器、电源状态指示器和通常与便携式设备中电源的生成、管理和分配相关的任何其它组件。
在一些示例中,外围设备接口716、一个或多个处理器718和存储器控制器720可以在诸如处理系统704的单个芯片上实现。在一些其它示例中,它们可以在分离的芯片上实现。
尽管已经参考附图充分描述了所公开的示例,但是应当注意,各种改变和修改对于本领域技术人员将变得显而易见。例如,可以组合、删除、修改或补充一个或多个实现方式的元素以形成进一步的实现方式。这种改变和修改应被理解为包括在由所附权利要求限定的所公开示例的范围内。