图像特效的生成方法、装置、电子设备及存储介质

文档序号:96543 发布日期:2021-10-12 浏览:19次 >En<

阅读说明:本技术 图像特效的生成方法、装置、电子设备及存储介质 (Image special effect generation method and device, electronic equipment and storage medium ) 是由 刘斌 戴强 马重阳 于 2021-07-30 设计创作,主要内容包括:本公开提供一种图像特效的生成方法、装置、电子设备及存储介质。所述图像特效的生成方法可包括:针对待处理视频中的每个视频帧执行以下操作:确定当前视频帧的对象关键点;在与所述对象关键点对应的位置处生成用于渲染火焰的速度,并且将所述速度存储在速度缓冲区的对应网格处;根据所述速度缓冲区中存储的所述速度确定所述速度缓冲区的每个网格处的流动速度;根据所述流动速度来确定用于所述当前视频帧的当前的氧气浓度和燃料浓度;根据所述当前的氧气浓度和燃料浓度模拟燃烧反应得到温度值,并且将所述温度值映射为火焰颜色来得到火焰特效;将所述火焰特效添加到所述当前视频帧中。本公开解决了现有火焰渲染算法中运算效率低下的问题。(The disclosure provides a method and a device for generating image special effects, electronic equipment and a storage medium. The method for generating the image special effect can comprise the following steps: performing the following for each video frame in the video to be processed: determining object key points of a current video frame; generating a velocity for rendering a flame at a location corresponding to the object keypoint and storing the velocity at a corresponding grid of a velocity buffer; determining a flow velocity at each mesh of the velocity buffer from the velocities stored in the velocity buffer; determining a current oxygen concentration and fuel concentration for the current video frame from the flow rate; simulating a combustion reaction according to the current oxygen concentration and the current fuel concentration to obtain a temperature value, and mapping the temperature value to a flame color to obtain a flame special effect; adding the flame special effect to the current video frame. The method and the device solve the problem that the operation efficiency is low in the existing flame rendering algorithm.)

图像特效的生成方法、装置、电子设备及存储介质

技术领域

本公开涉及视频处理

技术领域

,尤其涉及一种用于模拟和渲染火焰效果的图像特效的生成方法、装置、电子设备及存储介质。

背景技术

为了增强视频的视觉效果,会向视频中添加各种各样的图像特效显示,以提高用户的新鲜感。例如,在视频中添加火焰特效。火焰是自然界的一种常见的现象,火焰特效在电影、游戏、视频剪辑中被广泛使用。火焰的本质是高温空气的流动,因此,如果刻画真实的火焰流动效果,则需要对空气进行模拟仿真。

然而,目前在视频中实现火焰特效的算法较为复杂,运算效率低,需要耗费带量的系统资源,这样可能导致添加有火焰特效的视频显示不流畅,无法达到预期的效果。

发明内容

本公开提供一种图像特效的生成方法、装置、电子设备及存储介质,以至少解决上述提及的问题。

根据本公开实施例的第一方面,提供一种图像特效的生成方法,所述方法包括以下步骤:针对待处理视频中的每个视频帧执行以下操作:确定当前视频帧的对象关键点;在与所述对象关键点对应的位置处生成用于渲染火焰的速度,并且将所述速度存储在速度缓冲区的对应网格处,其中,所述速度缓冲区的分辨率小于所述当前视频帧的分辨率;根据所述速度缓冲区中存储的所述速度确定所述速度缓冲区的每个网格处的流动速度;根据所述流动速度来确定用于所述当前视频帧的当前的氧气浓度和燃料浓度;根据所述当前的氧气浓度和燃料浓度模拟燃烧反应得到温度值,并且将所述温度值映射为火焰颜色来得到火焰特效;将所述火焰特效添加到所述当前视频帧中。

可选地,所述当前的氧气浓度和燃料浓度存储在浓度缓冲区的对应网格处,其中,所述浓度缓冲区的分辨率与所述当前视频帧的分辨率相同。

可选地,所述在与所述对象关键点对应的位置处生成用于渲染火焰的速度,包括:在与所述对象关键点对应的位置处随机生成第一速度;对所述第一速度进行高斯模糊处理以获得第二速度;将所述第二速度与前一视频帧的速度缓冲区的对应网格处的速度进行叠加以生成第三速度;通过对所述第三速度进行旋度增强来得到用于渲染火焰的所述速度。

可选地,所述根据所述速度缓冲区中存储的所述速度确定所述速度缓冲区的每个网格处的流动速度,包括:计算所述速度缓冲区的每个网格处的速度的散度;根据所述散度计算所述速度缓冲区的每个网格处的速度的无旋分量;通过从所述速度缓冲区的每个网格处的速度减去所述无旋分量来得到所述速度缓冲区的每个网格处的速度的无散分量;基于所述无散分量来确定所述流动速度。

可选地,根据所述流动速度来确定用于所述当前视频帧的当前的氧气浓度和燃料浓度,包括:在与所述对象关键点对应的位置处随机生成第一氧气浓度和第一燃料浓度;通过对所述第一氧气浓度和所述第一燃料浓度分别进行高斯模糊处理以获得第二氧气浓度和第二燃料浓度;根据所述流动速度确定前一视频帧的氧气浓度和燃料浓度经过一帧时间演化得到的第三氧气浓度和第三燃料浓度;根据所述第二氧气浓度和所述第三氧气浓度来生成所述当前的氧气浓度并且根据所述第二燃料浓度和所述第三燃料浓度来生成所述当前的燃料浓度。

