国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于曲率流的屏幕空間流體渲染

2018-04-24 07:58楊欣
現(xiàn)代計算機 2018年8期
關(guān)鍵詞:立方體視點曲率

楊欣

(四川大學(xué)計算機學(xué)院,成都 610025)

0 引言

在虛擬現(xiàn)實技術(shù)日益發(fā)展的過程中,流體渲染已逐漸成為一個研究熱點。目前,基于網(wǎng)格和基于粒子的流體模擬是計算機圖形學(xué)的兩大分類,而流體作為粒子是更方便地去整合它所處的物理系統(tǒng)的,如每個粒子都有自己的位置、壓力、密度、速度等屬性,正因為有這些屬性使得流體更加真實;;也正是因為如此,平滑粒子流體力學(xué)(Smoothed Particle Hydrodynamics,SPH)方法使得我們更難去提取或定義流體的表面,針對基于粒子模擬的流體的渲染方法是很少的,并且大部分都并非實時。

在采用平滑粒子流體力學(xué)方法已經(jīng)模擬出流體的前提下,本文的輸入數(shù)據(jù)為粒子pi的位置xi,甚至也可以包括速度vi和密度ρi,分為四個步驟完成渲染:第一個繪制遍根據(jù)位置,表面深度,厚度得到深度圖;第一個繪制遍生成厚度圖;第三個繪制遍采用曲率流進行對表面深度平滑處理;第四個繪制遍渲染場景天空盒背景;最后一個整合繪制遍進行光照處理。

1 表面

通常來說,流體的表面是定義在世界空間下,要么是作為網(wǎng)格直接定義[1],要么是用Marching Cubes多邊形化之后定義的隱式表面[2]。但是實際上每一幀流體的移動和渲染都取決于視點,故在視點坐標系下去定義表面是更利于有效計算的[3],故本文的一個核心在于是在視點空間進行渲染處理,如圖1。

圖1 表面

1.1 點精靈

點精靈是使用片元著色器渲染的OpenGL點,運行的時候考慮點內(nèi)的片元坐標,其坐標是兩維向量gl_PointCoord,可以任意使用這個變量,特別之處在于一個頂點也可以貼紋理。

點精靈的局限在于一個頂點縮放都必須是矩形,并且其最大最小值是有范圍的,故如果要使點精靈表現(xiàn)為球體,通過公式(1)和(2)計算得到的N的長度如果大于1,則discard來將立方體變?yōu)榍蝮w:

1.2 表面深度

每一幀的攝像機位置視點決定了流體的表面,將每一個粒子渲染為球體,通過硬件深度測試來獲取每個像素后面離近平面最近的深度值作為表面值。為了能夠獲取視點下流體的表面,我們采用點精靈技術(shù),在片元著色器中將深度寫入到離線緩存。我們僅僅需要存儲深度即可,而不需要存儲顏色,而深度信息則是后續(xù)的平滑處理以及法線計算所需要用到的輸入數(shù)據(jù)。渲染的深度圖如圖2、圖3、圖4。

圖2 4000粒子深度圖

圖3 8000粒子深度圖

圖4 16000粒子深度圖

2 曲率流平滑處理

對流體表面的平滑處理最常見的方法是高斯模糊及其變體形式,如雙向高斯濾波[4]。高斯模糊的平滑方式會使得流體的邊緣出現(xiàn)影子,輪廓邊緣顯得更暗;雙向高斯濾波處理對邊界的處理會好很多,但是不可分割的,因此代價消耗比較昂貴。

本文采用曲率流(curvature flow)[5]實現(xiàn)了在屏幕空間平滑流體的表面。該方法的出發(fā)點在于當流體流動的時候,主要處理粒子間的曲率來形成平滑且連續(xù)的表面。曲率流沿著它的法線方向演化成一個表面,其演化速度取決于表面的平均曲率大小和正負。雖然我們只操作垂直于視點平面的z軸方向,但我們可以通過對于曲率的比例,改變z值來達到我們想要的平滑效果。因此,我們?nèi)缦露x:

其中,t是平滑迭代次數(shù),H是平均曲率;H平均曲率定義為表面的單位法向量的散度。

