本發(fā)明屬于實(shí)時(shí)繪制領(lǐng)域,尤其涉及一種基于屏幕塊對(duì)(tilepair)的雙目渲染流水線方法。
背景技術(shù):
立體繪制表示的是繪制兩個(gè)只在x軸方向存在視差的圖像,它是多視角繪制的一種特殊情況。簡(jiǎn)單的多視角繪制可以通過多個(gè)獨(dú)立的繪制過程來實(shí)現(xiàn)。但是多個(gè)獨(dú)立的繪制過程涉及到多次調(diào)用圖形應(yīng)用程序接口,導(dǎo)致繪制效率不高。因此,多視角繪制的一個(gè)關(guān)鍵優(yōu)化就在于突破這種多次調(diào)用的限制。
desorbier使用頂點(diǎn)和幾何著色器在同一個(gè)繪制過程中同時(shí)將幾何投影到兩個(gè)不同的視點(diǎn)。nvidia提出的單過程立體繪制(singlepassstereo)在帕斯卡架構(gòu)的的顯卡上實(shí)現(xiàn)了一個(gè)新的多投影架構(gòu),這個(gè)結(jié)構(gòu)可以在只繪制一遍幾何就將這些幾何同時(shí)投影到左視角和右視角當(dāng)中。但是這項(xiàng)技術(shù)只是在頂點(diǎn)著色器階段同時(shí)輸出了兩個(gè)視點(diǎn)的位置坐標(biāo),并沒有考慮兩個(gè)view之間的幾何關(guān)系。
除此之外,一些基于極線幾何的方法也被用于優(yōu)化在兩個(gè)試點(diǎn)下的光柵化過程。adelson利用投影對(duì)應(yīng)關(guān)系分析和優(yōu)化了在兩個(gè)試點(diǎn)下一系列經(jīng)典圖形算法,包括掃描線光柵化,剔除,隱藏面剔除等。hasselgren則提出了沿著掃描線上三角形的重心坐標(biāo)來依序光柵化并計(jì)算多個(gè)視點(diǎn)上的著色。在遍歷掃描線的過程中,可以通過復(fù)用相鄰視點(diǎn)的著色結(jié)果來減少著色計(jì)算。
在圖形渲染領(lǐng)域,基于屏幕塊的繪制技術(shù)已經(jīng)被發(fā)展了很久了。大量基于屏幕塊的技術(shù)已經(jīng)被fuchs等在pixelplanes5project中實(shí)現(xiàn)了。但是因?yàn)榛谄聊粔K的技術(shù)需要在繪制管線的中間流程將幾何數(shù)據(jù)排序,導(dǎo)致這一技術(shù)沒有被大量地應(yīng)用到桌面級(jí)顯卡上,但是在嵌入式顯卡,如arm,powervr中被大量使用。hasselgren提出的多視點(diǎn)光柵化框架雖然也考慮了基于屏幕塊時(shí)的情況,但是他們還是只考慮了在一個(gè)三角形內(nèi)部的情況,而沒有考慮整個(gè)場(chǎng)景的分布。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明提出了一種基于拼接對(duì)的立體硬件渲染管線方法,該方法考慮了左右兩個(gè)視角下場(chǎng)景幾何的相關(guān)性,并且同時(shí)完成幾何圖元在兩個(gè)視角下的同時(shí)光柵化,能夠有效降低渲染場(chǎng)景所需要的帶寬。
本發(fā)明的技術(shù)方案為:
一種基于屏幕塊對(duì)的雙目渲染流水線流程與方法,包括以下步驟:
(1)按照雙目繪制當(dāng)中左右視角的空間關(guān)系,整個(gè)空間劃分為多個(gè)屏幕塊對(duì),并為每個(gè)屏幕塊對(duì)生成與其對(duì)應(yīng)的輸入場(chǎng)景中的圖元列表;
(2)在生成屏幕塊對(duì)之后,搜索屏幕塊對(duì)得到多個(gè)空間一致性表面,所述的空間一致性表面為多個(gè)連通的屏幕塊對(duì)對(duì)應(yīng)空間形成的表面;
(3)在獲得多個(gè)空間一致性表面之后,調(diào)度所有屏幕塊對(duì),并為每一個(gè)屏幕塊對(duì)對(duì)應(yīng)的圖元同時(shí)進(jìn)行左右視角的光柵化、繪制。
本發(fā)明中,左視角對(duì)應(yīng)屏幕的任一屏幕塊與右視角對(duì)應(yīng)屏幕的任一屏幕塊組成一個(gè)屏幕塊對(duì),根據(jù)左右視線和組成屏幕塊對(duì)的兩個(gè)屏幕塊,在兩個(gè)屏幕塊后方,左右視線交叉形成的區(qū)域稱為屏幕塊對(duì)對(duì)應(yīng)空間。
所述的步驟(1)的具體步驟為:
(1-1)按照預(yù)先設(shè)定的屏幕塊尺寸n×n(像素),分別將左右視角對(duì)應(yīng)屏幕分割為多個(gè)屏幕塊tj0和tj1,組成屏幕塊集t0和屏幕塊集t1,其中,j=1,2,…,n,表示屏幕塊的序號(hào),且序號(hào)j是按照從左到右,從上到小的順序遞增的,n為屏幕塊的總個(gè)數(shù);
(1-2)分別計(jì)算輸入的第i個(gè)圖元pi投影到左右視角對(duì)應(yīng)屏幕的位置
(1-3)在確定位置
(1-4)以屏幕塊為單位,按照水平方向的每一條極線(epipolarline),從左到右同時(shí)遍歷左右視角對(duì)應(yīng)屏幕中當(dāng)前極線上的屏幕塊,并判斷當(dāng)前圖元pcur是否屬于當(dāng)前遍歷到的屏幕塊對(duì)
(1-5)在遍歷的過程中構(gòu)建雙層索引,第一層索引為圖元索引,是在屏幕塊對(duì)應(yīng)空間上的圖元列表;第二層索引為屏幕塊上圖元的索引,是與屏幕塊對(duì)對(duì)應(yīng)空間相對(duì)應(yīng)的屏幕塊上圖元的索引列表,根據(jù)這雙層索引生成與每個(gè)屏幕塊對(duì)對(duì)應(yīng)的輸入圖元列表。
本發(fā)明中,預(yù)先設(shè)定的屏幕塊尺寸n×n是為了并行處理的方便,一般取值為2的冪次方,n的取值范圍一般為23~27。所述的圖元指的是需要繪制的網(wǎng)格模型的組成元素,如三角網(wǎng)格中的三角形。
步驟(1-3)中,根據(jù)圖元pi投影到左視角對(duì)應(yīng)屏幕的位置
步驟(1-4)中,判斷當(dāng)前圖元pcur是否屬于當(dāng)前遍歷到的屏幕塊對(duì)
(a)從當(dāng)前圖元pcur的覆蓋屏幕塊集
(b)分別計(jì)算屏幕塊
(c)通過計(jì)算同一條極線上屏幕塊邊界重心坐標(biāo)之差確定當(dāng)前圖元pcur在當(dāng)前極線上的遍歷方向d;
(d)分別計(jì)算屏幕塊
其中,
(e)比較e0(e)與e1(e)的大小:
若e0(e)<e1(e),則將
若e0(e)>e1(e),則將
若e0(e)=e1(e),則將
(f)在執(zhí)行完步驟(e)后,判斷是否屏幕塊
步驟(1-5)中,屏幕塊對(duì)應(yīng)空間上的圖元列表的構(gòu)建方法與傳統(tǒng)的基于屏幕塊的方法一致。在圖元索引建立完的基礎(chǔ)上,建立屏幕塊索引,屏幕塊對(duì)上存儲(chǔ)的是組成該屏幕塊對(duì)的兩個(gè)屏幕塊的id,再根據(jù)兩個(gè)屏幕塊中存儲(chǔ)的id找到對(duì)應(yīng)的圖元,也就是t在屏幕塊對(duì)上存儲(chǔ)的列表中是某一個(gè)圖元在兩個(gè)屏幕塊上圖元列表的索引。例如:圖元p在屏幕塊
步驟(2)中搜索屏幕塊對(duì)得到多個(gè)空間一致性表面是以屏幕塊為單位,針對(duì)水平方向的每一條極線,執(zhí)行以下步驟為:
(2-1)在當(dāng)前極線上生成的屏幕塊對(duì)中,以未被訪問的屏幕塊對(duì)作為起始的屏幕塊對(duì)
(2-2)在遍歷的過程中,按照深度優(yōu)先方式遍歷鄰接的未訪問過的屏幕塊對(duì);
(2-3)若所有連通的屏幕塊對(duì)都已經(jīng)被訪問,則記錄起始的屏幕塊對(duì)
(2-4)跳轉(zhuǎn)執(zhí)行步驟(2-1)~(2-3),直至當(dāng)前極線上的所有屏幕塊對(duì)都被訪問過為止;
通過步驟(2-1)~(2-4)遍歷屏幕上所有極線上的所有屏幕塊對(duì),形成多個(gè)空間一致性表面,并記錄每個(gè)空間一致性表面中起始的屏幕塊對(duì)
在步驟(2-1)中,在當(dāng)前極線上未被訪問的屏幕塊對(duì)中,以左視角對(duì)應(yīng)屏幕塊序號(hào)最小的屏幕塊對(duì)作為起始的屏幕塊對(duì)
在步驟(2-2)中,對(duì)所述的屏幕塊對(duì)
步驟(3)中,針對(duì)水平方向的每條極線,執(zhí)行以下步驟:
(3-1)在當(dāng)前極線對(duì)應(yīng)的起始屏幕塊對(duì)子集中,以合適的起始屏幕塊對(duì)為開始,按照深度優(yōu)先方式,遍歷該起始屏幕塊對(duì)對(duì)應(yīng)的空間一致性表面中的所有未被光柵化的屏幕塊對(duì);
(3-2)在遍歷的過程中,對(duì)被訪問的屏幕塊對(duì)中的圖元進(jìn)行光柵化和繪制;
(3-3)跳轉(zhuǎn)執(zhí)行步驟(3-1)~(3-3),直至當(dāng)前極線對(duì)應(yīng)的起始屏幕塊對(duì)子集中的起始屏幕塊對(duì)都被訪問過為止;
最終按照步驟(3-1)~(3-3)實(shí)現(xiàn)對(duì)所有屏幕塊對(duì)的光柵化和繪制。
步驟(3-1)中,所述的合適的起始屏幕塊對(duì)是按照以下方式確定的:在當(dāng)前極線對(duì)應(yīng)的起始屏幕塊對(duì)子集中,以右視角對(duì)應(yīng)屏幕塊序號(hào)最大的起始屏幕塊對(duì)作為合適的起始屏幕塊對(duì);若右視角對(duì)應(yīng)屏幕塊序號(hào)最大的屏幕塊對(duì)有多個(gè),則選擇右視角對(duì)應(yīng)屏幕塊序號(hào)最大,且右視角對(duì)應(yīng)屏幕塊序號(hào)也最大的起始屏幕塊對(duì)作為合適的起始屏幕塊對(duì)。
步驟(3-1)中所述的深度優(yōu)先方式與步驟(2-2)中所述的深度優(yōu)先方式一致。
步驟(3-2)中,對(duì)被訪問的屏幕塊對(duì)中的圖元進(jìn)行光柵化和繪制的具體過程為:
(3-2-1)針對(duì)當(dāng)前被訪問的屏幕塊對(duì),按照兩層索引讀取需要繪制的兩個(gè)圖元索引;具體為:判斷對(duì)應(yīng)的兩個(gè)圖元索引是否為負(fù),若是,該兩個(gè)圖元已經(jīng)在各自所屬的屏幕塊上被光柵化;若否,執(zhí)行步驟(3-2-2);
(3-2-2)根據(jù)兩個(gè)圖元索引讀取光柵化數(shù)據(jù)(屏幕空間位置、面方程)和對(duì)應(yīng)所需的繪制數(shù)據(jù)(頂點(diǎn)屬性等),實(shí)現(xiàn)對(duì)該兩個(gè)圖元是光柵化和繪制;且完成完成光柵化和繪制之后,將該圖元索引賦為負(fù)值,并寫回到屏幕塊上的圖元列表對(duì)應(yīng)的位置。
本發(fā)明在繪制過程中同時(shí)處理兩個(gè)視角的數(shù)據(jù),減少了傳統(tǒng)基于屏幕塊(屏幕塊)方法中重復(fù)讀取頂點(diǎn)屬性等繪制數(shù)據(jù)的代價(jià)。除此之外,通過搜索空間一致性并依依照屏幕塊對(duì)調(diào)度,可以結(jié)合層次z剔除等優(yōu)化手段,減少過度著色。
附圖說明
圖1是本發(fā)明基于屏幕塊對(duì)的雙目渲染流水線流程與方法的流程圖:
圖2是本發(fā)明中沿著極線構(gòu)建屏幕塊對(duì)的原理示意圖;
圖3是本發(fā)明中構(gòu)建屏幕塊對(duì)時(shí)確定遍歷方向方法示意圖;
圖4是本發(fā)明中在構(gòu)建屏幕塊對(duì)過程中創(chuàng)建的兩層索引示意圖;
圖5是本發(fā)明中形成的空間一致性表面示意圖。
具體實(shí)施方式
為了更為具體地描述本發(fā)明,下面結(jié)合附圖及具體實(shí)施方式對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說明。
參見圖1,本實(shí)施例中基于屏幕塊對(duì)的雙目渲染流水線流程與方法包括以下步驟:
s01,按照預(yù)先設(shè)定的屏幕塊尺寸n×n(像素),分別將左右視角對(duì)應(yīng)屏幕分割為多個(gè)屏幕塊tj0和tj1,組成屏幕塊集t0和屏幕塊集t1,其中,j=1,2,…,n,表示屏幕塊的序號(hào),且序號(hào)j是按照從左到右,從上到小的順序遞增的,n為屏幕塊的總個(gè)數(shù),如圖2所示。
本實(shí)施例中,n=8,左右視角對(duì)應(yīng)屏幕尺寸為640×480,則屏幕塊的序號(hào)處于0~4799,即n=4799。
s02,分別計(jì)算輸入的第i個(gè)圖元pi投影到左右視角對(duì)應(yīng)屏幕的位置
本實(shí)施例輸入的網(wǎng)格由三角形面片組成,也就是輸入的圖元為三角形。
s03,在確定位置
s04,以屏幕塊為單位,按照水平方向的每一條極線(epipolarline),從左到右同時(shí)遍歷左右視角對(duì)應(yīng)屏幕中當(dāng)前極線上的屏幕塊,判斷得到當(dāng)前圖元pcur屬于的屏幕塊對(duì)。
s04的具體過程為:
s04-1,從當(dāng)前圖元pcur的覆蓋屏幕塊集
s04-2,分別計(jì)算屏幕塊
s04-3,通過計(jì)算同一條極線上屏幕塊邊界重心坐標(biāo)之差確定當(dāng)前圖元pcur在當(dāng)前極線上的遍歷方向d,如圖3所示。
s04-4,分別計(jì)算屏幕塊
s04-5,比較e0(e)與e1(e)的大?。?/p>
若e0(e)<e1(e),則將
若e0(e)>e1(e),則將
若e0(e)=e1(e),則將
s04-6,在執(zhí)行完s04-5后,判斷是否屏幕塊
本實(shí)施例中,首先計(jì)算以屏幕塊為單位,水平方向上的第一條極線,也就是y軸的像素坐標(biāo)為0~7,此條極線上的左視角對(duì)應(yīng)屏幕塊的序號(hào)與右視角對(duì)應(yīng)屏幕塊的序號(hào)都為0~59。然后,選取的當(dāng)前圖元為第一個(gè)三角形p1,在遍歷查找屏幕塊對(duì)時(shí),選取的當(dāng)前遍歷屏幕塊為
s05,在遍歷的過程中構(gòu)建雙層索引,第一層索引為圖元索引,是在屏幕塊對(duì)應(yīng)空間上的圖元列表;第二層索引為屏幕塊上圖元的索引,是與屏幕塊對(duì)對(duì)應(yīng)空間相對(duì)應(yīng)的屏幕塊上圖元的索引列表,根據(jù)這雙層索引生成與每個(gè)屏幕塊對(duì)對(duì)應(yīng)的輸入圖元列表,如圖4所示。
本實(shí)施例中,以三角形p1在屏幕塊對(duì)
s06,在當(dāng)前極線上生成的屏幕塊對(duì)中,以未被訪問的屏幕塊對(duì)作為起始的屏幕塊對(duì)
本步驟中,在當(dāng)前極線上未被訪問的屏幕塊對(duì)中,以左視角對(duì)應(yīng)屏幕塊序號(hào)最小的屏幕塊對(duì)作為起始的屏幕塊對(duì)
本實(shí)施例中,根據(jù)上述選取順序,選取屏幕塊對(duì)
s07,在遍歷的過程中,按照深度優(yōu)先方式遍歷鄰接的未訪問過的屏幕塊對(duì)。
本步驟中,對(duì)所述的屏幕塊對(duì)
s08,若所有連通的屏幕塊對(duì)都已經(jīng)被訪問,則記錄起始的屏幕塊對(duì)
s09,跳轉(zhuǎn)執(zhí)行s06~s08,直至當(dāng)前極線上的所有屏幕塊對(duì)都被訪問過為止。
本實(shí)施例中,在進(jìn)行下一次執(zhí)行s06時(shí),將屏幕塊對(duì)
通過s06~s09遍歷屏幕上所有極線上的所有屏幕塊對(duì),形成多個(gè)空間一致性表面,并記錄每個(gè)空間一致性表面中起始的屏幕塊對(duì)
s10,在當(dāng)前極線對(duì)應(yīng)的起始屏幕塊對(duì)子集中,以合適的起始屏幕塊對(duì)為開始,按照深度優(yōu)先方式,遍歷該起始屏幕塊對(duì)對(duì)應(yīng)的空間一致性表面中的所有未被光柵化的屏幕塊對(duì)。
本步驟中,合適的起始屏幕塊對(duì)是按照以下方式確定的:在當(dāng)前極線對(duì)應(yīng)的起始屏幕塊對(duì)子集中,以右視角對(duì)應(yīng)屏幕塊序號(hào)最大的起始屏幕塊對(duì)作為合適的起始屏幕塊對(duì);若右視角對(duì)應(yīng)屏幕塊序號(hào)最大的屏幕塊對(duì)有多個(gè),則選擇右視角對(duì)應(yīng)屏幕塊序號(hào)最大,且左視角對(duì)應(yīng)屏幕塊序號(hào)也最大的起始屏幕塊對(duì)作為合適的起始屏幕塊對(duì)。本步驟中的深度優(yōu)先方式與s07中的深度優(yōu)先方式一致。
本實(shí)施例中,以水平方向的第一條極線為例,屬于該極線的起始屏幕塊對(duì)子集中包括屏幕塊對(duì)
s11,在遍歷的過程中,對(duì)被訪問的屏幕塊對(duì)中的圖元進(jìn)行光柵化和繪制。
本步驟中,對(duì)被訪問的屏幕塊對(duì)中的圖元進(jìn)行光柵化和繪制的具體過程為:
s11-1,針對(duì)當(dāng)前被訪問的屏幕塊對(duì),判斷按照兩層索引讀取該屏幕塊對(duì)對(duì)應(yīng)的兩個(gè)圖元索引是否為負(fù),若是,該兩個(gè)圖元已經(jīng)在各自所屬的屏幕塊上被光柵化;若否,執(zhí)行s11-2;
s11-2,根據(jù)兩個(gè)圖元索引讀取光柵化數(shù)據(jù)(屏幕空間位置、面方程)和對(duì)應(yīng)所需的繪制數(shù)據(jù)(頂點(diǎn)屬性等),實(shí)現(xiàn)對(duì)該兩個(gè)圖元是光柵化和繪制;并將該圖元索引賦為負(fù)值,并寫回到屏幕塊上的圖元列表對(duì)應(yīng)的位置。
本實(shí)施例中,以屏幕塊對(duì)
s12,跳轉(zhuǎn)執(zhí)行s10~s12,直至當(dāng)前極線對(duì)應(yīng)的起始屏幕塊對(duì)子集中的起始屏幕塊對(duì)都被訪問過為止。
本步驟中,以水平方向的第一條極線為例,屬于該極線的起始屏幕塊對(duì)子集中包括屏幕塊對(duì)
以上所述的具體實(shí)施方式對(duì)本發(fā)明的技術(shù)方案和有益效果進(jìn)行了詳細(xì)說明,應(yīng)理解的是以上所述僅為本發(fā)明的最優(yōu)選實(shí)施例,并不用于限制本發(fā)明,凡在本發(fā)明的原則范圍內(nèi)所做的任何修改、補(bǔ)充和等同替換等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。