可选地,将所述第二氧气浓度和所述第二燃料浓度存储在所述第一浓度缓冲区的对应网格处,并且将所述第三氧气浓度和所述第三燃料浓度存储在第二浓度缓冲区,其中,所述第一浓度缓冲区的分辨率小于当前视频帧的分辨率,并且所述第二浓度缓冲区的分辨率与当前视频帧的分辨率相同。

可选地,根据所述第二氧气浓度和所述第三氧气浓度来生成所述当前的氧气浓度并且根据所述第二燃料浓度和所述第三燃料浓度来生成所述当前的燃料浓度,包括:对所述第二氧气浓度和所述第二燃料浓度分别进行双线性插值;通过将所述第三氧气浓度和经过双线性插值处理的第二氧气浓度进行叠加来得到所述当前的氧气浓度,并且通过将所述第三燃料浓度和经过双线性插值处理的第二燃料浓度进行叠加来得到所述当前的燃料浓度。

根据本公开实施例的第二方面,提供一种图像特效的生成装置,所述装置包括:关键点确定模块,被配置为确定当前视频帧的对象关键点;速度模块,被配置为:在与所述对象关键点对应的位置处生成用于渲染火焰的速度,将所述速度存储在速度缓冲区的对应网格处,并且根据所述速度缓冲区中存储的所述速度确定所述速度缓冲区的每个网格处的流动速度,其中,所述速度缓冲区的分辨率小于所述当前视频帧的分辨率;浓度模块,被配置为根据所述流动速度来确定用于所述当前视频帧的当前的氧气浓度和燃料浓度;模拟模块,被配置为根据所述当前的氧气浓度和燃料浓度模拟燃烧反应得到温度值,将所述温度值映射为火焰颜色来得到火焰特效,并且将所述火焰特效添加到所述当前视频帧中。

可选地,所述当前的氧气浓度和燃料浓度存储在浓度缓冲区的对应网格处,其中,所述浓度缓冲区的分辨率与所述当前视频帧的分辨率相同。

可选地,所述速度模块被配置为:在与所述对象关键点对应的位置处随机生成第一速度;对所述第一速度进行高斯模糊处理以获得第二速度;将所述第二速度与前一视频帧的速度缓冲区的对应网格处的速度进行叠加以生成第三速度;通过对所述第三速度进行旋度增强来得到用于渲染火焰的所述速度。

可选地,所述速度模块被配置为:计算所述速度缓冲区的每个网格处的速度的散度;根据所述散度计算所述速度缓冲区的每个网格处的速度的无旋分量;通过从所述速度缓冲区的每个网格处的速度减去所述无旋分量来得到所述速度缓冲区的每个网格处的速度的无散分量;基于所述无散分量来确定所述流动速度。

可选地,所述浓度模块被配置为:在与所述对象关键点对应的位置处随机生成第一氧气浓度和第一燃料浓度;通过对所述第一氧气浓度和所述第一燃料浓度分别进行高斯模糊处理以获得第二氧气浓度和第二燃料浓度;根据所述流动速度确定前一视频帧的氧气浓度和燃料浓度经过一帧时间演化得到的第三氧气浓度和第三燃料浓度;根据所述第二氧气浓度和所述第三氧气浓度来生成所述当前的氧气浓度,并且根据所述第二燃料浓度和所述第三燃料浓度来生成所述当前的燃料浓度。

可选地,所述第二氧气浓度和所述第二燃料浓度存储在所述第一浓度缓冲区的对应网格处,并且所述第三氧气浓度和所述第三燃料浓度存储在第二浓度缓冲区,其中,所述第一浓度缓冲区的分辨率小于当前视频帧的分辨率,并且所述第二浓度缓冲区的分辨率与当前视频帧的分辨率相同。

可选地,所述浓度模块被配置为:对所述第二氧气浓度和所述第二燃料浓度分别进行双线性插值;通过将所述第三氧气浓度和经过双线性插值处理的第二氧气浓度进行叠加来得到所述当前的氧气浓度,并且通过将所述第三燃料浓度和经过双线性插值处理的第二燃料浓度进行叠加来得到所述当前的燃料浓度。

根据本公开实施例的第三方面,提供一种电子设备,所述电子设备可包括:至少一个处理器;至少一个存储器,存储计算机可执行指令,其中,所述计算机可执行指令在被所述至少一个处理器运行时,使得所述至少一个处理器执行如上所述的图像特效的生成方法。

根据本公开实施例的第四方面,提供一种计算机可读存储介质,当指令被至少一个处理器运行时,使得所述至少一个处理器执行如上所述的图像特效的生成方法。

根据本公开实施例的第五方面,提供一种计算机程序产品,所述计算机程序产品中的指令被电子装置中的至少一个处理器运行以执行如上所述的图像特效的生成方法。

本公开的实施例提供的技术方案至少带来以下有益效果:

通过在比待编辑视频的分辨率小的缓冲区上执行火焰渲染算法以缩短计算时间,并且利用硬件的双线性插值采样纹理,避免在着色器代码中手动对缓冲区数据做插值,从而提高效率。此外,通过对速度场进行旋度增强使形成的火焰的漩涡更加明显,火焰的细节更加丰富。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。

图1是根据本公开的实施例的图像特效的生成方法的流程图;

图2至图4是根据本公开的实施例的火焰效果的示意图;

图5是根据本公开的实施例的图像特效的生成方法的流程示意图;

图6是根据本公开的实施例的图像特效的生成设备的结构示意图;

图7是根据本公开的实施例的图像特效的生成装置的框图;

图8是根据本公开的实施例的电子设备的框图。

在整个附图中,应注意,相同的参考标号用于表示相同或相似的元件、特征和结构。

具体实施方式

为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。

