APP下载

物体表面水滴运动的实时动画仿真方法

2018-08-17胡中天

计算机工程 2018年8期
关键词:降维水滴曲面

胡中天,

(浙江科技学院 信息与电子工程学院,杭州 310023)

0 概述

三维场景的真实感与实时绘制一直是相关研究领域的热点问题。在实际应用中为增强雨天的真实感,通常在场景中加入实时模拟的降雨效果。现有方法多采用基于粒子系统[1-2]或图像后处理[3]的模拟方法,这些方法能够较好地模拟雨点的真实物理运动,但模拟出的雨滴无法与场景中的物体产生真实的交互。为解决流体与物体的交互问题,提出了各种流体模拟方法,现有方法主要有3种:基于欧拉的网格法[4],基于拉格朗日的粒子法[5]以及混合法[6],这些方法本质上都基于纳维-斯托克斯方程。但由于忽略了水滴对物体表面的黏附力、水滴自身的表面张力等因素,导致了这些方法更适用于大规模水体模拟。同时,随着当下三维模型精度的提高,无论采用以上哪种方法进行三维物体表面水滴运动的模拟都需要遍历大量模型顶点数据,开销较大。因此,仍需深入研究如何精确高效地实现水滴规模的流体模拟。

文献[7]提出一种玻璃板上基于格点的水滴运动启发式模拟方法,物理仿真时考虑了水滴的黏附力与表面张力,得到了较真实的模拟结果。文献[8]在仿真计算中还引入了接触角模型以模拟水滴在斜面上的运动状态。但以上方法只适用于平面上的水滴运动。

文献[9]基于显示曲面法模拟了水滴的固液交互现象。文献[10]通过为泪滴运动尾迹建立独立三维网格的形式模拟了流泪动画。这2种方法都实现了液滴与任意形状物体表面的交互,但计算过程繁琐。文献[11]在光滑粒子动力学(Smoothed Particle Hydrodynamics,SPH)模型中引入表面张力项与黏性项,克服了SPH等流体模型不能直接应用于水滴运动模拟的问题。文献[12]也使用类似方法模拟了虚拟人流泪与流汗情境,但模拟效率不高。文献[13]提出一种基于SPH的流泪动画降维模拟方法,采用切空间变换将物理仿真变换到二维空间,彻底避免了三维空间下的点-面碰撞开销问题。但该文对于离开二维仿真空间的泪滴只是简单地作删除处理,导致了模拟依赖于连续的曲面。

综合以上分析,已有模拟方法可分为2类:三维模拟方法与降维模拟方法。前者在三维空间下模拟水滴运动,使用三维网格渲染水滴,通常存在因计算开销较大而导致模拟效率不高的问题;后者则在二维空间内模拟水滴运动,使用法线贴图渲染水滴,效率较高但存在水滴无法离开纹理空间的局限性问题。为解决以上方法中存在的问题,本文提出一种三维与二维混合的物体表面水滴运动模拟方法,基于坐标空间变换实现2种水滴类型的转换,转换后的水滴继承之前水滴的位置、质量与速度。三维水滴采用三维网格渲染,纹理空间内的二维水滴采用法线贴图渲染。

1 水滴运动仿真方法

已有降维模拟方法均假设水滴不会从纹理空间滴落到三维空间,水滴直接在纹理空间内产生也消失于纹理空间。例如文献[13]的仿真模型中虽然讨论了切空间下水滴所受压力场为负值导致水滴离开纹理空间的情况,但没有进一步讨论这种情况下水滴的运动而是直接将其从仿真集合中删除。为解决这种局限性问题,本文在进行仿真计算时将水滴分为2种类型:三维水滴与二维水滴,这2种水滴类型能够互相转换并继承物理属性。三维水滴与物体表面发生碰撞时,转换为二维水滴;二维水滴在达到临界条件后,转换为三维水滴,转换过程如图1所示。

图1 水滴转换过程

而对于水滴之间融合、分离等细节现象的模拟,相对于显示曲面方法[9]以及SPH方法[11-13]在水滴数量增多时模拟效率下降明显的情况,本文方法先将纹理空间内的水滴粒子作为刚体进行物理仿真,再通过对纹理图像的处理获得细节效果,以获得更快且更稳定的模拟效率。纹理空间内二维水滴的处理流程如图2所示。

图2 二维纹理空间水滴仿真流程

2 水滴类型转换

2.1 坐标空间转换

为实现水滴类型的转换,首先要实现世界空间坐标到对应纹理空间坐标的转换。模型表面的局部空间坐标经过旋转、平移、缩放后得到其所在的世界坐标。首先求解旋转变换矩阵,模型分别绕Z轴、X轴以及Y轴旋转角的变换矩阵为:

(1)

令D=A·B·C,D即为旋转变换矩阵。

模型沿X、Y、Z坐标轴分别平移Tx、Ty、Tz距离的平移变换矩阵为:

