基于Perlin噪声的动态云仿真

2012-05-27 02:51陈华光王京文
关键词:云彩云图灰度

陈华光,王京文

(湖南工程学院 计算机与通信学院,湘潭 411101)

近年来,自然现象中云彩的建模和渲染越来越成为计算机图形学中最具挑战性的研究方向之一,这是由云形成物理过程的复杂性、形状的不规则、变化的实时性等因素决定的.对云的生成仿真研究有着重要的现实意义.云的模拟在战场环境仿真,气象条件的仿真、视景仿真系统、计算机游戏、三维动画、影视及广告中有着广泛的应用.

目前形成的对云的仿真方法多种多样,从云建模方法看大体可以分为以下几类[1]:基于物理的建模方法[2],试图通过仿真生成云的气象学过程和光与云的相互作用来建立云的模型.基于个体生长的建模方法:包括基于分形的云建模方法[3],基于过程的建模方法[4]等.但这些方法的主要目的在于生成静止的云,难以产生动态的具有现实意义的云.两种方法的结合:Y Dobashi等人用细胞自动机的方法将云的生成模型进行了简化,生成了动态的积状云[5].R Miyazaki等人在此基础上用CML方法研究了层云和积云的三维生成,但计算代价仍需进一步降低.

本文先介绍Perlin噪声的构造,给出静态云图像的算法;然后讨论不重复运动云彩的生成算法和云彩平滑变形的生成算法,最后将云彩置入虚拟环境中,进行了云的动态模拟.结果表明:本文实现动态云的方法实现简单,在现行的PC机上可获得实时、逼真的动态云效果.

1 Perlin噪声的构造

本文用Perlin噪声构造2维云图.将云图平面划分为有m×n个控制点的噪声控制点阵列.设平滑噪声函数为 Noise(x,y),其输入参数为点I(x,y)的坐标值.假设I(x,y)落在4个相邻噪声控制点C(i-1,j-1),C(i,j-1),C(i-1,j)和C(i,j)所围成的区域内,其中i,j为整数,并且1≤i≤m,1≤j≤n.先计算从每个相邻控制点到I(x,y)的向量与该控制点的梯度的点积 :

图1 Perlin噪声

设u和v分别为x和y的小数部分,在x方向上对d1和d2,d3和d4分别进行3次调和插值 :

最后在y方向上对s1和s2进行3次调和插值,就得到了二维平滑噪声函数的表达式为

得到一个平滑的噪音函数后,按照公式(4)改变该噪音函数的振幅(amplitude)和频率(frequency)构造出若干新的噪音函数[5]Noise(x,y)

式中,i是第i个被相加的平滑噪音函数,它反映了perlin噪声函数的细致程度.通常persistence取2n,n可以随意取值,它的大小决定了Perlin噪声函数的振幅,n越小,Perlin噪声函数的形态越平缓.本文定义了振幅值是随频率变化的,将这些噪音函数进行叠加,就构造出PerlinN噪音函数为[5]

为了便于编程计算,本文采用公式(6)作为PerlinN噪音函数

2 静态云的生成

2.1 用Perlin噪声构造云的方法

这里使用矩形区域作为研究对象来描述使用Perlin噪声生成云的过程.用公式(6)计算每个网格点Perlin噪声值,用噪声值作为云的灰度,从而得到了两维云图的灰度图像.N越大,灰度变化的连续性就越强,但运算量也随之增多,一般计算时取N为5~8,图2就是取N=6的结果.

2.2 用指数函数对云进行锐化

图2所示的云图像比较模糊,和真云图像有区别,可进一步用指数函数对云的灰度进行锐化.指数函数的公式为[6]

其中Cloudcover为控制云复盖天空密度的参数,值越大,云复盖天空密度就越小,取值0~255,本文取90~140.参数cloudsharpness与云锐化程度有关,取值为0~1,取值较小,云比较稠密,取值接近为1,云比较稀薄,本文取值0.90~0.98.C必须大于或等于0;vcolor为Perlin噪声计算得到的云的灰度.ecolor为锐化后的灰度值.图3是Cloudcover取值120,cloudsharpness取值0.95的结果.

2.3 颜色替换

蓝天白云是虚拟现实中应用最广,也是云彩变化最丰富的一种景象.实现蓝天白云云彩图像的步骤是将图像中的灰色背景用阈值筛选法变换成蓝色背景.所谓灰度阈值筛选法是将图像中灰度值小于阈值的颜色换成蓝色,如果直接用灰度阈值筛选法实现,则筛选之后云彩边缘的一些雾化效果就消失了,不太逼真.本文通过HLS颜色模型将锐化后得到的灰度云图像转化为逼真的蓝天白云效果.HLS颜色系统是用色调(Hue)、亮度(Light)和色饱和度(Saturation)三个值来表示一种颜色.由于计算机的显示设备采用RGB颜色系统,所以需要用两个颜色函数完成RGB→HLS,HLS→RGB的颜色转换.用HLS颜色系统实现颜色替换的步骤如下[8].

(1)从用户提供的背景色(天空的RGB颜色)转化为HLS颜色(Hsky、Lsky、Ssky三分量).

(2)从黑白灰度云彩图像中的提取颜色值作为L,由(Hsky,Lsky,Min(start+L/3,240))得到一个HLS颜色值,这里start是一个常量值,主要是为了跳过HLS颜色中的黑色部分.

(3)把上一步得到的HLS颜色值转化为RGB值,用此RGB作为颜色绘制像素点.

图4就是对图3进行颜色替换的结果.

3 运动云彩的模拟

