CN116934922A - 基于Unreal引擎的物理动画生成方法和装置 - Google Patents
基于Unreal引擎的物理动画生成方法和装置 Download PDFInfo
- Publication number
- CN116934922A CN116934922A CN202310907651.8A CN202310907651A CN116934922A CN 116934922 A CN116934922 A CN 116934922A CN 202310907651 A CN202310907651 A CN 202310907651A CN 116934922 A CN116934922 A CN 116934922A
- Authority
- CN
- China
- Prior art keywords
- bone
- information
- physical
- collision
- animation
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 91
- 238000004088 simulation Methods 0.000 claims abstract description 130
- 210000000988 bone and bone Anatomy 0.000 claims description 776
- 238000001125 extrusion Methods 0.000 claims description 80
- 238000012937 correction Methods 0.000 claims description 62
- 230000009466 transformation Effects 0.000 claims description 49
- 230000006870 function Effects 0.000 claims description 43
- 230000000694 effects Effects 0.000 claims description 35
- 238000012546 transfer Methods 0.000 claims description 33
- 230000005540 biological transmission Effects 0.000 claims description 32
- 238000003860 storage Methods 0.000 claims description 30
- 238000012545 processing Methods 0.000 claims description 28
- 238000004458 analytical method Methods 0.000 claims description 24
- 238000001514 detection method Methods 0.000 claims description 21
- 239000002775 capsule Substances 0.000 claims description 17
- 239000011159 matrix material Substances 0.000 claims description 17
- 238000005452 bending Methods 0.000 claims description 15
- 238000002156 mixing Methods 0.000 claims description 14
- 230000035515 penetration Effects 0.000 claims description 14
- 238000012986 modification Methods 0.000 claims description 8
- 230000004048 modification Effects 0.000 claims description 8
- 239000002245 particle Substances 0.000 claims description 7
- 238000011282 treatment Methods 0.000 claims description 7
- 230000001154 acute effect Effects 0.000 claims description 5
- 230000001419 dependent effect Effects 0.000 claims description 5
- 239000000203 mixture Substances 0.000 claims description 4
- 238000004378 air conditioning Methods 0.000 claims description 3
- 238000002360 preparation method Methods 0.000 claims description 3
- 230000000153 supplemental effect Effects 0.000 claims description 3
- 239000000523 sample Substances 0.000 claims 1
- 230000002829 reductive effect Effects 0.000 abstract description 14
- 238000004364 calculation method Methods 0.000 abstract description 11
- 230000008569 process Effects 0.000 description 28
- 239000004744 fabric Substances 0.000 description 16
- 230000033001 locomotion Effects 0.000 description 14
- 230000006399 behavior Effects 0.000 description 11
- 238000006073 displacement reaction Methods 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 9
- 239000000463 material Substances 0.000 description 9
- 238000010586 diagram Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 230000003993 interaction Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 238000013016 damping Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 230000000704 physical effect Effects 0.000 description 3
- 208000029725 Metabolic bone disease Diseases 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 239000012636 effector Substances 0.000 description 2
- 230000005484 gravity Effects 0.000 description 2
- 230000000670 limiting effect Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000010295 mobile communication Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000036544 posture Effects 0.000 description 2
- 230000000452 restraining effect Effects 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 238000012800 visualization Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 238000010171 animal model Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 150000001875 compounds Chemical class 0.000 description 1
- 230000008094 contradictory effect Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000007620 mathematical function Methods 0.000 description 1
- 238000013178 mathematical model Methods 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 230000010399 physical interaction Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 230000001502 supplementing effect Effects 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T13/00—Animation
- G06T13/20—3D [Three Dimensional] animation
- G06T13/40—3D [Three Dimensional] animation of characters, e.g. humans, animals or virtual beings
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Processing Or Creating Images (AREA)
Abstract
本申请实施例了提供一种基于Unreal引擎的物理动画生成方法,该基于Unreal引擎的物理动画生成方法包括:获取目标对象的物理资产。对所述物理资产进行解析,以得到物理配置信息。将所述物理配置信息存储至动画图表节点。根据存储有所述物理配置信息的动画图表节点,模拟所述目标对象的物理动画。本申请实施例的技术方案在对目标对象进行物理动画模拟时,可以直接根据存储有相应物理配置信息的动画图表节点模拟,无需对动画图表节点的物理资产进行解析,从而减少在模拟物理动画初始化时的计算资源消耗,降低移动设备的性能消耗。
Description
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种基于Unreal引擎的物理动画生成方法、装置、计算机设备、计算机可读存储介质。
背景技术
当前市场上的手机游戏可以发布在安卓和iOS平台上。但是,由于平台性能的限制,以及用户对手游动画效果要求的提高,使得移动游戏的物理动画系统对轻量化的要求逐渐变高。Unreal游戏引擎具备一定的物理动画功能,但是在需要物理资产提供配置信息(功能较多)的情况下,其物理动画生成技术在初始化阶段对计算资源要求较高,性能消耗大。
需要说明的是,上述内容并不必然是现有技术,也不用于限制本申请的专利保护范围。
申请内容
本申请实施例提供一种基于Unreal引擎的物理动画生成方法、装置、计算机设备、计算机可读存储介质,以解决或缓解上面提出的一项或更多项技术问题。
本申请实施例的一个方面提供了一种基于Unreal引擎的物理动画生成方法,所述方法包括:
获取目标对象的物理资产;
对所述物理资产进行解析,以得到物理配置信息;
将所述物理配置信息存储至动画图表节点;
根据存储有所述物理配置信息的动画图表节点,模拟所述目标对象的物理动画。
可选地,所述物理资产通过预设配置工具得到,配置操作包括:
创建骨骼、约束;
选择与所述骨骼相关的元素;其中所述元素与所述骨骼相关或为指定类型;
设置所述骨骼的碰撞信息;其中所述碰撞信息包括:选定碰撞目标、与碰撞目标的碰撞关系;
调整所述骨骼的参数以及骨骼上的碰撞器的变换;其中,所述碰撞器的变换包括绕轴旋转、翻转和反向旋转。
可选地,所述配置操作还包括:
以预先创建好的骨骼结构作为参考,根据头发和服饰的特征创建相应的网状或条状约束关系。
可选地,所述配置操作还包括:
按照骨骼之间的约束关系,选择所述骨骼相关联的横向约束或纵向约束的相关骨骼或约束本身。
可选地,所述配置操作还包括:
通过批量修改配置变量,对多组骨骼设置多对多的设置碰撞关系,每组中的骨骼之间不发生碰撞。
可选地,所述动画图表节点的参数包括以下一组或多组:调试绘制参数、运行时参数、混合参数、跨组件碰撞参数和物理资产解析参数。
可选地,对所述物理资产进行解析,以得到物理配置信息,包括:
根据所述物理资产,获取骨骼信息和初始物理配置信息;其中信息骨骼信息包括架构结构和骨骼绑定位置,所述初始物理配置信息包括各骨骼的骨骼参数、碰撞器参数和约束参数;
根据所述骨骼信息和所述初始物理配置信息,获取各个骨骼的骨骼类型、骨骼深度、骨骼链信息、约束信息、碰撞信息、参考挤出方向信息、约束碰撞信息、三角形碰撞器信息、旋转修正信息、弯曲约束信息、补充结构约束;其中:骨骼类型包括模拟骨骼和运动学骨骼,所述骨骼链信息根据各个骨骼的骨骼深度得到。
可选地,所述骨骼深度通过以下操作得到:
将运动学骨骼的初始深度设为1;
根据所述骨架结构和各骨骼之间的初始约束信息,设置各个模拟骨骼的骨骼深度;
其中,在确定最末端的模拟骨骼的情况下,将运动学骨骼的骨骼深度设置为0,将最末端的模拟骨骼的骨骼深度设置为1,将运动学骨骼和最末端的模拟骨骼之间的中间骨骼的骨骼深度以插值形式设置在[0,1]中,其中,插值根据相应中间骨骼的深度而定。
可选地,所述骨骼链信息通过以下操作得到:
根据各个骨骼的骨骼深度,对各个骨骼进行从小到大排序;
确定第i个骨骼,其中i<总骨骼数,i的初始值为0;
获取与第i个骨骼有约束关系的第j个骨骼,其中,j<≤与第i个骨骼有约束关系的骨骼总数;
在第i个骨骼的骨骼深度小于第j个骨骼,且第i个骨骼不是第j个骨骼的上级的情况之下,将第j个骨骼设置为父骨骼;
在将第j个骨骼设置为父骨骼的情况下,基于骨架结构得出第j个骨骼和第i个骨骼之间的关系;
在确定第j个骨骼是第i个骨骼的父骨骼的情况下,将第j个骨骼设置为第i个骨骼的父骨骼。
可选地,所述碰撞信息通过以下操作得到:
将所述物理资产中的骨骼之间的碰撞信息关联到相应的模拟骨骼上;
其中,所述模拟骨骼关联有以下碰撞信息:与自身碰撞的运动学骨骼索引、与三角形碰撞器的碰撞关系、是否开启约束碰撞关系,其中所述约束碰撞关系包括胶囊碰撞器。
可选地,所述参考挤出方向信息通过以下操作得到:
在第i个骨骼上开启参考挤出方向功能的情况下,收集所述第i个骨骼对应的父骨骼以及与所述第i个骨骼具有约束关系的左、右骨骼的索引;其中i≤总骨骼数;
其中,在所述第i个骨骼的左、右骨骼有一个缺失的情况下,用所述第i个骨骼替代该缺失的骨骼;
在所述第i个骨骼的左、右骨骼均缺失的情况下,关闭所述第i个骨骼对应的参考挤出方向功能。
可选地,所述旋转修正信息通过以下操作得到:
根据各骨骼之间的初始约束信息,获取初始三角形集合;
将不符合预设条件的三角形从所述初始三角形集合中剔除,以获取目标三角形集合;
处理所述目标三角形集合中的三角形的面朝向,以使得:若目标三角形集合中的两个三角形之间存在共边,这两个三角形对应法线的夹角为锐角或直角;
对处理后的目标三角形集合中的三角形关联的待修正骨骼执行以下操作:
获取所述待修正骨骼对应三角面的平均法线;
获取所述待修正骨骼的切线,所述切线为所述待修正骨骼至所述待修正骨骼的父骨骼之间的向量;
根据所述平均法线以及所述切线,构造旋转矩阵;
根据所述旋转矩阵,获取所述待修正骨骼的旋转修正信息。
可选地,所述弯曲约束信息通过以下操作得到:
根据约束信息中的横向约束和纵向约束,在横向间隔为1和纵向间隔为1的两个骨骼之间创建线距离约束;其中相邻骨骼间隔为0;
所述补充结构约束通过以下操作得到:
根据约束信息中的横向约束和纵向约束,创建X形约束,X形约束为骨骼结构中斜向的约束。
可选地,将所述物理配置信息存储至动画图表节点,包括:
将所述物理配置信息进行序列化操作,以得到序列化物理配置信息;
将所述序列化物理配置信息存储至动画图表节点,以及编译、保存动画图表。
可选地,根据存储有所述物理配置信息的动画图表节点,模拟所述目标对象的物理动画,包括:
对所述动画图表节点进行初始化操作,以将所述动画图表节点的物体注册到碰撞管理器并更新碰撞信息;
在初始化操作完成的情况下,根据所述动画图表节点中的物理配置信息,进行物理动画模拟;
在所述动画图表节点对应的物体被销毁的情况下,对所述动画图表节点进行反初始化操作。
可选地,所述对所述动画图表节点进行初始化操作,包括:
在所述目标对象的模型骨骼与物理配置信息相匹配的情况下,执行以下操作:
创建空间树,所述空间树用于碰撞检测;
通过碰撞管理器注册所述动画图表节点中的物体;其中,在动画图表节点中的物体第一次加载至关卡的情况下,将该物体注册至碰撞管理器,以通过碰撞管理器确定与新注册的物体存在碰撞关系的其他物体,并对存在碰撞关系的其他物体进行标记。
可选地,根据所述动画图表节点中的物理配置信息,进行物理动画模拟,包括:
执行模拟前的准备操作;
计算出所述动画图表节点中的模拟骨骼的速度、位置、碰撞信息和约束信息,其中,所述位置根据计算得到的速度、碰撞信息和约束信息进行计算得到的;
根据所述位置以及物理配置信息,对骨骼进行旋转修正;
根据所述位置以及旋转修正后的骨骼,获取更新后的骨骼变换信息;
输出所述更新后的骨骼变换信息,以控制所述模拟骨骼的动画效果。
可选地,所述执行模拟前的准备操作包括:
获取控制台变量,所述控制台变量用来对物理动画效果进行全局控制,以调整实时效果;
确认传送标志,所述传送标志包括:无操作,重置和传送;
根据所述碰撞管理器中的信息,更新碰撞器;
获取时间步长和模拟子步数;
获取当前帧输入的骨骼变换信息,所述骨骼变换信息为所述运动学骨骼的骨骼变换信息;
根据输入的骨骼变换信息、碰撞器在骨骼空间下的局部变换以及用户配置的缩放参数对相应模拟骨骼上的碰撞器进行缩放,以得到缩放后的碰撞器;
根据所述传送标志,对相应模拟骨骼进行对应操作,所述对应操作包括传送或者重置;
获取相应模拟骨骼的参考挤出方向;所述参考挤出方向为该相应模拟骨骼对应的三角形法线方向;
通过动画图表节点上的接口接收修改命令,以修改的相应模拟骨骼混合参数和混合内容参数。
可选地,所述确认传送标志,包括:
在所述目标对象的速度大于第一预设阈值且所述传送标志是无操作的情况下,更新所述传送标志,更新后的传送标志为传送,所述传送用于对相应骨骼进行传送操作。
可选地,所述动画图表节点的物体为一个服饰;
对应地,根据所述碰撞管理器中的信息,更新碰撞器,包括:
在目标对象注册所述动画图表节点的情况下,将其他服饰上对应运动学骨骼上的碰撞器更换到目标服饰上;其中所述其他服饰是会与所述目标服饰产生碰撞的服饰。
可选地,所述方法还包括:
创建解算任务对象;其中,以粒子和约束为单位,速度模拟、约束和旋转修正分别对应一个任务对象。
可选地,所述获取时间步长和模拟子步数,包括:
根据平均步长确定当前帧的时间步长,所述平均步长为当前帧的前N帧的平均步长,N为复数;
根据当前帧数以及模拟参数确定模拟子步数;其中所述模拟参数为一秒模拟的总次数;
根据模拟子步数以及当前帧数,以预定时间间隔更新修正系数,所述修正参数用于调整模拟参数。
可选地,所述计算出所述动画图表节点中的模拟骨骼的速度、位置、碰撞信息和约束信息,包括:
更新模拟骨骼的速度与位置;
更新运动学骨骼的碰撞器的位置以及旋转;
根据线距离约束,对所述模拟骨骼进行位置更新;
通过拉伸约束操作维持骨骼链的长度,所述骨骼链以运动学骨骼为起点串联多个模拟骨骼;
根据恢复力和原始骨骼链形态,调整骨骼链中骨骼的旋转,以获得目标骨骼链;
获取模拟骨骼的参考挤出方向;
根据所述模拟骨骼的参考挤出方向,对约束碰撞器和运动学骨骼进行碰撞处理;
根据所述模拟骨骼的参考挤出方向,对所述模拟骨骼和运动学骨骼进行碰撞处理;
对三角形碰撞器进行更新操作;
对所述模拟骨骼与更新后的三角形碰撞器进行碰撞处理操作;
对骨骼链中模拟骨骼中的父子骨骼夹角偏差进行约束,以使摇摆范围小于第二预设阈值。
可选地,对所述模拟骨骼与更新后的三角形碰撞器进行碰撞处理操作,包括:
构造模拟骨骼对应的轴对齐包围盒;
通过空间树剔除部分三角形碰撞器,确定目标三角形碰撞器集合;
对模拟骨骼与目标三角形碰撞器集合中的碰撞器进行碰撞检测;
在检测到模拟骨骼与所述三角形碰撞器会产生碰撞的情况下,以穿插深度作为权重,计算模拟骨骼的期望挤出向量,根据所述期望挤出向量进行相交解除。
本申请实施例的另一个方面提供了一种基于Unreal引擎的物理动画生成装置,所述装置包括:
获取模块,用于获取目标对象的物理资产;
解析模块,用于对所述物理资产进行解析,以得到物理配置信息;
存储模块,用于将所述物理配置信息存储至动画图表节点;
模拟模块,用于根据存储有所述物理配置信息的动画图表节点,模拟所述目标对象的物理动画。
本申请实施例的另一个方面提供了一种计算机设备,包括:
至少一个处理器;及
与所述至少一个处理器通信连接的存储器;
其中:所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上所述的方法。
本申请实施例的另一个方面提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机指令,所述计算机指令被处理器执行时实现如上所述的方法。
本申请实施例采用上述技术方案可以包括如下优势:
获取目标对象的物理资产,继而对物理资产进行解析整理,将解析整理得到的物理配置信息存储至动画图表节点。由于动画图表节点存储的是已经解析好的物理资产,因此,在对目标对象进行物理动画模拟时(即游戏运行时),可以直接根据存储有相应物理配置信息的动画图表节点模拟目标对象的物理动画,无需对物理资产进行解析,从而减少在模拟物理动画在初始化时的计算资源消耗。
附图说明
附图示例性地示出了实施例并且构成说明书的一部分,与说明书的文字描述一起用于讲解实施例的示例性实施方式。所示出的实施例仅出于例示的目的,并不限制权利要求的范围。在所有附图中,相同的附图表记指代类似但不一定相同的要素。
图1示意性示出了根据本申请实施例一的基于Unreal引擎的物理动画生成方法的流程图;
图2示意性示出了通过预设的配置工具配置物理资产的流程图;
图3示意性示出了通过预设的配置工具配置物理资产的新增流程图
图4示意性示出了通过预设的配置工具配置物理资产的新增流程图
图5示意性示出了通过预设的配置工具配置物理资产的新增流程图;
图6示意性示出了图1中步骤S102的子步骤流程图;
图7示意性示出了本申请实施例一物理资产分析过程中计算骨骼深度的流程图;
图8示意性示出了本申请实施例一物理资产分析过程中计算骨骼链信息的流程图;
图9示意性示出了本申请实施例一物理资产分析过程中计算碰撞信息的流程图;
图10示意性示出了本申请实施例一物理资产分析过程中计算参考挤出方向信息的流程图;
图11示意性示出了本申请实施例一物理资产分析过程中计算旋转修正信息的流程图;
图12示意性示出了本申请实施例一物理资产分析过程中计算弯曲约束信息以及补充结构约束的流程图;
图13示意性示出了图1中步骤S104的子步骤流程图;
图14示意性示出了图1中步骤S106的子步骤流程图
图15示意性示出了图14中步骤S1400的子步骤流程图;
图16示意性示出了图14中步骤S1402的子步骤流程图;
图17示意性示出了图16中步骤S1600A的子步骤流程图;
图18示意性示出了图17中步骤S1702的子步骤流程图;
图19示意性示出了图17中步骤S1704的子步骤流程图;
图20示意性示出了本申请实施例一模拟物理动画过程的新增流程图;
图21示意性示出了图17中步骤S1706的子步骤流程图;
图22示意性示出了图16中步骤S1600B的子步骤流程图;
图23示意性示出了图22中步骤S2218的子步骤流程图;
图24示出了本申请实施例一物理资产分析过程中物理资产分析的流程图;
图25示出了本申请实施例一物理资产分析过程中物理资产分析过程中计算骨骼深度的流程图;
图26示意性示出了本申请实施例一物理资产分析过程中计算骨骼链信息的流程图;
图27示意性示出了本申请实施例一物理资产分析过程中计算旋转修正信息的流程图;
图28示意性示出了本申请实施例一初始化过程的流程图
图29示意性示出了本申请实施例一的物理动画模拟中反初始化流程图;
图30示意性示出了本申请实施例一的每帧的物理动画模拟的新增流程图;
图31示意性示出了本申请实施例一中碰撞管理器和多个并行组件间交互的时序图;
图32示意性示出了根据本申请实施例二的基于Unreal引擎的物理动画生成装置的框图;及
图33示意性示出了根据本申请实施例三中的计算机设备的硬件架构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,在本申请实施例中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
在本申请的描述中,需要理解的是,步骤前的数字标号并不标识执行步骤的前后顺序,仅用于方便描述本申请及区别每一步骤,因此不能理解为对本申请的限制。
首先,提供本申请涉及的术语解释:
Unreal Engine:由Epic Games开发的一款综合性游戏引擎,用于创建交互式3D和2D内容。Unreal Engine是一个开发工具,应用于游戏开发、虚拟现实(VR)、增强现实(AR)、电影制作、建筑可视化等领域。
布料模拟技术:一种用于模拟布料、织物或柔软物体的运动的技术。布料模拟技术可以模拟物体的弯曲、拉伸、撕裂、振动等特性,使物体在虚拟环境中具有逼真的外观和动态效果。
物理动画:一种通过物理引擎模拟物体的动态行为和运动效果的技术和方法。物理动画基于物理学原理和数学模型,通过模拟物体之间的力、运动、碰撞等物理行为,使游戏或动画中的角色、物体和环境更加逼真、自然。
物理资产(Physics Asset):在游戏开发中使用的一种工具,用于模拟和处理物体的物理行为。物理资产是一种用于创建和定义物理约束、碰撞体和运动学骨骼的数据集合,用于在游戏引擎中模拟物体之间的物理交互和运动。
空间树(Spatial Tree):一种用于组织和管理空间数据的数据结构。空间树将空间划分为一系列的区域或单元,并通过构建树结构来快速查询、插入和删除空间中的对象。
雅可比方法(Jacobi Method):一种迭代算法,用于解线性方程组中的稀疏矩阵问题。雅可比方法是一种迭代的直接解法,通过逐次更新解向量的各个分量来逼近线性方程组的解。
物理资产编辑器(Physics Asset Editor):Unreal Engine中的一个工具,用于创建、编辑和调整物理资产(Physics Asset)。物理资产是用于模拟和处理游戏对象的物理行为的组件,可以用于角色模型、物体和其他可互动元素的物理模拟。
相交解除:指在碰撞发生后,通过相应的算法和技术对相交的物体进行处理,从而使得相交的物体不再重叠或穿透。
碰撞管理器(Collision Manager):游戏引擎或物理引擎中的一个组件,负责管理和处理游戏对象之间的碰撞检测和碰撞响应。
Rigidbody动画节点:在游戏引擎中使用的一种节点,用于控制物体的物理运动和动画行为。Rigidbody动画节点用于实现基于物理引擎的动画效果,使物体能够以真实的物理模拟进行运动和碰撞。
Spring Controller(弹簧控制器)动画节点:在游戏引擎中使用的一种节点,用于实现弹簧效果的动画控制。Spring Controller动画节点用于模拟弹性行为,例如弹簧、悬挂等效果。
CCD(Continuous Collision Detection连续性碰撞检测):一种用于检测物体在运动过程中是否发生碰撞的技术。CCD技术通过在物体的运动过程中进行插值和预测,检测物体在每个时间步长中是否与其他物体发生碰撞。
法线修正:一种通过计算顶点的平均法线或使用法线贴图等方法来确保模型在渲染时呈现出正确表面法线的技术。
SkinCache:一种通过缓存骨骼和权重计算的结果来提高动画的性能和效率的技术。
NvCloth:一种基于物理的布料模拟解决方案。NvCloth基于弹簧质点系统和约束模型,可以模拟布料的弯曲、拉伸、撕裂等物理行为。
Chaos Cloth:一种布料模拟技术,Chaos Cloth是通过物理模拟和约束系统来模拟布料的动态行为。
前向运动学(Forward Kinematics):一种从根部骨骼开始,通过层层旋转和变换,计算出骨骼链末端的位置和姿态的方法。在前向运动学中,通过将旋转和位移的变换从根部向末端依次传递,可以得到整个骨骼系统的姿态信息。
逆向运动学(Inverse Kinematics):一种通过定义末端效应器(End Effec tor)的位置和姿态,来计算骨骼链中各个骨骼的旋转角度的方法。
符号距离函数(Signed Distance Function,SDF):一种用于描述几何体表面的数学函数。通过符号距离函数,可以进行碰撞检测、相交解除等操作。
旋转矩阵:一个用于描述三维空间中旋转操作的线性变换矩阵。
挤出向量(Extrusion Vector):两个碰撞器相交之后,相交解除产生的位移向量。
动画蓝图:一种用于创建复杂角色动画逻辑的蓝图类。动画蓝图是Unreal Engine中的一种可视化编程工具,通过连接和配置各种动画图表节点来定义角色的动画行为和过渡。
动画图表节点:动画蓝图中的可视化节点,代表了各种动画操作和逻辑。每个节点都有特定的功能和输入输出,用于实现所需的动画效果和行为。
其次,为方便本领域技术人员理解本申请实施例提供的技术方案,下面对相关技术进行说明:
当前市场上的手机游戏可以发布在安卓和iOS平台上。但是,由于平台性能的限制,以及用户对手游动画效果要求的提高,使得移动游戏的物理动画系统对轻量化的要求逐渐变高。Unreal游戏引擎具备一定的物理动画功能,如通过Rigidbody、Springcontroller动画节点和NvCloth、ChaosCloth等布料模拟技术进行物理动画生成。然而,上述物理动画生成技术仍然存在以下不足:
(1)性能消耗较大
①布料模拟技术对计算资源要求较高,不适合性能有限的移动设备。②Un real游戏引擎提供的布料功能无法合并一个模型的多个片段,整个模型只能用一个材质。具体地:NvCloth和ChaosCloth等布料模拟技术是以一个片段为单位,一个片段上有一个材质,一个衣服可能有多个材质,在使用NvCloth和Ch aosCloth等布料功能时,只能把多个材质合成一个材质。为了在用布料的同时保留原来多个材质组合出来的渲染效果,就必须使用资源消耗大的多层材质。③布料模拟技术需要开启SkinCache和法线修正来确保模拟后的法线方向正确,开启SkinCache和法线修正会额外占用内存和消耗计算资源。④Rigidbody动画节点为了缓解穿插,须得开启CCD。Rigidbody动画节点为了缓解抖动,须得设置较多子步。而开启CCD和设置较多子步均会增加资源消耗。⑤Rigidb ody节点进行物理动画生成时,Rigidbody节点是直接将配置好的物理资产(未解析整理)直接存储至节点上。当需要进行模拟时,需要先对物理资产进行解析,解析之后才会进行物理动画生成。由于每次在进行物理模拟时,都需要先对物理资产进行解析,需要耗费较大的计算资源。
(2)适用性有限
①Rigidbody动画节点不支持实时修改骨骼缩放。②当约束关系比较复杂时,可能会出现计算误差和数值不稳定的情况,这些误差和不稳定性可能会逐渐累积并导致物体的抖动。③即使开启CCD,也会出现穿插后无法恢复的问题,开启CCD可以改善穿透但不能杜绝穿透,只要出现了一次穿透,就有可能使得穿插后无法恢复。④互相约束的刚体并不适合用来模拟服饰。Spring controller只能用来制作简单的链式结构,NvCloth或Chaos Cloth都只适合版型简单的服饰。现有的功能无法在保持服饰形态的同时实现柔软效果。
(3)配置复杂
使用Rigidbody节点需要提供一个物理资产,而Unreal游戏引擎并没有提供完善的辅助配置工具,因此,制作人员创建约束和碰撞关系非常麻烦。此外,基于PBD的NvCloth刚度会受到迭代次数影响,在配置参数相同的情况下,设备帧率不同服饰的效果差别很大。尽管基于XPBD的ChaosCloth虽在NvCloth基础上有所改进,但仍存在上述问题。
为此,本申请实施例提供了一种基于Unreal引擎的物理动画生成技术方案。在该技术方案中,获取目标对象的物理资产,继而对物理资产进行解析整理,将解析整理得到的物理配置信息存储至动画图表节点。在对目标对象进行物理动画模拟时,可以直接根据存储有相应物理配置信息的动画图表节点模拟目标对象的物理动画,无需进行物理资产解析,从而减少在模拟物理动画时(初始化过程)的计算资源消耗。本技术方案的优势:(1)对帧率并不敏感,即使帧数不稳定,也不会有抖动问题。(2)允许设置参考挤出方向范围,在没有使用连续性碰撞检测的情况下,也能充分解除相交情况。(3)通过设置约束碰撞信息,可以在骨骼密度较低的情况下有效防止穿透。(4)动画图表节点可在动画驱动的基础上进行模拟,也可在模拟后与动画混合。(5)传送功能可以在保留当前运动状态的前提下进行碰撞检测和处理。且传送功能还可以分为自动传送和手动传送功能。当线速度或角速度超过阈值时,会进行自动传送。通过蓝图调用或在动画序列、场景序列上添加事件使用可进行手动传送。(6)支持角色下多个服饰(组件)间的碰撞。(7)可以在动画蓝图节点中调整要绘制的内容并在动画蓝图的视口中绘制,也可以通过控制台命令选择要绘制的内容并在视口绘制。(8)可以通过预设的配置工具高效的配置物理资产文件,具体地:通过配置工具可以快速创建裙摆和头发约束的网状结构,方便地选择元素,快速地编辑参数和设置碰撞关系,存储和导入配置文件。(9)动画图表节点具有直观的参数设置,便于制作人员配置,支持球形、胶囊形、三角面及平面作为碰撞元素。同时,也适应实时自定义体型,允许对部分骨骼参数进行实时修改,并提供针对瞬间移动进行修正等功能。(10)解析物理资产中的信息,以得到物理配置信息,将物理配置信息序列化到动画图表节点,无需打包物理资产文件至动画图表节点,此外将将物理配置信息序列化到动画图表节点可以加快运行时初始化的速度。以动画图表节点的形式将物理动画效果应用到Unreal引擎的动画系统,借助Unreal的并行策略和自身的低计算复杂度使本技术方案生成的物理动画适合在性能相对较低的移动设备使用。具体见后文。
实施例一
图1示意性示出了根据本申请实施例一的基于Unreal引擎的物理动画生成方法的流程图。
如图1所示,该基于Unreal引擎的物理动画生成方法可以包括步骤S100~S106,其中:
步骤S100,获取目标对象的物理资产。
步骤S102,对所述物理资产进行解析,以得到物理配置信息。
步骤S104,将所述物理配置信息存储至动画图表节点。
步骤S106,根据存储有所述物理配置信息的动画图表节点,模拟所述目标对象的物理动画。
获取目标对象的物理资产,继而对物理资产进行解析整理,将解析整理得到的物理配置信息存储至动画图表节点。在对目标对象进行物理动画模拟时(即游戏运行时),可以直接根据存储有物理配置信息的动画图表节点,模拟目标对象的物理动画。由于动画图表节点上的物理配置信息是已经解析好的,使得在进行物理动画模拟时,无需进行解析,从而减少在模拟物理动画在初始化时设备的计算资源以及性能消耗,从而使本申请实施例的技术方案可以用于性能较低的移动设备。
以下结合图1,对步骤S100~S106中各个步骤以及可选的其他步骤进行详细阐述。
步骤S100,获取目标对象的物理资产。
所述目标对象可以包括人体模型或动物模型,可以包括基础骨架、头发、各种服饰,如上衣、外套、连衣裙、帽子等。
所述物理资产是在游戏引擎中用于描述和配置目标对象物理行为的资源。对目标对象进行物理资产配置,可以使目标对象能够逼真地进行弯曲、摆动等操作,实现目标物体的碰撞、重力、摩擦力等物理效果,并让目标对象能够在游戏中以真实的方式进行互动和响应。举例而言,所述物理资产可以包括裙子的骨骼信息、碰撞器信息、约束信息等。
在Unreal Engine的动画系统中,可以通过以下方式来配置物理资产:静态网格碰撞器(Static Mesh Collider),复合碰撞器(Compound Collision),物理材质(PhysicalMaterial)等。以下提供一个本申请配置物理资产的可选的实施例。
在可选的实施例中,如图2所示,所述物理资产通过预设配置工具得到,配置操作包括:
S200,创建骨骼、约束。
S202,选择与所述骨骼相关的元素。其中所述元素与所述骨骼相关或为指定类型。
S204,设置所述骨骼的碰撞信息。其中所述碰撞信息包括:选定碰撞目标、与碰撞目标的碰撞关系。
S206,调整所述骨骼的参数以及骨骼上的碰撞器的变换。其中,所述碰撞器的变换包括绕轴旋转、翻转和反向旋转。
所述配置工具是在Unreal引擎的动画系统以及物理资产编辑器的基础上开发的。所述配置工具可以以插件的形式设置在Unreal引擎的动画系统的编辑器上。在物理资产编辑器中使用所述配置工具可以快速地配置物理资产。
所述骨骼可以为目标对象上的骨骼,例如可以为连衣裙上的骨骼。骨骼为最小活动单位,骨骼可以分为模拟骨骼和运动学骨骼两种。一个骨骼之下包含单个或多个碰撞器,模拟骨骼的碰撞元素有球、胶囊、三角面等,运动学骨骼的碰撞元素有球、胶囊和平面等。其中,两个模拟骨骼可以形成一个胶囊。骨骼和骨骼之间通过约束连接。
所述约束可以包括:横向约束、纵向约束、网状约束等。其中,纵向约束:连接有父子关系的骨骼的约束。横向约束:连接两个深度相同的骨骼的约束。网状约束:由横向约束和纵向约束交织而成的约束。
所述元素可以包括骨骼和约束。
所述与碰撞目标的碰撞关系包括:选择的骨骼与碰撞目标碰撞,选择的骨骼与碰撞目标不碰撞,清除选择的骨骼的所有碰撞关系。
在一些实施例中,所述预设的配置工具具有配置存储加载功能。服饰个性化的版型带来了骨架差异,但人体躯干的部分是相同的,在配置好角色身体后,可以直接用配置存储加载功能复用到服饰上,避免了反复配置。具体地:可以将当前配置的物理资产保存为Json文件。当有相似结构时,可以通过读取配置的Json文件,将配置好的物理资产复用到相似结构,提高物理资产的资源利用率,无需重新配置,提高配置效率。所述配置存储加载功能还可以使用在角色肢体的碰撞设置中。
在一些实施例中,创建好骨骼以及约束之后,可以进一步调整或者修改骨骼参数以及约束参数。所述骨骼参数(表一)以及约束参数(表二)如下所示:
表一:骨骼上的参数描述
除了表一里的内容,骨骼上还存储了碰撞器的局部位移和旋转等。碰撞器类型的特有信息包括:球形碰撞器的半径、胶囊碰撞器的长度和半径。碰撞器的这些信息可以由Unreal引擎的物理资产编辑器可视化调整。
表二:约束上的参数描述
参数 | 类型 | 参数描述 |
Disable Collision | bool | 禁用碰撞 |
Linear Stiffness | float | 距离约束刚度,取值范围[0,1] |
Limited swing | bool | 约束摇摆范围 |
Swing limit | float | 摇摆范围,取值范围[0,180] |
Not p-child conn | bool | 不是父子关系约束 |
具体来说,在物理资产分析的收集骨骼链信息中会参考约束确定骨骼链,勾选了Not p-child conn参数的约束不会成为收集骨骼链信息参考的约束。
通过所述配置工具,可以方便快速地进行创建骨骼、约束以及设置碰撞关系等操作,从而可以有效减少出现因Unreal动画系统没有提供完善的辅助配置工具,而使制作人员在创建约束和碰撞关系时速度较慢的问题,从而提高物理资产的配置效率。
在可选的实施例中,如图3所示,所述配置操作还包括:
S300,以预先创建好的骨骼结构作为参考,根据头发和服饰的特征创建相应的网状或条状约束关系。
所述骨骼结构可以为一个游戏角色的骨架结构。美术人员为服饰创建的骨架提供了服饰结构上的特征。
服饰的骨骼结构可以提供服饰的参考特征,通过服饰的骨骼结构、服饰、头发,可以创建符合头发、服饰设计的网状或条状约束关系。具体地,制作人员可以选择骨骼结构中每个骨骼链的根骨骼。通过配置工具为所选的根骨骼及其子骨骼创建实体(实体是物理资产上骨骼上的物理配置对象,一个骨骼可以创建一个,用来存骨骼的物理配置),并根据骨骼的之间的父子关系创建纵向约束。然后根据骨骼的深度和命名规则为相邻的同深度骨骼创建横向约束。通过横向约束和纵向约束便可以形成网状约束结构。
通过预设的配置工具,可以快速地创建符合头发、服饰设计的网状或条状约束结构,即通过配置工具的快速创建功能,可以提高物理资产的配置效率。
在可选的实施例中,如图4所示,所述配置操作还包括:
S400,按照骨骼之间的约束关系,选择所述骨骼相关联的横向约束或纵向约束的相关骨骼或约束本身。
通过预设的配置工具以及骨骼之间的约束关系,可以快速地选择与某个骨骼有横向约束或纵向约束的其他骨骼,或者也可以选择某个骨骼自身的约束(如横向约束或者纵向约束),即通过配置工具的快速选择功能,可以提高物理资产的配置效率。
在可选的实施例中,如图5所示,所述配置操作还包括:
S500,通过批量修改配置变量,对多组骨骼设置多对多的设置碰撞关系,每组中的骨骼之间不发生碰撞。
举例而言,在配置裙子时,设置腿和胳膊部分对应的骨骼为第一组,裙摆上所有模拟骨骼为第二组,通过批量修改配置变量可以使第一组和第二组之间发生碰撞,第一组中的骨骼之间不会发生碰撞,第二组之间的骨骼也不会发生碰撞。
通过预设的配置工具,可以批量地设置多组骨骼之间的碰撞关系,从而可以实现每组中的骨骼可以和另一组的骨骼发生碰撞,且每组中的骨骼之间不发生碰撞。即通过快速碰撞设置功能,可以一次性地对一组中的所有骨骼设置碰撞关系,无需一个一个骨骼进行设置,提高配置效率。此外,通过配置工具手动配置碰撞关系,可以达到预先进行碰撞剔除的效果,从而可以降低后续进行碰撞检测的消耗。
步骤S102,对所述物理资产进行解析,以得到物理配置信息。
对所述物理资产进行解析时,会先提取出物理资产中的配置信息。将物理资产信息提取出来之后,会对物理资产信息进行整理,得到最终的物理配置信息。
通过对物理资产中的骨骼、约束和碰撞器等进行分析,可以得到进行物理动画模拟时需要的数据(即物理配置信息)。所述物理配置信息可以直接用于物理动画模拟。
下面将介绍对物理资产进行解析的具体操作。
在可选的实施例中,如图6以及图24所示,所述步骤S102可以包括:
S600,根据所述物理资产,获取骨骼信息和初始物理配置信息。其中骨骼信息包括架构结构和骨骼绑定位置,所述初始物理配置信息包括各骨骼的骨骼参数、碰撞器参数和约束参数。
S602,根据所述骨骼信息和所述初始物理配置信息,获取各个骨骼的骨骼类型、骨骼深度、骨骼链信息、约束信息、碰撞信息、参考挤出方向信息、约束碰撞信息、三角形碰撞器信息、旋转修正信息、弯曲约束信息、补充结构约束。其中:骨骼类型包括模拟骨骼和运动学骨骼,所述骨骼链信息根据各个骨骼的骨骼深度得到。
骨骼可以分为模拟骨骼和运动学骨骼。其中,所述模拟骨骼是会进行物理模拟以及会被碰撞的骨骼。所述运动学骨骼是指在动画图表节点中被前向运动学或逆向运动学驱动的骨骼。运动学骨骼只能用来碰撞模拟骨骼,且运动学骨骼在相交解除的时候并不会被弹开,所述运动学骨骼只能被动画驱动。此外,需要说明的是,在物理资产,只有配置了对应实体(body)的骨骼才会被收集,本申请不一定会对模型的所有骨骼进行模拟。
所述约束信息可以包括线距离约束和角度约束。其中,所述线距离约束对应物理资产中约束上的Linear Limits,用于保持两个骨骼之间的距离。所述角度约束对应物理资产中约束上的Angular Limits,用于将骨骼相对于其父骨骼的摇摆运动限制到一个锥形范围内。
所述约束碰撞信息为胶囊碰撞器信息,两个模拟骨骼之间会根据两个模拟骨骼的碰撞器半径确定一个胶囊碰撞器。所述胶囊碰撞器是实时变化的,胶囊碰撞器的两端会随着两个模拟骨骼的位置调整。举例而言,如果两个模拟骨骼之间的距离变长,胶囊碰撞器也会随着两个模拟骨骼间距的变长而变长。本申请实施例通过在两个模拟骨骼之间设置胶囊碰撞器,使胶囊碰撞器的两端随着两个模拟骨骼的位置进行调整,从而实现在骨骼密度较低的情况下,可以有效防止穿透。此外,由于骨骼密度较低(骨骼密度远低于布料的粒子密度),使得在进行物理动画模拟时,可以减少计算资源的消耗,降低移动设备的性能消耗。
物理资产中骨骼的参数可以决定对应的骨骼是否会形成三角形碰撞器。物理资产中的网状约束关系可以视为由网格组成的三角面。具体地,将网状约束关系中的四个约束连成的格子划分成两个三角面,每个三角面对应一个三角形碰撞器,其中,三角面的一个顶点对应一个骨骼。三角面的正反由索引决定。如果需要,则会修改索引顺序来使三角面的正面朝向外侧,此外,在收集三角形碰撞器信息时,会将面积过小的三角面剔除。
在将物理资产存储至动画图表节点之前,先对物理资产进行解析,以获取物理动画模拟时需要的物理配置信息。这样做的好处:使得后续在进行物理动画模拟时,无需每次都对物理资产进行解析整理,降低对设备的性能消耗较低,从而使本申请实施例的技术方案生成的物理动画可以用于性能较低的移动设备。
下面将介绍所述骨骼深度、骨骼链信息、碰撞信息、参考挤出方向信息、旋转修正信息、弯曲约束信息以及补充结构约束获取的具体操作。
在可选的实施例中,如图7、图25所示,所述骨骼深度通过以下操作得到:
S700,将运动学骨骼的初始深度设为1。
S702,根据所述骨架结构和各骨骼之间的初始约束信息,设置各个模拟骨骼的骨骼深度。其中,在确定最末端的模拟骨骼的情况下,将运动学骨骼的骨骼深度设置为0,将最末端的模拟骨骼的骨骼深度设置为1,将运动学骨骼和最末端的模拟骨骼之间的中间骨骼的骨骼深度以插值形式设置在[0,1]中,其中,插值根据相应中间骨骼的深度而定。
所述插值根据相应中间骨骼的深度而定,可以包括:中间骨骼的深度按测地线距离插值。所述测地线距离插值是一种在三维空间中进行插值的方法,用于计算两个点之间的插值点。测地线距离插值是基于球面上的最短路径(即大圆弧路径)进行插值。通过按测地线距离插值,可以确保在旋转或方向变化过程中保持最短路径,使得插值结果更加自然和平滑。
示例性地,如图25所示,将运动学骨骼的初始深度设为Depth,确定第i个骨骼,其中i<总骨骼数,第i个骨骼未处理,n为计数标记,n表示骨骼处理的个数,i的初始值为0。
在第i个骨骼的父骨骼深度为Depth情况下,令第i个骨骼的深度为Depth+1,将第i个骨骼加入已处理集合。
在第i个骨骼的父骨骼深度不为Depth情况下,获取与第i个骨骼有约束关系的第j个骨骼,其中,j<与第i个骨骼有约束关系的骨骼总数。在第j个骨骼的深度为Depth的情况下,令第i个骨骼的深度为Depth+1,将第i个骨骼加入已处理集合。
其中,在确定最末端的模拟骨骼的情况下,将运动学骨骼的骨骼深度设置为0,将最末端的模拟骨骼的骨骼深度设置为1,将运动学骨骼和最末端的模拟骨骼之间的中间骨骼的骨骼深度以插值形式设置在[0,1]中,其中,插值根据相应中间骨骼的深度而定。
通过骨骼类型信息和初始约束信息对骨架结构进行分析,获取每个骨骼的深度,通过骨骼深度可以更加准确地确定骨骼链信息。
在可选的实施例中,如图8、图26所示,所述骨骼链信息通过以下操作得到:
S800,根据各个骨骼的骨骼深度,对各个骨骼进行从小到大排序。
S802,确定第i个骨骼,其中i<总骨骼数,i的初始值为0。
S804,获取与第i个骨骼有约束关系的第j个骨骼,其中,j<与第i个骨骼有约束关系的骨骼总数。
S806,在第i个骨骼的骨骼深度小于第j个骨骼,且第i个骨骼不是第j个骨骼的上级的情况之下,将第j个骨骼设置为父骨骼。
S808,在将第j个骨骼设置为父骨骼的情况下,基于骨架结构得出第j个骨骼和第i个骨骼之间的关系。
S810,在确定第j个骨骼是第i个骨骼的父骨骼的情况下,将第j个骨骼设置为第i个骨骼的父骨骼。
在确定第j个骨骼不是第i个骨骼的父骨骼的情况下,继续判断其他与i有约束关系的骨骼(j=j+1)。需要说明的时,j所代表的骨骼与i所代表的骨骼并不是来自同一个集合。
需要说明的是,这里确定的骨骼父子关系并不一定是模型骨架文件中的层级关系,而是通过参考骨架中的信息和物理资产中的约束确定的。
通过骨骼深度、骨架结构和约束关系三者来确定骨骼链信息,使获取的骨骼链信息更加准确。在深度相同的情况下优先考虑骨架信息(美术定义的),其次再考虑约束关系,这样做的好处:由于骨架消息是美术根据衣服版型定义的,优先参考骨架消息使生成的骨骼链更加合理,避免奇怪的效果,使得真实感更强。
在可选的实施例中,如图9所示,所述碰撞信息通过以下操作得到:
S900,将所述物理资产中的骨骼之间的碰撞信息关联到相应的模拟骨骼上。其中,所述模拟骨骼关联有以下碰撞信息:与自身碰撞的运动学骨骼索引、与三角形碰撞器的碰撞关系、是否开启约束碰撞关系,其中所述约束碰撞关系包括胶囊碰撞器。
通过收集模拟骨骼的碰撞信息,使得在根据动画图表节点进行模拟时,可以快速地根据模拟骨骼的碰撞信息进行碰撞处理以及位置更新。
在可选的实施例中,如图10所示,所述参考挤出方向信息通过以下操作得到:
S1000,在第i个骨骼上开启参考挤出方向功能的情况下,收集所述第i个骨骼对应的父骨骼以及与所述第i个骨骼具有约束关系的左、右骨骼的索引。其中i≤总骨骼数。
S1002,其中,在所述第i个骨骼的左、右骨骼有一个缺失的情况下,用所述第i个骨骼替代该缺失的骨骼。
S1004,在所述第i个骨骼的左、右骨骼均缺失的情况下,关闭所述第i个骨骼对应的参考挤出方向功能。
在物理动画中,连续性碰撞检测是一种精确的碰撞检测方法,可以在每个时间步长内对物体之间的碰撞进行准确的检测和解除。然而,连续性碰撞检测需要消耗较高的计算资源。
通过考虑周围骨骼获取参考挤出方向信息,进行物理动画模拟时,可以在获取参考挤出方向信息的基础上设置参考的碰撞挤出方向范围,进而进行相交解除。通过启用参考挤出方向改善穿插问题,解决了穿插后无法恢复的问题。启用参考挤出方向,可以不用开启CCD,从而减少碰撞处理需要消耗的计算资源,提高性能和效率。
骨骼在位移之后需要计算骨骼的旋转修正信息。计算骨骼的旋转修正信息有两种方式,第一种是参考周围的骨骼计算骨骼的旋转修正信息,第二种是仅考虑子骨骼计算骨骼的旋转修正信息。下面将具体介绍第一种方式。在可选的实施例中,如图11、图27所示,所述旋转修正信息通过以下操作得到:
S1100,根据各骨骼之间的初始约束信息,获取初始三角形集合。
S1102,将不符合预设条件的三角形从所述初始三角形集合中剔除,以获取目标三角形集合。
S1104,处理所述目标三角形集合中的三角形的面朝向,以使得:对处理后的目标三角形集合中的三角形关联的待修正骨骼执行以下操作:
S1106,获取所述待修正骨骼对应三角面的平均法线。
S1108,获取所述待修正骨骼的切线,所述切线为所述待修正骨骼至所述待修正骨骼的父骨骼之间的向量。
S1110,根据所述平均法线以及所述切线,构造旋转矩阵。
S1112,根据所述旋转矩阵,获取所述待修正骨骼的旋转修正信息。
根据旋转矩阵,获取待修正骨骼的旋转修正信息的具体操作如下:根据旋转矩阵计算出待修正骨骼的局部旋转信息。所述局部旋转信息和待修正骨骼的相关三角形索引构成待修正骨骼的旋转修正信息。
在获取待修正骨骼的旋转修正信息的情况下,记录所述待修正骨骼的相关三角索引和局部旋转信息。
所述预设条件可以为三角形面积大于一定阈值和/或三角形中最大角的值小于一定阈值。通过将不符合预设条件的三角形从所述初始三角形集合中剔除,可以剔除面积过小和/或存在大钝角的三角形,从而保障目标三角形集合中的三角形不是病态的,进而提高获取的旋转修正信息的准确性。
处理所述目标三角形集合中的三角形的面朝向的具体操作如下:首先处理第一个三角形,若所述第一个三角形存在与其共边的三角形,判断所述第一个三角形的法线和共边三角形的法线形成的夹角是否为钝角。如果是钝角,则说明这两个三角形(所述第一个三角形和其共边的三角形)形成的二面角是锐角,此时通过调整三角形索引进行翻转。反之如果两个三角形的法线的夹角是锐角或直角,则两个三角形形成的二面角是钝角,不用翻转。继续处理与所述第一个三角形共边的三角形,已经处理过的三角形不会重复处理。如果与第一个三角形所有相关联的三角形已处理完,则再找下一个没处理过的三角形重复上面的过程,直到处理完所有三角形。通过上述操作,可以让共边的两个三角形形成的二面角不小于90°。
在骨骼没有相关的三角面的情况下,将该骨骼标记为不考虑周围骨骼,并将所述骨骼标记(旋转修正类型)记录到该骨骼上。
获取旋转矩阵时,可以通过叉乘和施密特正交化来对平均法线以及所述切线进行处理,从而获取旋转矩阵。
在上述可选的实施例中,通过获取待修正骨骼的旋转修正信息,使得在根据动画图表节点进行模拟时,可以快速地根据所述旋转修正信息进行骨骼旋转修正操作。
在可选的实施例中,如图12所示,
所述弯曲约束信息通过以下操作得到:
S1200,根据约束信息中的横向约束和纵向约束,在横向间隔为1和纵向间隔为1的两个骨骼之间创建线距离约束。其中相邻骨骼间隔为0。
所述补充结构约束通过以下操作得到:
S1202,根据约束信息中的横向约束和纵向约束,创建X形约束,X形约束为骨骼结构中斜向的约束。
所述弯曲约束信息可以用来抵抗弯曲。所述弯曲约束信息可以影响物理资产分析产出的数据。在对物理资产进行解析的过程中,通过创建弯曲约束信息,可以调整物理资产分析产出的物理配置信息,进而快速地调整物理模拟效果。
所述补充结构约束是在横向约束和纵向约束的基础上,创建的斜向约束(X形约束)。在创建约束时,骨骼之间的最大间隔以及最多为每个骨骼生成的约束数可以由用户配置,优先创建间隔小的约束。
步骤S104,将所述物理配置信息存储至动画图表节点。
所述动画图表节点是Unreal Engine中用于控制和管理物理动画的节点。通过动画图表节点可以定义物理动画的流程和逻辑,从而对目标对象进行物理仿真和碰撞模拟。动画图表节点可以提供许多用于解析物理资产、控制物理动画生成以及显示物理动画的参数,通过这些参数可以实现更真实的物理效果。
在可选的实施例中,所述动画图表节点的参数包括以下一组或多组:调试绘制参数、运行时参数、混合参数、跨组件碰撞参数和物理资产解析参数。上述参数具体如下:
表三:调试绘制参数描述
表三中的绘制功能属于调试绘制模块,可在本申请的动画图表节点所在的蓝图的Viewport中绘制。表三中的绘制参数可以用来观察物理资产分析生成的结果,从而直观的检查物理资产配置问题。
表四:运行时参数描述
/>
表四中的参数是动画图表节点在运行时使用的。
表五:混合参数描述
表六:混合内容参数描述
混合功能主要是为了应对在有些特殊,需要尽可能的保持某些骨骼动画姿势,混合功能可以用来让某些骨骼在特定情况下达到如下效果:恢复能力更强、刚性更强或者受重力影响更小。混合功能同时又应用碰撞处理。此动画图表节点除了特有的混合参数外,还有一个控制物理效果和输入动画混合程度的参数。
表七:跨组件碰撞参数描述
/>
本申请的物理动画图表节点代表一个服饰,一个角色下可以有多个服饰,这些参数决定了这些服饰的碰撞关系。
表八:物理资产分析参数描述
表八中得到参数会影响物理资产分析产出的数据,Center position参数可以在动画图表节点所在蓝图的Viewport中可视化调整。
在可选的实施例中,如图13所示,所述步骤S104可以包括:
S1300,将所述物理配置信息进行序列化操作,以得到序列化物理配置信息。
S1302,将所述序列化物理配置信息存储至动画图表节点,以及编译、保存动画图表。
所述物理配置信息可以以UProperty的形式序列化保存数据到动画图表节点。
将解析出的物理配置信息序列化存储到动画图表节点,无需对物理资产进行打包。当需要进行物理动画模拟时,可以直接根据动画图表节点中的物理配置信息进行模拟,无需对物理资产进行解析整理,从而可以减少初始化时的资源消耗。此外,将物理配置信息序列化保存到动画图表节点中后,可以方便地在模拟时重新加载和应用配置,从而可以加快运行时初始化的速度。
步骤S106,根据存储有所述物理配置信息的动画图表节点,模拟所述目标对象的物理动画。
所述动画图表节点可以代表一个服饰,所述服饰可以包括连衣裙、外套等。一个角色下可以有多个服饰。本申请实施例可以支持一个角色下的多个服饰间的碰撞。需要说明的是,通过UE动画图表节点的并行策略,可以使多个组件(服饰)并行进行模拟。
本申请实施例以动画图表节点的形式将物理动画效果应用到Unreal引擎的动画系统,使得在进行模拟时,可以借助Unreal的并行策略以及动画图表节点自身的低计算复杂度,节省计算资源,降低性能消耗,使本申请实施例可以适用在性能相对较低的移动设备。
在可选的实施例中,如图14所示,所述步骤S106可以包括:
S1400,对所述动画图表节点进行初始化操作,以将所述动画图表节点的物体注册到碰撞管理器并更新碰撞信息。
S1402,在初始化操作完成的情况下,根据所述动画图表节点中的物理配置信息,进行物理动画模拟。
S1404,在所述动画图表节点对应的物体被销毁的情况下,对所述动画图表节点进行反初始化操作。
当动画图表节点对应的物体被销毁时,例如游戏中的角色死亡,此时动画图表节点对应的物体就不存在了,动画图表节点对应的服饰等失去了其依附的物体,使得动画图表节点的模拟效果无法正常展现。在销毁物体或角色时,对所述动画图表节点进行反初始化操作,确保动画图表节点不会发生错误和异常情况。其中,所述对所述动画图表节点反初始化操作,可以包括:将通过碰撞管理器注册的物体注销,将所有解算任务对象释放,将所述空间树释放。
在上述可选的实施例中,以动画图表节点的形式进行初始化以及模拟,通过相应的动画图表节点可以实时的进行物理动画模拟。
下面将介绍所述动画图表节点的初始化操作。
在可选的实施例中,如图15、图28所示,所述步骤S1400可以包括:
在所述目标对象的模型骨骼与物理配置信息相匹配的情况下,执行以下操作:
S1500,创建空间树,所述空间树用于碰撞检测。
S1502,通过碰撞管理器注册所述动画图表节点中的物体。其中,在动画图表节点中的物体第一次加载至关卡的情况下,将该物体注册至碰撞管理器,以通过碰撞管理器确定与新注册的物体存在碰撞关系的其他物体,并对存在碰撞关系的其他物体进行标记。
所述空间树可以包括八叉树、kd树(k-dimensional Tree)等。
在一些实施例中,当所述目标对象的模型骨骼与物理配置信息不匹配时,执行以下操作:重新对所述物理资产进行解析,以得到更新后的物理配置信息。或对所述物理配置信息进行修正,以得到修正后的物理配置信息。根据更新后的物理配置信息或修正后的物理配置信息进行物理动画模拟。
在上述可选的实施例中,判断目标对象的模型骨骼与物理配置信息是否相匹配,如果不匹配就进行修正或更新,从而确保动画图表节点中的物理配置信息是正确的。在匹配的情况下,创建空间树,通过碰撞管理器注册所有动画图表节点中的物体,使得动画图表节点在初始化之后,可以直接根据物理动画节点中的信息进行碰撞检测等操作,保障在进行模拟时碰撞处理的准确性以及正确性。
下面将介绍进行物理动画模拟时,每帧物理动画的物理动画模拟工作流程如下。
在可选的实施例中,如图16所示,所述步骤S1402可以包括:
S1600A,执行模拟前的准备工作。
S1600B,计算出所述动画图表节点中的模拟骨骼的速度、位置、碰撞信息和约束信息,其中,所述位置根据计算得到的速度、碰撞信息和约束信息进行计算得到的。
S1602,根据所述位置以及物理配置信息,对骨骼进行旋转修正。
S1604,根据所述位置以及旋转修正后的骨骼,获取更新后的骨骼变换信息。
S1606,输出所述更新后的骨骼变换信息,以控制所述模拟骨骼的动画效果。
需要说明的是,模拟骨骼的位置计算以及对骨骼进行旋转修正这两个操作是按先后顺序单独进行处理的。此外,在对每帧物理动画进行模拟时,一帧物理动画可能会进行多次模拟,即进行多个模拟子步的模拟,每个模拟子步都会进行步骤S1600B,即每个模拟子步都会进行一次位置计算。但是一帧物理动画只会进行一次旋转修正操作,即在进行物理动画模拟时,每帧物理动画进行一次旋转修正操作。
旋转修正是在模拟骨骼的位置更新之后,根据模拟骨骼的配置以及更新后的位置,调整所有模拟骨骼和运动学骨骼(与模拟骨骼存在约束的运动学骨骼)的旋转。骨骼旋转修正信息是根据骨骼位置和配置计算的。在计算骨骼旋转修正信息时,有以下两种计算方式:(1)如果骨骼标记了考虑周围骨骼,则计算当前骨骼和周围骨骼形成三角面的平均法线方向和当前骨骼到其父骨骼的向量。根据所述平均法线方向和所述向量构造一个旋转矩阵,将所述旋转矩阵乘上当前骨骼存储的局部旋转,得到当前骨骼的旋转。(2)如果标记了仅考虑子骨骼做旋转,则可通过罗德里戈公式,根据位置向量与节点输入姿势的向量计算旋转,所述位置向量为从当前骨骼位置到位移后骨骼位置形成的向量。
在上述可选的实施例中,根据物理配置信息计算模拟骨骼的速度、位置、碰撞信息和约束信息,并根据模拟骨骼的位置以及配置进行骨骼旋转修正。在此基础上,根据模拟骨骼的位置以及旋转修正后的骨骼,可以快速地计算出骨骼变换信息,从而可以根据骨骼变换信息快速地控制模拟骨骼的动画效果。
下面介绍每帧物理动画进行模拟时的部分操作。
在可选的实施例中,如图17、图29所示,模拟前的准备工作具体如下:
S1700,获取控制台变量,所述控制台变量用来对物理动画效果进行全局控制,以调整实时效果。
S1702,确认传送标志,所述传送标志包括:无操作,重置和传送。
S1704,根据所述碰撞管理器中的信息,更新碰撞器。
S1706,获取时间步长和模拟子步数。
S1708,获取当前帧输入的骨骼变换信息,所述骨骼变换信息为所述运动学骨骼的骨骼变换信息。
S1710,根据输入的骨骼变换信息、碰撞器在骨骼空间下的局部变换以及用户配置的缩放参数对相应模拟骨骼上的碰撞器进行缩放,以得到缩放后的碰撞器。
S1712,根据所述传送标志,对相应模拟骨骼进行对应操作,所述对应操作包括传送或者重置。
S1714,获取相应模拟骨骼的参考挤出方向。所述参考挤出方向为该相应模拟骨骼对应的三角形法线方向。
S1716,通过动画图表节点上的接口接收修改命令,以修改的相应模拟骨骼混合参数和混合内容参数。
所述控制台命令可以在运行时控制物理动画功能整体或部分功能,具体地,控制台变量如下表所示:
表九:控制台命令描述
控制台的绘制相关命令和节点上绘制参数功能不同:控制台可以用来调整实时效果,可以通过颜色标识出发生碰撞的模拟骨骼碰撞器和三角形碰撞器,方便碰撞情况的观察。而节点上的绘制参数可以用来观察物理资产分析生成的结果,从而直观地检查物理资产配置问题。
所述传送标志有多种确定方式,具体地:(1)可以通过修改Unreal引擎的场景序列和自定义动画通知将传送标志传递到动画蓝图的动画图表节点上。(2)所述传送标志也可以根据控制台变量确定最终的外界传入的传送标志。所述传送标志包括无操作、重置和传送。其中,重置操作优先于传送操作,传送操作优先于无操作。重置会把节点输入的骨骼变换直接作为当前骨骼变换和上帧缓存的骨骼变换,传送则会清零组件旋转和位移的量,并将每个模拟骨骼上一帧相对其父运动学骨骼的局部变换变化到当前帧。
所述输入的骨骼变换信息包括动画驱动的相应的骨骼变换信息,如运动学骨骼的骨骼变换信息。
所述参考挤出方向是模拟骨骼的参考挤出方向,对于每个模拟骨骼,会把其左右骨骼和父骨骼位置连线形成的三角形的法线方向记作参考挤出方向。
通过动画图表节点上的接口,使用户可以实时修改一部分骨骼的参数(表5、6中的参数),进而可以对模拟出的效果进行实时调整。在有修改的情况下,可以将用户修改的参数和物理资产配置参数插值的结果作为模拟的参数。
在一些实施例中,如图29所示,在Unreal Engine中,LOD(Level of De tail,细节层次)用于在不同距离或视角下呈现不同级别的细节,UE允许不同的精度有不同的骨骼,在LOD发生变化的情况下,检查骨骼是否对应,在LO D发生变化的情况下,更新元素对应的骨骼索引。
通过获取上述数据,使得在模拟时可以根据上述数据快速地计算所述动画图表节点中的模拟骨骼的速度、位置、碰撞信息和约束信息,进而对目标对象进行物理动画模拟。
在可选的实施例中,如图18所示,所述步骤S1702可以包括:
S1800,在所述目标对象的速度大于第一预设阈值且所述传送标志是无操作的情况下,更新所述传送标志,更新后的传送标志为传送,所述传送用于对相应骨骼进行传送操作。
在上述可选的实施例中,传送功能可以在保留当前运动状态的前提下进行碰撞检测和处理,且传送功能提供了自动传送和手动传送两个功能。手动传送:可通过蓝图调用或在动画序列、场景序列上添加事件使用。自动传送:在目标对象的线速度或角速度大于第一预设阈值且传送标志是无操作的情况下,更新传送标志以得到自动传送标志,所述自动传送标志为传送。
在可选的实施例中,如图19所示,所述步骤S1704可以包括:所述动画图表节点的物体为一个服饰。对应地,根据所述碰撞管理器中的信息,更新碰撞器,包括:
S1900,在目标对象注册所述动画图表节点的情况下,将其他服饰上对应运动学骨骼上的碰撞器更换到目标服饰上。其中所述其他服饰是会与所述目标服饰产生碰撞的服饰。
举例而言,在更新碰撞器的过程中,检查碰撞管理器中的信息,如果当前服饰A所属的角色下有使用本申请提供动画图表节点的目标服饰注册或注销,将服饰A上对应运动学骨骼上的碰撞器更换到目标服饰上。其中服饰A是会与所述目标服饰产生碰撞的服饰。如果服饰A的部分运动学骨骼在这些服饰上没有配置或缺失,则使用服饰A自身的配置。
在可选的实施例中,如图20所示,所述方法还包括S2000,创建解算任务对象。其中,以粒子和约束为单位,速度模拟、约束和旋转修正分别对应一个任务对象。需要说明的是,创建解算任务对象在动画图表节点第一次根据物理配置信息进行物理动画模拟时就会创建,之后每帧模拟时无需重复创建解算任务对象。
以粒子和约束为单位,将速度模拟、约束和旋转修正都拆分成了任务对象,速度模拟、约束和旋转修正这三个任务串行计算。每个任务对象内部并行计算。例如在对速度模拟这个任务对象进行处理时,一个骨骼一个任务,骨骼之间是并行计算的。本申请的技术方案可以借助Unreal游戏引擎的并行策略实行每个任务对象内部任务的并行计算,从而提高计算效率,减少模拟需要的时间。
在可选的实施例中,如图21所示,所述步骤S1706可以包括:
S2100,根据平均步长确定当前帧的时间步长,所述平均步长为当前帧的前N帧的平均步长,N为复数。
S2102,根据当前帧数以及模拟参数确定模拟子步数。其中所述模拟参数为一秒模拟的总次数。
S2104,根据模拟子步数以及当前帧数,以预定时间间隔更新修正系数,所述修正参数用于调整模拟参数。
所述模拟参数为表四中的Simulation times参数,所述模拟子步数为整数,所述模拟子步数为每个帧内模拟的次数。
示例性的,当前步的平均步长可以为过去60帧的平均步长。设置所述模拟参数为60,当当前帧数为60帧时,根据当前帧数以及模拟参数可知,模拟子步数为1,即每个帧内模拟一次,此时修正系数为1。
示例性的,设置所述模拟参数为60,当当前帧数为40帧时,由于模拟子步数为整数,所以根据当前帧数以及模拟参数可知,模拟子步数为1,修正系数为1.5。
示例性的,当模拟次数参数为60,而当帧平均帧数为35时,模拟子步数为2,实际模拟次数为70(35*2),修正系数为60/70。
在帧数不稳定的情况下,时间步长的抖动会体现在物理动画效果上,因此在帧数不稳定时,可以通过调整模拟子步数以及修正系数,使当前帧数、模拟子步数以及修正系数的三者的乘积尽可能为模拟参数的值。因此,即使此时帧数不稳定,也能保持使一秒模拟的总次数不变,从而缓解抖动问题。此外,根据过去N帧的平均步长确定当前帧的时间步长,也可以缓解抖动问题。
在进行图17中操作之后,获取到对应的所述多个参数,根据所述多个参数计算动画图表节点中的模拟骨骼的速度、位置、碰撞信息和约束信息的操作如下,在可选的实施例中,如图22所示,所述步骤S1600B可以包括:
S2200,更新模拟骨骼的速度与位置。
S2202,更新运动学骨骼的碰撞器的位置以及旋转。
S2204,根据线距离约束,对所述模拟骨骼进行位置更新。
S2206,通过拉伸约束操作维持骨骼链的长度,所述骨骼链以运动学骨骼为起点串联多个模拟骨骼。
S2208,根据恢复力和原始骨骼链形态,调整骨骼链中骨骼的旋转,以获得目标骨骼链。
S2210,获取模拟骨骼的参考挤出方向。
S2212,根据所述模拟骨骼的参考挤出方向,对约束碰撞器和运动学骨骼进行碰撞处理。
S2214,根据所述模拟骨骼的参考挤出方向,对所述模拟骨骼和运动学骨骼进行碰撞处理。
S2216,对三角形碰撞器进行更新操作。
S2218,对所述模拟骨骼与更新后的三角形碰撞器进行碰撞处理操作。
S2220,对骨骼链中模拟骨骼中的父子骨骼夹角偏差进行约束,以使摇摆范围小于第二预设阈值。
示例性地,定义一些符号:骨骼坐标x,速度v,风速vwind,重力加速度g,上次迭代的骨骼坐标xold,组件(骨骼)位移tc,组件旋转Rc,骨骼旋转线性阻尼d,骨骼质量m,时间步长Δt,当前帧子步数n,组件位移阻尼dct,组件旋转阻尼dcr,恢复力r,刚度s,摩擦系数fr,修正系数p,约束的原始长度l,参考挤出向量e。另外,为了方便描述单个任务中用到的多个骨骼或约束,这里的下标数字的方式区分出不同骨骼的参数,比如:x0和x1表示两个不同骨骼的位置。下面对每个步骤进行说明:
更新模拟骨骼的速度和位置。具体地:每个任务处理一个模拟骨骼,将模拟骨骼当做一个质量分布均匀的球体来处理,在忽略所有约束的情况下让物体自由运动。首先计算速度v=((x-xold)/Δt)*(1-d)+vwind,为了防止碰撞挤出导致的抖动,在速度足够小的时候可以直接将速度置零。更新位置x=x+v*Δt,应用组件在世界空间位移产生的影响x=x+tc*Δt*(1-dct)*(1-fr),应用组件在世界空间旋转产生的影响x=x+(Rc*x–xold)/n*(1-dcr)*(1-fr),需要说明的是这里的fr是上次迭代碰撞时计算的。
更新运动学骨骼碰撞器的位置和旋转。具体地:每个任务处理一个运动学骨骼,为了缓解一帧动作的跨度过大,将运动学骨骼的变换分解到了每个子步,在上帧输入动画和当前帧输入动画间差值,将差值后的位移和旋转应用到运动学骨骼碰撞器上。
根据线距离约束,对所述模拟骨骼进行位置更新。具体地:每个任务处理一个距离约束。可以使用雅克比方法,处理模拟骨骼的线距离约束,对于约束关联的模拟骨骼,更新它的位置x0=x0+(x1-x0)/l*s*Δt*p*0.5。如果也另一个骨骼也是模拟类型,则x1=x1+(x0-x1)/l*s*Δt*p*0.5,由于运动学骨骼只能被动画驱动,因此在进行模拟时,并不会被移动。
通过拉伸约束操作维持骨骼链的长度。具体地:所述骨骼链以运动学骨骼为起点串联多个模拟骨骼。每个任务处理一条骨骼链条,通过拉伸约束维持骨骼链的长度,从而防止模型“纵向”拉伸。
根据恢复力和原始骨骼链形态,调整骨骼链中骨骼的旋转,以获得目标骨骼链。具体地:每个任务处理一条以一个运动学骨骼为起点的骨骼链条,然后以恢复力为参数,并以节点输入的原始骨骼链形态为参考,调整骨骼位置,从而使目标骨骼链的形态逐渐在一定程度上接近原始骨骼链形态(节点输入动画的骨骼链形态)。为了维持服饰形态,在对服饰进行设置时,会将骨骼的刚度设置的较大,同时会在骨骼之间设置强距离约束。但是,如果骨骼的刚度过大或骨骼之间存在强距离约束,会使服饰的柔软程度变小。而本申请实施例通过恢复骨骼链形态操作来保持服饰形态,使得本可选实施例的服饰中的骨骼无需设置较大刚度,也不需要设置过强的距离约束来保持服饰形态,从而可以使得服饰较为柔软。
获取模拟骨骼的参考挤出方向。具体地:每个任务处理一个模拟骨骼,设当前模拟骨骼坐标x0,父骨骼坐标x1,左侧骨骼坐标x2,右侧骨骼坐标x3,参考挤出方向可以通过e=norm(cross(x1-x0,x3-x1))计算得到,其中norm是向量单位化函数,cross是向量叉乘函数。如果左侧骨骼或右侧骨骼有缺失,可以用当前模拟骨骼替代左侧骨骼或右侧骨骼,进而计算当前模拟骨骼的参考挤出方向。
约束碰撞器与运动学骨骼的碰撞处理。具体地:两个模拟骨骼可以形成一个约束碰撞器(如胶囊碰撞器),两个模拟骨骼的参考挤出方向的平均值为约束碰撞器与运动学骨骼的参考挤出方向。每个任务处理一个约束碰撞器,用符号距离函数计算出第一挤出向量,根据参考挤出方向以及第一挤出方向确定最终的挤出方向,根据所述最终的挤出方向位移模拟骨骼,进而进行相交解除。根据参考挤出方向对约束碰撞器与运动学骨骼进行碰撞处理,可以使所述最终的挤出方向不偏离参考挤出方向一定范围。
模拟骨骼与运动学骨骼的碰撞处理。具体地:每个任务处理一个模拟骨骼,使用符号距离函数计算第二挤出向量,根据第二挤出向量和模拟骨骼对应的参考挤出方向确定目标挤出方向,根据目标挤出方向进行相交解除。根据参考挤出方向对模拟骨骼与运动学骨骼进行碰撞处理,可以使目标挤出方向不偏离参考挤出方向一定范围。此外,还可以根据摩擦相关的参数和模拟骨骼与运动学骨骼的碰撞处理后的碰撞情况计算摩擦系数fr,将当前帧计算出来的摩擦系数fr用于下一帧模拟骨骼的位置更新计算中。其中,计算出的挤出向量越长,摩擦系数越大,下一帧组件旋转产生的移动就越小。
更新三角形碰撞器和空间树。具体地:三角形碰撞器的三个顶点中至少有一个为模拟骨骼,当对模拟骨骼的位置更新以及碰撞处理等操作后,模拟骨骼的位置会产生一定变化。为了使三角形碰撞器跟更新位置后的模拟骨骼保持一致,需要根据每个三角形的顶点对应的模拟骨骼位置更新三角形碰撞器,计算三角形碰撞器的法线方向并为每个三角形碰撞器构造一个轴对齐包围盒,然后将轴对齐包围盒作为元素更新到空间树。
对骨骼链中模拟骨骼中的父子骨骼夹角偏差进行约束,以使摇摆范围小于第二预设阈值。具体地:每个任务处理一条骨骼链,遍历每个骨骼链中的模拟骨骼,计算当前父骨骼至子骨骼向量与输入动画节点时原始的父骨骼到子骨骼向量夹角的偏差,根据配置将偏差限制在一定范围内。
通过上述操作,可以直接根据模拟骨骼的速度、位置、碰撞信息、约束信息,获取更新后的骨骼变换信息,从而控制模拟骨骼的动画效果,使得在进行模拟物理动画时,耗时较少,从而提高物理动画模拟的效率,例如,可以展示出服饰的柔软性,更加逼真。
在可选的实施例中,如图23所示,所述步骤S2218可以包括:
S2200,构造模拟骨骼对应的轴对齐包围盒。
S2202,通过空间树剔除部分三角形碰撞器,确定目标三角形碰撞器集合。
S2204,对模拟骨骼与目标三角形碰撞器集合中的碰撞器进行碰撞检测。
S2206,在检测到模拟骨骼与所述三角形碰撞器会产生碰撞的情况下,以穿插深度作为权重,计算模拟骨骼的期望挤出向量,根据所述期望挤出向量进行相交解除。
在示例性的应用中,每个任务处理一个模拟骨骼,通过空间树剔除部分三角形碰撞器,即通过剔除一些不可能和模拟骨骼产生碰撞的三角形碰撞器,减少需要进行碰撞检测的三角形碰撞器的数量,从而提高模拟骨骼和三角形碰撞器碰撞处理效率。
在一些实施例中,本申请实施例的碰撞管理器可以用来管理同一个角色下多个组件之间的碰撞,动画图表节点在初始化、每帧模拟、反初始化时都会与配置管理器交互。图31的时序图解释了碰撞管理器与多个动画图表节点之间是如何进行交互的。图中的组件A、组件B、组件C可以看作同一角色下的多个服饰,其中组件A和组件B刚穿上,组件C已经穿了一段时间准备卸下。图30展示了组件A和组件B的初始化和一次模拟时与碰撞管理器的交互,组件C的反初始化时与碰撞管理器的交互。
实施例二
图32示意性示出了根据本申请实施例二的基于Unreal引擎的物理动画生成装置的框图,该基于Unreal引擎的物理动画生成装置可以被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本申请实施例。本申请实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,以下描述将具体介绍本实施例中各程序模块的功能。如图32所示,该基于Unreal引擎的物理动画生成装置可以包括:获取模块3210、解析模块3220、存储模块3230、模拟模块3240,其中:
获取模块3210,用于获取目标对象的物理资产;
解析模块3220,用于对所述物理资产进行解析,以得到物理配置信息;
存储模块3230,用于将所述物理配置信息存储至动画图表节点;
模拟模块3240,用于根据存储有所述物理配置信息的动画图表节点,模拟所述目标对象的物理动画。
所述物理资产通过预设配置工具得到,所述基于Unreal引擎的物理动画生成装置还可以包括配置模块,用于:
创建骨骼、约束;
选择与所述骨骼相关的元素;其中所述元素与所述骨骼相关或为指定类型;
设置所述骨骼的碰撞信息;其中所述碰撞信息包括:选定碰撞目标、与碰撞目标的碰撞关系;
调整所述骨骼的参数以及骨骼上的碰撞器的变换;其中,所述碰撞器的变换包括绕轴旋转、翻转和反向旋转。
所述配置模块,还用于:
以预先创建好的骨骼结构作为参考,根据头发和服饰的特征创建相应的网状或条状约束关系。
所述配置模块,还用于:
按照骨骼之间的约束关系,选择所述骨骼相关联的横向约束或纵向约束的相关骨骼或约束本身。
所述配置模块,还用于:
通过批量修改配置变量,对多组骨骼设置多对多的设置碰撞关系,每组中的骨骼之间不发生碰撞。
所述存储模块3230,还用于:
所述动画图表节点的参数包括以下一组或多组:调试绘制参数、运行时参数、混合参数、跨组件碰撞参数和物理资产解析参数。
所述解析模块3220,还用于:
根据所述物理资产,获取骨骼信息和初始物理配置信息;其中信息骨骼信息包括架构结构和骨骼绑定位置,所述初始物理配置信息包括各骨骼的骨骼参数、碰撞器参数和约束参数;
根据所述骨骼信息和所述初始物理配置信息,获取各个骨骼的骨骼类型、骨骼深度、骨骼链信息、约束信息、碰撞信息、参考挤出方向信息、约束碰撞信息、三角形碰撞器信息、旋转修正信息、弯曲约束信息、补充结构约束;其中:骨骼类型包括模拟骨骼和运动学骨骼,所述骨骼链信息根据各个骨骼的骨骼深度得到。
所述解析模块3220,还用于:
将运动学骨骼的初始深度设为1;
根据所述骨架结构和各骨骼之间的初始约束信息,设置各个模拟骨骼的骨骼深度;
其中,在确定最末端的模拟骨骼的情况下,将运动学骨骼的骨骼深度设置为0,将最末端的模拟骨骼的骨骼深度设置为1,将运动学骨骼和最末端的模拟骨骼之间的中间骨骼的骨骼深度以插值形式设置在[0,1]中,其中,插值根据相应中间骨骼的深度而定。
所述解析模块3220,还用于:
根据各个骨骼的骨骼深度,对各个骨骼进行从小到大排序;
确定第i个骨骼,其中i<总骨骼数,i的初始值为0;
获取与第i个骨骼有约束关系的第j个骨骼,其中,j<与第i个骨骼有约束关系的骨骼总数;
在第i个骨骼的骨骼深度小于第j个骨骼,且第i个骨骼不是第j个骨骼的上级的情况之下,将第j个骨骼设置为父骨骼;
在将第j个骨骼设置为父骨骼的情况下,基于骨架结构得出第j个骨骼和第i个骨骼之间的关系;
在确定第j个骨骼是第i个骨骼的父骨骼的情况下,将第j个骨骼设置为第i个骨骼的父骨骼。
所述解析模块3220,还用于:
将所述物理资产中的骨骼之间的碰撞信息关联到相应的模拟骨骼上;
其中,所述模拟骨骼关联有以下碰撞信息:与自身碰撞的运动学骨骼索引、与三角形碰撞器的碰撞关系、是否开启约束碰撞关系,其中所述约束碰撞关系包括胶囊碰撞器。
所述解析模块3220,还用于:
在第i个骨骼上开启参考挤出方向功能的情况下,收集所述第i个骨骼对应的父骨骼以及与所述第i个骨骼具有约束关系的左、右骨骼的索引;其中i≤总骨骼数;
其中,在所述第i个骨骼的左、右骨骼有一个缺失的情况下,用所述第i个骨骼替代该缺失的骨骼;
在所述第i个骨骼的左、右骨骼均缺失的情况下,关闭所述第i个骨骼对应的参考挤出方向功能。
所述解析模块3220,还用于:
根据各骨骼之间的初始约束信息,获取初始三角形集合;
将不符合预设条件的三角形从所述初始三角形集合中剔除,以获取目标三角形集合;
处理所述目标三角形集合中的三角形的面朝向,以使得:若目标三角形集合中的两个三角形之间存在共边,这两个三角形对应法线的夹角为锐角或直角;
对处理后的目标三角形集合中的三角形关联的待修正骨骼执行以下操作:
获取所述待修正骨骼对应三角面的平均法线;
获取所述待修正骨骼的切线,所述切线为所述待修正骨骼至所述待修正骨骼的父骨骼之间的向量;
根据所述平均法线以及所述切线,构造旋转矩阵;
根据所述旋转矩阵,获取所述待修正骨骼的旋转修正信息。
所述解析模块3220,还用于:
根据约束信息中的横向约束和纵向约束,在横向间隔为1和纵向间隔为1的两个骨骼之间创建线距离约束;其中相邻骨骼间隔为0;
根据约束信息中的横向约束和纵向约束,创建X形约束,X形约束为骨骼结构中斜向的约束。
所述存储模块3230,还用于:
将所述物理配置信息进行序列化操作,以得到序列化物理配置信息;
将所述序列化物理配置信息存储至动画图表节点,以及编译、保存动画图表。
所述模拟模块3240,还用于:
对所述动画图表节点进行初始化操作,以将所述动画图表节点的物体注册到碰撞管理器并更新碰撞信息;
在初始化操作完成的情况下,根据所述动画图表节点中的物理配置信息,进行物理动画模拟;
在所述动画图表节点对应的物体被销毁的情况下,对所述动画图表节点进行反初始化操作。
所述模拟模块3240,还用于:
在所述目标对象的模型骨骼与物理配置信息相匹配的情况下,执行以下操作:
创建空间树,所述空间树用于碰撞检测;
通过碰撞管理器注册所述动画图表节点中的物体;其中,在动画图表节点中的物体第一次加载至关卡的情况下,将该物体注册至碰撞管理器,以通过碰撞管理器确定与新注册的物体存在碰撞关系的其他物体,并对存在碰撞关系的其他物体进行标记。
所述模拟模块3240,还用于:
执行模拟前的准备操作;
计算出所述动画图表节点中的模拟骨骼的速度、位置、碰撞信息和约束信息,其中,所述位置根据计算得到的速度、碰撞信息和约束信息进行计算得到的;
根据所述位置以及物理配置信息,对骨骼进行旋转修正;
根据所述位置以及旋转修正后的骨骼,获取更新后的骨骼变换信息;
输出所述更新后的骨骼变换信息,以控制所述模拟骨骼的动画效果。
所述模拟模块3240,还用于:
获取控制台变量,所述控制台变量用来对物理动画效果进行全局控制,以调整实时效果;
确认传送标志,所述传送标志包括:无操作,重置和传送;
根据所述碰撞管理器中的信息,更新碰撞器;
获取时间步长和模拟子步数;
获取当前帧输入的骨骼变换信息,所述骨骼变换信息为所述运动学骨骼的骨骼变换信息;
根据输入的骨骼变换信息、碰撞器在骨骼空间下的局部变换以及用户配置的缩放参数对相应模拟骨骼上的碰撞器进行缩放,以得到缩放后的碰撞器;
根据所述传送标志,对相应模拟骨骼进行对应操作,所述对应操作包括传送或者重置;
获取相应模拟骨骼的参考挤出方向;所述参考挤出方向为该相应模拟骨骼对应的三角形法线方向;
通过动画图表节点上的接口接收修改命令,以修改的相应模拟骨骼混合参数和混合内容参数。
所述模拟模块3240,还用于:
在所述目标对象的速度大于第一预设阈值且所述传送标志是无操作的情况下,更新所述传送标志,更新后的传送标志为传送,所述传送用于对相应骨骼进行传送操作。
所述动画图表节点的物体为一个服饰;所述模拟模块3240,还用于:
对应地,根据所述碰撞管理器中的信息,更新碰撞器,包括:
在目标对象注册所述动画图表节点的情况下,将其他服饰上对应运动学骨骼上的碰撞器更换到目标服饰上;其中所述其他服饰是会与所述目标服饰产生碰撞的服饰。
所述模拟模块3240,还用于:
创建解算任务对象;其中,以粒子和约束为单位,速度模拟、约束和旋转修正分别对应一个任务对象。
所述模拟模块3240,还用于:
根据平均步长确定当前帧的时间步长,所述平均步长为当前帧的前N帧的平均步长,N为复数;
根据当前帧数以及模拟参数确定模拟子步数;其中所述模拟参数为一秒模拟的总次数;
根据模拟子步数以及当前帧数,以预定时间间隔更新修正系数,所述修正参数用于调整模拟参数。
所述模拟模块3240,还用于:
更新模拟骨骼的速度与位置;
更新运动学骨骼的碰撞器的位置以及旋转;
根据线距离约束,对所述模拟骨骼进行位置更新;
通过拉伸约束操作维持骨骼链的长度,所述骨骼链以运动学骨骼为起点串联多个模拟骨骼;
根据恢复力和原始骨骼链形态,调整骨骼链中骨骼的旋转,以获得目标骨骼链;
获取模拟骨骼的参考挤出方向;
根据所述模拟骨骼的参考挤出方向,对约束碰撞器和运动学骨骼进行碰撞处理;
根据所述模拟骨骼的参考挤出方向,对所述模拟骨骼和运动学骨骼进行碰撞处理;
对三角形碰撞器进行更新操作;
对所述模拟骨骼与更新后的三角形碰撞器进行碰撞处理操作;
对骨骼链中模拟骨骼中的父子骨骼夹角偏差进行约束,以使摇摆范围小于第二预设阈值。
所述模拟模块3240,还用于:
构造模拟骨骼对应的轴对齐包围盒;
通过空间树剔除部分三角形碰撞器,确定目标三角形碰撞器集合;
对模拟骨骼与目标三角形碰撞器集合中的碰撞器进行碰撞检测;
在检测到模拟骨骼与所述三角形碰撞器会产生碰撞的情况下,以穿插深度作为权重,计算模拟骨骼的期望挤出向量,根据所述期望挤出向量进行相交解除。
实施例三
图33示意性示出了根据本申请实施例三的适于实现基于Unreal引擎的物理动画生成方法的计算机设备10000的硬件架构示意图。在一些实施例中,计算机设备10000可以是智能手机、可穿戴设备、平板电脑、个人电脑、车载终端、游戏机、虚拟设备、工作台、数字助理、机顶盒、机器人等终端设备。在另一些实施例中,计算机设备10000可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或多个服务器所组成的服务器集群)等。如图33所示,所述计算机设备10000包括但不限于:可通过系统总线相互通信链接存储器10010、处理器10010、网络接口10030。其中:
存储器10010至少包括一种类型的计算机可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(如,SD或DX存储器)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器10010可以是计算机设备10000的内部存储模块3230,例如该计算机设备10000的硬盘或内存。在另一些实施例中,存储器10010也可以是计算机设备10000的外部存储设备,例如该计算机设备10000上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,存储器10010还可以既包括计算机设备10000的内部存储模块3230也包括其外部存储设备。本实施例中,存储器10010通常用于存储安装于计算机设备10000的操作系统和各类应用软件,例如基于Unreal引擎的物理动画生成方法的程序代码等。此外,存储器10010还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器10010在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他芯片。该处理器10010通常用于控制计算机设备10000的总体操作,例如执行与计算机设备10000进行数据交互或者通信相关的控制和处理等。本实施例中,处理器10010用于运行存储器10010中存储的程序代码或者处理数据。
网络接口10030可包括无线网络接口或有线网络接口,该网络接口10030通常用于在计算机设备10000与其他计算机设备之间建立通信链接。例如,网络接口10030用于通过网络将计算机设备10000与外部终端相连,在计算机设备10000与外部终端之间建立数据传输通道和通信链接等。网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(Global System of Mobile communication,简称为GSM)、宽带码分多址(WidebandCode Divi sion Multiple Access,简称为WCDMA)、4G网络、5G网络、蓝牙(Bluetoo th)、Wi-Fi等无线或有线网络。
需要指出的是,图32仅示出了具有部件10010-10030的计算机设备,但是应该理解的是,并不要求实施所有示出的部件,可以替代地实施更多或者更少的部件。
在本实施例中,存储于存储器10010中的基于Unreal引擎的物理动画生成方法还可以被分割为一个或者多个程序模块,并由一个或多个处理器(如处理器10010)所执行,以完成本申请实施例。
实施例四
本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质其上存储有计算机程序,其中,计算机程序被处理器执行时实现实施例中的基于Unreal引擎的物理动画生成方法的步骤。
本实施例中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEP ROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作系统和各类应用软件,例如实施例中基于Unr eal引擎的物理动画生成方法的程序代码等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。
显然,本领域的技术人员应该明白,上述的本申请实施例的各模块或各步骤可以用通用的计算机设备来实现,它们可以集中在单个的计算机设备上,或者分布在多个计算机设备所组成的网络上,可选地,它们可以用计算机设备可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算机设备来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请实施例不限制于任何特定的硬件和软件结合。
需要说明的是,以上仅为本申请的优选实施例,并非因此限制本申请的专利保护范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (27)
1.一种基于Unreal引擎的物理动画生成方法,其特征在于,所述方法包括:
获取目标对象的物理资产;
对所述物理资产进行解析,以得到物理配置信息;
将所述物理配置信息存储至动画图表节点;
根据存储有所述物理配置信息的动画图表节点,模拟所述目标对象的物理动画。
2.根据权利要求1所述的方法,其特征在于,所述物理资产通过
预设配置工具得到,配置操作包括:
创建骨骼、约束;
选择与所述骨骼相关的元素;其中所述元素与所述骨骼相关或为指定类型;
设置所述骨骼的碰撞信息;其中所述碰撞信息包括:选定碰撞目标、与碰撞目标的碰撞关系;
调整所述骨骼的参数以及骨骼上的碰撞器的变换;其中,所述碰撞器的变换包括绕轴旋转、翻转和反向旋转。
3.根据权利要求2所述的方法,其特征在于,所述配置操作还包括:
以预先创建好的骨骼结构作为参考,根据头发和服饰的特征创建相应的网状或条状约束关系。
4.根据权利要求2所述的方法,其特征在于,所述配置操作还包括:
按照骨骼之间的约束关系,选择所述骨骼相关联的横向约束或纵向约束的相关骨骼或约束本身。
5.根据权利要求2所述的方法,其特征在于,所述配置操作还包括:
通过批量修改配置变量,对多组骨骼设置多对多的设置碰撞关系,每组中的骨骼之间不发生碰撞。
6.根据权利要求1所述的方法,其特征在于,所述动画图表节点的参数包括以下一组或多组:调试绘制参数、运行时参数、混合参数、跨组件碰撞参数和物理资产解析参数。
7.根据权利要求1所述的方法,其特征在于,对所述物理资产进行解析,以得到物理配置信息,包括:
根据所述物理资产,获取骨骼信息和初始物理配置信息;其中信息骨骼信息包括架构结构和骨骼绑定位置,所述初始物理配置信息包括各骨骼的骨骼参数、碰撞器参数和约束参数;
根据所述骨骼信息和所述初始物理配置信息,获取各个骨骼的骨骼类型、骨骼深度、骨骼链信息、约束信息、碰撞信息、参考挤出方向信息、约束碰撞信息、三角形碰撞器信息、旋转修正信息、弯曲约束信息、补充结构约束;其中:骨骼类型包括模拟骨骼和运动学骨骼,所述骨骼链信息根据各个骨骼的骨骼深度得到。
8.根据权利要求7所述的方法,其特征在于,所述骨骼深度通过以下操作得到:
将运动学骨骼的初始深度设为1;
根据所述骨架结构和各骨骼之间的初始约束信息,设置各个模拟骨骼的骨骼深度;
其中,在确定最末端的模拟骨骼的情况下,将运动学骨骼的骨骼深度设置为0,将最末端的模拟骨骼的骨骼深度设置为1,将运动学骨骼和最末端的模拟骨骼之间的中间骨骼的骨骼深度以插值形式设置在[0,1]中,其中,插值根据相应中间骨骼的深度而定。
9.根据权利要求7所述的方法,其特征在于,所述骨骼链信息通过以下操作得到:
根据各个骨骼的骨骼深度,对各个骨骼进行从小到大排序;
确定第i个骨骼,其中i<总骨骼数,i的初始值为0;
获取与第i个骨骼有约束关系的第j个骨骼,其中,j<与第i个骨骼有约束关系的骨骼总数;
在第i个骨骼的骨骼深度小于第j个骨骼,且第i个骨骼不是第j个骨骼的上级的情况之下,将第j个骨骼设置为父骨骼;
在将第j个骨骼设置为父骨骼的情况下,基于骨架结构得出第j个骨骼和第i个骨骼之间的关系;
在确定第j个骨骼是第i个骨骼的父骨骼的情况下,将第j个骨骼设置为第i个骨骼的父骨骼。
10.根据权利要求7所述的方法,其特征在于,所述碰撞信息通过以下操作得到:
将所述物理资产中的骨骼之间的碰撞信息关联到相应的模拟骨骼上;
其中,所述模拟骨骼关联有以下碰撞信息:与自身碰撞的运动学骨骼索引、与三角形碰撞器的碰撞关系、是否开启约束碰撞关系,其中所述约束碰撞关系包括胶囊碰撞器。
11.根据权利要求7所述的方法,其特征在于,所述参考挤出方向信息通过以下操作得到:
在第i个骨骼上开启参考挤出方向功能的情况下,收集所述第i个骨骼对应的父骨骼以及与所述第i个骨骼具有约束关系的左、右骨骼的索引;其中i≤总骨骼数;
其中,在所述第i个骨骼的左、右骨骼有一个缺失的情况下,用所述第i个骨骼替代该缺失的骨骼;
在所述第i个骨骼的左、右骨骼均缺失的情况下,关闭所述第i个骨骼对应的参考挤出方向功能。
12.根据权利要求7所述的方法,其特征在于,所述旋转修正信息通过以下操作得到:
根据各骨骼之间的初始约束信息,获取初始三角形集合;
将不符合预设条件的三角形从所述初始三角形集合中剔除,以获取目标三角形集合;
处理所述目标三角形集合中的三角形的面朝向,以使得:若目标三角形集合中的两个三角形之间存在共边,这两个三角形对应法线的夹角为锐角或直角;
对处理后的目标三角形集合中的三角形关联的待修正骨骼执行以下操作:
获取所述待修正骨骼对应三角面的平均法线;
获取所述待修正骨骼的切线,所述切线为所述待修正骨骼至所述待修正骨骼的父骨骼之间的向量;
根据所述平均法线以及所述切线,构造旋转矩阵;
根据所述旋转矩阵,获取所述待修正骨骼的旋转修正信息。
13.根据权利要求7所述的方法,其特征在于,
所述弯曲约束信息通过以下操作得到:
根据约束信息中的横向约束和纵向约束,在横向间隔为1和纵向间隔为1的两个骨骼之间创建线距离约束;其中相邻骨骼间隔为0;
所述补充结构约束通过以下操作得到:
根据约束信息中的横向约束和纵向约束,创建X形约束,X形约束为骨骼结构中斜向的约束。
14.根据权利要求1所述的方法,其特征在于,将所述物理配置信息存储至动画图表节点,包括:
将所述物理配置信息进行序列化操作,以得到序列化物理配置信息;
将所述序列化物理配置信息存储至动画图表节点,以及编译、保存动画图表。
15.根据权利要求1所述的方法,其特征在于,根据存储有所述物理配置信息的动画图表节点,模拟所述目标对象的物理动画,包括:
对所述动画图表节点进行初始化操作,以将所述动画图表节点的物体注册到碰撞管理器并更新碰撞信息;
在初始化操作完成的情况下,根据所述动画图表节点中的物理配置信息,进行物理动画模拟;
在所述动画图表节点对应的物体被销毁的情况下,对所述动画图表节点进行反初始化操作。
16.根据权利要求15所述的方法,其特征在于,所述对所述动画图表节点进行初始化操作,包括:
在所述目标对象的模型骨骼与物理配置信息相匹配的情况下,执行以下操作:
创建空间树,所述空间树用于碰撞检测;
通过碰撞管理器注册所述动画图表节点中的物体;其中,在动画图表节点中的物体第一次加载至关卡的情况下,将该物体注册至碰撞管理器,以通过碰撞管理器确定与新注册的物体存在碰撞关系的其他物体,并对存在碰撞关系的其他物体进行标记。
17.根据权利要求15所述的方法,其特征在于,根据所述动画图表节点中的物理配置信息,进行物理动画模拟,包括:
执行模拟前的准备操作;
计算出所述动画图表节点中的模拟骨骼的速度、位置、碰撞信息和约束信息,其中,所述位置根据计算得到的速度、碰撞信息和约束信息进行计算得到的;
根据所述位置以及物理配置信息,对骨骼进行旋转修正;
根据所述位置以及旋转修正后的骨骼,获取更新后的骨骼变换信息;
输出所述更新后的骨骼变换信息,以控制所述模拟骨骼的动画效果。
18.根据权利要求17所述的方法,其特征在于,所述执行模拟前的准备操作包括:
获取控制台变量,所述控制台变量用来对物理动画效果进行全局控制,以调整实时效果;
确认传送标志,所述传送标志包括:无操作,重置和传送;
根据所述碰撞管理器中的信息,更新碰撞器;
获取时间步长和模拟子步数;
获取当前帧输入的骨骼变换信息,所述骨骼变换信息为所述运动学骨骼的骨骼变换信息;
根据输入的骨骼变换信息、碰撞器在骨骼空间下的局部变换以及用户配置的缩放参数对相应模拟骨骼上的碰撞器进行缩放,以得到缩放后的碰撞器;
根据所述传送标志,对相应模拟骨骼进行对应操作,所述对应操作包括传送或者重置;
获取相应模拟骨骼的参考挤出方向;所述参考挤出方向为该相应模拟骨骼对应的三角形法线方向;
通过动画图表节点上的接口接收修改命令,以修改的相应模拟骨骼混合参数和混合内容参数。
19.根据权利要求18所述的方法,其特征在于,所述确认传送标志,包括:
在所述目标对象的速度大于第一预设阈值且所述传送标志是无操作的情况下,更新所述传送标志,更新后的传送标志为传送,所述传送用于对相应骨骼进行传送操作。
20.根据权利要求18所述的方法,其特征在于,所述动画图表节点的物体为一个服饰;
对应地,根据所述碰撞管理器中的信息,更新碰撞器,包括:
在目标对象注册所述动画图表节点的情况下,将其他服饰上对应运动学骨骼上的碰撞器更换到目标服饰上;其中所述其他服饰是会与所述目标服饰产生碰撞的服饰。
21.根据权利要求18所述的方法,其特征在于,所述方法还包括:
创建解算任务对象;其中,以粒子和约束为单位,速度模拟、约束和旋转修正分别对应一个任务对象。
22.根据权利要求18所述的方法,其特征在于,所述获取时间步长和模拟子步数,包括:
根据平均步长确定当前帧的时间步长,所述平均步长为当前帧的前N帧的平均步长,N为复数;
根据当前帧数以及模拟参数确定模拟子步数;其中所述模拟参数为一秒模拟的总次数;
根据模拟子步数以及当前帧数,以预定时间间隔更新修正系数,所述修正参数用于调整模拟参数。
23.根据权利要求17所述的方法,其特征在于,所述计算出所述动画图表节点中的模拟骨骼的速度、位置、碰撞信息和约束信息,包括:
更新模拟骨骼的速度与位置;
更新运动学骨骼的碰撞器的位置以及旋转;
根据线距离约束,对所述模拟骨骼进行位置更新;
通过拉伸约束操作维持骨骼链的长度,所述骨骼链以运动学骨骼为起点串联多个模拟骨骼;
根据恢复力和原始骨骼链形态,调整骨骼链中骨骼的旋转,以获得目标骨骼链;
获取模拟骨骼的参考挤出方向;
根据所述模拟骨骼的参考挤出方向,对约束碰撞器和运动学骨骼进行碰撞处理;
根据所述模拟骨骼的参考挤出方向,对所述模拟骨骼和运动学骨骼进行碰撞处理;
对三角形碰撞器进行更新操作;
对所述模拟骨骼与更新后的三角形碰撞器进行碰撞处理操作;
对骨骼链中模拟骨骼中的父子骨骼夹角偏差进行约束,以使摇摆范围小于第二预设阈值。
24.根据权利要求23所述的方法,其特征在于,对所述模拟骨骼与更新后的三角形碰撞器进行碰撞处理操作,包括:
构造模拟骨骼对应的轴对齐包围盒;
通过空间树剔除部分三角形碰撞器,确定目标三角形碰撞器集合;
对模拟骨骼与目标三角形碰撞器集合中的碰撞器进行碰撞检测;
在检测到模拟骨骼与所述三角形碰撞器会产生碰撞的情况下,以穿插深度作为权重,计算模拟骨骼的期望挤出向量,根据所述期望挤出向量进行相交解除。
25.一种基于Unreal引擎的物理动画生成装置,其特征在于,所述装置包括:
获取模块,用于获取目标对象的物理资产;
解析模块,用于对所述物理资产进行解析,以得到物理配置信息;
存储模块,用于将所述物理配置信息存储至动画图表节点;
模拟模块,用于根据存储有所述物理配置信息的动画图表节点,模拟所述目标对象的物理动画。
26.一种计算机设备,其特征在于,包括:
至少一个处理器;及
与所述至少一个处理器通信连接的存储器;其中:
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1至24中任一项所述的方法。
27.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机指令,所述计算机指令被处理器执行时实现如权利要求1至24中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310907651.8A CN116934922A (zh) | 2023-07-21 | 2023-07-21 | 基于Unreal引擎的物理动画生成方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310907651.8A CN116934922A (zh) | 2023-07-21 | 2023-07-21 | 基于Unreal引擎的物理动画生成方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116934922A true CN116934922A (zh) | 2023-10-24 |
Family
ID=88378635
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310907651.8A Pending CN116934922A (zh) | 2023-07-21 | 2023-07-21 | 基于Unreal引擎的物理动画生成方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116934922A (zh) |
-
2023
- 2023-07-21 CN CN202310907651.8A patent/CN116934922A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Igarashi et al. | Clothing manipulation | |
Boulic et al. | The HUMANOID environment for interactive animation of multiple deformable human characters | |
US9449416B2 (en) | Animation processing of linked object parts | |
CN101473351B (zh) | 肌肉与骨骼形状蒙皮 | |
Zeller | Cloth simulation on the gpu | |
CN111773719A (zh) | 虚拟对象的渲染方法和装置、存储介质、电子装置 | |
CN115098100A (zh) | 基于云原生面向工业应用场景的数字孪生体组件驱动方法 | |
Turner | LEMAN: A system for constructing and animating layered elastic characters | |
CN116934922A (zh) | 基于Unreal引擎的物理动画生成方法和装置 | |
Nuić et al. | Algorithms for procedural generation and display of trees | |
Klemmt et al. | Discrete vs. Discretized Growth Discretized Fabrication of Geometries Generated with Cellular Growth Simulations | |
Merrell et al. | Constraint-based model synthesis | |
Xia et al. | Recent advances on virtual human synthesis | |
Thalmann et al. | The Making of the Xian terra-cotta Soldiers | |
Kang et al. | Real-time cloud modelling and rendering approach based on L-system for flight simulation | |
Simnett et al. | An Edge-based Approach to Adaptively Refining a Mesh for Cloth Deformation. | |
CN115457189B (zh) | 一种基于团着色的pbd骨骼驱动软体仿真系统及方法 | |
Liu et al. | Phusis cloth: A physics engine for real-time character cloth animation | |
Pokorný et al. | A Conversion of 3D Graphics from Blender to Unreal Engine | |
McDonnell et al. | Dynamic subdivision-based solid modeling | |
Jung et al. | Mesh deformations in X3D via CUDA with freeform deformation lattices | |
Hampshire | Dynamic animation and re-modelling of l-systems | |
Gästrin | Physically Based Character Simulation–Rag Doll Behaviour in Computer Games | |
Guo et al. | A Procedural Approach for Cloth Simulation | |
Kieran et al. | Cloth simulation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |