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

        ?

        基于鏈表的實(shí)時屏幕空間反射技術(shù)

        2018-03-14 10:21:17孟蓉蓉
        現(xiàn)代計算機(jī) 2018年4期

        孟蓉蓉

        (視覺合成圖形圖像技術(shù)國防重點(diǎn)學(xué)科實(shí)驗(yàn)室,四川大學(xué),成都 610065)

        0 引言

        現(xiàn)今,在電影和游戲軟件領(lǐng)域,反射是很重要的一項(xiàng)視覺效果。使用光線追蹤技術(shù)的全局光照算法結(jié)合雙向反射分布函數(shù)(Bidirectional Reflectance Distribu?tion Function,BRDF)可以在物體表面產(chǎn)生真實(shí)的反射效果。但是相關(guān)算法的代價相當(dāng)昂貴,因?yàn)檫@些算法需要在光線追蹤步驟花費(fèi)大量的計算資源。

        游戲產(chǎn)業(yè)中,用來生成實(shí)時反射效果最常見的算法是環(huán)境映射。在理想的反射表面它可以模擬貌似真實(shí)的反射效果,但是它無法生成自反射效果。環(huán)境映射算法另一個顯著的缺點(diǎn)就是在動態(tài)場景里,它會降低渲染效率,因?yàn)閯討B(tài)更新每一幀的環(huán)境貼圖代價較大。

        近來,很多 SSR(Screen-Space Reflections)算法被提出,這些方法基于屏幕空間而非基于世界坐標(biāo)系。它從相機(jī)位置出發(fā),發(fā)射一條入射光線到屏幕上的任意一個像素點(diǎn),根據(jù)法線計算出出射光線,用光線追蹤技術(shù)計算出射光線和場景的交點(diǎn),Hierarchical-Z算法可以用來加速求交的過程。SSR算法的主要問題在于物理緩沖區(qū)中的信息有限,無法處理反射光線與背面場景相交的問題。

        本文提出一個改進(jìn)的SSR算法,這個算法用來解決原有算法的背面丟失問題。解決這個問題的主要方法是擴(kuò)充G-Buffer(Geometry Buffer)信息。原有算法的G-Buffer只有場景表面的信息,導(dǎo)致出射光線和場景背面求交時交點(diǎn)丟失。我們使用鏈表的方式動態(tài)對物理緩沖區(qū)進(jìn)行擴(kuò)充,將背面信息以鏈表的方式進(jìn)行存儲。當(dāng)求交點(diǎn)在場景背面時,我們會查找鏈表,使得背面交點(diǎn)信息被補(bǔ)全。

        1 屏幕空間反射

        屏幕空間反射算法是基于圖像的算法,它從當(dāng)前視點(diǎn)出發(fā)在G-Buffer中做光線跟蹤,求到實(shí)時的反射結(jié)果。屏幕空間反射算法存在一下幾點(diǎn)問題:

        (1)對于幾何體不可見的部分,我們沒有辦法計算它在屏幕中的反射結(jié)果,因?yàn)榉瓷浣Y(jié)果是基于不完整的場景信息。如圖1所示,從視點(diǎn)出發(fā)發(fā)射兩條光線,求反射光線與場景的交點(diǎn),a點(diǎn)和b點(diǎn)的結(jié)果分別是a'和b'點(diǎn),因?yàn)閎'對視點(diǎn)來說不可見,所以b處的反射值為空。

        (2)場景中的信息不完整可能導(dǎo)致反射錯誤。如圖2所示,紅色區(qū)域被遮擋,處于視點(diǎn)不可見的范圍內(nèi),從視點(diǎn)出發(fā)計算a點(diǎn)和b的反射點(diǎn),當(dāng)?shù)竭_(dá)紅色區(qū)域時,SSR算法進(jìn)入一個進(jìn)退兩難的境地,如果結(jié)束光線追蹤,那么a點(diǎn)和b點(diǎn)的反射結(jié)果為空,如果繼續(xù)光線追蹤,那么反射光線與場景進(jìn)行求交的結(jié)果是a''和b',顯然a''不是a的結(jié)果,a的正確結(jié)果應(yīng)該是a'。不管光線追蹤是否繼續(xù),SSR算法都會存在錯誤結(jié)果。

        圖1

        圖2

        2 算法描述

        本文算法將G-Buffer用鏈表的方式進(jìn)行擴(kuò)充。算法步驟如下:

        (1)渲染整個場景,將處于同一像素的片元存放到一個G-Buffer鏈表中,再對每條鏈表中的片元按照深度進(jìn)行排序;

        (2)對像素進(jìn)行遍歷,通過光線追蹤計算出每個像素的反射值,將反射值存放到紋理中;

        (3)將反射值與場景原有的顏色混合。

        2.1 G-Buffer中數(shù)據(jù)填充和鏈表排序

        本文算法將G-Buffer構(gòu)建成單向鏈表的結(jié)構(gòu),鏈表訪問方式為先進(jìn)后出模式。在這個鏈表結(jié)構(gòu)中,我們要在節(jié)點(diǎn)中存放上一個節(jié)點(diǎn)的索引,同時我們需要存放片元的顏色信息。因?yàn)楹罄m(xù)光線追蹤步驟中需要用到深度值,所以我們要存放每個片元的深度值。場景中背面求交的比例占整個場景的比例為10%到20%,所以鏈表第二層被查找的概率也是10%到20%,以此類推,鏈表中第三層被查找的概率微小,所以鏈表最大長度為3已經(jīng)能夠滿足需求。通過上述描述,我們構(gòu)建的鏈表結(jié)構(gòu)如圖3所示。

        圖3

        G-Buffer中的內(nèi)存因?yàn)殒湵斫Y(jié)構(gòu)被增加,為了減少內(nèi)存和帶寬的開銷,我們壓縮鏈表的內(nèi)存,整體內(nèi)存壓縮率為50%左右。每個節(jié)點(diǎn)中,Index為整數(shù),Color為4個浮點(diǎn)數(shù),Depth為一個浮點(diǎn)數(shù),在32位系統(tǒng)中,每個鏈表節(jié)點(diǎn)占24個字節(jié)。HLSL和GLSL本身都支持字節(jié)壓縮,以GLSL為例,GLSL中的packUnorm4x8函數(shù)支持將四個浮點(diǎn)型數(shù)壓縮為一個無符號型整數(shù),也就是說可以將16個字節(jié)的內(nèi)存壓縮為4字節(jié)。壓縮以后,每個鏈表節(jié)點(diǎn)占12個字節(jié)。

        在后續(xù)處理過程中,我們需要找到每個像素中鏈表的起始位置,所以我們需要一個輔助的紋理存放每個鏈表頭結(jié)點(diǎn)的索引值。關(guān)于鏈表存儲方式,我們采用如下方式,我們分配一塊連續(xù)的物理內(nèi)存存放鏈表數(shù)據(jù),每個節(jié)點(diǎn)在物理內(nèi)存中的偏移量為鏈表的節(jié)點(diǎn)索引。為了保證節(jié)點(diǎn)索引值的唯一性,我們使用GLSL中的Atomic Counter,這個緩存對象存儲一個unsigned int的變量值,我們每處理一個片元,緩存對象自增加1,我們把緩存對象的當(dāng)前值作為鏈表的索引值。借助這個索引值,我們可以將節(jié)點(diǎn)數(shù)據(jù)存入到對應(yīng)的物理內(nèi)存中。

        因?yàn)樵诠饩€追蹤步驟,我們需要遍歷鏈表去找反射點(diǎn),所以我們需要對鏈表按照深度進(jìn)行排序,方便以后對鏈表的遍歷。

        2.2 求反射值

        我們增加了G-Buffer的內(nèi)存,但是并沒有破壞GBuffer的結(jié)構(gòu),所以在我們的算法中仍然可以使用Hi-Z加速結(jié)構(gòu)。在一般的SSR算法中,我們會對場景的二維深度值進(jìn)行處理,構(gòu)建Hi-Z算法所需要的層級深度圖,供光線追蹤時加速求交使用。在本文算法中,我們對G-Buffer進(jìn)行擴(kuò)充,由二維數(shù)據(jù)變成了三維數(shù)據(jù),深度圖因此也變成了三維深度圖。為了方便起見,我們對G-Buffers中的最靠近視點(diǎn)的片元深度構(gòu)建層級結(jié)構(gòu),不考慮鏈表中其他的深度值。因?yàn)樵诠饩€追蹤步驟,大部分情況是處理可見場景的反射,所以用Hi-Z加速可見場景的求交速度是很有必要的。用最靠近視點(diǎn)的片元深度生成層級圖,不會破壞原來的加速結(jié)構(gòu),也給鏈表求交提供了額外的空間。

        我們從視點(diǎn)出發(fā),發(fā)射一條入射光線到屏幕上的某一像素點(diǎn),根據(jù)此像素點(diǎn)的法線求出反射光線的方向。當(dāng)前像素點(diǎn)為反射光線的起始點(diǎn),光線按照反射光線的方向前進(jìn)。這個過程,我們會使用Hi-Z算法進(jìn)行加速。如果我們在可見場景中找到反射光線與場景的相交點(diǎn),那么求交過程結(jié)束。如果我們檢測到交點(diǎn)在背面,我們會對當(dāng)前鏈表進(jìn)行遍歷。如果當(dāng)前鏈表中有滿足條件的片元,我們就視為找到反射點(diǎn),否則光線跟蹤步驟會繼續(xù)前進(jìn),對后續(xù)的鏈表進(jìn)行排查,直到尋找到合適的值。

        2.3 反射貼圖的處理

        我們將每個像素的反射結(jié)果放到一個紋理里,在光線追蹤結(jié)束以后,我們用反射結(jié)果貼圖與場景原來的貼圖做疊加。因?yàn)楸疚乃惴ㄓ嬎愕氖菍?shí)時反射結(jié)果,所以我們只用一條反射光線做光線追蹤以節(jié)約計算成本。此外,我們計算反射值的步驟是在片元著色器階段,起點(diǎn)為片元坐標(biāo)。本算法的這兩個特點(diǎn)決定了我們得到的反射值是離散的數(shù)據(jù),在最終結(jié)果處理的時候會在屏幕上產(chǎn)生噪點(diǎn),影響最后效果。所以我們得到反射值貼圖以后,我們會對反射值做高斯模糊,讓反射值貼圖的噪聲減少。

        3 實(shí)驗(yàn)結(jié)果

        我們用本文算法和原有的SSR算法對比,光線追蹤步驟中的步長和迭代次數(shù)一致,生成出來的效果對比如圖4所示。圖4左邊為原有的SSR算法的效果,從圖中可以看到,原有的SSR算法因?yàn)楸趁嫘畔⑷笔?,?dǎo)致該算法在處理背面反射時中失去作用。紅色圈中的部分應(yīng)該反射鼎的底部,但是原有的算法沒有辦法得到底部的信息。圖4右邊為本文算法,因?yàn)殒湵斫Y(jié)構(gòu)補(bǔ)全了一部分缺失的信息,我們在求反射效果時能夠通過鏈表得到正確的反射結(jié)果。

        圖4

        4 結(jié)語

        SSR算法因?yàn)槠湫矢咝?,在很多追求效率的軟件和游戲中有廣泛的應(yīng)用。但是由于其本身算法的局限性,處理效果會有瑕疵。本文算法針對原有算法信息不足導(dǎo)致反射結(jié)果不完整的問題,提出解決方案。通過動態(tài)鏈表對數(shù)據(jù)進(jìn)行擴(kuò)充。同時我們考慮到內(nèi)存開銷,對數(shù)據(jù)進(jìn)行壓縮。但是本文算法在光線追蹤步驟,因?yàn)閿?shù)據(jù)量的增大,求交時間會增加。未來工作會進(jìn)一步優(yōu)化反射求交的效率,讓算法整體效率提升。

        [1]Greene,Ned.Environment Mapping and Other Applications of World Projections[N].IEEE Computer Graphics and Applications:IEEE,1986:21-29.

        [2]Stachowiak,Tomasz.Stochastic Screen-Space Reflections[R].SIGGRAPH 2015 Advances in Real-time Rendering in Games Course,2015.

        [3]Uludag,Yasin.Hi-Z Screen-Space Cone-Traced Reflections[M].GPU Pro 5,2014:149-192.

        [4]Thibieroz,Nicolas.Order-Independent Transparency Using Per-Pixel Linked Lists[M].GPU Pro,2011:409-431.

        [5]Umenhoffer,Tamas and Patow,Gustavo,Szirmay-Kalos,Laszlo.Robust Multiple Specular Reflections and Refractions[M].GPU Gems,2007:387-407.

        [6]王晨昊,湯曉安,孫即祥,馬伯寧.帶有位置修正的環(huán)境映射[J].中國圖象圖形學(xué)報,2012(03).

        欧美成a人片在线观看久| 91精品欧美综合在线观看| 日本护士一区二区三区高清热线| 免费人妖一区二区三区| 内射夜晚在线观看| 黄色视频免费在线观看| 日韩久久久黄色一级av| 亚洲中文字幕高清在线视频一区| 国产极品美女高潮无套| 天堂aⅴ无码一区二区三区| 欧美视频第一页| 日韩精品一级在线视频| 强d乱码中文字幕熟女免费| 国产三级精品三级在线观看| 久久国产精品二区99| 日本熟女人妻一区二区三区| 少妇免费av一区二区三区久久| 精品人妻午夜一区二区三区四区| 538在线啪在线观看| 真人在线射美女视频在线观看| 日韩一区二区三区人妻中文字幕| 九九综合va免费看| 丰满熟女人妻中文字幕免费| 亚洲乱码少妇中文字幕| 强迫人妻hd中文字幕| 国产无套粉嫩白浆在线观看| 亚洲中文无码av在线| 麻豆国产巨作AV剧情老师| 白白白色视频在线观看播放| 一区二区三区无码高清视频| 亚洲日韩国产欧美一区二区三区| 亚洲av理论在线电影网| 中文字幕日本女优在线观看| 精品粉嫩av一区二区三区| 无人视频在线观看免费播放影院| 精品无码AⅤ片| 亚洲av成人无网码天堂| 亚洲爆乳精品无码一区二区三区| 婷婷丁香社区| 国产一级一片内射在线| 亚洲夫妻性生活免费视频|