上述方法可由用户输入参数来生成形状不同、非常逼真的云图,但云图是静止不动的,在此基础上可进一步生成动态云图.

3.1 不重复运动云彩的生成算法

当前许多的自然景物模拟运动采用的都是图形循环的方式,将一幅云图沿着某一轨迹运动,在一个方向走到图的边缘以后,再返回到图的开始地方,观察者会感觉到动态演示的是一个不断重复的狭小的图形,缺少自然真实感.本文提出的无限不重复运动生成算法,可生成任意给定长度的云图.设屏幕显示窗口宽度为W,高度为H;首先生成宽为2W,高度为H的静态云图,云图以速度v向左运动,上述右边W×H的图像在时间为t=W/V内将到显示框,即完成一帧图像的显示.为了运动继续,在完成一帧图像的显示之前,在右边生成大小为W×H并与左边图像连续的静态云图.不断循环,达到连续而不重复的运动效果.算法描述如下:

步骤(1):将运动云彩分成由若干个W×H的矩形组成,为了能实现纹理映射,宽(W)和高(H)尺寸分别为2的整数次幂+1,每个矩形对应一帧图像.在内存中开辟一个计算区,即定义一个大小为2W×H的数组用来计算第i帧云彩的图像;再开辟一个显示区,即定义一个大小为2W×H的数组来存放要显示的第i帧云彩的图像.

步骤(2):产生第1和第2个矩形的伪随机梯度,放入计算区,用计算静态云彩的方法计算第1帧图像的云彩的图像;

步骤(3):从i=1开始,将计算机区的结果存放显示区,在时间为t=W/V内完成第i帧图像的云彩的显示,同时产生第i+2个矩形的伪随机梯度;将第i+1个矩形的伪随机梯度和i+2个矩形的伪随机梯度合并放入计算区,用计算静态云彩的方法计算第i+1帧图像的云彩的图像;

步骤(4):重复(3)直到运动结束.

3.2 运动云彩结构平滑变形的生成算法

如果只有云图产生的动态平移运动,不能逼真自然界云彩的运动,云彩在运动时结构常常发生变化,产生云彩形运动.运动云彩结构平滑变形的生成方法是:首先产生L幅静态云图,为使云彩结构连续平稳变化,避免抖动、跳跃现象,通过插值将两幅静态云图之间划分成K等份,得到K幅静止插值云图,再按顺序进行快速显示,达到结构变形运动云彩的效果.

运动云彩平滑变形的生成算法如下:

步骤(1):生成M幅W×H的静止云彩算法生成的云图,W为2n+1,n为正整数;

步骤(2):显示第i幅静止云图Fi(u,v),1≤i≤M;

步骤(3):在i到i+1两幅云图Fi(u,v)和Fi+1(u,v)中间,插值生成k幅云图;

①生成第j幅插值算法生成的云图,1≤j≤K;

③显示第j幅插值算法生成的云图Fj(u,v);

④转①继续处理,直到j>K.

步骤(4):转步骤(2)继续处理,直到i>M.

4 虚拟环境中云的实时绘制

本文采用纹理映射方法,将Perlin噪音生成的云的图像映射到虚拟环境中.具体做法是用VC和OpenGL进行编程实现生成虚拟环境,用半球形当成天空,将本文云生成的图像映射到天空上.在硬件基本配置为2.83GHz CPU,4GBHz内存,显存为1G显卡的计算机上仿真,设置象素模式为1280×800,测试基本可达到50~70左右的帧频.其运动效果图如图5所示.

图5 虚拟环境中运动的云图

5 结束语

本文给出的静止云彩和动态云彩的生成算法简捷有效,改进了目前的常用算法.在静止云彩的生成算法中,只要改变几个控制参数,就能生成不同类型的云彩;无限不重复运动云彩的生成算法得到的任意长度的云图,分帧显示运动效果明显;云彩平滑变形的生成算法能快速输出插值得到的云图,云彩结变化非常平稳.可用于普通的PC平台上,它们在虚拟环境可视化系统的研制开发中将起着重要的作用.

[1]朱长征,谌海新.云建模方法现状、发展趋势及在军事领域的应用[J].计算机应用,2003,23(9):22-24.

[2]Taxen G.Cloud Modeling for Computer Graphics[M].Royal lmtitute of Technology,Stockholm,Sweden,1999.

[3]T Nishita,Y Dobashi,E Nakamae.Display of Clouds Taking into Account Multiple Anisotropic Scattering and Sky Light[C].Proc.SIGGRAPH96,1996:379-386.

[4]D S Ebert.Volumetric Modeling with Implicit Functions:A Cloud is Born[C].Visual Proc.SIGGRAPH97,1997:147.

[5]S.Liu,R.Huang,Z,Wang,et al.Texture Advection Based Simulation of Dynamic Cloud Scene,Proc.of CAD/Graphics,2007:144-149.

[6]陈华光,王京文,张晓清.基于Perlin噪声的云生成系统[J].微计算机应用,2008,29(2):63-65.

[7]陈 锋,姚俊峰,过程纹理实现动态云层[J].系统仿真学报,2007,19(2):218-220.

[8]石教英.计算机图形学的算法基础[M].彭群生[译].北京:机械工业出版社,2002:481-483.

猜你喜欢
云彩云图灰度
采用改进导重法的拓扑结构灰度单元过滤技术
基于灰度拉伸的图像水位识别方法研究
神奇云彩:大自然的画作
春天的云彩
成都云图控股股份有限公司
云彩的秘密
云彩大秀场
黄强先生作品《雨后松云图》
基于最大加权投影求解的彩色图像灰度化对比度保留算法
基于TV-L1分解的红外云图超分辨率算法