提供参照附图的以下描述以帮助对由权利要求及其等同物限定的本公开的实施例的全面理解。包括各种特定细节以帮助理解,但这些细节仅被视为是示例性的。因此,本领域的普通技术人员将认识到在不脱离本公开的范围和精神的情况下,可对描述于此的实施例进行各种改变和修改。此外,为了清楚和简洁,省略对公知的功能和结构的描述。

以下描述和权利要求中使用的术语和词语不限于书面含义,而仅由发明人用来实现本公开的清楚且一致的理解。因此,本领域的技术人员应清楚,本公开的各种实施例的以下描述仅被提供用于说明目的而不用于限制由权利要求及其等同物限定的本公开的目的。

需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的示例。

相关方法在每个时间步长通过使用欧拉网格法求解纳维-斯托克斯Navier-Stokes方程,由此得到更新后的速度场,再由更新后的速度场带动温度场、浓度场运动以得到新的温度场和速度场,最后在火焰模拟区域画出一个面片,根据温度场对这个面片上色,从而得到火焰的渲染结果。然而,这样的方法计算量大、功耗大、对硬件的要求高,并且在移动设备上难以达到交互所需的帧率。

本公开针对相关火焰渲染算法中效率低的问题,在比待编辑视频的分辨率小的缓冲区上执行火焰渲染算法以缩短计算时间,并且利用硬件的双线性插值采样纹理,避免在着色器代码中手动对缓冲区数据做插值,从而提高效率。

在下文中,根据本公开的各种实施例,将参照附图对本公开的图像特效的生成方法、装置、电子设备及存储介质进行详细描述。

图1是根据本公开的实施例的图像特效的生成方法的流程图。图1所示的方法可在电子设备中实现。电子设备可以是智能手机、平板电脑、便携式计算机和台式计算机等中的至少一种。

可首先根据待编辑视频的分辨率来确定将用于执行计算的缓冲区(诸如浓度场、速度场)的分辨率。例如,当待编辑视频的分辨率是1280×720,可将缓冲区的分辨率设置为128×72,然而上述示例仅是示例性的,本公开不限于此。此外,可根据设备的屏幕分辨率来设置缓冲区的分辨率。接下来,可针对待编辑视频的每个视频帧执行图1所示的每个步骤。

在步骤S101,可确定当前视频帧的对象关键点。例如,可将当前视频帧中用户的手作为目标对象,然后通过人工智能AI技术从当前视频帧中提取该手的位置,作为对象关键点输入。

在步骤S102,可在与确定的对象关键点对应的位置处生成用于渲染火焰的速度,并且将生成的速度存储在速度缓冲区的对应网格处。这里,用于存储速度的速度缓冲区的分辨率可小于当前视频帧的分辨率,并且可使用经过旋度增强处理的速度作为用于生成火焰的速度。

具体地,可在与确定的对象关键点对应的位置处随机生成第一速度,对随机生成的第一速度进行高斯模糊处理以获得第二速度,将第二速度与前一视频帧的速度缓冲区的对应网格处的速度进行叠加以生成第三速度,然后通过对第三速度进行旋度增强来得到用于渲染火焰的速度。

作为示例,可在与对象关键点对应的位置处随机产生速度,以形成第一速度场,对第一速度场中的速度进行高斯模糊处理以获得第二速度场,将第二速度场与前一视频帧的速度场进行叠加以生成第三速度场,通过对第三速度场进行旋度增强来得到用于渲染火焰的速度场。

此外,根据本公开的实施例,在随机产生第一速度场时,可利用列表保存待编辑视频的前N秒(诸如前两秒)至当前时刻的所有关键点,然后在列表中保存的关键点附近随机产生速度,从而获得相应的第一速度场。

在对第三速度场进行旋度增强时,可首先计算第三速度场的旋度,然后利用计算的旋度对第三速度场进行旋度增强。

例如,可利用等式(1)来计算第三速度场的旋度:

其中,ci,j表示速度场的(i,j)网格的旋度,ui,j表示速度场的(i,j)网格的x方向分量,vi,j表示速度场的(i,j)网格的y方向分量。这里的速度场指第三速度场。

然后,可利用等式(2)对第三速度场进行旋度增强以获得经过旋度增强处理的速度场:

其中,表示使旋度增强的施力方向。

其中,u′i,j表示旋度增强后的速度场的(i,j)网格的x方向分量,v′i,j表示旋度增强后的速度场的(i,j)网格的y方向分量,ui,j表示第三速度场的(i,j)网格的x方向分量,vi,j表示第三速度场的(i,j)网格的y方向分量。

根据本公开的实施例,通过对速度场中的速度进行旋度增强,可使火焰的漩涡更加明显。例如,参照图2和图3,其中,图2示出了在未对速度场中的速度进行旋度增强的情况下的火焰效果的示图,图3示出了在对速度场中的速度进行旋度增强的情况下的火焰效果的示图。从图2和图3可看出,在对速度场的速度进行旋度增强的情况下生成的火焰的漩涡明显增强,并且具有更丰富的细节。

在步骤S103,根据速度缓冲区中存储的速度来确定速度缓冲区的每个网格处的流动速度。具体地,可计算速度缓冲区的每个网格处的速度的散度,根据每个网格处的速度的散度来计算速度缓冲区的相应网格处的速度的无旋分量,通过从速度缓冲区的每个网格处的速度减去相应的无旋分量来得到速度缓冲区的相应网格处的速度的无散分量,基于无散分量来确定相应网格处的流动速度。

作为示例,可计算速度场(即速度缓冲区)中的速度的散度,根据散度计算速度场中的速度的无旋分量,通过从速度场的每个网格处的速度减去对应的无旋分量来得到无散分量,基于无散分量来确定流动速度。

