图形处理器上的物理仿真的制作方法

文档序号:6455928阅读:192来源:国知局

专利名称::图形处理器上的物理仿真的制作方法
技术领域
:本发明总体上涉及图形处理器,更确切地说,涉及使用图形处理器进行游戏物理仿真。
背景技术
:计算机系统上运行的诸如视频游戏之类的应用程序可能既需要物理仿真又需要图形渲染。例如,图1描绘了典型流水线的框图100,用于计算和显示视频游戏场景中描绘的一个或多个角色的运动。在步骤110中,为了确定该场景中描绘的所述一个或多个角色的运动而进行物理仿真。然后在步骤120中,对物理仿真的结果进行图形渲染,以使终端用户可见。典型情况下,步骤110的物理仿真由在该计算机系统的中央处理器(CPU)或专用设备上执行的物理引擎进行。然后,步骤120的图形渲染由图形处理器(GPU)进行。不过,由物理引擎产生的结果最终用于修改视频游戏(或者更一般地说是应用程序)的图形,所以将以某种形式传送到GPU。因为来自物理引擎的结果必须传送到GPU以便渲染,所以可能会产生等待时间和带宽问题。不仅如此,CPU作为通用处理器,不具有GPU的并行处理能力。了解了以上情况后,所需要的就是用于在一个或多个GPU上执行物理仿真的方法、计算机程序产品和系统。
发明内容本发明的若干实施例可以包括方法、计算机程序产品和系统,利用GPU上可用的并行处理能力,实现了与典型CPU上执行的物理仿真相比更快的帧速率。不仅如此,这样的方法、计算机程序产品和系统在进行所述物理仿真时采用了隐式积分技术,以避免显式积分技术中所需的相对小的时间步长。另外,过程(procedural)力和力矩可以表示为在GPU上执行的渲染器(渲染器)程序。此外,基于GPU的物理仿真器能够自动更换通常在计算机系统上执行物理仿真的常规软件动力学求解器。本发明的若干实施例通过提供用于在一个或多个GPU上进行物理仿真的方法、计算机程序产品和系统,满足了以上指明的需求。这种在一个或多个GPU上进行物理仿真的方法、计算机程序产品和系统利用了所述GPU上可用的并行处理能力,从而实现了与典型CPU上执行的物理仿真相比更快的帧速率。不仅如此,这样的方法、计算机程序产品和系统采用一个实施例中的隐式积分技术进行物理仿真,从而避免了显式积分技术中所需的相对小的时间步长。另外,根据本发明实施例,过程力和/或力矩可以表示为在GPU上执行的渲染器程序。此外,根据本发明实施例的基于GPU的物理仿真器可以用于自动更换典型情况下在计算机系统上执行物理仿真的常规软件动力学求解器。根据本发明的实施例,提供了在至少一个GPU上进行物理仿真的方法。所述方法包括以下步骤。首先,将表示与至少一个网格相关联的物理属性的数据存储在多个视频存储器阵列中,以便建立控制场景中描绘的所述至少一个网格的运动的线性方程系统。然后,使用至少一个像素处理器对所述多个视频存储器阵列中的所述数据进行计算,以便求解某时刻的所述线性方程系统,其中,将表示所述时刻所述线性方程系统的求解结果的修改后数据存储在所述多个视频存储器阵列中。根据本发明的另一个实施例,提供了包括计算机可用介质的计算机程序产品,在该计算机可用介质中存储有用于使至少一个GPU进行物理仿真的控制逻辑。所述控制逻辑包括计算机可读的第一和第二程序代码。所述计算机可读的第一程序代码使所述至少一个GPU将表示与至少一个网格相关联的物理属性的数据存储在多个视频存储器阵列中,以便建立控制场景中描绘的所述至少一个网格的运动的线性方程系统。所述计算机可读的第二程序代码使所述至少一个GPU对所述多个视频存储器阵列中的所述数据进行计算,以便求解某时刻的所述线性方程系统,其中,将表示所述时刻所述线性方程系统的求解结果的修改后数据存储在所述多个视频存储器阵列中。根据本发明的进一步实施例,提供了用于进行物理仿真的系统。所述系统包括的存储器存储着多个视频存储器阵列和与所述存储器耦合的至少一个像素处理器。所述多个视频存储器阵列存储着表示与至少一个网格相关联的物理参数的数据,以便建立控制场景中描绘的所述至少一个网格的运动的线性方程系统。所述至少一个像素处理器对所述多个视频存储器阵列中的所述数据进行计算,以便求解某时刻的所述线性方程系统,结果是表示所述时刻所述线性方程系统的求解结果的修改后数据。以下将参考附图,详细介绍本发明的进一步特点和优点,以及本发明多种实施例的结构和操作。注意,本发明不限于本文介绍的特定实施例。本文给出这样的实施例仅仅是为了展示的目的。根据本文包含的教导,另外的实施例对于相关领域的技术人员将是显而易见的。在本文中加入并形成说明书一部分的附图,展示了本发明,并且连同说明,进一步用于讲解本发明的原理并使相关领域的技术人员能够做出和使用本发明。图1描绘的框图展示了典型的图形流水线;图2描绘的框图是根据本发明的实施例在GPU上进行物理仿真的实例工作流程;图3描绘的框图是根据本发明实施例的实例像素处理器;图4描绘的框图是根据本发明实施例的实例物理/渲染流水线;图5描绘的框图是根据本发明的实施例在GPU上进行的实例物理仿真流水线;图6描绘的框图是根据本发明的实施例绕过软件动力学求解器从而在GPU上进行物理仿真的实例工作流程;图7描绘的框图展示了根据本发明的实施例在GPU上进行物理仿真的实例方法;图8描绘了根据本发明的实施例用于对织物进行建模的实例点网格;图9描绘了根据本发明的实施例在GPU上进行物理仿真的实例高级流程图;图10描绘了根据本发明的实施例将与点网格相关联的物理参数映射到视频存储器中的实例两步流程图;图11描绘了根据本发明的实施例按每结合点(joint)方式确定合力和雅可比矩阵非对角线部分的实例流程图;图12描绘了根据本发明的实施例按每结合点方式确定雅可比矩阵对角线部分的实例流程图;图13描绘了其中可以实施本发明实施例的实例计算机系统的框图;图14A描绘的实例方式中,根据本发明的实施例顶点缓冲区的内容被映射到3×3单元的阵列;图14B描绘的实例方式中,根据本发明的实施例索引缓冲区的内容被映射到3×2的网格;图15A描绘的实例中,顶点缓冲区存储着8个顶点位置;图15B描绘的实例中,索引缓冲区存储着5个面,这些面对应于图15A中描绘的实例顶点缓冲区中存储的顶点位置。连同附图阅读以下阐述的详细说明,本发明的特点和优点将变得更加显而易见,其中至始至终类似的引用字符标识对应的要素。在附图中,类似的引用号一般指一致的、功能类似的和/或结构类似的要素。要素首次出现的图由对应引用号中的最左边的数字来指明。具体实施例方式I.一个或多个GPU上的物理仿真综述A.在一个或多个GPU上进行物理仿真的实例工作流程B.执行物理仿真的实例GPUII.实例物理仿真接口A.实例物理仿真软件接口(FYSI)B.实例物理场景描述语言(FYSL)C.可以接收与点网格相关联的物理参数的实例方式III.在一个或多个GPU上进行物理仿真的实例方法A.方法综述B.进行织物仿真的实例物理模型C.在GPU上仿真织物的实例实施方案D.以FYSL编写的实例代码IV.实例计算机实施方案V.结论I.一个或多个GPU上的物理仿真综述本发明的实施例针对在一个或多个GPU上进行物理仿真的方法、计算机程序产品和系统。这样的物理仿真可用于例如进行应用程序(比如视频游戏)的游戏计算。为了根据本发明实施例在一个或多个GPU上进行物理仿真,与网格相关联的若干物理参数被直接地映射到视频存储器中。此网格可以表示任何有形对象,比如固体对象、体积、流体或织物。本文更加详细呈现的实例方法在一个或多个GPU上进行织物的物理仿真。在将网格映射到视频存储器中后,GPU的至少一个像素处理器使用编译后的渲染器程序对视频存储器中的数据进行计算。直接在GPU上进行物理仿真可以减少与在CPU上进行的典型物理仿真相关联的等待时间和带宽问题。在本说明书自始至终都按照实例物理仿真软件接口(称为FYSI)和物理场景描述语言(称为FYSL)介绍在一个或多个GPU上进行物理仿真的方法、计算机程序产品和系统。不过,本发明不限于FYSI和FYSL。根据本文的说明,相关领域的技术人员将理解,使用其他类型的物理仿真软件接口和其他类型的物理场景描述语言也可以实现在一个或多个GPU上进行物理仿真的方法、计算机程序产品和系统。应当指出,本说明书中对“一个实施例”、“实施例”、“实例实施例”等的引用,表明所描述的实施例可以包括具体特性、结构或特征,但是每个实施例中可以不一定包括所述具体特性、结构或特征。不仅如此,这样的短语不一定是指同一实施例。此外,当结合实施例说明具体特性、结构或特征时,无论是否显式地说明,都认为连同其他实施例对这样的特性、结构或特征的改变是在本领域技术人员的知识范围之内。以下更加详细介绍的本发明的实施例将物理仿真映射到一个或多个GPU上。在第II部分中介绍了进行这种映射的实例接口。第III部分呈现了在一个或多个GPU上进行物理仿真的实例方法,包括在GPU上仿真织物的实例方法的具体实施方案。在第IV部分中介绍了在一个或多个GPU上实施物理仿真的实例计算机系统。不过,在详细介绍本发明的实施例之前,对在一个或多个GPU上进行物理仿真的实例工作流程和实施物理仿真的实例GPU的概况进行介绍是有帮助的。A.在一个或多个GPU上进行物理仿真的实例工作流程图2描述了在GPU上进行物理仿真的实例工作流程的框图200。框图200包括多个软件部分,比如应用程序210、物理仿真软件接口212、应用程序编程接口214和驱动程序216,它们在主机计算机系统上执行并与若干图形硬件部件(比如GPU218、(可选的)GPU220和/或多台GPU(未显示))相交互,以进行物理仿真和渲染帧以便输出到显示器222。现在更详细地介绍框图200的各个部分。如图2所示,框图200包括应用程序210。应用程序210是要求图形处理能力的终端用户应用程序,比如视频游戏应用程序。应用程序210调用物理仿真软件接口212。在一个实施例中,物理仿真软件接口212是由ATI技术公司开发的称为FYSI的接口。本文将更详细地介绍FYSI。不过,如上所述,本发明不限于FYSI。正如对相关领域的技术人员显而易见的那样,可以使用其他的物理仿真软件接口而不脱离本发明的精神和范围。物理仿真软件接口212创建了在其上进行物理仿真的简单的可扩展抽象机(SEAM)。物理仿真软件接口212与API212进行通信。有几个API可以在图形处理环境中使用。API过去是作为应用程序软件比如应用程序210与在之上运行应用程序软件的图形硬件之间的媒介而开发的。随着新的芯片组甚至全新的硬件技术以日益加快的速度出现,应用程序开发者难以考虑到并利用最新的硬件特点。对于每种可预见的硬件组都专门编写应用程序也变得日益困难。API防止了应用程序不得不过于硬件专用化。应用程序能够以标准化格式向API而不是直接向硬件输出图形数据和命令。因为物理仿真软件接口212直接与API214进行通信,所以没有必要修改可用的API。可用的API实例包括或API210可以是用于运行图形应用程序的可用API中的任何一个。正如本领域的普通技术人员将认识到的那样,本发明的替代实施例可以将物理仿真软件接口212集成到API214中,从而允许应用程序210与单一的软件接口合作。在这样的实施例中,驱动程序216然后将被修改为符合这种将物理仿真软件接口212的若干方面与API214进行组合的单一接口。API210与驱动程序216进行通信。驱动程序216典型情况下由图形硬件制造商编写,并且将从API收到的标准代码翻译成图形硬件理解的本机格式。驱动程序216也接受输入以便指导对图形硬件的性能设置。这样的输入可以由用户、应用程序或进程提供。例如,用户可以利用用户界面(UI)提供输入,比如图形用户界面(GUI),它与驱动程序216一起被提供给用户。驱动程序216与第一GPU218和/或第二GPU220进行通信。第一GPU218和第二GPU220是图形芯片,每个都包括进行物理仿真和图形渲染的渲染器和其他相关联的硬件。在实施例中,物理仿真和图形渲染在单个GPU上进行,比如在第一GPU218上。在替代实施例中,物理仿真在一个GPU(或核)上执行,比如在第一GPU218上,而图形在另一个GPU(或核)上渲染,比如在第二GPU210上。在更进一步的实施例中,物理仿真和图形渲染由多个GPU执行。物理仿真之后,渲染过的图形被发送到显示器单元222进行显示。GPU218和GPU220的每一个都可以按照下一部分中的介绍实施。B.执行物理仿真的实例GPU根据本发明实施例的GPU架构允许采用导致数据层次并行性的单指令、多数据(SIMD)技术。这样的GPU包括处理器和纹理(或视频存储器)。处理器对纹理中的数据进行操作。操作的结果被写入到渲染器目标(视频存储器的一部分)中。渲染器目标可以再分配为纹理也可以再分配为随后的计算。纹理被排列在存储器阵列中,比如存储器的1D、2D或3D阵列。渲染器是为处理器对纹理中的数据进行特定的计算而编写的小程序或指令集。图3描绘的框图300展示了根据本发明的实施例在一个或多个GPU上执行物理仿真的实例像素处理器。框图300中包括了六个纹理310a至310f、八个常数存储寄存器308a至308h以及像素处理器306。存储器阵列(比如1D、2D或3D存储器阵列)的纹理坐标302可以写入到纹理310中。相反,常数数据值存储在常数存储寄存器308中。像素处理器306对纹理310和/或常数存储寄存器308中的数据进行操作。在进行这些操作之后,像素处理器306可以将数据写入到纹理310之中,并且/或者产生输出314。由像素处理器306执行的操作由类似于CPU汇编语言指令的若干指令指定。现在介绍在GPU顶点处理器中表示网格的实例方式。网格由一对一维列表(顶点缓冲区和索引缓冲区)组成。如图15A所展示,顶点缓冲区保留着顶点位置。图15A所示的实施例展示了七个顶点位置。图15A仅仅用于展示目的而不是限制。在顶点缓冲区中可以存储不同数量的顶点位置,正如对相关领域的技术人员会显而易见。如图15B所展示,索引缓冲区存储着面索引。图15B仅仅用于展示目的而不是限制。在索引缓冲区中可以存储不同数量的面索引,正如对相关领域的技术人员会显而易见。面表示三角形,而面索引指向顶点缓冲区中。例如,在索引缓冲区中存储的面可以包括三个顶点,标注为0、1和2。这些标注的顶点中的每一个都指向顶点缓冲区中的单独的位置。现在介绍将网格映射到视频存储器中的实例方式。这种实例方式仅仅是为了展示目的而给出的,而不是限制。根据本文包含的描述,将网格映射到视频存储器中的其他方式对相关领域的技术人员将显而易见。顶点和索引列表被各自映射到视频存储器中优化的N维阵列上,以便更好地利用像素引擎的并行性。优化的N维阵列是为了使得该N维阵列适于进行物理仿真所用的GPU的最大可寻址性。顶点缓冲区映射到n×m个单元的阵列上,而索引缓冲区映射到l×k的网格上。视频存储器中的每个单元(如像素)都包括有四个分量的矢量。前三个分量表示位置的x、y和z分量,而第四个分量是边界标记符(下面将介绍它)。在实施例中,顶点和索引列表被分别映射到视频存储器中优化的二维阵列上,如图14A和图14B所示。在这个实施例中,顶点缓冲区映射到3×3个单元的阵列上,而索引缓冲区映射到3×2的网格上。在场景中有多个网格的情况下,根据本发明实施例,全部网格被联合为一个二维合成网格。通过为每个子网格标注唯一的标识(“id”),该合成网格在视频存储器中记录了子网格边界。该id被记录为每个网格单元的第四个分量。网格合成既减轻了与下载到视频存储器中的小尺寸网格相关联的开销,也减缓了纹理使用总量对硬件资源的压力。II.实例物理仿真接口正如以上关于图2所述,物理仿真软件接口212允许应用程序210在GPU218、GPU220和/或多个GPU上进行物理仿真。在本节中介绍实例物理仿真接口。首先介绍称为FYSI的实例物理仿真软件接口。然后介绍用于表达在FYSI中体现的抽象概念的称为FYSL的实例场景描述语言。最后介绍将物理参数和属性转换为FYSL的实例方式,这种转换的目的是使用FYSI在一个或多个GPU上进行物理仿真,从而绕过常规的软件动力学求解器。不过应当认识到,呈现的这些实施例仅仅是为了展示目的而不是限制。根据本文包含的说明,相关领域的技术人员将理解如何实施其他类型的物理仿真软件接口以便在一个或多个GPU上进行物理仿真。A.实例物理仿真软件接口(FYSI)FYSI——实例物理仿真接口软件系统——是将传统的基于CPU的仿真有关的计算映射到GPU上的工具。与游戏物理仿真中通常经历的互动速率相比,利用FYSI可以达到的速率更高。FYSI脱离了将碰撞检测和求解映射到图形硬件的常规遮挡查询(occlusionquery)模态。取而代之的是它提出一种借助了不断增加的硬件可编程遮蔽(shading)能力的全局仿真解决方案。图4描绘了扩展的图形流水线的框图400,其中物理仿真阶段410向视觉渲染阶段420供应数据。物理仿真阶段410接受物理描述抽象。仿真和场景的定义都由该描述提供。场景由若干角色组成,每个角色都具有其自己的一组形状、动力学和物质特性。形状建立了参与角色的几何性质,动力学构成了物理行为,而物质则提供了物质的接触属性。另外,场景可选择地声明了若干结合点,它们引入了对一对角色的运动限制。仿真过程以时间方向的迭代离散均匀步长开始。物理描述抽象采用称为FYSL的语言形式,其代表物理场景描述语言。FYSL是与平台无关的、可扩展的并且在必要时提供在多个GPU之间分割仿真任务的结构。在渲染方框420中,来自物理方框410的仿真结果经过渲染以便可视化。一般来说,对于每个渲染帧都进行几个物理仿真步骤。因此,仿真和视觉渲染任务这两者的累积帧速率确定了对用户的最终交互速率。FYSI是提供物理仿真需求的软件开发环境。最初,FYSL的输入抽象经受语法分析并转换为内部场景数据结构的集合。然后在GPU中开始仿真。仿真结果或者利用共享的纹理被直接传递到视觉渲染线程,或者选择性地可用于由程序员读回。最后,FYSI在图形硬件接口之上实施计算抽象层(CAL)包装,以方便可扩展性。在实施例中,FYSI与微软的(9.0和10.0版本)相连;不过,相关领域的技术人员将认识到,FYSI也能够与或某种其他API相连。游戏中的物理仿真领域相当广泛并覆盖了大量的主题。它们中包括刚体、织物、流体以及一般来说可变形体的仿真。物理仿真的类型蕴涵了从仿真阶段传递到视觉渲染阶段的数据格式。在刚体的情况下,FYSI传给视觉线程变换数据,它表示进入到最近仿真时段中对象的增量状态变化。织物模型返回被扰动的原始粒子位置,而对于流体或可变形体,仿真形状的结果与其初始定义几乎无关。典型情况下,物理仿真过程由计算所限,并且从它到视觉渲染线程的带宽需求相对有限。在相当高的级别上能够形成通用的流水线500,并且能够将其应用于大多数上述的物理仿真方面,正如图5所示。流水线500包括系统建立阶段510、求解器阶段520和碰撞阶段530。在系统建立阶段510,输入或者是初始场景描述或者是场景的增量状态更新。系统建立阶段510的角色是进行物理模型的集成,并且得到形式为A*x=b的线性方程系统,其中A是矩阵,x是未知数而b是已知的向量。在求解器阶段520,求解线性方程系统并根据线性方程系统的解更新所描述场景的状态。使用相关领域的技术人员可用的若干数值技术求解线性方程系统。在实施例中,使用修改后的共轭梯度方法求解线性方程系统,该方法更详细的描述见下文和DavidBaraff和AndrewWitkin的“LargeStepsinClothSimulation”,ComputerGraphicsProceedingspp.43-54(July19-24,1998)(后文称为“Baraff参考文献”),通过引用将其全部内容并入于此。在碰撞阶段530,对更新后的模型进行可能碰撞的测试。作为算出的接触的结果,进一步修改场景的状态。通过检查若干点对是否交叉来进行碰撞检测。相关领域的技术人员熟知碰撞检测的若干技术。参见比如Baraff参考文献第50页。对于仿真步骤的每一步,物理流水线500都重复地实施其若干阶段。一般来说,场景中的角色不是被分别考虑就是被按组考虑。正如在刚体的情况下,个体角色经过流水线500的系统建立阶段510和求解器阶段520,仅仅执行碰撞阶段530。织物、流体和可变形体一般被视为具有显式相互作用模型的角色集合。因此,它们在大多数情况下应当执行流水线500的全部阶段。本文在第III部分将介绍织物经过物理流水线500的实例。B.实例物理场景描述语言(FYSL)输入给FYSI物理仿真接口库的输入抽象以称为FYSL的定制场景描述格式来表达。FYSL以XML的格式来表达并由五个部分组成场景、仿真、角色、结合点和反馈。这些FYSL部分中的每一部分都包括模式(schema)标签和可选值赋值。以下将介绍模式标签和可选值赋值。在本子节的结尾提供了FYSL程序的实例。FYSL的第一部分是场景。在这部分中,定义了将描述的场景。在表1中给出了实例全局场景标签。表1场景标签FYSL的第二部分是仿真。FYSI中的仿真过程是离散的并在若干步骤中开始。FYSL的仿真特性包括类型和仿真步骤之间的时间间隔。此外,表示对全部场景角色一致施加的力的全局场能够可选择地加入到仿真定义中。在本实施例中,FYSL提供了三种类型的力场标签拖拉场、方向场和过程场。拖拉场是由三个标量值(每一维一个)组成的矢量,它根据角色的线性速度施加制动力。方向场是一元力,在仿真时始终不变并且在由向量指定的方向上施加。方向场的实例是重力。过程场表示更复杂的场,它可能在时间和空间上都变化。过程场附带的字符串是函数,该函数被进一步转换为在GPU上执行的渲染器程序的代码。仿真标签实例在表2中显示,场标签实例在表3中显示。表2.仿真标签表3.场标签FYFL的第三部分是角色。典型情况下,在可以是一维的、二维的或三维的逻辑网格中构建一组角色。网格用作在GPU视频存储器中部署角色属性的手段。网格标签包括宽度、高度和深度值,如表4所示。表4.网格标签角色由全局的和具体的形状和动力学特性指定。形状用于确定成双地碰撞检测,而动力学特性则便利了用于求解响应的物理行为。FYFL和FYSI都使用左手坐标系定义形状。全局角色标签包括名称、类型和id值,如表5所示表5.角色标签期望角色id(身份)为正整数,在同一层次的角色组中唯一。在大多数情况下,期望FYSI为在FYSL说明中遗漏的角色分配默认的场景特性。在所介绍的FYSL实施例中支持的形状定义包括长方体(轴对齐或轴定向)、球、网格以及四面体。角色的形状在本地参考系中定义。界定某些体积的长方体和球表示为一对中心和半径(后者分别不是向量就是标量)。网格和四面体采用顶点位置的集合(对于四面体顶点的数量固定为4)和一组面索引(对于四面体是隐含的)。对于网格,面是显式的;而对于四面体,面是隐含的。形状与矩阵相关联以便指定本地参考系到世界坐标的空间变换(参考以下的讨论)。表6到表10展示了形状的特定标签。表6.形状标签——公用表7.形状标签——长方体表8.形状标签——球表9.形状标签——网格表10.形状标签——四面体对于有界体积,质心由形状定义而明确。对于网格和四面体,FYSI将隐含地计算质心,除非在线性运动学特性组中已经提供。网格的质心参数没有必要由用户提供,但是它存在时将取代FYSI内部算出的参数。仿真在世界坐标空间中进行。形状变换串联了平移和旋转分量,平移和旋转分量分别是向角色施加线性运动和角运动的结果。所得矩阵将形状从本地坐标空间变换到世界坐标空间。FYSI客户机使用该变换矩阵进行视觉渲染处理。在FYSI内部,FYFL长方体形状可以选择轴对齐(AABB)或定向(OBB)计算路径。该选择相当动态并且可能随仿真步骤而变,比如根据接触响应而变。一般来说,用于碰撞检测的AABB路径比OBB路径更高效。动力学属性可以是线性的、角度的和物质类型的任何组合。动力学属性定义若干运动学的特性,包括质量、速度、显式的质心位置、方位和施加的力。另外,它们还提供了接触响应物质属性,比如恢复和摩擦。用于线性的、角度的和物质类型的动力学标签分别在表11、表12和表13中提供。表11.动力学标签——线性的表12.动力学标签——角度的表13.动力学标签——物质的对于支撑所执行物理行为规则的FYSI,刚体具有点质量。线性运动和外力施加在物体的质心上;旋转运动施加到接触点。FYSL转矩存在时,施加到长方体或网格形状中任何一个的顶点上。在基于粒子的角色的情况下,转矩也是有意义的,其中每个粒子都定义为半径为零的球。转矩取决于相对于角色(或者在粒子的情况下为父角色)质心的位置。转矩影响角色的最终角运动。对于基于粒子的角色(比如没有空间范围的无形状角色),FYSL转矩是有意义的。转矩取决于粒子相对于顶层角色实际质心的位置。转矩影响粒子的角运动。期望角色的方位是正交矩阵,其行和列都具有单位长度。omega动力学特性是以弧度为单位的角矢量。对于任何轴,正角将导致围绕轴反时针方向的旋转;而负角将导致围绕轴顺时针方向的旋转。网格和四面体面索引都从零开始,并且每个都代表着反时针方向的三角形。角色的网格部署利用了GPU固有的数据并行架构。该网格还提供了要从物理分配的GPU中读回的最终图像分辨率,用于将仿真结果传输到CPU上或者执行视觉渲染的对等GPU上。1D网格在GPU上非常低效,所以通常不使用。通常,角色分布在2D网格上。也可以使用3D网格,例如在2D网格的可寻址性超过了GPU的限度时。网格的维数不需要是2的幂。最后,角色的数量不必与网格单元的数量匹配(比如,后者必须等于或大于层次中角色的数量)。结果,2D网格的最后一行有可能未完全占用,而最后一片3D网格有可能未完全占用。FYSI以虚拟的角色填充任何遇到的长条(sliver)。可以使角色具有层次,并且在每个层次等级的角色集合都可以共享全局属性。在每个等级都期望网格附加到角色集。假设在较高层次等级的形状具有更粗糙的几何表示。这与开始的自上而下的仿真一致,其中对于早期碰撞检测的摈弃改进了整体处理效率。同时,在每个层次等级,可以使角色的动力学特性是唯一的,这为运用可调节的物理仿真提供了自由度。为了仿真约束,可以将结合点(后文介绍)可选择地应用到一组角色。例如,在织物的仿真中使用结合点,正如以下第III部分中更详细的介绍。FYSL的第四部分是结合点。结合点定义了一对角色之间的相互作用约束。它们实质上限制了角色的运动。根据类型不同,结合点可以具有公共参数和/或独特参数。公共参数包括结合点类型和该角色成员对中每个成员的句柄。在FYSL描述格式中,结合点与角色在同一标签等级。这样,在顶层场景等级及任何角色层次中都能够定义它们。表14、表15和表16提供了实例结合点标签。表14.结合点标签——公用表15.结合点标签——距离表16.结合点标签——弹簧FYSL的第五部分是反馈。FYSL说明的反馈部分仅仅由FYSI提供,用于仿真结果的返回路径。在多步骤仿真时段中,每步骤都有反馈部分。表17显示了实例反馈标签。表17.反馈标签虽然示范实施例可以包括以上的标签,但是在替代实施例中也可以使用其他标签类型。以下所提供的Sample#1是以FYSL编写的代码实例片段。这部分代码以分别具有角动力学和线性动力学特性的一对网格成形角色,描述了碰撞检测物理仿真场景。<!-fyslscenedescription--><Scene><Name>mesh</Name><Simulation><Type>response</Type><TimeStep>.005</TimeStep></Simulation><Actors><Grid><Width>2</Width><Height>1</Height><Depth>1</Depth></Grid><Actors><Name>a0</Name><Type>static</Type><Id>0</Id><Shape><Mesh><Vertex><Position>-.5-.5.0</Position><Position>-.5.5.0</Position><Position>.5-.5.0</Position><Position>.5.5.0</Position></Vertex><Index><Face>021</Face><Face>123</Face></Index></Mesh></Shape><Dynamics><Angular><Inertia>10.1.-21..0.0.1.3.4</Inertia><Orientation>1..0.0.01..0.0.01.</Orientation><Omega>.00.1.</Omega><Torques><Directional>1..0.0</Directional></Torques></Angular></Dynamics></Actor><Actor><Name>a1</Name><Type>dynamic</Type><Id>1</Id><Shape><Mesh><Vertex><Position>-.5-.53.0</Position><Position>-.5.5.3.0</Position><Position>.5-.53.0</Position><Position>.5.53.0</Position></Vertex><Index><Face>021</Face><Face>123</Face></Index></Mesh></Shape><Dynamics><Linear><Mass>10.</Mass><Position>.0.03.</Position><Velocity>.0.0-1.</Velocity><Forces><Directional>.0.02.</Directional></Forces></Linear></Dynamics></Actor></Actors><Feedback></Feedback></Scene>以下所提供的Sample#2是以FYSL编写的实例代码的另一部分。这部分代码展示了具有2×2的网格布局的基于粒子的角色的两个级别层次。这是用于定义织物和流体的基本结构。<!-fyslscenedescription--><Scene><Name>cloth</Name><Simulation><Type>response</Type><TimeStep>0.0166</TimeStep></Simulation><Actors><Grid><Width>1</Width><Height>1</Height><Depth>1</Depth></Grid><Actor><Name>fabric</Name><Type>dynamic</Type><Id>0</Id><Shape><Sphere><Position>.0.0.0</Position><Radius>.0</Radius></Sphere></Shape><Dynamics><Linear><Mass>1.</Mass><Center>0.0150.015.0</Center><Velocity>.0.0.0</Velocity><Forces><Directional>.0.0.0</Directional></Forces></Linear></Dynamics><!-2by2particleschildren--><Actors><Grid><Width>2</Width><Height>2</Height><Depth>1</Depth></Grid><Actor><Name>00</Name><Type>dynamic</Type><Id>0</Id><Shape><Sphere><Position>.0.0.0</Position><Radius>.0</Radius></Sphere></Shape><Dynamics><Linear><Mass>1.</Mass><Center>0.0.0</Center><Velocity>.0.0.0</Velocity><Forces><Directional>.0.0.0</Directional></Forces></Linear></Dynamics></Actor><Actor><Name>01</Name><Type>dynamic</Type><Id>1</Id><Shape><Sphere><Position>.001.0.0</Position><Radius>.0</Radius></Sphere></Shape><Dynamics><Linear><Mass>1.</Mass><Center>0.0.0</Center><Velocity>.0.0.0</Velocity><Forces><Directional>.0.0.0</Directional></Forces></Linear></Dynamics></Actor><Actor><Name>10</Name><Type>dynamic</Type><Id>2</Id><Shape><Sphere><Position>.00.01.0</Position><Radius>.0</Radius></Sphere></Shape><Dynamics><Linear><Mass>1.</Mass><Center>0.0.0</Center><Velocity>.0.0.0</Velocity><Forces><Directional>.0.0.0</Directional></Forces></Linear></Dynamics></Actor><Actor><Name>11</Name><Type>dynamic</Type><Id>3</Id><Shape><Sphere><Position>.010.01.0</Position><Radius>.0</Radius></Sphere></Shape><Dynamics><Linear><Mass>1.</Mass><Center>0.0.0</Center><Velocity>.0.0.0</Velocity><Forces><Directional>.0.0.0</Directional></Forces></Linear></Dynamics></Actor></Actors></Actor></Actors></Feedback></Scene>C.与网格相关联的物理参数可以被接收并且转化为FYSL的实例方式为了进行由CPU执行的物理仿真,有若干软件动力学求解器(比如由加利福尼亚州SanRafael的所拥有的Dynamics)。根据本发明的实施例,使用插件绕过这样的软件动力学求解器,从而在GPU上进行物理仿真,正如本文的介绍。在这个实施例中,插件俘获场景并且将与场景中所描述角色相关联的属性和场转化为FYSL,从而可以使用FYSI在GPU上进行物理仿真。在另一个实施例中,用户可以选择是由GPU还是由软件动力学求解器执行物理仿真。在进一步的实施例中,根据预先确定的准则,比如GPU的可用性和/或对给定特征的软件支持,自动地选择GPU或软件求解器进行物理仿真。例如,GPU可以用于进行刚体和织物的物理仿真,而软件动力学求解器可以用于进行流体的物理仿真。通过允许或者由GPU或者由软件动力学求解器进行物理仿真,可以达到更快的帧速率。在这部分中将介绍用于绕过特定软件动力学求解器(也就是,Dynamics)的实例插件,但是首先提供Dynamics的概述。是通过对真实世界的物理仿真而产生运动的一类技术。中的动力学多种多样、功能强大,并且拥有在建模、动画制作和渲染中同样重要等级的工具集。一般来说,概念需要基于仿真的动画,而不使用关键帧(keyframe)。家族包括刚体和软性体、粒子系统、织物、流体和毛发成员。在游戏中使用时,用于创建基于物理法则的视觉生动效果。图6描绘的框图描述了与软件动力学求解器比如Dynamics相比,利用GPU在不损害稳健性的情况下实现更高仿真速率的实例工作流程600。该工作流程的大部分由插入到Dynamics的插件控制。这样的插件包括场景输出器、GPU动力学仿真器FYSI和场景输入器。工作流程600在步骤610开始,其中场景输出器接收由艺术家附加到场景对象上的属性和场。属性包括初始速度、旋转、取向和物质的摩擦。场表示影响运动的力,包括拖拉、重力或过程地定义的力,其中后者在GPU的渲染器程序中表示。用户选择全体场景对象或其子集来开始基于GPU的仿真。输出器将对象的几何形状和动力学特性转换为面向GPU的物理仿真格式,在一个实施例中该格式是FYSL。在步骤620,在GPU上使用FYSI进行物理仿真。只要存在适当的FYSI插件,基于GPU的仿真器就无缝地替代软件动力学求解器节点(比如集成了的求解器)。GPU仿真器在多个离散帧中递归地运行仿真。在仿真的过程中,求解当前的场景状态并在每对FYSL动态角色之间寻找碰撞检测。对碰撞的角色对进行进一步的处理以便达到有可能影响所涉及角色的运动的接触响应。FYSIGPU辅助的物理仿真主要利用了像素引擎,它比顶点处理器利用了高得多的程度的并发性。GPU上的物理仿真是基于网格的,其中在网格单元之间的通信屏蔽很少或者没有。所涉及的计算内核的大部分具有高运算强度的特性,因而与等同的CPU实施方案相比是展现改进增速的优选候选者。此仿真过程充分利用了单个或多个GPU以提高效率,其对于与软件动力学求解器相交互的艺术家来说是都是透明的。FYSI以与输出器输出的格式相同的FYSL表达格式产生结果。FYSI的结果在内部高速缓存,用于整个仿真时段并且为了在中再使用而全部显露。在步骤630,每帧的仿真结果被输入回到的场景图。在步骤630期间,仅仅关注几何形状和变换数据。形状位置和变换更新都由FYSI对每个仿真步骤提供。变换数据是相对于输入的场景位置和取向的。在刚体的情况下,更新来自的变换场景图节点便足够。对于变形体(比如织物和流体),对由提供的场景原始节点中的全部网格顶点和索引都进行更新。在步骤640,将仿真结果渲染以进行可视化。调用基于GPU或软件的渲染器以便可视化仿真结果。在实施例中,运行视觉渲染任务的GPU在物理上与进行物理仿真的GPU分开。这再次在更高的层次上便利了并行性。在步骤650,在场景中回放渲染的结果。III.在一个或多个GPU上进行物理仿真的实例方法A.方法概述现在介绍在GPU上使用FYSI和FYSL进行物理仿真的实例方法。图7描绘的框图展示了根据本发明的实施例在一个或多个GPU上进行游戏物理仿真的实例方法700。方法700在步骤710开始,其中与网格相关联的物理参数被映射到视频存储器中,以便建立控制场景中所描述的网格运动的线性方程系统。视频存储器可以包括以上参考图3所描述的纹理310。网格可以表示任何类型的物理对象,比如固体对象、体积、流体、织物或另一种类型的物理对象,正如对于相关领域的技术人员将是显而易见的。在步骤720,使用至少一个像素处理器对视频存储器中的数据进行计算,以便对某时刻求解线性方程系统。表示该时刻线性方程系统求解结果的修改后数据然后被存储在视频存储器中。在实施例中,修改后的数据被存储在纹理310中,然后另一个渲染器渲染修改后数据所对应的图形。在这个实施例中,单个GPU进行物理仿真和图形渲染。在另一个实施例中,修改后的数据作为第一GPU的输出被提供,然后被写入到第二GPU的纹理中。在这个实施例中,第一GPU进行物理仿真,而第二GPU进行图形渲染。作为替代,第一GPU可以将修改后的数据写入到第二GPU可访问的存储器区域(如第一GPU的视频存储器,或者系统存储器)。仿真任何类型的物理对象都可以执行方法700。以下提供的实例实施方案用于在一个或多个GPU上仿真织物。提供的这个实例实施方案仅仅用于展示目的而不是限制。根据本文包含的说明,相关领域的技术人员将理解如何在GPU上进行其他类型的物理对象的仿真。现在将介绍在一个或多个GPU上仿真织物的隐式技术。首先,呈现织物的物理模型和以离散时间仿真该模型的两种方法。其次,介绍隐式离散时间仿真的三步过程。第三,呈现将这个三步过程映射到GPU上的方法。织物仿真的实例物理模型通过内部约束的粒子系统可以仿真织物。这种内部约束的粒子系统可以表示为经受内部伸展和阻尼力的点质量的阵列。这些力取决于相邻点的相对位移和速度。本文将这样的点质量阵列称为点网格。图8描述了实例点网格800。给出了点网格800,就可以定义与点网格800相关联的以下物理参数第i个粒子在世界空间中的位置;在块矢量中所有粒子的几何状态;作用在第i个粒子上的合力;作用在所有粒子上合力的块矢量;以及由diag(M)={{m1m1m1}{m2m2m2}...{mnmnmn}}定义的“对角线质量矩阵”,其中mi是第i个粒子的质量。作为替代,可以将M解释为块矩阵,也就是为{n×n}的对角矩阵,其中每个元素都是{3×3}的对角矩阵。对于点网格800,牛顿第二定律(即F=ma)可以写成下式或者(方程式1)对于具有线性阻尼器的二阶质量弹簧系统,作用在粒子i上的合力是所有(典型情况下是相邻的)粒子的相对位置以及速度的函数。因此,方程式1中合力的每个分量都可以写成点网格800的运动随之由下面方程式控制(方程式2)因此,方程式2的解可以用于仿真点网格800的运动。为了通过一系列的计算机过程(如由GPU中至少一个像素处理器所执行的过程)求解方程式2,方程式2必须转换为离散时间问题。在离散时间问题中,系统的下一个状态由其先前状态给定。确切地说,给出系统在时间tk的位置和速度(即给出和),最简单的一阶离散时间问题是确定该系统在时间tk+1的位置和速度(即确定和),其中tk+1=tk+Δt。对该离散时间问题的求解涉及离散时间的积分。至少有两类一般的离散时间积分——也就是,显式的方法和隐式的方法。显式方法使用导数的向前投影,从先前状态的直接外推计算下一时间步的状态。例如,一阶欧拉向前差分近似为注意,离散时间导数的右侧被左侧的先前时间步中的数值所限制。未来的状态随之可以重新写为状态的函数,也就是ak+1=ak+bk·Δt(方程式3)将方程式3的形式应用于点网格800,控制点网格800运动的方程系统(即方程式2)可以重新写为应用于每个时间步的一组简单的独立更新方程式如下(方程式4)显示积分格式的主要缺点在于数值稳定性。一般来说为了保持向前近似,方程式3中的函数α(t)相对于Δt不能变化太快。也就是说,乘积(bk·Δt)必须低于某阈值。bk大时,该系统被称为“刚性的”而Δt必须成比例地变小。隐式方法用于第二类的离散时间积分技术。隐式方法根据表示外推结果的某种“可逆性”的方程系统,推导出下一个时间步的状态。换言之,同时对照先前状态检验未来状态的向后导数。例如,一阶欧拉向后差分近似为其微妙之处在于离散时间导数的右侧现在同时地被左侧的未来数值所限制。作为直接后果,未来状态不能够表示为先前状态的简单函数。应用于点网格800,系统的控制方程(即方程式2)就简化为3n个未知数的联立方程系统在每个时间步都要进行求解(方程式5)该任务可能看起来令人沮丧但是该方案有两个显著的优点。首先,隐式技术几乎无条件稳定——意味着它们对真实织物仿真的特征上“僵硬的”方程不太敏感,从而有能力支持大得多的时间步长。其次,最终方程系统趋向于稀疏而对称,并且这些类型的方程系统便于利用高效的数值方法求解。无论在方程式4表达的显式积分方法中还是在方程式5表达的隐式积分方法中,都必须估算合内力矢量一般来说,是模拟织物内部约束的非线性函数。在离散时间情况下,总是当前状态的函数(即利用显式积分直接估算以更新确切地说,如方程式4所示不过,为了确保稳定性,必须挑选Δt以反映出的“僵硬”。遗憾的是,真实的内力相对僵硬并要求时间步长成比例地小。正如上述Baraff参考文献的演示,以逼真地僵硬的方程系统所要求的这些小的时间步长进行许多次更新的累积成本,最终在价值上超过以更粗略的时间步长求解大型稀疏线性方程系统的成本。见DavidBaraffandAndrewWitkin,“LargeStepsinClothSimulation”,InProceedingsofSIGGRAPH98,pp.43-54(1998)。因此,隐式方案已经主导了真实织物的仿真。隐式积分技术免不了带有其复杂性。确切地说,隐式积分技术要求表达式而非在这种情况下,使用了近似。确切地说,的近似为其一阶泰勒展开(方程式6)估算方程式6中的第一项时与显式的情况相同,而第二和第三项则取决于在最后的时间步估算的雅可比矩阵和虽然这些雅可比矩阵与外力无关,但是规模大,相对难以估算。它们实际上是{n×n}的矩阵,元素为{3×3}的子矩阵。雅可比矩阵具有的形式为(方程式7)由于所以元素和它们自己以{3×3}的雅可比矩阵形式给出假设可以估算和每个时间步都需要求解的线性方程系统(即方程式5)就能够按照重写如下(方程式8)其中I是单位矩阵,M是质量网格的对角矩阵,是表示网格在时间tk的几何状态的矢量,是表示网格中每个点在时间tk的速度的矢量,而是表示网格每个点上在时间tk的合力的矢量。因此,对点网格800进行物理仿真的隐式积分方法是对每个时间步Δt都求解方程式8。方程式8可以写为其中(方程式9a)(方程式9b)(方程式9c)正如以上参考图5的阐述,在GPU上使用FYSI进行物理仿真包括三个步骤(i)系统建立步骤;(ii)求解步骤;以及(iii)碰撞步骤。系统建立步骤涉及给出了不变时间步长Δt、对角质量矩阵M以及当前位置和点网格的速度后,确定中的数值。根据这些输入,估算与由(方程式9)给出的有关的的中间值。这个子部分的剩余部分详述了对这些中间数值的估算。对矩形点网格800使用了线性的成对力模型,在网格800的线性的成对力模型中,点i与点j之间的边缘称为结合点,并且表示组合的弹簧和阻尼器。如果ij=ji,两个结合点就是互补的,在这种情况下,对顶点i和j应用了相等却相反的力(即牛顿第三定律),分别由fij和fji=-fij给出。如果在顶点i与j之间未定义结合点,或者如果i=j,显然fij=0。最后,作用在第i个点上合内力的表达式以及它关于和的雅可比矩阵因而由下式给出实际上,结合点仅仅在相邻点之间定义,并且以规则的模式存在。例如,图8的点网格800中所示的结合点拓扑包括多达每点12个结合点(服从边界条件)。由于经过结合点的力仅仅依赖于其顶点,所以可见行和是稀疏的。也就是说,给定如果j≠i且j≠k,和的对角线外元素(即j≠i)的表达式就简化为在对角线上(即j=i),保持着和的原始表达式,并且对于点i只要存在着仅仅一个结合点,这些元素就不为零。所以,由于当ij不是结合点时在对角线外和行和的非零元素数目仅为对点i所定义的结合点数目加1。例如,对于图8所示的结合点拓扑,不考虑点网格维数,最终雅可比矩阵将最多有13个非零元素(=每个点12个结合点+1)。为了使控制点网格800运动的线性方程系统表示“合式的”方程系统,矩阵A必须是(i)稀疏的并且(ii)对称的。关于项(i),A为稀疏是因为A线性地依赖于雅可比矩阵和而且这些雅可比矩阵的每一个都已经表明为稀疏的。关于项(ii),注意雅可比矩阵的和本身都是对称的,只要对角线外下式能够成立(方程式10)因此,如果方程式10成立,A便既稀疏且对称,所以该线性方程系统就能高效地求解。在一定的物理假设下,且的准则将显示为引导因子。参考图8,点网格800中若干点之间的结合力可以分为三类(i)伸展结合点806;(ii)剪切结合点804;以及(iii)弯曲结合点802。在若干相邻节点之间定义的伸展结合点806模拟了最强的内力。伸展结合点806抵抗区域中的面内变化。在若干对角线节点之间定义的剪切结合点804模拟了次强的内力。在拖拉布角时,剪切结合点804抵抗织物向内收缩的趋势。最后,在若干交替节点之间定义的弯曲结合点802模拟了最弱的内力。弯曲结合点802抵抗折叠。虽然已经定义了更逼真的规定,但是以上呈现的成对式按结合点(perjoint)力模型受到上述Baraff参考文献以及由Kwang-JinChoiandHyeong-SeokKo,StablebutResponsiveCloth”,InACMTransactionsonGraphics,SIGGRAPH2002,pp.604-11(2002)中所教导的成对结合点力模型的混合影响,其全部内容在此引用作为参考。根据本文公开的模型,全部结合点都由同一函数模拟,但是结合点的类别(即伸展、剪切和弯曲)可以由刚性ks、阻尼kd和自然长度L的不同数值进行全局的参数表示。经过结合点,弹簧(由ks和L参数表示)和阻尼器(由kd参数表示)的作用线性无关并且可以分开考虑。一般来说,不是弹力就是阻尼力,按结合点力fij将满足两种特性按结合点力fij将沿着结合点的方向起作用;以及(ii)按结合点力fij将与条件函数成比例。这两种特性可以按以下数学公式写出给定以及那么以及其中以及由于对称准则(即和)只要求服从下式以及现在介绍按结合点力fij的弹性分量。理想的线性平移弹簧是一种起反作用的机械器件,在变形期间抵抗并存储能量,并且展示了对释放所存储能量起作用的复原力。“平移”是指所涉及机械力的类型。在本文介绍的织物仿真模型中,力沿着结合点的方向(即)作用。“线性”是指复原力直接与变形(即沿x的变化)成比例。最后,“理想的”意味着在变形和复原周期之间没有能量损失。按结合点的弹簧条件函数定义为直接地遵守规范的理想线性平移弹簧(即f=k·Δx)。Cs(xij)仅仅依赖于当前顶点的位置,对和都满足对称准则,并且由刚性系数ks和自然长度L确定其参数,由以下等式给出Cs(xij)=ks(|xij|-L);以及现在介绍按结合点力fij的阻尼分量。阻尼器是抵抗变形的无源机械器件,但是与弹簧对照它不存储能量也不展示复原力。相反,阻尼器通过以热的形式消耗所施加的能量而抵抗变形。这种特征由与速度变化成比例的纯抵抗力所产生。在本文介绍的仿真织物的模型中,理想的线性平移阻尼器沿着结合点的方向展现抵抗力,它直接正比于其顶点速度的相对变化。更确切地说,它展现的抵抗力正比于结合点方向的速度相对变化(即)。定义了由阻尼系数kd参数化的按结合点阻尼器条件函数这个按结合点阻尼器条件函数对和都满足对称准则。这个陈述可以按下面的数学公式表示给定其中以及那么以及现在介绍点网格800上外力的响应和效果。外力的实例包括重力、风和碰撞(自身和环境兼而有之)。注意,外力的响应和效果之间存在着明显差异。响应涉及对当前状态(即位置xk、速度和力)的中间变化。因此,响应相对容易模拟。相反,力的效果约束了未来的状态(即因为织物受到约束所以限制了未来的自由度)。因此,效果相对难以模拟。已知有几种求解外力响应和效果的方案,包括使用简化坐标、惩罚方法和/或拉格朗日乘子的方案。参见如上述Baraff参考文献。Baraff参考文献中讨论的另一种方案将约束置于被模拟的点网格中的某些质量点上。正如以上阐述,对角质量矩阵的块方式解释法可以将第i个粒子的质量表示为{3×3}的对角矩阵(方程式11)不过,如果假设质量是各向异性质量并随方向变化,就可以将方程式11重写如下(方程式12)根据方程式12给出的质量矩阵,点网格的运动方程变为因此,定义各向异性的质量有效地将fi的效果约束在xy平面内;在z方向上不可能有加速度。在Baraff参考文献中开发的方案隐含地具有线性方程系统的对称性和随之而来的高效可解性。使用修改后的共轭梯度法(“修改的CG”)可以求解这些问题,它引入了滤波运算以增强基于质量的约束。另一种方案既使用基于质量的约束又使用修改的CG方法,正如在Kwang-JinChoiandHyeong-SeokKo,“StablebutResponsiveCloth”,InACMTransactionsonGraphics,SIGGRAPH2002,pp.604-11(2002)中的介绍,其全部内容在此引用作为参考。B.在GPU上仿真织物的实例实施方案在已经介绍了隐式仿真织物的模型后,现在介绍在GPU上对每个离散时间步实现仿真的三步方法。图9描述了根据本发明的实施例在GPU上实施织物仿真的实例流程图。换言之,图9表现了以上参考图4所介绍的物理仿真块410的具体实现的高层次描述。在图9中,若干大圆表示纹理或视频存储器的阵列,它们可以类似于以上参考图3所介绍的纹理310。将数据具体映射到纹理的方式如下(i)圆902(标注为M)表示的纹理包含与点网格800中每点质量有关的数据;(ii)圆904(标注为P)表示的纹理包含与点网格800中每点位置有关的数据;(iii)圆906(标注为V)表示的纹理包含与点网格800中每点速度有关的数据;(iv)圆908(标注为F)表示的纹理包含与点网格800中作用在每点上合力有关的数据;(v)圆912(标注为J)表示的纹理包含与雅可比矩阵有关的数据。有阴影的圆910表示核心运算(比如由一个或多个GPU执行的数学计算)。在GPU上实现织物仿真的第一步包括将与点网格相关联的物理参数映射到纹理(即视频存储器)中,以便建立控制点网格运动的线性方程系统,如图9所示。通过应用隐式积分技术,以上阐述过,控制点网格运动的线性方程系统可以写为其中(方程式9a)(方程式9b)(方程式9c)被模拟点网格的质量、位置和初始速度由创建场景的技术人员建立。因此,可以立即填充纹理902a、904a和906a(分别对应于质量、位置和初始速度)。相反,技术人员没有建立雅可比矩阵及合力的全部分量。因此,核心运算910a根据来自纹理904a、906a和908a的输入估算力和雅可比矩阵(即)。这个估算结果写入到纹理908b和912b中。将这些结果写入到纹理908b和912b后,这个时间步的系统建立步骤完成。在GPU上实现织物仿真的第二步包括求解线性方程系统以更新位置和速度的数值(即),如图9所示。核心运算910b根据来自纹理902a、904a、906a、908b和912b的输入求解线性方程系统。根据这个解,位置和速度的更新数值分别写入到纹理904b和906b中。写入了更新数值后,这个时间步的方程系统求解器步骤完成。在GPU上实现织物仿真的最后一步包括碰撞检测,如图9所示。核心运算910c根据来自纹理902a、904b、906b和908b的输入判断是否发生了碰撞。核心运算910c的结果写入到纹理902b、904c、906c和908c中。写入了这些结果后,这个时间步的碰撞响应步骤完成。现在更详细地介绍在GPU上实现织物仿真的每个步骤。i步骤一系统建立GPU实现的重要设计挑战是开发对方程系统的纹理表达,它既紧凑又便于单指令多数据(SIMD)的并行。本发明的实施例利用了17个永久的纹理,其结构从所考虑的矩形点网格中直接导出。不过,本发明不限于17个纹理。相关领域的技术人员将理解如何使用不同数量的纹理在GPU上进行物理仿真而不脱离本发明的实质和范围。本文介绍的用于仿真织物的纹理是n个纹素的二维纹理,‘rows’高度和‘cols’宽度对应于点网格800,组织为分别有‘rows’和‘cols’个单元行列。每个纹理的每个纹素位置与点网格800的具体点都进行了一对一的映射。每个纹理都从左到右从上至下排序。一般来说,各个纹理存储着属于同一纹理坐标{s,t}中同一点i的不同特性。(为了清楚起见,本文档将所有纹理坐标描述为由高度=‘rows’和宽度=‘cols’所限制的非规格化的整数。从点的编号到其纹理坐标映射,反之亦然,由下式给出s←imodcols;以及i←t·cols+s不仅如此,为了服从边界条件,图8所示的结合点拓扑的点偏移量也映射为二维的纹理偏移量,如表18所示。表1817个纹理标注为P、V、F、A#、B#、C和D,其中A#和B#的每一个都是六个纹理的集合。对于每个点17个纹理的内容然后由下面的定义给出。首先,纹理P、V和F分别表示和具体地说P存储点的当前位置xik的三个分量;V存储点的当前速度的三个分量;以及F存储点的当前合力矢量fik的三个分量。第二,A#和B#分别表示和的下三角(非对角线元素),具体地说A#存储所对应的{3×3}矩阵;以及B#存储所对应的{3×3}矩阵;其中对于下面六个结合点的每一个都定义了A0-A5和B0-B5m=0→j=i+1(伸展);m=1→j=i+2(弯曲);m=3→j=i+cols-1(剪切);m=3→j=i+cols(伸展);m=4→j=i+cols+1(剪切);以及m=5→j=i+2-cols(弯曲)第三,纹理C和D分别表示和的对角线元素,具体地说C存储所对应的{3×3}矩阵;以及D存储所对应的{3×3}矩阵定义了17个纹理后,现在介绍填充这些纹理的两步过程(即执行图19系统建立步骤)。图10描绘的两阶段过程的流程图用于建立控制点网格800运动的线性方程系统。图10所包括的是输入纹理1002a和1004a(对应于Pxk和)以及输出纹理1006a、1008a、1012a、10014和1016a(对应于和)。图10的第一阶段涉及由内核运算1010a-1010f所代表的六个同样的子传递,用于对互补的结合点对进行运算。在这个第一阶段中,确定合力矢量(即纹理F)和和的下三角(非对角线元素)(即纹理A0-A5和B0-B5)。也就是说,内核运算1010a-1010f的结果写入到纹理1006b、1008b和1012b中。图10的第二阶段涉及由内核运算1010g和1010h所代表的两个同样的子传递,根据和的下三角非对角线元素(纹理A0-A5和B0-B5)确定其对角线元素。也就是说,内核运算1010g和1010h的结果分别写入到纹理1016b和1014b中。以下将更详细地介绍第一阶段和第二阶段的每一个。系统建立(图10)的第一阶段涉及确定合力矢量(即纹理F)和和的下三角(非对角线元素)(即纹理A0-A5和B0-B5)。正如图10所示,估算这些输出可能涉及按结合点分析的显著重复,正如内核运算1010a-1010f所表示。因此,这个第一阶段可以分割为六个同样的按结合点的子传递,如图11所表示。图11描绘的流程图1100表示结合点传递m。每个结合点传递都包括两个子传递,由第一内核1110a(标注为EvaJoint)和第二内核1110b(标注为updateF)表示。第一内核1110a对fyk、和计算按结合点数值,它们分别被写入到临时纹理T、Am和Bm中。经过子传递所分析的具体结合点通过下式与纹理Am和Bm相关m=0→j=i+1m=1→j=i+2m=2→j=i+cols-1m=3→j=i+colsm=4→j=i+cols+1m=5→j=i+2·cols第一内核1110a(标注为EvaJoint)利用了以下事实(1)按结合点的数值最易于在一起估计;(2)存储在Am和Bm中的和非对角线元素事实上是独立的并且等同于和以及(3)因为对称(即和),互补的结合点涉及一致的分析。因此是分析我们拓扑中结合点的仅仅一半的理想情况(即没有工作重复)。另外,因为对称,纹理A0-A5和B0-B5中存储的和的下三角(非对角线元素)足以表示雅可比矩阵中的全部非对角线元素。第二内核1110b(标注为updateF)利用被分析结合点的力更新合力矢量(即纹理C)。第二内核(标注为updateF)将现在存储在T中的按结合点力fijk的贡献加入到输入合力矢量即纹理C(不是来自另一个子传递就是包含若干外力)。这利用了结合点力的线性独立性和由牛顿第三定律所提供的对称性的具体优点。因为每个子传递都高效地计算了互补结合点对的力,所以第二内核1110b(updateF)负责对T进行寻址,以便充分地考虑贡献双方(因为边界条件,某些数值的按结合点力在T中可能不规则)。再次参考图10,系统建立的第二和最后阶段涉及确定和对角线元素(即纹理C和纹理D)。在这个第二阶段中,充分利用了以下事实这些对角线元素是其非对角线元素的结构良好的求和。确切地说,每个以下求和都包括多达12项,每项对应一个结合点(服从边界条件),它们在纹理A0-A5和B0-B5中很容易得到(公式13a)(公式13b)正如图12中的图形描绘,公式13a的求和由内核1250a(标注为eav/DiagonalC)估算,而公式13b的求和由内核1250c(标注为eav/DiagonalD)估算。内核1250a和内核1250c是独立的,并且仅仅其输入和输出不同。内核1250a从纹理1202a、1204a、1206a、1208a、1210a和1212a中获得数据作为输入,它们共同地表示雅可比矩阵的非对角线元素。ii步骤二方程系统求解器再次参考图8,在GPU上仿真织物的第二步骤是方程系统求解器步骤。方程系统求解器步骤的支配方案是在上述Baraff参考文献中介绍的采用共轭梯度(CG)法,迭代地求解线性方程系统(即)。CG法最适合于大型稀疏、对称和正定方程系统,它包括逐步逼近直到落在用户定义的阈值之下。尽管本文介绍的实例方法在方程系统求解器步骤使用了CG法,但是也可以使用其他方法而不脱离本发明的实质和范围,正如对相关领域的技术人员将是显而易见的。iii步骤三碰撞响应再次参考图8,在GPU上仿真织物的第三和最后步骤是碰撞响应步骤。碰撞检测模式检查是否已经出现了碰撞,方式为判断来自被仿真网格(如点网格800)的一对点是否与或者(i)来自该网格的另一对点或者(ii)来自被仿真另一个对象(如在与点网格800相同的场景中所描绘的球)的一对点交叉。正如上述Baraff参考文献所展示,相关领域的技术人员熟知若干碰撞检测模式。相关领域技术人员公知的任何碰撞检测模式都可以使用而不脱离本发明的实质和范围。C.以FYSL编写的实例代码以下提供的是以FYSL编写的实例代码片段。确切地说,以下提供的是(i)以FYSL编写的高层次场景描述;(ii)子角色扩充;以及(iii)织物结合点原型的扩充。i.高层次场景描述FYSL<!-fyslscenedescription--><Scene><Name>cloth</Name><Simulation><Type>collision<Type><TimeStep>1/60</TimeStep><Simulation><Actors><Grid><Width>4</Width><Height>4</Height><Depth>1</Depth><Grid><Actor><Name>fabric</Name><Type>dynamic</Type><Id>0</Id><!-assumingsuperstructurecanbemodeledasapointmass(i.e.spherewithzeroradius-><Shape><Sphere><Position>.0.0.0</Position><Radius>.0</Radius></Sphere></Shape><Dynamics><Linear><Mass>1.</Mass><Center>0.0150.015.0</Center><Velocity>.0.0.0</Velocity><Forces><Directional>.0.0.0</Directional></Forces></Linear></Dynamics><1--4×children--><Actors>...</Actors><!-prototypetagsfordescribingcanonicalclothsimulationparameters--><Joints>...</Joints><Feedback/></Sceen>ii.子角色扩充<!--4×children--><Actors><Actors><Name>00</Name><Type>dynamic</Type><Id>0</Id><Shape><Sphere><Position>.0.0.0</Position><Radius>.0</Radius></Sphere></Shape><Dynamics><Linear><Mass>1.</Mass><Center>.0.0.0</Center><Velocity>.0.0.0</Velocity><Forces><Directional>.0.0.0</Directional></Forces></Dynamics></Actors><Actors><Name>nm</Name><Type>dynamic</Type><Id>4n+m</Id><Shape><Sphere><Position>n*0.01m*0.01.0</Position><Radius>.0</Radius></Sphere></Shape><Dynamics><Linear><Mass>1.</Mass><Center>.0.0.0</Center><Velocity>.0.0.0</Velocity><Forces><Directional>.0.0.0</Directional></Forces></Linear></Dynamics></Actors><Actors><Name>33</Name><Type>dynamic</Type><Id>15</Id><Shape><Sphere><Position>0.030.03.0</Position><Radius>.0</Radius></Sphere></Shape><Dynamics><Linear><Mass>1.</Mass><Center>.0.0.0</Center><Velocity>.0.0.0</Velocity><Forces><Directional>.0.0.0</Directional></Forces></Linear></Dynamics></Actors></Actors>iii.织物结合点原型的扩充<!-prototypetagsfordescribingcanonicalclothsimulationparameters--><Joints><Spring><Action>Stretch</Action><RestLength>0.01</RestLength><Stiffness>le5</Stiffness><Dampening>le-3</Dampening></Spring><Spring><Action>Shear</Action><RestLength>0.01414</RestLength><Stiffness>le3</Stiffness><Dampening>le-2</Dampening></Spring><Spring><Action>Bend</Action><RestLength>0.02</RestLength><Stiffness>le2</Stiffness><Dampening>le-2</Dampening></Spring><Spring></Joint>IV.实例计算机实施方案本发明的实施例可以使用硬件、软件及其组合实现并且可以在一个或多个计算机系统或者其他处理系统中实现。不过,由本发明执行的操作往往以术语表明,比如加法或比较,它们通常与人工操作员所进行的脑力操作相关联。在本文所介绍的形成本发明一部分的任何操作中,人工操作员的这样的能力不是必需的,大多数情况下也不是所期望的。相反,这些操作是机器操作。用于执行本发明操作的机器包括数字计算机比如个人计算机、视频游戏控制台、移动电话、个人数字助理或类似的设备。事实上,在一个实施例中,本发明被集中到能够执行本文所介绍功能的一个或多个计算机系统上。图13显示了计算机系统的实例1300。计算机系统1300包括一个或多个处理器,比如处理器1304。处理器1304可以是通用处理器(比如CPU)或专用处理器(比如GPU)。处理器1304连接通信基础设施1306(如系统总线、跨接杆或网络)。根据这种范例计算机系统介绍了多种软件实施例。在阅读了这份说明之后,如何使用其他计算机系统和/或架构实现本发明,对于相关领域的技术人员将变得显而易见。计算机系统1300包括显示器接口1302,它转发来自通信基础设施1306(或者来自未显示的帧缓冲区)的图形、文本和其他数据,以便在显示器单元1330上进行显示。计算机系统1300还包括主存储器1308,优选情况下是随机存取存储器(RAM),并且还可以包括二级存储器1310。二级存储器1310可以包括例如硬盘驱动器1312和/或可拆卸存储驱动器1314,表示软盘驱动器、磁带驱动器、光盘驱动器等。可拆卸存储驱动器1314以众所周知的方式读写可拆卸存储单元1318。可拆卸存储单元1318表示软盘、磁带、光盘等,由可拆卸存储驱动器1314读写。正如将认识到,可拆卸存储单元1318包括计算机可用的存储介质,其中存储着计算机软件和/或数据。在替代实施例中,二级存储器1310可以包括其他类似的设备,以便允许将计算机程序或其他指令加载到计算机系统1300中。这样的设备可以包括例如可拆卸存储单元1322和接口1320。这样的实例可以包括程序盒式存储器和盒式接口(比如在视频游戏设备中所见到的),可拆卸存储器芯片(比如可擦除可编程只读存储器(EPROM),或者可编程只读存储器(PROM))和相关联的插口以及其他可拆卸存储单元1322和接口1320,它们允许软件和数据从可拆卸存储单元1322传递到计算机系统1300。计算机系统1300还可以包括通信接口1324。通信接口1324允许软件和数据在计算机系统1300与外部设备之间传递。通信接口1324的实例可以包括调制解调器、网络接口(比如以太网卡)、通信端口、个人计算机存储卡国际协会(PCMCIA)插槽和卡等。经由通信接口1324所传递的软件和数据都是以信号1328的形式,它们可以是能够被通信接口1324所接收的电子的、电磁的、光学的或者其他信号。这些信号1328经由通信通道(如信道)1326提供给通信接口1324。这种信道1326携带信号1328并且可以使用导线或电缆、光缆、电话线、蜂窝链接、射频(RF)链接和其他通信信道实施。在本文档中,术语“计算机程序介质”和“计算机可用介质”用于一般地指诸如可拆卸存储驱动器1314、硬盘驱动器1312中安装的硬盘和信号1328之类的介质。这些计算机程序产品向计算机系统1300提供软件。本发明针对这样的计算机程序产品。计算机程序(也称为计算机控制逻辑)存储在主存储器1308和/或二级存储器1310中。计算机程序也可以经由通信接口1324收到。这样的计算机程序执行时,使计算机系统1300能够执行本发明的特点,正如本文的讨论。确切地说,计算机程序执行时,使处理器1304能够执行本发明的特点。所以,这样的计算机程序表示了计算机系统1300的控制器。在使用软件实施本发明的实施例中,该软件可以存储在计算机程序产品中,并使用可拆卸存储驱动器1314、硬盘驱动器1312或通信接口1324加载到计算机系统1300中。该控制逻辑(软件)由处理器1304执行时,使处理器1304执行文本介绍的本发明的功能。在另一个实施例中,本发明主要以硬件实施,使用例如硬件组件比如GPU。为了执行本文所介绍功能的硬件状态机的实施方案对于相关领域的技术人员将是显而易见的。在又一个实施例中,使用了硬件和软件二者的组合实施本发明。V.结论应当认识到,是具体实施方式部分而不是
发明内容和摘要部分旨在用于解释权利要求书。虽然
发明内容和摘要部分可以阐述本发明的一个或多个实施例,但是并非由发明者所预期的本发明的全部示范实施例,因此,它们并非力图以任何方式限制本发明和附带的权利要求书。权利要求1.一种在至少一个图形处理器单元(GPU)上进行物理仿真的方法,包括将与至少一个网格相关联的物理参数映射到多个存储器阵列中,以便建立控制着场景中描绘的所述至少一个网格的运动的线性方程系统;以及使用至少一个像素处理器对所述多个存储器阵列中的数据进行计算,以便求解某时刻的所述线性方程系统,其中,表示所述时刻所述线性方程系统求解结果的修改后数据存储在所述多个存储器阵列中。2.根据权利要求1的方法,进一步包括根据所述多个存储器阵列中的所述修改后数据,更新所述时刻所述场景中描绘的所述至少一个网格的所述运动。3.根据权利要求1的方法,进一步包括对所述时刻识别涉及所述至少一个网格的至少一次碰撞;以及根据(i)所述多个存储器阵列中的所述修改后数据和(ii)所识别的所述至少一次碰撞,更新所述时刻所述场景中描绘的所述至少一个网格的所述运动。4.根据权利要求1的方法,进一步包括使用所述像素处理器对所述修改后的数据进行计算,以便求解下一时刻的所述线性方程系统,其中,表示所述下一时刻所述线性方程系统求解结果的进一步修改后数据存储在所述多个存储器阵列中。5.根据权利要求4的方法,进一步包括根据所述多个存储器阵列中的所述进一步修改后数据,更新所述下一时刻所述场景中描绘的所述至少一个网格的所述运动。6.根据权利要求4的方法,进一步包括识别所述下一时刻涉及所述至少一个网格的至少一次碰撞;以及根据(i)所述多个存储器阵列中的所述进一步修改后数据和(ii)所识别的所述至少一次碰撞,更新所述下一时刻所述场景中描绘的所述至少一个网格的所述运动。7.根据权利要求1的方法,其中,所述进行计算包括通过对某时刻的所述线性方程系统隐式地积分,使用至少一个像素处理器对所述多个存储器阵列中的数据进行计算,以便求解所述线性方程系统,其中,表示所述时刻所述线性方程系统求解结果的修改后数据存储在所述多个存储器阵列中。8.根据权利要求1的方法,其中,所述存储包括在多个存储器阵列中存储数据以便建立线性方程系统,由给出,它控制着场景中描绘的至少一个网格的运动,其中以及其中I是单位征矩阵,M是所述至少一个网格质量的对角矩阵,是表示在时间tk所述至少一个网格几何状态的矢量,是表示在时间tk所述至少一个网格中每个点速度的矢量,而是表示在时间tk所述至少一个网格中每个点上合力的矢量。9.根据权利要求1的方法,其中,在所述映射以前,所述方法进一步包括从软件动力学求解器中俘获场景并且将依附在所述场景中描绘的至少一个网格的属性和场转换为被映射到所述多个存储器阵列中的所述物理参数;以及将仿真结果输入到所述软件动力学求解器的场景图中,其中所述仿真结果对应于由所述至少一个像素处理器算出的所述时刻所述线性方程系统的求解结果。10.根据权利要求1的方法,进一步包括表示在所述场景中描绘的所述网格上作用的力,作为在所述至少一个GPU上执行的渲染器。11.一种计算机程序产品,包括计算机可用的介质,其中存储的控制逻辑用于使至少一个图形处理器单元(GPU)进行物理仿真,所述控制逻辑包括计算机可读的第一程序代码,它使所述至少一个GPU将与至少一个网格相关联的物理参数映射到多个存储器阵列中,以便建立控制着场景中描绘的所述至少一个网格运动的线性方程系统;计算机可读的第二程序代码,它使所述至少一个GPU对所述多个存储器阵列中的数据进行计算,以便求解某时刻的所述线性方程系统,其中,表示所述时刻所述线性方程系统求解结果的修改后数据存储在所述多个存储器阵列中。12.根据权利要求11的计算机程序产品,进一步包括计算机可读的第三程序代码,它使所述至少一个GPU根据所述多个存储器阵列中的所述修改后数据,更新所述时刻所述场景中描绘的所述至少一个网格的所述运动。13.根据权利要求11的计算机程序产品,进一步包括计算机可读的第三程序代码,它使所述至少一个GPU识别对于所述时刻涉及所述至少一个网格的至少一次碰撞;以及计算机可读的第四程序代码,它使所述至少一个GPU根据(i)所述多个存储器阵列中的所述修改后数据和(ii)由所述计算机可读的第三程序代码所识别的所述至少一次碰撞,更新所述时刻所述场景中描绘的所述至少一个网格的所述运动。14.根据权利要求11的计算机程序产品,进一步包括计算机可读的第三程序代码,它使所述至少一个GPU对所述修改后的数据进行计算,以便求解下一时刻的所述线性方程系统,其中,表示所述下一时刻所述线性方程系统求解结果的进一步修改后数据存储在所述多个存储器阵列中。15.根据权利要求14的计算机程序产品,进一步包括计算机可读的第四程序代码,它使所述至少一个GPU根据所述多个存储器阵列中的所述进一步修改后数据,更新所述下一时刻所述场景中描绘的所述至少一个网格的所述运动。16.根据权利要求14的计算机程序产品,进一步包括计算机可读的第四程序代码,它使所述至少一个GPU识别对于所述下一时刻涉及所述至少一个网格的至少一次碰撞;以及计算机可读的第五程序代码,它使所述至少一个GPU根据(i)所述多个存储器阵列中的所述进一步修改后数据和(ii)由所述计算机可读的第四程序代码所识别的所述至少一次碰撞,更新所述下一时刻所述场景中描绘的所述至少一个网格的所述运动。17.根据权利要求11的计算机程序产品,其中,所述计算机可读的第二程序代码包括通过对某时刻的所述线性方程系统隐式地积分,使所述至少一个GPU对所述多个存储器阵列中的所述数据进行计算,以便求解所述线性方程系统的代码,其中,表示所述时刻所述线性方程系统求解结果的修改后数据存储在所述多个存储器阵列中。18.根据权利要求11的计算机程序产品,其中,所述计算机可读的第一程序代码包括使所述至少一个GPU在多个存储器阵列中存储数据的代码,以便建立线性方程系统,由给出,它控制着场景中描绘的所述至少一个网格的运动,其中以及其中I是单位征矩阵,M是所述至少一个网格质量的对角矩阵,是表示在时间tk所述至少一个网格几何状态的矢量,是表示在时间tk所述至少一个网格中每个点速度的矢量,而是表示在时间tk所述至少一个网格中每个点上合力的矢量。19.根据权利要求11的计算机程序产品,进一步包括计算机可读的第三程序代码,它使所述至少一个GPU从软件动力学求解器中俘获场景并且将依附在所述场景中描绘的至少一个网格的属性和场转换为被映射到所述多个存储器阵列中的所述物理参数;以及计算机可读的第四程序代码,它使所述至少一个GPU将仿真结果输入到所述软件动力学求解器的场景图中,其中所述仿真结果对应于所述时刻所述线性方程系统的求解结果。20.根据权利要求11的计算机程序产品,进一步包括计算机可读的第三程序代码,它使所述至少一个GPU仿真在所述场景中描绘的所述网格上作用的力。21.一种进行物理仿真的系统,包括包含多个存储器阵列的存储器,它们存储着与至少一个网格相关联的物理参数,以便建立控制着场景中描绘的所述至少一个网格运动的线性方程系统;以及连接到所述存储器的至少一个像素处理器,对所述多个存储器阵列中的所述数据进行计算,以便求解某时刻的所述线性方程系统,其中,表示所述时刻所述线性方程系统求解结果的修改后数据存储在所述多个存储器阵列中。22.根据权利要求21的系统,进一步包括渲染引擎,根据所述多个存储器阵列中的所述修改后数据,更新所述时刻所述场景中描绘的所述至少一个网格的描述。23.根据权利要求21的系统,其中,所述像素处理器识别所述时刻涉及所述至少一个网格的至少一次碰撞,并且所述系统进一步包括渲染引擎,根据(i)所述多个存储器阵列中的所述进一步修改后数据和(ii)在所述时刻所识别的所述至少一次碰撞,更新所述时刻所述场景中描绘的所述至少一个网格的描述。24.根据权利要求21的系统,其中,所述像素处理器对所述修改后的数据进行计算,以便求解下一时刻的所述线性方程系统,表示所述下一时刻所述线性方程系统求解结果的进一步修改后数据存储在所述多个存储器阵列中。25.根据权利要求24的系统,进一步包括渲染引擎,根据所述多个存储器阵列中的所述进一步修改后数据,更新所述下一时刻所述场景中描绘的所述至少一个网格的描述。26.根据权利要求24的系统,其中,所述像素处理器识别所述下一时刻涉及所述至少一个网格的至少一种碰撞,并且所述系统进一步包括渲染引擎,根据(i)所述多个存储器阵列中的所述进一步修改后数据和(ii)在所述下一时刻所识别的所述至少一次碰撞,更新所述下一时刻所述场景中描绘的所述至少一个网格的描述。27.根据权利要求21的系统,其中,所述像素处理器通过为了求解某时刻的所述线性方程系统而对所述线性方程系统隐式地积分,对所述多个存储器阵列中的所述数据进行计算,以便求解所述线性方程系统,表示所述时刻所述线性方程系统求解结果的修改后数据存储在所述多个存储器阵列中。28.根据权利要求21的系统,其中,所述线性方程系统由给出,其中以及其中I是单位征矩阵,M是所述至少一个网格质量的对角矩阵,是表示在时间tk所述至少一个网格几何状态的矢量,是表示在时间tk所述至少一个网格中每个点速度的矢量,而是表示在时间tk所述至少一个网格中每个点上合力的矢量。29.根据权利要求29的系统,进一步包括场景输出器,它从软件动力学求解器中俘获场景并且将依附在所述场景中描绘的至少一个网格的属性和场转换为被存储到所述多个存储器阵列中的所述物理参数;以及场景输入器,它将仿真结果输入到所述软件动力学求解器的场景图中,其中所述仿真结果对应于由至少一个像素处理器所算出的所述时刻所述线性方程系统的求解结果。30.根据权利要求21的系统,进一步包括在至少一个GPU上执行的渲染器,表示在所述场景中描绘的所述网格上作用的力。31.一种在至少一个图形处理器单元(GPU)上进行物理仿真的方法,包括将仿真定义数据传递到所述至少一个GPU;以及响应所述传递的仿真定义数据,从所述至少一个GPU接收仿真结果。32.根据权利要求31的方法,其中,将仿真定义数据传递到所述至少一个GPU包括将场景数据、仿真数据、角色数据、结合点数据和反馈数据至少其一传递到所述至少一个GPU。33.根据权利要求31的方法,其中,所述传递包括以置标语言的格式将仿真定义数据传递到所述至少一个GPU。34.一种在至少一个图形处理器单元(GPU)上进行物理仿真的方法,包括将仿真定义数据转换为应用程序编程接口(API)命令;以及响应所述转换的仿真定义数据,在所述至少一个GPU上进行物理仿真,以便产生仿真结果数据。35.根据权利要求34的方法,其中,所述转换包括根据所述仿真定义数据产生场景数据结构。36.根据权利要求34的方法,其中,所述进行物理仿真包括建立所述仿真定义数据所对应的线性方程系统;求解所述线性方程系统;以及根据所述线性方程系统的求解结果检测碰撞。37.一种基于计算机进行物理仿真的方法,包括将软件动力学求解器数据转换为至少一个图形处理器单元(GPU)的仿真定义数据;以及响应所述转换的数据,在所述至少一个GPU上进行物理仿真,以便产生仿真结果数据。38.根据权利要求37的方法,进一步包括将所述仿真结果数据传递到应用程序。39.根据权利要求38的方法,其中,所述传递包括将所述仿真结果数据转换为所述软件动力学求解器数据的格式。40.根据权利要求37的方法,进一步包括响应另外的软件动力学求解器数据,在软件动力学求解器上进行另一个物理仿真。41.一种包含用于产生至少一个图形处理器单元(GPU)的指令的计算机可读的介质,执行指令时适于创建所述至少一个GPU,其中,所述至少一个GPU适于将与至少一个网格相关联的物理参数映射到多个存储器阵列中,以便建立控制着场景中描绘的所述至少一个网格的运动的线性方程系统;以及使用至少一个像素处理器对所述多个存储器阵列中的数据进行计算,以便求解某时刻的所述线性方程系统,其中,表示所述时刻所述线性方程系统求解结果的修改后数据存储在所述多个存储器阵列中。42.一种包含用于产生至少一个图形处理器单元(GPU)的指令的计算机可读的介质,执行指令时适于创建所述至少一个GPU,其中,所述至少一个GPU适于将仿真定义数据传递到所述至少一个GPU;以及响应所述传递的仿真定义数据,从所述至少一个GPU接收仿真结果。43.一种包含用于产生至少一个图形处理器单元(GPU)的指令的计算机可读的介质,执行指令时适于创建所述至少一个GPU,其中,所述至少一个GPU适于将软件动力学求解器数据转换为所述至少一个GPU的仿真定义数据;以及响应所述转换的数据,在所述至少一个GPU上进行物理仿真,以便产生仿真结果数据。全文摘要本发明针对在至少一个图形处理器单元(GPU)上进行物理仿真的方法、计算机程序产品和系统。所述方法包括以下步骤。首先,表示与至少一个网格相关联的物理属性的数据映射到多个存储器阵列中,以便建立控制着场景中描绘的所述至少一个网格的运动的线性方程系统。然后,使用至少一个像素处理器对所述多个存储器阵列中的所述数据进行计算,以便求解某时刻的所述线性方程系统,其中,表示所述时刻所述线性方程系统求解结果的修改后数据存储在所述多个存储器阵列中。文档编号G06F17/50GK101542487SQ200780034737公开日2009年9月23日申请日期2007年7月20日优先权日2006年7月24日发明者A·I·布莱威斯,G·S·巴伦申请人:Ati科技公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1