本發(fā)明涉及一種圖像渲染方法,尤其是涉及一種基于曲率流的屏幕空間流體渲染方法。
背景技術(shù):
對于交互式的應(yīng)用程序,比如游戲,基于粒子的流體模擬方法如平滑粒子流體力學(xué)(Smoothed Particle Hydrodynamics,SPH)通常偏愛歐拉流體表示形式。這是由于流體能夠在不需要定義流體網(wǎng)格的場景下隨意流動,通常這種場景下內(nèi)存和計算的消耗是非常昂貴的。SPH模擬是一種模擬流體的強大的工具,但是需要先進的技術(shù)來實現(xiàn)結(jié)果的現(xiàn)實渲染。
隨著粒子能夠像其他嚴(yán)格的對象一樣碰撞場景幾何圖形,粒子方法也更加方便地集成到現(xiàn)有的物理系統(tǒng)中,而不需要將場景幾何圖形體素成網(wǎng)格。它的缺點是提取一個表面來進行渲染變得更加困難。在已有的方法中,大部分對于渲染粒子流體的方法都不適用于游戲中的實時使用。通常,流體的表面是在世界空間中創(chuàng)建的,直接作為一個網(wǎng)絡(luò),或者作為隱式的表面,然后使用移動立方體或者一個相似的算法來多邊形化。在這之后,松弛和優(yōu)化操作可以被應(yīng)用在整個網(wǎng)絡(luò)來增加表面的平滑度,平滑度是計算和內(nèi)存密集型的。
隱式表面多邊形化方法也遭受在幀到幀連貫性中網(wǎng)格離散化工件的問題,因為網(wǎng)格是靜態(tài)的,并且不需要隨著流體移動。這個現(xiàn)象在實時渲染長使用低分辨率的網(wǎng)格時尤其明顯。Zhang[1]提出過一個基于點的渲染方法,光線圓球相交是完全在GPU上計算的,使用一個兩階段的渲染方法。這個方法移除了網(wǎng)格離散化的要求。
如果流體是移動的,那么渲染每一幀只需要僅僅一個或者最多幾個觀點,一個更多的內(nèi)存和計算有效的方法僅僅需要構(gòu)造在可視空間中對相機可見的粒子所代表的表面.
技術(shù)實現(xiàn)要素:
本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種速度快、效果好的基于曲率流的屏幕空間流體渲染方法。
本發(fā)明的目的可以通過以下技術(shù)方案來實現(xiàn):
一種基于曲率流的屏幕空間流體渲染方法,包括以下步驟:
S1,獲取屏幕空間中三維物體的光滑粒子流體模型,模型包括粒子的位置和速度,生成流體表面的粒子的深度圖,確定三維物體的最近表面,三維物體的最近表面確定方法具體為:若物體與攝像機光軸方向的同一條直線有兩個或多個交點,則取離攝像機最近的交點,作為最近表面上的點;
S2,通過曲率流濾波,平滑最近表面;
S3,計算每個點與最近表面之間的流體數(shù)量,作為該點的厚度;
S4,為最近表面添加噪聲;
S5,根據(jù)點的厚度和粒子的速度,減弱點的顏色和透明度,得到流體渲染圖。
所述的步驟S1中,將粒子渲染成球體,計算每個球體上離攝像機最近的點。
所述的步驟S2中,采用平均曲率來平滑最近表面。
所述的步驟S4中,噪聲為柏林噪聲。
所述的步驟S5中,點的厚度越大,可見程度越低,點的顏色和透明度減弱越多。
與現(xiàn)有技術(shù)相比,本發(fā)明具有速度快的優(yōu)點,可直接在圖形硬件上完成所有處理;通過平滑表面,避免流體產(chǎn)生斑點或膠狀物效果。
附圖說明
圖1為本發(fā)明流體表面和攝像機角度之間的關(guān)系圖;
圖2為將粒子看成球形的示意圖;
圖3(a)、(b)為兩個視角的粒子球形示意圖;
圖4(a)、(b)分別為使用高斯雙邊模糊和屏幕空間曲率流對NVIDIA進行平滑的效果圖;
圖5(a)、(b)為對一個管道進行添加噪音前后的對比效果圖;
圖6為使用本實施例方法渲染沙子流體效果圖;
圖7為本發(fā)明方法的流程圖。
具體實施方式
下面結(jié)合附圖和具體實施例對本發(fā)明進行詳細(xì)說明。本實施例以本發(fā)明技術(shù)方案為前提進行實施,給出了詳細(xì)的實施方式和具體的操作過程,但本發(fā)明的保護范圍不限于下述的實施例。
實施例
如圖7所示,一種基于曲率流的屏幕空間流體渲染方法,包括以下步驟:
S1,獲取屏幕空間中三維物體的光滑粒子流體模型,模型包括粒子的位置和速度,生成流體表面的粒子的深度圖,確定三維物體的最近表面,三維物體的最近表面確定方法具體為:若物體與攝像機光軸方向的同一條直線有兩個或多個交點,則取離攝像機最近的交點,作為最近表面上的點;
S2,通過曲率流濾波,平滑最近表面;
S3,計算每個點與最近表面之間的流體數(shù)量,作為該點的厚度;
S4,為最近表面添加噪聲;
S5,根據(jù)點的厚度和粒子的速度,減弱點的顏色和透明度,得到流體渲染圖。
以下是本方法具體說明。
第一步、生成流體表面的粒子的深度圖。
假設(shè)一種光滑粒子流體動力學(xué)粒子模擬存在。輸入數(shù)據(jù)包含n個無順序的粒子pi(i=1,…,n)的位置。隨意地,粒子有相關(guān)的密度和來自模擬的速度。在被渲染之前,攝像機交付的流體最前面的表面已經(jīng)設(shè)定好。
如圖1所示,屏幕空間流體渲染僅僅生成距離攝像機最近的表面。通過將粒子渲染成球體,保留使用硬件深度測試在每個像素點的最近的值,如圖2、圖3所示。
為了獲得從觀察者的視角得到的流體的表面,使用在片段著色器中深度替代的點塊紋理將粒子渲染成球體。這樣避免了復(fù)雜幾何的使用。深度值將在下面的平滑步驟中用到。在渲染過程中會傾向于丟棄部分粒子,因為它們并不構(gòu)成表面的任何部分,通過從模擬過程中給密度添加一個閾值,可以很容易地實現(xiàn)。為了使得過度過程更加平順,低密度的粒子可以作為噴霧被單獨渲染。
第二步、平滑方法。
雖然第一步是將粒子渲染為球體,但是粒子看起來像球體并不是想要的結(jié)果,因為這樣會導(dǎo)致一個不真實、像果凍的外表。一個光滑和平整的表面,近似于粒子的位置需要通過平滑屏幕空間中的表面來實現(xiàn)。
現(xiàn)有方法是使用一個高斯模糊或者它的變體比如雙邊高斯濾鏡。然而直接的高斯模糊將會模糊掉輪廓邊緣,導(dǎo)致在使用大核函數(shù)時的相等深度的穩(wěn)定狀態(tài)。雙邊濾鏡可以保護邊緣,但是它是不分離的。使用一個寬度改變的核在圖形硬件上高效地實現(xiàn)一個模糊同樣很困難。
作為一種高斯平滑的備選,可以從另一種不同的方式來看待這個問題:對于一種可以平滑處的粒子間曲率的突然變化,形成一個平滑和連續(xù)的表面??紤]這個的一種方式是最小化曲率。這與自然界中水滴和水漩渦的形成的合理的流體的表面張力是相似的。這個過程叫做曲率流。
曲率流的表面沿著法線方向速度取決于大小和表面的平均曲率的符號。表面只能在垂直于視覺平面的z方向上被移動,然而由于視覺點是連續(xù)的,仍然需要通過移動與曲率成比例的z值來實現(xiàn)表面平滑的理想效果,這樣定義
其中,t是一個平滑的時間步驟,H是平均曲率。到這步開始,將這個方法叫做屏幕空間曲率流。平均曲率被定義為一個表面的單位向量的偏差,
通過轉(zhuǎn)置映射轉(zhuǎn)換,深度緩存中的一個值被映射會視覺空間Vx和Vy中的一個點P,F(xiàn)x和Fy是之后x和y方向的焦距,
法線是通過取P在x和y方向的導(dǎo)數(shù)的差乘來計算的,
其中,忽略依賴于視覺位置Wx和Wy的P的導(dǎo)數(shù)項,因為這樣簡化了許多計算,而且當(dāng)它的貢獻很小的時候差別是可以忽略的。單位向量定義如下:
其中
在平均曲率的公式中被取代了,因此H可以被導(dǎo)出。導(dǎo)數(shù)的z部分的值總是0,因為z是一個關(guān)于x和y的函數(shù),因此在它們都保持為常數(shù)的時候都不會改變。由此得到
其中,
等式(1)的一個簡單歐拉積分被用來修改在每個迭代中z的值。z的偏導(dǎo)是使用有限差計算的。
因為屏幕空間中的表面輪廓可能是不連續(xù)的。為了防止將表面的不同塊混合在一起,在這些邊界和屏幕的邊緣上,將偏導(dǎo)數(shù)強制為0來防止任何的平滑發(fā)生。
迭代的數(shù)量是根據(jù)需要的平滑程度來選擇的。迭代次數(shù)越多,表面越平滑,但是這個將會導(dǎo)致遞增的計算時間的代價。
第三步、計算厚度。
一個物體根據(jù)它前面的流體的多少來決定它的可見程度。因此需要計算在攝像機和每個像素的最近的不透明物體之間的流體的數(shù)量,將這個取名為厚度。當(dāng)渲染時,厚度用來減弱流體的顏色和透明度。
粒子被視為在世界空間中有著固定尺寸的流體的球體。渲染的過程跟深度的過程是一樣的,差別在于片段著色,其輸出粒子的厚度而不是深度。額外的混合被使用因為流體的數(shù)量在屏幕上是在每個位置積累的。深度測試時是可以的,因此只有在屏幕集合前面的粒子才被渲染了,
其中,d是深度核函數(shù),xi和yi是粒子的映射位置,x和y是屏幕坐標(biāo),σi是映射的規(guī)模。
嚴(yán)格來講,僅僅在粒子沒有覆蓋時厚度的測量是正確的,但是這個在SPH中是個合理的假設(shè),因為粒子之間的斥力。
第四步、避免太過人工平滑,而添加噪聲。
盡管本方法幫助隱藏了流體的基于粒子的本質(zhì),但是這個結(jié)果仍然看起來太過人工平滑。表面細(xì)節(jié)和泡沫在真實流體中是一個重要的可視元素。一個直接改善這個缺陷的方法是使用一個噪音紋理來擾亂表面,然后添加小規(guī)模的細(xì)節(jié),就像Johanson實現(xiàn)的這樣。然而,生成世界空間或者視野空間中的固定的噪音會使得噪音表現(xiàn)得好像陷入地方。這個挑戰(zhàn)是通過流體平流輸送來產(chǎn)生噪音,但是僅僅比模擬的基于粒子的流體有更小的規(guī)模和更高的頻率。因此,本方法提出通過將噪音的八音階分配給基于它的索引值的每一個映射的粒子來使用柏林噪音,因此,一個確定的噪音的類型與其他粒子保持在一起。通過使用額外的混合,這將會導(dǎo)致一個柏林噪音,八音階隨著流相對于彼此而移動。
對于每一個粒子,一個點塊紋理使用高斯核被渲染。得到的值與一個在表面下基于深度的一個指數(shù)下降,因此粒子在它們自合并時貢獻更少,
其中,p是這個像素的視覺空間位置,d是來自表面深度紋理的樣本深度,x和y在-1和1之間變化。噪聲紋理噪聲在每個粒子之間是變化的為了防止模式變得明顯。
這個噪聲核然后對于屏幕上的每個粒子進行加和,為了得到能夠在每個像素處得到一個噪聲值將被用于遮陰,
當(dāng)流體是非常暴力的時候,流體應(yīng)該變得更加被擾亂,當(dāng)速度vi發(fā)生巨大變化的時,通過標(biāo)記流體粒子來實現(xiàn),
|vi(t)-vi(t-1)|>τ (12)
其中τ是一個閾值。對于這些粒子,噪聲振幅將會更高。一會兒之后,粒子平靜下來,轉(zhuǎn)化成平常狀態(tài)。
第五步、渲染。
在最后一步中,所有的中間結(jié)果都將通過渲染一個全屏的四元組被合成最后的圖片。流體的光學(xué)性質(zhì)是基于菲涅耳方程,有一個反射和折射的部分和一個馮氏高光,計算輸出顏色
Cout=a(1-F(n·v))+bF(n·v)+ks(n·h)α (13)
其中F是菲涅耳方程,a是折射的流體顏色,b是反射的場景顏色,ks和α是反射高光的常數(shù),n是表面法線,h是攝像機和光纖之間的半角,v是攝像機向量。在渲染流體的時候,深度測試是可以的,通過片段著色器返回的深度是從表面深度復(fù)制過來的。為了漸變流體的表面,視覺空間的法線n使用表面深度d(x,y)的有限差來計算,如等式(4)所示。簡單地使用一個方向的有限差來計算發(fā)現(xiàn)將會導(dǎo)致邊緣的人工化。當(dāng)不連續(xù)性被檢測到,通過比較深度到閾值的差,選擇最小的絕對有限差。除此之外,噪聲紋理N(x,y)是被用來擾亂發(fā)現(xiàn),通過把噪聲紋理的偏導(dǎo)數(shù)加到計算的法線上來添加小的像波的表面細(xì)節(jié)到流體。此外,一個灰度的顏色可以通過噪聲的級數(shù)來添加模擬一個表面泡沫效果。
厚度T(x,y)被用來減弱流體a的折射顏色,
a=lerp(Cfluid,S(x+βnx,y+βny),e-T(x,y)) (14)
流體越厚,它減弱背景色就越多。流體的區(qū)域越過背景場景顯示。當(dāng)漸變流體的時候,對每一個色彩通道使用一個稍微不同的指數(shù)下降,這樣顏色就會隨著厚度以一種有趣的方式變化。對于透明度而言,沒有流體的場景是最先被背景紋理S(x,y)渲染的。被用來取樣背景場景紋理的紋理坐標(biāo)是基于表面的法線n被擾亂來給出流體背后的折射物體的幻覺。β隨著厚度線性遞增,
β=T(x,y)γ (15)
其中,γ是依賴于某一種流體的常數(shù),決定了背景被折射的程度。反射的顏色b被取樣基于發(fā)射方向的環(huán)境的立方體貼圖紋理來決定的,是從表面法線和視線矢量來計算的。
因為使用PDE來實現(xiàn)曲率最小化是比較呆板的,因此使用一種額外的合成方案,穩(wěn)定性問題可以提出導(dǎo)致系統(tǒng)震蕩。針對這個原因,在高分辨率上,花費了大量的迭代在一個小的時間步驟上保持穩(wěn)定性。一個折中可以被使用,犧牲一些性能質(zhì)量,在一個較低的分辨率下同時做流體渲染和處理后的步驟。這個縮放是困難的,因為邊緣的展現(xiàn)。在一個流體的體內(nèi),深度是線性插入的,但是邊緣是作為特殊情況來被處理的。這些不應(yīng)該看起來鋒利或者參差不齊,如果看起來模糊或者平滑還更能接受一些。由于這個原因,我們混合了最后的漸變顏色,在一個低分辨率處計算而不是在法線或者深度值處。這樣就有平滑輪廓的效果。
插入有高頻率也正將會由于取樣而丟失的結(jié)果。因為平滑性,一半或者四分之一的分辨率流體可以比全分辨率的看起來要好。
本發(fā)明的方法實現(xiàn)包含使用碎片著色器和中間的渲染目標(biāo)等幾個關(guān)口,依據(jù)上述步驟,對于已有的測試視頻及進行分析,該測試集選取了NVIDIA商標(biāo),管道、走廊等場景中的流體進行了部分模擬。所有試驗均在PC計算機上實現(xiàn),該PC計算機的主要參數(shù)為:中央處理器Intel(R)Core(TM)2Quad CPU Q8400@2.66GHz,內(nèi)存4GB。
一些對比模擬效果如圖4(a)、4(b)、圖5(a)、5(b)所示。