例如,可利用等式(3)来计算速度场的每个网格处的速度的散度:

其中,di,j表示旋度增强后的速度场的(i,j)网格的散度,u′i,j表示旋度增强后的速度场的(i,j)网格的x方向分量,v′i,j表示旋度增强后的速度场的(i,j)网格的y方向分量。这里的速度场可以是对第三速度场中的速度进行旋度增强后的速度场。计算速度场的散度值用于为使用迭代法求解Navier-Stokes方程准备数据。

速度场的无旋分量可指压强场的梯度。可通过使用迭代法求解Navier-Stokes方程来获得压强场。例如,可采用泊松方程▽w-▽2q=0来求解压强场,这里,▽w可指上面计算出的散度/散度场,▽2表示拉普拉斯算子,q是待求解的压强场。可通过迭代N次(N一般取7)来计算压强场。迭代过程可如下所示:

其中,p′表示每轮迭代后的压强场,经过多轮迭代后,压强场的拉普拉斯算子将逐渐逼近速度场的散度。

可利用等式(4)来得到速度场中的速度的无散分量:

其中,(u″i,j,v″i,j)表示速度场的(i,j)网格的无散分量。

对于上述求解速度场的不可压缩约束,当速度场中一点的外界流入量大于流出量时,该点会产生流出的速度,方向是压强的梯度方向,反之亦然。如果没有求解不可压缩约束的步骤,流体会在生成的位置被无限压缩,而跑不出去,诸如图4所示。

根据本公开的实施例,通过求解速度场的不可压缩约束,可保持流体的体积不会无故膨胀或压缩,使得火焰效果更加自然。

根据速度场回溯,当前网格(i,j)的速度应该等于前一帧(i',j')=(i,j)-v×dt网格处的速度,相当于使用隐式欧拉法或者半隐式欧拉法,根据网格的速度场情况更新经过一个仿真时间步长。例如,可用如下等式(5)和(6)表示:

(u′i,j,v′i,j)=(ui',j',vi',j') (5)

(i',j')=(i,j)-(u′i,j,v′i,j)Δt (6)

在步骤S104,根据确定的流动速度来确定用于当前视频帧的当前的氧气浓度和燃料浓度。具体地,在与对象关键点对应的位置处随机生成第一氧气浓度和第一燃料浓度,通过对第一氧气浓度和第一燃料浓度分别进行高斯模糊处理以获得第二氧气浓度和第二燃料浓度,根据流动速度确定前一视频帧的氧气浓度和燃料浓度经过一帧时间演化得到的第三氧气浓度和第三燃料浓度,根据第二氧气浓度和第三氧气浓度来生成当前的氧气浓度并且根据第二燃料浓度和第三燃料浓度来生成当前的燃料浓度。

作为示例,可利用在与对象关键点对应的位置处随机产生氧气浓度和燃料浓度来产生第一浓度场,其中,用于存储第一浓度场的缓冲区的分辨率小于当前视频帧的分辨率,对第一浓度场中的氧气浓度和燃料浓度分别进行高斯模糊处理以获得第二浓度场,根据流动速度确定前一视频帧的浓度场经过一帧时间演化得到的第三浓度场,然后将第二浓度场中的氧气浓度和燃料浓度与第三浓度场中的氧气浓度和燃料浓度进行叠加以生成当前视频帧的浓度场。根据本公开的实施例,进行燃烧反应时使用的是与当前视频帧的分辨率相同的用于存储浓度场的缓冲区,所以在进行浓度场叠加时,可利用硬件的双线性插值将与第二浓度场相应的缓冲区的分辨率改变为与和第三浓度场相应的缓冲区的分辨率相同,然后将与第三浓度场相应的缓冲区与分辨率改变后的与第二浓度场相应的缓冲区进行叠加。

可根据网格的速度场情况更新浓度场。例如,可根据当前视频帧的流动速度来确定前一视频帧的与当前视频帧的网格位置相应的位置(诸如等式(6)所示)处的浓度,然后可利用前一视频帧中的相应网格处的浓度(包括氧气和燃料)与经过高斯模糊处理的浓度进行叠加以生成当前视频帧的浓度场。

例如,可利用等式(7)来确定当前视频帧的浓度场:

(g′i,j,o′i,j)=(gi',j',oi',j')+src_deni,j (7)

其中,(g′i,j,o′i,j)表示当前视频帧的浓度场的(i,j)网格的燃料浓度和氧气浓度,(gi',j',oi',j')表示前一视频帧的浓度场的(i',j')网格的燃料浓度和氧气浓度,src_deni,j表示对随机产生的第一浓度场的网格的燃料浓度和氧气浓度分别进行高斯模糊之后的第二浓度场的(i,j)网格的燃料浓度和氧气浓度。

根据本公开的实施例,与用于燃烧反应的浓度场相应的缓冲区的分辨率与当前视频帧的分辨率相同,而与经过高斯模糊处理的第二浓度场相应的缓冲区的分辨率低于当前视频帧的分辨率,可通过利用硬件的双线性插值自动对第二浓度场中的氧气浓度和燃料浓度分别进行插值处理,以得到与前一视频帧的分辨率一致的浓度场,从而实现浓度场的叠加。在硬件上,缓冲区和纹理属于不同的概念。在显卡上的缓冲区可按整数坐标读写,而纹理只能读不能写,但是可按浮点数坐标执行。手动实现双线性采样是取出采样点邻近的4个整数坐标上的值,按行列分别做线性插值。但是对于纹理可直接传给硬件一个浮点数坐标,硬件自动完成计算得到结果。因此,可实现用硬件的双线性插值采样纹理,避免在着色器代码中手动对缓冲区数据做插值,从而提高效率。

