玻璃窗上水滴运动控制的实时绘制算法
2020-05-12刘培艺
唐 勇,刘培艺,张 鹏,李 颖
1(燕山大学 信息科学与工程学院,河北 秦皇岛 066004)
2(河北省计算机虚拟技术与系统集成重点实验室,河北 秦皇岛 066004)
E-mail:tangyong@ysu.edu.cn
1 引 言
自然景观的模拟一直是计算机图形学领域里一个非常重要的研究方向,降雨是日常生活中常见现象之一,雨场景在游戏特效、动漫制作及仿真驾驶等众多领域具有广泛应用.通过玻璃窗显示雨场景以及对玻璃窗上的水滴运动进行模拟,对于逼真展示雨环境起着重要作用.
近年来,国内外的学者对水滴的实时模拟做了很多工作,从水滴的建模到水滴与物体的交互等方面都进行了十分细致的研究.但在玻璃窗上水滴的运动效果模拟上,由于缺乏物理规律的考量,水滴在玻璃表面的运动行为难以灵活体现水滴的受力变化,缺失了一定的真实性.
2002年,Jonsson和Hast使用凹凸贴图来模拟结构化表面上的液滴流动,通过凹凸贴图的法线矢量捕获微结构化表面的几何形状[1],但是不能呈现物理上水滴的真实流动过程.2003年,Sato等人采用图形硬件模拟水滴,通过将水滴渲染为多边形半球来创建水滴纹理,同时应用景深效果增强液滴的视觉质量,清楚地显示了不自然的个别半球[2],但由于使用卷积滤波器的方法计算深度场,速度较慢,无法获得更准确的水滴运动效果.2005年,Wang等人提出一种基于物理的方法,该方法设定流体表面和固体交叉处的接触角,通过虚拟表面修改水平集距离场,准确地计算接触角,模拟水滴的各种形变[3],但由于使用稀疏网格,难以兼顾计算速度和水滴的运动模拟.2007年,Stuppacher和Supan基于高度图创建纹理,然后将高度图转换为法线贴图,使用基于菲涅耳模型的照明渲染水滴运动[4],但该方法无法正确处理快速流动的水滴和水流.2008年,Takenaka等人利用点精灵函数绘制纹理图像,有效地渲染了水滴的外观[5],但由于未对水流进行控制,导致水滴运动过程不自然.2010年,Thürey等人使用多尺度分析方法处理流体表面的不同张力问题,详细地模拟了水滴表面[6],但张力的计算和渲染消耗较大,难以达到实时的要求.2012年,Zhang等人采用隐式平均曲率流算子模拟表面张力效应,构造液滴形状[7],但由于复杂的曲面操作,必须及时更新网状连接以处理拓扑更改,计算复杂,使得水滴模拟的效率大幅下降.2013年,Chen等人结合粒子系统和高度图计算玻璃板上水滴的形状和运动[8],但由于没有充分考虑水滴的物理性质,使得水滴的运动不够真实.2015年,肖苗苗等人提出一种模拟虚拟人眼泪的方法,在预处理时将三维中的流淌仿真映射到二维空间,仿真时考虑到了相关作用力[9],但该方法基于一个连续的曲面,不能准确模拟水滴受力后的运动行为.2017年,Jeschke和Wojtan引入了一个基于波包理论的水波模拟算法,能够稳定地模拟水面上的雨滴波[10],但在雨场景的模拟上,仅考虑了水面的雨效果,其它并未做更多的探索和尝试.2018年,Jeschke等提出了一种基于线性波理论的水波离散化方法,实现了水面雨滴波的动画效果[11],但其同样缺少对雨滴运动行为的模拟,在雨场景的模拟效果上有所欠缺.
综上,据我们所知,目前对雨场景的模拟,更多侧重于只模拟简单的水流行为,而忽略了水滴在玻璃表面的形状和运动会受到各种因素的影响,给水滴及其运动行为的真实性模拟提出了挑战.为解决上述问题,本文采用由随机数确定的多个半球构建具有不规则形状的静态水滴;考虑重力、风力、表面张力、水滴对物体表面的吸附力、空气阻力等对水滴速度的影响;基于水滴受力模型和网格对水滴的亲和度,引入风力因子和弯曲因子凸显自然风和玻璃表面杂质给水滴运动带来的影响,展现了更加逼真的水滴运动细节效果.
2 水滴建模
在垂直的玻璃表面上,由于受到重力的影响,静态水滴的形状不是一个精确的球形.为了对水滴进行真实建模,采用离散环境中的粒子系统.将玻璃表面划分为N*N个小的四边形网格,使用一个或多个半球模拟静水滴的形状.如图1为单个网格内水滴的横截面图,通过使用多个半球,我们可以模拟不同形状的静态水滴.
图1 构建静态水滴
qi,j+1=qi,j+di,jui,j
(1)
3 水滴运动模拟
3.1 计算水滴的受力与速度
水滴的移动取决于使水滴向下弯曲的各种因素,玻璃窗上水滴粒子的运动由作用在水滴上的外力决定,设G与Fw为重力和风力,Ff为摩擦力,Fadh表示水滴对玻璃表面的吸附力,Ften为表面张力.
FN为水滴受到的压力,计算为:
FN=Ften+Fadh
(2)
此时可得到水滴受到的滑动摩擦力大小为:
|Ff|=μ|FN|
(3)
Fsum(t)=Ff+G+Fw
(4)
则可得水滴此时的加速度a(t)为:
a(t)=Fsum/m
(5)
一个流动水滴的速度值计算并不依赖于水滴的质量,但在现实世界中会受到空气阻力的影响,为了获得更真实的速度值模拟,引入空气阻力控制因子ζ.速度值v可由(6)式进行计算:
v=(1-ζ)(v0+a(t))
(6)
其中v0是水滴落在玻璃窗上时的速度.
3.2 确定水滴运动方向
水滴流动的路径大部分由作用在水滴上的合外力决定,玻璃窗上真实水流的运动轨迹是蜿蜒的,而不是直接向下运行,其曲折路径是由于玻璃表面上的杂质造成的.为了使水滴运动模拟更加真实,综合考虑水滴受力和相邻网格对水的亲和度共同确定水滴的运动方向.
图2 水滴移动方向
计算考虑上述两个因素的每个方向的运动概率,其结果表示水滴按给定方向向网格移动的概率.每个区域的概率与面积成正比,最终通过八个方向的面积和随机数,从所有方向中选择一个作为水滴运动的方向.
3.2.1 计算基于水滴受力运动的概率
玻璃表面上水滴受力运动遵循牛顿运动定律时,网格中水滴的路径可以用牛顿运动方程表示:
(7)
其中x(t)是水滴在t时刻的位置,求解方程(7),就可以找到位置p,p为水滴穿过网格边界时的位置,Vp为水滴到达p点时的速度.
(8)
其中Dk(k=1,…,8)是基于水滴受力运动的概率,dk为指向相邻网格中心的向量,|dk×Vp|表示两个向量dk和Vp叉乘的强度.
3.2.2 计算基于亲和度的概率
为了模拟由于杂质,小划痕等导致的玻璃表面的不均匀特性,预先为每个网格点分配对水的亲和度,以便呈现出水流曲折的效果.
(9)
3.2.3 计算运动方向
首先,通过求得的两个概率Dk和Ak计算相邻八个区域的面积.由于水滴的速度越大,主矢量Vp移动的概率就越高,考虑到这种影响,基于水滴受力运动的概率由主矢量的长度加权有:
(10)
其中Rk(k=1,…,8)是相邻八个区域的面积,γ1为风力因子,控制水滴运动轨迹受风力的影响程度,同时添加人工参数δ进行校正.γ2为弯曲因子,控制水流的弯曲程度.
然后,找到满足以下条件的索引p(p=1,…,8):
(11)
4 实验结果与分析
实验在windows 10操作系统,Unity3D 平台下进行,硬件环境为:Intel(R)Core(TM)i7-6700 CPU @3.40GHz,32GB,显卡为NVIDIA GeForce GTX 960.通过充分的实验对比,验证本文方法的真实性与实时性.
图3分别展示了受空气阻力控制因子和受弯曲因子影响的水滴的运动轨迹.图3(a)-图3(c)为空气阻力控制因子的值逐渐增大的模拟结果,水滴受到的空气阻力越大,运动的速度就越小,在玻璃窗上的运动轨迹越短.由于考虑了空气阻力导致的数值耗散,使得水滴的运动效果更加自然,画面更为逼真.图3(d)-图3(f)为三种不同弯曲因子值的模拟结果.弯曲因子的值越大,水滴运动轨迹呈现更多的弯曲变化.
图3 不同参数下水滴运动效果对比图
图4展示了受风力因子影响的水滴的运动轨迹.图4(a)-图4(d)为四种不同风力因子值的模拟结果.风力因子的值越大,水滴运动受风力影响越大,偏移角度越大,其中值的正负仅代表方向,正值为向右的横向风,负值为向左的横向风.
图4 不同风力因子下水滴运动效果对比图
图5中,图5(a)为本文建立的水滴运动效果图,图5(b)为真实雨环境下的水滴运动轨迹.与真实效果相比,本文方法可以清晰的展现水滴运动特性.
图5 真实水滴运动效果对比图
图6(a)和图6(b)分别展示了文献[8]和使用本文方法模拟玻璃窗上水滴运动的效果.文献[8]只计算了水滴的重力和摩擦力,而本文在此基础上还考虑到了水滴在运动过程中所受的空气阻力和风力作用,与文献[8]相比能更好地还原水滴运动的真实物理特性.
图6 水滴运动模拟与对比
图7分别展示了文献[10],文献[11]和本文对水面雨环境的模拟效果.文献[10]和文献[11]都只模拟了水面上的雨滴波,而本文在雨滴波的基础上,增加对玻璃窗上水滴粒子运动的模拟,效果更为丰富,使得雨环境更加真实和自然.
图7 水面雨环境模拟与对比
表1列举了不同实验场景的渲染帧速率,实验结果表明本文方法的实时性,有效地进行水滴运动模拟.
表1 不同实验场景的执行结果
Table 1 Execution results of different experimental scenarios
场景粒子数空气阻力系数风力因子数弯曲因子值帧速(FPS)5(a)10k0.200.300.5085.20文献[8]0.5k---526.326(b)10k0.711.000.2083.207(c)10k0.18-0.300.4084.70
5 总 结
针对水滴在玻璃窗上运动效果真实感较差的问题,本文提出一种水滴运动控制的实时模拟方法.通过使用多个半球进行静态水滴建模,成功地解决了水滴形状单一的问题;在水滴的速度计算过程中,以水滴真实受力模型为基础,引入空气阻力控制因子,改善了水滴在玻璃表面上运动长度不可控的现状,增强了水滴运动模拟的真实性;提出综合考虑水滴受力运动和相邻网格对水的亲和度共同计算水滴运动方向,避免了与实际情况不符的水滴运动行为,同时结合自定义的风力因子和弯曲因子,凸显出自然风和玻璃表面杂质对水滴运动方向的影响,获得更加真实可控的水滴运动效果.
在未来工作中,将继续对玻璃窗上水滴的运动控制进行研究,包括玻璃窗表面粗糙度对水滴尾部褪色的影响,玻璃窗平移或旋转对水滴运动行为的影响等,完善水滴运动细节,进一步在流固界面动力学模拟方面做有益探索.