掌桥专利:专业的专利平台
掌桥专利
首页

视频生成方法、装置及存储介质

文献发布时间:2023-06-19 13:46:35


视频生成方法、装置及存储介质

技术领域

本公开涉及计算机技术领域,尤其涉及一种视频生成方法、装置及存储介质。

背景技术

相关技术中,对多种物质的具有较高真实感的实时动画模拟算法和技术取得了一系列进展,但主要集中在PC和服务器平台,如使用平滑粒子流体动力学(SPH)和物质点法(MPM)等经典算法对大量粒子进行离线的仿真和模拟等。在算力资源较少的移动端设备或边缘计算节点,进行具有高度真实感的实时物理动画模拟运算,还具有一定的挑战。

因此,本公开提供了一种视频生成方法、装置及存储介质,模拟了失重条件下流体受力后的运行状态,且能够保证流体运行过程中局部密度不变;提高了模拟失重条件下流体颤动、合并和分裂状态的真实性。

发明内容

本公开提供一种视频生成方法、装置及存储介质,以至少解决相关技术中无法真实模拟失重条件下流体受力后的运行状态的问题。本公开的技术方案如下:

根据本公开实施例的第一方面,提供一种视频生成方法,包括:

确定失重状态下流体的初始速度和初始位置,以使所述流体在页面中从所述初始位置按照所述初始速度运动;

当所述流体受到外力时,确定所述流体中每个粒子受到的外力;

基于所述每个粒子的初始速度、受到的外力以及预设的时间步长,确定在预设时间段内所述每个粒子每帧的预测位置;所述每个粒子的初始速度与所述流体的初始速度相同;

基于所述每个粒子每帧的预测位置,构建所述每个粒子每帧的密度约束方程;

基于所述每个粒子每帧的密度约束方程,得到所述流体的多个视频帧;

将所述多个视频帧进行拼接,得到在所述预设时间段内的视频。

在一示例性的实施方式中,所述基于所述每个粒子每帧的密度约束方程,得到所述流体的多个视频帧,包括:

基于所述每个粒子每帧的密度约束方程,确定所述每个粒子每帧的更新位置增量;

根据所述每个粒子每帧的预测位置以及更新位置增量,得到所述每个粒子每帧的更新位置;

根据所述每个粒子每帧的更新位置,得到所述流体的多个视频帧。

在一示例性的实施方式中,所述基于所述每个粒子每帧的预测位置,构建所述每个粒子每帧的密度约束方程之前,所述方法还包括:

获取所述每个粒子对应的多个邻居粒子的质量以及所述多个邻居粒子每帧的预测位置;所述每个粒子对应的多个邻居粒子为所述流体中与所述每个粒子的距离在光滑核半径范围内的粒子;

所述基于所述每个粒子每帧的预测位置,构建所述每个粒子每帧的密度约束方程,包括:

根据所述每个粒子每帧的预测位置、所述每个粒子对应的多个邻居粒子的质量以及每帧的预测位置,构建所述每个粒子每帧的密度估计函数;

根据所述每个粒子每帧的预测位置以及密度估计函数,构建所述每个粒子每帧的密度约束方程。

在一示例性的实施方式中,所述基于所述每个粒子每帧的密度约束方程,确定所述每个粒子每帧的更新位置增量,包括:

基于所述每个粒子每帧的密度约束方程,确定所述每个粒子每帧的梯度函数;

根据牛顿法求解所述每个粒子每帧的密度约束方程,得到所述每个粒子每帧的密度约束方程展开式;

根据所述每个粒子每帧的梯度函数以及所述密度约束方程展开式,得到所述每个粒子每帧的梯度系数函数;

根据所述每个粒子每帧的梯度系数函数,确定所述每个粒子每帧的更新位置增量。

在一示例性的实施方式中,所述根据所述每个粒子每帧的梯度函数以及所述密度约束方程展开式,得到所述每个粒子每帧的梯度系数函数之前,所述方法还包括:

根据松弛因子对所述每个粒子每帧的密度约束方程展开式进行更新,得到所述每个粒子每帧的更新密度约束方程;

所述根据所述每个粒子每帧的梯度函数以及所述密度约束方程展开式,得到所述每个粒子每帧的梯度系数函数,包括:

所述根据所述每个粒子每帧的梯度函数以及所述更新密度约束方程,得到所述每个粒子每帧的梯度系数函数。

在一示例性的实施方式中,所述根据所述每个粒子每帧的梯度系数函数,确定所述每个粒子每帧的更新位置增量之前,所述方法还包括:

对所述每个粒子施加虚拟压强,得到所述每个粒子的表面张力补偿系数;

所述根据所述每个粒子每帧的梯度系数函数,确定所述每个粒子每帧的更新位置增量,包括:

根据所述每个粒子每帧的梯度系数函数以及所述表面张力补偿系数,确定所述每个粒子每帧的更新位置增量。

在一示例性的实施方式中,所述根据所述每个粒子每帧的预测位置以及更新位置增量,得到所述每个粒子每帧的更新位置之前,所述方法还包括:

当所述流体受到的外力为碰撞体的作用力时,获取所述碰撞体每帧所占的区域;

所述根据所述每个粒子每帧的预测位置以及更新位置增量,得到所述每个粒子每帧的更新位置,包括:

根据所述每个粒子每帧的预测位置以及更新位置增量,得到所述每个粒子每帧的当前位置;

当任一粒子任一帧的当前位置在所述页面的边界之外,或所述任一粒子任一帧的当前位置位于对应帧的所述碰撞体所占的区域内时,将所述任一粒子作为待更新粒子,将所述任一帧作为待更新帧;

