APP下载

一种基于流体动力学模拟的水墨渲染方法

2010-09-17赵凡张文俊王少波张族锦

微型电脑应用 2010年3期
关键词:外力纹理水墨

赵凡,张文俊,王少波,张族锦

0 引言

长久以来,中国动画艺术家在国际上创立了中国动画学派,并且成功创作了水墨画效果动画。但是凭借手工制作的水墨效果动画成本高,周期长,远无法满足现代动画的制作和成本要求,在国际动画市场上也缺少有利的竞争优势。因此,能够用计算机有效的绘制出水墨画效果,对于缩短水墨动画制作周期并降低成本,提高在国际动画市场上的竞争力有着重要的意义。但是,从国际上来看,就中国传统水墨艺术的数字化实现方面,人们所做的研究与开发还不是很多。

国内从事数字水墨的计算机生成研究,主要是通过基于粒子系统[1]、纹理合成[2]、动态扩散机理[3]和应用分形[4]等方法来实现对水墨画的仿真,这些方面虽然对数字水墨的实现取得较好的效果,但这些方法大多由于方法复杂和计算量大而不能达到实时的渲染效果。香港科技大学的MoXi交互绘画系统[5],虽然可以实时地生成水墨效果,但只能在用户画出一笔的过程中实时生成一笔的水墨笔画,而并不适用于水墨动画制作。本文在流体动力学模拟技术的基础上,通过交互施加外力,使用高级着色器语言(HLSL)和图形处理单元(GPU)来处理纹理上的顶点和像素,对纹理进行流体动态模拟,从而实现对已知纹理的实时水墨效果渲染。

1 流体动力学模拟及在GPU上的实现

流体动力学模拟是模拟多种自然现象的基础,如流淌的河水、飘渺的青烟、升腾的水汽以及灌中混合的油漆等等。所有这些都是运动的流体,都是人们想要在交互式图形应用中逼真描绘的现象。

在流体动力学中,流体的速度 u(x,t)是最重要的量,其决定了流体本身的流动状态,以及该流体中的物体的运动。流体的速度即随时间又随空间的变化而变化,通常将它表示

为一个矢量场。流体的速度矢量场是对于每一个位置x=(x,y)而定义的,也存在与时间t相关的速度,即可描述成,

流体动力学模拟的状态表示在一个M×N的网格上,箭头代表速度,如图1所示。流体动态模拟的关键是正确及时地决定当前的速度场,这可以通过解一组方程式实现。

图1 流体速度的网格

这组方程式描述的是多种力的相互作用,以及速度随时间的变化。一点有了速度场,就能用它移动物体,改变流体的密度等。假定流体是不可压缩的和均匀的,既在任何局部区域的体积不随时间而改变,且密度在空间中是常数。则流体可由它的矢量速度场u(x,t)和标量压力场p(x,t)来表示,这些场既随时间又随空间而改变,且对于不可压缩的流体,其速度和压力在起始时间t = 0已知,那么流体状态随时间的变化可以用Navier-Stockes方程式[6]描述:

其中,ρ是流体密度,v是动力黏度,而F=(fx,fy)代表作用于流体的任何外力。

由于图形处理硬件的并行计算能力极强,因此流体动态模拟在图形处理单元(GPU)上运行起来要比CPU上快得多。比如,仅在一个二维的矩形区域进行一个连续流动的模拟,GPU的并行性使它很适合流体模拟所需的计算类型,模拟在单元的网格上执行,把可编程GPU优化为进行像素计算,把单元的网格看作像素。GPU能够同时处理多个顶点和像素,达到很高的运行性能。因为网格是存储在纹理中的,所以这种速度和并行性正是模拟时需要的。

上述提及的流体动态模拟表现二维网格上的数据,在CPU上这个网格的自然表达是一个数组,而对应到GPU上是纹理。纹理通常有3或4个彩色通道,所以对有2到4个分量的矢量数据类型,它们可以提供一个数据结构。一般至少需要两个纹理来表现流体的状态,一个用于速度,一个用于压力。

2 水墨渲染效果的实现

随着可编程像素着色器的出现,用一种逼真、精确的方法实现真实感渲染成为可能。同时,在渲染过程中对正确反映事物物理性质的要求,也需要进一步提高渲染的精度,例如凹凸映射就需要反映物体表面及光照的真实行为。Kevin Myers借鉴了逐像素光照[8],即基于每个像素上对光照方程进行估算的这种概念后,提出了一种通过计算,定义每点的重力物理属性,来实现模拟流体动态经过任意物体表面的模型[9]。在此模型中,着色器使用法线贴图(Normal Map)计算出逐像素重力值,该值存储在高度贴图(Height Map)中,用来模拟流体。在生成重力体贴图(Gravity Map)的过程中,假设已经存在法线贴图,它由各像素的法线组成,存储在RGB纹理中。对于每一个点,有关于方向的描述。由于流体在平面上运动,z分量可以忽略,因此将重力定义为不含z方向的二维向量,即由法线的x和y分量定义经过纹理空间的重力。使用法线贴图计算出重力需要将重力向量变换到切线空间中,x和y分量描述每一点上的重力。为了确定某一点最终的方向向量,需要求出该点二维重力向量及x与y分量在该点的切线向量之和。所得二维向量将决定在切线空间中流体经过表面时的方向,如图2所示。

图2 流体经过表面时某点的最终方向生成

