專利名稱:一種gpu加速的實時立體渲染方法
技術領域:
本發明涉及計算機圖形學領域,特別是涉及一種GPU加速的實時立體渲染方法。
背景技術:
立體視覺是三維場景渲染的一個重要部分,目前對于立體像對壓縮,立體知覺的舒適感和立體顯示設備增強的研究比較多,對立體渲染加速的研究則較少。立體視覺技術, 大大增加了沉浸感,涉及到渲染場景兩次,即對每只眼睛渲染一次,因此,渲染的時間增加
了一倍。傳統的立體渲染方法針對復雜的場景,進行渲染需要的時間很長,這是因為針對給定左視點的場景,需要重新計算右視點的頂點屬性,才能得到相對應與左視點的右視點的場景。渲染復雜場景所需要的渲染時間長,這是現有立體渲染方法的缺陷。因而,目前需要本領域技術人員迫切解決的一個技術問題就是如何找到一種新型的立體渲染方法,該方法針對復雜的渲染場景,可以實現實時的立體渲染,大大地縮短了針對復雜場景進行立體渲染所需要的渲染時間。
發明內容
本發明所要解決的一個技術問題是提供一種GPU加速的實時立體渲染方法,該方法針對復雜的渲染場景,可以實現實時的立體渲染,大大地縮短了針對復雜場景進行立體渲染所需要的渲染時間。為了解決上述問題,本發明公開了一種GPU加速的實時立體渲染方法,包括分別建立渲染場景的左模型及渲染場景的右模型,獲得渲染場景的左模型及渲染場景的右模型;計算渲染場景的左模型視圖矩陣、渲染場景的右模型視圖矩陣及投影矩陣,獲得渲染場景的左模型視圖矩陣、渲染場景的右模型視圖矩陣及投影矩陣;執行渲染場景的頂點處理操作,獲得渲染場景的頂點處理結果;在幾何著色器中接收頂點著色器傳送的基元,獲得相應的基元的變換結果;使用渲染器對多個渲染目標進行渲染,獲得相應的每個渲染目標的渲染結果;將每個渲染目標的渲染結果存入兩個獨立的緩存中,獲得在兩個獨立緩存中分別存儲的每個渲染目標的渲染結果;針對在兩個獨立緩存中分別存儲的每個渲染目標的渲染結果,采用立體恢復方法,進行相應的顯示立體像對,獲得每個渲染目標的渲染結果的立體像對。優選的,所述在幾何著色器中接收頂點著色器傳送的基元,獲得相應的基元的變換結果的步驟,包括在幾何著色器中接收頂點著色器傳送的基元,獲得初始傳送基元;針對初始傳送基元進行克隆,獲得初始傳送基元的克隆信息;針對初始傳送基元的左、右視點執行相應模型視圖變換及投影變換,獲得初始傳
4送基元的左、右視點執行相應模型視圖變換的變換結果及投影變換的變換結果;執行完第一輪初始傳送基元的變換過程,獲得第一輪初始傳送基元的變換結果;發送新的基元到片段著色器中,執行第二輪新的基元的變換過程,獲得相應的基元的變換結果。優選的,所述針對初始傳送基元的左、右視點執行相應模型視圖變換及投影變換, 獲得初始傳送基元的左、右視點執行相應模型視圖變換的變換結果及投影變換的變換結果的步驟,包括針對初始傳送基元的左、右視點執行相應模型視圖變換,獲得左、右視點執行相應模型視圖變換的變換結果;針對初始傳送基元的左、右視點執行相應模型投影變換,獲得左、右視點執行相應模型投影變換的變換結果。優選的,所述使用渲染器對多個渲染目標進行渲染,獲得相應的每個渲染目標的渲染結果的步驟,包括在使用渲染器對多個渲染目標進行渲染的過程中,依據幾何著色器中的設置的變量整理進入的渲染片段,獲得渲染片段的渲染結果;其中,若所述渲染片段是左視點,則將該渲染片段的標志設置為零;若所述渲染片段不是左視點,則將該渲染片段的標志設置為非零。優選的,所述使用渲染器對多個渲染目標進行渲染,獲得相應的每個渲染目標的渲染結果的步驟,包括所述多個渲染目標中的每個片段必須在兩個不同的緩存區分別進行繪制,獲得多個渲染目標中的每個片段在兩個不同的緩存區的繪制結果。優選的,所述使用渲染器對多個渲染目標進行渲染,獲得相應的每個渲染目標的渲染結果的步驟,包括若多個渲染目標中的每個片段的緩沖區標志位指示不正確時,則多個渲染目標中的每個片段會被消除。優選的,所述若多個渲染目標中的每個片段的緩沖區標志位指示不正確時,則多個渲染目標中的每個片段會被消除的步驟,包括設置消除不需要的片段的顏色為黑色及設置消除不需要的片段的透明度值為零, 則多個渲染目標中的每個片段會被消除。優選的,所述針對在兩個獨立緩存中分別存儲的每個渲染目標的渲染結果,采用立體恢復方法,進行相應的顯示立體像對,獲得每個渲染目標的渲染結果的立體像對的步驟,包括在幾何著色器中,傳送左視點基元轉換后的頂點坐標到片段著色器中;如果片段屬于右視點,則執行讀取幾何著色器中的坐標值,進行視口裁剪變換的操作過程;如果坐標存在于深度圖中,則執行比較深度圖值和片段深度值及根據獲得的深度值測試結果作出接受或丟棄片段相應操作的連續操作過程;如果坐標不存在于深度圖中,則執行接收送入的片段的操作過程;執行完上述操作過程,獲得每個渲染目標的渲染結果的立體像對。
與現有技術相比,本發明具有以下優點1、針對傳統的立體渲染方法,該方法的渲染時間大大縮短,實現了對復雜場景的實時立體渲染。2、本發明實現了以高的細節層次渲染場景立體像對,而由此導致的幀率下降可以忽略不計。總之,本發明提供了一種GPU加速的實時立體渲染方法,該方法針對復雜的渲染場景,可以實現實時的立體渲染;大大地縮短了針對復雜場景進行立體渲染所需要的渲染時間。
圖1是本發明一種GPU加速的實時立體渲染方法實施例的步驟流程圖;圖2是本發明一種GPU加速的實時立體渲染方法中的算法流程示意圖。
具體實施例方式為使本發明的上述目的、特征和優點能夠更加明顯易懂,下面結合附圖和具體實施方式
對本發明作進一步詳細的說明。本發明的核心思想之一是提供了一種GPU (Graphic Processing Unit中文翻譯為 “圖形處理器”,GPU是相對于CPU的一個概念,由于在現代的計算機中,特別是家用系統,游戲的發燒友,圖形的處理變得越來越重要,需要一個專門的圖形的核心處理器)加速的實時立體渲染方法,包括分別建立渲染場景的左模型及渲染場景的右模型;計算渲染場景的左模型視圖矩陣、渲染場景的右模型視圖矩陣及投影矩陣;執行渲染場景的頂點處理操作;在幾何著色器中接收頂點著色器傳送的基元;使用渲染器對多個渲染目標進行渲染; 將每個渲染目標的渲染結果存入兩個獨立的緩存中;針對在兩個獨立緩存中分別存儲的每個渲染目標的渲染結果,采用立體恢復方法,進行相應的顯示立體像對;該方法針對復雜的渲染場景,可以實現實時的立體渲染,大大地縮短了針對復雜場景進行立體渲染所需要的渲染時間。參照圖1,示出了本發明一種GPU加速的實時立體渲染方法實施例的步驟流程圖, 具體可以包括步驟101、分別建立渲染場景的左模型及渲染場景的右模型,獲得渲染場景的左模型及渲染場景的右模型。步驟102、計算渲染場景的左模型視圖矩陣、渲染場景的右模型視圖矩陣及投影矩陣,獲得渲染場景的左模型視圖矩陣、渲染場景的右模型視圖矩陣及投影矩陣。步驟103、執行渲染場景的頂點處理操作,獲得渲染場景的頂點處理結果。步驟104、在幾何著色器中接收頂點著色器傳送的基元,獲得相應的基元的變換結果。為了使本領域的技術人員更好地理解本發明,在本發明的一個優選實施例中,所述步驟104,具體可以包括子步驟Al、在幾何著色器中接收頂點著色器傳送的基元,獲得初始傳送基元。子步驟A2、針對初始傳送基元進行克隆,獲得初始傳送基元的克隆信息。
在針對初始傳送基元進行克隆,獲得初始傳送基元的克隆信息的過程中,關鍵的階段是幾何著色器執行的復制階段。幾何著色器從左視點到右視點克隆了指定基元。當初始頂點在左緩存投影的同時,復制的頂點在右緩存進行轉換和投影。在此過程中,一致變量matrix對應于右圖像變換矩陣,該變換矩陣是由右視點的模型視圖矩陣和投影矩陣乘積產生。模型視圖矩陣和投影矩陣的乘積產生的左圖像變換矩陣作為主程序里的一致變量可被直接讀入。變量flag指示創建的頂點是屬于左視圖還是右視圖。因為每一個基元重復執行相同的指令,由當前模型視圖矩陣乘以每個基元視點分離變換矢量形成的投影矩陣,將消耗額外計算時間。子步驟A3、針對初始傳送基元的左、右視點執行相應模型視圖變換及投影變換,獲得初始傳送基元的左、右視點執行相應模型視圖變換的變換結果及投影變換的變換結果。其中,所述子步驟A3具體可以包括子步驟Bi、針對初始傳送基元的左、右視點執行相應模型視圖變換,獲得左、右視點執行相應模型視圖變換的變換結果。子步驟B2、針對初始傳送基元的左、右視點執行相應模型投影變換,獲得左、右視點執行相應模型投影變換的變換結果。子步驟A4、執行完第一輪初始傳送基元的變換過程,獲得第一輪初始傳送基元的變換結果。子步驟A5、發送新的基元到片段著色器中,執行第二輪新的基元的變換過程,獲得相應的基元的變換結果。步驟105、使用渲染器對多個渲染目標進行渲染,獲得相應的每個渲染目標的渲染結果。為了使本領域的技術人員更好地理解本發明,在本發明的另一個優選實施例中, 所述步驟105,具體可以包括子步驟Cl、在使用渲染器對多個渲染目標進行渲染的過程中,依據幾何著色器中的設置的變量整理進入的渲染片段,獲得渲染片段的渲染結果;其中,若所述渲染片段是左視點,則將該渲染片段的標志設置為零;若所述渲染片段不是左視點,則將該渲染片段的標志設置為非零。為了使本領域的技術人員更好地理解本發明,在本發明的另一個優選實施例中, 所述步驟105,具體可以包括子步驟D1、所述多個渲染目標中的每個片段必須在兩個不同的緩存區分別進行繪制,獲得多個渲染目標中的每個片段在兩個不同的緩存區的繪制結果。為了使本領域的技術人員更好地理解本發明,在本發明的另一個優選實施例中, 所述步驟105,具體可以包括子步驟E1、若多個渲染目標中的每個片段的緩沖區標志位指示不正確時,則多個渲染目標中的每個片段會被消除。其中,所述子步驟El具體可以包括子步驟F1、設置消除不需要的片段的顏色為黑色及設置消除不需要的片段的透明度值為零,則多個渲染目標中的每個片段會被消除。在渲染過程中的關鍵階段是片段著色階段。在片段著色階段,要依據幾何著色器中設置的變量flag整理進入的片段。如果片段屬于左視點,此標志設置為零,否則就設置為非零。
執行對應于左、右圖像片段著色操作階段的操作過程,本發明同時使用多渲染目標技術和幀緩存對象技術。多渲染目標渲染場景到多個緩沖區,幀緩存對象可以在直接渲染結果到一張紋理。
然而使用多渲染目標和幀緩存對象涉及一些制約因素
幀緩存對象和多渲染目標渲染測試時,例如深度測試和透明度alpha測試,盡管有多個顏色緩存目標,共享通用緩存。
多渲染目標涉及到每個片段都在兩個緩存里渲染。然而,結果卻是不確定的。
左右視點渲染時共用深度緩存,這是第一個約束的結果,當片段不符合時意味著一些片段可能被拋棄。本發明通過禁用深度測試來解決這個問題。本發明使用畫家算法作為深度測試的替代方法來解決可見度問題。第二個評語說明幾何著色器創建兩個基元是獨立的。使用多渲染目標涉及到每個片段必須在兩個緩沖區繪制。因此片段不屬于正確的緩沖區標志位指示就會被丟棄。消除不需要的片段可以由設置其顏色為黑色,其透明度alpha 值為零實現。在主程序中應該啟用混合功能,禁用深度測試,這樣片段就無法顯示。
用于混合的函數
紅色=RsrcXAsrc+RdestX (I-Asrc)
綠色=GsrcXAsrc+GdestX (I-Asrc)
藍色=BsrcXAsrc+BdestX (I-Asrc)
Alpha = AsrcXAsrc+AdestX (I-Asrc)
步驟106、將每個渲染目標的渲染結果存入兩個獨立的緩存中,獲得在兩個獨立緩存中分別存儲的每個渲染目標的渲染結果。
步驟107、針對在兩個獨立緩存中分別存儲的每個渲染目標的渲染結果,采用立體恢復方法,進行相應的顯示立體像對,獲得每個渲染目標的渲染結果的立體像對。
為了使本領域的技術人員更好地理解本發明,在本發明的另一個優選實施例中, 所述步驟107,具體可以包括
子步驟G1、在幾何著色器中,傳送左視點基元轉換后的頂點坐標到片段著色器中。
子步驟G2、如果片段屬于右視點,則執行讀取幾何著色器中的坐標值,進行視口裁剪變換的操作過程。
子步驟G3、如果坐標存在于深度圖中,則執行比較深度圖值和片段深度值及根據獲得的深度值測試結果作出接受或丟棄片段相應操作的連續操作過程。
子步驟G4、如果坐標不存在于深度圖中,則執行接收送入的片段的操作過程。
子步驟G5、執行完上述操作過程,獲得每個渲染目標的渲染結果的立體像對。
在顯示立體像對的過程中,對應于左視點和右視點,渲染過程中產生兩個相應的獨立的紋理。立體裝置使用過程中,用戶應最終能修改立體像對。例如,使用立體眼鏡混合紅/青色濾波圖像,如下面的偽代碼所述
禁止深度測試;
利用加函數啟用混合;
設置顏色掩碼為紅色;8
渲染左邊紋理;
設置顏色掩碼為青色;
渲染右邊紋理;
偏振或主動立體系統則不需要這個過程,圖像通過合適視頻輸出。
為了證明本發明是一種可以大大地提高渲染立體場景時間的渲染方法,本發明做了如下的試驗來驗證,試驗結果具體如表1所述
表1效率比較表
權利要求
1.一種GPU加速的實時立體渲染方法,其特征在于,包括分別建立渲染場景的左模型及渲染場景的右模型,獲得渲染場景的左模型及渲染場景的右模型;計算渲染場景的左模型視圖矩陣、渲染場景的右模型視圖矩陣及投影矩陣,獲得渲染場景的左模型視圖矩陣、渲染場景的右模型視圖矩陣及投影矩陣; 執行渲染場景的頂點處理操作,獲得渲染場景的頂點處理結果; 在幾何著色器中接收頂點著色器傳送的基元,獲得相應的基元的變換結果; 使用渲染器對多個渲染目標進行渲染,獲得相應的每個渲染目標的渲染結果; 將每個渲染目標的渲染結果存入兩個獨立的緩存中,獲得在兩個獨立緩存中分別存儲的每個渲染目標的渲染結果;針對在兩個獨立緩存中分別存儲的每個渲染目標的渲染結果,采用立體恢復方法,進行相應的顯示立體像對,獲得每個渲染目標的渲染結果的立體像對。
2.根據權利要求1所述的方法,其特征在于,所述在幾何著色器中接收頂點著色器傳送的基元,獲得相應的基元的變換結果的步驟,包括在幾何著色器中接收頂點著色器傳送的基元,獲得初始傳送基元; 針對初始傳送基元進行克隆,獲得初始傳送基元的克隆信息; 針對初始傳送基元的左、右視點執行相應模型視圖變換及投影變換,獲得初始傳送基元的左、右視點執行相應模型視圖變換的變換結果及投影變換的變換結果;執行完第一輪初始傳送基元的變換過程,獲得第一輪初始傳送基元的變換結果; 發送新的基元到片段著色器中,執行第二輪新的基元的變換過程,獲得相應的基元的變換結果。
3.根據權利要求2所述的方法,其特征在于,所述針對初始傳送基元的左、右視點執行相應模型視圖變換及投影變換,獲得初始傳送基元的左、右視點執行相應模型視圖變換的變換結果及投影變換的變換結果的步驟,包括針對初始傳送基元的左、右視點執行相應模型視圖變換,獲得左、右視點執行相應模型視圖變換的變換結果;針對初始傳送基元的左、右視點執行相應模型投影變換,獲得左、右視點執行相應模型投影變換的變換結果。
4.根據權利要求1所述的方法,其特征在于,所述使用渲染器對多個渲染目標進行渲染,獲得相應的每個渲染目標的渲染結果的步驟,包括在使用渲染器對多個渲染目標進行渲染的過程中,依據幾何著色器中的設置的變量整理進入的渲染片段,獲得渲染片段的渲染結果;其中,若所述渲染片段是左視點,則將該渲染片段的標志設置為零;若所述渲染片段不是左視點,則將該渲染片段的標志設置為非零。
5.根據權利要求1所述的方法,其特征在于,所述使用渲染器對多個渲染目標進行渲染,獲得相應的每個渲染目標的渲染結果的步驟,包括所述多個渲染目標中的每個片段必須在兩個不同的緩存區分別進行繪制,獲得多個渲染目標中的每個片段在兩個不同的緩存區的繪制結果。
6.根據權利要求1所述的方法,其特征在于,所述使用渲染器對多個渲染目標進行渲染,獲得相應的每個渲染目標的渲染結果的步驟,包括若多個渲染目標中的每個片段的緩沖區標志位指示不正確時,則多個渲染目標中的每個片段會被消除。
7.根據權利要求6所述的方法,其特征在于,所述若多個渲染目標中的每個片段的緩沖區標志位指示不正確時,則多個渲染目標中的每個片段會被消除的步驟,包括設置消除不需要的片段的顏色為黑色及設置消除不需要的片段的透明度值為零,則多個渲染目標中的每個片段會被消除。
8.根據權利要求1所述的方法,其特征在于,所述針對在兩個獨立緩存中分別存儲的每個渲染目標的渲染結果,采用立體恢復方法,進行相應的顯示立體像對,獲得每個渲染目標的渲染結果的立體像對的步驟,包括在幾何著色器中,傳送左視點基元轉換后的頂點坐標到片段著色器中;如果片段屬于右視點,則執行讀取幾何著色器中的坐標值,進行視口裁剪變換的操作過程;如果坐標存在于深度圖中,則執行比較深度圖值和片段深度值及根據獲得的深度值測試結果作出接受或丟棄片段相應操作的連續操作過程;如果坐標不存在于深度圖中,則執行接收送入的片段的操作過程;執行完上述操作過程,獲得每個渲染目標的渲染結果的立體像對。
全文摘要
本發明提供了一種GPU加速的實時立體渲染方法,包括分別建立渲染場景的左模型及渲染場景的右模型;計算渲染場景的左模型視圖矩陣、渲染場景的右模型視圖矩陣及投影矩陣;執行渲染場景的頂點處理操作;在幾何著色器中接收頂點著色器傳送的基元;使用渲染器對多個渲染目標進行渲染;將每個渲染目標的渲染結果存入兩個獨立的緩存中;針對在兩個獨立緩存中分別存儲的每個渲染目標的渲染結果,采用立體恢復方法,進行相應的顯示立體像對;該方法針對復雜的渲染場景,可以實現實時的立體渲染,大大地縮短了針對復雜場景進行立體渲染所需要的渲染時間。
文檔編號G06T15/00GK102509336SQ201110325099
公開日2012年6月20日 申請日期2011年10月24日 優先權日2011年10月24日
發明者平紅燕 申請人:克拉瑪依紅有軟件有限責任公司