其中,通過投影矩陣的逆矩陣可以將一個粒子映射到視點空間下的P;Vx,Vy是視口參數(shù);Fx,F(xiàn)y分別是x和y方向上的焦距。

其中,

法線是由P在x和y方向上的導(dǎo)數(shù)的叉乘所得到。為了簡化公式(6),我們忽略P依賴于視點位置Wx,Wy的因素式,實際上此因素式的作用微不足道,故我們可以得到單位向量公式如下:

由于z是x,y表示的函數(shù),散度的z分量總是零,再結(jié)合公式(4),推出H的公式:

其中,

為了防止流體邊緣表面的不連續(xù)混合,在深度會發(fā)生驟變的兩像素邊界以及屏幕的邊界處,我們強制使得空間散度為零。

每個迭代,公式(3)的簡單歐拉積分都用來修改了z值,z值的空間散度用有限差分計算而得。迭代的次數(shù)依賴于想要的平滑效果所設(shè)定,迭代次數(shù)越多,效果更平滑,但同時計算量也會更大[4]。

3 厚度

厚度是用來表示每個像素點處的流體量。為了達到這種半透明漸變效果,針對每一個像素,計算得出攝像機和最近的透明物體的數(shù)量。在繪制的時候和第一個繪制遍一致,但不同的是需要開啟混合,存儲厚度到幀緩存中,而不是之前的深度。開啟混合的作用則是去累加屏幕中每個位置的流體量。開啟深度測試,保證只渲染在場景中最前方的流體。此厚度的有效性是在粒子沒有重疊的情況下成立,而正好平滑粒子流體力學(xué)(SPH)模擬方法能保證這一點。

4 天空盒背景

實現(xiàn)天空盒背景的主要技術(shù)是使用立方體映射紋理技術(shù),而使用天空盒背景的目的在于體現(xiàn)流體的反射效果。

首先,立方體映射紋理是一種特殊類型的紋理,用于環(huán)境映射,使用6個正方形的并且大小相同的子紋理作為立方體映射的6個面,如圖5。通過將一個紋理綁定到gl_TEXTURE_CUBE_MAP紋理目標,并在gl_TEXTURE_CUBE_MAP目標上調(diào)用glTexStorage2D()可以為立方體映射紋理分配存儲空間。分配存儲空間后,立方體映射用6個特殊目標的集合表示,分別是GL_TEXTURE_CUBE_MAP_POSITIVE_X、GL_TEXTURE_CUBE_MAP_NEGATIVCE_X、GL_TEXTURE_CUBE_MAP_POSITIVE_Y、GL_TEXTURE_CUBE_MAP_NEGATIVE_Y、GL_TEXTURE_CUBE_MAP_POSITIVE_Z,GL_TEXTURE_CUBE_MAP_NEGATIVE_Z。

圖5 Cubemap六張紋理圖

在立方體映射中采樣的時候,使用的紋理坐標是三維且看作來自原點的方向,方向指向用來讀取紋理的立方體映射表面的位置。立方體映射對于表示周圍環(huán)境、光和反射效果是很完美的。在第四個繪制遍的時候繪制出的天空盒背景,在最后一個繪制遍整合的時候,在片元著色器中可以通過內(nèi)置函數(shù)reflect(Inci?dentLight,Normal)得到的結(jié)果去采取立方體映射的紋素來達到反射的效果。

5 渲染

在最后一個繪制遍,將之前繪制遍渲染的幀緩存(深度圖、厚度圖、法線圖等)做最后的整合處理,來得到最終的效果。本繪制遍主要做光照處理,其中包括馮氏光照和菲涅爾反射。

5.1 馮氏光照模型

馮氏光照模型主要由環(huán)境(Ambient)光照、漫反射(Diffuse)光照、鏡面(Specular)光照構(gòu)成。

環(huán)境光照使物體永遠不會是完全黑暗的,在現(xiàn)實生活中環(huán)境光只是平行光找到其他物體上;漫反射光照和觀察者的角度無關(guān),但其是馮氏光照模型最顯著的組成部分,決定了物體的主要顏色;鏡面反射光照是模擬有光澤物體上面出現(xiàn)的亮點,使其更傾向于光的顏色,此光照與視角和材質(zhì)光澤度(Shininess)有關(guān)。結(jié)合三種光照元素,構(gòu)成的馮氏光照公式如下:

