一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

物理特效渲染方法、装置、计算机设备和存储介质与流程

2021-11-25 02:25:00 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,特别是涉及一种物理特效渲染方法、装置、计算机设备、存储介质和计算机程序产品。


背景技术:

2.随着计算机技术的发展,粒子发射插件越来越广泛地被应用于游戏、动画等的开发中。粒子发射插件可以在三维空间中发射粒子,并通过对发射的粒子进行渲染可以得到物理特效。
3.传统技术中,粒子发射插件无法对粒子的运动进行物理仿真,需要借助于外部工具在离线的情况下进行物理仿真,并将外部工具的模拟结果手动导入粒子发射插件中来实现物理特效的渲染,导致粒子发射插件在进行物理特效渲染时效率低。


技术实现要素:

4.基于此,有必要针对上述技术问题,提供一种能够提高物理特效渲染效率的物理特效渲染方法、装置、计算机设备、存储介质和计算机程序产品。
5.一种物理特效渲染方法,所述方法包括:获取由粒子发射插件发射的物理特效粒子在上一帧中的物理特效数据;获取对场景管理类进行实例化得到的第一目标实例;所述场景管理类继承自所述粒子发射插件提供的目标基类;通过所述第一目标实例调用集成于所述粒子发射插件中的粒子模拟工具的场景管理接口,以在所述粒子模拟工具的场景管理器中,基于所述上一帧中的物理特效数据计算所述物理特效粒子在当前帧的运动状态信息;基于所述当前帧的运动状态信息更新所述上一帧中的物理特效数据,以渲染得到当前帧中的物理特效。
6.一种物理特效渲染装置,所述装置包括:数据获取模块,获取由粒子发射插件发射的物理特效粒子在上一帧中的物理特效数据;实例获取模块,用于获取对场景管理类进行实例化得到的第一目标实例;所述场景管理类继承自所述粒子发射插件提供的目标基类;数据计算模块,用于通过所述第一目标实例调用集成于所述粒子发射插件中的粒子模拟工具的场景管理接口,以在所述粒子模拟工具的场景管理器中,基于所述上一帧中的物理特效数据计算所述物理特效粒子在当前帧的运动状态信息;数据更新模块,用于基于所述当前帧的运动状态信息更新所述上一帧中的物理特效数据,以渲染得到当前帧中的物理特效。
7.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:获取由粒子发射插件发射的物理特效粒子在上一帧中的物理特效数据;获取对场景管理类进行实例化得到的第一目标实例;所述场景管理类继承自所述粒子发射插件提供的目标基类;通过所述第一目标实例调用集成于所述粒子发射插件中的粒子模拟工具的场景管理接口,以在所述粒子模拟工具的场景管理器中,基于所述上一帧中的物理特效数据计算所述物理特效粒子在当前帧的运动状态信息;基于所
述当前帧的运动状态信息更新所述上一帧中的物理特效数据,以渲染得到当前帧中的物理特效。
8.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:获取由粒子发射插件发射的物理特效粒子在上一帧中的物理特效数据;获取对场景管理类进行实例化得到的第一目标实例;所述场景管理类继承自所述粒子发射插件提供的目标基类;通过所述第一目标实例调用集成于所述粒子发射插件中的粒子模拟工具的场景管理接口,以在所述粒子模拟工具的场景管理器中,基于所述上一帧中的物理特效数据计算所述物理特效粒子在当前帧的运动状态信息;基于所述当前帧的运动状态信息更新所述上一帧中的物理特效数据,以渲染得到当前帧中的物理特效。
9.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现以下步骤:获取由粒子发射插件发射的物理特效粒子在上一帧中的物理特效数据;获取对场景管理类进行实例化得到的第一目标实例;所述场景管理类继承自所述粒子发射插件提供的目标基类;通过所述第一目标实例调用集成于所述粒子发射插件中的粒子模拟工具的场景管理接口,以在所述粒子模拟工具的场景管理器中,基于所述上一帧中的物理特效数据计算所述物理特效粒子在当前帧的运动状态信息;基于所述当前帧的运动状态信息更新所述上一帧中的物理特效数据,以渲染得到当前帧中的物理特效。
10.上述物理特效渲染方法、装置、计算机设备、存储介质和计算机程序产品,通过获取由粒子发射插件发射的物理特效粒子在上一帧中的物理特效数据,获取对场景管理类进行实例化得到的第一目标实例;场景管理类继承自粒子发射插件提供的目标基类,通过第一目标实例调用集成于粒子发射插件中的粒子模拟工具的场景管理接口,以在粒子模拟工具的场景管理器中,基于上一帧中的物理特效数据计算物理特效粒子在当前帧的运动状态信息,基于当前帧的运动状态信息更新上一帧中的物理特效数据,以渲染得到当前帧中的物理特效,由于将粒子模拟工具集成于粒子发射插件中,可以通过对场景管理类进行实例化得到的第一目标实例调用粒子模拟工具的场景管理接口,以在粒子模拟工具的场景管理器中计算得到运动状态信息,从而渲染得到物理特效,避免了从外部导入模拟结果,提高了物理特效渲染时的效率。
附图说明
11.图1为一个实施例中物理特效渲染方法的应用环境图;图2为一个实施例中物理特效渲染方法的流程示意图;图3为一个实施例中配置第一属性的属性参数时的配置界面示意图;图4为一个实施例中配置第二属性的属性参数时的配置界面示意图;图5为一个实施例中配置第三属性的属性参数时的配置界面示意图;图6为一个实施例中预设模型的示意图;图7为一个实施例中采样得到的粒子示意图;图8为一个实施例中计算运动状态信息的示意图;图9为一个实施例中粒子发射插件提供的类关系图;图10为一个实施例中在配置界面显示各个模块的示意图;图11为一个实施例中粒子旋转效果图;
图12为一个实施例中模拟过程的调用流程图;图13为一个实施例中物理特效渲染装置的结构框图;图14为一个实施例中计算机设备的内部结构图。
具体实施方式
12.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
13.本技术提供的物理特效渲染方法,可以应用于如图1所示的应用环境中。其中,计算机设备102可以是终端或者服务器。终端包括但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器可以是独立的服务器或者是多个服务器组成的服务器集群。计算机设备102获取由粒子发射插件发射的物理特效粒子在上一帧中的物理特效数据,进一步获取对场景管理类进行实例化得到的第一目标实例,其中场景管理类继承自粒子发射插件提供的目标基类,然后通过第一目标实例调用集成于粒子发射插件中的粒子模拟工具的场景管理接口,以在粒子模拟工具的场景管理器中,基于上一帧中的物理特效数据计算物理特效粒子在当前帧的运动状态信息,基于当前帧的运动状态信息更新上一帧中的物理特效数据,根据更新后的物理特效数据计算机设备102可以渲染得到当前帧中的物理特效,并且在计算机设备的界面上可以展示渲染得到的物理特效。
14.在一个实施例中,如图2所示,提供了一种物理特效渲染方法,以该方法应用于图1中的计算机设备为例进行说明,包括以下步骤:步骤202,获取由粒子发射插件发射的物理特效粒子在上一帧中的物理特效数据。
15.其中,粒子发射插件指的是可以发射物理特效粒子的插件。粒子发射插件例如可以是游戏引擎unreal engine(ue)中的niagara插件,该插件中同时集成了粒子模拟工具,可以对物理特效进行模拟。物理特效可以指的物理过程表现到动画中形成的效果,例如是将生活中感觉到的风的吹动、树叶的摇摆、以及物体爆炸时所产生的碎片飞溅等等的物理过程表现到动画中。其中动画包括但不限于是游戏动画或者影视动画。采用物理特效可以带来更真实的游戏感受,使动画看起来更加真实更加震撼,实现身临其境的感觉。物理特效粒子指的是模拟物理特效中不再继续分割的一小块物质,例如可以是雪粒子、沙粒子、石油粒子、水粒子等等,更广泛的如一小段头发、一小块布料,也统称为粒子。物理特效数据指的是在进行物理特效模拟的过程中产生的粒子的相关数据,物理特效数据至少包括物理特效粒子的属性信息、运动状态信息,其中物理特效粒子的属性信息可以包括物理特效粒子的质量、粒子编号、生命周期等基本信息,运动状态信息可以指的是物理特效粒子运动时的状态信息,比如,可以包括物理特效粒子的速度、形变梯度、塑形状态、位置信息等信息。
16.在一个实施例中,物理特效数据还包括物理特效粒子的受力数值,受力数值用于表征物理特效粒子的受力大小,其中表征物理特效粒子的受力可以指的是物理特效粒子所有可能受到的作用力,比如,物理特效粒子受到其他物理特效粒子对它的作用力、摩擦力、重力等等。
17.具体地,计算机设备可以从为粒子发射插件分配的显存中读取粒子发射插件发射的物理特效粒子在上一帧中的物理特效数据。
18.可以理解的是,由粒子发射插件发射的物理特效粒子是有生命周期的,在不同的动画帧中,随着粒子生命周期的结束,粒子会消亡,因此计算机设备在获取物理特效数据时,获取是当前存活的粒子所对应的物理特效数据。
19.还可以理解的是,当上一帧为第一帧时,物理特效数据可以通过用户设定的数值初始化得到;而当上一帧为中间帧时,物理特效数据通过对上上一帧的物理特效数据进行更新得到。
20.步骤204,获取对场景管理类进行实例化得到的第一目标实例;场景管理类继承自粒子发射插件提供的目标基类。
21.其中,目标基类是粒子发射插件所提供的基类集合中,可以调用粒子模拟工具提供的数据接口的基类,目标基类可以作为父类派生出多个继承类,这些继承类会自动继承父类的方法和变量,并调用父类的方法和变量。场景管理类继承自目标基类,因此场景管理类会自动继承目标基类调用粒子模拟工具提供的数据接口的方法,实现对粒子模拟工具的场景管理接口的调用。粒子模拟工具指的是可以实现粒子模拟的程序模块,在模拟的过程解算粒子的运动状态信息。第一目标实例为对场景管理类进行实例化得到的,可以实现场景管理类的方法对场景管理接口进行调用。
22.在一个实施例中,粒子模拟工具例如可以是physion工具,physion使用的算法是mpm(material point method,物质点法),可以在统一的算法框架下进行多种不同物理材质的模拟,例如雪、烟、水、石油、肌肉、头发等。同时,physion将mpm全部用cuda(compute unified device architecture,统一计算设备架构)线实现,在gpu(graphics processing unit,图形处理器)上进行并行计算,极大地提升了解算效率。
23.具体地,计算机设备可以获取粒子发射插件中的第一目标实例,该第一目标实例是在物理特效的制作过程中对场景管理类进行实例化后生成的,通过将场景管理类实例化在粒子发射插件中,可以在粒子发射插件的运行流程中调用粒子模拟工具的场景管理接口,实现物理特效粒子的模拟解算。
24.在一个实施例中,第一目标实例通过以下步骤生成:首先从粒子发射插件提供的基类集合中,确定用于调用粒子模拟工具提供的数据接口的基类,得到目标基类,接着创建继承自目标基类的场景管理类,最后对场景管理类进行实例化,得到第一目标实例。
25.步骤206,通过第一目标实例调用集成于粒子发射插件中的粒子模拟工具的场景管理接口,以在粒子模拟工具的场景管理器中,基于上一帧中的物理特效数据计算物理特效粒子在当前帧的运动状态信息。
26.其中,粒子模拟工具集成于粒子发射插件中指的是将对粒子模拟工具对应的底层库进行编译得到的dll(dynamic link library,动态链接库)文件和lib(library,静态数据连接库)文件,以及所有头文件都集成到粒子发射插件中,从而可以在粒子发射插件中直接调用粒子模拟工具的功能。场景管理接口指的是粒子模拟工具的场景管理器所对应的数据接口,通过场景管理接口可以调用场景管理器。场景管理器用于在粒子模拟工具中对物理特效的场景进行管理,以实现对场景中物理特效粒子的模拟解算。
27.具体地,计算机设备在获取到第一目标实例后,可以通过第一目标实例调用集成于粒子发射插件中的粒子模拟工具的场景管理接口,以在粒子模拟工具的场景管理器中计算物理特效粒子在当前帧的运动状态信息,计算的过程中可以基于上一帧中的物理特效数
据计算。
28.在一个实施例中,计算机设备在粒子模拟工具的场景管理器中,基于上一帧中的物理特效数据计算物理特效粒子在当前帧的运动状态信息具体可以采用物质点法(material point method, mpm)进行计算,其中,物质点法是一种将欧拉法和拉格朗日法结合起来的一种新的计算方法,既避免了欧拉法要求解对流项的难题,又解决了拉格朗日法在处理大变形时的网格畸变和负体积问题。在物质点法中,粒子作为模拟对象存在于一组背景网格(background grid)中,每一帧模拟开始时将粒子的当前运动状态信息映射到背景网格上,通过背景网格中的网格节点进行解算,解算完成后将所有信息传递回粒子,再更新粒子的当前运动状态信息。
29.在一个实施例中,计算机设备基于上一帧中的物理特效数据计算物理特效粒子在当前帧的运动状态信息时,可以将当前帧的计算分为多个时间步,第一个时间步中基于上一帧中的物理特效数据计算当前时间步中物理特效粒子的运动状态信息,此后的每一个时间步,基于上一个时间步中物理特效粒子的运动状态信息计算当前时间步中物理特效粒子的运动状态信息,直到最后一个时间步计算完成后,将最后一个时间步中物理特效粒子的运动状态信息作为物理特效粒子在当前帧的运动状态信息。其中,时间步指的是计算物理特效粒子在当前帧的运动状态信息时的最小时间单元,当前时间步的结束时间与上一个时间步的结束时间之间的时间差值即为当前时间步的步长,时间步的步长可以是根据需要预先进行设置的。例如,上一帧和当前帧之间的时间间隔为t1,可以将t1等分为30个时间步,每个时间步的步长为t1/30。
30.步骤208,基于当前帧的运动状态信息更新上一帧中的物理特效数据,以渲染得到当前帧中的物理特效。
31.其中,上一帧中的物理特效数据中包括了上一帧中物理特效粒子的运动状态信息。当前帧中的物理特效指的是当前帧中的物理特效粒子模拟形成的物理特效。
32.具体地,计算机设备将当前帧中的运动状态信息替换上一帧中的物理特效数据中的运动状态信息,以更新上一帧中的物理特效数据,得到更新后的物理特效数据,更新后的物理特效数据可以用于渲染得到当前帧中的物理特效。计算机设备可以进一步在当前帧中展示渲染后的物理特效,完成对物理特效的模拟。
33.在一个实施例中,更新物理特效数据还包括更新物理特效数据中物理特效粒子的生命状态,注销死亡粒子,更新存活粒子的受力情况等等。
34.在渲染过程中,计算机设备可以对物理特效粒子用经过纹理映射的四边形sprite进行渲染,在一些低分辨率或者处理能力有限的场合粒子可能仅仅渲染成一个像素,在离线渲染中甚至渲染成一个圆球,从粒子圆球计算出的等值面可以得到非常好的液体表面。另外,也可以用三维网格渲染粒子,在niagara中,提供了四种粒子的渲染器,分别使用sprite、mesh、ribbon、light来渲染粒子。
35.上述物理特效渲染方法中,通过获取由粒子发射插件发射的物理特效粒子在上一帧中的物理特效数据,获取对场景管理类进行实例化得到的第一目标实例;场景管理类继承自粒子发射插件提供的目标基类,通过第一目标实例调用集成于粒子发射插件中的粒子模拟工具的场景管理接口,以在粒子模拟工具的场景管理器中,基于上一帧中的物理特效数据计算物理特效粒子在当前帧的运动状态信息,基于当前帧的运动状态信息更新上一帧
中的物理特效数据,以渲染得到当前帧中的物理特效,由于将粒子模拟工具集成于粒子发射插件中,可以通过对场景管理类进行实例化得到的第一目标实例调用粒子模拟工具的场景管理接口,以在粒子模拟工具的场景管理器中计算得到运动状态信息,从而渲染得到物理特效,避免了从外部导入模拟结果,提高了物理特效渲染时的效率。
36.进一步,由于将粒子模拟工具集成到了粒子发射插件中,可以在动画帧中实时地进行粒子的物理仿真,并与场景中的物体进行交互,提高了物理特效模拟的准确性,使得渲染得到的物理特效更加准确逼真。
37.在一个实施例中,第一目标实例通过以下步骤生成:从粒子发射插件提供的基类集合中,确定用于调用粒子模拟工具提供的数据接口的基类,得到目标基类;创建继承自目标基类的场景管理类,以对粒子模拟工具的场景管理接口进行调用;对场景管理类进行实例化,得到第一目标实例。
38.其中,基类集合中包括至少一个基类,基类指的是可以派生出继承类的类。用于调用粒子模拟工具提供的数据接口的基类指的该基类中包含调用粒子模拟工具提供的数据接口的方法。粒子模拟工具提供的数据接口被调用时,可以接入粒子模拟工具中的各项功能,粒子模拟工具可以提供多个数据接口,不同的数据接口被调用时接入粒子模拟工具中的不同的功能,例如,可以通过调用粒子模拟工具提供的场景管理接口,接入粒子模拟工具中的场景管理器。场景管理类继承自目标基类,则场景管理类可以调用目标基类的方法和变量,实现对粒子模拟工具的场景管理接口进行调用。在一个实施例中,当粒子发射插件为niagara插件时,目标基类例如可以是niagaradatainterface。
39.具体地,在动画的运行流程开始之前,计算机设备可以从粒子发射插件提供的基类集合中,确定用于调用粒子模拟工具提供的数据接口的基类,得到目标基类,进而创建继承自目标基类的场景管理类,最后将场景管理类实例化至粒子发射插件,在粒子发射插件中得到第一目标实例,从而在粒子发射插件进行物理特效渲染的过程中,可以获取该第一目标实例,来调用粒子模拟工具的场景管理接口,实现粒子的运动状态信息的解算。
40.上述实施例中,由于粒子发射插件提供了可以调用粒子模拟工具提供的数据接口的基类,通过该基类可以扩展得到场景管理类,进而将场景管理类实例化在粒子发射插件中,实现对场景管理器的调用,使得粒子模拟工具可以更好地集成在粒子发射插件中。
41.在一个实施例中,对场景管理类进行实例化,得到第一目标实例包括:创建场景管理类对应的对象,得到场景管理对象;将场景管理对象进行封装,得到第一目标对象;将第一目标对象配置为粒子发射插件的第一属性,得到第一目标实例。
42.其中,对象是由类抽象出来的,对象可以操作类的基本属性和方法解决相应的问题。封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。通过封装可以将变化隔离、便于使用、提高重用性、提高安全性。封装的原则是将不需要对外提供的内容都隐藏起来、把属性都隐藏,提供公共方法对其访问。
43.具体地,计算机设备可以通过new操作符创建场景管理类对应的对象,得到场景管理对象,然后采用预设的封装方式将场景管理对象的代码进行封装,得到第一目标对象,最后将第一目标对象配置为粒子发射插件的第一属性,从而实现将场景管理类实例化在粒子发射插件中。在一个实施例中,预设的封装方式例如可以是将属性私有化,设置公有的get、set方法,设置无参有参函数,最后重写tostring方法。其中,new操作符是用来创建对象的
运算符,其语法结构为:new constructor(),其中,constructor指的是待创建对象对应的类,例如,创建场景管理类对应的对象可以是new niagaradatainterfacescenario()。
44.在一个实施例中,当粒子发射插件为niagara插件时,niagara插件包括系统(system)管理器和发射器(emitter)管理器,计算机设备可以将场景管理类配置为niagara的系统(system)属性。
45.上述实施例中,由于对创建的场景管理对象进行了封装,并配置为粒子发射插件的属性,得到第一目标实例,从而美工可以直接通过配置界面对粒子模拟工具的场景管理功能进行调用来制作动画而无需程序员的协助,提高了第一目标实例的安全性和可用性。
46.在一个实施例中,在将第一目标对象配置为粒子发射插件的第一属性,得到第一目标实例之后,方法还包括:通过粒子发射插件的配置界面,获取对第一属性的属性参数进行配置得到的第一属性值;将第一属性值作为第一目标实例对应的变量值;通过第一目标实例对应的变量值对场景管理接口所对应的场景管理器的参数进行配置,得到配置后的、用于在粒子模拟工具中进行场景管理的场景管理器。
47.其中,粒子发射插件的配置界面指的是粒子发射插件提供的可以对粒子发射插件各个属性的属性参数进行配置的界面,通过该界面可以对粒子模拟工具中被封装的各个功能进行调用。第一目标实例对应的变量值指的是第一目标实例中的成员变量的具体数值。第一属性的属性参数指的是与场景有关的参数值,例如可以是场景稳定性、帧率等等。
48.具体地,在美工(ta)通过粒子发射插件的配置界面对第一属性的属性参数进行配置时,计算机设备可以获取通过该配置界面配置得到的各个属性参数的属性值,通过第一属性值对第一目标实例中对应的成员变量进行赋值,得到第一目标实例对应的变量值,将第一目标实例对应的变量值传入场景管理接口中,以对场景管理接口所对应的场景管理器进行配置,得到配置后的场景管理器,该场景管理器用于在粒子模拟工具中进行场景管理,包括结合配置的属性值在场景中进行物理特效数据计算,即基于上一帧中物理特效粒子的物理特效数据计算当前帧中的运动状态信息。
49.举例说明,如图3所示,为一个实施例中,为粒子发射插件对第一属性进行配置的配置界面。参考图3,第一属性是与场景管理器对应的,在粒子发射插件的配置界面可以配置第一属性的各种属参数,例如图3中的帧率、翻转率、稳定性等等。
50.上述实施例中,由于可以通过粒子发射插件的配置界面,获取对第一属性的属性参数进行配置得到的第一属性值,只需要在配置界面进行简单的配置操作,即可实现对场景管理接口所对应的场景管理器的参数进行配置,得到配置后的、用于在粒子模拟工具中进行场景管理的场景管理器,操作简单方便,由于不需要了解底层的配置流程,提高了配置效率。
51.在一个实施例中,基于当前帧的运动状态信息更新上一帧中的物理特效数据,以渲染得到当前帧中的物理特效包括:获取对几何体管理类进行实例化得到的第二目标实例;几何体管理类继承自粒子发射插件提供的目标基类;通过第二目标实例调用粒子模拟工具的几何体管理接口,以通过粒子模拟工具中的几何体管理器将当前帧的运动状态信息写入目标显存中,在目标显存中基于当前帧的运动状态信息更新上一帧中的物理特效数据,以渲染得到当前帧中的物理特效。
52.其中,几何体管理类继承自目标基类,因此几何体管理类会自动继承目标基类调
用粒子模拟工具提供的数据接口的方法,实现对粒子模拟工具的几何体管理接口的调用。几何体管理接口指的是粒子模拟工具的几何体管理器所对应的数据接口,通过几何体管理接口可以调用几何体管理器。几何体管理器用于在粒子模拟工具中对物理特效中物体的属性进行管理,包括物理属性以及组成物体的粒子的物理特效数据,物理属性比如物体的材料、密度、脆度等等。第二目标实例通过对几何体管理类进行实例化得到,那么可以通过第二目标实例实现几何体管理类的方法调用来几何体管理接口。目标显存指的是为粒子发射插件的渲染数据分配的数据缓冲区域。
53.具体地,由于当前帧的运动状态信息是在粒子模拟工具中计算得到的,得到的运动状态信息存储在与目标显存不相同的数据缓冲区,而几何体管理器可以对粒子的物理特效数据进行管理,因此可以借助于几何体管理器将运动状态信息写入目标显存中,具体来说,当计算机设备在基于当前帧的运动状态信息更新上一帧中的物理特效数据,以渲染得到当前帧中的物理特效时,可以获取对几何体管理类进行实例化得到的第二目标实例,通过第二目标实例调用粒子模拟工具的几何体管理接口,从而通过该几何体管理接口对应的几何体管理器将当前帧的运动状态信息写入目标显存中,目标显存中存储了上一帧中的物理特效数据,通过几何体管理器将当前帧的运动状态信息写入目标显存中后,可以对目标显存中上一帧对应的物理特效数据进行更新,得到更新后的物理特效数据,该更新后的物理特效数据可以用于渲染得到当前帧中的物理特效。
54.上述实施例中,通过调用通过第二目标实例调用粒子模拟工具的几何体管理接口,以通过粒子模拟工具中的几何体管理器将当前帧的运动状态信息写入目标显存中,可以快速地从粒子模拟工具中获得所要的渲染数据,提高渲染效率。
55.在一个实施例中,第二目标实例通过以下步骤生成:创建继承自目标基类的几何体管理类,以对粒子模拟工具的几何体管理接口进行调用;创建几何体管理类对应的对象,得到几何体管理对象;将几何体管理对象进行封装,得到第二目标对象;将第二目标对象配置为粒子发射插件的第二属性,得到第二目标实例。
56.具体地,在动画的运行流程开始之前,计算机设备可以从粒子发射插件提供的基类集合中,确定用于调用粒子模拟工具提供的数据接口的基类,得到目标基类,进而创建继承自该目标基类的几何体管理类,最后将几何体管理接口实例化至粒子发射插件,在粒子发射插件中得到第二目标实例,从而在粒子发射插件进行物理特效渲染的过程中,可以获取该第二目标实例,来调用粒子模拟工具的几何体管理接口,实现对物理特效中物体的属性进行管理。
57.在实例化的过程中,计算机设备可以通过new操作符创建几何体管理类对应的对象,得到几何体管理对象,然后采用预设的封装方式将几何体管理对象的代码进行封装,得到第二目标对象,最后将第二目标对象配置为粒子发射插件的第二属性,从而实现将几何体管理类实例化在粒子发射插件中。
58.在一个实施例中,当粒子发射插件为niagara插件时,niagara插件包括系统(system)管理器和发射器(emitter)管理器,计算机设备可以将几何体管理类配置为niagara的发射器(emitter)属性。
59.上述实施例中,由于粒子发射插件提供了可以调用粒子模拟工具提供的数据接口的基类,通过该基类可以扩展得到几何体管理类,进而将几何体管理类实例化在粒子发射
插件中,实现对几何体管理器的调用,使得粒子模拟工具可以更好地集成在粒子发射插件中,并且由于对创建的几何体管理对象进行了封装,并配置为粒子发射插件的属性,得到第二目标实例,从而美工可以直接通过配置界面对粒子模拟工具的几何体管理功能进行调用来制作动画而无需程序员的协助,提高了第二目标实例的安全性和可用性。
60.在一个实施例中,在将第二目标对象配置为粒子发射插件的第二属性,得到第二目标实例之后,方法还包括:通过粒子发射插件的配置界面,获取对第二属性的属性参数进行配置得到的第二属性值;将第二属性值作为第二目标实例对应的变量值;通过第二目标实例对应的变量值对几何体管理接口所对应的几何体管理器进行配置,得到配置后的、用于在粒子模拟工具中进行几何体管理的几何体管理器。
61.其中,粒子发射插件的配置界面指的是粒子发射插件提供的可以对粒子发射插件各个属性的属性参数进行配置的界面,通过该界面可以对粒子模拟工具的各个功能进行封装和调用。第二目标实例对应的变量值指的是第二目标实例中的成员变量的具体数值。第二属性的属性参数指的是物理特效中物体的属性有关的参数值,例如可以是物体的材质、密度等等。
62.具体地,通过粒子发射插件的配置界面对第二属性的属性参数进行配置时,计算机设备可以获取通过该配置界面配置得到的各个属性参数的属性值,通过第二属性值对第二目标实例中对应的成员变量进行赋值,得到第二目标实例对应的变量值,将第二目标实例对应的变量值传入几何体管理接口中,以对几何体管理接口所对应的几何体管理器进行配置,得到配置后的几何体管理器,该几何体管理器用于在粒子模拟工具中对物理特效中物体的属性进行管理。
63.举例说明,如图4所示,为一个实施例中粒子发射插件对第二属性进行配置的配置界面。参考图4,第二属性是与几何管理器对应的,在粒子发射插件的配置界面可以配置第二属性的各种属参数,例如图4中的密度、材质、材料模型、硬度等等。
64.上述实施例中,由于可以通过粒子发射插件的配置界面,获取对第二属性的属性参数进行配置得到的第二属性值,只需要在配置界面进行简单的配置操作,即可实现对几何体管理接口所对应的几何体管理器的参数进行配置,得到配置后的、用于在粒子模拟工具中进行几何体管理的几何体管理器,操作简单方便,由于不需要了解底层的配置流程,提高了配置效率。
65.在一个实施例中,上述方法还包括:获取对边界条件管理类进行实例化得到的第三目标实例;边界条件管理类继承自粒子发射插件提供的目标基类;通过第三目标实例调用粒子模拟工具的边界条件管理接口,以在粒子模拟工具的边界条件管理器中获得目标边界条件;在粒子模拟工具的场景管理器中,基于上一帧中的物理特效数据计算物理特效粒子在当前帧的运动状态信息包括:在粒子模拟工具的场景管理器中,基于上一帧中的物理特效数据及目标边界条件计算物理特效粒子在当前帧的运动状态信息。
66.其中,边界条件管理类继承自目标基类,因此边界条件管理类会自动继承目标基类调用粒子模拟工具提供的数据接口的方法,实现对粒子模拟工具的边界条件管理接口的调用。边界条件管理接口指的是粒子模拟工具的边界条件管理器所对应的接口,通过边界条件管理接口可以调用边界条件管理器。边界条件管理器用于在粒子模拟工具中对场景中的边界条件进行管理。边界条件,即有符号的距离场(signed distance fields,sdf),在粒
子模拟工具中是参与模拟的、可以与粒子发生碰撞的物体。边界条件包括三种类型:地面、静态物体以及骨骼动画,其中,地面、静态物体为静态的,而骨骼动画为动态的,与粒子的不同在于,sdf的位置变化并不由动力学解算出来,而只是预先固定好(静态)或通过fbx模型驱动(动态)。目标边界条件指的是预先配置的边界条件参数对应的边界条件。第三目标实例通过对边界条件管理类进行实例化得到,那么可以通过第三目标实例实现边界条件管理类的方法来调用边界条件管理接口,从而实现对边界条件的管理。
67.具体地,在需要模拟碰撞效果的物理特效中,可以预先配置目标边界条件对应的参数,从而在动画运行过程中计算机设备可以获取对边界条件管理类进行实例化得到的第三目标实例,通过第三目标实例调用粒子模拟工具的边界条件管理接口,以在边界条件管理器中根据目标边界条件对应的参数获得目标边界条件。
68.由于获得了目标边界条件,那么在计算物理特效粒子在当前帧的运动状态信息时,可以将目标边界条件注册到场景管理器中,在场景管理器中,基于上一帧中的物理特效数据及目标边界条件计算物理特效粒子在当前帧的运动状态信息。
69.举个例子,假设目标边界条件为地面,则可以在配置的时候指定该边界条件的来源参数为“plane actor(平面物体)”,则边界条件管理器中可以将场景中的“plane actor(平面物体)作为地面。
70.上述实施例中,通过第三目标实例调用粒子模拟工具的边界条件管理接口,以在边界条件管理器中获得目标边界条件,从而可以在场景管理器中模拟碰撞过程的解算,使得模拟得到的物理特效可以多样化。
71.在一个实施例中,第三目标实例通过以下步骤生成:创建继承自目标基类的边界条件管理类,以对粒子模拟工具的边界条件管理接口进行调用;创建继承自边界条件管理类的、与类型配置参数相应的目标派生类,对目标派生类进行实例化,得到第三目标实例;其中,类型配置参数是通过粒子发射插件的配置界面获取的对边界条件管理器的类型进行配置得到的参数。
72.本技术实施例中,粒子模拟工具提供的数据接口被调用时,可以接入粒子模拟工具中的各项功能,粒子模拟工具可以提供多个数据接口,不同的数据接口被调用时接入粒子模拟工具中的不同的功能,例如,当需要接入粒子模拟工具中的边界条件管理器时,可以通过调用粒子模拟工具提供的边界条件管理接口实现。边界条件管理类继承自目标基类,则边界条件管理类可以调用目标基类的方法和变量,实现对粒子模拟工具的边界条件管理接口的调用。边界条件管理器用于管理边界条件,包括生成与配置参数对应的边界条件。
73.类型配置数据用于表征边界条件管理器的类型的数据。不同的边界条件对应不同的边界条件管理器,例如“地面”类型的边界条件通过“地面”类型的边界条件管理器进行管理。当需要多个不同类型的边界条件管理器时,可以配置得到多个类型配置参数。以粒子发射插件为niagara为例,在niagara system中,sdf只能作为外部输入,因此用户如果想要增加sdf作为碰撞体,需要在user exposed中添加对应类型的niagaradatainterfacesdf,例如可以配置得到三种不同类型的类型配置参数分别为地面边界条件(groudsdf),骨骼动画边界条件(skeletalmeshsdf)以及静态物体边界条件(staticmeshsdf)。
74.具体地,在动画的运行流程开始之前,计算机设备可以从粒子发射插件提供的基类集合中,确定用于调用粒子模拟工具提供的数据接口的基类,得到目标基类,进而创建继
承自目标基类的边界条件管理类,由于边界条件管理器有不同的类型,因此需要基于边界条件管理类创建与类型配置参数相应的目标派生类,最后将目标派生类实例化至粒子发射插件,在粒子发射插件中得到第三目标实例,从而在粒子发射插件进行物理特效渲染的过程中,可以获取该第三目标实例来调用粒子模拟工具中对该第三目标实例类型对应的边界条件管理接口,实现粒子的碰撞过程中的运动状态信息的解算。
75.上述实施例中,由于粒子发射插件提供了可以调用粒子模拟工具提供的数据接口的基类,通过该基类可以扩展得到边界条件管理类,进而基于边界条件管理类可以派生出不同的派生类并实例化在粒子发射插件中,实现对不同类型的边界条件管理器的调用,使得粒子模拟工具可以更好地集成在粒子发射插件中。
76.在一个实施例中,对目标派生类进行实例化,得到第三目标实例包括:创建目标派生类对应的对象,得到目标边界条件管理对象;将目标边界条件管理对象进行封装,得到第三目标对象;将第三目标对象配置为粒子发射插件的第三属性,得到第三目标实例。
77.具体地,在实例化的过程中,计算机设备可以通过new操作符创建目标派生类对应的对象,得到目标边界条件管理对象,然后采用预设的封装方式将目标边界条件管理对象的代码进行封装,得到第三目标对象,最后将第三目标对象配置为粒子发射插件的第三属性,从而实现将目标派生类实例化在粒子发射插件中。
78.在一个实施例中,当粒子发射插件为niagara插件时,niagara插件包括系统(system)管理器和发射器(emitter)管理器,计算机设备可以将目标派生类配置为niagara的系统(system)属性。
79.上述实施例中,由于对创建的目标边界条件管理对象进行了封装,并配置为粒子发射插件的属性,得到第三目标实例,从而美工可以通过配置界面直接对粒子模拟工具的边界条件管理功能进行调用而无需程序员的协助,提高第三目标实例的安全性和可用性。
80.在一个实施例中,在将第三目标对象配置为粒子发射插件的第三属性,得到第三目标实例之后,方法还包括:通过粒子发射插件的配置界面,获取对第三属性的属性参数进行配置得到的第三属性值;将第三属性值作为第三目标实例对应的变量值;通过第三目标实例对应的变量值对边界条件管理接口所对应的边界条件管理器的参数进行配置,得到配置后的、用于在粒子模拟工具中进行边界条件管理的边界条件管理器。
81.其中,第三属性的属性参数指的是物理特效中与边界条件有关的参数,用于指定边界条件对应的物体。
82.具体地,通过粒子发射插件的配置界面对第三属性的属性参数进行配置时,计算机设备可以获取通过该配置界面配置得到的各个属性参数的属性值,通过第三属性值对第三目标实例中对应的成员变量进行赋值,得到第三目标实例对应的变量值,将第三目标实例对应的变量值传入与该第三目标实例对应的边界条件管理接口中,以对该边界条件管理接口所对应的边界条件管理器进行配置,得到配置后的边界条件管理器,该边界条件管理器用于在粒子模拟工具中对对应类型的边界条件进行管理。
83.需要说明的是,当预先配置了多种类型的场景管理器时,对于每一个场景管理器,创建继承自边界条件管理类的目标派生类,从而得到多个目标派生类,对于每一个目标派生类,创建对应的对象,得到对应的目标边界条件管理对象,将每一个目标边界条件管理对象都进行封装,得到多个第三目标对象,分别将每一个第三目
标对象配置为粒子发射插件的第三属性,从而得到多个第三目标实例,为了方便配置,提高配置效率,在通过粒子发射插件的配置界面,获取对各个第三属性的属性参数进行配置得到的第三属性值时,可以通过同一个配置界面进行获取。举例说明,如图5所示,为一个实施例中粒子发射插件对第三属性进行配置的配置界面。参考图5,在同一个界面中包括地面、骨骼动画及静态物体的参数配置项,可通过该界面同时获取地面、骨骼动画及静态物体这三种不同类型的边界条件下的属性值。
84.上述实施例中,由于可以通过粒子发射插件的配置界面,获取对第三属性的属性参数进行配置得到的第三属性值,只需要在配置界面进行简单的配置操作,即可实现对几何体管理接口所对应的几何体管理器的参数进行配置,操作简单方便,由于不需要了解底层的配置流程,提高了配置效率。
85.在一个实施例中,在粒子模拟工具的场景管理器中,基于上一帧中的物理特效数据计算物理特效粒子在当前帧的运动状态信息包括:在粒子模拟工具的场景管理器中,基于上一帧中的物理特效数据计算物理特效粒子在当前帧的运动状态信息,将运动状态信息写入第一显存中;基于当前帧的运动状态信息更新上一帧中的物理特效数据,以渲染得到当前帧中的物理特效包括:从第一显存中读取当前帧的运动状态信息,将当前帧的运动状态信息进行拷贝;将拷贝得到的运动状态信息写入第二显存中,并在第二显存中基于当前帧的运动状态信息更新上一帧中的物理特效数据;其中,第一显存为粒子发射插件的目标显存中为粒子模拟工具分配的数据缓冲区域;第二显存为目标显存中异于第一显存的数据缓冲区域,用于存储粒子发射数据和粒子渲染数据。
86.本实施例中,粒子发射插件为niagara插件,该插件中集成的粒子模拟工具为physion,在niagara的gpu sim模式下,niagara使用高阶着色器语言(high level shader language,简称hlsl)进行gpu buffer(gpu对应的数据缓冲区)的操作,同时physion使用cuda(compute unified device architecture,统一计算设备架构)进行gpu buffer的操作,但是hlsl与cuda之间无法相互调用,因此本技术实施例中采用cuda与compute shader互操作的方式,实现间接的交互。
87.具体来说,可以为physion分配第一显存,该第一显存采用cuda进行操作,为niagara分配第二显存,该第二显存采用compute shader进行操作,第一显存和第二显存中的数据可以采用拷贝的方式实现gpu to gpu的数据传递。其中,第一显存主要用于存储粒子发射数据和粒子渲染数据,其中粒子发射数据指的是niagara的粒子发射器(emitter)所在发射粒子时存储的粒子属性数据,粒子渲染数据指的是niagara在进行渲染步骤时存储的粒子的物理特效数据。
88.由于当前帧中的运动状态信息是由粒子模拟工具的场景管理器解算出来的,解算出的运动状态信息会写入为physion分配的第一显存中,而物理特效的渲染是在niagara中进行的,因此计算机设备可以从第一显存中读取当前帧的运动状态信息,将当前帧的运动状态信息进行拷贝,将拷贝得到的运动状态信息写入第二显存中,并在第二显存中基于当前帧的运动状态信息更新上一帧中的物理特效数据。
89.上述实施例中,通过分配不同的显存,采用数据拷贝的方式实现不同编程语言之间的互操作,使得physion可以方便、快捷地集成于niagara中而不需要进行大量的代码修改,提高了开发效率。
90.在一个实施例中,上述方法还包括:在预设模型所在位置处发射预设数量的初始粒子,并将初始粒子的属性信息写入第二显存中;从第二显存中读取初始粒子的属性信息,对初始粒子的属性信息进行拷贝;将拷贝得到的初始粒子的属性信息写入第一显存中,通过粒子模拟工具基于第一显存中初始粒子的属性信息在预设模型的表面及内部进行采样,得到用于物理特效模拟的物理特效粒子。
91.其中,预设模型用于控制粒子的生成位置,预设模型可以是规则或不规则形状的几何体,例如圆环、球体、圆锥体等形状的模型。预设模型也可以是网格资产(mesh),例如static mesh(静态网格资产)或者skeletal mesh(骨骼类网格资产),如图6所示,为一个实施例中预设模型的示意图,图6中的602为预设模型。
92.需要说明的是,传统技术中,niagara对于在网格资产处生成粒子时,往往只能在网格资产的表面进行采样,例如,基于图6中602所示的static mesh的表面进行采样得到的粒子如图7中的(a)图所示,可以看到,采样的粒子只在了人头的表面,而内部是没有采样粒子的,这样的生成方式不一定满足使用需求,在实际使用时,很可能会需要让粒子生成在mesh内部,例如,当需要模拟一个雪球破碎的效果,并且要求雪球的不同部分物理参数不同,就需要将一个球体进行分割,分割成多个mesh,然后每一个mesh作为一个采样体进行采样,将一个球分为多个emitter,然后每个emitter设置不同的物理参数。基于此,本技术实施例中将physion中的粒子采样功能进行了接入,可以对mesh的表面及内部均进行粒子采样,例如,基于图6中602所示的static mesh的表面及内部进行采样得到的粒子如图7中的(b)图所示。
93.本实施例中,由niagara插件在预设模型所在位置处发射预设数量的初始粒子,将初始粒子的属性信息写入第二显存中写入为niagara分配的第二显存中,由于粒子要在physion中进行采样,因此,需要从第二显存中读取初始粒子的属性信息,对初始粒子的属性信息进行拷贝,将拷贝得到的初始粒子的属性信息写入为physion分配的第一显存中,从而通过physion在预设模型的表面及内部进行采样,得到用于物理特效模拟的物理特效粒子。
94.上述实施例中,通过从第二显存中读取初始粒子的属性信息,对初始粒子的属性信息进行拷贝,将拷贝得到的初始粒子的属性信息写入第一显存中通过粒子模拟工具基于第一显存中初始粒子的属性信息在预设模型的表面及内部进行采样,使得采样得到的物理特效粒子更好地满足特效模拟需求。
95.在一个实施例中,在粒子模拟工具的场景管理器中,基于上一帧中的物理特效数据计算物理特效粒子在当前帧的运动状态信息包括:在粒子模拟工具的场景管理器中,基于上一帧中的物理特效数据映射至预设的背景网格中;背景网格中包括多个网格节点;在背景网格中,基于物理特效数据计算与当前帧中各个物理特效粒子对应的网格节点的运动状态信息;将各个网格节点的运动状态信息映射至对应的物理特效粒子,得到当前帧中各个物理特效粒子的运动状态信息。
96.其中,背景网格(background grid)指的是在计算的过程中用于放置物理特效粒子的模拟空间,背景网格中包括至少多个格子节点,多个指至少两个。在一个实施例中,可以将背景网格划分为至少一个格子块,每个格子块包括至少一个用于放置物理特效粒子的格子,每个格子对应至少一个格子节点。为了减少内存的使用,可以用一个数据结构来稀疏
地存储格子块,即只有物理特效粒子会落在的格子块,才会被分配相应的内存。
97.具体地,计算机设备可以通过形函数将物理特效粒子在上一帧中的物理特效数据插值到预设的背景网格中,对于某个物理特效粒子,该物理特效粒子的物理特效数据所插值的网格节点即为该物理特效粒子在背景网格中对应的网格节点,计算机设备进一步在背景网格中基于这些插值信息计算网格节点的运动状态信息,将计算得到的运动状态信息再次通过形函数映射回与网格节点对应的物理特效粒子,得到当前帧中各个物理特效粒子的运动状态信息。其中,插值可以指的是在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。
98.如图8所示,为一个具体的实施例中,通过背景网格计算运动状态信息的流程示意图。参考图8,具体包括以下步骤:1、将物理特效粒子的质量和速度插值到背景网格中。
99.2、计算物理特效粒子的体积。
100.3、根据计算得到的体积计算网格节点受力数值。
101.4、根据计算得到的受力数值计算网格节点的速度、位移等信息。
102.5、对网格节点进行与边界条件的碰撞检测。
103.6、碰撞检测后,对网格节点的速度、位移等信息进行隐式解算。
104.7、将解算得到的信息映射至对应的物理特效粒子更新物理特效粒子的形变梯度。
105.8、根据形变梯度更新物理特效粒子的速度。
106.9、对粒子进行与边界条件的碰撞检测。
107.10、根据新的粒子速度更新物理特效粒子的速度、位置等运动状态信息。
108.由图8的流程可以看出,在进行模拟时,每个物理特效粒子保存自身的质量、位置、速度、变形梯度、弹性塑性物理参数等自身属性值,而格子节点需要计算受力情况、加速度情况、速度增量,以及对边界条件(即碰撞体)的处理等。
109.在具体实施时,为保证计算准确性,可以将当前帧分为多个时间步,每一个时间步计算一次运动状态信息,当多个时间步的累计时长达到当前帧的时长后,将物理特效粒子的新的各个属性值作为当前帧的结果输出。
110.上述实施例中,通过将物理特效数据映射至背景网格中来计算粒子的运动状态信息,由于背景网格相对于粒子数量大大减少,因此节省了计算过程中的开销。
111.本技术还提供一种应用场景,该应用场景应用上述的物理特效渲染方法,通过上述的物理特效渲染方法实现游戏中物理特效的渲染。具体地,在该应用场景中,粒子发射插件为niagara,该粒子发射插件中集成了physion,其中niagara是ue主打的次世代粒子系统,利用niagara,ta(technical artist,技术美术家)可以自行创建额外的功能,而无需程序员的协助,niagara具有易用、易理解的特点,通过niagara,艺术家可全权掌控效果、可编程、可自定义、提供更好的调试、显示和性能工具、支持ue其他部分或外部源的数据、不妨碍用户操作。
112.本技术实施例提供的粒子发射插件提供了多种继承自数据接口类(niagaradatainterface)的类,在niagara中可以访问这些类,并将其实例化在niagara system、niagara emitter中,以此实现在niagara的运行流程中调用physion,进而实现对
粒子的动力学解算功能。如图9所示,为该粒子发射插件的类关系图,该类关系图中包括了主要的类,其中,数据接口类(niagaradatainterface)为目标基类,由该目标基类派生出了场景管理类(niagaradatainterfacescenario)、几何体管理类(niagaradatainterfacegeometry)以及边界条件管理类(niagaradatainterfacesdf)三个类,由边界条件管理类(niagaradatainterfacesdf)又派生出与静态物体对应的第一派生类(niagaradatainterfacestaticmeshsdf)、与骨骼动画对应的第二派生类(niagaradatainterfaceskeletalmeshsdf)以及与地面对应的第三派生类(niagaradatainterfacegroundsdf)三个类,以下分别进行解释:1、niagaradatainterfacescenario在本技术实施例提供的粒子发射插件中,类niagaradatainterfacescenario对应于physion中的scenario,为当前模拟的场景管理器。在niagara中,一个niagara system对应于一个niagaradatainterfacescenario,即将niagaradatainterfacescenario作为一个niagara system的唯一属性,一个niagara system中的所有粒子(即使属于不同的emitter)可以相互碰撞交互,而不同niagara system的粒子是相互隔离的,无法相互影响。
113.2、niagaradatainterfacegeometry在本技术实施例提供的粒子发射插件中,类niagaradatainterfacegeometry对应于physion中的geometry,在niagara中,一个niagara emitter对应于一个niagaradatainterfacegeometry,即将niagaradatainterfacegeometry作为一个niagara emitter的唯一属性,同一个emitter的粒子使用同一套参数进行初始化,一个system中可以包括多个emitter,即多个geometry,模拟开始时,在scenario的初始化阶段,会获得每一个emitter的数据,并完成对system的scenario的初始化。
114.3、niagaradatainterfacesdf在本技术实施例提供的粒子发射插件中,niagaradatainterfacesdf为sdf的基类,派生出多个不同用途的sdf,包括:1)niagaradatainterfacestaticmeshsdf该sdf可以将场景中的包含static mesh component的actor作为输入,physion对其static mesh进行采样,得到可以参与到碰撞计算中的sdf格式数据,并输入到scenario中,在模拟时作为静态的sdf。
115.2)niagaradatainterfaceskeletalmeshsdf该sdf可以将场景中包含skeletal mesh component的actor作为输入,physion在每一帧对当前帧状态下的skeletal mesh进行采样,得到可以参与到碰撞计算中的sdf格式数据,并输入到scenario中,与static mesh sdf相比,skeletal mesh sdf每一帧都需要进行更新,在模拟时作为运动状态下的sdf。
116.3)niagaradatainterfacegroundsdf该sdf在场景中一般指定为plane actor,作为一个无限延展的平面,粒子无法穿过这一平面,一般可以作为地面使用。
117.另外,sdf在模拟时只能作为外部输入,将场景中的actor挂载到场景中的niagara component中,在niagara system中只能对粒子进行编译,无法导入sdf与粒子发生碰撞。
118.进一步,在该应用场景中,对physion中的各个功能进行了封装,在niagara的配置
界面中增加了对应的可以添加的属性,并通过将已经编写好的模块脚本在对应的niagara中进行调用的方式,来实现niagara对physion的集成。如图10所示,为niagara在配置界面显示各个模块的示意图,该配置界面中图中主要包括了niagarasystem(系统)和niagaraemitter(发射器)两个模块,niagarasystem作为当前系统的管理器,而niagaraemitter作为当前system中的一个发射器,其中,niagarasystem模块主要包括系统生产(system spawn)及系统更新(system update)两个模块,niagaraemitter模块主要包括发射器生产、发射器更新、粒子生产及粒子更新模块四个模块,以下分别对这些模块进行介绍。
119.1、系统生产(system spawn),该模块包括以下几个模块:1)设置场景管理器(set physionscenario)。在该模块中,可以设置系统的属性physionscenario,即niagaradatainterfacescenario的作为system属性的实例,可以在这一模块中设置physionscenario的属性参数,具体可以参考图3。
120.2)重置场景管理器(nm reset scenario)。该模块的作用为,在每一次niagara的循环开始时,清除上一次模拟的数据,将physion重置为初始状态,为下一次模拟做准备。
121.3)初始化地面(nm init ground sdf)、初始化骨骼动画(nm init skeletal mesh sdf)以及初始化静态物体(nm init static mesh sdf),这三个模块分别用于初始化不同类型的边界条件。具体参考上文实施例中的描述。
122.需要说明的是,在niagara system中,sdf只能作为外部输入,因此用户如果想要增加sdf作为碰撞体,需要在user exposed中添加对应类型的niagaradatainterfacesdf,在user exposed中添加了niagaradatainterfacesdf后,在场景中就可以指定属性中的对应参数,例如引用场景中的static mesh,作为与粒子发生碰撞交互的物体,参考图5,图5中的physiongroundsdf指定了场景中的平面作为地面,而physionskeletalmeshsdf指定了场景中的爬行动物作为指定了骨骼动画的物体。
123.总之,在system spawn阶段,主要作用就是重置scenario中的各个参数,然后初始化sdf,但是其他的内容并没有在system spawn阶段初始化,原因在于,其他部分的初始化需要对粒子信息产生依赖,而在system spawn阶段,粒子还没有生成,粒子是在particle spawn阶段生成的,因此在system spawn阶段,只能把对粒子没有依赖的sdf完成初始化,而其他部分需要后续完成。
124.2、系统更新(system update),该模块主要包括以下几个模块:1)初始化场景管理器(nm init scenario),包括调用场景管理器的初始化函数,利用几何体管理器和边界条件管理器初始化的数据,将全部数据传输到gpu端,并完成另外的更底层的数据准备工作。
125.2)更新骨骼动画(nm update skeletal mesh sdf),由于skeletal mesh在动画播放的过程中会不断运动,每一帧需要更新skeletal mesh的sdf信息,因此需要在system update阶段调用这一模块,更新场景中的skeletal mesh sdf,场景中有几个skeletal mesh sdf参与计算,就需要添加几个nm update skeletal mesh sdf,并且分别指定为对应的skeletal mesh。
126.3)更新physion(nm update physion)。该模块是用于驱动scenario解算当前帧的粒子物理状态,更新所有粒子的位置等信息,需要每一帧进行调用,包括更新physion的数
据缓冲区中的每个物理特效粒子的受力数值、生命周期等等,并驱动粒子模拟下一帧的运动状态。
127.3、发射器生产(emitter spawn),该模块包括以下几个模块:1)设置几何体管理器(set physiongeometry)。在该模块中,可以设置发射器的属性physiongeometry,即niagaradatainterfacegeometry的作为emitter属性的实例,可以在这一模块中设置physiongeometry的属性参数,具体可以参考图4。
128.2)重置几何体管理器(nm reset geometry)。该模块的作用为,在每一次niagara的循环开始时,清除之前模拟时geometry中的数据,将geometry重置为初始状态,为下一次模拟做准备。
129.4、发射器更新(emitter update),该模块主要包括以下几个部分:1)发射器状态(emitter state)及生产粒子数量设定(spawn burst instantaneous),这两个模块为niagara原生的模块,其中emitter state可以指定一些emitter的属性参数,而spawn burst instantaneous是指定在某一时刻生成的粒子数。
130.2)初始化几何体管理器(nm init geometry),该模块用于初始化geometry,主要流程为,通过niagara的存储粒子数据的数据缓冲区中,然后根据粒子属性的排布情况,获得粒子的位置、质量、编号、生命周期等属性,将这些属性进行拷贝,进行gpu to gpu的数据传递,传递到场景管理器中,为scenario的后续初始化工作准备数据。
131.3)更新几何体管理器(nm update geometry),该模块主要用于在每一帧更新当前几何体管理器中对应的物理特效粒子的相关信息,包括:1)、读取niagara的数据缓冲区中的物理特效粒子的受力数值;2)、将physion中解算完成的当前帧的粒子位置、速度等信息写入到niagara 的数据缓冲区中,为渲染准备数据;3)、更新每个粒子的生命状态,实时统计已死亡粒子。
132.5、粒子生产(particle spawn),该模块主要包括以下几个部分:1)粒子初始化(initialize particle),该模块是niagara的原生模块,其作用为可以设置每个粒子的一些属性值,例如生命周期、颜色、质量、渲染半径等。
133.虽然这一模块为niagara原生模块,但是同样可以间接达到控制physion模拟的作用。以质量为例,当粒子按照niagara的质量设置后,在physion初始化时会去将niagara的数据缓冲区中储存每个粒子质量的数据进行拷贝,使用gpu to gpu的操作用于初始化physion中每一个粒子的质量,以此达到设置physion中粒子质量的目的。
134.2)发射位置控制模块,其作用为控制粒子生成在预设模型内。预设模型可以是规则或不规则形状的几何体,例如圆环、球体、圆锥体等形状的模型。预设模型也可以是网格资产(mesh),例如static mesh(静态网格资产)或者skeletal mesh(骨骼类网格资产)6、粒子更新(particle update),该模块主要包括以下几个部分:1)粒子状态设置(particle state),该模块为niagara原生模块,主要用于对粒子的状态进行设置,例如设置粒子的生命周期、设置粒子在生命周期结束时消亡等等。
135.2)重力模块(gravity force),该模块为niagara原生模块,为每个粒子添加重力效果,类似的还有其他控制力模块,可以通过添加多个不同的控制力,来实现多种多样的粒子运动效果。如图11所示,可以通过添加重力、线条吸引力、卷曲噪声、涡流力,实现粒子旋转效果。
136.在本技术实施例提供的粒子发射插件中,通过复用niagara原生的控制力模块的模块脚本,来为粒子增加外力控制粒子运动,更好地和niagara进行融合,同时符合美工的使用习惯,便于一些效果的复用。
137.3)受力解算模块(nm physion solve forces and velocity)。由于在运行时只能从保存了粒子属性值的buffer中获取niagara的gpu buffer内容,因此在nm physion solve forces and velocity这一模块中,我们将解算得到的合力数值保存在了粒子属性中,以便于在physion模拟时可以进行读取。
138.4)粒子注销模块(nm set deleted particle index),其作用为在运行时实时获取当前emitter中每个粒子的存活状态,在每一帧获得每个粒子的存活信息,并将信息写入到几何体管理器对应的一个数据缓冲区中,因此physion侧可以在每一帧获得真实的粒子存活状态,对已经死亡的粒子信息进行同步。
139.如图12所示,为一个实施例中粒子发射插件在运动过程中的调用流程图,参考图12,由于集成了physion的粒子发射插件,niagara在各个阶段除了需要执行原生脚本(即niagara中原有的脚本),还多了一些额外的步骤,以下结合图对运行过程中执行的额外步骤以及原生脚本中的重要步骤进行说明:一、第1帧1、执行系统和所有发射器的生产阶段逻辑:1.1、系统生产阶段1)、初始化每个发射器,并进行显存分配,同时设置场景管理器,即设置scenario的所有的输入参数。
140.2)、重置场景管理器:重置场景管理器中的所有内容,删除之前模拟的结果,为一次新的模拟做准备。
141.3)、初始化边界条件:初始化当前系统中所有的边界条件。
142.1.2、发射器生产阶段1)、设置几何体管理器:设置几何体管理器的所有的输入参数。
143.2)、重置几何体管理器:重置几何体管理器中的所有内容,删除之前的结果,为一次新的模拟做准备。
144.2、生成粒子:2.1、发射器更新:执行原生脚本,即根据niagara的原生模块spawn burst instantaneous决定生成的粒子数。
145.2.2、粒子生产:执行原生脚本,即根据发射器更新阶段指定的生成的粒子数,生成粒子,指定新生粒子的各个属性值,包括位置、速度等,将粒子的属性数据写入分配的显存。
146.二、第2帧:发射器更新:由于第1帧已经生成了粒子,因此在本阶段,几何体管理器读取发射器对应的显存中的属性数据,将保存了每个粒子的相关属性的数据进行一次gpu to gpu的拷贝,拷贝到几何体管理器对应的显存中,对几何体管理器进行初始化。
147.三、第3帧:1、系统更新:由于几何体管理器中的显存已经在第2帧进行了初始化,因此在第三帧场景管理器读取所有几何体管理器中的数据,对场景管理器进行初始化,并开始模拟,解
算粒子的新的位置、速度等数据。
148.2、发射器更新:几何体管理器读取保存在场景管理器对应显存中的解算得到的数据,获取粒子的位置、速度等数据,并进行一次gpu to gpu的拷贝,将新的位置、速度等数据拷贝到niagara对应的显存中,完成粒子的更新。
149.3、发射器更新:几何体管理器还可以读取niagara对应的显存中粒子的受力数值,并进行一次gpu to gpu的拷贝,写入几何体管理器对应的显存中。
150.4、系统更新:场景管理器读取受力数值,更新physion。
151.四、第4帧:系统更新:模拟下一帧,解算粒子的新的位置、速度等。
152.发射器更新:重复第3帧操作,进行一次gpu to gpu的拷贝,将新的位置、速度等数据拷贝到niagara对应的显存中,完成粒子的更新。
153.五、重复第4帧的步骤直至物理特效的最后一帧。
154.应该理解的是,虽然上文的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,这些流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
155.在一个实施例中,如图13所示,提供了一种物理特效渲染装置1300,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:数据获取模块1302,获取由粒子发射插件发射的物理特效粒子在上一帧中的物理特效数据;实例获取模块1304,用于获取对场景管理类进行实例化得到的第一目标实例;场景管理类继承自粒子发射插件提供的目标基类;数据计算模块1306,用于通过第一目标实例调用集成于粒子发射插件中的粒子模拟工具的场景管理接口,以在粒子模拟工具的场景管理器中,基于上一帧中的物理特效数据计算物理特效粒子在当前帧的运动状态信息;数据更新模块1308,用于基于当前帧的运动状态信息更新上一帧中的物理特效数据,以渲染得到当前帧中的物理特效。
156.上述物理特效渲染装置中,通过获取由粒子发射插件发射的物理特效粒子在上一帧中的物理特效数据,获取对场景管理类进行实例化得到的第一目标实例;场景管理类继承自粒子发射插件提供的目标基类,通过第一目标实例调用集成于粒子发射插件中的粒子模拟工具的场景管理接口,以在粒子模拟工具的场景管理器中,基于上一帧中的物理特效数据计算物理特效粒子在当前帧的运动状态信息,基于当前帧的运动状态信息更新上一帧中的物理特效数据,以渲染得到当前帧中的物理特效,由于将粒子模拟工具集成于粒子发射插件中,可以通过对场景管理类进行实例化得到的第一目标实例调用粒子模拟工具的场景管理接口,以在粒子模拟工具的场景管理器中计算得到运动状态信息,从而渲染得到物理特效,避免了从外部导入模拟结果,提高了物理特效渲染时的效率。
157.在一个实施例中,上述装置还包括:第一目标实例生成模块,用于从粒子发射插件提供的基类集合中,确定用于调用粒子模拟工具提供的数据接口的基类,得到目标基类;创建继承自目标基类的场景管理类,以对粒子模拟工具的场景管理接口进行调用;对场景管理类进行实例化,得到第一目标实例。
158.在一个实施例中,第一目标实例生成模块,还用于创建场景管理类对应的对象,得到场景管理对象;将场景管理对象进行封装,得到第一目标对象;将第一目标对象配置为粒子发射插件的第一属性,得到第一目标实例。
159.在一个实施例中,上述装置还包括,场景管理器配置模块,用于通过粒子发射插件的配置界面,获取对第一属性的属性参数进行配置得到的第一属性值;将第一属性值作为第一目标实例对应的变量值;通过第一目标实例对应的变量值对场景管理接口所对应的场景管理器的参数进行配置,得到配置后的、用于在粒子模拟工具中进行场景管理的场景管理器。
160.在一个实施例中,数据更新模块,还用于获取对几何体管理类进行实例化得到的第二目标实例;几何体管理类继承自粒子发射插件提供的目标基类;通过第二目标实例调用粒子模拟工具的几何体管理接口,以通过粒子模拟工具中的几何体管理器将当前帧的运动状态信息写入目标显存中,在目标显存中基于当前帧的运动状态信息更新上一帧中的物理特效数据,以渲染得到当前帧中的物理特效。
161.在一个实施例中,上述装置还包括:第二目标实例生成模块,用于创建继承自目标基类的几何体管理类,以对粒子模拟工具的几何体管理接口进行调用;创建几何体管理类对应的对象,得到几何体管理对象将几何体管理对象进行封装,得到第二目标对象;将第二目标对象配置为粒子发射插件的第二属性,得到第二目标实例。
162.在一个实施例中,上述装置还包括:几何体管理器配置模块,用于通过粒子发射插件的配置界面,获取对第二属性的属性参数进行配置得到的第二属性值;将第二属性值作为第二目标实例对应的变量值;通过第二目标实例对应的变量值对几何体管理接口所对应的几何体管理器进行配置,得到配置后的、用于在粒子模拟工具中进行几何体管理的几何体管理器。
163.在一个实施例中,上述装置还包括边界条件生成模块,用于获取对边界条件管理类进行实例化得到的第三目标实例;边界条件管理类继承自粒子发射插件提供的目标基类;通过第三目标实例调用粒子模拟工具的边界条件管理接口,以在粒子模拟工具的边界条件管理器中获得目标边界条件;数据计算模块,还用于在粒子模拟工具的场景管理器中,基于上一帧中的物理特效数据及目标边界条件计算物理特效粒子在当前帧的运动状态信息。
164.在一个实施例中,上述装置还包括:第三目标实例生成模块,用于创建继承自目标基类的边界条件管理类,以对粒子模拟工具的边界条件管理接口进行调用;创建继承自边界条件管理类的、与类型配置参数相应的目标派生类,对目标派生类进行实例化,得到第三目标实例;其中,类型配置参数是通过粒子发射插件的配置界面获取的对边界条件管理器的类型进行配置得到的参数。
165.在一个实施例中,第三目标实例生成模块,还用于创建目标派生类对应的对象,得到目标边界条件管理对象;将目标边界条件管理对象进行封装,得到第三目标对象;将第三
目标对象配置为粒子发射插件的第三属性,得到第三目标实例。
166.在一个实施例中,上述装置还包括边界条件管理器配置模块,用于通过粒子发射插件的配置界面,获取对第三属性的属性参数进行配置得到的第三属性值;将第三属性值作为第三目标实例对应的变量值;通过第三目标实例对应的变量值对边界条件管理接口所对应的边界条件管理器的参数进行配置,得到配置后的、用于在粒子模拟工具中进行边界条件管理的边界条件管理器。
167.在一个实施例中,数据计算模块,还用于在粒子模拟工具的场景管理器中,基于上一帧中的物理特效数据计算物理特效粒子在当前帧的运动状态信息,将运动状态信息写入第一显存中;数据更新模块,还用于从第一显存中读取当前帧的运动状态信息,将当前帧的运动状态信息进行拷贝;将拷贝得到的运动状态信息写入第二显存中,并在第二显存中基于当前帧的运动状态信息更新上一帧中的物理特效数据;其中,第一显存为粒子发射插件的目标显存中为粒子模拟工具分配的数据缓冲区域;第二显存为目标显存中异于第一显存的数据缓冲区域,用于存储粒子发射数据和粒子渲染数据。
168.在一个实施例中,上述装置还包括采样模块,用于在预设模型所在位置处发射预设数量的初始粒子,并将初始粒子的属性信息写入第二显存中;从第二显存中读取初始粒子的属性信息,对初始粒子的属性信息进行拷贝;将拷贝得到的初始粒子的属性信息写入第一显存中,通过粒子模拟工具基于第一显存中初始粒子的属性信息在预设模型的表面及内部进行采样,得到用于物理特效模拟的物理特效粒子。
169.在一个实施例中,数据更新模块,还用于在粒子模拟工具的场景管理器中,基于上一帧中的物理特效数据映射至预设的背景网格中;背景网格中包括多个网格节点;在背景网格中,基于物理特效数据计算与当前帧中各个物理特效粒子对应的网格节点的运动状态信息;将各个网格节点的运动状态信息映射至对应的物理特效粒子,得到当前帧中各个物理特效粒子的运动状态信息。
170.关于物理特效渲染装置的具体限定可以参见上文中对于物理特效渲染方法的限定,在此不再赘述。上述物理特效渲染装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
171.在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图14所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过wifi、运营商网络、nfc(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种物理特效渲染方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
172.本领域技术人员可以理解,图14中示出的结构,仅仅是与本技术方案相关的部分
结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
173.在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
174.在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
175.在一个实施例中,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各方法实施例中的步骤。
176.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read

only memory,rom)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(random access memory,ram)或外部高速缓冲存储器。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(static random access memory,sram)或动态随机存取存储器(dynamic random access memory,dram)等。
177.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
178.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献