趙凡,張文俊,王少波,張族錦
長(zhǎng)久以來(lái),中國(guó)動(dòng)畫藝術(shù)家在國(guó)際上創(chuàng)立了中國(guó)動(dòng)畫學(xué)派,并且成功創(chuàng)作了水墨畫效果動(dòng)畫。但是憑借手工制作的水墨效果動(dòng)畫成本高,周期長(zhǎng),遠(yuǎn)無(wú)法滿足現(xiàn)代動(dòng)畫的制作和成本要求,在國(guó)際動(dòng)畫市場(chǎng)上也缺少有利的競(jìng)爭(zhēng)優(yōu)勢(shì)。因此,能夠用計(jì)算機(jī)有效的繪制出水墨畫效果,對(duì)于縮短水墨動(dòng)畫制作周期并降低成本,提高在國(guó)際動(dòng)畫市場(chǎng)上的競(jìng)爭(zhēng)力有著重要的意義。但是,從國(guó)際上來(lái)看,就中國(guó)傳統(tǒng)水墨藝術(shù)的數(shù)字化實(shí)現(xiàn)方面,人們所做的研究與開發(fā)還不是很多。
國(guó)內(nèi)從事數(shù)字水墨的計(jì)算機(jī)生成研究,主要是通過基于粒子系統(tǒng)[1]、紋理合成[2]、動(dòng)態(tài)擴(kuò)散機(jī)理[3]和應(yīng)用分形[4]等方法來(lái)實(shí)現(xiàn)對(duì)水墨畫的仿真,這些方面雖然對(duì)數(shù)字水墨的實(shí)現(xiàn)取得較好的效果,但這些方法大多由于方法復(fù)雜和計(jì)算量大而不能達(dá)到實(shí)時(shí)的渲染效果。香港科技大學(xué)的MoXi交互繪畫系統(tǒng)[5],雖然可以實(shí)時(shí)地生成水墨效果,但只能在用戶畫出一筆的過程中實(shí)時(shí)生成一筆的水墨筆畫,而并不適用于水墨動(dòng)畫制作。本文在流體動(dòng)力學(xué)模擬技術(shù)的基礎(chǔ)上,通過交互施加外力,使用高級(jí)著色器語(yǔ)言(HLSL)和圖形處理單元(GPU)來(lái)處理紋理上的頂點(diǎn)和像素,對(duì)紋理進(jìn)行流體動(dòng)態(tài)模擬,從而實(shí)現(xiàn)對(duì)已知紋理的實(shí)時(shí)水墨效果渲染。
流體動(dòng)力學(xué)模擬是模擬多種自然現(xiàn)象的基礎(chǔ),如流淌的河水、飄渺的青煙、升騰的水汽以及灌中混合的油漆等等。所有這些都是運(yùn)動(dòng)的流體,都是人們想要在交互式圖形應(yīng)用中逼真描繪的現(xiàn)象。
在流體動(dòng)力學(xué)中,流體的速度 u(x,t)是最重要的量,其決定了流體本身的流動(dòng)狀態(tài),以及該流體中的物體的運(yùn)動(dòng)。流體的速度即隨時(shí)間又隨空間的變化而變化,通常將它表示
為一個(gè)矢量場(chǎng)。流體的速度矢量場(chǎng)是對(duì)于每一個(gè)位置x=(x,y)而定義的,也存在與時(shí)間t相關(guān)的速度,即可描述成,
流體動(dòng)力學(xué)模擬的狀態(tài)表示在一個(gè)M×N的網(wǎng)格上,箭頭代表速度,如圖1所示。流體動(dòng)態(tài)模擬的關(guān)鍵是正確及時(shí)地決定當(dāng)前的速度場(chǎng),這可以通過解一組方程式實(shí)現(xiàn)。
圖1 流體速度的網(wǎng)格
這組方程式描述的是多種力的相互作用,以及速度隨時(shí)間的變化。一點(diǎn)有了速度場(chǎng),就能用它移動(dòng)物體,改變流體的密度等。假定流體是不可壓縮的和均勻的,既在任何局部區(qū)域的體積不隨時(shí)間而改變,且密度在空間中是常數(shù)。則流體可由它的矢量速度場(chǎng)u(x,t)和標(biāo)量壓力場(chǎng)p(x,t)來(lái)表示,這些場(chǎng)既隨時(shí)間又隨空間而改變,且對(duì)于不可壓縮的流體,其速度和壓力在起始時(shí)間t = 0已知,那么流體狀態(tài)隨時(shí)間的變化可以用Navier-Stockes方程式[6]描述:
其中,ρ是流體密度,v是動(dòng)力黏度,而F=(fx,fy)代表作用于流體的任何外力。
由于圖形處理硬件的并行計(jì)算能力極強(qiáng),因此流體動(dòng)態(tài)模擬在圖形處理單元(GPU)上運(yùn)行起來(lái)要比CPU上快得多。比如,僅在一個(gè)二維的矩形區(qū)域進(jìn)行一個(gè)連續(xù)流動(dòng)的模擬,GPU的并行性使它很適合流體模擬所需的計(jì)算類型,模擬在單元的網(wǎng)格上執(zhí)行,把可編程GPU優(yōu)化為進(jìn)行像素計(jì)算,把單元的網(wǎng)格看作像素。GPU能夠同時(shí)處理多個(gè)頂點(diǎn)和像素,達(dá)到很高的運(yùn)行性能。因?yàn)榫W(wǎng)格是存儲(chǔ)在紋理中的,所以這種速度和并行性正是模擬時(shí)需要的。
上述提及的流體動(dòng)態(tài)模擬表現(xiàn)二維網(wǎng)格上的數(shù)據(jù),在CPU上這個(gè)網(wǎng)格的自然表達(dá)是一個(gè)數(shù)組,而對(duì)應(yīng)到GPU上是紋理。紋理通常有3或4個(gè)彩色通道,所以對(duì)有2到4個(gè)分量的矢量數(shù)據(jù)類型,它們可以提供一個(gè)數(shù)據(jù)結(jié)構(gòu)。一般至少需要兩個(gè)紋理來(lái)表現(xiàn)流體的狀態(tài),一個(gè)用于速度,一個(gè)用于壓力。
隨著可編程像素著色器的出現(xiàn),用一種逼真、精確的方法實(shí)現(xiàn)真實(shí)感渲染成為可能。同時(shí),在渲染過程中對(duì)正確反映事物物理性質(zhì)的要求,也需要進(jìn)一步提高渲染的精度,例如凹凸映射就需要反映物體表面及光照的真實(shí)行為。Kevin Myers借鑒了逐像素光照[8],即基于每個(gè)像素上對(duì)光照方程進(jìn)行估算的這種概念后,提出了一種通過計(jì)算,定義每點(diǎn)的重力物理屬性,來(lái)實(shí)現(xiàn)模擬流體動(dòng)態(tài)經(jīng)過任意物體表面的模型[9]。在此模型中,著色器使用法線貼圖(Normal Map)計(jì)算出逐像素重力值,該值存儲(chǔ)在高度貼圖(Height Map)中,用來(lái)模擬流體。在生成重力體貼圖(Gravity Map)的過程中,假設(shè)已經(jīng)存在法線貼圖,它由各像素的法線組成,存儲(chǔ)在RGB紋理中。對(duì)于每一個(gè)點(diǎn),有關(guān)于方向的描述。由于流體在平面上運(yùn)動(dòng),z分量可以忽略,因此將重力定義為不含z方向的二維向量,即由法線的x和y分量定義經(jīng)過紋理空間的重力。使用法線貼圖計(jì)算出重力需要將重力向量變換到切線空間中,x和y分量描述每一點(diǎn)上的重力。為了確定某一點(diǎn)最終的方向向量,需要求出該點(diǎn)二維重力向量及x與y分量在該點(diǎn)的切線向量之和。所得二維向量將決定在切線空間中流體經(jīng)過表面時(shí)的方向,如圖2所示。
圖2 流體經(jīng)過表面時(shí)某點(diǎn)的最終方向生成
在上述模型中,最終得到的方向向量可看作是式(2)中作用于流體的外力F。而水墨在宣紙內(nèi)部進(jìn)行擴(kuò)散和滲化的過程可近似的看作流體在紙上經(jīng)過的動(dòng)態(tài)過程。因此,應(yīng)用于水墨渲染的過程,類似于上述液體動(dòng)態(tài)流經(jīng)物體表面的過程。不同的是,水墨的流動(dòng)不單單靠重力作用,還包括紙纖維的吸水作用和墨粒子的粘附作用,進(jìn)而產(chǎn)生擴(kuò)散紋理,這些效果的產(chǎn)生,除了與墨的濃度(即顏色的深淺)有關(guān)之外,還與紙纖維的吸水性、用水量的多少、用筆的角度以及紙紋理的情況有關(guān),有時(shí)候甚至完全是隨機(jī)出現(xiàn)的效果[1]。為了達(dá)到這種效果,可將作用于水墨的外力進(jìn)行修改,用比較簡(jiǎn)單的方法來(lái)計(jì)算外力和由它所引起的加速度。即,通過設(shè)定鼠標(biāo)的位置來(lái)確定外力的大小和方向。通過鼠標(biāo)的點(diǎn)擊和拖拽,把外力添加到水墨紋理中,使它在宣紙紋理上“流動(dòng)”,模擬水墨在宣紙上的擴(kuò)散和暈化。具體過程如下:點(diǎn)擊水墨紋理內(nèi)的一點(diǎn),該點(diǎn)的顏色給外力的方向和大小編碼,紅色的通道包含x上的量,而綠色的通道包含y上的量。該點(diǎn)實(shí)際上是一個(gè)二維的高斯“條”(Gaussian “splat”)。使用一個(gè)片元(fragment)程序檢查每個(gè)片元與外力位置的距離。然后把量c添加到顏色中去:
其中,F(xiàn)是根據(jù)方向和鼠標(biāo)拖拽的長(zhǎng)度計(jì)算出來(lái)的力,r是所要求的外力作用半徑,而(x,y)和 ),(ppyx 分別是在窗口坐標(biāo)中的片元位置和外力(點(diǎn)擊)位置。
本實(shí)驗(yàn)是在CUP為2x2666MHz Pentium III Xeon,顯卡為NVIDIA Quadro FX 3700的硬件基礎(chǔ)上進(jìn)行的。通過使用高級(jí)著色器語(yǔ)言(HLSL),PS (Pixel Shader)2.0和Cg語(yǔ)言來(lái)實(shí)現(xiàn)水墨渲染的效果。并且對(duì)于不同類型的紋理,包括單點(diǎn)(圓形)、多點(diǎn)、文字及待處理的照片圖像等等進(jìn)行了水墨渲染效果的實(shí)驗(yàn)。
對(duì)于點(diǎn)單(圓形)紋理來(lái)講,如圖3所示,可以看出,其水墨渲染仿真過程可以做到由中心向四周依次減弱色度和純度,可以較真實(shí)地模擬水墨在宣紙上的暈化過程。
圖3 對(duì)圓型紋理圖的水墨渲染
圖4 對(duì)文字紋理圖的水墨渲染
對(duì)于文字紋理來(lái)說(shuō),如圖4所示,通過類似于單點(diǎn)的擴(kuò)散暈化過程,同樣可以實(shí)現(xiàn)仿真水墨書法的效果。由于水墨的擴(kuò)散和滲透過程除了與墨的濃度有關(guān)以外,還與紙的吸水力和致密度有關(guān)。因此,對(duì)于不同的宣紙紋理,其渲染的效果也會(huì)不同,比如,如圖5所示,該圖像紋理采用的宣紙紋理與以上兩圖不同,其渲染效果也略有不同。
圖5 對(duì)圖紋理圖的水墨渲染
以上實(shí)驗(yàn)結(jié)果表明,無(wú)論是單點(diǎn)(圓形)紋理,文字紋理還是圖像紋理,對(duì)于它們的水墨渲染效果都可達(dá)到比較滿意的程度。較真實(shí)地反映了中國(guó)水墨畫的擴(kuò)散、暈化和滲透的基本特點(diǎn)。該水墨渲染過程可以快速地實(shí)時(shí)展示,用戶可通過點(diǎn)擊鼠標(biāo),通過交互對(duì)待處理紋理的渲染效果進(jìn)行控制和干預(yù),從而可以達(dá)到自認(rèn)為滿意的渲染效果。
本文提出了一種基于流體動(dòng)力學(xué)模擬的水墨渲染方法,通過人機(jī)交互,計(jì)算出待處理紋理中每個(gè)像素的所受外力值,以實(shí)現(xiàn)對(duì)水墨動(dòng)態(tài)模擬的效果,且能依附于所選的不同宣紙紋理之上。此方法簡(jiǎn)化了對(duì)紙纖維的吸水性、用水量的多少、用筆的角度等因素的模擬,取而代之是用流體動(dòng)力學(xué)模擬較快且真實(shí)地仿真水墨在宣紙紋理上流動(dòng)過程。實(shí)驗(yàn)結(jié)果表明,此方法對(duì)于文字和圖像的水墨渲染等都的較理想的效果,且其渲染過程可以快速地實(shí)時(shí)交互顯示,用戶可以交互控制和干預(yù)待處理紋理的渲染效果。此方法為水墨渲染提供了一種新的途徑,但仍然存在著一些不足,如對(duì)外力施加的方向還沒有明確的定量分析,讓水墨渲染達(dá)到完美效果還有一定差距。目前,主要是憑借經(jīng)驗(yàn)和觀測(cè)實(shí)時(shí)效果來(lái)決定外力的方向,這有待于在今后的研究中進(jìn)一步改進(jìn)和完善。
[1]石永鑫,孫濟(jì)洲,張海江,賈文麗.基于粒子系統(tǒng)的中國(guó)水墨畫仿真算法[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)報(bào),2003,(6):667-672.
[2]孫美君,李丹,孫濟(jì)洲.基于紋理合成的中國(guó)山水畫系統(tǒng)仿真[J].系統(tǒng)仿真學(xué)報(bào),2004,(10):2317-2320
[3]陳鋒,張文俊,張目.一種基于動(dòng)態(tài)擴(kuò)散機(jī)理的水墨仿真模型[J].上海大學(xué)學(xué)報(bào),2006,(4):136-140.
[4]張海江,王秀錦,孫濟(jì)洲等.應(yīng)用分形仿真水墨擴(kuò)散輪廓[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),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.