发明内容
以上问题通过在此公开的用于合作动画的方法、动画设备、以及分布式动画系统来解决。本公开的各个方面能够实现实时的合作动画,以生成具有期望的逼真程度的动画。
根据本公开的一个方面,提供一种用于合作动画的方法,其包括:保持动画场景的模型;建立到多个客户端装置的实时链路;连续地接收来自多个客户端装置的更新,每一个更新与动画方面关联;基于接收到的更新,利用处理栈在多个迭代中更新模型,每一个迭代使用与一个动画方面关联的更新;以及经由实时链路,将更新的模型的指示分配给多个客户端装置。
为了促成动画场景,该方法,其较好地是计算机实现的方法,能够经由多个客户端装置实现场景的动画,其可以基于经由各自的实时链路被提供并且使用处理栈被处理的更新,来合作地促成动画场景,。作为响应,反映更新的模型的各个数据经由实时链路被重新分配给各个客户端装置。因此,所需要的资源可以在各种单独的客户端装置上被分配,各种单独的客户端装置可以专用于动画的各个方面。这能够实现高效的动画的生成,其中,结果被直接反馈给各个客户端装置,以便在各自的客户端装置上向本地动画制作者提供动画场景的更新的本地模型。
较好地,动画场景的模型包括多个动画对象。动画对象可以根据场景图表被布置,并且根据另一个形态,可以包括反映他们的视觉和/或听觉的特性或者任何其它的特性的各自的动画对象的数据,其可以在与动画场景对应的任何合适的维中被定义,诸如在两维(2D)或者三维(3D)中。此外,动画场景以及多个动画对象可以包括反映动画场景或者动画对象随时间的变化的数据。
在一个实施例中,每个客户端装置根据一个动画方面提供用于模型的更新。较好地,动画方面可以对应不同类型的数据和/或动画场景的不同部分和/或不同的形态。动画方面可以指的是针对动画场景的各个对象或者对象组的结构或者形式的数据、动画场景的各部分的动作或者形式的变化、音频数据、特殊效果或者动态的模拟、声音动画和/或模拟、光线动画和/或模拟、或者产生的动画的各个帧或者视频帧组。然而,需要理解,这些例示方面不是面面俱到,并且任何其它的动画方面,诸如其它物理特性的模拟/动画,诸如水、头发或者皮毛的模拟,通过本公开被完全地包括。每一个客户端装置可以专用于一个动画方面。此外,每一个客户端装置可以提供用于不同的动画方面的更新。因此,合作动画可以被分成多个动画方面,并且每一个客户端装置可以被配置成提供用于一个或者多个动画方面的更新。每一个客户端装置可以执行用于数字内容生成的相应的应用(DCC应用),以便提供更新和接收更新的模型的指示。例如,DCC应用可以被配置成根据客户端装置的一个或者多个动画方面来处理动画场景。
在本公开的进一步的实施例中,每一个更新包括用于动画场景的至少一个动画对象的动画方面的数据。例如,在客户端装置上,相应的动画制作者可以根据客户端装置的动画方面改变用于一个或者多个动画对象的动画数据。更新可以经由实时链路被直接发送,以对动画场景做出贡献,或者可以在动画制作者已经确认本地动画结果之后被发送。例如,动画制作者例如可以通过改变各个顶点或者影响各自的控制结构,来修改各个动画对象的结构或者外观,并且可以定义用于各个变化的各自的时间变量。动画制作者可以确认变化,并且本地DCC应用可以分析该变化,并且经由实时链路提供各自的更新信息。此外,本地DCC应用可以经由实时链路接收更新模型的重新分配指示,并且可以直接更新动画场景的本地模型。如果所接收到的更新模型的指示影响动画制作者当前在本地客户端装置上正工作着的动画场景的动画对象,则DCC应用也可以提供用于解决本地冲突的手段。指示可以覆盖(override)任何本地模型,以保证动画场景的(中心)模型的一致性,并且差异可以被结合到本地模型的副本上的动画制作者的当前的工作中,或者动画制作者可以被呈现有指示可能的冲突并且提供反映如何解决每一个冲突的各种情形的输入手段。如果动画制作者推选本地变化,以覆盖被接收到的更新的模型的指示,则这些变化可以被表现为模型的另一个更新,并且经由实时链路被发送,用于更新动画场景的(中心)模型。DCC应用和/或维持动画场景的(中心)模型的应用可以包括另外的手段以解决任何冲突,其可以考虑到将动画场景的模式划分或者分割成多个动画方面。较好地,如果动画方面定义动画场景的模型的间断(disjunct)部分,可以进一步减小冲突或者甚至完全避免冲突。
在另一个实施例中,更新模型包括根据关联的动画方面,对在预定的时间段内所接收到的更新进行分类。更新的接收可以连续地进行,并且可以被细分为预定的时间段,诸如相同长度的时间片(slices)。然而,预定的时间段也可以具有变化的长度,例如,可以依赖于接收到的更新的数量,或者可以是响应于处理栈的当前的处理负载。处理栈可以保持动画方面的列表,并且在预定的时间段内的所有接收到的更新可以根据列表中的动画方面被分类。
在又一个实施例中,更新模型进一步包括确定当前迭代的动画方面,并且选择与动画方面关联的更新。处理栈的每一个迭代可以对应于处理栈的级别,并且可以只处理(handle)一个动画方面。例如,处理栈可以处理N个动画方面,N个动画方面可以分别在迭代0,…,N-1中依序被处理,并且该处理可以在迭代N中利用第一动画方面的处理来再迭代。如果没有用于动画方面的更新被入队(enqueued),则该处理栈可以进一步被配置成跳过各个迭代。例如,如果在当前的时间片或者当前的预定时间段期间或者直至当前的迭代已经开始为止,还没有接收到用于动画方面的更新,那么处理栈可以跳过当前的迭代。因此,因为各个迭代可以被跳过,所以在N次迭代之后,用于各个动画方面的迭代不严格需要再迭代。
在另一个实施例中,该方法进一步包括延迟与动画方面关联的更新的处理,直至处理栈开始用于动画方面的迭代为止。因此,动画场景的模型没有被每一个单独的更新直接影响,而是遵循处理栈的依序处理。为了更新模型,处理栈可以再处理针对单个动画方面的更新,诸如分类、整合(consolidating)或者结合各个更新。这可以导致更新过程的更加高效的处理。此外,因为更新只基于各个方面,所以对于各个动画制作者的在动画场景的动画期间的实时反馈可以被实现。
在又一个实施例中,该方法进一步包括确定客户端装置的动画方面,以及如果动画方面没有被包括在动画场景的动画方面的列表中,则将动画方面添加至动画场景的动画方面的列表。对于新的以及现有的客户端装置,根据本公开的合作动画是高灵活性的,新的以及现有的客户端装置可以经由各自的实时链路,动态地连接至动画场景的(中心)模型,以根据各自的动画方面提供更新。连接的客户端装置也可以改变他们的动画方面,由此允许将动画再分割成可能的新的动画方面。
在又一个实施例中,方法进一步包括利用用于被添加的动画方面的迭代来扩展处理栈的迭代。只要新的客户端装置经由实时链路连接或者只要多个客户端装置中的一个客户端装置改变动画方面,该方法就可以验证新的客户端装置的动画方面或者被改变的动画方面是否被包括在动画场景的动画方面的列表中,并且如果没有,新的动画方面可以被包括到动画方面的列表中。此外,如果动画方面被改变,如果没有另外的客户端装置处理先前的动画方面,先前的动画方面可以从动画方面的列表中被移除。在动画方面的列表的更新之后,处理栈可以被重新配置成在动画方面的新的列表的项目上迭代。这允许高动态的和灵活的合作动画方法,这适用于关于动画方面以及处理新的动画方面的客户端装置的动画放映的新配置。
在又一个实施例中,对于与动画方面关联的客户端装置,分配指示包括选择用于动画方面的更新的模型的指示,并且将所选择出的指示分配给客户端装置。所选择出的指示可以经由实时链路以较高的优先级被提供给客户端装置。这能够在反映模型的当前更新的各自的客户端装置上实现即时反馈。因为在各自的客户端装置上的本地DCC应用被专用于各个动画方面,所以所选择出的指示将最有可能反映动画制作者最感兴趣的数据。任何另外的指示可以随后以较低的优先级被提供给客户端装置。然而,如果DCC应用只处理一个动画方面,那么DCC应用需要不接收与场景的其它动画方面相关的任何其它的数据。因此,较好地,只有被选择出的指示可以被分配给各个客户端装置。例如,DCC应用可以是专用于动画的音频内容,在该情形下,动画场景的模型的物理模拟的更新需要不被分配至音频DCC应用。
在又一个实施例中,更新的模型的指示被分配,以使客户端装置上的动画场景连续地同步。因此,在各个客户端装置上的动画场景的本地模型可以与动画场景的(中心)模型一致。如以上所讨论的,处理(中心)模型的应用以及处理动画场景的本地模型的本地应用可以包括用于解决冲突的手段,其中,(中心)模型可以以较高的优先级被处理。
根据另一个实施例,实时链路是到各自的客户端装置的专用连接,各自的客户端装置被配置成传送更新和更新的模型的指示。实时链路可以是使用标准通信协议的网络连接,为了足够的性能和速度,其可以被连续地检查,诸如使用实时传输协议或者其它方法。然而,实时链路也可以是专用的通信链路,其可以使用与客户端装置的直接连接,诸如使用专用网络的有线或者无线连接。
在另一个实施例中,处理栈通过引擎被执行。引擎可以以硬件或者软件或者硬件和软件的组合被实现,诸如使用被配置成执行引擎的专用的处理器。引擎可以是提供时控抢先(timedpreemption)的基于延续(continuation-based)的构造。相应地,处理栈可以使用用于引擎是专用的模块或者程序代码来被实现,以在多个迭代中根据动画方面来提供更新的迭代处理。这确保了更新的实时处理以及对模型的更新的实时反馈。
在又一个实施例中,引擎在主机装置上或者在多个客户端装置中的一个客户端装置上被执行。因此,客户端装置可以经由实时链路与主机装置通信,其可以执行各自的主机应用和引擎,以便中心地保持和更新动画场景的模型。然而,客户端装置中的一个还可以根据协商流程或者根据预设置的参数来被推选作为托管动画场景的中心模型的客户端装置。例如,对等(peer)客户端装置组可以连接至彼此,并且可以协商或者使用相应的参数以判定可以作为主机装置以及保持动画场景的中心模型的客户端装置。此后,主机装置可以建立到其它客户端装置的实时链路,以便能够实现根据本公开的实施例的合作动画。此外,主机装置本身可以作为提供用于动画场景的模型的更新的客户端装置,诸如通过同时执行主机应用以及用于合作动画处理的DCC应用。
在又一个实施例中,合作动画针对制作动画电影。
根据另一个方面,提供一种具有存储在其上的指令的非暂时性的计算机可读介质,其中,响应于通过计算装置的他们的执行,所述指令引起所述计算装置自动地执行根据本公开的一个实施例的用于合作动画的方法。特别地,该指令可以使得所述计算装置自动地执行方法,该方法包括保持动画场景的模型,建立到多个客户端装置的实时链路,连续地接收来自多个客户端装置的更新,每一个更新与动画方面关联,基于所接收到的更新,利用处理栈在多个迭代中更新模型,每一个迭代使用与一个动画方面关联的更新,以及经由实时链路,将更新的模型的指示分配给多个客户端装置。
可以通过处理器或者专用的处理器,诸如专用的硬件,来进行根据本公开的实施例的方法的各个处理。此外,各个处理步骤可以对应指令,指令可以被存储在存储器中,并且处理器或者专用处理器可以根据存储的指令被配置成进行根据本公开的实施例的方法。
根据本公开的另一个方面,提供一种包括处理器的动画设备,其中,处理器被配置成进行根据本公开的实施例的用于合作动画的方法。特别地,处理器可以被配置成保持动画场景的模型,建立到多个客户端装置的实时链路,连续地接收来自多个客户端装置的更新,每一个更新与动画方面关联,基于所接收到的更新,利用处理栈在多个迭代中更新模型,每一个迭代使用与一个动画方面关联的更新,以及经由实时链路,将更新的模型的指示分配给多个客户端装置。此外,动画设备可以包括存储器,其可以存储指令,当通过处理器执行指令时,配置处理器和/或动画设备进行根据本公开的实施例的用于合作动画的方法。
根据一个实施例,动画设备进一步包括一个或者多个专用的处理器,诸如图像处理单元,其可以被配置成实现一个或者多个处理栈的迭代,和/或根据各个动画方面的模型的更新流程的各个处理任务。在特定的迭代中的处理栈的执行可以直接将数据提供至专用的处理器,以更新模型。例如,动画设备可以包括图像处理单元(GPU),图像处理单元可以被配置成通过利用GPU的专用硬件体系结构,诸如GPU的高平行结构,来处理一个或者多个处理栈的迭代。
在又一个实施例中,处理器或者专用的处理器被配置成执行实时图像引擎。实时图像引擎可以是从CrytekGmbH得到的Cryengine。
根据又一个方面,提供一种分布式动画系统,包括主机装置,被配置成保持动画场景的模型,以及多个客户端装置,经由实时链路被连接至主机装置,其中,主机装置被配置成进行根据本公开的实施例的用于合作动画的方法。例如,主机装置可以被配置成建立到多个客户端装置的实时链路;连续地接收来自多个客户端装置的更新,每一个更新与动画方面关联;基于所接收到的更新,利用处理栈在多个迭代中更新模型,每一个迭代使用与一个动画方面关联的更新;以及经由实时链路,将更新的模型的指示分配给多个客户端装置。
根据一个实施例,每个客户端装置可以执行应用,该应用使得动画制作者能够根据一个或者多个动画方面来制作动画场景的本地模型的动画,本地模型可以对应于在主机装置上中心地保持的模型。贯穿这个申请,相对于在各个客户端装置上保持的本地模型,通过主机装置保持的模型也可以被称为是中心模型。该应用可以是DCC应用,诸如动画3D图形软件,其可以对根据一个或者多个动画方面的动画放映做出贡献。较好地,每一个客户端装置根据一个动画方面提供更新,和/或每一个客户端装置可以根据不同的动画方面提供更新。
根据本公开的实施例的客户端装置可以是计算装置或者专用的硬件装置,诸如计算机、笔记本电脑、移动装置、甚至智能电话,其可以执行用于对动画放映做出贡献的相应的DCC应用。
具体实施方式
在以下的说明中,对附图进行参考,附图通过说明本公开的各种的实施例的方式显示。同样,以下将参考几个实例描述各种实施例。应当理解,在没有背离所要求的主题的范围的情况下,实施例可以包括在设计和结构上的改变。
图1显示根据本公开的一个实施例的用于合作动画的方法的流程图。计算机实现的方法100可以开始102,并且可以继续至项目104,其中,动画场景的模型可以被保持。动画场景的模型可以包括多个动画对象、用于一个或者多个形态(modalities)的各自的数据、以及根据二维、三维、四维或者更多维的时间上的变化。
方法可以继续至项目106,其中,到多个客户端装置的实时链路可以被建立。在随后的项目108中,来自多个客户端装置的更新110可以被连续地接收。每一个更新110可以与动画方面关联。
此外,在方法100启动之后,引擎可以被开始,其可以在项目112实现处理栈(stack)。引擎可以独立于项目104到108中的方法的任何其它的处理而被开始112。例如,引擎可以例如作为单个线程(thread)被开始,或者在专用处理器或者硬件上同时或者并行地被执行。引擎的处理栈可以在步骤114中根据各个动画方面来检索更新110,并且可以在项目116中基于检索到的更新110来在多个迭代中更新模型,其中,每个迭代可以使用与一个动画方面关联的更新110。项目116的处理可以导致更新的模型118。
方法100可以继续前进至项目120,其中,更新的模型118的指示可以经由实时链路来被重新分配或者被反馈至多个客户端装置。
方法100可以响应于在方法100的执行期间的任何时间的终止指示而结束。此外,一旦终止指示被接收到,引擎可以被停止,并且相应的更新110或者更新的模型118可以被存储用于后续处理。
方法100允许在各个客户端装置上执行的典型的动画3D图形软件被实时链路,并且连续地被同步至可以在保持中心模型的主机装置上执行的实时合成器(compositor),或者3D场景汇编器(assembler)或者类似的应用。这允许了不同的动画制作者或者创意专家之间的实时的同时合作。
图2图解根据本公开的一个实施例的系统的示意图。分布式动画系统200可以包括主机装置202,主机装置202可以执行可以保持动画场景的模型的实时合成器或者3D场景汇编器。例如,实时合成器可以是从CrytekGmbH得到的Cinebox或者其它类似的产品。主机装置202可以经由实时链路206被连接至多个客户端装置204a-n。主机装置202可以被配置成经由实时链路206从多个客户端装置204a-n连续地接收更新,并且可以使用合成器/汇编器基于接收到的更新在多个迭代中使用处理栈来更新模型。实时链路206可以是客户端装置204a-n之间至主机装置202的连续的链路。
每一个更新可以针对客户端装置204a-n的动画方面,例如,客户端装置204a可以执行DCC应用,其是动画工具,客户端装置204b可以执行DCC应用,其可以提供用于光线模拟/动画的数据,以及客户端装置204C可以经由各自的实时链路206提供用于声音模拟/动画的数据。更新的结果208可以经由实时链路206被重新分配回客户端装置204。因此,DCC应用可以被具体到各个计算机图形内容,并且例如可以包括照相数据、动画数据、光线数据、声音数据以及其他。这使得能够集成各种各样的硬件和/或软件至用于动画项目的合作方式中。客户端装置204a-n可以经由实时链路206相互连接,以便能够实现不同的客户端204a-n之间的实时流。
尽管经由实时链路206发送更新并且分配来自客户端装置204的结果208以及将结果208分配至客户端装置204被显示为两个单独的连接,但是应当理解,即使两个连接可以代表实时链路206内的各个信道,客户端装置204a也可以经由多个实时链路被连接至主机装置202,多个实时链路可以用于各个数据的专用的上行链路或者下行链路。
动画系统200将诸如3dsMax、Maya等等的预备的3D计算机图形软件一起纳入实时合成器或者3D场景汇编器,诸如Cinebox或者其它类似的产品。这经由实时链路206来实现,借此来自客户端装置204a-n的任何动画数据可以被连续地同步以及反馈到主机装置202上的实时合成器或者3D场景汇编器中。这能够实现操作各自客户端装置204a-n的许多不同的动画制作者或者专家工作者,诸如艺术家、场景建模者、光线和FX专家之间的实时合作。这导致所有的动画制作者能够在实时合成器或者3D场景汇编器内实时看到动画制作场景中的每个人同时活动的结果或者其部分,诸如在动画放映的动画制作场景中的字符、对象以及相应的动画。相应地,提供灵活的且快速的同时工作方法,其可以实时以任何期望的逼真程度来传递动画。
图3显示根据本公开的一个实施例的系统的处理的示意图。可以对应于图2中的客户端装置204a-n的多个客户端302可以提供与各个动画方面有关的更新。例如,动画方面可以包括对象数据、动画数据、音频数据、特殊效果(FX)数据、声音数据、光线数据以及与各个视频帧相关的数据。动画方面以及各自的更新可以通过处理栈或者引擎在多个迭代中依序被处理,每一次迭代使用与一个动画方面关联的更新。处理栈或者引擎的更新循环可以被再次迭代,并且在每个循环之后,结果可以被重新分配给客户端302。因此,不同类型的数据可以依序被处理,其中,处理栈或者引擎可以依序处理不同类型的数据。例如,对应于动画方面的数据的类型可以在表格中被定制(ordered),并且处理栈或者引擎可以在一行接一行的基础上处理数据,其中,每个行可以代表与动画方面对应的数据的类型。
如图3所示,如果来自特定的客户端302的更新错过用于其的动画方面或者数据的类型的迭代,更新的处理可以被延迟直至下一次迭代的循环被执行。这可以确保用于来自各个客户端302的各种不同数据的更新的连续流程。
处理栈或者引擎可以位于诸如服务器的专用的主机装置上或者本地的一个客户端302上,且在主应用上被执行,本地的一个客户端302可以连接至其它客户端302以及经由实时链路提供各个数据的各自的应用。
模型的更新的结果的重新分配可以是选择性的,其中,客户端只得到根据客户端正在推送到处理栈或者引擎中的动画方面的结果。例如,声音客户端可以只接收声音更新。
图4显示根据本公开的一个实施例的系统的处理流程。多个客户端402,其可以是图3的客户端302或者图2的客户端装置204a-n,可以经由连续的链路404,根据各个动画方面,提供用于针对动画场景的模型的动画放映的更新,连续的链路404可以是各个实时链路,诸如图2的实时链路206。
引擎或者处理栈406可以在诸如图2的主机装置202的主机装置或者服务器上被执行,其中处理栈406可以根据动画放映的各个动画方面来处理更新。处理栈406可以具有多个级别,每一个级别对应于各个动画方面。处理栈406可以在随后的循环408中再迭代。例如,处理栈406的各个级别处理(address)2D/3D对象、动画、音频、FX、声音、光线和/或视频数据、以及/或者动画放映和/或动画场景的任何其他的动画方面。
虽然一些实施例已被详细描述,但是应当理解,本公开的各个方面可以采取多种形式。特别地,所要求的主题可以不同于所描述的实例而被实践或者实现,并且所描述的特征和特性可以以任意组合被实践或者实现。在此显示的实施例旨在图解而不是显示通过权利要求所定义的本发明。