一種屏幕空間中體積霧的算法
【專利摘要】本發明公開了一種屏幕空間中體積霧的算法,包括:利用MRT技術渲染所有場景的物體,把場景的深度信息渲染到一張紋理上;基于渲染得到的場景信息的紋理,分別渲染體積霧模型的背面和正面,得到體積霧的正、背面深度并保存到兩張渲染目標中同時結合場景的深度值計算得到可見像素的混合因子;基于計算得到的可見像素的混合因子,把場景顏色和霧的顏色以混合因子進行混合,然后投射到屏幕空間最終顏色。本發明所述屏幕空間中體積霧的算法,可以克服現有技術中模擬效果差、適用場景少等缺陷,以實現模擬效果好、適用場景多的優點。
【專利說明】一種屏幕空間中體積霧的算法
【技術領域】
[0001] 本發明涉及計算機圖形學【技術領域】,具體地,涉及一種屏幕空間中體積霧的算法。
【背景技術】
[0002] 自然現象有很多,像云,霧等更能給人帶來如臨仙境的感受,在虛擬的3D場景中, 游戲中運用大量的霧化來模擬現實中的一種大氣現象,用來營造一種氛圍來增強場景的真 實性和距離感,霧中包含成千上萬的小粒子,不僅吸收來自場景的光線,他們還要反射一部 分的光線到場景中,粒子之間還存在反射、散射、吸收等問題,不是用一個簡單的模型就能 表示出來的,在游戲中,可以嘗試關閉、打開霧效,打開霧效以后,場景顯得更加逼真,而游 戲反而更加流暢,是因為開啟霧效后其實對霧模型后的物體進行優化,從而能提高渲染速 率。
[0003] 在游戲中目前是在游戲中目前是利用場景的深度(即場景到攝像機的距離)來計 算霧化的系數,這種方法可以快速生成霧的效果,復雜度比較低,整個霧是充滿場景的,無 法體現真實霧效果。
[0004] 在實現本發明的過程中,發明人發現現有技術中至少存在模擬效果差和適用場景 少等缺陷。
【發明內容】
[0005] 本發明的目的在于,針對上述問題,提出一種屏幕空間中體積霧的算法,以實現模 擬效果好和適用場景多的優點。
[0006] 為實現上述目的,本發明采用的技術方案是:一種屏幕空間中體積霧的算法,包 括:
[0007] a、利用MRT技術渲染所有場景的物體,把場景的深度信息渲染到一張紋理上;
[0008] b、基于渲染得到的場景信息的紋理,分別渲染體積霧模型的背面和正面,得到體 積霧的正、背面深度并保存到兩張渲染目標中同時結合場景的深度值計算得到可見像素的 混合因子;
[0009] c、基于計算得到的可見像素的混合因子,把場景顏色和霧的顏色以混合因子進行 混合,然后投射到屏幕空間最終顏色。
[0010] 進一步地,所述步驟a,具體包括:
[0011] 在場景中,各點相對于攝像機的距離可以用深度圖來表示,即深度圖中的每一個 像素值表示場景中某一點與攝像機之間的距離;
[0012] 在未放置霧模型之前,通過渲染場景的所有物體,利用多重渲染目標MRT技術渲 染場景同時把深度信息保存到一張紋理中;MRT是GPU編程中的像素著色器支持的渲染方 式,通過像素著色器能夠返回多個渲染目標。
[0013] 進一步地,所述步驟b,具體包括:
[0014] ⑴為了計算可見像素的混合因子,在放置體積霧模型之后,首先渲染不包含任何 物體的體積霧模型:
[0015] 先渲染體積霧的正面,并把體積霧正面像素的深度保存到渲染目標中;再渲染體 積霧的背面,把體積霧的背面像素的深度保存到另一張渲染目標中,那么體積霧背面像素 深度和前面像素深度的差近似為屏幕空間上該像素點的霧的濃度,對于屏幕上的任意一點 的像素用同樣的方式計算;
[0016] ⑵視點與目標對象的距離簡稱視點距離,即:場景深度,能夠從步驟a得到的紋理 即場景深度圖中獲取,它與體積霧模型正、背深度之間有著階梯關系,且在體積霧的正面深 度值、背面深度值都小于1的條件下,有以下三種情況表示場景中可見像素的混合因子:
【權利要求】
1. 一種屏幕空間中體積霧的算法,其特征在于,包括: a、 利用MRT技術渲染所有場景的物體,把場景的深度信息渲染到一張紋理上; b、 基于渲染得到的場景信息的紋理,分別渲染體積霧模型的背面和正面,得到體積霧 的正、背面深度并保存到兩張渲染目標中同時結合場景的深度值計算得到可見像素的混合 因子; c、 基于計算得到的可見像素的混合因子,把場景顏色和霧的顏色以混合因子進行混 合,然后投射到屏幕空間最終顏色。
2. 根據權利要求1所述的屏幕空間中體積霧的算法,其特征在于,所述步驟a,具體包 括: 在場景中,各點相對于攝像機的距離可以用深度圖來表示,即深度圖中的每一個像素 值表示場景中某一點與攝像機之間的距離; 在未放置霧模型之前,通過渲染場景的所有物體,利用多重渲染目標MRT技術渲染場 景同時把深度信息保存到一張紋理中;MRT是GPU編程中的像素著色器支持的渲染方式,通 過像素著色器能夠返回多個渲染目標。
3. 根據權利要求1或2所述的屏幕空間中體積霧的算法,其特征在于,所述步驟b,具 體包括: ⑴為了計算可見像素的混合因子,在放置體積霧模型之后,首先渲染不包含任何物體 的體積霧模型: 先渲染體積霧的正面,并把體積霧正面像素的深度保存到渲染目標中;再渲染體積霧 的背面,把體積霧的背面像素的深度保存到另一張渲染目標中,那么體積霧背面像素深度 和前面像素深度的差近似為屏幕空間上該像素點的霧的濃度,對于屏幕上的任意一點的像 素用同樣的方式計算; ⑵視點與目標對象的距離簡稱視點距離,即:場景深度,能夠從步驟a得到的紋理即 場景深度圖中獲取,它與體積霧模型正、背深度之間有著階梯關系,且在體積霧的正面深度 值、背面深度值都小于1的條件下,有以下三種情況表示場景中可見像素的混合因子:
其中,Dbadt為體積霧背面像素深度值,Dfmt為體積霧正面像素深度值,Dsmre場景像素深 度值,Dft^badt為體積霧背面深度,Df()g_fMnt為體積霧正面深度,D為視點距離。
4. 根據權利要求3所述的屏幕空間中體積霧的算法,其特征在于,在步驟b中,視點距 離和霧模型的正背面的深度關系包括: 當視點距離小于體積霧的正面深度時,混合系數為〇,結果為物體本身的渲染結果; 當視點距離大于霧的背面深度時,混合系數為1 ;結果使用霧的顏色值; 當視點距離不小于霧的正面深度且小于霧的背面深度時,混合系數范圍(〇, 1)。
5. 根據權利要求3所述的屏幕空間中體積霧的算法,其特征在于,所述體積霧模型具 體是閉合的凸面體,是因為當光線進出凸面體的次數不會大于兩次。
6.根據權利要求2-5中任一項所述的屏幕空間中體積霧的算法,其特征在于,所述步 驟c,具體包括: ⑴基于計算得到的可見像素的混合因子,將場景顏色和霧的顏色進行混合,那么在場 景編輯器中,霧的顏色是一個可調參數,是已知量,同時設置調節霧的濃度系數,以控制霧 的厚薄,將上步得到λ和該濃度系數相乘得到最后的混合系數,這個系數就是輸入屏幕之 前在幀緩沖中霧的可見像素的混合系數Π ,能夠用以下公式表示: η = λ *d (2); 其中,η表示最后的混合系數,d為編輯器中霧的濃度系數; ⑵然后利用clamp函數把最后的混合因子約束在[0, 1]之間,實現場景中的物體逐漸 融入霧中的漸變效果; 基于上述最后的混合系數,把場景顏色和霧顏色進行混合,得到輸入屏幕上最終的場 景顏色,其混合公式為:
其中,Cfinal為場景的最終顏色值,Cfog為霧的顏色值,Cs為場景顏色。
【文檔編號】G06T15/10GK104392478SQ201410607219
【公開日】2015年3月4日 申請日期:2014年10月31日 優先權日:2014年10月31日
【發明者】張翼 申請人:無錫梵天信息技術股份有限公司