E=[TxTyTz]

(2)

模型沿X、Y、Z坐标轴分别缩放Sx、Sy、Sz倍的缩放变换矩阵为:

故对世界空间中水滴与曲面发生碰撞的一点(x,y,z),可得局部空间下的碰撞点(x′,y′,z′):

[x′y′z′]=[xyz]·D-1·F-1-E

(4)

通过(x′,y′,z′)即可查询到对应的UV坐标点(u,v),至此即完成了世界空间下的物体表面坐标到对应纹理空间坐标的转换。

2.2 力场生成

为了对纹理空间内水滴的物理仿真进行降维处理,世界空间下的外力需要进行切空间变换。局部空间下的力由沿局部坐标系3个坐标轴方向的分量Fx、Fy、Fz组成,从世界空间到局部空间的变换矩阵为:

纹理空间由三角形面片划分,对应模型曲面的每个三角形面片的切向T、B分量,于是可得其法向量:

N=T×B

(6)

从纹理空间到局部空间的变换矩阵为:

得到以上变换矩阵后,将世界空间下的重力G与风力Fw变换到纹理空间:

纹理空间下的重力与风力场即为FWG(u,v)=(Fu,Fv),压力场即为FN(u,v)=Fn。

2.3 水滴受力与初速度转换

完成水滴坐标的转换后,还需要对水滴的速度与受力进行转换。三维水滴在世界空间受到重力、风力、空气阻力、空气浮力等作用运动,在转换到纹理空间后,二维水滴受到纹理空间下的重力、风力、压力、水滴与物体表面间的摩擦力、吸附力以及水滴自身表面张力影响;对于初速度,三维水滴进入纹理空间后,由变换矩阵得到其在纹理空间下的3个速度分量:

于是转换得到的二维水滴的初速度即为:

Vuv(0)=Vu+Vv

(10)

而对于进入世界空间的二维水滴,转换时还需要计算其法向速度分量,即转换得到的三维水滴的初速度为:

(11)

3 物理仿真

3.1 问题描述

本文的水滴运动物理仿真主要发生在物体表面即纹理空间,物理计算过程可以描述为:对于给定大小的二维纹理空间,给定水滴的初始位置向量X(0)、初速度V(0)、自身质量m、对物体表面的吸附力Fadhension、表面张力Ftension、静摩擦力Fs、动摩擦系数μ、重力加速度g,重力与风力场FWG(u,v)、定义时间步为dt,求解二维立面上水滴的运动轨迹方程。其中,X(0)由三维水滴与物体的碰撞点确定,X(0)为碰撞瞬间水滴速度在物体表面的切向分量。

3.2 水滴粒子受力模型

图3为一颗二维立面上的水滴,FN为切空间法向方向的力,即水滴受到的压力,Ff为摩擦力,Fu与Fv为重力与风力在切空间切向的2个分力。

图3 水滴粒子受力图

压力FN方向上水滴受到水滴与表面间的吸附力与自身表面张力以及压力场影响,有:

FN=Fadhension+Ftension+Fn

(12)

其中,Ftension=k/|ρ|表示水滴与曲面之间由于弯曲趋势产生的表面张力。于是可得到水滴受到的滑动摩擦力大小为:

|Ff|=μ|FN|

(13)

FTB(t)=Fu+Fv+Ff

(14)

由式(5)可得水滴此时的切向加速度a(t)为:

当水滴粒子达到临界状态时,水滴即离开纹理空间进入三维空间,临界状态包括2种:1)水滴粒子在纹理空间运动时超出了限定的UV坐标范围;2)水滴粒子受到的压力FN为负值。

3.3 水滴粒子的运动轨迹方程

水滴运动轨迹方程采用velocity-verlet积分算法计算,速度表达式为:

位置表达式为:

将式(5)、式(6)代入式(7)、式(8),得t+dt时刻下的水滴速度与位置表达式为:

绘制高度图时,任意水滴的中心点灰度值为:

(21)

然后将高度图转换为法线纹理,对于纹理空间内任一像素点,其RGBA值为(Δx,Δy,1,1)。其中:

lgrayScale、rgrayScale、ugrayScale、dgrayScale分别为该像素点左右上下的像素灰度值。水滴的反射与折射效果通过抓取屏幕背景截图并基于法线贴图对其UV进行扭曲、偏移的方式渲染。

6 实验结果与分析

6.1 实验环境

实验在Unity 3D引擎中进行,系统运行在一台Intel Core i5-4210U CPU @ 1.70 GHz四核CPU,NVIDIA GeForce 820M显卡的计算机上,Unity 3D版本为5.3.4f1(64 bit),实验中计算的二维水滴纹理分辨率为1 600像素×900像素大小。

6.2 系统实现

实验分为2个部分,第1部分负责三维水滴的物理仿真与渲染,第2部分负责二维水滴的物理仿真与渲染。

