用于动画的依赖图评估的系统和方法

文档序号:6586314阅读:250来源:国知局
专利名称:用于动画的依赖图评估的系统和方法
技术领域
本申请概括地涉及游戏系统中的元素动画,更具体地涉及使用该游戏系统的依赖 图评估。
背景技术
游戏系统为该游戏系统的用户提供交互式体验。该游戏系统可以用于娱乐目的、 教育目的或二者的组合或其他目的。例如,游戏可以指导用户的探险需求,或者游戏可以提 示用户回答数学问题。用户可以向游戏系统输入命令,并在显示器上观看那些输入命令的 结果。这些显示的结果通常由游戏系统基于各种因素制作成动画,这些因素包括用户输入、 游戏中出现的角色、角色彼此之间的交互或与游戏环境或场景的交互。因此,开发者继续寻 求用于为游戏中出现的元素制作动画的改进方法和设备。

发明内容
一个实施方式包括游戏动画系统。该游戏动画系统包括被配置为执行游戏的处理 器;源动画曲线数据,其中该源动画曲线数据描述了控制元素随着时间的状态变化;定义 该源动画曲线数据的变换的第一依赖图的描述;引擎,用于在游戏执行期间以交互式速率 评估该第一依赖图。另一个实施方式包括在游戏动画系统上执行游戏的方法。该方法包括识别源动画 曲线数据,其中该源动画曲线数据描述了控制元素随着时间的状态的变化;识别第一依赖 图的描述,其中该依赖图定义了该源动画曲线数据的变换;以及,在执行该游戏时以交互式 速率评估该第一依赖图。另一个实施方式包括游戏动画系统。该游戏动画系统包括被配置为执行游戏的处 理器;表示控制元素的数据,其中控制元素的状态的变化与多个其他元素的方向的变化相 关联;源动画曲线数据,其中该源动画曲线数据描述了控制元素的状态中的变化;定义源 动画曲线数据的变换的第一依赖图的描述;以及引擎,用于在执行游戏期间以交互式速率 评估第一依赖图。另一个实施方式包括游戏动画系统。该游戏动画系统包括用于对第一对象的至少 一部分进行动画制作的第一依赖图的描述,其中该第一对象至少部分地由多个相互关联的 元素来定义;动画引擎,其被配置为识别基于第一依赖图的多个子网络,其中每个子网络包 括第一依赖图中的多个节点,以及其中每个子网络中的多个节点描述了至少两个相互关联 的元素随时间的运动;以及多个处理器,其中每个处理器被配置为评估独立于第一依赖图 中其余节点的至少一个子网络的节点,以便为与至少一个子网络的至少两个相互关联的元 素相关联的运动制作动画。由不同的处理器评估至少两个子网络。另一个实施方式包括由游戏系统对元素进行动画制作的方法。该方法包括提供 用于对第一对象的至少一部分进行动画制作的第一依赖图的描述,其中该第一对象至少部 分地由多个相互关联的元素来定义;识别多个子网络,每个子网络包括第一依赖图中的多
5个节点,其中每个子网络中的多个节点描述了至少两个相互关联的元素随时间的运动,并 可独立于依赖图中的其余节点而被评估;为每个子网络分配游戏系统的多个处理器中的一 个,其中为至少两个子网络分配以不同的处理器;利用分配以子网络的处理器评估至少一 个子网络中的节点,以便对与子网络的至少两个相关元素相关联的运动进行动画制作。