对所述待更新粒子在对应待更新帧的更新位置增量进行更新,得到所述待更新粒子在对应待更新帧的二次更新位置增量;

根据所述待更新粒子在对应待更新帧的预测位置以及二次更新位置增量,得到所述待更新粒子在对应待更新帧的更新位置。

在一示例性的实施方式中,所述对所述待更新粒子在对应待更新帧的更新位置增量进行更新,得到所述待更新粒子在对应待更新帧的二次更新位置增量,包括:

获取所述流体的碰撞点位置;

根据所述流体的碰撞点位置,得到所述待更新粒子在对应待更新帧的当前位置与所述流体的碰撞点位置之间的法向距离;

根据所述待更新粒子在对应待更新帧的当前位置、对应的法向距离以及所述流体的碰撞点位置,得到所述待更新粒子在对应待更新帧的二次更新位置增量。

在一示例性的实施方式中,所述基于所述每个粒子的初始速度、受到的外力以及预设的时间步长,确定在预设时间段内所述每个粒子每帧的预测位置之前,所述方法还包括:

获取所述每个粒子的质量;

获取所述每个粒子每帧的更新时间;

所述基于所述每个粒子的初始速度、受到的外力以及预设的时间步长,确定在预设时间段内所述每个粒子每帧的预测位置,包括:

基于所述每个粒子的初始速度、质量、受到的外力以及预设的时间步长,确定所述每个粒子每帧的更新速度;

基于所述每个粒子每帧的更新速度以及更新时间,确定在所述预设时间段内所述每个粒子每帧的预测位置。

根据本公开实施例的第二方面,提供一种视频生成装置,包括:

初始信息确定模块,被配置为执行确定失重状态下流体的初始速度和初始位置,以使所述流体在页面中从所述初始位置按照所述初始速度运动;

外力确定模块,被配置为执行当所述流体受到外力时,确定所述流体中每个粒子受到的外力;

预测位置确定模块,被配置为执行基于所述每个粒子的初始速度、受到的外力以及预设的时间步长,确定在预设时间段内所述每个粒子每帧的预测位置;所述每个粒子的初始速度与所述流体的初始速度相同;

密度约束方程构建模块,被配置为执行基于所述每个粒子每帧的预测位置,构建所述每个粒子每帧的密度约束方程;

视频帧确定模块,被配置为执行基于所述每个粒子每帧的密度约束方程,得到所述流体的多个视频帧;

视频生成模块,被配置为执行将所述多个视频帧进行拼接,得到在所述预设时间段内的视频。

在一示例性的实施方式中,所述视频帧确定模块包括:

更新位置增量确定单元,被配置为执行基于所述每个粒子每帧的密度约束方程,确定所述每个粒子每帧的更新位置增量;

更新位置确定单元,被配置为执行根据所述每个粒子每帧的预测位置以及更新位置增量,得到所述每个粒子每帧的更新位置;

视频帧确定单元,被配置为执行根据所述每个粒子每帧的更新位置,得到所述流体的多个视频帧。

在一示例性的实施方式中,所述视频生成装置还包括:

邻居粒子获取模块,被配置为执行获取所述每个粒子对应的多个邻居粒子的质量以及所述多个邻居粒子每帧的预测位置;所述每个粒子对应的多个邻居粒子为所述流体中与所述每个粒子的距离在光滑核半径范围内的粒子;

所述密度约束方程构建模块包括:

密度估计函数构建单元,被配置为执行根据所述每个粒子每帧的预测位置、所述每个粒子对应的多个邻居粒子的质量以及每帧的预测位置,构建所述每个粒子每帧的密度估计函数;

密度约束方程构建单元,被配置为执行根据所述每个粒子每帧的预测位置以及密度估计函数,构建所述每个粒子每帧的密度约束方程。

在一示例性的实施方式中,所述更新位置增量确定模块包括:

梯度函数确定单元,被配置为执行基于所述每个粒子每帧的密度约束方程,确定所述每个粒子每帧的梯度函数;

密度约束方程展开式确定单元,被配置为执行根据牛顿法求解所述每个粒子每帧的密度约束方程,得到所述每个粒子每帧的密度约束方程展开式;

梯度系数函数确定单元,被配置为执行根据所述每个粒子每帧的梯度函数以及所述密度约束方程展开式,得到所述每个粒子每帧的梯度系数函数;

更新位置增量确定单元,被配置为执行根据所述每个粒子每帧的梯度系数函数,确定所述每个粒子每帧的更新位置增量。

在一示例性的实施方式中,所述视频生成装置还包括:

密度约束方程展开式更新模块,被配置为执行根据松弛因子对所述每个粒子每帧的密度约束方程展开式进行更新,得到所述每个粒子每帧的更新密度约束方程;

所述梯度系数函数确定单元包括:

梯度系数函数确定子单元,被配置为执行根据所述每个粒子每帧的梯度函数以及所述更新密度约束方程,得到所述每个粒子每帧的梯度系数函数。

在一示例性的实施方式中,所述视频生成装置还包括:

表面张力补偿系数确定模块,被配置为执行对所述每个粒子施加虚拟压强,得到所述每个粒子的表面张力补偿系数;

所述更新位置增量确定单元包括:

更新位置增量确定子单元,被配置为执行根据所述每个粒子每帧的梯度系数函数以及所述表面张力补偿系数,确定所述每个粒子每帧的更新位置增量。

在一示例性的实施方式中,所述视频生成装置还包括:

