CN114882153A - 一种动画生成的方法及装置 - Google Patents
一种动画生成的方法及装置 Download PDFInfo
- Publication number
- CN114882153A CN114882153A CN202210339622.1A CN202210339622A CN114882153A CN 114882153 A CN114882153 A CN 114882153A CN 202210339622 A CN202210339622 A CN 202210339622A CN 114882153 A CN114882153 A CN 114882153A
- Authority
- CN
- China
- Prior art keywords
- node
- elastic
- collision
- nodes
- target object
- 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 65
- 238000004088 simulation Methods 0.000 claims abstract description 44
- 239000013013 elastic material Substances 0.000 claims abstract description 26
- 238000009877 rendering Methods 0.000 claims abstract description 20
- 210000000988 bone and bone Anatomy 0.000 claims description 84
- 239000002775 capsule Substances 0.000 claims description 52
- 230000033001 locomotion Effects 0.000 claims description 27
- 230000005484 gravity Effects 0.000 claims description 5
- 238000012545 processing Methods 0.000 claims description 5
- 230000002194 synthesizing effect Effects 0.000 claims description 5
- 230000004044 response Effects 0.000 claims description 3
- 239000000126 substance Substances 0.000 claims description 2
- 239000004744 fabric Substances 0.000 abstract description 31
- 239000000306 component Substances 0.000 description 20
- 230000008569 process Effects 0.000 description 13
- 230000000694 effects Effects 0.000 description 12
- 238000001514 detection method Methods 0.000 description 9
- 238000011161 development Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 230000010354 integration Effects 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 238000006073 displacement reaction Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 210000003414 extremity Anatomy 0.000 description 3
- 210000000689 upper leg Anatomy 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 210000000245 forearm Anatomy 0.000 description 2
- 210000002414 leg Anatomy 0.000 description 2
- 238000000329 molecular dynamics simulation Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 241001465754 Metazoa Species 0.000 description 1
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000003542 behavioural effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000007664 blowing Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000004069 differentiation Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- APTZNLHMIGJTEW-UHFFFAOYSA-N pyraflufen-ethyl Chemical compound C1=C(Cl)C(OCC(=O)OCC)=CC(C=2C(=C(OC(F)F)N(C)N=2)Cl)=C1F APTZNLHMIGJTEW-UHFFFAOYSA-N 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
- 210000001364 upper extremity Anatomy 0.000 description 1
Images
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/20—Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Architecture (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Processing Or Creating Images (AREA)
Abstract
本申请公开了一种动画生成的方法,包括:获取弹性材质模拟组件,所述弹性材质模拟组件包含弹性节点列表和碰撞节点列表;其中,所述弹性节点列表中包含多个弹性节点,每个所述弹性节点包含第一节点信息,所述弹性节点为根据第一目标物体所绑定骨骼的骨骼节点生成的节点,所述第一目标物体为弹性物体;针对所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置;根据所述弹性节点的所述待显示位置,渲染所述当前动画帧。本申请提供的方案可以作为通用插件,配合加载布料配置表,在不同游戏引擎中实现布料模拟。
Description
技术领域
本申请涉及计算机技术领域,具体涉及一种动画生成的方法以及装置,本申请进一步提供相关的非易失性可读存储介质及电子设备。
背景技术
随着计算机的发展,布料动画模拟技术被广泛应用于游戏领域中。在虚拟人进行奔跑、跳跃等动作时,通过布料动画模拟技术获取虚拟人物角色身上的衣物的形变和飘动等效果,以表现丰富的运动细节,增加动画的真实感。
在现有技术中,不同的游戏引擎都有各自的弹性布料模拟方案,以实现弹性布料物体的运动模拟。由于每个引擎的机制不同,在导入虚拟人资产时,需要针对每个引擎进行重复配置,并且配置参数时需要重新调参,造成不同的引擎布料动画模拟效果差距较大,并且开发人员重复配置等低效工作量较多。
发明内容
有鉴于此,本申请提供了一种动画生成的方法及装置、非易失性可读存储介质及电子设备,以解决现有技术中存在的虚拟人布料动画模拟在不同的游戏引擎中布料动画模拟差距大,并且需要重复配置、影响开发人员工作效率的问题。
本申请实施例提供了一种动画生成的方法,包括:
获取弹性材质模拟组件,所述弹性材质模拟组件包含弹性节点列表和碰撞节点列表;
其中,所述弹性节点列表中包含多个弹性节点,每个所述弹性节点包含第一节点信息,所述弹性节点为根据第一目标物体所绑定骨骼的骨骼节点生成的节点,所述第一目标物体为弹性物体;
所述碰撞点列表包含多个碰撞节点,每个所述碰撞节点包含第二节点信息,所述碰撞节点为根据第二目标物体所绑定骨骼的骨骼节点生成的节点,所述第二目标物体为刚性物体;
针对所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置;
根据所述弹性节点的所述待显示位置,渲染所述当前动画帧。
可选的,所述获取所述弹性材质模拟组件后,所述方法还包括:
分别建立所述多个弹性节点与第一目标物体的各个网格之间的关联关系,以及所述多个碰撞节点与第二目标物体的各个网格之间的关联关系;
其中,所述第一目标物体和所述第二目标物体为待显示动画中包含的虚拟对象。
可选的,所述针对所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置,包括:
响应所述第一目标物体的移动,调整所述第一目标物体的各个网格分别对应的弹性节点的位置,得到更新后的弹性节点列表;
响应所述第二目标物体的移动,调整所述第二目标物体的各个网格分别对应的碰撞节点的位置,得到更新后的碰撞节点列表;
针对更新后的所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与更新后的所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置。
可选的,所述根据所述弹性节点的所述待显示位置,渲染所述当前动画帧,包括:
根据所述弹性节点的所述待显示位置,确定所述弹性节点对应的第一目标物体的目标网格的目标位置;
根据所述第一目标物体的目标网格的目标位置,渲染所述当前动画帧。
可选的,所述方法还包括:
针对所述第一目标物体所绑定骨骼的第一目标骨骼节点,生成所述第一目标骨骼节点的第一包围体,将所述第一包围体作为所述弹性节点;
针对所述第二目标物体所绑定骨骼的第二目标骨骼节点,生成所述第二目标骨骼节点的第二包围体,将所述第二包围体作为所述碰撞节点。
可选的,所述第一包围体为球体,所述第二包围体为胶囊体。
可选的,所述第一节点信息包括:所述弹性节点对应的骨骼节点的名称、所述弹性节点对应的第一包围体的半径、所述第一包围体相对于对应的骨骼节点的偏移坐标值。
可选的,所述第二节点信息包括:所述碰撞节点对应的骨骼节点的名称、所述碰撞节点对应的胶囊体头部的半径、所述胶囊体中的圆柱体高度、所述胶囊体的中心相对于对应的骨骼节点的偏移坐标值、所述胶囊体中的圆柱体延伸方向的参考轴。
可选的,所述根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置,包括:
若所述碰撞结果为发生碰撞,则确定对所述弹性节点的位置进行调整,并计算所述当前动画帧中所述弹性节点的待显示位置;
若所述碰撞结果为未发生碰撞,则确定不对所述弹性节点的位置进行调整。
可选的,所述响应所述第一目标物体的移动,调整所述第一目标物体的各个网格分别对应的弹性节点的位置:
响应所述第一目标物体的移动,控制所述弹性节点复位至初始化旋转角度,获得所述弹性节点的世界坐标与世界旋转角度;
通过所述弹性节点在所述当前动画帧的前两个动画帧中的坐标和所述世界坐标,分别计算所述弹性节点受到的刚性力和空气阻力;
根据所述弹性节点受到的所述刚性力、所述空气阻力与受到的重力进行合成,得到所述弹性节点受到的合力;
通过所述弹性节点受到的合力、所述弹性节点在所述当前动画帧的前两个动画帧中的坐标与动画帧之间时间增量,得到所述弹性节点在所述当前动画帧中的调整坐标;
根据所述调整坐标调整所述弹性节点的位置。
本申请还提供一种动画生成的装置,包括:
获取单元,用于获取弹性材质模拟组件,所述弹性材质模拟组件包含弹性节点列表和碰撞节点列表;其中,所述弹性节点列表中包含多个弹性节点,每个所述弹性节点包含第一节点信息,所述弹性节点为根据第一目标物体所绑定骨骼的骨骼节点生成的节点,所述第一目标物体为弹性物体;所述碰撞节点列表包含多个碰撞节点,每个所述碰撞节点包含第二节点信息,所述碰撞节点为根据第二目标物体所绑定骨骼的骨骼节点生成的节点,所述第二目标物体为刚性物体;
确定单元,用于针对所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置;
渲染单元,用于根据所述弹性节点的所述待显示位置,渲染所述当前动画帧。
本申请还提供一种终端设备,包括处理器和存储器;其中,
所述存储器用于存储一条或多条计算机指令;所述处理器用于执行所述所述计算机可执行指令:
获取弹性材质模拟组件,所述弹性材质模拟组件包含弹性节点列表和碰撞节点列表;
其中,所述弹性节点列表中包含多个弹性节点,每个所述弹性节点包含第一节点信息,所述弹性节点为根据第一目标物体所绑定骨骼的骨骼节点生成的节点,所述第一目标物体为弹性物体;
所述碰撞节点列表包含多个碰撞节点,每个所述碰撞节点包含第二节点信息,所述碰撞节点为根据第二目标物体所绑定骨骼的骨骼节点生成的节点,所述第二目标物体为刚性物体;
针对所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置;
根据所述弹性节点的所述待显示位置,渲染所述当前动画帧。
本申请还提供一种非易失性存储介质,其上存储有一条或多条计算机指令,该指令能够被处理器读取并执行:
获取弹性材质模拟组件,所述弹性材质模拟组件包含弹性节点列表和碰撞节点列表;
其中,所述弹性节点列表中包含多个弹性节点,每个所述弹性节点包含第一节点信息,所述弹性节点为根据第一目标物体所绑定骨骼的骨骼节点生成的节点,所述第一目标物体为弹性物体;
所述碰撞节点列表包含多个碰撞节点,每个所述碰撞节点包含第二节点信息,所述碰撞节点为根据第二目标物体所绑定骨骼的骨骼节点生成的节点,所述第二目标物体为刚性物体;
针对所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置;
根据所述弹性节点的所述待显示位置,渲染所述当前动画帧。
与现有技术相比,本申请实施例具有以下优点:
本申请实施例提供的一种针对动画生成的方法,包括获取弹性材质模拟组件,所述弹性材质模拟组件包含弹性节点列表和碰撞节点列表;其中,所述弹性节点列表中包含多个弹性节点,每个所述弹性节点包含第一节点信息,所述弹性节点为根据第一目标物体所绑定骨骼的骨骼节点生成的节点,所述第一目标物体为弹性物体;所述碰撞点列表包含多个碰撞节点,每个所述碰撞节点包含第二节点信息,所述碰撞节点为根据第二目标物体所绑定骨骼的骨骼节点生成的节点,所述第二目标物体为刚性物体;针对所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置;根据所述弹性节点的所述待显示位置,渲染所述当前动画帧。本申请提供的方法,通过虚拟人资产本身的骨骼节点作为动画模拟的基础,从而能够使弹性布料类物体的动画模拟效果能够依附于虚拟人资产本身实现,这样,在进行虚拟人资产的跨平台转移的过程中,只要通过同时将弹性布料类物体的相关数据作为插件附随虚拟人资产转移,例如通过配置表方式转移,就可以方便的实现弹性布料的动画生成;因此,本申请提供的方案能够通过加载该插件和配置表实现布料动画在不同游戏引擎上的加载,能够减少开发人员在不同平台的重复配置工作,以及保证不同游戏引擎的布料动画模拟效果基本一致。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是游戏中的虚拟人物形象示意图;
图2是本申请一实施例提供的一种动画生成方法的流程图;
图3是本申请一实施例提供的弹性节点生成的流程图;
图4是本申请一实施例提供的一个弹性节点的属性记录示意图;
图5是本申请一实施例提供的碰撞节点生成的流程图;
图6是本申请一实施例提供的一个碰撞节点的属性记录示意图;
图7是本申请一实施例提供的虚拟人包围体示意图;
图8是本申请一实施例提供的调整弹性节点位置的流程图;
图9是是本申请一实施例提供的刚性力的示意图;
图10是本申请一实施例提供的弹性布料节点与碰撞节点发生碰撞冲突时的示意图;
图11是本申请一实施例提供的一种动画生成装置的框图;
图12是本申请一实施例提供的游戏终端的逻辑结构示意图。
具体实施方式
为了使本领域的技术人员能够更好的理解本申请的技术方案,下面结合本申请实施例中的附图,对本申请进行清楚、完整地描述。但本申请能够以很多不同于上述描述的其他方式进行实施,因此,基于本申请提供的实施例,本领域普通技术人员在不经过创造性劳动的情况下,所获得的所有其他实施例,都应属于本申请保护的范围。
需要说明的是,本申请实施例各部分及附图中的术语“第一”、“第二”及“第三”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。该类数据在适当情况下可以互换,以便本文所描述的本申请实施例能够以除了在本文图示或描述的内容之外的顺序实施。术语“包括”和“具有”以及他们的任何变形,旨在覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请提供了一种动画生成的方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在介绍本申请提供的动画生成的方法之前,先介绍该方案的相关背景。游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。引擎相当于游戏的框架,如今的游戏引擎已经发展为一套由多个子系统共同构成的复杂系统,从建模、动画到光影、粒子特效,从物理系统、碰撞检测到文件管理、网络特性,还有专业的编辑工具和插件,几乎涵盖了开发过程中的所有重要环节。游戏引擎是一个为运行某一类游戏的机器设计的能够被机器识别的代码(指令)集合。它像一个发动机,控制着游戏的运行。一个游戏作品可以分为游戏引擎和游戏资源两大部分。游戏资源包括图像、声音、动画等部分,即就是游戏=引擎(程序代码)+资源(图像、声音、动画等)。游戏引擎是按照游戏设计的要求顺序地调用这些资源。游戏引擎经过时代的变迁,现在游戏界有几大知名的引擎公司,例如虚幻引擎(Unreal Engine)、寒霜引擎(Frostbite Engine)、Unity 3D、雷霆引擎(RageEngine)、起源引擎(Source Engine)等。
虚拟人是人在计算机生成空间(虚拟环境)中的几何特性与行为特性的表现,涉及计算机图形学。要实现人在三维虚拟空间的准确再现,不仅要模拟人体外观,而且要有逼真的运动模拟,这样,才能给人以真实感、亲切感。而在现在的游戏虚拟人中对逼真的头发动画、肌肤处理、衣物飘动、动作等的动画处理的要求越来越高,这些部分需要根据其特点,进行专门设计的特殊动画处理,以便达到逼真的动画效果,并且能够有效减少计算量。
因此,在游戏中进行弹性布料动画是一个重要且关键的任务。在本申请中,所述弹性物体,主要是指在动画中能够随着虚拟人物运动或者风的吹动而产生舞动的细长类柔软物体,例如,衣服的飘带,人物的发辫等。
参照图1,示出了一个游戏中的虚拟人形象,如图示1-1,该虚拟人的发辫是本申请中所说的弹性物体的典型。
本申请第一实施例提供一种动画生成的方法,该方法的应用主体可以为可供游戏设计主体(游戏设计者)实现游戏引擎配置时的底层计算应用,该底层计算应用可被游戏引擎调用,以实现弹性物体的动画效果。
图2为本申请第一实施例提供的一种动画生成方法的流程图,以下结合图2对本实施例提供的一种动画生成方法进行详细描述。以下描述所涉及的实施例是用来解释说明方法原理,不是实际使用的限定。
如图2所示,本实施例提供的一种动画生成方法包括:
步骤S202,获取弹性材质模拟组件,所述弹性材质模拟组件包含弹性节点列表和碰撞节点列表。
S202-1,所述弹性节点列表中包含多个弹性节点,每个所述弹性节点包含第一节点信息,所述弹性节点为根据第一目标物体所绑定骨骼的骨骼节点生成的节点,所述第一目标物体为弹性物体。
第一目标物体为弹性物体,包括但不限于人物角色类的虚拟对象的服饰衣物、头发、飘带或者动物角色类的虚拟对象的长条的毛发等。典型的,在游戏的虚拟人物中,虚拟人常常会有飘逸的长发,复杂且灵动的头饰,仙风道骨的长衣服。当其在游戏中运动时,例如走路、跑步、跳跃等运动,虚拟对象的运动会给服饰的布料模型传递一定的运动量,服饰布料例如披风、衣服下摆、头发上的飘带应有飘动等动态效果。为了增加服饰对应的布料动画的真实性,布料模型的物理网格上不仅仅由骨骼驱动模拟,还需要增加对布料的驱动模拟,实现布料模拟的物理模拟计算,使得服饰布料在动画中具有真实可信的动态运动效果,而不会以刚性的方式跟随虚拟对象移动,也不会运动幅度过大而造成服饰穿透虚拟对象。
所述骨骼节点,是指在进行动画模型制作时在虚拟人上设置的具有层次关系并以树形结构安置的点,通过这些点形成人物骨架的描述。此处所谓骨架,应该广义上理解,例如,图1中虚拟人的辫子作为弹性布料类的第一目标物体,其延伸走向的描述也是通过一系列的骨骼节点实现的。
所述弹性节点,是根据第一目标物体所绑定骨骼的骨骼节点生成的节点。针对所述第一目标物体所绑定骨骼的第一目标骨骼节点,生成所述第一目标骨骼节点的第一包围体,将所述第一包围体作为所述弹性节点。在实际动画生成中,设置的弹性节点为多个,多个弹性节点中包含的多个第一节点信息组成弹性节点列表。图3示出了一个弹性节点的生成过程。
S202-1a,在第一目标物体上选择目标骨骼节点作为所述选定的第一目标骨骼节点。
在动画模型制作时的骨骼节点中选择预定数量的骨骼节点,选定的第一目标骨骼节点个数需要依据游戏设计者对精度的要求和对计算复杂程度的平衡来进行的,一般情况下设置的绑定骨骼的骨骼节点数为多个,第一目标骨骼节点数也为多个。
S202-1b,以所述第一目标骨骼节点为基础,生成第一目标骨骼节点的第一包围体,将所述第一包围体作为所述弹性节点,每个弹性节点包含第一节点信息。
所述包围体,是指将骨骼节点包围起来的一个封闭空间;该方案通过将复杂物体封装在简单的包围体中,由于简单的物体比较容易检查相互之间的重叠情况,因此,通过采用该包围体可以比较容易检查弹性布料与其他物体的重叠的情况。一组物体的包围体也是包含一个物体及其周围相关环境的封闭空间,可以用它来表示一个非空、有限的单一物体。包围体的几何形状较为简单,而物体通常是多边形或者简化为多边形近似的数据结构所组成,所以对于包围体的检验通常要比物体本身的检验速度更快。例如,在碰撞检测中,如果两个包围体没有相交,那么所包含的物体就不会碰撞。在实际的游戏动画中,包围体是不存在的,只是作为在游戏设计中的辅助存在。
在本实施例中,所述第一包围体,通常采用球体;当然,不排除采用其他可能的形式,例如,沿弹性布料延伸方向的桶形。球体包围体是包容物体的球面,如果是在二维图形中,就是一个圆。对于球体包围体,可以用圆心及半径表示。采用球体包围体,可以方便的进行碰撞检测,具体而言,对于两个在运动相互接近的包围体,如果球心距离小于等于两者的半径之和,则说明两者碰撞到一起,避免在动画效果上出现两个物体出现不正常的相互交叉,展示出非真实的碰撞的效果。参照图1中的1-1,虚拟人物形象中发辫上的球体包围体就是所述弹性节点。上述描述仅仅是原理性的,在实际程序中,所述弹性节点是通过第一节点信息进行具体的描述,从而在计算机程序中获得实现。
每个弹性节点中包含的第一节点信息包括:所述弹性节点对应的骨骼节点的名称、所述弹性节点对应的第一包围体的半径、所述第一包围体相对于对应的骨骼节点的偏移坐标值。
在S202-1中设定弹性节点的个数为多个,为了加以区分,为每一个弹性节点设置名称,即所述弹性节点对应的骨骼节点的名称(name),所设置的名称可规范统一化,且名称可包含有对应的骨骼节点的相对位置及顺序标号。
对于骨骼节点,例如,需要对图1中虚拟人的两股头发进行节点的名称设置,确定好节点个数为6,且两股头发分为一左一右,在设置名称时可在名称中加入头发是左边还是右边,并按照从上到下对6个节点编号为1-6。那么设置的骨骼节点名称可遵循头发-左/右-编号来进行命名。如某一头发节名称为hair_L_03,那么可以很快推算出这是左边那一股头发的第三个节点。而对于游戏开发小组成员来说,达成统一的命名共识,有助于提高游戏开发效率。在游戏开发中,虚拟人的骨骼节点本身就是存在的,其命名一般也有统一标准,对于本实施例而言,直接使用弹性节点对应的骨骼节点的名称即可,无需另外命名。
获得弹性节点对应的骨骼节点命名后,弹性节点的第一节点信息还有所述弹性节点对应的第一包围体的半径、所述第一包围体相对于对应的骨骼节点偏移坐标值。
所述第一包围体半径,是指球体包围体的球体半径。游戏开发者可根据自身需要设置该球体半径的大小。球体半径设置的大小与后续碰撞检测相关。
所述第一包围体相对于对应的骨骼节点偏移坐标值,是指指定区域中心与对应的骨骼节点坐标位置的偏移量,用偏移坐标来表示。
在游戏设计时,游戏开发者需要设置每个弹性节点包含的第一节点信息,即对每一个弹性节点对应的目标骨骼节点设置名称、第一包围体的半径、第一包围体相对于对应的骨骼节点的偏移坐标值。
以上命名过程,具体而言,可以参见图4,图4示出一个弹性节点的第一节点信息的示例。可以看出,图4的左侧图形部分示出了发辫丝带上的一个球体包围体,右侧参数部分示出了该弹性节点的第一节点信息,具体地,该弹性节点的名称(name)为hair_L_05,这个名称是弹性节点对应的骨骼节点的名称,是在进行动画模型制作时已经命名好了的,在设置弹性节点的名称时直接使用。该弹性节点的包围体半径(Radius)为0.08,是指该弹性节点的整个球体包围体是以半径为0.08存在的。当然,在设置弹性节点的第一节点信息的过程中,可以对第一包围体的半径进行设置。该弹性节点的所述包围体相对于对应的骨骼节点的偏移坐标值(Center)为(0.01,0,0),包围体中心有确定的坐标值,第一目标骨骼节点也有确定的坐标值,偏移坐标值即就是所述包围体中心的坐标值偏移第一目标骨骼节点坐标的坐标值。因为第一目标骨骼节点不一定是包围体的中心,即球体包围体的球心坐标,所以二者之间会存在一个偏移量。
当设置好该弹性节点的第一节点信息后,进一步的,可以在代码程序中存储该弹性布料节点的第一节点信息,如下所述,示例性的示出了一个弹性节点的第一包围体第一节点信息的代码程序。通过代码程序可以快速知晓该弹性节点的第一节点信息。
{
“name”:“hair_L_05”,
“radius”:0.08,
“center”:{
“x”:0.01,
“y”:0,
“z”:0
}
}
通过上述代码程序可以得出该弹性节点对应的的骨骼节点的名称为hair_L_05,所述弹性节点的第一包围体的半径为0.08,第一包围体相对于对应的骨骼节点的偏移坐标值为(0.01,0,0)。
上述步骤示出了本实施例中一个弹性节点的生成过程,并附该弹性节点的第一节点信息,该第一节点信息可以在配置表中设置,在配置表中设置好之后也可以存储在代码程序中。而多个弹性节点的第一节点信息形成弹性节点列表,也可以将多个第一节点信息一同存储在代码程序中。
S202-2,所述碰撞节点列表包含多个碰撞节点,每个所述碰撞节点包含第二节点信息,所述碰撞节点为根据第二目标物体所绑定骨骼的骨骼节点生成的节点,所述第二目标物体为刚性物体。
第二目标物体为刚性物体,可以为身体肢体之类的虚拟人组成部分,例如虚拟人的躯干部位,可以是手、小臂、腿等。
所述碰撞节点,是根据第二目标物体所绑定骨骼的骨骼节点生成的节点。针对所述第二目标物体所绑定骨骼的第二目标骨骼节点,生成所述第二目标骨骼节点的第二包围体,将所述第二包围体作为所述碰撞节点。在实际动画生成中,设置的碰撞节点为多个,多个碰撞节点中包含的多个第二节点信息。图5示出了一个碰撞节点的生成过程。
S202-2a,在第二目标物体上选择目标骨骼节点作为所述选定的第二目标骨骼节点。
所述第二目标物体,在本实施例中,以所述虚拟人的躯干部位作为例子说明。即选择虚拟人躯干位置的骨骼节点作为第二目标骨骼节点。选择的方式,可以根据碰撞节点的特点,选择位于躯干上合适位置的一个或者多个骨骼节点,一般不会将所有骨骼节点碰撞节点的目标骨骼节点,仅仅选择部分有代表性的骨骼节点即可。
在游戏开发中,骨骼节点在进行动画模型制作时一般是已经设置好了的,一般与人体的关节匹配设置。即,如果将图1的虚拟人作为一种虚拟人资产,则其骨骼节点作为虚拟人的配置的一部分,已经确定。对于上半身肢体来讲,一般会设置肩到轴肩的上臂、前臂、手;对于下半身肢体来讲,一般会设置大腿、小腿、脚;对于身体躯干会设置上半身、下半身。如果对于某一部位的精度要求更高的话,可以再进行更加仔细详细的设置;如果对哪一部位的精度要求更低的话,可以将上述分解的某几个连着的部位合在一起。因此,对于不同的精度要求,游戏开发者可根据需要自行设置。一般情况下,选择的骨骼节点个数为多个。
在上述虚拟人中,可以选择位于躯干中部的某个骨骼节点作为目标骨骼节点,如图1-2所示。
S202-2b,以所述第二目标骨骼节点为基础,生成第二目标骨骼节点的第二包围体,将所述第二包围体作为所述碰撞节点,每个碰撞节点包含第二节点信息。
所述碰撞节点用于表征可能与所述弹性节点发生碰撞的形状和位置。类似于步骤S202-1,同样采用第二目标骨骼节点的包围体来表示碰撞节点。
在本实施例中,所述碰撞节点采用的第二目标骨骼节点的包围体,具体为胶囊体。胶囊体包围体是将球体包围体与圆柱体包围体进行组合改进之后得来的形状类似胶囊的包围体。胶囊体包围体由两个半径相同的半球包围体与和半球直径相同的圆柱体包围体组合而成。对于本实施例而言,由于碰撞节点表征的是虚拟人的躯干部位,采用胶囊体可以表达虚拟人躯干的延伸方向,这样,可以采用较少的碰撞节点就可以获得柔性布料类物体对虚拟人可能发生碰撞的部位的较好的表达,以便后续进行碰撞计算。
圆柱体包围体是包容物体的圆柱,在多数应用场合中圆柱的轴与场景竖直方向相同。圆柱是只能绕着纵向轴旋转的三维物体。两个轴线为竖直方向的圆柱,只有当它们在竖直轴上的投影(即两条线段)以及在水平方向的投影(即两个圆)同时相交的时候,它们才相交。圆柱体包围体通常作为直立人物的包围体使用。
在二维图形中胶囊体包围体的两端是两个半径相同的半圆,中间部分是一边和半球直径相同的矩形,所以胶囊体物体的表示由两个圆心+半径表示。与圆柱体包围体类似,胶囊体包围体也通常用于直立人物的包围体使用;而相对于圆柱体包围体,胶囊体包围体更加符合人体躯干肢体的形状,在碰撞检测中有更高的检测精度,模拟的虚拟人物更加真实。
上述描述仅仅是原理性的,在实际程序中,所述碰撞节点是通过其第二节点信息进行具体的描述,从而在计算机程序中获得实现。
同样地,在S202-2中设定碰撞节点,即根据第二目标物体所绑定骨骼的骨骼节点生成的节点的个数为多个,为了加以区分,为每一个第二目标骨骼节点设置名称,所设置的名称可规范统一化,且名称可包含有第二目标骨骼节点的相对位置及部位。
对于第二目标骨骼节点,例如,需要对虚拟人的上肢进行节点的名称设置,确定好需要设置的节点依次为肩至轴肩的上臂、前臂和手,那么设置的碰撞节点名称可遵循肢体-左/右-部位来进行命名。如某一碰撞节点的名称为body_L_Hand,那么可以很快推出该碰撞节点所绑定骨骼的第二目标骨骼节点是左手。而对于游戏开发小组成员来说,达成统一的命名共识,有助于提高游戏开发效率。在游戏开发中,虚拟人的骨骼节点本身就是存在的,其命名一般也有统一标准,对于本实施例而言,直接使用对应的第二目标骨骼节点的名称即可,无需另外命名。
获得所述碰撞节点对应的目标骨骼节点名称后,碰撞节点的第二节点信息还有所述碰撞节点对应的胶囊体头部的半径、胶囊体中的圆柱体高度、胶囊体体中心相对于对应的骨骼节点的偏移坐标值、胶囊体中的圆柱体延伸方向的参考轴。
所述碰撞节点对应的胶囊体头部半径,是指胶囊体包围体中的两个半球的球体半径。游戏开发者可根据自身需要设置该球体半径的大小。球体半径设置的大小与胶囊体的圆柱体部分的底面半径有关,在设置时节点半径时需要同时考虑这两个因素。球体半径设置的大小与后续碰撞检测相关。
所述胶囊体中的圆柱体高度,是指区域高度。这个值在小于2倍节点半径时是无效的,因为这样会使得该区域变为球型;高于2倍节点半径时生效,该区域会变成胶囊体。
所述胶囊体体中心相对于对应的第二目标骨骼节点的坐标偏移值,是指指定区域中心与对应的第二目标骨骼节点坐标位置的偏移量,用坐标来表示。
所述胶囊体中的圆柱体延伸方向的参考轴,是指胶囊体在当前游戏对象局部坐标的方向,当胶囊体不成立,即圆柱体的高度小于2倍节点半径时该区域是球型,此时圆柱延伸方向的参考轴无效。
在游戏设计时,游戏开发者需要对每一个碰撞节点设置好第二节点信息记录,即所述碰撞节点对应的第二目标骨骼节点的名称、与所述碰撞节点对应的胶囊体头部的半径、胶囊体中的圆柱体高度、胶囊体中心相对于对应的骨骼节点的偏移坐标值、胶囊体中的圆柱体延伸方向的参考轴。
以上命名过程,具体而言,可以参见图6,图6示出了一个碰撞节点的第二节点信息。可以看出,图6的左侧图形部分示出了一个碰撞节点的胶囊体包围体,右侧参数部分示出了该碰撞节点的第二节点参数信息,具体地,该碰撞节点的名称(name)为Bip001_L_Thigh,这个名称是所绑定的骨骼节点的名称,是在进行动画模型制作时已经命名好了的,在设置碰撞节点的名称时直接使用。通过该碰撞节点的名称可以看出该骨骼节点是左大腿。碰撞节点对应的胶囊体头部半径(Radius)为0.2,是指该碰撞节点的两侧半球体是以半径为0.2存在的,并且胶囊体中的圆柱体部分的圆柱半径也是0.2。碰撞节点的胶囊体中的圆柱高度(CylinderHeight)为0.6。胶囊体中心相对于对应的骨骼节点的坐标偏移值(center)为(0,0,0),即该胶囊体的体中心的坐标值与第二目标骨骼节点的坐标值重合,没有偏移量。胶囊体中的圆柱体延伸方向上的参考轴(Direction)为X轴,即圆柱体高度的方向为沿X轴方向。
当设置好该碰撞节点的第二节点信息后,我们可以在代码程序中存储该碰撞节点的第二节点信息,如下所述,示例性的示出了一个碰撞节点的包围体第二节点信息的代码程序。
{
“name”:“Bip001_L_Thigh”,
“radius”:0.2,
“center”:{
“x”:0,
“y”:0,
“z”:0
},
“cylinderHeight”:0.6,
“direction”:“X”,
“part”:LEG
}
上述步骤示出了本实施例中一个碰撞节点的生成过程,并附该碰撞节点的第二节点信息,该第二节点信息可以在配置表中设置,在配置表中设置好之后可以存储在代码程序中。而多个碰撞节点的第二节点信息形成碰撞节点列表,也可以将多个第二节点信息一同存储在代码程序中。
步骤202用来获得弹性材质的两种模拟组件,分别是弹性节点列表和碰撞节点列表。通过上述步骤获得多个弹性节点列表和多个碰撞节点列表,弹性节点列表的数量与碰撞节点列表的数量没有必然联系,不一定要相等。图7示出了虚拟人包围体的示意图。其中,发辫上的数个球体包围体是第一包围体,躯干、手臂和手上的胶囊体包围体是第二包围体,加载弹性节点列表和碰撞节点列表之后,运行时在虚拟人上会增加多个第一包围体和多个第二包围体。第一包围体的数目和第二包围体的数目可以根据实际需要进行设置,第二包围体的数目和第二包围体的数目无必然联系,相应地,弹性节点的数目与碰撞节点的数目也无必然联系。
获得弹性材质模拟组件之后,分别建立所述多个弹性节点与第一目标物体的各个网格之间的关联关系,以及所述多个碰撞节点与第二目标物体的各个网格之间的关联关系;
其中,所述第一目标物体和所述第二目标物体为待显示动画中包含的虚拟对象。
步骤S204,针对所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置。
S204-1,响应所述第一目标物体的移动,调整所述第一目标物体的各个网格分别对应的弹性节点的位置,得到更新后的弹性节点列表。
在本实施例中,调整弹性节点的位置具体采用的是Verlet积分法。Verlet积分算法是经典力学中的一种最为普遍的积分方法,被广泛运用在分子运动模拟(MolecularDynamics Simulation),行星运动以及织物变形模拟等领域。Verlet算法本质上是对牛顿第二定律的泰勒展开,精度为O(4),比欧拉方法精度更高,稳定度更好,且计算复杂度不比显式欧拉方法高多少。Verlet积分算法的优势在于不必计算与保留速度信息,可以很方便的加入各种约束。
下面具体说明调整弹性节点位置的方法。针对某一弹性节点而言,节点受到的力为f(t),质量已知,可以根据牛顿第二定律得到该节点的加速度,即 已知泰勒公式为节点的位移关于时间增量的泰勒展开公式为由位移、速度、加速度间的导数关系可知,节点的位移关于时间增量的泰勒展开公式中有,将 导入到节点的位移关于时间增量的泰勒展开公式中,得到 将Δt换为-Δt同理可得 其中,r(t+Δt)式和r(t-Δt)相加有可抵消的部分,将其相加,得到
在该表达式中,将上上一帧的坐标r(t-Δt)、上一帧的坐标r(t)与当前帧的坐标r(t+Δt)联系起来,能够通过上两帧的位置坐标推断出当前的位置坐标。也就是说,利用Verlet积分算法,在已知某弹性节点相邻两帧的位置坐标时,可以利用递归计算近似得出该弹性节点的初步动画模拟效果。也就是说,可以通过第一目标物体的移动,调整弹性节点的位置。
根据上述分析,可以采用Verlet积分法计算所述第一目标物体在动画模拟过程中各个弹性节点在当前视频帧的位置。下面具体说明调整弹性节点位置的步骤。图8示出了调整弹性节点位置的流程图。
S204-1a,响应所述第一目标物体的移动,控制所述弹性节点复位至初始化旋转角度,获得所述弹性节点的世界坐标与世界旋转角度。
动画在播放时,每一帧弹性节点的旋转角度必须先复位,复位到初始化旋转角度。
所述初始化旋转角度是虚拟人初始状态时,弹性节点所绑定的第一目标骨骼节点相对于根节点的旋转角度。在本实施例中,可以采用四元数来表示所述旋转角度。所述四元数,可以看作复数的补充,它有三个虚部。形式如下:q=w+xi+yj+zk,可以写成q=s+v。
再将弹性节点复位至初始化旋转角度获得所述弹性节点的世界坐标与世界旋转角度。
所述世界坐标,是基于当前游戏场景而言的,在当前游戏场景中定位出中心点作为坐标原点,以该坐标原点为基准,就会相应获得某个游戏物体的某个点的坐标;可以得到游戏物体的坐标,该坐标即就是世界坐标。
所述世界旋转角度,是某游戏物体在世界坐标中的旋转角度相对于场景根节点的旋转角度。
所述根节点,是指进行动画模型制作时在虚拟人上设置的具有层次关系并以树形结构安置的骨骼节点中的最高一级的节点,在设置弹性节点时只有一个根节点。
S204-1b,通过所述弹性节点在所述当前动画帧的前两个动画帧中的坐标和所述世界坐标,分别计算所述弹性节点受到的刚性力和空气阻力。
所述刚性力(stiffnessForce),是保持原状的力,是当前的坐标相对于相邻的骨骼节点的力。
对于本实施例来讲,刚性力的方向是骨骼节点沿着发辫上的方向轴,参见图9,示出了所述刚性力的方向。骨骼节点的X轴方向即为刚性力的方向,这个力的大小决定了发辫的僵硬程度。力越大,发辫越僵硬,虚拟人物在进行运动时发辫越不容易飘动。
所述空气阻力(dragForce),是与速度方向相反的力;对于本实施例来讲,是阻止发辫飘动的力,可以根据骨骼节点的上一帧到当前帧的坐标计算。
S204-1c,根据所述弹性节点受到的所述刚性力、所述空气阻力与受到的重力进行合成,得到所述弹性节点受到的合力。
S204-1d,通过所述弹性节点受到的合力、所述弹性节点在所述当前动画帧的前两个动画帧中的坐标与动画帧之间时间增量,得到所述弹性节点在所述当前动画帧中的调整坐标;
S204-1e,根据所述调整坐标调整所述弹性节点的位置。
在上述步骤中完成得到当前帧的坐标,根据调整后的当前帧的坐标调整弹性节点的位置,得到更新后的弹性节点列表。
S204-2,响应所述第二目标物体的移动,调整所述第二目标物体的各个网格分别对应的碰撞节点的位置,得到更新后的碰撞节点列表。
在上述步骤中完成得到当前帧的坐标,根据调整后的当前帧的坐标调整碰撞节点的位置,得到更新后的碰撞节点列表。
S204-3,针对更新后的所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与更新后的所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置。
由S204-1和S204-2分别得到更新后的弹性节点列表,在该步骤中计算更新后的每一个弹性节点与每一个碰撞节点的碰撞结果。
若所述碰撞结果为发生碰撞,则确定对所述弹性节点的位置进行调整,并计算所述当前动画帧中所述弹性节点的待显示位置;若所述碰撞结果为未发生碰撞,则确定不对所述弹性节点的位置进行调整。
在本实施例中,根据所述弹性节点与所述碰撞节点的包围体设置方式,碰撞冲突的判定采用球体与胶囊体的碰撞检测方式。参照图10,其示出了弹性节点与碰撞节点发生碰撞冲突时的示意图。
通过判定球心(x0,y0,z0)到胶囊体的中心轴的最短距离,与(r1+r2)的大小,来判断是否碰撞。碰撞体检测如图9所示,线段10-1代表胶囊体中心轴,线段10-2表示球心(x0,y0,z0)到中心轴的最短距离D:如果D^2小于或等于(r1+r2)^2,则碰撞,需要更改球体的位置;如果D^2大于(r1+r2)^2,则无碰撞。
当D^2小于或等于(r1+r2)^2时,即所述弹性节点与所述碰撞节点发生碰撞冲突,此时更改弹性节点的位置直至其处于不产生碰撞冲突的位置,将该位置作为所述当前弹性节点在当前动画帧中的待显示位置。
S206,根据所述弹性节点的所述待显示位置,渲染所述当前动画帧。
根据所述弹性节点的所述待显示位置,确定所述弹性节点对应的第一目标物体的目标网格的目标位置;
根据所述第一目标物体的目标网格的目标位置,渲染所述当前动画帧。
至此,本申请的第一实施例提供了一种动画生成的方法,利用Verlet积分方法模拟实现了弹性布料类物体的飘动动画,使其飘动过程更加形象逼真。
与本身请第一实施例提供的一种动画生成的方法相对应,本申请的第二实施例提供了一种动画生成的装置。
参照图11,其示出了本申请第二实施例提供的一种动画生成装置的流程图。由于装置实施例基本相似于方法实施例,所以简单描述,相关的部分请参见方法实施例的对应说明即可。
图11所示的一种动画生成的装置,包括:
获取单元1101,用于获取弹性材质模拟组件,所述弹性材质模拟组件包含弹性节点列表1102和碰撞节点列表1103;其中,所述弹性节点列表中包含多个弹性节点,每个所述弹性节点包含第一节点信息,所述弹性节点为根据第一目标物体所绑定骨骼的骨骼节点生成的节点,所述第一目标物体为弹性物体;所述碰撞节点列表包含多个碰撞节点,每个所述碰撞节点包含第二节点信息,所述碰撞节点为根据第二目标物体所绑定骨骼的骨骼节点生成的节点,所述第二目标物体为刚性物体;
确定单元1104,用于针对所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置;
渲染单元1106,用于根据所述弹性节点的所述待显示位置,渲染所述当前动画帧。
所述获取所述弹性材质模拟组件后,所述方法还包括:
分别建立所述多个弹性节点与第一目标物体的各个网格之间的关联关系,以及所述多个碰撞节点与第二目标物体的各个网格之间的关联关系;
其中,所述第一目标物体和所述第二目标物体为待显示动画中包含的虚拟对象。
所述针对所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置,包括:
响应所述第一目标物体的移动,调整所述第一目标物体的各个网格分别对应的弹性节点的位置,得到更新后的弹性节点列表;
响应所述第二目标物体的移动,调整所述第二目标物体的各个网格分别对应的碰撞节点的位置,得到更新后的碰撞节点列表;
针对更新后的所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与更新后的所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置。
所述根据所述弹性节点的所述待显示位置,渲染所述当前动画帧,包括:
根据所述弹性节点的所述待显示位置,确定所述弹性节点对应的第一目标物体的目标网格的目标位置;
根据所述第一目标物体的目标网格的目标位置,渲染所述当前动画帧。
所述方法还包括:
针对所述第一目标物体所绑定骨骼的第一目标骨骼节点,生成所述第一目标骨骼节点的第一包围体,将所述第一包围体作为所述弹性节点;
针对所述第二目标物体所绑定骨骼的第二目标骨骼节点,生成所述第二目标骨骼节点的第二包围体,将所述第二包围体作为所述碰撞节点。
所述第一包围体为球体,所述第二包围体为胶囊体。
所述第一节点信息包括:所述弹性节点对应的骨骼节点的名称、所述弹性节点对应的第一包围体的半径、所述第一包围体相对于对应的骨骼节点的偏移坐标值。
述第二节点信息包括:所述碰撞节点对应的的骨骼节点的名称、所述碰撞节点对应的胶囊体头部的半径、所述胶囊体中的圆柱体高度、所述胶囊体的中心相对于对应的骨骼节点的偏移坐标值、所述胶囊体中的圆柱体延伸方向的参考轴。
所述根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置,包括:
若所述碰撞结果为发生碰撞,则确定对所述弹性节点的位置进行调整,并计算所述当前动画帧中所述弹性节点的待显示位置;
若所述碰撞结果为未发生碰撞,则确定不对所述弹性节点的位置进行调整。
所述响应所述第一目标物体的移动,调整所述第一目标物体的各个网格分别对应的弹性节点的位置:
响应所述第一目标物体的移动,控制所述弹性节点复位至初始化旋转角度,获得所述弹性节点的世界坐标与世界旋转角度;
通过所述弹性节点在所述当前动画帧的前两个动画帧中的坐标和所述世界坐标,分别计算所述弹性节点受到的刚性力和空气阻力;
根据所述弹性节点受到的所述刚性力、所述空气阻力与受到的重力进行合成,得到所述弹性节点受到的合力;
通过所述弹性节点受到的合力、所述弹性节点在所述当前动画帧的前两个动画帧中的坐标与动画帧之间时间增量,得到所述弹性节点在所述当前动画帧中的调整坐标;
根据所述调整坐标调整所述弹性节点的位置。
本申请第三实施例提供一种终端设备,包括处理器1201和存储器1202。如图12所示,示出了本申请第三实施例提供的终端设备的逻辑结构示意图。其中,所述存储器用于存储一条或多条计算机指令,以实现上述第一实施例所述的方法。
本申请第四实施例提供一种非易失性可读存储介质,其上存储有一条或多条计算机指令;该些指令被处理器执行以实现上述第一实施例所述的方法。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
Claims (13)
1.一种动画生成的方法,其特征在于,包括:
获取弹性材质模拟组件,所述弹性材质模拟组件包含弹性节点列表和碰撞节点列表;
其中,所述弹性节点列表中包含多个弹性节点,每个所述弹性节点包含第一节点信息,所述弹性节点为根据第一目标物体所绑定骨骼的骨骼节点生成的节点,所述第一目标物体为弹性物体;
所述碰撞节点列表包含多个碰撞节点,每个所述碰撞节点包含第二节点信息,所述碰撞节点为根据第二目标物体所绑定骨骼的骨骼节点生成的节点,所述第二目标物体为刚性物体;
针对所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置;
根据所述弹性节点的所述待显示位置,渲染所述当前动画帧。
2.根据权利要求1所述的方法,其特征在于,所述获取所述弹性材质模拟组件后,所述方法还包括:
分别建立所述多个弹性节点与第一目标物体的各个网格之间的关联关系,以及所述多个碰撞节点与第二目标物体的各个网格之间的关联关系;
其中,所述第一目标物体和所述第二目标物体为待显示动画中包含的虚拟对象。
3.根据权利要求2所述的方法,其特征在于,所述针对所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置,包括:
响应所述第一目标物体的移动,调整所述第一目标物体的各个网格分别对应的弹性节点的位置,得到更新后的弹性节点列表;
响应所述第二目标物体的移动,调整所述第二目标物体的各个网格分别对应的碰撞节点的位置,得到更新后的碰撞节点列表;
针对更新后的所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与更新后的所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置。
4.根据权利要求3所述的方法,其特征在于,所述根据所述弹性节点的所述待显示位置,渲染所述当前动画帧,包括:
根据所述弹性节点的所述待显示位置,确定所述弹性节点对应的第一目标物体的目标网格的目标位置;
根据所述第一目标物体的目标网格的目标位置,渲染所述当前动画帧。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
针对所述第一目标物体所绑定骨骼的第一目标骨骼节点,生成所述第一目标骨骼节点的第一包围体,将所述第一包围体作为所述弹性节点;
针对所述第二目标物体所绑定骨骼的第二目标骨骼节点,生成所述第二目标骨骼节点的第二包围体,将所述第二包围体作为所述碰撞节点。
6.根据权利要求5所述的方法,其特征在于,所述第一包围体为球体,所述第二包围体为胶囊体。
7.根据权利要求6所述的方法,其特征在于,所述第一节点信息包括:所述弹性节点对应的骨骼节点的名称、所述弹性节点对应的第一包围体的半径、所述第一包围体相对于对应的骨骼节点的偏移坐标值。
8.根据权利要求6所述的方法,其特征在于,所述第二节点信息包括:所述碰撞节点对应的骨骼节点的名称、所述碰撞节点对应的胶囊体头部的半径、所述胶囊体中的圆柱体高度、所述胶囊体的中心相对于对应的骨骼节点的偏移坐标值、所述胶囊体中的圆柱体延伸方向的参考轴。
9.根据权利要求1所述的方法,其特征在于,所述根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置,包括:
若所述碰撞结果为发生碰撞,则确定对所述弹性节点的位置进行调整,并计算所述当前动画帧中所述弹性节点的待显示位置;
若所述碰撞结果为未发生碰撞,则确定不对所述弹性节点的位置进行调整。
10.根据权利要求3所述的方法,其特征在于,所述响应所述第一目标物体的移动,调整所述第一目标物体的各个网格分别对应的弹性节点的位置:
响应所述第一目标物体的移动,控制所述弹性节点复位至初始化旋转角度,获得所述弹性节点的世界坐标与世界旋转角度;
通过所述弹性节点在所述当前动画帧的前两个动画帧中的坐标和所述世界坐标,分别计算所述弹性节点受到的刚性力和空气阻力;
根据所述弹性节点受到的所述刚性力、所述空气阻力与受到的重力进行合成,得到所述弹性节点受到的合力;
通过所述弹性节点受到的合力、所述弹性节点在所述当前动画帧的前两个动画帧中的坐标与动画帧之间时间增量,得到所述弹性节点在所述当前动画帧中的调整坐标;
根据所述调整坐标调整所述弹性节点的位置。
11.一种动画生成的装置,其特征在于,包括:
获取单元,用于获取弹性材质模拟组件,所述弹性材质模拟组件包含弹性节点列表和碰撞节点列表;其中,所述弹性节点列表中包含多个弹性节点,每个所述弹性节点包含第一节点信息,所述弹性节点为根据第一目标物体所绑定骨骼的骨骼节点生成的节点,所述第一目标物体为弹性物体;所述碰撞节点列表包含多个碰撞节点,每个所述碰撞节点包含第二节点信息,所述碰撞节点为根据第二目标物体所绑定骨骼的骨骼节点生成的节点,所述第二目标物体为刚性物体;
确定单元,用于针对所述弹性节点列表中的每一弹性节点,依次计算所述弹性节点与所述碰撞节点列表中的每一碰撞节点之间的碰撞结果,根据所述碰撞结果确定所述弹性节点在当前动画帧中的待显示位置;
渲染单元,用于根据所述弹性节点的所述待显示位置,渲染所述当前动画帧。
12.一种终端设备,其特征在于,包括处理器和存储器;其中,
所述存储器用于存储一条或多条计算机指令;
所述处理器用于执行所述一条或多条计算机指令,以实现如权利要求1-10任意一项所述的方法。
13.一种非易失性存储介质,其上存储有一条或多条计算机指令,其特征在于,该指令能够被处理器读取并执行,以实现如权利要求1-10任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210339622.1A CN114882153A (zh) | 2022-04-01 | 2022-04-01 | 一种动画生成的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210339622.1A CN114882153A (zh) | 2022-04-01 | 2022-04-01 | 一种动画生成的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114882153A true CN114882153A (zh) | 2022-08-09 |
Family
ID=82669625
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210339622.1A Pending CN114882153A (zh) | 2022-04-01 | 2022-04-01 | 一种动画生成的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114882153A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116310009A (zh) * | 2023-05-17 | 2023-06-23 | 海马云(天津)信息技术有限公司 | 一种数字虚拟对象的装饰物处理方法、装置及存储介质 |
Citations (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6509899B1 (en) * | 1999-03-01 | 2003-01-21 | Lucas Digital Ltd. | Time differencing for improved cloth animation |
US20060149516A1 (en) * | 2004-12-03 | 2006-07-06 | Andrew Bond | Physics simulation apparatus and method |
US20090135189A1 (en) * | 2007-11-22 | 2009-05-28 | Electronics And Telecommunications Research Institute | Character animation system and method |
CN104156995A (zh) * | 2014-07-16 | 2014-11-19 | 浙江大学 | 一种针对敦煌飞天形象的飘带动画制作方法 |
CN105006014A (zh) * | 2015-02-12 | 2015-10-28 | 上海交通大学 | 虚拟衣物快速模拟试穿的实现方法及系统 |
WO2016127421A1 (zh) * | 2015-02-15 | 2016-08-18 | 浙江大学 | 一种适用于头发和物体碰撞的实时运动仿真方法 |
CN105976418A (zh) * | 2016-06-28 | 2016-09-28 | 珠海金山网络游戏科技有限公司 | 一种人物动态骨骼的设计系统和方法 |
US20160370971A1 (en) * | 2014-09-18 | 2016-12-22 | Google Inc. | Dress form for three-dimensional drawing inside virtual reality environment |
CN108537888A (zh) * | 2018-04-09 | 2018-09-14 | 浙江大学 | 一种基于骨架的快速试衣方法 |
CN109448080A (zh) * | 2018-09-27 | 2019-03-08 | 深圳点猫科技有限公司 | 基于编程语言对骨骼动画进行碰撞检测的方法、电子设备 |
CN109993819A (zh) * | 2019-04-09 | 2019-07-09 | 网易(杭州)网络有限公司 | 虚拟角色的蒙皮方法及装置、电子设备 |
CN110288681A (zh) * | 2019-06-25 | 2019-09-27 | 网易(杭州)网络有限公司 | 角色模型的蒙皮方法、装置、介质及电子设备 |
CN111080751A (zh) * | 2019-12-30 | 2020-04-28 | 北京金山安全软件有限公司 | 碰撞渲染方法和装置 |
CN111651894A (zh) * | 2020-06-16 | 2020-09-11 | 北京中科深智科技有限公司 | 一种布料形变实时模拟方法 |
CN112001989A (zh) * | 2020-07-28 | 2020-11-27 | 完美世界(北京)软件科技发展有限公司 | 虚拟对象的控制方法及装置、存储介质、电子装置 |
CN112619143A (zh) * | 2020-12-23 | 2021-04-09 | 上海米哈游天命科技有限公司 | 一种角色标识显示方法、装置、设备及存储介质 |
CN112819930A (zh) * | 2021-02-21 | 2021-05-18 | 北京工业大学 | 一种基于前馈神经网络的实时角色服装布料动画模拟方法 |
WO2021218482A1 (zh) * | 2020-04-30 | 2021-11-04 | 完美世界(北京)软件科技发展有限公司 | 角色变身动画的生成方法、装置、设备及可读存储介质 |
WO2022000972A1 (zh) * | 2020-06-30 | 2022-01-06 | 完美世界(北京)软件科技发展有限公司 | 任务的处理方法和装置、存储介质、电子装置 |
CN114119910A (zh) * | 2020-08-27 | 2022-03-01 | 北京陌陌信息技术有限公司 | 一种服装模型匹配人体模型的方法、设备和存储介质 |
CN114119908A (zh) * | 2020-08-27 | 2022-03-01 | 北京陌陌信息技术有限公司 | 一种服装模型驱动方法、设备和存储介质 |
-
2022
- 2022-04-01 CN CN202210339622.1A patent/CN114882153A/zh active Pending
Patent Citations (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6509899B1 (en) * | 1999-03-01 | 2003-01-21 | Lucas Digital Ltd. | Time differencing for improved cloth animation |
US20060149516A1 (en) * | 2004-12-03 | 2006-07-06 | Andrew Bond | Physics simulation apparatus and method |
US20090135189A1 (en) * | 2007-11-22 | 2009-05-28 | Electronics And Telecommunications Research Institute | Character animation system and method |
CN104156995A (zh) * | 2014-07-16 | 2014-11-19 | 浙江大学 | 一种针对敦煌飞天形象的飘带动画制作方法 |
US20160370971A1 (en) * | 2014-09-18 | 2016-12-22 | Google Inc. | Dress form for three-dimensional drawing inside virtual reality environment |
WO2017048685A1 (en) * | 2014-09-18 | 2017-03-23 | Google Inc. | Generation of three dimensional fashion objects by drawing inside a virtual reality environment |
CN105006014A (zh) * | 2015-02-12 | 2015-10-28 | 上海交通大学 | 虚拟衣物快速模拟试穿的实现方法及系统 |
WO2016127421A1 (zh) * | 2015-02-15 | 2016-08-18 | 浙江大学 | 一种适用于头发和物体碰撞的实时运动仿真方法 |
CN105976418A (zh) * | 2016-06-28 | 2016-09-28 | 珠海金山网络游戏科技有限公司 | 一种人物动态骨骼的设计系统和方法 |
CN108537888A (zh) * | 2018-04-09 | 2018-09-14 | 浙江大学 | 一种基于骨架的快速试衣方法 |
CN109448080A (zh) * | 2018-09-27 | 2019-03-08 | 深圳点猫科技有限公司 | 基于编程语言对骨骼动画进行碰撞检测的方法、电子设备 |
CN109993819A (zh) * | 2019-04-09 | 2019-07-09 | 网易(杭州)网络有限公司 | 虚拟角色的蒙皮方法及装置、电子设备 |
CN110288681A (zh) * | 2019-06-25 | 2019-09-27 | 网易(杭州)网络有限公司 | 角色模型的蒙皮方法、装置、介质及电子设备 |
CN111080751A (zh) * | 2019-12-30 | 2020-04-28 | 北京金山安全软件有限公司 | 碰撞渲染方法和装置 |
WO2021218482A1 (zh) * | 2020-04-30 | 2021-11-04 | 完美世界(北京)软件科技发展有限公司 | 角色变身动画的生成方法、装置、设备及可读存储介质 |
CN111651894A (zh) * | 2020-06-16 | 2020-09-11 | 北京中科深智科技有限公司 | 一种布料形变实时模拟方法 |
WO2022000972A1 (zh) * | 2020-06-30 | 2022-01-06 | 完美世界(北京)软件科技发展有限公司 | 任务的处理方法和装置、存储介质、电子装置 |
CN112001989A (zh) * | 2020-07-28 | 2020-11-27 | 完美世界(北京)软件科技发展有限公司 | 虚拟对象的控制方法及装置、存储介质、电子装置 |
CN114119910A (zh) * | 2020-08-27 | 2022-03-01 | 北京陌陌信息技术有限公司 | 一种服装模型匹配人体模型的方法、设备和存储介质 |
CN114119908A (zh) * | 2020-08-27 | 2022-03-01 | 北京陌陌信息技术有限公司 | 一种服装模型驱动方法、设备和存储介质 |
CN112619143A (zh) * | 2020-12-23 | 2021-04-09 | 上海米哈游天命科技有限公司 | 一种角色标识显示方法、装置、设备及存储介质 |
CN112819930A (zh) * | 2021-02-21 | 2021-05-18 | 北京工业大学 | 一种基于前馈神经网络的实时角色服装布料动画模拟方法 |
Non-Patent Citations (3)
Title |
---|
朱淮冰, 金小刚, 冯结青, 彭群生: "布料动画模拟综述", 计算机辅助设计与图形学学报, no. 05, 20 May 2004 (2004-05-20) * |
李鹏高;徐岗;凌然;肖周芳;许金兰;吴卿;: "采用等几何质点-弹簧模型的布料动态仿真方法", 计算机辅助设计与图形学学报, no. 06, 15 June 2019 (2019-06-15) * |
梁秀霞;韩慧健;张彩明;: "基于物理仿真的布料动画研究综述", 计算机研究与发展, no. 01, 8 January 2014 (2014-01-08) * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116310009A (zh) * | 2023-05-17 | 2023-06-23 | 海马云(天津)信息技术有限公司 | 一种数字虚拟对象的装饰物处理方法、装置及存储介质 |
CN116310009B (zh) * | 2023-05-17 | 2023-08-04 | 海马云(天津)信息技术有限公司 | 一种数字虚拟对象的装饰物处理方法、装置及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7082877B2 (ja) | 3次元ボクセル・ベース・モデリングのための方法 | |
Lewis et al. | Game engines | |
US20130222433A1 (en) | Animation processing | |
JP7299414B2 (ja) | 画像処理方法、装置、電子機器及びコンピュータプログラム | |
CN111714880B (zh) | 画面的显示方法和装置、存储介质、电子装置 | |
WO2022127241A1 (zh) | 虚拟球体的形变控制方法、装置、程序和可读介质 | |
CN111773688B (zh) | 柔性对象的渲染方法和装置、存储介质、电子装置 | |
JP4206547B2 (ja) | 画像処理方法、その画像処理装置及びそれに利用する一体整形モデルデータ及び画像処理プログラムを記録した記録媒体 | |
US20180144531A1 (en) | Animating a virtual object in a virtual world | |
US9652879B2 (en) | Animation of a virtual object | |
CN114882153A (zh) | 一种动画生成的方法及装置 | |
Zeltzer | Representation of complex animated figures | |
JP3625201B2 (ja) | 3次元モデル変形プログラム、3次元モデル変形方法及びビデオゲーム装置 | |
JP2009020874A (ja) | 髪シミュレーション方法およびその装置 | |
KR20240055025A (ko) | 실용 3d 에셋을 위한 추론된 골격 구조 | |
Xia et al. | Recent advances on virtual human synthesis | |
Wen et al. | A new animation approach for visualizing intelligent agent behaviours in a virtual environment | |
JP4229316B2 (ja) | 画像生成システム、プログラム及び情報記憶媒体 | |
Gil et al. | A Shader-Based Architecture for Virtual Reality Applications on Mobile Devices | |
Zhang | The Designation and Implementation for Human Skinned Mesh Animation Based on XNA | |
Strand et al. | Particle-Oriented Bounding Box Skeletal Animation in real-time applications | |
Gästrin | Physically Based Character Simulation–Rag Doll Behaviour in Computer Games | |
Yli-Pentti | On production of 3D character models for games | |
Kumar | BEAPS: Incorporating Shape Dynamics in Virtual Agents Focusing on Customizing the Mesh for Pose Space Actions | |
Rajendran | Understanding the Desired Approach for Animating Procedurally |
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 |