图1是表示用于游戏动画的包括多个处理器的示例系统的示意图。图2是表示一部分对象的示例的示意图,该对象包括具有网格覆盖、控制元素和 动画曲线的骨骼。图3是示例图2中骨骼的一部分的示意图,其中控制点已经沿着动画曲线被移动。图4是示例了为元素制作动画的一部分依赖图的框图,该元素为诸如图2中骨骼 的元素。图5是表示在游戏期间创建并评估动画的依赖图的方法示例的流程图。图6是进一步表示评估依赖图的方法示例以及表示从依赖图中检索节点值的流 程图。图7是表示从源导出依赖图中的节点的方法示例的流程图。图8是表示使用如图1中所示的多个处理器评估依赖图的方法示例的流程图。图9是表示具有在世界坐标空间中确定位置的元素示例的示意图。图10是表示具有在局部坐标空间中确定位置的图9中的元素示例的示意图。图11是表示可以相互作用的两个依赖图的部分的示例的框图。图12是表示分组至元网络的来自图11中两个依赖图的部分的示例的框图。图13是由两条不同动画曲线放置在不同位置的对象的示例的示意图。图14是位于图13中不同位置的对象的图示,该对象的示例位于对不同位置求平 均所确定的中间位置。图15是位于图13中不同位置的对象的图示,该对象的示例对不同动画曲线求平 均所确定的中间位置。
具体实施例方式下列详细说明用于特定的示例和实施方式。然而,本发明的结构和操作不限于此 处所述的示例和实施方式。此外,存在多种方式来实现关于此处所述的这种示例和实施方 式及特定部分。显然,此处所公开的任何特定的结构和/或功能都仅仅是代表性的。本领 域的技术人员会意识到,已公开的部分可以以多种方式省略、分离或组合。例如,可以使用 除此处所述的一个或多个方面以外或不同于此处所述的一个或多个方面的其他结构、功能 或结构和功能来实现装置或方法。游戏系统的用户希望在游戏运行中增加复杂度,并增加与该游戏运行相关联的图 像复杂度。游戏不再是在每次屏幕结束时具有得分的二维场景,而通常是可以表示整个虚 构世界或宇宙并与复杂情节相联系的三维场景。在许多游戏中,对用户的视觉冲击与游戏 的任何其他方面同样重要,如在用户中创造乐趣及在解释情节中提供帮助。增加的图像复 杂度还允许游戏中更多的细节交互。
游戏系统用户对于改善游戏图像的增强的期望同样增加了设计和创造图像的动 画师的责任。动画师必须确保图像色彩缤纷并在视觉上很刺激,并包括那些先前无法使用 游戏系统来制作动画的微小细节。此外,用户要求角色以物理上精确的方式移动,并要求在 游戏中的交互是可信的。包括人类角色的游戏通常必须栩栩如生地刻画那些人类角色。然而,改善的游戏图像会导致在游戏开发中的问题。例如,由于动画师努力满足游 戏系统用户的期望,将图像中所有细节进行编码所需的数据总量就会增加。数据的这种增 加已经导致后勤问题,例如如何存储和传输数据。在许多实例中,表示动画师所创建图像的 数据必须压缩;在一些实例中,要减少这些数据的数量。结果,用户获得的动画和图像与动 画师所创建的有所不同。在一个实施方式中,动画师或其他人员在源创建依赖图,以便在为对象的至少一 部分制作动画时使用。此外,动画师创建至少一条动画曲线,其表示控制元素状态的变化。 依赖图和动画曲线被导出到游戏系统。在游戏执行期间游戏系统评估依赖图,以便使用动 画曲线为与该对象相关联的元素制作动画。与动画师创建的运动相比,游戏系统用户所观 察到的运动并没有丢失。在一个实施方式中,在至少两个数据结构中导出或存储依赖图,其中第一数据结 构包括表示空间或时间值的图的节点,第二数据结构包括表示关系的图的节点。在另一个 实施方式中,依赖图可以由游戏系统的多个处理器来评估。在另一个实施方式中,可以单独 识别和操纵依赖图的子网络。在另一个实施方式中,使用依赖图可以组合动画曲线用于评 估,或使用重新配置的依赖图或分离的依赖图执行相反的运动。图1是表示游戏动画的示例系统100的示意图。游戏系统100被配置为执行游戏 并在游戏执行期间产生动画。游戏系统100进一步被配置为接收并处理来自用户的输入, 并提供用于显示这种用户输入的结果的数据。用户使用输入设备114输入命令。输入设备114可以是允许用户与游戏系统100 交互的任何设备。例如,输入设备114可以包括键盘、操纵杆、控制器、麦克风、照相机、小键 盘或一系列按钮或其他设备及功能部件之一。游戏系统100向显示设备116输出图像和动画。显示设备116可以是接收显示数 据并将其可视地呈现给用户的任何设备。例如,显示设备116可以包括阴极射线管、多个发 光二极管(LED)、液晶显示器(IXD)、或投影机或其他设备及功能部件之一。游戏系统100包括具有多个处理器104a、104b、104c和104d的中央处理单元 (CPU) 102。处理器104a-104d也可以称作核。虽然在图1中显示了 4个处理器104a_104d, 但是游戏系统100可以包括更多或更少数量的处理器。处理器可以在CPU 102的内部或外 部实现。CPU 102可以包括一个或多个处理器。例如,CPU 102可以包括一个处理器、三个 处理器或八个或更多处理器。CPU 102和/或处理器104a-104d中的至少一个处理器与输 入设备114和显示设备116通信。游戏系统100可以进一步包括与CPU 102和/或处理器104a-104d中的至少一个 处理器通信的易失性存储器106。易失性存储器106可以包括特定类型的随机访问存储器 (RAM),例如,动态随机访问存储器(DRAM)或静态随机访问存储器(SRAM),或可以包括任何 其他类型的易失性存储器。易失性存储器106可以在CPU 102和/或处理器104a-104d中 的一个处理器的操作期间,用于存储数据和/或命令。本领域的技术人员会识别并使用其
7他类型的易失性存储器。游戏系统100可以进一步包括与CPU 102和/或处理器104a_104d中至少一个通 信的非易失性存储器108。非易失性存储器可以包括闪存、磁存储设备、硬盘或只读存储器 (ROM),如可擦除可编程只读存储器(EPROM),或任何其他类型的非易失性存储器。非易失性 存储器108可以用于存储游戏、指令、角色信息、游戏状态信息,或如果断开游戏系统100的 电力还会被保存的任何其他信息。游戏系统100可以包括安装或临时定位额外的非易失性 存储器的接口。本领域的技术人员会识别并使用其他类型的非易失性存储器。与CPU 102和/或处理器104a_104d中至少一个通信的图形处理单元(GPU) 110 绘制由一个处理器提供的数据以便在显示设备116上显示。GPU 110可以被配置为执行任 何数量的涉及提供在显示设备116上显示的数据的功能。例如,GPU 110可以被配置为在 其他功能中绘制多个多边形、使用阴影或纹理、创建表示三维环境的数据,或在坐标空间之 间进行变换。如图1所示,GPU 110可以在CPU102的外部,或在CPU 102内部和/或集成 在CPU 102中。本领域的技术人员会识别GPU 110的其他配置及功能。游戏系统100可以进一步包括与CPU 102和/或处理器104a_104d中至少一个通 信的盘驱动器112。一个或多个处理器可以从插入到盘驱动器112的盘读取数据。在一些 实施方式中,游戏系统100被配置为使用盘驱动器112在盘上记录数据。这样,与游戏运行 和动画相关的数据可以传送到游戏系统100或来自于游戏系统100。例如,许多游戏以光盘 (CD)或数字化视频光盘(DVD)的形式出售。这些游戏中的大多数如此生产,以至于玩游戏 所需的全部信息,包括角色、情节以及动画数据都包含在光盘上。因此,用户可以购买包含 游戏的光盘用于在游戏系统100上执行。游戏也可以存储在非易失性存储器108上。游戏引擎存储于游戏系统100之上。游戏引擎包括可以用于执行游戏的指令或数 据。当初始化游戏时,游戏引擎启动游戏运行。在游戏运行期间,引擎提供与游戏中场景或 时刻相关联的图像和动画。这些图像和动画在显示设备116上显示。当用户使用输入设备 114输入指令时,游戏引擎评估命令并确定游戏执行该命令的效果。这些效果可以由显示给 用户的图像和动画反映出来。例如,用户可以按小键盘上的按钮使游戏中的角色打开一扇 门。游戏引擎100可以在CPU 102、处理器104a_104d、GPU 110或非易失性存储器108 中的任意一个中全部或部分地实施或存储。游戏引擎可以包括指令或数据的单个集合,或 可以包括多个集合。例如,游戏引擎可以作为动画引擎(例如图像或绘制引擎)来实现,并 可以作为确定用户的输入如何影响游戏的情节的单独引擎来实现。除了游戏引擎之外,游戏系统100可以存储或实现其他功能及其他用于执行游戏 的子系统。例如,这样的子系统包括绘制系统、游戏保存系统、物理系统及特效系统。游戏系统100不限于上述的设备、配置及功能。例如,虽然只显示了单个易失性存 储器106、非易失性存储器108、GPU 110、盘驱动器112、输入设备114及显示设备116,但是 多个任意一种此设备均可在游戏系统100的内部或外部实现。此外,游戏系统100可以包 括电力供应或网络访问设备。本领域的技术人员可以识别游戏系统100的这种配置。此处所述的组件可以以多种系统及设备的方式实现。例如,游戏系统100可以包 括为执行游戏设计的控制台,例如游戏机、S0NYPLAYSTATI0N 3、或微软XBOX 360。游戏系统 100也可以包括被配置为执行游戏的通用计算设备,例如膝上型计算机、台式机或个人计算机。可以使用任意数量的方法和设备创建游戏系统100显示的图像和动画。尤其是生 成表示三维环境的图像和动画时,经常使用诸如AUTODESK公司出售的MAYA的建模软件。使 用这种软件,动画师可以创建对象并为对象创建运动,该对象由游戏系统100的游戏引擎 使用以便提供在显示设备116上显示的数据。图2是表示使用上述软件创建的对象200的一部分示例的示意图。在所示的实施 方式中,对象200作为人的形体显示,该对象的一部分包括形体的肩和臂。但是,对象200 可以是任何对象。例如,该对象可以包括人类或非人类角色,诸如武器或食物的物品,包括 建筑物的墙或建筑,诸如岩石或树的场景元素,或动画师想要表现的任何其他对象。此处对 于对象的说明同样可以应用于所有这样的对象。可以使用多个相互关联的元素202a、202b、204a、204b及206来定义对象200的结 构。这些相互关联的元素用于创建对象200的“骨骼”。它们定义了对象200的形状和物理 约束。在所示的实施方式中,元素202a和202b被配置为改变位置和方向,但是它们的形 状和尺寸是基本上固定的。然而元素204a和204b被配置为结合点,其定义了元素202a和 202b可以旋转的位置。定义对象的互相关联的元素可以通过依赖图相关联。依赖图包括分级的节点,其 描述了每个元素如何连接到其他元素及每个元素相对于其他元素如何移动。以此方式,动 画师不必阐明游戏中每个可能场景或配置的对象的每个细节或为其制作动画。例如,可以 理解,当一个人转动他的肩膀时,他的前臂和手也会移动。同样地,图2中所示的对象200 可以如此配置,从而绕着元素204a旋转元素202a会改变元素202b和204b的位置或方向。 下面会更详细地描述依赖图的内容和操作。动画师可以为每个对象创建依赖图。此外,对象的一部分或多个对象也可以通过 依赖图相关联。在游戏期间显示的任何给定的场景中,可以由多张依赖图表示。例如,场景 中的每个角色可以由动画师用单独的依赖图来制作。通过为依赖图中的每个节点分配值和 约束条件,动画师能够控制对象成为何种形状及对象如何移动。如果动画师不希望对象移 动,这也可以在依赖图中定义。例如,动画师可以创建骨骼来定义墙的形状,并可以为墙的 依赖图的节点赋值,以便使墙的元素相对于彼此不会移动。元素206是控制元素。它可以包括元素202或204的任一类型,或可以是单独类 型的元素。动画师可以定义控制元素,以简化调整对象200的位置或方向的处理过程。每 个对象和依赖图都可以具有多个控制元素。可以利用动画曲线来描述控制元素的状态中的变化。在所示的实施方式中,可以 用动画曲线208描述控制元素206的位置的变化。在时间、时,控制元素206最初位于第 一位置210a。随着时间推移,控制元素206可以沿着动画曲线208移动。在时间t6处,控 制元素206已经沿着动画曲线208移动到位于第二位置的210b,如图3所示。当控制元素改变状态时,会影响一个或多个其他元素。在所示的实施方式中,控制 元素206沿着动画曲线208移动,这使得元素202a,202b,204a和204b移动。其他元素的这 种移动是由对象200的依赖图中所定义的约束条件引起的。因此,可以配置依赖图,使得角 色的手的移动会引起角色胳膊和肩膀的适当的解剖学上的移动,如图2和3中所示。因此,每次动画师希望表现控制元素206在不同位置时,元素202a、202b、204a和204b中的每一 个的位置都不需要由动画师手动设置,但可以通过评估对象200的依赖图自动计算得出。控制元素不限于空间中的单个点,动画曲线也不限于元素的随时间推移的路径。 控制元素和动画曲线可以定义为以多种方式影响任意数量的元素。例如,控制元素可以定 义为与描述角色的手的依赖图相关,从而调整控制元素的状态会导致这只手更多或更少的 张开或攥紧。动画曲线可以描述控制元素中的变化,还可以包括抽象值。一个例子是,可以 定义用于张开或攥紧角色的手的控制元素,该控制元素可以被赋予从1到10的任何值,1表 示手是张开的,10表示手是攥紧的。1到10之间的任何值都表示这只手在某种程度上张开 或攥紧。这种控制元素的动画曲线可以包括按时间顺序排列的一系列数字,这些数字描述 了在一段时间上手的张开或攥紧运动的预定义集合,其中每个数字都有从1到10的值。因 此,定义手部重复攥紧运动的动画曲线可以包括数字序列{8,9,10,9,8,7,8,9,10,9,8,9, 10}。同样地,被赋予从1到10的值的控制元素可以与门相关联,这样,1表示门被关闭,而 10表示门被打开到其所能打开的最大程度。在一些实施方式中,控制元素用于调整一个或 多个元素的颜色、阴影或纹理。动画曲线可以表示预定义动作的移动。在所示的实施方式中,动画曲线208可以 表示一个角色伸出手与另一个角色握手。另一个示例是,控制元素可以定义在角色的脚上, 动画曲线定义为该角色行走制作动画。在游戏运行期间,用户按下小键盘左边的按钮可以 调用该动画曲线,通过沿着动画曲线移动角色脚上的控制点来使得角色向左行走。动画曲线可以以许多方式存储或表现。例如,动画曲线可以存储为一系列值、数据 结构或操纵控制元素的可执行指令集。动画曲线可以由标示的功能或另一种可视方式来表 示,或者可能没有易于了解的方式来可视地表示给定的动画曲线。本领域的技术人员可以 认识到用于动画曲线存储、定义或表示的其他方式。此处所述的动画曲线可以在特定的建 模软件中实现,例如MAYA。可以使用蒙皮或网格212覆盖或绑定骨骼。网格212可以定义对象200的外观, 而骨骼定义对象200的基础结构和移动。因此,当网格覆盖了骨骼或骨骼的一部分时,骨骼 或者骨骼的一部分对于观看者来说是不可见的。在所示的实施方式中,网格212被配置为 为给予对象200的所示部分以人类肩、臂、手的外观。当移动元素202a、202b、204a、204b或 206中任何一个时,网格会覆盖到新的位置,创造出手臂已经改变位置的外观。网格212不仅可以向用户传达比元素202a、202b、204a、204b及206所传达的更加 可识别的图像,该网格212还用于说明由元素202a、202b、204a、204b及206的移动所无法 影响的微小细节。例如,骨骼可以定义为表现汽车的结构。当汽车改变位置时,除了门、引 擎护罩、行李舱、轮胎和窗户以外,与汽车其余部分相关的汽车主要部分不会移动。网格可 以与汽车的骨骼绑定,其定义了可在场景中改变位置复杂的曲线和造型,但是绝不会改变 相对于汽车的其他部分的方向。为每条曲线或造型细节定义的结构元素不会为动画师提供 额外的好处。将具有已定义的约束和运动、控制元素及网格的骨骼称为“骨架(rig)”。创建这 些元素并将它们一起关联起来可以称为“装配(rigging)”。在装配过程完成之后,通常准 备为对象制作动画。然后动画师调整控制元素并定义动画曲线,以便为对象的运动和动作 制作动画。有时“骨架”也指这种不具有网格的骨骼和控制元素。本领域的技术人员将认识到创建骨架和依赖图的各种方法,并能够创建这种骨架和依赖图。图4是表示依赖图400的一部分示例的框图,该依赖图用于为图3中诸如骨骼或 骨架的元素206制作动画。依赖图400的所示部分包括多个节点402-416。这些节点包括 存储值的所有节点,例如,节点402、406、408、412、416以及诸如节点404,410和414的功能 性节点。如果值节点402、406、408、412和416存储有关于图2中所述对象的信息,那么值 节点402、406、408、412和416可以存储空间值或时间值。功能性节点可以基于值节点中的 数据计算结果,因此可以确定值节点之间的关系。值节点可以作为变量或值(如浮点数)、数据结构或数组或数据集来存储或实现。 功能性节点可以作为运算、数学函数、命令集或可执行命令集来存储。在一些实施方式中, 值节点可以与功能性节点整合起来,例如功能性节点的属性。在一些实施方式中,依赖图的 节点可以保持形状或几何结构信息、颜色信息或纹理信息。同样地,包含这种节点的依赖图 或这种依赖图的一部分可以作为数据结构或一系列数据结构、命令或可执行指令或一系列 链接节点来存储或实现。本领域的技术人员将认识到存储、定义、表示或实现依赖图及其节 点的其他方法,并认识到节点可以存储的额外信息。此处所述的依赖图和节点可以用特定 的建模软件程序来实现,如MAYA。在所示的实施方式中,可以从左到右评估依赖图400的部分。这样,评估依赖图 400的部分以将游戏中的时间tg变换为元素的最终方向。为此,依赖图400的部分定义了 动画曲线的变换。在一些实施方式中,依赖图400的部分也可以或相反地从右向左被评估, 或者可以重新配置,使其可以从右向左被评估。在节点402存储或识别游戏中的时间tg。在节点404,tg变换为沿着动画曲线、 的时间,其在节点406被存储或识别。例如,如上所述,动画曲线可以表示角色行走。但是, 为与动画曲线相关联的移动制作动画可能只需要5秒钟。基于角色先前的移动或角色已经 行走的时间总量,例如可以在节点404确定该角色在动画曲线中是3秒钟,或该动画曲线已 经完成60%。参考图2,用户可能已经玩了 20分钟游戏(因此tg等于20分钟),但是可以 确定与动画曲线208相关联的移动刚刚才开始,因此确定t。等于、。这个值可以存储于节 点 406。在节点410,使用动画曲线408或其一部分评估沿着动画曲线的时间,以确定元素 在那个时刻的位置。参考图2,动画曲线208可以拆分为χ平面中的曲线、y平面中的曲线 以及ζ平面中的曲线,分别由节点408x、408y和408z表示。这些曲线部分408x、408y和 408z中的每一个都在时间t。在节点410x、410y和410z处被分别评估。元素的x、y、z位置 可以分别存储于节点412x、412y和412z。这样,节点412x、412y和412z将分别存储、时 刻的元素206的x、y和ζ位置。使用节点414和在节点412x、412y、412z处分别识别的x、y、ζ位置,可以在节点 416存储或识别元素的方向。该方向可以包括任意数量的描述该方向的数据,例如在其他这 种方向数据中的先前识别的X、1、ζ的值和/或元素的旋转。参考图3,节点416存储或识 别在时刻、时元素206的方向,其等于位置210a。本领域的技术人员会认识到,依赖图可以包括比图4中所示的更多的节点,或者 依赖图可以包括比上述更多或更少的值或功能。例如,可以链接依赖图400的许多部分,以 定义如对象(例如对象200)的移动。例如,考虑图2中的元素204a旋转的情况。总的来
11说,元素204a的旋转可以导致以下结果基于元素204a的旋转来评估部分依赖图,可以确 定元素202a的新位置;基于元素202a的位置,通过评估部分依赖图,可以确定元素204b的 新位置;基于元素204b的位置及元素204b的旋转,可以确定元素202b的新位置;基于元 素202b的位置,可以确定元素206的位置。这样,可以评估依赖图以确定由依赖图表示的 对象中的任意元素的方向。当如上所述评估依赖图时,当“父”节点的值改变时,节点的值会改变(在依赖图 的层级中处于较高位置的任何节点都是父节点;在图2所示对象200的实施方式中,在表示 对象200的元素的依赖图中的任意节点位于给定所示元素的左边,将是表示给定元素的节 点的父节点)。这样,先前确定的值可能不再是任何给定节点的值。为了表明这一点,每个 值节点可以包含指示符,该指示符指示值节点中的值是否有效。例如,节点可以包含标记 符,其指示节点是脏的(也就是说,值已经改变了);或计数器或有效性指示符,其可以用于 确定值是否已改变,下面将更详细的说明。图5是表示方法500实例的流程图,该方法用于创建并评估依赖图,例如图4中所 示的用于在游戏期间制作动画的依赖图的部分。在块502处,动画师创建依赖图。动画师 可以使用计算设备(如膝上型计算机、台式机或个人计算机)或使用允许创建依赖图或此 处所述骨架的任何其他设备来创建依赖图。这种设备可以称为源,因为它是动画师创作的 源头。在块504,动画师使用该源设备或另一个源设备创建与依赖图相关联的动画曲线。 在下文中,这种动画曲线可以称为源动画曲线,因为它在源设备处创建。如上所述,动画曲 线可以描述依赖图的控制元素的状态的变化。而依赖图可以描述动画曲线的变换。在块506,导出动画曲线和依赖图数据。这可以涉及到将动画曲线和依赖图打包, 或压缩动画曲线或依赖图,从而动画曲线和依赖图可以由游戏系统(如图1中所示的游戏 系统100)使用。在一些实施方式中,块506包括将依赖图和动画曲线数据烧制到盘上。在 其他实施方式中,块506包括将依赖图和动画曲线数据打包到可由游戏系统100读取的可 执行文件中。在块508,动画曲线和依赖图数据加载到游戏系统中。在所示的游戏系统100中, 依赖图和动画曲线数据可以加载到或存储到一个或多个易失性存储器106、非易失性存储 器108、CPU 102或处理器104a-104d中的任意一个中。可以使用多种方法将依赖图数据和 动画曲线数据传输到游戏系统100。例如,依赖图和动画曲线数据可以存储在盘上,该盘可 以装入光盘驱动器112中以向游戏系统100提供依赖图和动画曲线数据。在一些实施方式 中,依赖图和动画曲线数据在网络上发送,在游戏系统100使用网络接口接收。在游戏执行期间,在块510处评估依赖图。在一个实施方式中,游戏引擎评估依赖 图。在此实施方式中,游戏引擎可以顺序地评估图中的每个节点或仅评估那些脏的节点。评 估可以包括读取存储于节点中的指令,或使用节点中存储的值或函数执行游戏引擎中定义 的处理过程或其他操作。评估也可以包括处理或影响分级的可执行指令。下面详细描述评 估依赖图的示例方法的实施方式。如上所述,在源设备处创建依赖图。本领域的技术人员可以理解,在游戏系统中评 估在源设备处创建的该依赖图。为了保持与游戏系统用户的交互,依赖图可被实时评估。这 样,游戏系统对于用户输入的响应或游戏元素的动画不会滞后或延迟。因此,可以以交互式
12速率评估依赖图,从而在游戏执行期间,对依赖图进行的评估不会在游戏执行或游戏对用 户输入的响应中导致重大中断。图6是进一步示出方法600的示例的流程图,该方法600以游戏引擎(例如,关于 图1所示的系统100的游戏引擎)评估依赖图。方法600可以在图5中的块510执行期间 执行。在块602,请求节点值。例如,为了对动画曲线环境中的对象或其一部分制作动画 而请求节点值,如参考图2至图4所述。当多个元素的方向在沿着动画曲线的每个点改变 时,引擎请求节点的值。节点返回的值可以提供用于显示的动画数据,例如在图1所示的显 示设备116上显示。在块604,确定节点值是否有效。如上所述,这种确定可以使用有效性指示符。例 如,游戏引擎可以检查脏的标记以查看节点的当前值是否与其中存储的值不同,例如由于 父节点的改变的原因。游戏引擎也可以至少部分地基于节点中的计数器来做出这种决定, 下面将详细说明。如果节点是有效的,游戏引擎前进至块612,在此返回该节点的值。如果节点值是 无效的,游戏引擎前进至块606。在块606,节点被请求以便成为有效的节点。为了使节点有效,在块608确定当前 节点(也即,块602处请求值的节点)所依赖的节点。对于此处所述的依赖图,在块608,识 别在依赖图层级中比当前节点高的所有节点。然后,针对当前节点依赖的任何节点重复方法600。如果当前节点所依赖的节点是 有效的,则返回它们的值。如果它们是无效的,如上所述,它们会被请求以便成为有效节点。在当前节点所依赖的节点返回其值之后,在块610通过参考当前节点所依赖的节 点值,可以计算当前节点的值。该计算出的值存储在当前节点中。在块612,返回该计算出 的值。该值随后可以用于为当前节点表示的元素制作动画。参照图6例如使用如上游戏系统100的游戏引擎,来以游戏系统评估依赖图,从而 为对象的至少一部分制作动画,这种做法有很多好处。提供用于为对象制作动画的数据的 其他方法包括,“烘焙”多个配置中的角色骨骼中元素的配置。例如,在动画曲线中的每个点 取得每个元素值的快照。这些数据包括每个元素的多达十二个或更多的值九个值表示元 素在三维空间的旋转,三个值表示元素在x、y、z坐标系中的位置。为了捕获对象的移动,必 须为每个可能的动画曲线的动画曲线中的每个点存储每个元素的值。本领域的技术人员可以理解,烘焙过程创造了大量数据。数据的总量通常在游戏 执行期间难以读取和使用,并且通常太大以至于无法包含于单个盘中以便传输游戏。所以, 表示对象移动的数据通常被压缩,通常省略了一些烘焙过的数据。当基于这种压缩的或不 完全的数据为对象而制作动画时,该对象的移动最多是估算在源处创建的动画,并且在游 戏执行期间难以对动画进行任何改变。与使用烘焙的数据相反,以游戏系统评估依赖图和源动画曲线降低了为对象制作 动画所需的数据总量,并增加了动画的美感。针对动画数据的压缩数量可以被限制或取消, 对象的移动能够被无损地显示,这种无损是相对于源处创建的对象移动而言的。下面的叙述进一步在细节上讨论上述系统和方法的优点。这些优点包括,减少了 向游戏系统导出的数据总量,增加了评估该数据的效率,以更高精度制作动画,并能够调整及修改源动画。此外,将结合所述优点描述系统和方法的进一步的细节和实现。减少数据总量可以减少向游戏系统导出的在动画中使用的数据总量。不是导出在每条动画曲线 的每个位置的每个对象或其一部分的值,而是可以导出依赖图,依赖图描述了对象或其一 部分的每个元素,并可以导出源动画曲线。可以通过评估关于源动画曲线的依赖图来确定 每个元素的值,从而避免了导出每个元素值的需求。通过恰当地导出依赖图中的节点,可以进一步减少用于导出依赖图的数据总量。 图7是表示从源设备导出依赖图中节点的方法示例的流程图,例如图4中所示的依赖图400 的部分。可以在图5所示方法500的块506处使用方法700。在块702,识别表示一个值(如空间或时间值)的第一依赖图节点。关于依赖图 400的该部分,在块702识别值节点402、406、408和412。在块704,存储第一节点。第一节点可以存储于由游戏系统可读取的第一数据结构 中,如图1所示的游戏系统100。在块706,表示第一节点之间关系的第二依赖图节点被识别。关于依赖图400的该 部分,在块706识别功能性节点404、410和414。已识别的节点可以表示依赖图中表示的元 素的第一空间或时间值与依赖图中表示的元素的第二空间或时间值之间的关系。例如,基 于与第一元素相连接的第二元素的位置或方向,在块706识别的节点可以用于确定第一元 素的位置和方向。在块708,第二节点与第一节点分开存储。第二节点可以存储于由游戏系统可读 取的第二数据结构中,其中该第二数据结构不同于第一数据结构。这样,存储了两个数据结 构,将依赖图中表示的值与依赖图中表示的功能区分开。这种区分可以与适当的数据结构 成对出现,该数据结构会减少存储这种信息所需的数据总量,或者这种区分可以帮助剔除 依赖图中存储的过量信息,该过量信息在为对象或其部分制作动画时对于游戏系统毫无用 处。在一些实施方式中,方法700用于向两个不同的数据结构导出依赖图。在其他实 施方式中,存储多个第一数据结构和/或多个第二数据结构。该多个第一数据结构可以存 储表示不同节点值的数据,或者该第一数据结构可以包括存储表示至少某些相同节点值的 数据,例如出于冗余及纠错目的。导出之后,这种第一数据结构和第二数据结构可以存储于 游戏系统之上,例如存储在游戏系统100的非易失性存储器108中,或在从插入到光盘驱动 器112中的盘中读取之后存储在易失性存储器106中。使用方法700导出节点有助于减少在创建依赖图时源设备使用的数据总量,但在 为由依赖图表示的对象或其部分制作动画时,游戏系统并不使用这些数据。例如,在游戏系 统仅需要元素的局部坐标时,源设备可以存储每个元素的世界坐标,下面将详细描述。有时 这些世界坐标可以从节点值中省略。源设备也可以存储在设计依赖图和骨架中有用的约束 或外部数据,但这些约束或外部数据仅对于元素移动相对无用。当导出依赖图时,这些约束 和外部数据可以省略。本领域的技术人员可以理解,可以以多种方式导出及存储依赖图,包括使用上述 方法700。依赖图可以以不同于在源处创建的方式存储于游戏系统中,但是可以代替地存储 依赖图或表示源依赖图的数据的描述。如上所述,这样可以减少存储依赖图所需的数据量,
14并易于游戏系统执行。同样地,可以在游戏系统中存储源动画曲线或表示源动画曲线的数 据的描述,而不是存储在源设备处定义的精确的源动画曲线。本领域的技术人员可以理解,参照图7的以上所述的示例方法700和游戏系统对 依赖图的评估可以用于减少向系统导出所需的数据总量。因此,可以实现更加细致的动画 及较少的必须传输或存储的数据。更有效的数据评估导出游戏系统使用的依赖图还可以增强游戏系统的性能。不但游戏系统可以在无 需对许多数据进行高速缓存或页面调度的情况下为对象或其部分制作动画,而且依赖图较 为容易由多个处理器并行评估,例如图1中所示的处理器104a-104d。图8是表示方法800的示例的流程图,该方法800使用多个处理器(如处理器 104a-104d)来评估依赖图。在块802,识别可被彼此独立评估的依赖图子网络。例如,参考 图2和图3来考虑先前讨论的汽车骨架。定义了汽车骨骼的每个元素可以由依赖图中的节 点表示。所述节点可以分组到多个网络中,此处称为子网络,因为它们包含整个依赖图的一 部分,子网络可以彼此相对独立地被评估。例如,每扇门可以独立于其他门及汽车的其余部 分而打开或关闭。窗户、行李舱和引擎护罩同样是独立的。在一个实施方式中,由游戏引擎执行在块802处对子网络的识别,例如参照图1的 上述游戏引擎。在另一个实施方式中,在源设备处识别子网络,并为每个子网络导出各自的 数据结构。例如,方法700的块702可包括识别表示值的子网络的第一依赖图节点。块704 可以包括存储子网络的那些已识别的节点。同样地,块706和708可以包括识别并存储表 示第一子网络的节点之间关系的子网络的节点。在此实施方式中,游戏引擎只需要识别单 独的数据结构,由此识别单独的子网络。在块804,为每个子网络分配多个处理器(如处理器104a-104d)中的一个。子网 络可以在处理器中均勻或不均勻地分布。这种分布可以随机确定,或者估算评估子网络的 工作负荷,例如基于子网络的大小或复杂度。在块806,使用已分配的处理器评估子网络中的节点。本领域的技术人员可以理 解,使用该方法可以同时评估多个子网络,多达游戏系统中单独处理器的数量。这样,可以 更有效地评估依赖图,并降低任何一个处理器上的负担。在块802识别的子网络可以用于提高以其他方式对依赖图进行评估的效率。一种 这样的方式是维持每个节点中的表示该节点中的值被改变或更新次数数量的计数器。当确 定该节点的值是否有效时,可以将该计数器与子网络中其他节点的计数器进行比较。如果 当前节点的计数器的值低于任何父节点的计数器的值,那么当前节点中的值是无效的,在 该值被返回之前必须更新。接着,将当前节点的计数器的值更新为等于父节点中的计数器 的值,或将计数器重置为共同值。评估依赖图的其他方法需要在每个节点中设置脏标记以指示节点中的值不再有 效。这样,当父节点中的值改变时,必须遍历依赖图以在该父节点的每个子节点中设置脏标 记。但是,在上述的计数器方法中,仅更新父节点中的计数器,子节点仅需要参照在它们子 网络中的其他节点,而无需更新整个依赖图。备选地,每次当子网络中的父节点的值被改变 时,仅在子网络的节点中设置脏标记,这样,就消除了遍历依赖图其余部分的需求。这大大 减少了为由依赖图表示的对象制作动画所需的处理的数量,并减少了这种动画制作所需的时间。可以用于有效识别脏节点的另一种方法包括,定义全局和/或群组有效性指示 符,并在依赖图的每个节点中定义有效性指示符。每个有效性指示符保持、存储或定义一个 值。当请求依赖图中的节点的值时,将该节点的有效性指示符与全局有效性指示符相比较。 如果两个节点的值不同,那么节点是脏的,必须更新。当依赖图的节点由于接收来自依赖图外部的输入(例如,由于用户的输入或由于 游戏中时间的流逝)而改变或被修改时,将全局有效性指示符设置为新的值,并将已改变 节点的有效性指示符设置为等于全局有效性指示符的新值。但是,当依赖图的节点由于接 收来自依赖图内部的输入时,仅仅将该节点的有效性指示符设置为等于全局有效性指示符 的值。并不将全局有效性指示符设置为新值。因此,如果由于依赖图内其他节点的移动而 更新依赖图的节点,则将不设置新的全局有效性指示符。因为外部输入而修改依赖图的节 点,仅有所述已改变的节点会影响最新的全局有效性指示符。这样,通过与全局有效性指示 符的单次比较就可以确定节点是脏的,并且无需遍历整个依赖图来设置脏的标记。除了或取代全局有效性指示符,可以定义一个或多个群组有效性指示符。可以定 义群组有效性指示符以表示依赖图中的任何群组节点。例如,可以为依赖图中的每个子网 络定义群组有效性指示符,或为子网络的集合定义群组有效性指示符。也可以为链接两个 依赖图的元网络定义群组有效性指示符。下面将更详细地描述元网络。使用群组有效性指 示符与使用全局有效性指示符类似。来自群组外部的输入所引起的节点中的变化可以导致 对群组有效性指示符进行更新。可以在节点中存储有效性指示符。存储在节点中的全局或群组有效性指示符可以 连接至一个或多个依赖图、群组和/或子网络,以便定义各自依赖图、群组或子网络的父节 点。全局或群组有效性指示符也可以独立于任何依赖图、群组或子网络而存储。此外,有效 性指示符可以包括计数器,或可以包括适于比较的任何其他值。例如,数字的全局有效性指 示符可以在每次改变时增加一个值。本领域的技术人员将认识到,如可以用于表示节点有 效性指示符的计数器不限于在每次改变时增加,并且不限于以恒定速率增加。计数器可以 增加或减少任何值。在块802识别的子网络可以通过简化用于为对象或其一部分制作动画的坐标系 统,来进一步提高评估依赖图的效率。一般在世界坐标中评估依赖图,游戏系统一般使用已 烘焙元素的世界坐标来提供动画数据。然而,子网络可以用于定义局部坐标。图9是表示最初在图2中所示的元素206的示例的示意图,该元素具有在世界坐 标空间中确定的位置。如上所述,元素206是定义了对象200结构的骨骼的一部分。在图 9所示的实施方式中,对象200的整个人类形体是可见的。在图2中,仅有包含元素206的 肩膀和手臂的部分形体是可见的。在所示的实施方式中,定义了关于场景或环境的世界坐标的坐标系统902可用于 指明在对象200的骨骼中元素的定位。这样,使用世界坐标系统定义了元素206的位置 210a。每次移动元素206的父节点(例如元素204a),必须重新计算元素206a的世界坐标。 同样地,任何一次移动任何节点,必须重新计算该节点的每个子节点的坐标。子网络可以与它自己的局部坐标系统相关联。图10是表示具有在局部坐标空间 中确定的位置的元素206的示例的示意图。在所示实施方式中,坐标系统1002定义了在元素204b处作为其原点的局部坐标。在这个局部坐标系统中可以计算元素206的位置210a。 这样,元素206的局部坐标在元素204a和/或元素202a移动时不会改变。在这种情况下, 对依赖图的评估无需重新计算元素206的局部坐标,从而减少了计算的复杂度及评估依赖 图所需的时间。可以针对元素的父节点或给定节点的子网络中的任何其他元素来定义局部坐标。 由于子网络可以大体独立于其他子网络被评估,所以该子网络的局部坐标不需要像世界坐 标一样最近地更新。当更新子网络中节点的局部坐标时,通常只需要更新子网络中元素的 局部坐标,而不更新依赖图中任何其他元素的坐标。世界坐标可以由中央处理或定义来计 算,或由参照图1中所述的游戏引擎来计算,并且通常只需要在一个元素与另一个对象的 一个元素交互时计算。本领域的技术人员可以理解,以上参照图8所述的示例方法800,以及其中定义的 子网络可以用于提高评估依赖图的效率。因此,可以获得更快的动画制作,当提供显示该动 画的数据时,游戏系统也不会成为负担。动画的更高精确度如上所述,动画数据在烘焙之后导出时通常被省略。这样,可能会丢失元素移动中 的微小细节。例如,当数据被压缩或省略时,振荡运动削弱为大体上的直线运动。这样,无 法在与游戏系统通信的显示器(诸如显示设备116)上精确地重建在源处创建的运动。即 使数据没有丢失,游戏系统提供给动画制作的数据是基于元素定向的导出值,而不是基于 源数据,由此不会精确地反映在源处创建的运动。但是,通过在游戏系统处评估依赖图来为对象或其部分制作动画,将会再现与最 初在源设备处创建的运动一样的运动。这样,显示给游戏系统用户的运动就保留了对象运 动中的微小细节,并保留了动画师倾注的艺术性。这对于再现人类运动特别重要,当只是由 机器制作动画时其会表现的僵硬或不准确。但是,动画师会精心制作角色的动作以使得其 表现得栩栩如生,这些动作可以由游戏系统无损重现。为了加强上述改善的精确度,可以使用多个依赖图改善场景中元素的交互。当使 用烘焙值时,必须检测各自对象的元素之间的冲突。这种冲突的检测代价昂贵且不完全精 确。但是,当评估依赖图时,可以更容易地使用更多细节确定交互。图11是表示两个依赖图的部分可以交互的示例的框图。依赖图1101可以描述具 有方向1的第一对象的第一元素,由坐标Xl、yi、Z1定义。同样地,依赖图1102可以描述具 有方向2的第二对象的第二元素,由坐标x2、y2、Z2定义。当两个元素交互时,它们可以分组到元网络1104中,并且在它们二者之间定义功 能性节点1106,如图12所示。参照图1描述的游戏引擎可以用于识别这种分组和/或定义 这种功能性节点。可以与评估任何其他依赖图或子网络类似地评估元网络。例如,可以实 现计数器,该计数器表示方向1或方向2的值是否已改变。两个元素的交互将更为精确及 真实,因为一个元素中的动作可以用于确定其他元素中的动作。此外,可以避免代价昂贵的 碰撞检测。作为一个示例,方向1可以描述第一角色的手。方向2可以描述第二角色的手。在 游戏执行期间,两个角色可以握手。一个角色可以执行由动画曲线定义的握手,另一个角色 可以适当地作出反应,而不是每个角色都执行独立于其他角色的预定义的动画。
作为另一个示例,方向1也可以描述第一角色的手,而方向2可以描述一扇门。当 门关闭时,可以定义功能性节点1106以阻止角色的手移动这扇门或从门中穿过。例如,如 果角色的手与门把手接触,可以将功能性节点定义为允许角色的手转动门把手。本领域的技术人员可以理解,上述示例和参照图11和12所述的元网络可以用于 增加游戏系统的动画精确性。可以减少或避免动画制作中所使用的代价昂贵的操作的数 量,而且得到的动画可能更加精确自然。更加可适应的动画不是游戏中所有的交互或事件都可以预先定义。通过来自用户的输入确定游戏的 结果和导致该结果的事件。这些输入是不可预知的,并且根据情形会有所不同。在游戏执 行期间,这种输入的数量和对象的可能配置是无穷的。因此,在游戏执行期间必须确定更多 动画,而不是在源处预先定义。图13是位于两条不同动画曲线的不同位置处的对象1300的示例示意图。在图13 中,对象1300作为球棒示出。作为一个示例,角色可以挥动球棒。当跟随第一动画曲线来 向高处挥动球棒,在点1302a处定位控制元素1304,这样,球棒1300a如图所示指向上方。 当跟随第二动画曲线来向低处挥动球棒,在点1302b处定位控制元素1304,这样球棒1300b 如图所示指向下方。当烘焙动画时,必须通过混合两个现有配置来创建未被定义的配置。这样,如果角 色在高的挥动动画曲线和低的挥动动画曲线的中间挥动球棒,那么就不得不将球棒1300a 的动画和球棒1300b的动画组合起来,以生成在二者之间定位的球棒。组合已烘焙的动画 以产生这种结果的方法可以简单地创建一个对象,该对象是对象1300在两个位置1302a和 1302b的平均。这样,可以将球棒1300c作为球棒1300a和球棒1300b的空间平均来制作动 画,如图14所示。但是,这种平均会导致不准确的动画,或在平均所得动画的移动期间产生 伪像。如图14中所示,球棒1300c比球棒1300a或1300b都要短。通过组合控制元素的动画曲线可以创造更加精确的动画。因此,对那些图像的动 画曲线进行平均,并且以组合的动画曲线示出对象,而不是在空间上对对象的两个图像进 行平均。以这种方式显示先前未定义的运动可以减少伪像,并改善所得出动画的艺术品质。 例如,定义第一动画曲线是为在水平地面上行走的角色制作动画,定义第二动画曲线是为 在陡峭的小山上爬山的角色制作动画。通过组合第一和第二动画曲线,可以为该角色制作 动画,就像该角色在爬平缓的小山。图15是位于图13中位置1302a和1302b的对象1300的另一个示意图。但是,在 图15中,使用在点1302d定位的控制元素1304来为球棒1300d制作动画。可以通过对控 制元素1304在点1302a和1302b的位置和方向求平均,从而确定位置1302。如图15中所 示,得到的球棒1300d较为精确。此外,使用两条动画曲线制作动画的运动对于用户来说更 加自然和可信。此外,当动画元素使用控制元素和组合的动画曲线时,可以评估控制元素的依赖 图。通过评估依赖图,依赖图中表示的其他元素可以适当地显示,并可以保持元素的一致交 互。例如,可以将符合第一动画曲线的角色的手臂定位于角色身体的前面,而将符合第二动 画曲线的同样的手臂定位于角色身体的后面。当对它们一起求平均值时,手臂看起来穿过 角色的身体。即使使用为动画所设计的平均方法(例如球面线性内插),使用烘焙的动画
18通常无法在游戏系统中阻止这种不一致的动画。然而,依赖图中为手臂和身体配置的约束 可以阻止手臂横穿过身体,或可以在使用控制点和依赖图确定手臂的位置时使得身体不碍事。可以用多种方式组合动画曲线。在一些实施方式中,对动画曲线求平均值。在其 他实施方式中,确定动画曲线的加权平均值。可以由在源处的动画师来确定加权平均值,或 取决于游戏中的因素。例如,在上述角色爬平缓小山的示例中,可以使用第一和第二动画曲 线的加权平均值为该角色制作动画,其中通过比较平缓小山与水平地面或陡峭小山的陡峭 度来确定加权平均值。加权平均值可以是常数,或可以随时间调整。例如,游戏引擎可以确 定每个依赖图或预定义功能的相关加权变量,其可以由动画师创建或设计,可以用于随时 间改变权重。评估游戏系统中的依赖图也会增加在游戏执行期间实现反向运动的便利性。反向 运动涉及基于所期望的最终位置和方向确定元素的位置和方向。作为向前的运动求解程 序,反向的运动求解程序接收过程化输入,并且必须确定满足程序输入的调整,而不是接收 对每个元素的调整。例如,当参照图4所述评估依赖图时,使用每个时间tg的动画曲线确定元素的位 置和方向。然而,不会对反向运动求解程序给予该动画曲线,但必须在没有该动画曲线的情 况下确定每个位置和方向,或必须唯一确定一条动画曲线。例如,游戏系统的用户可以输入 指令让角色从桌子上捡起一个物品诸如一片食物。反向运动求解程序可以接收角色的手的 最终位置,其等于食物物品的位置,此后可以确定手的位置、方向和动作以及会使手达到该 最终位置的关联元素。为了确保由游戏系统制作动画时,反向运动解决方案会在美学上使人愉悦,动画 师可以在源处确定或创建反向运动骨架及依赖图。反向运动依赖图可由游戏系统使用以基 于过程化输入确定反向运动的解决方案。因此,即使遇见与预定义的动画曲线没有关联的 情形,也可以使用动画师初始的艺术品为该情形中的事件制作动画。反向运动依赖图可以定义为与在示例方法500的块506处导出的依赖图有关。在 此实施方式中,可以重新配置使用动画曲线为对象或其一部分制作动画的依赖图,以求解 反向运动问题。例如,依赖图400部分中的值节点408x、408y和408z分别表示x、y、z平面 中的动画曲线,可以用节点代替,该节点保持表示依赖图400表示的元素所需的下一个坐 标的值。功能性节点410x、410y、410z同样可以由节点代替,该节点保持着确定产生元素的 这种所需坐标的角度或方向的功能。本领域的技术人员将认识到依赖图400或特别是该依 赖图400的部分可以被重新配置用于反向运动的其他方式。反向运动依赖图也可以被定义为完全分离的依赖图。动画师可以在源处创建这种 依赖图,并在方法500的块506处导出对这种依赖图的描述,在块508处加载到游戏系统, 此外先前描述的依赖图和动画曲线数据也被导出和加载。反向运动依赖图可以在游戏执行 期间以交互式的速率进行评估。游戏引擎(如参照图1所描述的游戏引擎)可以识别指示应该使用反向运动的事 件。这种事件可以导致依赖图被重新配置,或导致使用分离的依赖图。例如,当用户输入命 令使角色捡起物品时,如上所述,引擎会切换到反向运动依赖图,以确定角色的手和使手到 达物品位置的连接元素的动作。在一些实施方式中,两个依赖图用于为反向运动制作动画,以确保所确定的反向运动解决方案是平滑的。例如,使用第一反向运动依赖图确定的动作 可以与使用第二反向运动依赖图确定的动作相混合。可使用两个依赖图的平均、两个依赖 图的常量加权平均或随时间变化或改变的两个依赖图的加权平均来确定混合过程。在游戏系统评估反向运动依赖图提供了很多优点。例如,动画师在源设备处创建 的依赖图可以用于确定反向运动算法以替代请求游戏系统。游戏系统定义的这种反向运动 解决方案可能不会保持动画师的作品,并可以成为游戏系统的负担。此外,使用反向运动依 赖图,反向运动解决方案可以更加精确,并可以涉及更多元素,由此使得得出的动画对用户 来说更加可信。例如,如果角色正在从场景的地板上捡起物品,游戏定义的反向运动解决方 案可以为角色制作动画,角色可以向下伸手或僵硬地弯腰。使用反向运动依赖图,可以为角 色制作动画,如屈膝并以更加栩栩如生的方式捡起物品。本领域的技术人员可以理解,上述示例可以用于增强游戏系统生成的动画的适应 性,这些示例包括参照图13至图15所述的动画曲线混合及反向运动依赖图。以一致性的 简单方式使用游戏系统可以为那些没有由动画师专门制作动画的情形制作动画。本领域的技术人员可以理解,上述的示例系统、设备、方法和实施方式可以以游戏 系统评估依赖图和动画曲线。可以在游戏执行期间以交互式速率由游戏系统评估依赖图。 对依赖图的评估可以给为对象或其一部分制作动画提供数据,例如在与游戏系统通信的显 示设备上提供数据。对依赖图的描述可以减少向游戏系统传输所需的数据量。识别依赖图 的子网络可以提高评估依赖图的效率。依赖图可以由多个处理器并行评估。可以定义函数 以联系两个依赖图,也可以组合依赖图的动画曲线。切换事件使游戏系统使用反向运动依 赖图。游戏系统因此可以在更多情形中,使用较少资源并以更高精确度来更快地生成动画。本领域的技术人员将认识到,虽然此处所述的特定示例和实施方式涉及元素位置 或方向的改变,但此处的描述也能等同地应用于由控制元素和/或动画曲线定义、表示或 识别的状态的任何变化。例如,状态变化可以表示移动、方向、位置、颜色、形状、阴影或纹理 的修改路径,或者可以表示一个所选动作或多个所选动作的触发。本领域的技术人员将认识到,所述的系统、设备、组件、方法或算法可以使用多种 配置或步骤来实现。上述的单个示例对于配置或步骤的数量不构成限制。例如,游戏系统 100的配置存在于所述的组件示例之中,其中的组件可以以电子硬件、计算机软件或二者的 组合来实现。示意性的示例以功能性的概括方式被描述如上。不脱离本发明的范围即可实 现更多或更少的组件或步骤。本领域的技术人员会想到实现所述功能的多种方式,但这种 实现不应被解释为脱离了本发明的范围。虽然上面的详细说明已经示出、描述并指出了应用到各个方面的新颖特征,但可 以理解的是,本领域的技术人员在不脱离本发明范围的情况下,可以对所示系统、设备或方 法在形式和细节上进行各种省略、替换及修改。如所想到那样,内容及其变体可以以并不 提供此处阐明的所有特征及益处的方式实现,因为一些特征可以与其他特征分开使用或实 现。本发明的范围由所附权利要求、前面的说明书或以上二者来限定。
权利要求
一种在游戏动画系统上执行游戏的方法,包括识别源动画曲线数据,所述源动画曲线数据描述控制元素的状态随时间的变化;识别第一依赖图的描述,所述依赖图定义所述源动画曲线数据的变换;及当执行所述游戏时,以交互式速率来评估所述第一依赖图。
2.如权利要求1的方法,进一步包括基于所述控制元素的状态来显示对象,所述对象 由所述第一依赖图的所述描述中的多个节点来描述。
3.如权利要求2的方法,其中显示对象包括通过由所述多个节点描述的多个元素来 为网格或蒙皮制作动画。
4.如权利要求2的方法,进一步包括更新所述多个节点的至少一个节点中的计数器。
5.如权利要求2的方法,进一步包括确定所述多个节点中一个节点的计数器不等于 所述多个节点中所述节点的父节点的计数器,以及请求更新所述多个节点中的所述节点。
6.如权利要求1的方法,其中评估所述第一依赖图包括将所述源动画曲线数据变换 为可由以下至少一个系统使用的数据绘制系统、游戏保存系统、物理系统和特效系统。
7.如权利要求1的方法,进一步包括提供表示预定义的点沿着先前定义的路径移动 的数据。
8.如权利要求1的方法,进一步包括生成表示与一个或多个其他元素关联的第一元 素的方向的数据,所述第一元素和所述一个或多个其他元素定义了对象的至少一部分的结 构以供显示。
9.如权利要求1的方法,进一步包括存储至少包含所述第一依赖图的第一节点的第一数据结构,所述第一节点表示多个相 关元素中的一个元素的第一空间或时间值;以及存储至少包含所述第一依赖图的第二节点的第二数据结构,所述第二节点表示所述第 一时间或空间值与所述多个相关元素中的一个元素的第二时间或空间值之间的关系,其中所述第二数据结构与所述第一数据结构不同。
10.如权利要求1的方法,进一步包括重新配置所述第一依赖图的描述,使得重新配 置的第一依赖图能够用于至少部分地基于在所述游戏执行期间接收的过程化输入,来决定 用于显示的至少一个元素的位置。
11.如权利要求1的方法,进一步包括至少部分从基于来自评估所述第一依赖图的描述获取的数据,为第一对象的至少一部 分制作动画;在评估所述第一依赖图之后识别切换事件;以及至少部分基于从评估第二依赖图的描述获取的数据,为所述第一对象的至少一部分制 作动画,对所述第二依赖图的描述的评估在识别切换事件之后。
12.如权利要求1的方法,进一步包括组合两条源动画曲线,其中对所述第一依赖图 的评估基于组合的源动画曲线。
13.如权利要求1的方法,进一步包括识别所述第一依赖图和在执行游戏时评估的第 二依赖图之间的关系。
14.如权利要求1的方法,进一步包括相对于源计算设备上使用所述源动画曲线数据 而制作动画的对象的运动,以运动无损的方式为对象制作动画。
15.一种用于在游戏动画系统上执行游戏的设备,包括用于识别源动画曲线数据的装置,所述源动画曲线数据描述控制元素的状态随时间的 变化;用于识别第一依赖图的描述的装置,所述依赖图定义所述源动画曲线数据的变换;以及用于当执行所述游戏时以交互式速率来评估所述第一依赖图的装置。
16.如权利要求15的设备,进一步包括用于基于所述控制元素的状态来显示对象的 装置,所述对象由所述第一依赖图的描述中的多个节点来描述。
17.如权利要求15的设备,其中用于评估所述第一依赖图的装置包括,用于将所述源 动画曲线数据变换为在以下至少一个系统中可使用的数据的装置绘制系统、游戏保存系 统、物理系统和特效系统。
18.如权利要求15的设备,进一步包括提供表示预定义的点沿着先前定义的路径移 动的数据的装置。
19.如权利要求15的设备,进一步包括用于生成表示与一个或多个其他元素相关联 的第一元素的方向的数据的装置,所述第一元素和所述一个或多个其他元素定义了对象的 至少一部分的结构以供显示。
20.如权利要求15的设备,进一步包括用于存储至少包含所述第一依赖图的第一节点的第一数据结构的装置,所述第一节点 表示多个相关元素中的一个元素的第一空间或时间值;以及用于存储至少包含所述第一依赖图的第二节点的第二数据结构的装置,所述第二节点 表示所述第一时间或空间值与所述多个相关元素中的一个元素的第二时间或空间值之间 的关系,其中所述第二数据结构与所述第一数据结构不同。
21.如权利要求15的设备,进一步包括用于重新配置所述第一依赖图的描述、使得重 新配置的第一依赖图能够用于至少部分地基于在所述游戏执行期间接收的过程化输入来 决定用于显示的至少一个元素的位置的装置。
22.如权利要求15的设备,进一步包括识别所述第一依赖图和在执行游戏时评估的 第二依赖图之间的关系的装置。
23.一种由游戏系统为元素制作动画的方法,包括提供第一依赖图的描述,其用于为第一对象的至少一部分制作动画,所述第一对象至 少部分地由多个相关的元素定义;识别多个子网络,每个子网络包括所述第一依赖图中的多个节点,其中每个子网络中 的所述多个节点描述了至少两个所述相关元素随时间的运动,并可独立于所述依赖图中的 剩余节点而被评估;为每个子网络分配所述游戏系统的多个处理器中的一个处理器,其中至少两个子网络 被分配不同的处理器;以及利用分配给所述子网络的处理器来评估至少一个子网络中的节点,从而为与所述子网 络的至少两个相关元素相关联的运动制作动画。
24.如权利要求23的方法,进一步包括3存储至少包括第一节点的第一数据结构,所述第一节点是多个节点中的一个节点,并 表示多个相关元素中的一个元素的第一空间或时间值;以及存储至少包括第二节点的第二数据结构,所述第二节点是所述多个节点中的一个节 点,并表示所述第一时间或空间值与所述多个相关元素中的一个元素的第二时间或空间值 之间的关系,其中所述第二数据结构不同于所述第一数据结构。
25.如权利要求23的方法,进一步包括确定第二依赖图中节点的子网络与基于所述 第一依赖图的所述多个子网络中的一个子网络之间的关系,所述第二依赖图具有用于为第 二对象的至少一部分制作动画的数据。
26.如权利要求25的方法,进一步包括使用多个处理器中的一个来评估已定义的关 系,所述评估独立于对所述第一依赖图和所述第二依赖图的其余部分的评估。
全文摘要
提供了以游戏系统评估源依赖图和动画曲线的系统、设备及方法。依赖图可以在游戏执行期间以交互式速率受到评估。动画曲线可以描述控制元素的状态随时间的变化。可以使用多个处理器识别和评估依赖图的子网络。
文档编号G06F19/00GK101916324SQ200910258479
公开日2010年12月15日 申请日期2009年11月17日 优先权日2008年11月17日
发明者A·K·琼斯, A·T·克莱顿, B·A·爱德华兹, B·E·科拉德, F·H·格拉哈姆, T·J·科尔伯特 申请人:迪士尼企业公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1