位置获取模块,被配置为执行当所述流体受到的外力为碰撞体的作用力时,获取所述碰撞体每帧所占的区域;

所述更新位置确定模块包括:

当前位置确定单元,被配置为执行根据所述每个粒子每帧的预测位置以及更新位置增量,得到所述每个粒子每帧的当前位置;

待更新粒子确定单元,被配置为执行当任一粒子任一帧的当前位置在所述页面的边界之外,或所述任一粒子任一帧的当前位置位于对应帧的所述碰撞体所占的区域内时,将所述任一粒子作为待更新粒子,将所述任一帧作为待更新帧;

二次更新位置增量确定单元,被配置为执行对所述待更新粒子在对应待更新帧的更新位置增量进行更新,得到所述待更新粒子在对应待更新帧的二次更新位置增量;

二次更新位置确定单元,被配置为执行根据所述待更新粒子在对应待更新帧的预测位置以及二次更新位置增量,得到所述待更新粒子在对应待更新帧的更新位置。

在一示例性的实施方式中,所述二次更新位置确定单元包括:

碰撞点位置获取子单元,被配置为执行获取所述流体的碰撞点位置;

法向距离确定子单元,被配置为执行根据所述流体的碰撞点位置,得到所述待更新粒子在对应待更新帧的当前位置与所述流体的碰撞点位置之间的法向距离;

二次更新位置增量确定子单元,被配置为执行根据所述待更新粒子在对应待更新帧的当前位置、对应的法向距离以及所述流体的碰撞点位置,得到所述待更新粒子在对应待更新帧的二次更新位置增量。

在一示例性的实施方式中,所述视频生成装置还包括:

质量获取模块,被配置为执行获取所述每个粒子的质量;

更新时间获取模块,被配置为执行获取所述每个粒子每帧的更新时间;

所述预测位置确定模块包括:

更新速度确定单元,被配置为执行基于所述每个粒子的初始速度、质量、受到的外力以及预设的时间步长,确定所述每个粒子每帧的更新速度;

预测位置确定单元,被配置为执行基于所述每个粒子每帧的更新速度以及更新时间,确定在所述预设时间段内所述每个粒子每帧的预测位置。

根据本公开实施例的第三方面,提供一种电子设备,包括:

处理器;

用于存储所述处理器可执行指令的存储器;

其中,所述处理器被配置为执行所述指令,以实现如上所述的视频生成方法。

根据本公开实施例的第四方面,提供一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如上所述的视频生成方法。

根据本公开实施例的第五方面,提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上所述的视频生成方法。

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

本公开确定失重状态下流体的初始速度和初始位置;并在流体受到外力时,确定流体中每个粒子受到的外力;从而确定在预设时间段内每个粒子每帧的预测位置;并基于此构建每个粒子每帧的密度约束方程;从而保证在流体局部密度不变的情况下,确定流体的多个视频帧,以得到在预设时间段内流体的视频。该视频高度模拟了失重条件下流体受力后的运行状态,且能够保证流体运行过程中局部密度不变;提高了模拟失重条件下流体颤动、合并和分裂状态的真实性。

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

附图说明

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

图1是根据一示例性实施例示出的一种视频生成方法的应用环境图。

图2是根据一示例性实施例示出的一种视频生成方法的流程图。

图3是根据一示例性实施例示出的一种确定在预设时间段内每个粒子每帧的预测位置的方法的流程图。

图4是根据一示例性实施例示出的一种构建每个粒子每帧的密度约束方程的方法的流程图。

图5是根据一示例性实施例示出的一种得到流体的多个视频帧的方法的流程图。

图6是根据一示例性实施例示出的一种确定每个粒子每帧的更新位置增量的方法的流程图。

图7是根据一示例性实施例示出的一种得到每个粒子每帧的更新位置的方法的流程图。

图8是根据一示例性实施例示出的一种得到待更新粒子在对应待更新帧的二次更新位置增量的方法的流程图。

图9-17是根据一示例性实施例示出的一种失重状态下2D空间内的两团液体相遇并合并、并基于表面张力进行颤动的运动仿真图。

图18-26是根据一示例性实施例示出的一种失重状态下2D空间内的液体遇到障碍物分裂的运动仿真图。

图27是根据一示例性实施例示出的一种视频生成装置的框图。

图28是根据一示例性实施例示出的一种视频生成方法的服务器的硬件结构框图。

具体实施方式

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

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

请参阅图1,其所示为根据一示例性实施例示出的一种视频生成方法的应用环境图,该应用环境可以包括服务器01和客户端02。

