一种动画效果实现方法及装置与流程
1.本技术涉及计算机技术领域,具体涉及一种动画效果实现方法、装置、电子设备及计算机可读存储介质。
背景技术:
2.为了增加游戏视觉特效,使游戏更具趣味性,通常会在游戏场景中加入各种游戏特效,其中,万箭射击效果被广泛应用在很多游戏场景中。
3.在实现万箭射击效果的现有方案中,通常先手动创建大量实现不同自转效果的弓箭旋转动画模型;在各弓箭从发射源发出后做自由落体运动的过程中,将各弓箭模型分别切换为上述实现不同自转效果的弓箭旋转动画模型中的任意一个,从而实现在万箭射击过程中弓箭的差异化自转效果。
4.然而,要实现在万箭射击过程中各弓箭进行差异化自转效果,需要手动创建大量具有不同自转效果的弓箭旋转动画模型,导致工作量急剧上升,动画效果制作效率低下。
技术实现要素:
5.本技术提供一种动画效果实现方法及装置,同时也提供了可实施该动画效果实现方法的电子设备及计算机可读存储介质,以解决现有技术中所需工作量大,动画效果制作效率低下的问题。
6.第一方面,本技术实施例提供一种动画效果实现方法,所述方法包括:
7.响应于目标粒子在空中飞行,获取所述目标粒子在当前图像帧中的速度向量;
8.根据预设单位向量绕所述速度向量旋转,确定初始旋转信息;
9.根据所述初始旋转信息、所述速度向量以及所述目标粒子在当前图像帧的第一随机转动角度,确定第一旋转信息;
10.根据所述第一旋转信息控制所述目标粒子在所述当前图像帧中进行转动。
11.可选地,所述目标粒子在当前图像帧的第一随机转动角度由以下步骤得到:
12.在第一数值范围中,为所述目标粒子确定随机值;
13.确定所述第一数值范围与第二数值范围之间的映射关系,并根据所述映射关系将所述随机值对应的映射转动角度确定为所述目标粒子的相对转动角度;
14.根据所述相对转动角度和第一预设转动角度,确定所述目标粒子在所述当前图像帧的第一随机转动角度,所述第一预设转动角度大于所述第二数值范围内的转动角度。
15.可选地,所述初始旋转信息包括初始旋转矩阵;
16.所述根据所述初始旋转信息、所述速度向量以及所述目标粒子在当前图像帧的第一随机转动角度,确定第一旋转信息,包括:
17.所述初始旋转矩阵以所述速度向量为旋转轴,转动所述第一随机转动角度,得到所述目标粒子在所述当前图像帧的第一旋转矩阵。
18.可选地,所述根据所述第一旋转信息控制所述目标粒子在所述当前图像帧进行转
动,包括:
19.将所述第一旋转矩阵转换为四元数的表达形式,得到第一四元数;
20.根据所述第一四元数控制所述目标粒子在所述当前图像帧中进行转动。
21.可选地,所述方法还包括:
22.响应于所述目标粒子与所述目标障碍物发生碰撞,在所述目标障碍物为静态物体的情况下,获取所述目标粒子对应的目标碰撞状态并控制所述目标粒子的运动状态符合所述目标碰撞状态。
23.可选地,所述碰撞状态包括以下任意一种:从碰撞点插入所述目标障碍物并转动预设帧数后停止转动、翻倒在所述目标碰撞物上;
24.在所述目标粒子对应的目标碰撞状态为从碰撞点插入所述目标障碍物并转动预设帧数后停止转动的情况下,所述控制所述目标粒子的运动状态符合所述目标碰撞状态,包括:
25.获取所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息;
26.根据所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息和所述目标粒子在当前图像帧中的第二随机转动角度,确定第二旋转信息;
27.根据所述第二旋转信息控制所述目标粒子在所述当前图像帧中进行转动。
28.可选地,在所述预设帧数内所述第二随机转动角度的分布状态至少包括以下任意一种:线性分布、非线性分布以及指数分布;
29.所述根据所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息和所述目标粒子在当前图像帧中的第二随机转动角度,确定第二旋转信息,包括:
30.根据所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息,确定目标旋转轴;
31.根据所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息、所述目标旋转轴以及所述第二随机转动角度,确定所述目标粒子在当前图像帧的第二旋转信息。
32.可选地,所述旋转信息包括四元数;
33.所述根据所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息、所述目标旋转轴以及所述第二随机转动角度,确定所述目标粒子在当前图像帧的第二旋转信息,包括:
34.将所述目标粒子在所述碰撞发生前一帧图像中的四元数转换为旋转矩阵的表达形式,得到第二旋转矩阵并根据所述第二旋转矩阵确定目标旋转轴;
35.根据所述第二旋转矩阵、所述目标旋转轴以及所述第二随机转动角度,确定所述目标粒子在当前图像帧的第二四元数。
36.可选地,所述方法还包括:
37.响应于所述目标粒子与所述目标障碍物发生碰撞,在所述目标障碍物为动态物体的情况下,获取所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息;
38.根据所述目标障碍物发生碰撞的位置和所述目标障碍物中分布在不同位置的多个关键点之间的位置关系,在所述多个关键中确定目标关键点;
39.根据所述目标关键点在当前图像帧的第一旋转信息和所述目标粒子在所述碰撞发生前一帧图像中的旋转信息,得到所述目标粒子在当前图像帧的第三旋转信息;
40.根据所述第三旋转信息控制所述目标粒子在所述当前图像帧中进行转动。
41.可选地,所述旋转信息包括四元数;
42.所述根据所述目标关键点在当前图像帧的旋转信息和所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息,得到所述目标粒子在当前图像帧的第三旋转信息,包括:
43.根据所述目标关键点在当前图像帧的四元数叉乘所述目标粒子在所述碰撞发生前一帧图像中的四元数,确定所述目标粒子在当前图像帧的第三四元数。
44.可选地,所述根据所述目标障碍物发生碰撞的位置和所述目标障碍物中分布在不同位置的多个关键点之间的位置关系,在所述多个关键中确定目标关键点,包括:
45.在所述目标障碍物中分布在不同位置的多个关键点中,将与所述目标障碍物发生碰撞的位置距离最近的关键点,确定为目标关键点。
46.第二方面,本技术实施例提供一种动画效果实现装置,所述装置包括:
47.获取模块,用于响应于目标粒子在空中飞行,获取所述目标粒子在当前图像帧中的速度向量;
48.第一处理模块,用于根据预设单位向量绕所述速度向量旋转,确定初始旋转信息;
49.确定模块,用于根据所述初始旋转信息、所述速度向量以及所述目标粒子在当前图像帧的第一随机转动角度,确定第一旋转信息;
50.控制模块,用于根据所述第一旋转信息控制所述目标粒子在所述当前图像帧中进行转动。
51.可选地,所述确定模块具体用于:
52.在第一数值范围中,为所述目标粒子确定随机值;
53.确定所述第一数值范围与第二数值范围之间的映射关系,并根据所述映射关系将所述随机值对应的映射转动角度确定为所述目标粒子的相对转动角度;
54.根据所述相对转动角度和第一预设转动角度,确定所述目标粒子在所述当前图像帧的第一随机转动角度,所述第一预设转动角度大于所述第二数值范围内的转动角度。
55.可选地,所述初始旋转信息包括初始旋转矩阵;
56.所述确定模块具体用于:
57.所述初始旋转矩阵以所述速度向量为旋转轴,转动所述第一随机转动角度,得到所述目标粒子在所述当前图像帧的第一旋转矩阵。
58.可选地,所述控制模块具体用于:
59.将所述第一旋转矩阵转换为四元数的表达形式,得到第一四元数;
60.根据所述第一四元数控制所述目标粒子在所述当前图像帧中进行转动。
61.可选地,所述装置还包括第二处理模块,所述第二处理模块具体用于:
62.响应于所述目标粒子与所述目标障碍物发生碰撞,在所述目标障碍物为静态物体的情况下,获取所述目标粒子对应的目标碰撞状态并控制所述目标粒子的运动状态符合所述目标碰撞状态。
63.可选地,所述碰撞状态包括以下任意一种:从碰撞点插入所述目标障碍物并转动预设帧数后停止转动、翻倒在所述目标碰撞物上;
64.在所述目标粒子对应的目标碰撞状态为从碰撞点插入所述目标障碍物并转动预
设帧数后停止转动的情况下,所述第二处理模块具体用于:
65.获取所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息;
66.根据所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息和所述目标粒子在当前图像帧中的第二随机转动角度,确定第二旋转信息;
67.根据所述第二旋转信息控制所述目标粒子在所述当前图像帧中进行转动。
68.可选地,在所述预设帧数内所述第二随机转动角度的分布状态至少包括以下任意一种:线性分布、非线性分布以及指数分布;
69.所述第二处理模块具体用于:
70.根据所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息,确定目标旋转轴;
71.根据所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息、所述目标旋转轴以及所述第二随机转动角度,确定所述目标粒子在当前图像帧的第二旋转信息。
72.可选地,所述旋转信息包括四元数;
73.所述第二处理模块具体用于:
74.将所述目标粒子在所述碰撞发生前一帧图像中的四元数转换为旋转矩阵的表达形式,得到第二旋转矩阵并根据所述第二旋转矩阵确定目标旋转轴;
75.根据所述第二旋转矩阵、所述目标旋转轴以及所述第二随机转动角度,确定所述目标粒子在当前图像帧的第二四元数。
76.可选地,所述方法还包括第三处理模块,所述第三处理模块具体用于:
77.响应于所述目标粒子与所述目标障碍物发生碰撞,在所述目标障碍物为动态物体的情况下,获取所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息;
78.根据所述目标障碍物发生碰撞的位置和所述目标障碍物中分布在不同位置的多个关键点之间的位置关系,在所述多个关键中确定目标关键点;
79.根据所述目标关键点在当前图像帧的第一旋转信息和所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息,得到所述目标粒子在当前图像帧的第三旋转信息;
80.根据所述第三旋转信息控制所述目标粒子在所述当前图像帧中进行转动。
81.可选地,所述旋转信息包括四元数;
82.所述第三处理模块具体用于:
83.根据所述目标关键点在当前图像帧的四元数叉乘所述目标粒子在所述碰撞发生前一帧图像中的四元数,确定所述目标粒子在当前图像帧的第三四元数。
84.可选地,所述第三处理模块具体用于:
85.在所述目标障碍物中分布在不同位置的多个关键点中,将与所述目标障碍物发生碰撞的位置距离最近的关键点,确定为目标关键点。
86.第三方面,本技术实施例提供一种电子设备,所述电子设备包括:
87.存储器和处理器、所述存储器和所述处理器耦合;
88.所述存储器用于存储一条或多条计算机指令;
89.所述处理器用于执行所述一条或多条计算机指令,以实现上述第一方面任一项所述的动画效果实现方法。
90.第四方面,本技术实施例提供一种计算机可读存储介质,其上存储有一条或多条
计算机指令,其特征在于,该指令被处理器执行以实现上述第一方面任一项所述的动画效果实现方法。
91.第五方面,本技术实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现上述第一方面任一项所述的动画效果实现方法。
92.与现有技术相比,本技术具有以下优点:
93.本技术公开了一种动画效果实现方法及装置,该方法包括:响应于目标粒子在空中飞行,获取目标粒子在当前图像帧中的速度向量;根据预设单位向量绕速度向量旋转,确定初始旋转信息;根据初始旋转信息、速度向量以及目标粒子在当前图像帧的第一随机转动角度,确定第一旋转信息;根据第一旋转信息控制目标粒子在当前图像帧中进行转动。一方面,通过程序化的控制大大提高了动画制作的效率;另一方面,在目标粒子在空中做自由落体的过程中每个图像帧,根据目标粒子在每个图像帧对应的第一随机转动角度确定目标粒子每帧图像的旋转信息后,在连续播放图像帧的过程中,即可实现目标粒子在空中飞行做自由落体运动的过程中同步进行自转的动画效果。进一步,通过对于粒子系统发射的成千上万的目标粒子拥有各自对应的第一随机转动角度,成千上万的粒子的第一随机转动角度的不同。因此,根据各目标粒子对应的第一随机转动角度,来实现成千上万的目标粒子在空中做自由落体的过程中进行差异化自转。
附图说明
94.此处所说明的附图用来提供对本发明的进一步理解,构成本技术的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
95.图1为本技术第一实施例提供的动画效果实现方法的流程示意图之一;
96.图2为本技术第一实施例提供的动画效果实现方法的流程示意图之二;
97.图3为本技术第一实施例提供的万箭射击的动画效果示意图之一;
98.图4为本技术第一实施例提供的动画效果实现方法的流程示意图之三;
99.图5为本技术第一实施例提供的目标障碍物包括多个关键点的示意图;
100.图6为本技术第一实施例提供的万箭射击的动画效果示意图之二;
101.图7为本技术第一实施例提供的粒子在空中做抛物线运动的操作流程图;
102.图8为本技术第一实施例提供的粒子插中地面后变速旋转的操作流程图;
103.图9为本技术第一实施例提供的粒子在打中并跟随目标障碍物转动的操作流程图;
104.图10为本技术第一实施例提供的粒子打中地面后倒地的操作流程图;
105.图11为本技术第一实施例提供的万箭射击的动画效果示意图之三;
106.图12为本技术第二实施例提供的动画效果实现装置的结构示意图;
107.图13为本技术第三实施例提供的电子设备的硬件结构示意图。
108.通过上述附图,已示出本技术明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本技术构思的范围,而是通过参考特定实施例为本领域技术人员说明本技术的概念。
具体实施方式
109.为使本发明的目的、优点和特征更加清楚,以下结合附图和具体实施方式对本发明进行清楚、完整地描述。在下面的描述中,阐述了很多具体细节以便于充分理解本发明。但是,所描述的实施例是本发明一部分实施例,而不是全部的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
110.需要说明的是,在本技术的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性,以及特定的顺序或先后次序。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本技术中的具体含义。此外,在本技术的描述中,除非另有说明,术语“多个”是指两个或两个以上。术语“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。术语“包括”和“具有”以及他们的任何变形,旨在覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
111.为了便于理解本技术的技术方案,首先对本技术所涉及的相关概念进行介绍。
112.四元数(或称为四元素)是由一个实数和三个复数组成的超复数,可用于描述物体旋转运动的朝向。其中,实数表示物体转动的大小,三个复数分别表征在三维空间的朝向。四元数常用的表达式可以参考公式一:
113.q=q0+q1i+q2j+q3k
ꢀꢀꢀ
公式一
114.其中,q为四元数(即目标粒子在当前图像帧中的旋转信息),q0为四元数的实部,i,j,k分别为是四元数的虚数单位,q1,q2,q3分别为是四元数中虚数单数i,j,k的虚部。
115.动画效果是指连续播放图像帧而形成运动影像的效果。比如,当应用程序是游戏时,所需实现的动画效果可以是剧情动画效果或过场动画效果。
116.三维动画制作软件是用来制作三维动画特效的软件。例如,houdini、maya、3dsmax等。其中,作为三维动画制作软件之首,houdini是完全基于节点模式设计的产物,其结构、操作方式等和其它的三维动画制作软件有很大的差异。
117.粒子系统为三维动画制作软件中一项重要功能,它在模仿自然现象、物理现象及空间扭曲上具备得天独厚的优势。例如,粒子系统能够模拟雨、雪、流水和灰尘等。随着功能的逐步完善,粒子系统几乎可以模拟任何富于联想的三维效果:烟云、火花、爆炸、暴风雪或者瀑布。为了增加物理现象的真实性,粒子系统通过空间扭曲控制粒子的行为,结合空间扭曲能对粒子流造成引力、阻挡、风力等仿真影响。通常粒子系统在三维空间中的位置与运动是由发射器控制的。发射器主要由一组粒子行为参数以及其在三维空间中的位置所表示。粒子行为参数可以包括粒子生成速度(即单位时间粒子生成的数目)、粒子初始速度向量(例如什么时候向什么方向运动)、粒子寿命(经过多长时间粒子湮灭)、粒子颜、粒子的形态、在粒子生命周期中的变化以及其它参数等等。
118.典型的粒子系统更新循环可以划分为两个不同的阶段:参数更新/模拟阶段以及渲染阶段。每个循环执行每一帧动画。其中,在模拟阶段,根据生成速度以及更新间隔计算新粒子的数目,每个粒子根据发射器的位置及给定的生成区域在特定的三维空间位置生成,并且根据发射器的参数初始化每个粒子的速度、颜、生命周期等等参数。然后检查每
个粒子是否已经超出了生命周期,一旦超出就将这些粒子剔出模拟过程,否则就根据物理模拟更改粒子的位置与特性。其中,物理模拟例如像将速度加到当前位置或者调整速度抵消摩擦这样简单,又例如可能像将外力考虑进去计算正确的物理抛射轨迹那样复杂。
119.下面,对本技术涉及的现有技术以及现有技术所存在的问题进行说明:
120.在实现万箭射击效果的现有方案中,通常先手动创建大量实现不同自转效果的弓箭旋转动画模型;在各弓箭从发射源发出后做自由落体运动的过程中,将各弓箭模型分别切换为上述实现不同自转效果的弓箭旋转动画模型中的任意一个,从而实现在万箭射击过程中弓箭的差异化自转效果。
121.然而,要实现在万箭射击过程中各弓箭进行差异化自转效果,需要手动创建大量具有不同自转效果的弓箭旋转动画模型,导致工作量急剧上升,动画效果制作效率低下。
122.基于上述存在的问题,为了在减少所需工作量、提高动画效果制作效率,本技术提供了一种动画效果实现方法、与该方法相对应的动画效果实现装置、可实施该动画效果实现方法的电子设备以及计算机可读存储介质。以下提供实施例对上述方法、装置、电子设备以及计算机可读存储介质进行详细说明。
123.为了使本技术的目的、技术方案更加清楚直观,下面将结合附图及实施例,对本技术实施例提供的方法进行详细说明。应理解的是,此处所描述的具体实施例仅仅用于解释本技术,并不用于限定本技术。
124.本技术实施例提供一种动画效果实现方法、装置、电子设备及存储介质。具体地,本技术实施例的动画效果实现可以由电子设备执行。其中,该电子设备可以为终端或者服务器等设备。该终端可以为智能手机、平板电脑、笔记本电脑、触控屏幕、游戏机、个人计算机(personal computer,pc)、个人数字助理(personal digital assistant,pda)等终端设备,终端还可以包括客户端,该客户端可以是游戏应用客户端、携带有游戏程序的浏览器客户端或即时通信客户端等。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集或者分布式系统,还可以是提供云服务、云数据库、云计算、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn、以及大数据和人工智能平台等基础云计算服务的云服务器。
125.需要注意的是,在下述对本技术提供的技术方案进行说明的过程中,是以终端作为执行主体为例进行说明的。在其他可能的实施方式中,也可以由服务器作为执行主体来执行本技术提供的技术方案,本技术实施例对于执行主体的类型不做限定。
126.下面,结合图1,对本技术实施例提供的动画效果实现方法进行说明,图1为本技术第一实施例提供的动画效果实现方法的流程示意图之一。
127.如图1所示,该动画效果实现方法包括:
128.s101、响应于目标粒子在空中飞行,获取目标粒子在当前图像帧中的速度向量。
129.在本实施例中,实现动画效果所采用的三维动画制作软件可以为以下任意一种:houdini、maya、3ds max等,对此不作任何限制。
130.三维动画制作软件中包括粒子系统,粒子系统通过发射器来发射成千上万的粒子来表示不规则模糊物体,来表示各种效果。例如,雨、雪、流水和灰尘等。又例如,当粒子的形状为弓箭时,粒子系统可实现从通过发射器按照预设粒子生成速度向预设方向发射弓箭,并控制弓箭进行自由落体运动,即实现沿某个方向发射出成千上万的弓箭,并且该成千上
万的弓箭在空中做抛物线运动的过程中进行差异化自转的动画效果。又例如,当粒子的形状为雨点时,粒子系统的使用就是实现从既定方向按照预设速度生成预设数量的雨点,即实现在某个方向生成源源不断的雨点,并且该源源不断的雨点在空中做抛物线运动的动画效果。
131.需要说明的是,粒子系统需要根据多个参数来发射粒子,例如发射源方向、粒子的生成速度、各粒子的发射速度、碰撞属性以及各粒子的形状、质量、体积大小等参数,对此不做任何限制。另外,为了模拟粒子在真实世界中的飞行效果,需要为整个动画场景中所有粒子或单个粒子设置重力场,在每个时间步长中所设置重力场的粒子会向下移动以模拟重力效果。其中,重力场中的重力加速度g的具体数值可以根据实际需求进行取值。例如,重力加速度g可以取值为:g=9.8n/kg,以此示例。可以理解的是,预设质量的弓箭以预设速度发射出,在空中做抛物线运动。那么为不同的弓箭设置不同的质量以及不同发射速度,不同的弓箭在空中将实现做不同运动轨迹的抛物线运动。
132.其中,碰撞属性为是否发生碰撞,例如将一个粒子的碰撞属性设置为可碰撞,即该粒子可以看作为一个碰撞体。
133.在本实施例中,在粒子系统中设置发射源方向、每秒的粒子发射量、各粒子的发射速度和质量、碰撞属性以及各粒子的形状、大小,并为各粒子设置重力场,即粒子系统在发射成千上万粒子后,各粒子从预设方向射出后在空中做抛物线运动。在每帧中记录了各个粒子的坐标信息以及各粒子对应的速度向量。其中,当前图像帧中粒子的速度向量为当前图像帧中粒子的坐标信息减去上一帧中粒子的坐标信息。其中,目标粒子为粒子系统发射的成千上万粒子中的任意一个粒子,即成千上万的粒子中每个粒子的运动设置方法一致,而具体参数设置可以相同也可以不同,这个可以根据实际需求来确定。
134.在响应于目标粒子在空中飞行做抛物线的过程中,获取目标粒子在当前图像帧中的速度向量。例如,在第t个图像帧时,目标粒子的运动状态为在空中飞行做抛物线运动,那么获取目标粒子在第t-1个图像帧中的速度向量。其中,一种可行的确定目标粒子在当前图像帧中的速度向量的方式可以为:在第t个图像帧时,目标粒子在三维空间中的坐标为a(x
t
,y
t
,z
t
);以及,在第t-1个图像帧时,目标粒子在三维空间中的坐标为b(x
t-1
,y
t-1
,z
t-1
)。因此,目标粒子在第t个图像帧中的速度向量为:
135.可选地,对目标粒子在当前图像帧中的速度向量进行归一化处理,获得目标粒子在当前图像帧中的单位速度向量。其中,对速度向量进行归一化处理可以将速度向量等比例缩放为单位速度向量,在后续应用速度向量的计算中则无需考虑速度向量的具体模长所带来的影响,只考虑速度向量的方向即可。
136.考虑到在实际运动中弓箭在空中做抛物线的运动的过程中,通过以速度方向为旋转轴进行自转,进一步增强万箭射击的效果,通过为不同的弓箭设置不同的自转角度,以实现各弓箭在空间中自转幅度存在差异性,提高了万箭在空中做抛物线的逼真性,通过程序化控制也提高了实现各弓箭自转的效率,避免了为实现各弓箭差异自转而手动key大量不同的弓箭旋转模型所带来的巨大工作量,极大地节省了人力。
137.s102、根据预设单位向量绕速度向量旋转,确定初始旋转信息。
138.其中,预设单位向量为三维空间中的单位向量。例如,预设单位向量可以从以下几
个三维单位向量中取:(1,0,0)、(0,1,0)、(0,0,1),对此不做任何限定,只要为三维单位向量即可。
139.在目标粒子在空中飞行做抛物线运动的过程中,为了模拟粒子在真实世界中做抛物线运动的同时会绕自身进行旋转操作,因此,根据预设单位向量绕速度向量进行旋转,确定初始的旋转信息,即以速度向量为轴向量。
140.可选地,根据预设单位向量绕速度向量进行旋转,确定初始的旋转信息。
141.可选地,初始旋转信息包括初始旋转矩阵。
142.下面,对根据预设单位向量绕目标粒子在当前图像帧中的速度向量进行旋转确定初始旋转矩阵的一种可能的实现方式示例性说明。
143.例如,目标粒子在当前图像帧中的单位速度向量为预设单位向量为首先,使用预设单位向量叉乘单位速度向量为得到向量即其中,向量与预设单位向量单位速度向量垂直。
144.其次,使用单位速度向量叉乘向量得到向量即
145.由此可知,单位速度向量为向量以及向量两两垂直。将向量向量均进行归一化处理,得到单位向量和那么由单位速度向量单位向量以及单位向量组成初始旋转矩阵,即
146.s103、根据初始旋转信息、速度向量以及目标粒子在当前图像帧的第一随机转动角度,确定第一旋转信息。
147.其中,第一随机转动角度是指目标粒子在当前图像帧中,绕(单位)速度向量进行旋转的转动角度。需要说明的是,对于同一目标粒子在不同的图像帧中对应的第一随机转动角度是不同的,这使得在连续图像帧播放过程中,目标粒子呈现连续的自转效果;另外,对于不同的目标粒子,在同一图像帧时各目标粒子的第一随机转动角度是不同的,这有效模拟了成千上万的粒子在做自由落体的过程中进行差异性自转,提高了动画效果的逼真性。
148.可选地,目标粒子在当前图像帧的第一随机转动角度由以下三个步骤得到:
149.步骤一、在第一数值范围中,为目标粒子确定随机值。
150.例如,在三维动画制作软件houdini中,从发射源发射出的粒子均具有各自的编号id,在houdini中通常通过粒子编号来实现对各个粒子的(差异化)控制。使用rand()函数为目标粒子的编号从0-1的范围中取一个随机值。例如,根据rand()函数为目标粒子的编号取得的随机数为0.45。
151.步骤二、确定第一数值范围与第二数值范围之间的映射关系,并根据映射关系将随机值对应的映射转动角度确定为目标粒子的相对转动角度。
152.在步骤一中第一数据范围为[0,1]的基础上进行说明,假定第二数据范围为[n1,n2],那么第一数值范围与第二数值范围之间的映射关系:从第一数据范围中取随机数r,那么将r映射到第二数据范围得到的映射转动角度为:r*(n
2-n1)+n1。又例如,第一数据范围为
[n3,n4]以及第二数据范围为[n1,n2],那从第一数据范围中取随机数r,那么将r映射到第二数据范围得到的映射转动角度为:(r-n3)*d+n1。其中,d=(n
2-n1)
÷
(n
4-n3)。上述两个例子均为均匀映射的方法,还可以非均匀映射例如指数映射等等,对此不做任何限制。
[0153]
将随机值对应的映射转动角度确定为目标粒子对应的相对转动角度。
[0154]
步骤三、根据相对转动角度和第一预设转动角度,确定目标粒子在当前图像帧的第一随机转动角度,第一预设转动角度大于第二数值范围内的转动角度。
[0155]
其中,对于粒子系统发射的成千上万的粒子拥有相同的第一预设转动角度,各粒子拥有的相对转动角度不同,相对转动角度的确定具有极大的随机性。因此,根据各粒子对应的相对转动角度,来实现成千上万的粒子进行差异化转动。
[0156]
可选地,将相对转动角度和第一预设转动角度之和,确定为目标粒子在当前图像帧的第一随机转动角度。
[0157]
可选地,初始旋转矩阵以(单位)速度向量为旋转轴,转动第一随机转动角度,得到目标粒子在当前图像帧的第一旋转信息,该第一旋转信息包括第一旋转矩阵。
[0158]
可选地,第一预设转动角度大于第二数值范围内的转动角度。由于相对转动角度的取值取决于第二数值范围,每个目标粒子的第一预设转动角度取相同的数值,以及目标粒子对应的第一随机转动角度等于相对转动角度与第一预设转动角度之和,因此在存在多个目标粒子时,该多个目标粒子之间对应的最小差值为0,多个目标粒子之间对应的最大差值为第二数值范围中最大值与最小值之差。那么第一预设转动角度大于第二数值范围内的转动角度这样的设置,可以使得多个目标粒子的转动角度的整体分布较为集中的同时,可控制多个目标粒子之间存在差异化并且可以控制转动角度的差异处于一个合理地范围内。例如,当第二数值范围为[1-10],第一预设角度为60时,目标粒子对应的相对转动角度的取值最大为10,最小为1,相对转动角度加上第一预设角度后得到目标粒子的随机转动角度,即目标粒子的第一随机转动角度的最大取值为60+10=70,以及目标粒子的第一随机转动角度的最小取值为60+1=61。需要说明的是,对于第二数值范围、第一预设转动角度的取值,可以根据实际情况来设定,对此不做任何限制。
[0159]
s104、根据第一旋转信息控制目标粒子在当前图像帧中进行转动。
[0160]
第一旋转信息表示目标粒子在当前图像帧中的旋转信息,具体的,在每个图像帧中目标粒子的旋转信息可以采用四元数表示。
[0161]
可选地,将第一旋转矩阵转换为四元数的表达形式,得到第一四元数;根据第一四元数控制目标粒子在当前图像帧中进行转动。
[0162]
需要说明的是,矩阵转换为四元数的前提为:该矩阵为正交矩阵。因此,旋转矩阵均为正交矩阵。将第一旋转矩阵转换为四元数的表达形式,得到第一四元数的具体实现方法可以参考现有技术中将矩阵转换为四元数的方法即可。
[0163]
在本实施例中,在目标粒子在空中飞行做自由落体运动的过程中,当前图像帧的旋转信息均通过步骤s101-s104来确定,当目标粒子每帧图像的旋转信息确定后,在连续播放图像帧的过程中,即可实现目标粒子在空中飞行做自由落体运动的过程中同步进行自转的动画效果。另外,需要强调说明的是,当存在成千上万个目标粒子同时在空中飞行做自由落体运动时,可以展现出该成千上万的目标粒子在空中自转效果均不同,成千上万的目标粒子进行差异化自转的动画效果更加符合实际情况。
[0164]
以目标粒子的形状为弓箭为例进行说明,当上千上万的弓箭在空中飞行做自由落体运动的过程中进行自转,该成千上万目标粒子之间的差异化自转,所形成的万箭射击的动画效果符合实际情况,因此这样的动画效果更加逼真。进一步,为了提高成千上万目标弓箭射击效果的逼真性,为不同的弓箭设置不同的质量以及不同发射速度。考虑到在实际运动中弓箭在空中做抛物线的运动的过程中,通过以速度方向为旋转轴进行自转,进一步增强万箭射击的效果,通过为不同的弓箭设置不同的自转角度,以实现各弓箭在空中自转幅度存在差异性,提高了万箭在空中做抛物线的逼真性,通过程序化控制也提高了实现各弓箭自转的效率,避免了为实现各弓箭差异自转而手动创建大量不同的弓箭旋转动画模型所带来的巨大工作量,极大地节省了人力、提供了动画效果制作效率。
[0165]
本技术所提供的动画效果实现方法,响应于目标粒子在空中飞行,获取目标粒子在当前图像帧中的速度向量;根据预设单位向量绕速度向量旋转,确定初始旋转信息;根据初始旋转信息、速度向量以及目标粒子在当前图像帧的第一随机转动角度,确定第一旋转信息;根据第一旋转信息控制目标粒子在当前图像帧中进行转动。一方面,通过程序化的控制大大提高了动画制作的效率;另一方面,在目标粒子在空中做自由落体的过程中,根据目标粒子在每个图像帧对应的第一随机转动角度确定目标粒子每帧图像的旋转信息后,在连续播放图像帧的过程中,即可实现目标粒子在空中飞行做自由落体运动的过程中同步进行自转的动画效果。进一步,通过对于粒子系统发射的成千上万的目标粒子拥有各自对应的第一随机转动角度,成千上万的粒子的第一随机转动角度的不同。因此,根据各目标粒子对应的第一随机转动角度,来实现成千上万的目标粒子在空中做自由落体的过程中进行差异化自转。
[0166]
下面,结合图2,对本技术第一实施例提供的动画效果实现方法进行说明,图2为本技术第一实施例提供的动画效果实现方法的流程示意图之二。
[0167]
如图2所示,该动画效果实现方法还包括:
[0168]
s201、响应于目标粒子与目标障碍物发生碰撞,在目标障碍物为静态物体时,获取目标粒子对应的目标碰撞状态。
[0169]
目标障碍物为与目标粒子发生碰撞的虚拟物体。障碍物包括静态物体和动态物体。例如,当例如,当目标障碍物为虚拟墙壁等静态物体时,则将该目标障碍物的运动状态属性设置为静态属性参数;又例如,当目标障碍物为虚拟人物等动态物体时,该目标障碍物的运动状态属性设置为动态属性参数。
[0170]
该目标障碍物具有碰撞属性,即目标粒子和目标障碍物发生碰撞后,目标粒子的碰撞状态包括以下任意一种:从碰撞点插入目标障碍物并转动预设帧数后停止转动、翻倒在目标碰撞物上。其中,目标粒子与目标障碍物的碰撞状态可以根据碰撞状态需求对目标粒子和目标障碍物的碰撞属性进行设定。其中,碰撞属性包括弹性、摩擦力等等。
[0171]
可选地,当目标粒子的目标碰撞状态为翻倒在目标碰撞物上时,在弓箭与地面发生碰撞时,显示弓箭与地面进行刚体解算,弓箭倒地效果即可。
[0172]
可选地,目标粒子的目标碰撞状态可以在目标粒子与目标障碍物发生碰撞之前确定。
[0173]
下面,对确定目标粒子的目标碰撞状态的一种可能的实现方式进行示例性说明。
[0174]
假定碰撞状态包括以下两种:从碰撞点插入目标障碍物并转动预设帧数后停止转
动、翻倒在目标碰撞物上。针对目标粒子在第三数值范围中随机取一个数(即称为随机数),将第三数值范围分为第四数值范围和第五数值范围。若该随机数位于第四数值范围,则将目标粒子的目标碰撞状态确定为从碰撞点插入目标障碍物并转动预设帧数后停止转动;若该随机数位于第五数值范围,则将目标粒子的目标碰撞状态确定为翻倒在目标碰撞物上。例如,第三数值范围为[0,1],第四数值范围为[0,0.45],第五数值范围为(0.45,1]。若目标粒子对应的随机数为0.23,则由于0.23位于第四数值范围内且第四数值范围对应的碰撞状态为从碰撞点插入目标障碍物并转动预设帧数后停止转动,因此,将将目标粒子的目标碰撞状态确定为从碰撞点插入目标障碍物并转动预设帧数后停止转动。
[0175]
s202、在目标粒子对应的目标碰撞状态为从碰撞点插入目标障碍物并转动预设帧数后停止转动的情况下,执行步骤s203-s206。
[0176]
s203、获取目标粒子在碰撞发生前一帧图像中的第一旋转信息。
[0177]
可选地,第一旋转信息的表达形式可以包括以任意一种:旋转矩阵、四元数。
[0178]
需要强调说明的是,在目标粒子从碰撞点插入目标障碍物后在转动预设帧的过程中,目标粒子转动的旋转轴是以该目标粒子在碰撞前一图像帧中的旋转信息来确定目标旋转轴,即在目标粒子从碰撞点插入目标障碍物后在转动预设帧的过程中目标粒子的目标旋转轴可以为目标粒子在碰撞前一图像帧中的速度方向。可以理解的是,当目标粒子在空中做抛物线运动过程的每一帧中,每一帧均具有目标粒子的速度向量;然而,当目标粒子与目标障碍物发生碰撞时,目标粒子的瞬时速度变为0,无速度方向。在目标粒子在与目标障碍物发生碰撞并插入目标障碍物中时,为了使目标粒子保持插入前的速度方向,因此考虑将在碰撞发生的前一图像帧中目标粒子的速度向量,确定目标粒子的目标旋转轴,即速度向量为目标粒子插入目标障碍物后进行转动的旋转轴。
[0179]
s204、根据目标粒子在碰撞发生前一帧图像中的第一旋转信息,确定目标旋转轴。
[0180]
基于上述步骤203获取了目标粒子在碰撞发生前一帧图像中的第一旋转信息,下面,针对第一旋转信息的不同的表达形式,对根据第一旋转信息来确定目标旋转轴的可能的实现方式进行示例性说明。
[0181]
在一种可能的实现方式中,当目标粒子在碰撞发生前一帧图像中的第一旋转信息的表达形式为旋转矩阵时,由于目标粒子的动画制作控件为三维空间,因此目标粒子在碰撞发生前一帧图像中的旋转矩阵为三维旋转矩阵。其中,三维旋转矩阵有三个旋转轴。可以将随机将目标粒子在碰撞发生前一帧图像中的三维旋转矩阵中的任意一个旋转轴或将目标粒子在碰撞发生前一帧图像中的速度方向(旋转轴),确定为目标粒子在当前图像帧中转动所围绕的目标旋转轴。
[0182]
在一种可能的实现方式中,当目标粒子在碰撞发生前一帧图像中的第一旋转信息的表达形式为四元数时,首先将目标粒子在碰撞发生前一帧图像中的四元数转换为旋转矩阵的形式,后续可以通过随机将目标粒子在碰撞发生前一帧图像中的三维旋转矩阵中的任意一个旋转轴或将目标粒子在碰撞发生前一帧图像中的速度方向(旋转轴),为目标粒子确定在当前图像帧中转动所围绕的目标旋转轴。
[0183]
s205、根据目标粒子在碰撞发生前一帧图像中的第一旋转信息、目标旋转轴以及第二随机转动角度,确定目标粒子在当前图像帧的第二旋转信息。
[0184]
可选地,在预设帧数内第二随机转动角度的分布状态至少包括以下任意一种:线
性分布、非线性分布以及指数分布。
[0185]
可选地,在初始旋转信息为旋转矩阵的表达形式时(即初始旋转信息为初始旋转矩阵),或在初始旋转信息为四元数的表达形式时将四算数转换为旋转矩阵的表达形式得到的旋转矩阵为初始旋转矩阵;初始旋转矩阵以目标旋转轴为旋转轴,转动第二随机转动角度,得到目标粒子在当前图像帧的第二旋转信息。其中,第二旋转信息的表达形式包括旋转矩阵和四元数。
[0186]
需要强调说明是,每个目标粒子在预设帧数内的第二随机转动角度的分布状态可以完全相同,可以部分相同,也可以完全不同,这个可以根据实际需求进行设定,对此不做任何限制。另外,目标粒子在每个图像帧中的第二随机转动角度随机取值,因此在同时存在成千上万个目标粒子时,各个目标粒子具有差异化的第二随机转动角度。
[0187]
可选地,在第一旋转信息的表达形式为四元数时,上述“根据目标粒子在碰撞发生前一帧图像中的第一旋转信息、目标旋转轴以及第二随机转动角度,确定目标粒子在当前图像帧的第二旋转信息。”的一种可能的实现方式包括如下步骤:
[0188]
s2051、将目标粒子在碰撞发生前一帧图像中的四元数转换为旋转矩阵的表达形式,得到第二旋转矩阵并根据第二旋转矩阵确定目标旋转轴;
[0189]
可选地,步骤“根据第二旋转矩阵确定目标旋转轴”的实现方式可以参考步骤s204中“根据目标粒子在碰撞发生前一帧图像中的第一旋转信息,确定目标旋转轴。”的具体实现方式。
[0190]
s2052、根据第二旋转矩阵、目标旋转轴以及第二随机转动角度,确定目标粒子在当前图像帧的第二四元数。
[0191]
可选地,第二旋转矩阵以目标旋转轴为旋转轴,转动第二随机转动角度,得到目标粒子在当前图像帧的第二四元数。
[0192]
s206、根据第二旋转信息控制目标粒子在当前图像帧中进行转动。
[0193]
可选地,基于上述步骤s205确定了目标粒子在当前图像帧的第二旋转信息,根据第二旋转信息控制目标粒子在当前图像帧中进行转动。
[0194]
可选地,在第二旋转信息的表达形式为四元数时,如步骤s2052中得到目标粒子在当前图像帧的第二四元数,因此,根据第二四元数控制目标粒子在当前图像帧中进行转动。
[0195]
在目标粒子与目标障碍物发生碰撞即结束在空中做自由落体运动,在目标障碍物为静态物体以及目标粒子的目标碰撞状态为从碰撞点插入目标障碍物并转动预设帧数后停止转动的情况下,目标粒子与目标障碍物发生碰撞后的预设帧数内进行转动的方式均需要通过步骤s204-s206来确定并进行控制,当目标粒子每帧图像的旋转信息确定后,在连续播放图像帧的过程中,即可实现目标粒子在从碰撞点插入目标障碍物并转动预设帧数后停止转动的动画效果。另外,需要强调说明的是,当存在成千上万的目标粒子同一时刻或不同时刻从碰撞点插入目标障碍物时,可以展现出该成千上万的目标粒子从碰撞点插入目标障碍物并转动预设帧数后停止转动的动画效果,以及因旋转轴、第二随机转动角度不同使得各目标粒子在每个图像帧中的差异化转动效果,这种成千上万的目标粒子进行差异化转动的动画效果更加符合实际情况。
[0196]
以目标粒子的形状为弓箭为例进行说明,当成千上万的弓箭从碰撞点插入目标障碍物(即结束在空中飞行做自由落体运动)后转动预设帧数后停止转动,该成千上万的目标
粒子之间的差异化转动效果,所形成的万箭射击到目标障碍物上各个弓箭进行差异性转动的动画效果符合实际情况,因此这样的动画效果更加逼真。
[0197]
本技术所提供的动画效果实现方法,响应于目标粒子与目标障碍物发生碰撞,在目标障碍物为静态物体时,获取目标粒子对应的目标碰撞状态。在目标粒子对应的目标碰撞状态为从碰撞点插入目标障碍物并转动预设帧数后停止转动的情况下,执行以下步骤:获取目标粒子在碰撞发生前一帧图像中的第一旋转信息。根据目标粒子在碰撞发生前一帧图像中的第一旋转信息,确定目标旋转轴。根据目标粒子在碰撞发生前一帧图像中的第一旋转信息、目标旋转轴以及第二随机转动角度,确定目标粒子在当前图像帧的第二旋转信息。根据第二旋转信息控制目标粒子在当前图像帧中进行转动。
[0198]
下面,结合图3,以目标粒子为目标弓箭、目标障碍物为地面(地面的运动状态为静态)时,对弓箭与地面碰撞后,弓箭插入地面,弓箭倒地效果进行示意说明,图3为本技术第一实施例提供的万箭射击的动画效果示意图之一。
[0199]
如图3所示,包括大量的弓箭以及地面。在图3中,一部分的弓箭呈现插入地面的画面效果,一部分的弓箭呈现倒地的画面效果。需要说明的是,当弓箭插入地面后,在预设时长内做不同幅度的转动的动态画面未体现在图3中。
[0200]
下面,结合图4,对本技术第一实施例提供的动画效果实现方法进行说明,图4为本技术第一实施例提供的动画效果实现方法的流程示意图之三。
[0201]
如图4所示,该动画效果实现方法还包括:
[0202]
s401、响应于目标粒子与目标障碍物发生碰撞,在目标障碍物为动态物体的情况下,获取目标粒子在碰撞发生前一帧图像中的第一旋转信息。
[0203]
可选地,处于动态的目标障碍物可以为虚拟动漫人物或虚拟植物或在虚拟动物等等,对此不作任何限制,只要其处于运动的运动状态即可。
[0204]
可选地,关于步骤“获取目标粒子在碰撞发生前一帧图像中的第一旋转信息。”的说明和解释,可以参照上述针对步骤s203的说明和解释,且能达到相同的技术效果,为避免重复,这里不再赘述。
[0205]
s402、根据目标障碍物发生碰撞的位置和目标障碍物中分布在不同位置的多个关键点之间的位置关系,在多个关键中确定目标关键点。
[0206]
需要说明的是,动态物体上分布多个关键点。其中,在每个关键点对应的旋转信息会随动态物体的运动而发生改变。
[0207]
下面,结合图5,以目标障碍物为虚拟人物为例,对虚拟人物包括多个关键点进行示例性说明,图5为本技术第一实施例提供的目标障碍物包括多个关键点的示意图。
[0208]
以动态物体为虚拟人物为例进行说明,为了进一步逼真模拟虚拟人物在运动时身体各部位的动态变化,在虚拟人物身体上设置了多个关键点,该多个关键点分别分布在决定人体变动的关键部位处。如图5所示,虚拟人物上包括大量的关键点,每个关键点具有旋转信息。例如,在虚拟人物运动时,各关键点的旋转信息会变化(例如旋转信息的表达形式为四元数)。其中,关键点的旋转信息能够表征该关键点的运动朝向,即能够反映在虚拟人物运动时该关键点的旋转朝向状态信息。
[0209]
在本实施例中,在与目标粒子发生碰撞的目标障碍物的运动状态处于动态时,要根据该处于动态的目标障碍物为目标粒子确定朝向信息,即目的是想让插入目标障碍物的
目标粒子跟随目标障碍物的运动进行跟随运动。
[0210]
可选地,在目标障碍物中分布在不同位置的多个关键点中,将与目标障碍物发生碰撞的位置距离最近的关键点,确定为目标关键点。
[0211]
s403、根据目标关键点在当前图像帧的旋转信息和目标粒子在碰撞发生前一帧图像中的第一旋转信息,得到目标粒子在当前图像帧的第三旋转信息。
[0212]
可选地,旋转信息的表达形式包括四元数和旋转矩阵。
[0213]
可选地,在旋转信息的表达形式为四元数时,获取目标关键点在当前图像帧的四元数,以及获取目标粒子在碰撞发生前一帧图像中的四元数。
[0214]
可选地,在旋转信息的表达形式为四元数时,根据目标关键点在当前图像帧的四元数叉乘目标粒子在碰撞发生前一帧图像中的四元数,确定目标粒子在当前图像帧的第三四元数,即第三四元数为第三旋转信息。
[0215]
s404、根据第三旋转信息控制目标粒子在当前图像帧中进行转动。
[0216]
基于上述步骤s403确定了第三旋转信息后,在旋转信息的表达形式为四元数时(第三四元数即为第三旋转信息),根据第三四元数控制目标粒子在当前图像帧中进行转动。
[0217]
在目标粒子与目标障碍物发生碰撞即结束在空中做自由落体运动,在目标障碍物为动态物体的情况下,目标粒子在当前图像帧的旋转信息均通过步骤s402-s404来确定,当目标粒子每帧图像的旋转信息确定后,在连续播放图像帧的过程中,即可实现目标粒子跟随目标障碍物的运动进行跟随运动的动画效果。另外,需要强调说明的是,当存在成千上万个目标粒子与同一个目标障碍物发生碰撞时,在成千上万的目标粒子碰撞在目标障碍物的不同位置时,可以展现出该成千上万的目标粒子在插入目标障碍物进行差异性转动的动画效果,成千上万的目标粒子进行差异化转动的动画效果更加符合实际情况。
[0218]
本技术所提供的动画效果实现方法,响应于目标粒子与目标障碍物发生碰撞,在目标障碍物为动态物体的情况下,获取目标粒子在碰撞发生前一帧图像中的第一旋转信息;根据目标障碍物发生碰撞的位置和目标障碍物中分布在不同位置的多个关键点之间的位置关系,在多个关键中确定目标关键点;根据目标关键点在当前图像帧的旋转信息和目标粒子在碰撞发生前一帧图像中的第一旋转信息,得到目标粒子在当前图像帧的第三旋转信息;根据第三旋转信息控制目标粒子在当前图像帧进行转动。当目标粒子与动态目标障碍物发生碰撞以及目标粒子插入目标障碍物中,实现了目标粒子跟随动态目标障碍物的动态效果,进一步提高了动画效果的逼真度;通过这种程序化的方式控制目标粒子跟随目标障碍物运动的方式,避免了了因需手动创建所需的动画模型所带来的巨大的工作量,大大提高了动画制作的效率。另外,通过这种程序化的方式,使得目标粒子插入动态目标障碍物中跟随目标障碍物进行跟随运动的这个复杂动画效果实现起来更加简单。
[0219]
下面,结合图6,以目标粒子的形状为弓箭、目标障碍物为虚拟人物(运动状态为动态)时,对弓箭与地面碰撞后,弓箭插入虚拟人物身体内在预设数量的图像帧内的转动效果进行示意说明,图6为本技术第一实施例提供的万箭射击的动画效果示意图之二。
[0220]
如图6所示,包括大量的弓箭、地面以及虚拟人物。在图6中,一部分的弓箭插入虚拟人物身体的画面效果。需要说明的是,当弓箭插入虚拟人物身体后,弓箭跟随虚拟人物进行跟随转动的动态画面未体现在图6中。
[0221]
下面,结合图7-图10以及具体的示例,对本技术提供的动画效果实现方法进行进一步说明,图7为本技术第一实施例提供的粒子在空中做抛物线运动的操作流程图,图8为本技术第一实施例提供的粒子插中地面后变速旋转的操作流程图,图9为本技术第一实施例提供的粒子在打中并跟随目标障碍物转动的操作流程图,图10为本技术第一实施例提供的粒子打中地面后倒地的操作流程图。
[0222]
为了更好的理解本技术的技术方案,在对图7-图10进行描述之前,对粒子系统进行简单的介绍。发射粒子前,通过粒子系统设置多个参数来发射粒子。其中,粒子系统就是一些粒子的集合,通过设定发射源在发射粒子流的同时创建各种动画效果。也可以理解为,粒子系统是一个对象,而发射的粒子是子对象。将粒子系统作为一个整体来设置动画,并且随时调整粒子系统的属性,以控制每一个粒子的行为。具体地,用于控制粒子行为的属性包括以下至少一种:发射源方向、每秒的粒子发射量、各粒子的发射速度和质量、碰撞属性以及各粒子的形状、大小等参数,对此不做限制。另外,为了模拟粒子在真实世界中的飞行效果,需要为动画场景中所有粒子或单个粒子添加定向力,例如重力、风力。比如,添加了重力的粒子可以实现自由落体运动的动画效果、添加了风力的粒子可以实现在风力的作用下进行飘动、飞舞等动画效果。其中,重力加速度g以及风力大小可以根据实际需求进行取值,例如重力加速度g的取值可以为:g=9.8n/kg。碰撞属性为是否可发生碰撞,碰撞属性包括3个参数,分别为:弹力、摩擦力以及偏移量。通过为该三个参数设置不用的值,实现不同的粒子在相互碰撞后展现不同的碰撞并弹开的动画效果。例如,将一个粒子设置为可碰撞,即该粒子可以看作为一个碰撞体,可实现和其他粒子接触后碰撞后弹开的动画效果。需要说明的是,在碰撞体还分为主动碰撞物体和被动碰撞物体,在主动碰撞物体和被动碰撞物体在碰撞后,被动碰撞物体的位置不改变而主动碰撞物体被弹开。
[0223]
在本实施例中,在粒子系统中设置发射源方向、每秒的粒子发射量、各粒子的发射速度和质量、碰撞属性以及各粒子的形状、大小,并为各粒子设置重力,即粒子系统在发射成千上万粒子后,各粒子从预设方向射出后在空中做抛物线运动。在每帧图像中记录了各个粒子的坐标信息以及各粒子对应的速度向量。其中,当前图像帧中粒子的速度向量为当前图像帧中粒子的坐标信息减去上一帧中粒子的坐标信息。其中,粒子为粒子系统发射的成千上万粒子中的任意一个粒子。
[0224]
如图7所示,粒子在空中飞行做抛物线运动的过程中,会记录或保存历史帧图片中粒子的速度向量,例如软件会记录并保存粒子在前一图像帧中的速度向量(步骤701,为了表述的简洁性,在以下描述中省略“步骤”两字),对701中记录的粒子的速度向量进行归一化处理得到单位速度向量(702),以单位速度向量为旋转轴,其他两个轴为自由状态来确定初始旋转矩阵(703)。针对粒子编号对应的粒子(707),使用随机函数rand()实现从0-1中取随机数(708)。例如,取到的随机数为0.45。将随机数作为映射函数(fit()函数中的一个参数。需要说明的是,由于随机函数rand()其返回值区间的局限性,通过引入fit()函数来扩展返回值的取值范围。fit()函数包括1个参数称之为n,该参数n的取值范围为[0,1],fit()函数内部写有一个最大值num_max、一个最小值num_min。例如,fit(n)函数中n的取值范围为[0,1],则fit(n)函数用于将n从数据区间[0,1]均匀映射到数据区间[num_min,num_max]。fit()函数根据参数n的大小,从数据区间[num_min,num_max]中确定一个数作为fit(n)函数的返回值。
[0225]
将步骤708中确定的随机数作为fit()函数的参数n。根据映射函数(fit函数)中的最大值、最小值以及参数n,确定一个数(709)并将该数作为该粒子对应的相对转动角度。例如,当随机数为0.45、fit()函数中的最大值为70、最小值为40,那么该粒子对应的相对转动角度可以取:40+(70-40)*0.45=53.5。需要理解的是,为了使每个粒子的转动角度不一样,将统一设置的第一预设转动角度(711)与各粒子对应的相对转动角度相加得到各粒子在当前图像帧中的转动角度(710)。之后,将702中得到单位速度向量作为704中的旋转轴,将703中得到初始旋转矩阵作为704中的初始旋转矩阵以及将步骤710得到的转动角度作为704中的转动角度,根据旋转轴、初始旋转矩阵以及转动角度确定粒子在空中飞行过程中的旋转矩阵(704)。将旋转矩阵转换为四元数(705),将粒子的四元数存储为朝向信息(706),根据朝向信息控制粒子在空中飞行的过程中进行转动,以实现粒子在空中飞行的过程中进行转动的动画效果。
[0226]
如图8所示,当检测到粒子的运动状态为静止(718)时,确认粒子打中目标障碍物(例如,地面),则在719中确定input==1。其中,当input==1时,确定粒子打中目标障碍物并且该目标障碍物为静态物体;当input==0时,确定粒子未打中目标障碍物并仍处于自由落体运动状态;将(719)中input的值输入至选择模块对应的状态参数中,当(719)中input的取值为1时,那么将输入1作为选择模块的选择结果;当(719)中input的取值为0时,那么将输入2作为选择模块的选择结果。具体地,当719中input的取值为0时,那么将输入2作为选择模块的选择结果。之后,那么将717中粒子的四元数作为选择模块输入2的取值(720),根据该四元数控制粒子进行转动(706);当719中input的取值为1时,那么将输入1作为选择模块的选择结果。那么将705中粒子的四元数作为选择模块输入1的取值(720),根据该四元数控制粒子进行转动(706)。
[0227]
下面,对输入1对应的四元数(705)的确定步骤进行说明。
[0228]
首先,将717中粒子当前的四元数转换为旋转矩阵,并从该旋转矩阵中提取轴向(722),确定出3个轴向分别为轴向1、轴向2、轴向3。从该三个轴向中任意选取一个轴向,作为旋转轴。例如,将轴2确定为旋转轴。在粒子打中目标障碍物的同时开始计帧数(例如从1开始计数,如1、2、3等)。(需要说明的是,当存在上千上万个粒子时,每个粒子各自进行计帧数。)使用映射fit()函数以及对应的参数,使每个粒子在计帧数后开始转动一定角度且该粒子该固定帧数的转动角度呈非线性变化,并在到达固定帧数后使粒子停止转动。例如,fit函数的参数设置为(0,30,0,1),那么当粒子的计帧数(步骤712)在1-30之间时,将该计帧数映射成0-1之间的值(步骤713)。进一步,为了使粒子在该30帧内转动角度呈非线性变化(714),则通过ramp函数中的非线性数据分布对转动角度进行映射,得到映射后的转动角度,将此转动角度作为723中的输入1。将(709)得到的相对转动角度作为(723)的输入1,以及将(714)步骤得到的转动角度作为(723)的输入2,使723中的输入1和输入2进行相乘(723),得到粒子在当前图像帧的转动角度信息。将该转动角度信息作为704中的转动角度、将721中的旋转矩阵作为704中的初始旋转矩阵、将722中的任意一个轴向作为704中的旋转轴,根据初始转动矩阵、旋转轴以及转动角度,确定旋转矩阵并将该旋转矩阵转换为四元数(705)。
[0229]
如图9所示,在确定粒子卡在目标障碍物内且该目标障碍物为动态物体时(728),确定对比模块(729)中input的取值为1,则输出的布尔值为1。在布尔值为1时,将布尔值=1
作为选择模块的状态参数时,则选择将输入1作为726中的选择模块的结果,并将该结果作为目标四元数朝向信息(727),以控制粒子进行转动;或者,在确定粒子未卡在目标障碍物内时(728),确定对比模块(729)中input的取值为0则输出的布尔值为0。在布尔值为0时,将布尔值=0作为选择模块的状态参数时,则选择将输入2作为726中的选择模块的结果,并将该输入结果作为目标四元数朝向信息(727),以控制粒子进行转动。
[0230]
下面,分别对确定(726)中输入1对应的四元数和确定输入2对应的四元数的实现方式进行说明。
[0231]
首先,对确定输入2对应的四元数的实现方式进行说明。具体地,将724中的四元数朝向信息作为输入2的值。
[0232]
接下来,对确定输入1对应的四元数的实现方式进行说明。具体地,首先获取粒子与目标障碍物发生碰撞并插入目标障碍物时粒子与目标障碍物的碰撞位置(730)。将与粒子发生碰撞事件的目标障碍物作为731的文件源,在目标障碍物对应的多个关键点中,将距离该碰撞位置最近的一个关键点出(即点云搜索),并将该关键点的参数信息过滤出来(732)。参数信息例如可以为四元数朝向信息、速度方向量信息等等。在本技术技术方案中将该关键点对应的四元数信息过滤出来,得到过滤结果即该关键点对应的四元数信息(732)。将该关键点的四元数作为725中的四元数1,以及将724中的四元数作725中的四元数1。在(725)中将四元数1叉乘四元数2得到目标四元数,即725中的叉乘结果。
[0233]
下面,结合图10,对粒子与目标障碍物发生碰撞后,目标障碍物保持不动且粒子翻倒在目标障碍上的动画效果的实现方式进行说明。
[0234]
在介绍图10之前,需要进行以下说明:在三维动画制作软件中,一般碰撞动态模拟一般由碰撞物体、解算器以及力组成。其中,碰撞物体包含了用于描述正在模拟某些事物的必备参数,例如几何信息(如球体、立方体等)、密度、温度、质量、摩擦力、初始位置、旋转、速度等。解算器负责计算模拟碰撞体在真实世界中进行运动的行为参数,例如行为参数包括碰撞体的速度向量以及旋转信息等等物理动力学参数。其中,解算器可以查看碰撞体的运动状态以及使用其内部的计算逻辑对碰撞体在每个时间时长的运动行为参数进行计算。力是可以施加到物体上的信息(任何属性的物体均可,不限定于碰撞体)。其中,力可以附加到动画场景中的所有物体上,或者也可以附加到单个物体上。这意味着受力物体会因为在受力的作用改变其运动行为。例如,将重力作用于碰撞体。当解算器获知碰撞体的受力包含重力作用力时,那么解算器就要在每个时间步长中将碰撞体向下拉动,以模拟碰撞体在重力下的运动效果。
[0235]
如图10所示,通过合并节点735对粒子和目标障碍物建立碰撞关系。其中,碰撞关系意味着当粒子和目标障碍物发生碰撞时,会改变其形状和/或运动行为和/或运动方向。通过合并节点737对刚体解算器736和合并节点735所建立碰撞关系的2个碰撞体进行绑定,以使在粒子和目标障碍物发生碰撞后,刚体解算器736对粒子和目标障碍物的运动状态参数进行计算。给粒子和目标障碍物均施加了重力,以使刚体解算器736在对粒子和目标障碍物的运动状态参数进行计算的过程中考虑重力作用,从而实现各碰撞体在重力下的运动效果;根据以上设置,输出粒子与目标障碍物碰撞后的运动效果(739),即粒子与目标障碍物发生碰撞,随后粒子翻倒在目标障碍上。
[0236]
下面,结合图11,以目标粒子的形状为弓箭,目标障碍物为地面(即静态物体)、虚
拟人物(即动态物体)为例,对成千上万的弓箭从发射器发出,在空中做自由落体运动过程中进行自转、以及弓箭与地面或虚拟人物发生碰撞后的转动的动画效果进行示例性说明,图11为本技术第一实施例提供的万箭射击的动画效果示意图之三。
[0237]
如图11所示,包括大量的弓箭、地面以及虚拟人物。在图11中,一部分的弓箭呈现插入地面的画面效果,一部分的弓箭呈现翻倒在地面上的画面效果,一部分的弓箭插入虚拟人物身体的画面效果。需要说明的是,弓箭在空中飞行做自由落体运动的过程中进行自转的动态画面未体现在图11中,以及弓箭插入地面后,在预设图像帧数内做不同幅度的转动的动态画面未体现在图11中,以及当弓箭插入虚拟人物身体后,弓箭跟随虚拟人物进行跟随转动的动态画面未体现在图11中。
[0238]
下面对本发明提供的动画效果实现装置进行描述,下文描述的动画效果实现装置与上文描述的动画效果实现方法可相互对应参照。
[0239]
图12为本技术第二实施例提供的动画效果实现装置的结构示意图。如图12所示,该动画效果实现装置包括:获取模块1201、第一处理模块1202、确定模块1203以及控制模块1204。
[0240]
获取模块1201,用于响应于目标粒子在空中飞行,获取所述目标粒子在当前图像帧中的速度向量;
[0241]
第一处理模块1202,用于根据预设单位向量绕所述速度向量旋转,确定初始旋转信息;
[0242]
确定模块1203,用于根据所述初始旋转信息、所述速度向量以及所述目标粒子在当前图像帧的第一随机转动角度,确定第一旋转信息;
[0243]
控制模块1204,用于根据所述第一旋转信息控制所述目标粒子在所述当前图像帧中进行转动。
[0244]
可选地,所述确定模块1203具体用于:
[0245]
在第一数值范围中,为所述目标粒子确定随机值;
[0246]
确定所述第一数值范围与第二数值范围之间的映射关系,并根据所述映射关系将所述随机值对应的映射转动角度确定为所述目标粒子的相对转动角度;
[0247]
根据所述相对转动角度和第一预设转动角度,确定所述目标粒子在所述当前图像帧的第一随机转动角度,所述第一预设转动角度大于所述第二数值范围内的转动角度。
[0248]
可选地,所述初始旋转信息包括初始旋转矩阵;
[0249]
所述确定模块1203具体用于:
[0250]
所述初始旋转矩阵以所述速度向量为旋转轴,转动所述第一随机转动角度,得到所述目标粒子在所述当前图像帧的第一旋转矩阵。
[0251]
可选地,所述控制模块1204具体用于:
[0252]
将所述第一旋转矩阵转换为四元数的表达形式,得到第一四元数;
[0253]
根据所述第一四元数控制所述目标粒子在所述当前图像帧中进行转动。
[0254]
可选地,所述装置还包括第二处理模块,所述第二处理模块具体用于:
[0255]
响应于所述目标粒子与所述目标障碍物发生碰撞,在所述目标障碍物为静态物体的情况下,获取所述目标粒子对应的目标碰撞状态并控制所述目标粒子的运动状态符合所述目标碰撞状态。
[0256]
可选地,所述碰撞状态包括以下任意一种:从碰撞点插入所述目标障碍物并转动预设帧数后停止转动、翻倒在所述目标碰撞物上;
[0257]
在所述目标粒子对应的目标碰撞状态为从碰撞点插入所述目标障碍物并转动预设帧数后停止转动的情况下,所述第二处理模块具体用于:
[0258]
获取所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息;
[0259]
根据所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息和所述目标粒子在当前图像帧中的第二随机转动角度,确定第二旋转信息;
[0260]
根据所述第二旋转信息控制所述目标粒子在所述当前图像帧中进行转动。
[0261]
可选地,在所述预设帧数内所述第二随机转动角度的分布状态至少包括以下任意一种:线性分布、非线性分布以及指数分布;
[0262]
所述第二处理模块具体用于:
[0263]
根据所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息,确定目标旋转轴;
[0264]
根据所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息、所述目标旋转轴以及所述第二随机转动角度,确定所述目标粒子在当前图像帧的第二旋转信息。
[0265]
可选地,所述旋转信息包括四元数;
[0266]
所述第二处理模块具体用于:
[0267]
将所述目标粒子在所述碰撞发生前一帧图像中的四元数转换为旋转矩阵的表达形式,得到第二旋转矩阵并根据所述第二旋转矩阵确定目标旋转轴;
[0268]
根据所述第二旋转矩阵、所述目标旋转轴以及所述第二随机转动角度,确定所述目标粒子在当前图像帧的第二四元数。
[0269]
可选地,所述方法还包括第三处理模块,所述第三处理模块具体用于:
[0270]
响应于所述目标粒子与所述目标障碍物发生碰撞,在所述目标障碍物为动态物体的情况下,获取所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息;
[0271]
根据所述目标障碍物发生碰撞的位置和所述目标障碍物中分布在不同位置的多个关键点之间的位置关系,在所述多个关键中确定目标关键点;
[0272]
根据所述目标关键点在当前图像帧的旋转信息和所述目标粒子在所述碰撞发生前一帧图像中的第一旋转信息,得到所述目标粒子在当前图像帧的第三旋转信息;
[0273]
根据所述第三旋转信息控制所述目标粒子在所述当前图像帧中进行转动。
[0274]
可选地,所述旋转信息包括四元数;
[0275]
所述第三处理模块具体用于:
[0276]
根据所述目标关键点在当前图像帧的四元数叉乘所述目标粒子在所述碰撞发生前一帧图像中的四元数,确定所述目标粒子在当前图像帧的第三四元数。
[0277]
可选地,所述第三处理模块具体用于:
[0278]
在所述目标障碍物中分布在不同位置的多个关键点中,将与所述目标障碍物发生碰撞的位置距离最近的关键点,确定为目标关键点。
[0279]
本实施例提供的动画效果实现装置,可用于执行上述动画效果实现方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
[0280]
图13为本技术第三实施例提供的电子设备的硬件结构示意图,如图13所示,本实
施例的电子设备1300包括:处理器1301以及存储器1302;其中
[0281]
存储器1302,用于存储计算机执行指令;
[0282]
处理器1301,用于执行存储器存储的计算机执行指令,以实现上述实施例中动画效果实现方法所执行的各个步骤。具体可以参见前述方法实施例中的相关描述。
[0283]
可选地,存储器1302既可以是独立的,也可以跟处理器1301集成在一起。
[0284]
当存储器1302独立设置时,该电子设备还包括总线1303,用于连接所述存储器1302和处理器1301。
[0285]
本技术第四实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上电子设备所执行的动画效果实现方法任一实施例提供的方案。
[0286]
本技术第五实施例还提供一种计算机程序产品,程序产品包括:计算机程序,计算机程序存储在可读存储介质中,电子设备的至少一个处理器可以从可读存储介质读取计算机程序,至少一个处理器执行计算机程序使得电子设备执行上述任一实施例提供的方案。
[0287]
在本技术所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0288]
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本技术各个实施例所述方法的部分步骤。
[0289]
应理解,上述处理器可以是中央处理模块(英文:central processing unit,简称:cpu),还可以是其他通用处理器、数字信号处理器(英文:digital signal processor,简称:dsp)、专用集成电路(英文:application specific integrated circuit,简称:asic)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
[0290]
存储器可能包含高速ram存储器,也可能还包括非易失性存储nvm,例如至少一个磁盘存储器,还可以为u盘、移动硬盘、只读存储器、磁盘或光盘等。
[0291]
总线可以是工业标准体系结构(industry standard architecture,isa)总线、外部设备互连(peripheral component,pci)总线或扩展工业标准体系结构(extended industry standard architecture,eisa)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本技术附图中的总线并不限定仅有一根总线或一种类型的总线。
[0292]
上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
[0293]
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
[0294]
最后应说明的是:以上各实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述各实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。