在上述模型中,最终得到的方向向量可看作是式(2)中作用于流体的外力F。而水墨在宣纸内部进行扩散和渗化的过程可近似的看作流体在纸上经过的动态过程。因此,应用于水墨渲染的过程,类似于上述液体动态流经物体表面的过程。不同的是,水墨的流动不单单靠重力作用,还包括纸纤维的吸水作用和墨粒子的粘附作用,进而产生扩散纹理,这些效果的产生,除了与墨的浓度(即颜色的深浅)有关之外,还与纸纤维的吸水性、用水量的多少、用笔的角度以及纸纹理的情况有关,有时候甚至完全是随机出现的效果[1]。为了达到这种效果,可将作用于水墨的外力进行修改,用比较简单的方法来计算外力和由它所引起的加速度。即,通过设定鼠标的位置来确定外力的大小和方向。通过鼠标的点击和拖拽,把外力添加到水墨纹理中,使它在宣纸纹理上“流动”,模拟水墨在宣纸上的扩散和晕化。具体过程如下:点击水墨纹理内的一点,该点的颜色给外力的方向和大小编码,红色的通道包含x上的量,而绿色的通道包含y上的量。该点实际上是一个二维的高斯“条”(Gaussian “splat”)。使用一个片元(fragment)程序检查每个片元与外力位置的距离。然后把量c添加到颜色中去:

其中,F是根据方向和鼠标拖拽的长度计算出来的力,r是所要求的外力作用半径,而(x,y)和 ),(ppyx 分别是在窗口坐标中的片元位置和外力(点击)位置。

3 实验结果分析

本实验是在CUP为2x2666MHz Pentium III Xeon,显卡为NVIDIA Quadro FX 3700的硬件基础上进行的。通过使用高级着色器语言(HLSL),PS (Pixel Shader)2.0和Cg语言来实现水墨渲染的效果。并且对于不同类型的纹理,包括单点(圆形)、多点、文字及待处理的照片图像等等进行了水墨渲染效果的实验。

对于点单(圆形)纹理来讲,如图3所示,可以看出,其水墨渲染仿真过程可以做到由中心向四周依次减弱色度和纯度,可以较真实地模拟水墨在宣纸上的晕化过程。

图3 对圆型纹理图的水墨渲染

图4 对文字纹理图的水墨渲染

对于文字纹理来说,如图4所示,通过类似于单点的扩散晕化过程,同样可以实现仿真水墨书法的效果。由于水墨的扩散和渗透过程除了与墨的浓度有关以外,还与纸的吸水力和致密度有关。因此,对于不同的宣纸纹理,其渲染的效果也会不同,比如,如图5所示,该图像纹理采用的宣纸纹理与以上两图不同,其渲染效果也略有不同。

图5 对图纹理图的水墨渲染

以上实验结果表明,无论是单点(圆形)纹理,文字纹理还是图像纹理,对于它们的水墨渲染效果都可达到比较满意的程度。较真实地反映了中国水墨画的扩散、晕化和渗透的基本特点。该水墨渲染过程可以快速地实时展示,用户可通过点击鼠标,通过交互对待处理纹理的渲染效果进行控制和干预,从而可以达到自认为满意的渲染效果。

4 结论

本文提出了一种基于流体动力学模拟的水墨渲染方法,通过人机交互,计算出待处理纹理中每个像素的所受外力值,以实现对水墨动态模拟的效果,且能依附于所选的不同宣纸纹理之上。此方法简化了对纸纤维的吸水性、用水量的多少、用笔的角度等因素的模拟,取而代之是用流体动力学模拟较快且真实地仿真水墨在宣纸纹理上流动过程。实验结果表明,此方法对于文字和图像的水墨渲染等都的较理想的效果,且其渲染过程可以快速地实时交互显示,用户可以交互控制和干预待处理纹理的渲染效果。此方法为水墨渲染提供了一种新的途径,但仍然存在着一些不足,如对外力施加的方向还没有明确的定量分析,让水墨渲染达到完美效果还有一定差距。目前,主要是凭借经验和观测实时效果来决定外力的方向,这有待于在今后的研究中进一步改进和完善。

[1]石永鑫,孙济洲,张海江,贾文丽.基于粒子系统的中国水墨画仿真算法[J].计算机辅助设计与图形学报,2003,(6):667-672.

[2]孙美君,李丹,孙济洲.基于纹理合成的中国山水画系统仿真[J].系统仿真学报,2004,(10):2317-2320

[3]陈锋,张文俊,张目.一种基于动态扩散机理的水墨仿真模型[J].上海大学学报,2006,(4):136-140.

[4]张海江,王秀锦,孙济洲等.应用分形仿真水墨扩散轮廓[J].计算机辅助设计与图形学学报,2004,(4):555-558.

[5]Nelson S.-H. Chu and C.-L.Tai,MoXi: Real-Time Ink Dispersion in Absorbent Paper [J].ACM Transactions on Graphics(SIGGRAPH 2005 issue), 2005,24(3)

[6]Stam J. Stable Fluids [C]//Proceedings of SIGGRAPH 1999,1999

[7]Harris M J. Real-Time Cloud Simulation and Rendering[D].University of North Carolina Technical Report #TR03-040. 2003.

[8]Dietrich S. Texture Space Bump Mapping [C]// NVIDIA Corporation, November 2000.

[9]Myers K. Next-Gen Special Effects Showcase:BloodShader - Real-Time Adaptive Animation[C]//NVIDIA GDC Presentations, 2004.

猜你喜欢

外力纹理水墨
水墨
基于BM3D的复杂纹理区域图像去噪
带低正则外力项的分数次阻尼波方程的长时间行为
使用纹理叠加添加艺术画特效
TEXTURE ON TEXTURE质地上的纹理
泼尽水墨是生平
消除凹凸纹理有妙招!
当代水墨邀请展
常见运动创伤的简单处理方法(二)
水墨青花