在步骤S105,根据当前的氧气浓度和燃料浓度模拟燃烧反应得到温度值,并且将温度值映射为火焰颜色来得到火焰特效,将火焰特效添加到当前视频帧中。

作为示例,可根据当前视频帧的浓度场产生燃烧反应并且得到相应温度场。例如,可利用下面的等式(8)获得当前视频帧的温度场:

h=g′·o′·(5T+0.5)

g″=g′-h

o″=o′-h

T′=k·(T+h) (8)

其中,h表示燃烧反应产生的热量,T和T′表示燃烧反应前(即前一视频帧)和燃烧反应后(即当前视频帧)的温度。o′和o″表示当前视频帧燃烧反应前后的氧气浓度,g′和g″表示当前视频帧燃烧反应前后的燃料浓度。k是温度衰减系数,表示温度随着时间会逐渐冷却。

根据温度场的每个点的温度值对一个温度到颜色映射的纹理进行采样,以得到颜色值,从而生成火焰。这里,温度到颜色的映射纹理可预先根据黑体辐射公式计算得到,其存储了0开尔文到10000开尔文的范围内每隔10开尔文的温度对应的颜色。

图5是根据本公开的实施例的图像特效的生成方法的流程示意图。

参照图5,在步骤S501,首先执行初始化。可预先为计算着色器以及顶点和像素着色器分配缓冲区。在本公开中,为了缩短计算时间并提高计算效率,可采用具有比待编辑视频的分辨率或者屏幕分辨率更小的分辨率的缓冲区。

作为示例,当待编辑视频的分辨率为1280×720时,可将用于计算着色器的缓冲区设置为待编辑视频的分辨率的1/N,诸如N为10。然而,上述示例仅是示例性的,本公开不限于此。

例如,可预先分配如下的缓冲区在计算着色器中使用,诸如src_den1、src_den2、src_vel1、src_vel2、vel1、vel2、div、curl、pre1、pre2,其中,src_vel1、src_vel2、vel1、vel2表示速度场,其中,vel1存储用于渲染火焰的速度场,src_den1、src_den2表示浓度场,速度场和浓度场中的元素可以是二维向量,例如,浓度场中的每个元素包括氧气浓度和燃料浓度,速度场中的每个元素包括x方向速度和y方向速度;div表示散度场,curl表示旋度场,pre1、pre2表示压强场,散度场、旋度场和压强场中的元素可以是浮点数。然而,上述示例仅是示例性的,可根据设计需求来不同地设置缓冲区的类型和数量。假设待编辑视频的分辨率是1280×720,可将上述缓冲区的分辨率设置为128×72。

此外,可分配如下的缓冲区用于计算着色器向像素着色器传输数据,诸如out_buf。可将out_buf设置为一维数组。假设待编辑视频的分辨率是1280×720,可将out_buf的长度设置为128×72×4,其中,out_buf中的每个元素可以是浮点数。

此外,可分配如下的纹理以用于像素着色器进行读写,诸如input_tex、den_tex、history_tex。应理解的,纹理属于硬件上的概念,场/缓冲区属于物理上的概念。

其中,input_tex可用于缓存每帧新增的浓度场的数据,可从out_buf向input_tex传输数据,den_tex可用于缓存当前视频帧的氧气和燃料浓度以及温度,history_tex可用于缓存前一视频帧的氧气和燃料浓度以及温度。例如,input_tex可缓存每帧补充进来的新的燃气,den_tex可缓存新旧加在一起的燃气。如果没有新的燃气补充,den_tex会一直消耗燃气,直到消耗完。

假设待编辑视频的分辨率是1280×720,可将input_tex的分辨率设置为128×72,采用RGBA四通道,格式为16位浮点数,将den_tex和history_tex的分辨率设置为1280×720,采用RGBA四通道,格式为16位浮点数。

对于上述初始化步骤可仅在特效开始时执行一次,在后面的计算中不需要再次执行。

图5所示的步骤S502至步骤S511属于计算着色器处理阶段,需要针对待编辑视频中的每个视频帧执行计算着色器处理阶段。下面将对计算着色器处理阶段进行详细描述。

在步骤S502,可通过AI技术从待编辑视频中提取每个视频帧的关键点位置。关键点位置可以是期望被添加火焰效果的位置。例如,关键点可以是每个视频帧中的用户手的位置。

在步骤S503,在关键点相应位置处写入浓度场和速度场。此时的浓度场和速度场可以是具有比待编辑视频的分辨率低的分辨率的场。例如,可在关键点位置附近随机产生新增的流体位置、氧气和燃料浓度以及速度,然后将随机产生的氧气和燃料浓度写入src_den1中的对应位置,并且将随机产生速度写入src_vel1的对应位置。

可选地,针对当前帧的浓度场和速度场,可利用前N秒至当前的所有关键点,在这些关键点位置附近随机产生流体位置、氧气和燃料浓度以及速度,然后将随机产生的氧气和燃料浓度写入src_den1中的对应位置,并且将随机产生的速度写入src_vel1的对应位置。例如,针对每个视频帧,可利用一个列表来存储前N秒(诸如N=2)至当前时刻的所有关键点,以用于随机产生流体位置、氧气和燃料浓度以及速度。

在步骤S504,对随机产生的浓度场和速度场中的氧气浓度和燃料浓度以及速度分别进行高斯模糊处理。例如,对src_den1和src_vel1中的元素进行高斯模糊处理,并且将模糊后的结果写入src_den2和src_vel2。