圖6 4000粒子,30次曲率流迭代

其中,AStrength是環(huán)境光系數(shù);LightColor是光的主顏色;Ambient是環(huán)境光分量;Normal是物體表面的法線;LightDir是光的方向,即物體到光源的向量;Dif?fuse是漫反射分量;SStrength是鏡面強度;ViewDir是物體到眼睛的向量;ReflectDir則是LightDir基于Nor?mal的反射向量;Shininess是高光的反光度。

5.2 菲涅爾反射

菲涅爾反射所反映的現(xiàn)象在于流體表面在棱角尖銳處反射更強烈。換言之,視線垂直于表面時,反射較弱;視線飛垂直表面時,夾角越小,反射越明顯。在渲染中采用了近似處理,公式如下:

其中,θ是入射角;R0是反射率;cosθ是法線和視線向量的點乘。

6 實驗結(jié)果

實驗針對平滑粒子流體力學(xué)模擬出來的流體,僅僅針對其渲染做出實驗。實驗控制兩個變量,一是粒子數(shù)量,一是曲率流平滑處理迭代次數(shù)。針對這兩個變量的取值,分別做了6個實驗,如圖6-11。

圖7 4000粒子,60次曲率流迭代

圖8 8000粒子,30次曲率流迭代

圖9 8000粒子,60次曲率流迭代

圖10 16000粒子,30次曲率流迭代

從上述實驗可以看到,粒子數(shù)量越多,渲染的流體密度更為密集,稀疏度更真實;曲率流迭代次數(shù)越多,流體表面更加光滑,顆粒感越不明顯。

7 結(jié)語

本文針對粒子化流體進行實時渲染,采用了點精靈將粒子球體化,使得可以簡單地捕捉流體的表面;進一步通過可以控制迭代次數(shù)的曲率流平滑處理流體,使其更加真實;最后為流體增加天空盒和菲涅爾反射效果,結(jié)合馮氏光照模型渲染處最終效果。布料模擬方法采用預(yù)計算處理彈簧質(zhì)點模型數(shù)據(jù)。在兼顧真實感的同時,對繪制效率也有較好的提升,能夠被運用于電子游戲,電影動畫產(chǎn)業(yè)中。但同時,本文未對流體加入噪聲、焦散、陰影等更為細節(jié)的研究,需要在接下來的工作中進行研究和完善。

參考文獻:

[1]Stora D,Agliati P,Cani M,et al.Animating Lava Flows[C].Graphics Interface,1999:203-210.

[2]Lorensen W E,Cline H E.Marching Cubes:A High Resolution 3D Surface Construction Algorithm[J].International Conference on Computer Graphics and Interactive Techniques,1987,21(4):163-169.

[3]Muller M,Schirm S,Duthaler S,et al.Screen Space Meshes[C].International Conference on Computer Graphics and Interactive Techniques,2007:9-15.

[4]Aurich V.,Weule J.(1995)Non-Linear Gaussian Filters Performing Edge Preserving Diffusion.In:Sagerer G.,Posch S.,Kummert F.(eds)Mustererkennung 1995.Informatik Aktuell.Springer,Berlin,Heidelberg.

[5]Malladi R.,Sethian J.A.(1997)Level Set Methods for Curvature Flow,Image Enchancement,and Shape Recovery in Medical Images.In:Hege HC.,Polthier K.(eds)Visualization and Mathematics.Springer,Berlin,Heidelberg.

猜你喜歡
立方體視點曲率
一類具有消失χ 曲率的(α,β)-度量?
兒童青少年散瞳前后眼壓及角膜曲率的變化
面向復(fù)雜曲率變化的智能車路徑跟蹤控制
內(nèi)克爾立方體里的瓢蟲
不同曲率牛頓環(huán)條紋干涉級次的選取
圖形前線
立方體星交會對接和空間飛行演示
折紙
環(huán)境視點
讓你每天一元錢,物超所值——《今日視點—2014精萃》序