具体的,本说明书实施例中,所述服务器01可以包括一个独立运行的服务器,或者分布式服务器,或者由多个服务器组成的服务器集群,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(ContentDelivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。服务器01可以包括有网络通信单元、处理器和存储器等等。具体的,所述服务器01可以用于模拟流体在受力后的运行状态,从而得到流体运行的视频,并向客户端02发送视频。

具体的,本说明书实施例中,所述客户端02可以包括智能手机、台式电脑、平板电脑、笔记本电脑、数字助理、智能可穿戴设备、车载终端等类型的实体设备,也可以包括运行于实体设备中的软体,例如一些服务商提供给用户的网页页面,也可以为该些服务商提供给用户的应用。具体的,所述客户端02可以用于播放流体的视频。

图2是根据一示例性实施例示出的一种视频生成方法的流程图,如图2所示,该方法应用于图1所示的服务器01中,包括以下步骤。

在步骤S21中,确定失重状态下流体的初始速度和初始位置,以使所述流体在页面中从所述初始位置按照所述初始速度运动。

本公开实施例中,在失重条件下,模拟流体时,需要增大流体的密度,可以使得粒子聚集更加紧密,不易发生破碎和失真的情况。失重下流体密度为真实密度的0.8-4倍。在失重条件下,流体会因受到表面张力而形成球状;在模拟流体运动状态的过程中,失重状态下的流体可以为球状。在失重条件下,为避免流体整体悬停在空间中,流体的初始速度大于零,但是如果初始速度过大会导致流体在发生碰撞时无法保持形状而发生破碎或失真的情况;因此,流体的初始速度小于预设速度阈值,在实际应用中,该预设速度阈值可以根据实际需求进行设置,例如可以设置为0.03m/s;即失重状态下流体的初始速度V0可以设置为:0<V0<0.03m/s;流体的初始位置可以根据实际情况进行设置,例如可以设置在页面的中间位置。流体由多个粒子组成,可以根据失重状态下流体的初始速度和初始位置,确定每个粒子的初始速度和初始位置,在不受外力的情况下,每个粒子的初始速度等于流体的初始速度。

在步骤S22中,当所述流体受到外力时,确定所述流体中每个粒子受到的外力。

本公开实施例中,流体受到外力包括以下三种情况:

第一、用户与流体交互时,流体受到的作用力;例如,用户可以用肢体触碰流体,对其施加外力;

第二、与其他流体接触时受到的力;流体在运动过程中可以与其他流体发生碰撞后进行融合;

第三、遇到尖锐物体或墙壁等碰撞体时受到的力;流体遇到尖锐物体时会进行分裂,遇到墙壁等碰撞体时会发生反弹;

在上述三种情况下,流体的碰撞体不同,流体受到的外力、虚拟物体与碰撞体的接触面积均不同,其中每个粒子受到的外力也不相同;在实际应用中,可以根据不同情况,确定流体中每个粒子受到的外力。

在步骤S23中,基于上述每个粒子的初始速度、受到的外力以及预设的时间步长,确定在预设时间段内上述每个粒子每帧的预测位置。上述每个粒子的初始速度与上述流体的初始速度相同。

本公开实施例中,粒子的时间步长为预先设置的参数,具体数值可以根据实际情况进行设定。

在一些实施例中,上述基于上述每个粒子的初始速度、受到的外力以及预设的时间步长,确定在预设时间段内上述每个粒子每帧的预测位置之前,上述方法还包括:

获取上述每个粒子的质量;

获取上述每个粒子每帧的更新时间。

本公开实施例中,可以根据实际情况设置每个粒子的质量,例如,为了便于计算,每个粒子的质量可以为设置为1g;另外,可以预先设定每个粒子每帧的时间步长,即每个粒子每帧的更新时间。

本公开实施例中,可以根据流体的体积、密度确定流体的质量,并进一步确定每个粒子的质量。每个粒子每帧的更新时间即为两个相邻视频帧之间的时差。

在一些实施例中,如图3所示,上述基于上述每个粒子的初始速度、受到的外力以及预设的时间步长,确定在预设时间段内上述每个粒子每帧的预测位置,包括:

在步骤S231中,基于上述每个粒子的初始速度、质量、受到的外力以及预设的时间步长,确定上述每个粒子每帧的更新速度;

本公开实施例中,每个粒子i每帧的更新速度的计算公式如下:

Vi*:=Vi+Δtfi/mi

其中Vi为粒子的初始速度,Vi*为粒子每帧的更新速度,mi为粒子的质量,fi为粒子受到的外力,外力不包含重力,Δt为粒子每帧的更新时间,即仿真的时间步长。

在步骤S232中,基于上述每个粒子每帧的更新速度以及更新时间,确定在上述预设时间段内上述每个粒子每帧的预测位置。

本公开实施例中,每个粒子每帧的预测位置的计算公式如下:

Pi*:=Pi+ΔtVi*

其中Pi*为粒子每帧的预测位置,Pi为粒子的初始位置,Vi*为粒子的更新速度,Δt为粒子每帧的更新时间。

本公开实施例中,流体在受到外力后,其中每个粒子在视频帧中位置会发生改变,可以根据每个粒子的初始速度、质量、受到的外力以及预设的时间步长,确定出每个粒子在每个视频帧的更新速度,进而确定其预测位置;实现了对每个粒子预测位置的精确定位。

在步骤S24中,基于上述每个粒子每帧的预测位置,构建上述每个粒子每帧的密度约束方程。

本公开实施例中,在确定了每个粒子每帧的预测位置之后,为了满足流体在运动过程中局部密度保持不变的特性,需要构建每个粒子每帧的密度约束方程。

在一些实施例中,流体包括n个粒子,粒子i每帧的密度约束方程如下:

其中,p

在一些实施例中,上述基于上述每个粒子每帧的预测位置,构建上述每个粒子每帧的密度约束方程之前,上述方法还包括:

获取上述每个粒子对应的多个邻居粒子的质量以及上述多个邻居粒子每帧的预测位置;上述每个粒子对应的多个邻居粒子为上述流体中与上述每个粒子的距离在光滑核半径范围内的粒子。

在一些实施例中,如图4所示,上述基于上述每个粒子每帧的预测位置,构建上述每个粒子每帧的密度约束方程,包括:

在步骤S241中,根据上述每个粒子每帧的预测位置、上述每个粒子对应的多个邻居粒子的质量以及每帧的预测位置,构建上述每个粒子每帧的密度估计函数;

在一些实施例中,第i个粒子的密度可以采用标准SPH密度估计函数计算,SPH(Smoothed Particle Hydrodynamics)是光滑粒子流体动力学方法的缩写,是在近20多年来逐步发展起来的一种无网格方法。该方法的基本思想是将连续的流体(或固体)用相互作用的质点组来描述,各个物质点上承载各种物理量,包括质量、速度等,通过求解质点组的动力学方程和跟踪每个质点的运动轨道,求得整个系统的力学行为;具体计算公式如下:

其中,该式表示计算粒子i的每个邻居粒子j对pi处的质量贡献之和。h是光滑核半径。W函数采用Poly6核,其梯度采用Spiky核计算。

在步骤S242中,根据上述每个粒子每帧的预测位置以及密度估计函数,构建上述每个粒子每帧的密度约束方程。

本公开实施例中,密度约束方程即为上述公式(1),通过PBF算法求解每帧粒子粒子的位置变化量,使得粒子满足流体局部密度不变的性质,以实现对流体进行真实的模拟,从而提高模拟流体颤动、合并和分裂的真实性。

在步骤S25中,基于上述每个粒子每帧的密度约束方程,得到上述流体的多个视频帧。

在一些实施例中,如图5所示,上述基于上述每个粒子每帧的密度约束方程,得到上述流体的多个视频帧,包括:

在步骤S251中,基于上述每个粒子每帧的密度约束方程,确定上述每个粒子每帧的更新位置增量。

在一些实施例中,可以计算粒子在每帧的更新位置增量,使得以等式约束满足:

C(p+Δp)=0 (3)

在一些实施例中,如图6所示,上述基于上述每个粒子每帧的密度约束方程,确定上述每个粒子每帧的更新位置增量,包括:

在步骤S2511中,基于上述每个粒子每帧的密度约束方程,确定上述每个粒子每帧的梯度函数;

本公开实施例中,公式(1)中第i个等式约束对任意一个粒子k的梯度函数为:

在步骤S2512中,根据牛顿法求解上述每个粒子每帧的密度约束方程,得到上述每个粒子每帧的密度约束方程展开式;

本公开实施例中,根据牛顿法可得:

其中,

在步骤S2513中,根据上述每个粒子每帧的梯度函数以及上述密度约束方程展开式,得到上述每个粒子每帧的梯度系数函数;

在一些实施例中,所述根据所述每个粒子每帧的梯度函数以及所述密度约束方程展开式,得到所述每个粒子每帧的梯度系数函数,包括:

所述根据所述每个粒子每帧的梯度函数以及所述更新密度约束方程,得到所述每个粒子每帧的梯度系数函数。

本公开实施例中,结合公式(6)、(8),计算得到:

在一些实施例中,上述根据所述每个粒子每帧的梯度函数以及所述密度约束方程展开式,得到所述每个粒子每帧的梯度系数函数之前,上述方法还包括:

根据松弛因子对所述每个粒子每帧的密度约束方程展开式进行更新,得到所述每个粒子每帧的更新密度约束方程。

本公开实施例中,为了求解稳定,增加一个松弛因子ε;更新密度约束方程如下:

由此得到更新的λi

本公开实施例中,可以根据公式(10)计算得到λj;公式中松弛因子ε为常量,具体数值可根据密度约束方程求解的收敛性调整,当方程迭代求解难以收敛时,可适当增大该数值,从而可以加快收敛速度,实现对梯度系数函数的快速更新,从而快速得到每个粒子每帧的更新位置增量。

在步骤S2514中,根据上述每个粒子每帧的梯度系数函数,确定上述每个粒子每帧的更新位置增量。

本公开实施例中,每个粒子每帧的更新位置增量的计算公式如下:

本公开实施例中,通过每个粒子每帧的密度约束方程,确定对应的梯度函数以及密度约束方程展开式,再根据对应的梯度函数以及密度约束方程展开式计算得到梯度系数函数,从而可以通过求解方程的方式,快速得到每个粒子每帧的更新位置增量。

在一些实施例中,上述根据上述每个粒子每帧的梯度系数函数,确定上述每个粒子每帧的更新位置增量之前,上述方法还包括:

对上述每个粒子施加虚拟压强,得到上述每个粒子的表面张力补偿系数。

本公开实施例中,为了克服粒子表面不稳定的问题,可以通过施加虚拟压强进行表面张力补偿,得到表面张力补偿系数,其具体计算公式如下:

其中,Δq为光滑核半径内的粒子,|Δq|=0.1h……,0.3h;n为常数,可以取值4;k为常数,k通常根据虚拟压强大小设置,k值越大,虚拟压强越大,适用于表面稳定性较差的情况;k值越小,虚拟压强越小,适用于表面稳定性较好的情况;通常可取k=0.1,0.2,…。

在一些实施例中,上述根据上述每个粒子每帧的梯度系数函数,确定上述每个粒子每帧的更新位置增量,包括:

根据上述每个粒子每帧的梯度系数函数以及上述表面张力补偿系数,确定上述每个粒子每帧的更新位置增量。

本公开实施例中,基于表面张力补偿系数,对公式(11)进行更新,得到:

本公开实施例中,通过增加粒子的表面张力,克服了粒子表面不稳定的问题,从而提高了粒子每帧的更新位置增量的稳定性。

在步骤S252中,根据上述每个粒子每帧的预测位置以及更新位置增量,得到上述每个粒子每帧的更新位置。

本公开实施例中,每个粒子每帧的更新位置pi*的计算公式如下:

pi*=pi+Δpi

在一些实施例中,还可以根据更新位置增量以及每帧的更新时间,得到每个粒子每帧的实时更新速度;具体计算公式如下:

vi=Δpi/Δt

在一些实施例中,上述根据上述每个粒子每帧的预测位置以及更新位置增量,得到上述每个粒子每帧的更新位置之前,上述方法还包括:

当上述流体受到的外力为碰撞体的作用力时,获取上述碰撞体中每个碰撞粒子每帧的位置。

在一些实施例中,如图7所示,上述根据上述每个粒子每帧的预测位置以及更新位置增量,得到上述每个粒子每帧的更新位置,包括:

在步骤S2521中,根据上述每个粒子每帧的预测位置以及更新位置增量,得到上述每个粒子每帧的当前位置;

本公开实施例中,将每个粒子每帧的预测位置以及更新位置增量之和,作为每个粒子每帧的当前位置。

在步骤S2522中,当任一粒子任一帧的当前位置在上述页面的边界之外,或上述任一粒子任一帧的当前位置位于对应帧的所述碰撞体所占的区域内时,将上述任一粒子作为待更新粒子,将上述任一帧作为待更新帧。

本公开实施例中,得到上述每个粒子每帧的当前位置之后,可以检测当前位置是否在页面的边界之外,或者与碰撞几何体的形状相交(即发生碰撞后,流体中存在位于碰撞体几何形状之内的粒子);当粒子的当前位置在页面的边界之外,或者与碰撞几何体形状相交时,将该粒子确定为待更新粒子,将待更新粒子对应的视频帧确定为待更新帧,从而便于对待更新粒子在对应待更新帧中的当前位置进行更新。

在步骤S2523中,对上述待更新粒子在对应待更新帧的更新位置增量进行更新,得到上述待更新粒子在对应待更新帧的二次更新位置增量。

本公开实施例中,当粒子的当前位置在页面的边界之外在页面中无法实时显示粒子,影响粒子的显示效果;此时,对该粒子的位置进行二次更新,可以避免在页面中无法显示出粒子,从而提升用户的视觉体验效果。当粒子落入碰撞体几何形状之内时,可以确定粒子发生了碰撞,需要对其位置进行更新。

在一些实施例中,如果粒子的当前位置在页面的边界之外,将待更新粒子在对应待更新帧的更新位置增量更新为沿边界法线向内预设长度的向量;预设长度可以根据实际需求进行调整。

在一些实施例中,如图8所示,上述对上述待更新粒子在对应待更新帧的更新位置增量进行更新,得到上述待更新粒子在对应待更新帧的二次更新位置增量,包括:

在步骤S25231中,获取上述流体的碰撞点位置;

在步骤S25232中,根据上述流体的碰撞点位置,得到上述待更新粒子在对应待更新帧的当前位置与上述流体的碰撞点位置之间的法向距离;

在步骤S25233中,根据上述待更新粒子在对应待更新帧的当前位置、对应的法向距离以及上述流体的碰撞点位置,得到上述待更新粒子在对应待更新帧的二次更新位置增量。

本公开实施例中,当任一粒子任一帧的当前位置位于对应帧的所述碰撞体所占的区域内时,可以根据流体的碰撞点位置,确定待更新粒子在对应待更新帧的当前位置与上述流体的碰撞点位置之间的法向距离;即可以根据碰撞处的法向将待更新粒子移动一定的距离;实现时通常可以沿法向施加较小的随机扰动;法向距离的计算公式如下:

其中,pc为碰撞点位置,dc为碰撞时粒子与碰撞点的距离,

本公开实施例中,根据流体的碰撞点位置,确定待更新粒子在对应待更新帧的当前位置与上述流体的碰撞点位置之间的法向距离,并得到了待更新粒子在对应待更新帧的二次更新位置增量,从而使待更新粒子在对应待更新帧的当前位置根据法向距离进行移动,有效避免了待更新粒子在页面中无法显示的问题。

在步骤S2524中,根据上述待更新粒子在对应待更新帧的预测位置以及二次更新位置增量,得到上述待更新粒子在对应待更新帧的更新位置。

在步骤S253中,根据上述每个粒子每帧的更新位置,得到上述流体的多个视频帧。

本公开实施例中,根据每个粒子每帧的密度约束方程,确定每个粒子每帧的更新位置增量;从而保证在流体局部密度不变的情况下,得到每个粒子每帧的更新位置增量;再根据每个粒子每帧的预测位置以及更新位置增量,得到每个粒子每帧的更新位置;从而可以提高每个粒子每帧的更新位置的准确率,进而提高模拟的流体的多个视频帧的真实性。

在步骤S26中,将上述多个视频帧进行拼接,得到在上述预设时间段内的视频。

本公开的方法可以用于模拟流体的颤动、合并和分裂状态。

(1)水球运行过程中,受到表面张力会发生颤动;

PBF算法每帧会求解粒子的位置增量,以满足流体局部密度约束。通过增加虚拟压强实现增强表面张力使得彼此位置接近的粒子汇聚成球状。但不同位置的粒子受到的约束力的大小和方向并不相同,因而会产生不同方向的运动,其整体运动表现为水球表面存在轻微的颤动,水球质心沿初始速度方向运动。

(2)两团独自运行的流体相遇会融合

对于某个粒子,PBF算法中根据其周围的邻居粒子计算该粒子位置处的密度大小,当该密度值小于初始设定的密度值ρ0时,该位置处周围的粒子会受到相互靠近的力;当该密度值大于ρ0时,周围的粒子会受到相互排斥的力;

粒子汇聚形成水球时,其表面处的密度往往小于ρ0,因而当两水球的表面相接触的时,表面粒子收到相互靠近的力,进而带动内部粒子向靠近的方向运动,从而实现两水球融合的效果。

(3)水球遇到尖锐障碍物发生分裂

在计算流体粒子位置增量时,需判断流体粒子是否与障碍物发生碰撞;当发生碰撞时,需要对流体粒子施加沿着碰撞点障碍物表面方向的碰撞响应速度。不同位置的粒子受到不同的碰撞响应速度,因而粒子会产生不同方向的运动,从而实现水球遇到尖锐障碍物分裂的效果。

如图9-17所示,在移动终端的显示界面中实时模拟失重状态下2D空间内的两团液体相遇并合并、并基于表面张力进行颤动的运动仿真图。图9-17中包括两个虚拟液体11和22,两个虚拟液体逐渐靠近;图12为虚拟液体11和22的融合体,虚拟液体33;图13-17为虚拟液体33基于表面张力进行颤动的示意图,不同颤动状态得到不同形态的虚拟液体。

如图18-26所示,在移动端实时模拟失重状态下2D空间内的液体遇到障碍物分裂的运动仿真图。图18-19为两组液体44和55相遇之间逐渐靠近的示意图;图20-21为两组液体44和55相遇之后发生形变的示意图;图22为两组液体44和55相遇后重组示意图,液体重组为66、771、772;然后液体771、772进一步融合成液体77,得到图23的重组液体66和77;图24-26为重组液体66和77基于表面张力进行颤动的示意图。

本公开可以根据手机移动端上GPU计算能力,对失重状态下液体运动进行实时、逼真的高质量模拟;例如,在小米8手机上可以达到30FPS的高速计算性能。

本公开的视频生成方法还可以用于模拟失重条件下水的运动,结合空间站背景替换、宇航员服饰换装等技术,为用户提供宇航员空间站中与失重水球交互的视频特效场景。本公开的方法可以在移动或边缘计算设备(如手机、平板电脑等)上对液体等物质进行有较高真实感的、符合物理规律的动画过程的模拟,以达到娱乐、游戏或科学模拟仿真等目的。

本公开确定失重状态下流体的初始速度和初始位置;并在流体受到外力时,确定流体中每个粒子受到的外力;从而确定在预设时间段内每个粒子每帧的预测位置;并基于此构建每个粒子每帧的密度约束方程;从而保证在流体局部密度不变的情况下,确定流体的多个视频帧,以得到在预设时间段内流体的视频。该视频高度模拟了失重条件下流体受力后的运行状态,且能够保证流体运行过程中局部密度不变;提高了模拟失重条件下流体颤动、合并和分裂状态的真实性。

图27是根据一示例性实施例示出的一种视频生成装置框图。参照图27,该装置包括初始信息确定模块2710,外力确定模块2720、预测位置确定模块2730、密度约束方程构建模块2740、视频帧确定模块2750和视频生成模块2760。

初始信息确定模块2710,被配置为执行确定失重状态下流体的初始速度和初始位置,以使上述流体在页面中从上述初始位置按照上述初始速度运动;

外力确定模块2720,被配置为执行当上述流体受到外力时,确定上述流体中每个粒子受到的外力;

预测位置确定模块2730,被配置为执行基于上述每个粒子的初始速度、受到的外力以及预设的时间步长,确定在预设时间段内上述每个粒子每帧的预测位置;上述每个粒子的初始速度与上述流体的初始速度相同;

密度约束方程构建模块2740,被配置为执行基于上述每个粒子每帧的预测位置,构建上述每个粒子每帧的密度约束方程;

视频帧确定模块2750,被配置为执行基于上述每个粒子每帧的密度约束方程,得到上述流体的多个视频帧;

视频生成模块2760,被配置为执行将上述多个视频帧进行拼接,得到在上述预设时间段内的视频。

在一些实施例中,上述视频帧确定模块包括:

更新位置增量确定单元,被配置为执行基于上述每个粒子每帧的密度约束方程,确定上述每个粒子每帧的更新位置增量;

更新位置确定单元,被配置为执行根据上述每个粒子每帧的预测位置以及更新位置增量,得到上述每个粒子每帧的更新位置;

视频帧确定单元,被配置为执行根据上述每个粒子每帧的更新位置,得到上述流体的多个视频帧。

在一些实施例中,上述视频生成装置还包括:

邻居粒子获取模块,被配置为执行获取上述每个粒子对应的多个邻居粒子的质量以及上述多个邻居粒子每帧的预测位置;上述每个粒子对应的多个邻居粒子为上述流体中与上述每个粒子的距离在光滑核半径范围内的粒子;

上述密度约束方程构建模块包括:

密度估计函数构建单元,被配置为执行根据上述每个粒子每帧的预测位置、上述每个粒子对应的多个邻居粒子的质量以及每帧的预测位置,构建上述每个粒子每帧的密度估计函数;

密度约束方程构建单元,被配置为执行根据上述每个粒子每帧的预测位置以及密度估计函数,构建上述每个粒子每帧的密度约束方程。

在一些实施例中,上述更新位置增量确定模块包括:

梯度函数确定单元,被配置为执行基于上述每个粒子每帧的密度约束方程,确定上述每个粒子每帧的梯度函数;

密度约束方程展开式确定单元,被配置为执行根据牛顿法求解上述每个粒子每帧的密度约束方程,得到上述每个粒子每帧的密度约束方程展开式;

梯度系数函数确定单元,被配置为执行根据上述每个粒子每帧的梯度函数以及上述密度约束方程展开式,得到上述每个粒子每帧的梯度系数函数;

更新位置增量确定单元,被配置为执行根据上述每个粒子每帧的梯度系数函数,确定上述每个粒子每帧的更新位置增量。

在一些实施例中,上述视频生成装置还包括:

密度约束方程展开式更新模块,被配置为执行根据松弛因子对上述每个粒子每帧的密度约束方程展开式进行更新,得到上述每个粒子每帧的更新密度约束方程;

上述梯度系数函数确定单元包括:

梯度系数函数确定子单元,被配置为执行根据上述每个粒子每帧的梯度函数以及上述更新密度约束方程,得到上述每个粒子每帧的梯度系数函数。

在一些实施例中,上述视频生成装置还包括:

表面张力补偿系数确定模块,被配置为执行对上述每个粒子施加虚拟压强,得到上述每个粒子的表面张力补偿系数;

上述更新位置增量确定单元包括:

更新位置增量确定子单元,被配置为执行根据上述每个粒子每帧的梯度系数函数以及上述表面张力补偿系数,确定上述每个粒子每帧的更新位置增量。

在一些实施例中,上述视频生成装置还包括:

位置获取模块,被配置为执行当上述流体受到的外力为碰撞体的作用力时,获取上述碰撞体每帧所占的区域;

上述更新位置确定模块包括:

当前位置确定单元,被配置为执行根据上述每个粒子每帧的预测位置以及更新位置增量,得到上述每个粒子每帧的当前位置;

待更新粒子确定单元,被配置为执行当任一粒子任一帧的当前位置在上述页面的边界之外,或上述任一粒子任一帧的当前位置位于对应帧的所述碰撞体所占的区域内时,将上述任一粒子作为待更新粒子,将上述任一帧作为待更新帧;

二次更新位置增量确定单元,被配置为执行对上述待更新粒子在对应待更新帧的更新位置增量进行更新,得到上述待更新粒子在对应待更新帧的二次更新位置增量;

二次更新位置确定单元,被配置为执行根据上述待更新粒子在对应待更新帧的预测位置以及二次更新位置增量,得到上述待更新粒子在对应待更新帧的更新位置。

在一些实施例中,上述二次更新位置确定单元包括:

碰撞点位置获取子单元,被配置为执行获取上述流体的碰撞点位置;

法向距离确定子单元,被配置为执行根据上述流体的碰撞点位置,得到上述待更新粒子在对应待更新帧的当前位置与上述流体的碰撞点位置之间的法向距离;

二次更新位置增量确定子单元,被配置为执行根据上述待更新粒子在对应待更新帧的当前位置、对应的法向距离以及上述流体的碰撞点位置,得到上述待更新粒子在对应待更新帧的二次更新位置增量。

在一些实施例中,上述视频生成装置还包括:

质量获取模块,被配置为执行获取上述每个粒子的质量;

更新时间获取模块,被配置为执行获取上述每个粒子每帧的更新时间;

上述预测位置确定模块包括:

更新速度确定单元,被配置为执行基于上述每个粒子的初始速度、质量、受到的外力以及预设的时间步长,确定上述每个粒子每帧的更新速度;

预测位置确定单元,被配置为执行基于上述每个粒子每帧的更新速度以及更新时间,确定在上述预设时间段内上述每个粒子每帧的预测位置。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

在示例性实施例中,还提供了一种电子设备,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现如上所述的视频生成方法。

在示例性实施例中,还提供了一种包括指令的计算机可读存储介质,例如包括指令的存储器,上述指令可由上述电子设备的处理器执行以完成上述方法。可选地,计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。

在示例性实施例中,还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现上述的视频生成方法。

本公开实施例所提供的视频生成方法实施例可以在移动终端、计算机终端、服务器或者类似的运算装置中执行。以运行在服务器上为例,图28是本申请实施例提供的一种视频生成方法的服务器的硬件结构框图。如图28所示,该服务器2800可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(Central Processing Units,CPU)2810(处理器2810可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器2830,一个或一个以上存储应用程序2823或数据2822的存储介质2820(例如一个或一个以上海量存储设备)。其中,存储器2830和存储介质2820可以是短暂存储或持久存储。存储在存储介质2820的程序可以包括一个或一个以上模块,每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器2810可以设置为与存储介质2820通信,在服务器2800上执行存储介质2820中的一系列指令操作。服务器2800还可以包括一个或一个以上电源2860,一个或一个以上有线或无线网络接口2850,一个或一个以上输入输出接口2840,和/或,一个或一个以上操作系统2821,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。

输入输出接口2840可以用于经由一个网络接收或者发送数据。上述的网络具体实例可包括服务器2800的通信供应商提供的无线网络。在一个实例中,输入输出接口2840包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,输入输出接口2840可以为射频(RadioFrequency,RF)模块,其用于通过无线方式与互联网进行通讯。

本领域普通技术人员可以理解,图28所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,服务器2800还可包括比图28中所示更多或者更少的组件,或者具有与图28所示不同的配置。

本公开确定失重状态下流体的初始速度和初始位置;并在流体受到外力时,确定流体中每个粒子受到的外力;从而确定在预设时间段内每个粒子每帧的预测位置;并基于此构建每个粒子每帧的密度约束方程;从而保证在流体局部密度不变的情况下,确定流体的多个视频帧,以得到在预设时间段内流体的视频。该视频高度模拟了失重条件下流体受力后的运行状态,且能够保证流体运行过程中局部密度不变;提高了模拟失重条件下流体颤动、合并和分裂状态的真实性。

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

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

相关技术
  • 视频生成方法、视频生成装置、电子装置及存储介质
  • 视频生成方法、视频生成装置、电子设备和可读存储介质
技术分类

06120113804449