在步骤S505,进行速度场叠加输入。可将经过高斯模糊处理的速度场与前一视频帧的速度场进行叠加。例如,可将src_vel2与vel1(此时的vel1中存储的是前一视频帧的用于渲染火焰的速度场)两个缓冲区的对应位置值相加,并且将相加结果写入vel2。这里,将当前帧的src_vel2中的数据与针对前一视频帧速度场vel1中的数据进行累加。

在步骤S506,可利用叠加后的速度场计算旋度。例如,可根据等式(1)计算vel2的旋度,并且将计算的旋度存储在curl中。这里,计算出的旋度值可用于下一步骤的旋度增强。

在步骤S507,修改速度场使得速度场中的各个速度的旋度增强。例如,可根据等式(2)对速度场中的各个速度进行旋度增强处理,并且可将旋度增强后的速度场存储在vel1中。

根据本公开的实施例,通过使速度场中的速度的旋度增强,可实现生成的火焰的漩涡更加明显,即使得火焰的漩涡增强,具有更加丰富的细节。

在步骤S508,计算旋度增强后的速度场的散度。例如,可根据等式(3)使用vel1(此时vel1中存储的是旋度增强后的速度场)计算旋度增强后的速度场的散度。这里,计算速度场的散度用于为后面使用迭代法求解Navier-Stokes方程准备数据。

在步骤S509,利用上面计算的散度来计算旋度增强后的速度场中各个速度的无旋分量(即压强场)。这里无旋分量即为压强场的梯度。例如,可通过迭代法求解泊松方程来得到压强场。例如,可通过迭代N(N一般取7)次泊松方程来得到压强场。在迭代过程中,可利用pre1和pre2两个缓冲区轮流存储每轮的压强。

在步骤S510,求解不可压缩约束。可从有散度的速度场中的各个速度减去该速度场中的相应速度的无旋分量,即压强场梯度,来得到无散分量。例如,可利用等式(4)使用旋度增强的速度场(vel1)来得到该速度场中的相应速度的无散分量。

步骤S508至S510主要用于求解速度场的不可压缩约束,其目的在于保持流体的体积不会无缘无故膨胀或压缩。当速度场中一点外界流入量大于流出量,该点会产生流出的速度,方向是压强的梯度方向。反之亦然。如果没有求解不可压缩约束的步骤,流体就会在生成的位置被无限压缩,跑不出去。

在步骤S511,根据速度场更新网格速度值。根据速度场回溯,当前网格(i,j)的速度应该等于前一时刻的(i',j')=(i,j)-v×dt处网格的速度,相当于使用隐式欧拉法或者半隐式欧拉法做数值积分,积分的自变量是时间,根据网格的速度场情况更新经过一个仿真时间步长,诸如等式(5)和(6)所示。

接下来,可将在步骤S511中存储有速度场的低分辨率缓冲区与和在步骤S504获得的经过高斯模糊处理的浓度场对应的低分辨率缓冲区进行整合并存储在另一缓冲区中。例如,将存储速度场的低分辨率(诸如128×72)缓冲区与存储浓度场的低分辨率(诸如128×72)缓冲区整合为一个低分辨率(诸如128×72)的缓冲区,在这个缓冲区的每个网格可存储有速度值和氧气燃料浓度值。

可根据整合后的低分辨缓冲区来获得相应的低分辨率的纹理。可根据该低分辨率的纹理中的速度信息来计算前一帧的history_tex的流体进行一帧时间的演化达到的浓度场和温度场,并且该浓度场和温度场存储在高分辨率(诸如与待编辑视频相同的分辨率)的纹理中。

对于步骤S512至S514属于顶点着色器和像素着色器处理阶段,需要针对待编辑视频中的每个视频帧执行顶点着色器和像素着色器处理阶段,下面将进行详细描述。

在步骤S512,进行浓度场叠加输入。浓度场叠加输入,并做隐式欧拉法积分,根据网格的速度场情况更新浓度场中的氧气浓度和燃料浓度经过一个仿真时间步长。S512的输入可以是上一步骤得到的高分辨率的纹理以及低分辨率的纹理,将它们的浓度信息进行叠加(这里,由于两个纹理的分辨率不同,所以可通过硬件的双线性插值对低分辨率的纹理进行采样),并且将叠加的结果暂时存储在高分辨率的纹理den_tex中,而上一步骤得到的高分辨率的纹理中的温度不经变化直接存在den_tex中。

在步骤S513,根据燃烧反应更新浓度场和温度场。S513输入可以是高分辨率的纹理den_tex,根据燃烧反应,从den_tex中获取浓度和温度场,计算燃烧后的浓度和温度场,从而更新高分辨率的纹理den_tex中的浓度场和温度场。

例如,参照等式(7)和(8),g、o、T可以分别存储在history_tex的RGB通道中,g′和o′分别是中间结果,可不保存,g″、o″和T′可分别保存在den_tex的RGB通道中。

在步骤S513得到的浓度场和温度场可用于下一帧的浓度场叠加。

在步骤S514,通过将温度场中的温度值映射为颜色来生成火焰。

例如,可根据den_tex中每个点上的B通道分量(其可反应温度)的值,采样预先计算好的温度到颜色映射的查找表,以得到颜色值,从而在视频中形成火焰效果。

根据本公开的实施例,从out_buf向input_tex传输数据中,由于out_buf为低分辨率的缓冲区,仅能按照离散的坐标进行采样,而input_tex为低分辨率的纹理并且den_tex为正常分辨率(即与待处理视频分辨率相同)的纹理,可按照连续的坐标进行采样,从而实现双线性插值。

