亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于傅里葉級數的次序無關透明渲染算法

        2021-07-09 17:19:36宋曉峰
        現代計算機 2021年14期

        宋曉峰

        (四川大學計算機學院,成都 610065)

        0 引言

        半透明物體的實時渲染是計算機圖形學中的重要研究課題之一,在游戲、虛擬現實、仿真模擬等領域有著重要應用。傳統(tǒng)的半透明物體渲染算法需要根據到攝像機的距離對半透明物體進行排序,然后由遠到近依次進行繪制,然而當多個半透明物體之間遮擋關系比較復雜,或者單個半透明物體自身包含多層半透明面片時,這種傳統(tǒng)方法不能得到正確的結果。為了解決這一問題,通常需要使用次序無關透明(Order Inde?pendent Transparency,OIT)渲染算法。

        精確的OIT 算法一般使用深度剝離[1]或鏈表[2]來做像素級別的片元排序,雖然能夠得到精確的結果,但是效率低下且顯存消耗高。近年來,為了提升效率或節(jié)省顯存,一些啟發(fā)式OIT 算法相繼出現?;贙-Buf?fer 的OIT 算法[3-4]能夠有效控制顯存的消耗,但是對于存在大量半透明物體的復雜場景表現較差?;诩訖嗷旌系腛IT 算法[5-6]效率較高且易于實現,但是結果存在很大誤差?;诰氐腛IT 算法[7-8]使用矩信息來重建透射率函數,能夠取得較好的近似結果,但是由于存儲矩信息需要使用較高的精度,因而對顯存的消耗仍然較高。

        本文提出了基于傅里葉級數的OIT 算法,此算法借鑒了Fourier Opacity Mapping(FOM)一文[9]中的算法思想,即使用傅里葉級數來近似半透明物體對光的吸收率函數。同時,本文提出使用Lanczos-Local-Type σ-Averaging(簡稱σ-Averaging)方法[10]對FOM 的傅里葉近似方法進行改進,很大程度地降低了Gibbs 效應的影響。實驗表明本文提出的OIT 算法可以得到較為準確的結果,同時具有較高的效率和較低的顯存消耗,具有較大的實際應用價值。

        1 算法實現

        1.1 使用傅里葉級數近似透射率函數

        給定同一像素坐標下的n個片元,片元顏色依次為l0,l1,…,ln-1,片元透明度為α0,α1,…,αn-1,片元深度為z0,z1,…,zn-1,則對所有片元進行顏色混合之后的結果L可以使用公式(1)計算得出。

        其中,T(z)是透射率函數,表示從深度z處發(fā)出的光線,在穿過半透明物體之后,最終到達攝像機的光線的占比,其計算方法如公式(2)所示。從公式(2)可以看出,為了計算透射率,需要知道一個片元被其他片元的遮擋情況,這通常需要存儲片元的深度值,并對片元按照深度值排序之后依次進行混合計算,因而直接使用公式(2)計算透射率的算法往往具有高昂的顯存消耗與計算代價。

        為了能夠更加高效地計算透射率,本文算法使用了傅里葉級數的前m(m∈N*)項和來近似透射率函數T(z),計算方法如公式(3)所示。

        其中Ak與Bk為傅里葉級數的系數,其計算方法滿足公式(4)與公式(5)。公式(3-5)的具體證明過程可以參考Fourier Opacity Mapping 一文[9]。

        相較于片元排序方法,使用傅里葉級數近似透射率函數的好處包括兩點:①透射率的計算不依賴于半透明片元的執(zhí)行順序,不再需要對片元進行排序,因而效率更高;②由于不需要對片元排序,因而不需要存儲片元深度及其材質信息,作為替代,存儲的是具有更低顯存消耗的傅里葉級數系數,因而節(jié)省了顯存消耗并降低了讀寫顯存的時間代價。

        1.2 結合σ-Averaging方法減弱Gibbs效應

        使用傅里葉級數來近似透射率函數會產生Gibbs效應,該效應主要發(fā)生在透射率函數的階躍點附近,表現出明顯的過沖與下沖(如圖1 中綠色曲線所示),從而導致計算得到的透射率存在較大的誤差且波動較大。為了減小誤差,本文采用了σ-Averaging 方法,該方法為傅里葉級數添加了一個σk系數,能夠明顯地減弱Gibbs 效應的影響(如圖1 中紅色曲線所示),σk系數滿足公式(6)。

        圖1 Gibbs效應以及σ-Averaging效果示意圖

        在結合σ-Averaging 方法之后,本文使用公式(7)來計算透射率。

        其中指數p∈R*用于調整σk的影響強度,p值越大,Gibbs 效應越弱。然而p值過大時,會導致階躍點處曲線過于平緩,反而會增大誤差。本文算法采用p=1.0,可以大大減弱Gibbs 效應的影響,同時階躍點附近的誤差也可以接受。

        1.3 渲染算法

        本文渲染算法的實現分為以下四個步驟:

        步驟1:渲染場景中的不透明物體,將渲染結果保存到紋理Tex0 中。此步驟中不透明物體的渲染可以使用任意渲染算法來實現。

        步驟2:渲染場景中的半透明物體,結合公式(4)與公式(5),為每個像素計算傅里葉級數的系數,并將系數值保存到紋理Tex1 中。由于每個像素都單獨對應一個透射率函數,因而每個像素都需要做一次傅里葉級數展開近似,即像素間的傅里葉級數系數相互獨立,需要分開保存。

        對于單個像素而言,需要遍歷該像素下的所有片元,計算每個片元對傅里葉級數系數的貢獻量,即:

        然后將每個片元的貢獻使用Blend One One 的方式累加到紋理Tex1 中,便可得到該像素下的最終系數,即公式(4)與公式(5)的計算結果。

        注意在步驟2 執(zhí)行渲染前需要關閉深度寫入與背向面剔除,這樣才能保證所有半透明片元不被丟棄。此外,由于此步驟執(zhí)行渲染只是為了計算傅里葉級數的系數,因而無需進行光照計算等任何無關操作,從而保證算法的高效性。

        步驟3:再次渲染場景中的半透明物體,對于每個像素的每個片元,讀取步驟2 中生成的紋理Tex1。

        使用公式(3)計算透射率,然后使用公式(1)計算該片元對像素顏色的貢獻,即:

        然后將每個片元的貢獻使用Blend One One 的方式累加到紋理Tex2 中,便可得到該像素下的最終顏色,即公式(1)的計算結果。注意此步驟與步驟2 類似,在執(zhí)行渲染前同樣需要關閉深度寫入與背向面剔除。

        步驟4:讀取紋理Tex0 與Tex2,將兩張紋理顏色進行合并,即可得到最終的渲染結果。紋理顏色的合并計算方法如公式(11)所示。

        其中Ctrans是半透明物體的顏色,存儲在Tex2 紋理的RGB 通道中;Copaque是不透明物體的顏色,存儲在Tex0 紋理的RGB 通道中;K是為了歸一化而引入的項,存儲在Tex2 紋理的Alpha 通道中,K的計算滿足公式(12)。

        Ttotal是總透射率,滿足公式(13)。

        2 實驗結果

        本文實驗所使用的硬件為NVIDIA GeForce GTX 1060 3GB GPU 以及Intel Core i5-7400 CPU。實驗結果的渲染分辨率均為1600×900。

        2.1 σ-Averaging方法的有效性驗證

        圖2 展示了原函數較為復雜的情況下σ-Averaging方法的效果,圖中綠色曲線是使用公式(3)做傅里葉級數近似的結果,紅色曲線是結合σ-Averaging 方法之后,即使用公式(7)做傅里葉級數近似的結果??梢钥闯觯?Averaging 方法明顯地削弱了Gibbs 效應,與原函數更加接近。

        圖2 σ-Averaging方法效果示意圖(m=16, p=1.0)

        表1 給出了使用與不使用σ-Averaging 方法這兩種情況下的傅里葉級數近似結果的誤差,誤差采用RMSE(Root Mean Squared Error,均方根誤差)作為衡量標準。從表1 可以看出使用σ-Averaging 方法的誤差明顯更低,且當m取值較小時,使用σ-Averaging 方法的優(yōu)勢更為明顯。注意由于OIT 算法只需要使用階躍點處的透射率,因而此實驗中計算RMSE 時只考慮了階躍點。

        表1 使用σ-Averaging 與不使用σ-Averaging 兩種情況下的傅里葉級數近似結果的誤差對比

        2.2 不同算法的渲染結果對比

        此實驗對比了WBOIT 算法[5]、MBOIT 算法[7]以及本文算法的渲染結果,實驗中使用基于鏈表的OIT 算法[2]作為參考標準,并使用RMSE 用于衡量渲染結果的誤差。本文在WBOIT 對比算法的實現中使用了Mc?guire 等人于2017 年提出的新的加權混合公式[6],在MBOIT 對比算法的實現中使用了四階矩。本文算法的實現中使用了傅里葉級數的前四項,即m=4。

        從圖3 可以看出,WBOIT 算法的渲染結果存在明顯的錯誤,誤差較大。MBOIT 算法與本文算法的誤差較小,渲染結果與Ground-Truth 算法之間沒有明顯的差別。雖然MBOIT 算法的誤差小于本文算法,但是其顯存消耗更大且效率更低(見表2~5)。圖4 對比了渲染復雜模型時不同算法的渲染效果與RMSE,可見WBOIT 算法的誤差仍然最大,MBOIT 算法與本文算法的誤差相近。(算法性質決定了MBOIT 算法在片元數目n取值較小時具有更小的誤差,n取值較大時其誤差與本文算法相近)。

        圖3 不同算法的渲染結果對比

        圖4 不同算法的渲染結果對比(復雜模型)

        2.3 不同算法的渲染效率與顯存消耗對比

        表2-表5 給出了不同場景下四種算法渲染一幀消耗的時間以及每個像素需要使用的顯存。實驗使用了如圖5 所示的四組不同場景。從表中可以看出在不同場景下,本文算法的渲染用時與顯存消耗均僅高于WBOIT 算法,相比MBOIT 算法具有明顯優(yōu)勢。

        表2 渲染效率與顯存消耗對比(場景1)

        表3 渲染效率與顯存消耗對比(場景2)

        表4 渲染效率與顯存消耗對比(場景3)

        表5 渲染效率與顯存消耗對比(場景4)

        圖5 實驗所用場景示意圖

        3 結語

        本文給出了一種實時的次序無關透明渲染算法,該算法使用傅里葉級數近似透射率函數,并使用σ-Averaging 方法來減弱Gibbs 效應。實驗表明,本文算法既有較好的效果,又有較低的計算代價與顯存消耗,適用于實時渲染領域,具有很大的實際應用價值。在未來的研究工作中,具有前景的改進方向之一是尋找一組更合適的基函數來取代傅里葉基(例如使用小波基),可能進一步提高算法的精確度,或者減少存儲消耗。

        亚洲永久无码动态图| 精品一二三四区中文字幕| 日本免费三片在线播放| 媚药丝袜美女高清一二区| 国产熟女内射oooo| 白嫩少妇激情无码| 久久亚洲aⅴ精品网站婷婷| 日韩一二三四区在线观看| 国产又黄又硬又粗| 亚洲精品人成无码中文毛片| 国产成人精品自在线无码| 日韩精品视频在线一二三| 一区二区三区在线视频观看 | 久激情内射婷内射蜜桃人妖 | 中国国语毛片免费观看视频| 亚洲色成人网一二三区| 中文字幕色婷婷在线视频| 免费a级毛片在线播放| 怡红院a∨人人爰人人爽| 97福利视频| 偷窥偷拍一区二区三区| 精品人妻一区二区三区四区在线| 黑人玩弄人妻中文在线| 国产成人综合日韩精品无| 亚洲中文久久久久无码| 久久精品国产亚洲av沈先生 | 国产精品日韩高清在线蜜芽| 亚洲中文字幕有综合久久| 免费在线观看播放黄片视频| 4399理论片午午伦夜理片| 美国黄色片一区二区三区| 伊人久久亚洲综合av影院| 人妻 丝袜美腿 中文字幕| 亚洲av片不卡无码久久| 亚洲AV手机专区久久精品| 国产精品大片一区二区三区四区| 97在线观看播放| 欧美亚洲国产日韩一区二区三区| 极品新娘高清在线观看| 97超碰国产成人在线| 人妻丰满熟妇av无码区不卡|