基于简约多向光照散射的粒子云模拟与绘制∗
2021-06-02吴巍屹
吴巍屹 古 平 刘 洁 刘 彬
(陆军工程大学石家庄校区 石家庄 050091)
1 引言
自然景物建模仿真是计算机图形学重要研究方向之一,作为自然景观最为常见的云景模拟也越发具有挑战性,对于增强虚拟现实场景真实感和飞行模拟视景仿真具有重要作用。
在3D虚拟环境中,两个领域的工作非常重要:云的建模和绘制。云的建模是处理用来在计算机中显现云的数据并掌管产生和组织这些数据的任务。1985年,Geoffrey提出将云纹理映射到本体为椭球体模型进而生成三维云图,开创了一种使用噪声扰动来模拟复杂物体体过程的建模方法,但实验证明这种方法难以生成较强真实感的流动图像[1];Nishita等提出了分形建模静态精细云的方法[2];Yeshinori等于2000年提出细胞自动机建模方法用于产生真实感较强云图形,但因组元及变化规则略微简单致使云状态变化不连续[3];Matthias Unbes⁃cheiden利用粒子系统模拟不规则物体的突出优势,使用几何体物元数据库来表示物体并动态控制粒子运动、位置、产生和消亡若干状态[4]。诸如云、火、雪、雨等自然界不规则物体都可由粒子系统实现[5~8]。
绘制云同样也是困难的课题,原因在于真实的光照投影需要沿路穿过体云所涉及到视觉属性的综合效果,此外还要掺入介质中复杂光的散射、云的自投影等。先前的工作已试图在不同精确度和复杂度标准上对云的自然属性近似化,进而使用这些近似模型对云的图象进行绘制。Blinn引入密度模型合成仿真视景,他提出使用同型介质并融入低反照率[9],实现单一散射逼真光照;Kajiya和Von Herzen拓展了Blinn的方法使用光线追踪体数据来进行单一和多向的散射[10];Nishita引入对球形光照近似和绘制技术来说明多重各向异性散射[11]。
实现逼真云模拟及其多源光照投影会面临计算复杂且绘制困难的问题,这一点极大影响了实时仿真的效率。所以,本文在传统粒子系统理论基础之上,优化粒子系统结构设计,引入伪粒子系统思想,结合多向散射光照模型,改进各向异性散射参数设置,共同达到云形逼真、光照真实。算法力求简单、高效,以满足实时显示的需要。
2 基于粒子系统云建模
2.1 云粒子系统结构
粒子云系统由三部分组成:粒子、发射器、发射控制器。
L是发射器位置,S是发射器对应粒子运动方程,ID是对应发射器编号,PE={P1,P2,P3,…,Pm}代表发射粒子属性。粒子定义为
(pi.x,pi.y,pi.z)是粒子的位置坐标,PKi={pi.P1,pi.P2,…,pi.Pm)是该粒子一系列初始属性,如生存期、初始速度、初始加速度、初始颜色、透明度、标志位等。发射控制器EC使用队列来存储ID并动态分配指针变量指向队首。在系统时间周期内指针随意移动并遵循下式:
式中:P为指向队列的指针,对其初始化指向0号发射器,rand()返回任意随机数,h为发射器个数。通过指针的随机移动可以达到某时间段内发射器的任意选取,而不同发射器对应不同的粒子运动方程,则可以绘制不同形态云图以满足随时间变化云形随机转变的真实感。
2.2 伪粒子系统的引入
使用粒子系统模拟“流体”性质的不规则物体无疑是成功的,其优点在于可以利用非常简单的体素来构造复杂的物体,然而不足之处就是计算量和存储量非常巨大。伪粒子系统利用了粒子具有丰富动态属性的性质,给图元指定动态的、具有Alp值的纹理图片,对于每一帧(或每几帧),按照时间顺序更换纹理图片进而反映某个自然现象的整体过程。
本文在粒子系统之上根据光照模型计算相应的云粒子纹理并存于缓存,为降低实现代价,采用伪粒子系统,在不同时间段采用不同纹理图片并按一定时间延迟动态改变,最终完成云的渲染仿真。
引入伪粒子系统算法生成云图像的基本步骤如下。
第一步,初始化云粒子;
第二步,赋予云粒子初始属性,其中新粒子运动轨迹依随机选取的发射器所指定;
第三步,根据改进的光照模型计算云粒子的颜色、大小和透明度(Alp值)等参数属性;根据运动情况更新粒子位置和速度;
第四步,计算不同条件下的云粒子纹理;
第五步,根据一定的时间延迟动态地更换粒子的纹理;
第六步,绘制由有生命的粒子组成的图像。
整个系统组织如图1所示。
图1 系统组织图
3 改进云的光照模型
在现实世界中,光照明效果包括反射、透射和自投影等。自然环境中照射云的光,主要来自太阳并可大致认为是有一定方向的平行光,云吸收少量能量使得穿透粒子光辐射强度减弱,进而产生阴影。此外,数以万计的水滴云粒子都会经理多次反射或散射(Multiple Scattering),经过云层再进入人眼睛的光对云的外貌也有变化。一副精确显现的云图需要刻画光在云内部的多重散射和映像到视点后的云的明暗,如图2。这里选用Harris[12]的近似光照模型来模拟这一过程,即在预处理过程计算每个粒子的光照强度、粒子的颜色值、透明度并存于缓存;在实时运行绘制过程中结合视点的状态函数绘制粒子。
图2 粒子云的光照模型
3.1 简约多向散射光照的预处理过程
如图2,据Harris的预处理算法,设定粒子的所有方向的散射光主要集中在正入射方向内很小的立体角α。将粒子云中所有粒子沿光照方向以距离升序来排序:在粒子云外任取一点做虚拟光源并沿光照方向做直线穿过云中心C,不在这条直线的粒子(如②、③、④号粒子)计算其中心到光源的距离投影并进行排序。排序可有效确定粒子阴影渲染的顺序,实现后续添加粒子在区域阴影上应比原来阴影加深。则当前粒子的光强颜色表示为
其中αk是粒子反照率,τk是该粒子的光学深度,ik是平均强度,α是散射的立体角,是沿光照方向多向散射的状态函数。将粒子的颜色值和透明度记入缓存以待后期实时绘制。
为了提高后期的绘制效率,减轻系统负荷透支现象,这里利用人眼视觉缓冲及帧间相关性来对光照模型加以简约优化,提出了一种简约光照强度替代方法,基本思想如下:由于云粒子数以万计,如果逐一对其光照强度进行计算可能出现象素透支,而相邻紧密粒子间的光强差距不大,如图2所示,粒子V1、V2无限接近则所受光强基本相同,则V2所受的光强颜色值就可由V1替代,后期渲染时就可利用V1的纹理,不必重新绘制,大大减轻了帧存负荷并节省了时间。
设重新计算光强的变化转角是φmax,φ是云粒子中心C和两个临近粒子的矢量夹角,如图2矢量和分别是他们的单位向量,φ是的夹角,粒子间可以替代光照的条件是:
将这一替代方法可反复使用在光照方向直线上或粒子投影上,设再次计算光照最大判别距离为Dmax,则可以替代光照的条件是:
其中Dist(C,V)表示的是云中心C和任意粒子之间的距离或投影距离。
此外,为了便于减少重复对比粒子间光照相似度,本文在粒子结构化设计时在粒子的属性中添加一个标志位和替代单元,如果后序粒子可以使用前面粒子的光照颜色值,则将该粒子的标志位置为1并在替代单元中写入被替代粒子的序号。
3.2 散射状态函数的优化(PF(θ))
颜色、透明度是从数量上对光的散射和吸收予以描述,但未对散射的方向性进行分析。状态函数PF(θ)是来确定光照量从入射方向被散射至射出方向的衰变程度,函数首先进行规格化,代表着不同粒子不同散射的可能性分布。
状态函数的应用主要在以下两方面:一是在预处理过程确定前序粒子对后序粒子光照的散射程度;二是确定视点方向与光照方向不同交角的分布概率(如图2中的θ),视点接受粒子的光照强度与θ有关。状态函数的集中表现就是产生云内部自投影(self-shadow)和云边金色环衬的景象[13~15]。
常用状态函数运用了瑞利状态函数(Rayleigh Phase Function):
其中θ是交角,0≤θ≤2π。但此函数只能描绘各向同性散射(Isotropic Scattering),且不能表现背光方向光照强度的特点。本文在它基础上使用了一种改进的状态函数如下:
其中g是可以随机调节的参数,-1<g<1,g的不同可以实现相同散射角下散射强度不同,也就是达到了散射光照的各向异性性效果(anisotropic)。预处理时θ取从光照正向到逆向之间的任意角度;在实时仿真时θ取沿视点方向和光照方向之间的夹角。
改进的状态函数实现了在相同光照下,不同角度θ的变化,云粒子有不同的光照强度,顺光(g>0)看云显得更明亮,而背光方向(g<0)上则要光照相对暗一些,使得云的立体感油然而生。
4 模拟结果
上述算法可在PC端使用标准OpenGL图形库具体实现。实验仿真空间为32*32*16,云粒子半径选为4.0。另外,从数值上对简约光照替代方法与传统的光照方法从效率上进行了对比,可看出本文方法的有效性,效果见图3。仿真实验分别基于三种层云、团云、光照云效果进行了模拟,效果较为明显,见图4、图5、图6。实验表明:该模型仿真绘制生成的云形态逼真、具有较为真实的光照散射效果,并基本满足仿真的实时性要求。
图3 简约光照替代方法与传统方法性能比较
图4 层云
图5 团云
图6 多向散射光照云
5 结语
构建了一种新的模拟云粒子系统的结构方法,对粒子、发射器及控制器进行了详细研究,通过状态发射器的随机选择使粒子按相应运动方程运动并动态改变云形轮廓;采用光照替代简约方法和改进的散射状态函数对云的光照模型进行了详细描述与设计,以实现光照方向的多向散射和视点方向的各向异性散射;最后结合纹理映射技术,利用伪粒子系统,以一定时间延迟更换纹理图片,在提高效率的基础上实现了光照下多态云的模拟和绘制。