第1部分的大致处理流程如图8所示。预处理阶段产生质量大小不同的三维水滴,实验中采用的三维水滴网格为方形面片。三维水滴通过物理仿真下落到物体表面,在碰撞点处转换为纹理空间的二维水滴。

图8 第1部分处理流程

第2部分的大致处理流程如图9所示。二维水滴继承三维水滴的质量大小与速度,预处理阶段完成数据的转换,之后水滴在纹理空间内继续进行物理仿真,达到临界条件后从物体表面纹理空间离开,再次转换为三维水滴。

图9 第2部分处理流程

6.3 非连续曲面的滴落实验

图10所示为水滴在非连续曲面上运动的模拟结果,场景中仅包括重力,三维水滴在滴落过程中经过2个不连续的平面,经历4次转换。图11所示为2个平面的纹理图像模拟结果,显示了水滴在2个平面上的运动留下的尾迹。

图10 非连续曲面的滴落

图11 2个平面的纹理贴图模拟结果

6.4 对比实验

如图12所示为本文方法实现的模拟结果与实拍照片的对比。

图12 各种情况下的雨滴运动模拟

图13所示为实拍照片及不同方法在球体表面的水滴运动模拟结果对比。

图13 球体表面水滴运动模拟结果

普通三维SPH方法因为模拟中未加入黏性项与表面张力项,水滴粒子与球体表面发生碰撞后无法沿曲面滑下,产生了错误的模拟结果,而加入了黏性项与表面张力项的改进三维SPH方法则能够得到正确的模拟结果。降维SPH模拟方法中水滴被绘制在法线纹理上,以贴图方式渲染,水滴能够沿着曲面滑落但不能离开纹理空间。在本文方法的模拟结果中,水滴粒子分为2种类型,在纹理空间外水滴粒子以三维网格渲染,而处于物体表面纹理空间内的水滴粒子则以法线贴图方式渲染,水滴能够产生正确的运动轨迹且能够离开纹理空间。

图14-图16所示为不同风力环境下不同方法的虚拟人流泪模拟结果对比。

图14 风力(0.0,0.0,0.0)的模拟结果对比

图15 风力(10.0,0.0,0.0)的模拟结果对比

图16 风力(0.0,0.0,5.0)的模拟结果对比

图17为各方法模拟水滴融合产生液体桥现象的结果。基于显示曲面的模拟方法中,2个水滴只是简单叠加,而基于SPH的方法与本文基于图像处理算法的方法则在水滴间产生了良好的融合效果。

图17 液体桥模拟结果对比

图18所示为降维SPH与本文方法模拟的流经物体表面水滴留下的尾迹,图18(a)为降维SPH模拟结果,图18(b)~图18(e)为本文方法模拟结果,从左至右尾迹的插值细分值分别为0、1、2、3。本文方法能够更灵活地获得需要的尾迹效果。

图18 尾迹模拟结果对比

表1为三维SPH、降维SPH以及本文方法在不同粒子数情况下的模拟效率对比,模拟系统中使用的模型三角面片数超过10 000个。表2为不同方法在不同三角面片数模型表面模拟的效率对比,模拟系统中最大粒子数为5 000个。在同等条件下,本文方法的模拟效率相比基于SPH的二维与三维模拟方法分别提高了2倍与5倍以上。

表1 各方法在不同粒子数下模拟的平均帧速率 frame/s

表2 各方法在不同面数模型表面模拟的平均帧速率 frame/s

在现有方法中,三维空间下的模拟方法往往存在计算开销大、效率低的问题,而降维模拟方法又存在水滴只能在纹理空间内模拟的局限性问题。本文结合了三维与二维模拟方法的特点,提出了一种实时水滴运动仿真方法。该方法效率更高,且水滴粒子能够在世界空间与纹理空间之间进行转换。

7 结束语

本文提出了一种能够对物体表面的水滴运动进行实时动画仿真的方法,并给出了实现框架以及与现有方法的模拟结果对比。本文所提方法能够得到实时的模拟结果,三维水滴与二维水滴能够互相转换并在转换后继续进行仿真计算与渲染,解决了已有降维模拟方法中水滴无法离开纹理空间的问题,使得模拟不再依赖于连续曲面。但本文没有对三维水滴在空气中的物理仿真作详细讨论,也没有使用GPU对模拟进行加速,这些需要在今后的工作中加以改进。

猜你喜欢

降维水滴曲面
混动成为降维打击的实力 东风风神皓极
简单拓扑图及几乎交错链环补中的闭曲面
利用水滴来发电
Helicobacter pylori-induced inflammation masks the underlying presence of low-grade dysplasia on gastric lesions
降维打击
水滴轮的日常拆解与保养办法
相交移动超曲面的亚纯映射的唯一性
关于第二类曲面积分的几个阐述
透过水滴看世界
基于曲面展开的自由曲面网格划分