图6是本公开实施例的硬件运行环境的图像特效的生成设备的结构示意图。

如图6所示,图像特效的生成设备600可包括:处理组件601、通信总线602、网络接口603、输入输出接口604、存储器605以及电源组件606。其中,通信总线602用于实现这些组件之间的连接通信。输入输出接口604可以包括视频显示器(诸如,液晶显示器)、麦克风和扬声器以及用户交互接口(诸如,键盘、鼠标、触摸输入装置等),可选地,输入输出接口604还可包括标准的有线接口、无线接口。网络接口603可选的可包括标准的有线接口、无线接口(如无线保真接口)。存储器605可以是高速的随机存取存储器,也可以是稳定的非易失性存储器。存储器605可选的还可以是独立于前述处理组件601的存储装置。

本领域技术人员可以理解,图6中示出的结构并不构成对图像特效的生成设备600的限定,可包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

如图6所示,作为一种存储介质的存储器605中可包括操作系统(诸如MAC操作系统)、数据存储模块、网络通信模块、用户接口模块、与图像特效的生成方法对应的程序以及数据库。

在图6所示的图像特效的生成设备600中,网络接口603主要用于与外部电子设备/终端进行数据通信;输入输出接口604主要用于与用户进行数据交互;图像特效的生成设备600中的处理组件601、存储器605可被设置在图像特效的生成设备600中,图像特效的生成设备600通过处理组件601调用存储器605中存储的图像特效的生成程序以及由操作系统提供的各种API,执行本公开实施例提供的图像特效的生成方法。

处理组件601可以包括至少一个处理器,存储器605中存储有计算机可以执行指令集合,当计算机可以执行指令集合被至少一个处理器执行时,执行根据本公开实施例的图像特效的生成方法。此外,处理组件601可执行编码操作和解码操作等。然而,上述示例仅是示例性的,本公开不限于此。

处理组件601可针对待处理视频中的每个视频帧执行以下操作:确定当前视频帧的对象关键点;在与对象关键点对应的位置处生成用于渲染火焰的速度,并且将所述速度存储在速度缓冲区的对应网格处;根据速度缓冲区中存储的速度确定速度缓冲区的每个网格处的流动速度;根据流动速度来确定用于当前视频帧的当前的氧气浓度和燃料浓度;根据当前的氧气浓度和燃料浓度模拟燃烧反应得到温度值,并且将温度值映射为火焰颜色来得到火焰特效;将该火焰特效添加到所述当前视频帧中。

处理组件601可通过执行程序来实现对图像特效的生成设备600所包括的组件的控制。

图像特效的生成设备600可经由输入输出接口604接收或输出视频和/或音频。例如,用户可经由输入输出接口604输出添加了火焰特效的视频。

作为示例,图像特效的生成设备600可以是PC计算机、平板装置、个人数字助理、智能手机、或其他能够执行上述指令集合的装置。这里,图像特效的生成设备600并非必须是单个的电子设备,还可以是任何能够单独或联合执行上述指令(或指令集)的装置或电路的集合体。图像特效的生成设备600还可以是集成控制系统或系统管理器的一部分,或者可以被配置为与本地或远程(例如,经由无线传输)以接口互联的便携式电子设备。

在图像特效的生成设备600中,处理组件601可包括中央处理器(CPU)、图形处理器(GPU)、可编程逻辑装置、专用处理器系统、微控制器或微处理器。作为示例而非限制,处理组件601还可以包括模拟处理器、数字处理器、微处理器、多核处理器、处理器阵列、网络处理器等。

处理组件601可运行存储在存储器中的指令或代码,其中,存储器605还可以存储数据。指令和数据还可以经由网络接口603而通过网络被发送和接收,其中,网络接口603可以采用任何已知的传输协议。

存储器605可以与处理组件601集成为一体,例如,将RAM或闪存布置在集成电路微处理器等之内。此外,存储器605可包括独立的装置,诸如,外部盘驱动、存储阵列或任何数据库系统可以使用的其他存储装置。存储器和处理组件601可以在操作上进行耦合,或者可以例如通过I/O端口、网络连接等互相通信,使得处理组件601能够读取存储在存储器605中的数据。

图7是根据本公开的实施例的图像特效的生成装置的框图。

参照图7,图像特效的生成装置700可包括关键点确定模块701、速度模块702、浓度模块703以及模拟模块704。图像特效的生成装置700中的每个模块可由一个或多个模块来实现,并且对应模块的名称可根据模块的类型而变化。在各种实施例中,可省略图像特效的生成装置700中的一些模块,或者还可包括另外的模块。此外,根据本公开的各种实施例的模块/元件可被组合以形成单个实体,并且因此可等效地执行相应模块/元件在组合之前的功能。

关键点确定模块701可确定当前视频帧的对象关键点。

速度模块702可在与对象关键点对应的位置处生成用于渲染火焰的速度,将所述速度存储在速度缓冲区的对应网格处,并且根据速度缓冲区中存储的速度确定速度缓冲区的每个网格处的流动速度。

浓度模块703可根据速度缓冲区的每个网格处的流动速度来确定用于当前视频帧的当前的氧气浓度和燃料浓度。

模拟模块704可根据当前的氧气浓度和燃料浓度模拟燃烧反应得到温度值,将温度值映射为火焰颜色来得到火焰特效,并且将该火焰特效添加到当前视频帧中。

可选地,速度缓冲区的分辨率可小于当前视频帧的分辨率。

可选地,当前的氧气浓度和燃料浓度可存储在浓度缓冲区的对应网格处,其中,该浓度缓冲区的分辨率可与当前视频帧的分辨率相同。这里,该浓度缓冲区中的氧气浓度和燃料浓度用于进行燃烧反应。

可选地,速度模块702可在与对象关键点对应的位置处随机生成第一速度,对第一速度进行高斯模糊处理以获得第二速度,将第二速度与前一视频帧的速度缓冲区的对应网格处的速度进行叠加以生成第三速度,通过对第三速度进行旋度增强来得到用于渲染火焰的速度。

可选地,速度模块702可计算速度缓冲区的每个网格处的速度的散度,根据散度计算速度缓冲区的每个网格处的速度的无旋分量,通过从速度缓冲区的每个网格处的速度减去相应的无旋分量来得到速度缓冲区的每个网格处的速度的无散分量,基于无散分量来确定流动速度。例如,可将无散分量作为流动速度。

可选地,浓度模块703可在与对象关键点对应的位置处随机生成第一氧气浓度和第一燃料浓度,通过对第一氧气浓度和第一燃料浓度分别进行高斯模糊处理以获得第二氧气浓度和第二燃料浓度,根据流动速度确定前一视频帧的氧气浓度和燃料浓度经过一帧时间演化得到的第三氧气浓度和第三燃料浓度,根据第二氧气浓度和第三氧气浓度来生成当前的氧气浓度,并且根据第二燃料浓度和第三燃料浓度来生成当前的燃料浓度。

可选地,第二氧气浓度和第二燃料浓度可存储在第一浓度缓冲区的对应网格处,并且第三氧气浓度和第三燃料浓度可存储在第二浓度缓冲区,其中,第一浓度缓冲区的分辨率可小于当前视频帧的分辨率,并且第二浓度缓冲区的分辨率可与当前视频帧的分辨率相同。

可选地,浓度模块703可对第二氧气浓度和第二燃料浓度分别进行双线性插值,通过将第三氧气浓度和经过双线性插值处理的第二氧气浓度进行叠加来得到当前的氧气浓度,并且通过将第三燃料浓度和经过双线性插值处理的第二燃料浓度进行叠加来得到当前的燃料浓度。

第一浓度缓冲区和第二浓度缓冲区可作为临时缓冲区,在对这两个临时缓冲区的数据进行叠加处理之后,将叠加结果存储在用于进行燃烧反应的浓度缓冲区中。

根据本公开的实施例,可提供一种电子设备。图8是根据本公开实施例的电子设备的框图,该电子设备800可包括至少一个存储器802和至少一个处理器801,所述至少一个存储器802存储有计算机可执行指令集合,当计算机可执行指令集合被至少一个处理器801执行时,执行根据本公开实施例的图像特效的生成方法。

处理器801可包括中央处理器(CPU)、图形处理器(GPU)、可编程逻辑装置、专用处理器系统、微控制器或微处理器。作为示例而非限制,处理器801还可包括模拟处理器、数字处理器、微处理器、多核处理器、处理器阵列、网络处理器等。

作为一种存储介质的存储器802可包括操作系统(例如,MAC操作系统)、数据存储模块、网络通信模块、用户接口模块、与图像特效的生成方法对应的程序以及数据库。

存储器802可与处理器801集成为一体,例如,可将RAM或闪存布置在集成电路微处理器等之内。此外,存储器802可包括独立的装置,诸如,外部盘驱动、存储阵列或任何数据库系统可使用的其他存储装置。存储器802和处理器801可在操作上进行耦合,或者可例如通过I/O端口、网络连接等互相通信,使得处理器801能够读取存储在存储器802中的文件。

此外,电子设备800还可包括视频显示器(诸如,液晶显示器)和用户交互接口(诸如,键盘、鼠标、触摸输入装置等)。电子设备800的所有组件可经由总线和/或网络而彼此连接。

本领域技术人员可理解,图8中示出的结构并不构成对的限定,可包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

根据本公开的实施例,还可提供一种计算机可读存储介质,其中,当指令被至少一个处理器运行时,使得至少一个处理器执行根据本公开的图像特效的生成方法。这里的计算机可读存储介质的示例包括:只读存储器(ROM)、随机存取可编程只读存储器(PROM)、电可擦除可编程只读存储器(EEPROM)、随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、闪存、非易失性存储器、CD-ROM、CD-R、CD+R、CD-RW、CD+RW、DVD-ROM、DVD-R、DVD+R、DVD-RW、DVD+RW、DVD-RAM、BD-ROM、BD-R、BD-R LTH、BD-RE、蓝光或光盘存储器、硬盘驱动器(HDD)、固态硬盘(SSD)、卡式存储器(诸如,多媒体卡、安全数字(SD)卡或极速数字(XD)卡)、磁带、软盘、磁光数据存储装置、光学数据存储装置、硬盘、固态盘以及任何其他装置,所述任何其他装置被配置为以非暂时性方式存储计算机程序以及任何相关联的数据、数据文件和数据结构并将所述计算机程序以及任何相关联的数据、数据文件和数据结构提供给处理器或计算机使得处理器或计算机能执行所述计算机程序。上述计算机可读存储介质中的计算机程序可在诸如客户端、主机、代理装置、服务器等计算机设备中部署的环境中运行,此外,在一个示例中,计算机程序以及任何相关联的数据、数据文件和数据结构分布在联网的计算机系统上,使得计算机程序以及任何相关联的数据、数据文件和数据结构通过一个或多个处理器或计算机以分布式方式存储、访问和执行。

根据本公开的实施例中,还可提供一种计算机程序产品,该计算机程序产品中的指令可由计算机设备的处理器执行以完成上述图像特效的生成方法。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。

应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

24页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种基于三维网格模型参数设计的纹理贴图方法及系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!