本發(fā)明涉及計算機領域,具體而言,涉及一種圖像處理方法及裝置。
背景技術:
虛擬現實(Virtual Reality,簡稱為VR)是由美國VPL公司創(chuàng)建人拉尼爾(Jaron Lanier)在20世紀80年代初提出的,其具體內涵在于:綜合利用計算機圖形系統(tǒng)和多種現實及控制等接口設備,在計算機上生成的、可交互的三維環(huán)境中提供沉浸感覺的技術,其中,由計算機生成的、可交互的三維環(huán)境稱為虛擬環(huán)境(Virtual Environment,簡稱為VE)。虛擬現實技術是一種可以創(chuàng)建和體驗虛擬世界的計算機仿真系統(tǒng)的技術,其利用計算機生成一種模擬環(huán)境,以及利用多源信息融合的交互式三維動態(tài)視景和實體行為的系統(tǒng)仿真使用戶沉浸到該環(huán)境中。
為了確保VR的舒適體驗,VR對于性能的要求極高。高性能的VR體驗可以避免因為延時而帶來的對于VR體驗的不適感。對此,AMD的首席游戲科學家Richard Huddy認為,11毫秒或是更低的延遲對于互動性游戲來說是必需的,而在極個別情況下,20毫秒的延遲在一個360度的虛擬現實電影中移動也是可以接受。需要說明的是,延遲并非是作為一個硬件在性能方面的指標,而僅僅是硬件能否實現虛擬現實這種效果的一條基準線。如果希望延遲度小于20ms,則必須要確保幀率至少達到60幀/秒,甚至90幀/秒以上。而這種性能要求,即便是對于目前的主流智能移動終端而言,都是極為苛刻的。
VR游戲的渲染流水線與普通三維(3D)游戲相比,增加了兩個方面的性能開銷,其分別為:分屏與畸變校正。
分屏是指通過兩個攝像機分別采集游戲場景信息并渲染至屏幕上的過程,該過程相比于普通游戲的單一相機渲染,存在更多的渲染調用(Draw Call,即中央處理器(CPU)向圖形處理器(GPU)發(fā)送渲染特定物體的指令數目,其可以簡單理解為GPU每渲染一個物體,CPU便會發(fā)送一條渲染指令),由此增加了渲染開銷。同時,分屏操作還使得游戲玩家單眼看到的屏幕分辨率降低至整屏的一半,當屏幕貼近眼睛時很容易產生紗窗效應(即眼睛能夠看到屏幕中的格點),進而產生眼部不適。
畸變校正是指為了彌補游戲玩家直接觀看VR屏幕產生的圖像畸變,對圖像進行預先校正的過程。人眼在真實世界中的水平視角在220-230度左右,目前的VR頭戴設備為了利用較小的平面顯示器模擬出人眼取景寬度,其采用的解決方案是在顯示器與人眼之間放置一塊凸透鏡,人眼通過透鏡能夠觀察到的虛擬世界會比實際顯示器屏幕大了很多。然而,透鏡的存在會造成圖像的色差與桶形失真,因此,為了抵消桶形失真,需要將圖像經過畸變校正之后再渲染在顯示器屏幕上。
對人眼視覺系統(tǒng)特性的研究表明,人眼對所觀察到場景的不同區(qū)域的視覺靈敏度是有所差異的。在視覺系統(tǒng)中,視網膜中心凹區(qū)域是視覺最敏銳的區(qū)域,因此,人眼對投射到該區(qū)域的場景光線最為敏感,而對于其他場景區(qū)域的關注度則相對較低。簡而言之,位于人眼視線中心凹視區(qū)域的物體具有最高的關注度,并且關注度隨著物體偏離視線方向的程度呈下降趨勢。
相關技術中,英偉達提供了一種基于多分辨率著色的技術,其將屏幕劃分為九個部分,除了中間位置的主要部分采用原精度渲染以外,其余部分均降低渲染的分辨率。然后,在降低周圍部分的精度之后,再將周圍部分拉伸到原來的大小。這樣即可完成多分辨率著色(即中心部分與周圍部分渲染的分辨率不同)。
然而,由于英偉達是在硬件層面提出的上述解決方案,因此,該技術只支持英偉達自身推出的顯卡,由此便會限制智能移動終端VR無法使用這項技術。
針對上述的問題,目前尚未提出有效的解決方案。
技術實現要素:
本發(fā)明實施例提供了一種圖像處理方法及裝置,以至少解決相關技術中需要依賴增加特定類型硬件來優(yōu)化VR渲染效率,成本較高,使用局限性較強的技術問題。
根據本發(fā)明實施例的一個方面,提供了一種圖像處理方法,包括:
根據單眼敏感度的視覺差異特性將待顯示圖像劃分為顯示區(qū)域與遮擋區(qū)域;剔除遮擋區(qū)域內與預先配置的遮擋部件對應的像素;對遮擋區(qū)域進行模糊化處理并對顯示區(qū)域與處理后的遮擋區(qū)域進行桶形畸變處理;將經過處理的待顯示圖像輸出至屏幕上。
可選地,剔除遮擋區(qū)域內與遮擋部件對應的像素包括:將遮擋部件放置于應用場景下全部待渲染物體之前最靠近相機的位置處;采用遮擋部件的初始深度值剔除待遮擋的片元;按照遮擋部件的初始顏色值設置待遮擋的片元的顏色。
可選地,對遮擋區(qū)域進行模糊化處理包括:選取步驟,從遮擋區(qū)域選取待插值像素,其中,待插值像素的顏色是根據初始顏色值確定的;第一處理步驟,獲取與待插值像素相鄰的上方、下方、左方、右方、左上方、右上方、左下方和右下方的八個像素,對八個像素的顏色值執(zhí)行求取平均值運算得到插值結果,以及將初始顏色值調整至插值結果;判斷步驟,判斷是否還存在尚未處理的待插值像素,如果存在,則返回選取步驟。
可選地,在第一處理步驟之后,還包括:第二處理步驟,對八個像素的顏色值和插值結果執(zhí)行卷積運算,得到卷積結果,以及根據卷積結果對八個像素的顏色值和初始顏色值進行調整。
可選地,對顯示區(qū)域與處理后的遮擋區(qū)域進行桶形畸變處理包括:根據齊次裁剪空間坐標對應的第一取值范圍將待顯示圖像所采用的空間坐標變換至齊次裁剪空間坐標;利用變換后的齊次裁剪空間坐標執(zhí)行桶形畸變運算,得到運算結果;根據待顯示圖像所采用的空間坐標對應的第二取值范圍將運算結果變換回待顯示圖像所采用的空間坐標。
根據本發(fā)明實施例的另一方面,還提供了一種圖像處理裝置,包括:
劃分模塊,用于根據單眼敏感度的視覺差異特性將待顯示圖像劃分為顯示區(qū)域與遮擋區(qū)域;剔除模塊,用于剔除遮擋區(qū)域內與預先配置的遮擋部件對應的像素;處理模塊,用于對遮擋區(qū)域進行模糊化處理并對顯示區(qū)域與處理后的遮擋區(qū)域進行桶形畸變處理;顯示模塊,用于將經過處理的待顯示圖像輸出至屏幕上。
可選地,剔除模塊包括:配置單元,用于將遮擋部件放置于應用場景下全部待渲染物體之前最靠近相機的位置處;剔除單元,用于采用遮擋部件的初始深度值剔除遮擋區(qū)域內對應的待遮擋的片元;設置單元,用于按照遮擋部件的初始顏色值設置待遮擋的片元的顏色。
可選地,處理模塊包括:選取單元,用于從遮擋區(qū)域選取待插值像素,其中,待插值像素的顏色是根據初始顏色值確定的;第一處理單元,用于獲取與待插值像素相鄰的上方、下方、左方、右方、左上方、右上方、左下方和右下方的八個像素,對八個像素的顏色值執(zhí)行求取平均值運算得到插值結果,以及將初始顏色值調整至插值結果;判斷單元,用于判斷是否還存在尚未處理的待插值像素,如果存在,則返回選取單元。
可選地,處理模塊還包括:第二處理單元,用于對八個像素的顏色值和插值結果執(zhí)行卷積運算,得到卷積結果,以及根據卷積結果對八個像素的顏色值和初始顏色值進行調整。
可選地,處理模塊包括:第一變換單元,用于根據齊次裁剪空間坐標對應的第一取值范圍將待顯示圖像所采用的空間坐標變換至齊次裁剪空間坐標;計算單元,用于利用變換后的齊次裁剪空間坐標執(zhí)行桶形畸變運算,得到運算結果;第二變換單元,用于根據待顯示圖像所采用的空間坐標對應的第二取值范圍將運算結果變換回待顯示圖像所采用的空間坐標。
在本發(fā)明實施例中,采用根據單眼敏感度的視覺差異特性將待顯示圖像劃分為顯示區(qū)域與遮擋區(qū)域的方式,通過剔除遮擋區(qū)域內與預先配置的遮擋部件對應的像素,對遮擋區(qū)域進行模糊化處理并對顯示區(qū)域與處理后的遮擋區(qū)域進行桶形畸變處理,以及將經過處理的待顯示圖像輸出至屏幕上,達到了利用非中心凹視區(qū)像素剔除結合模糊化處理與畸變運算技術,在不明顯降低視覺效果的基礎上提升了VR游戲的渲染性能的目的,從而實現了減少渲染片元的數量,緩解片元著色器的渲染壓力,優(yōu)化VR渲染性能的技術效果,進而解決了相關技術中需要依賴增加特定類型硬件來優(yōu)化VR渲染效率,成本較高,使用局限性較強的技術問題。
附圖說明
此處所說明的附圖用來提供對本發(fā)明的進一步理解,構成本申請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構成對本發(fā)明的不當限定。在附圖中:
圖1是根據本發(fā)明實施例的圖像處理方法的流程圖;
圖2是根據本發(fā)明優(yōu)選實施例的渲染管線示意圖;
圖3是根據本發(fā)明優(yōu)選實施例的剔除待遮擋的片元得到的效果示意圖;
圖4是根據本發(fā)明優(yōu)選實施例的對待顯示圖像進行模糊化處理前后的對比效果示意圖;
圖5是根據本發(fā)明優(yōu)選實施例的桶形畸變坐標變換過程示意圖;
圖6是根據本發(fā)明優(yōu)選實施例的在完成桶形畸變處理后得到的最終效果示意圖;
圖7是根據本發(fā)明實施例的圖像處理裝置的結構框圖;
圖8是根據本發(fā)明優(yōu)選實施例的圖像處理裝置的結構框圖。
具體實施方式
為了使本技術領域的人員更好地理解本發(fā)明方案,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分的實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應當屬于本發(fā)明保護的范圍。
需要說明的是,本發(fā)明的說明書和權利要求書及上述附圖中的術語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應該理解這樣使用的數據在適當情況下可以互換,以便這里描述的本發(fā)明的實施例能夠以除了在這里圖示或描述的那些以外的順序實施。此外,術語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產品或設備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或對于這些過程、方法、產品或設備固有的其它步驟或單元。
根據本發(fā)明實施例,提供了一種圖像處理方法的實施例,需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機可執(zhí)行指令的計算機系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
圖1是根據本發(fā)明實施例的圖像處理方法的流程圖,如圖1所示,該方法包括如下步驟:
步驟S12,根據單眼敏感度的視覺差異特性將待顯示圖像劃分為顯示區(qū)域與遮擋區(qū)域;
步驟S14,剔除遮擋區(qū)域內與預先配置的遮擋部件對應的像素;
步驟S16,對遮擋區(qū)域進行模糊化處理并對顯示區(qū)域與處理后的遮擋區(qū)域進行桶形畸變處理;
步驟S18,將經過處理的待顯示圖像輸出至屏幕上。
通過上述步驟,采用根據單眼敏感度的視覺差異特性將待顯示圖像劃分為顯示區(qū)域與遮擋區(qū)域的方式,通過剔除遮擋區(qū)域內與預先配置的遮擋部件對應的像素,對遮擋區(qū)域進行模糊化處理并對顯示區(qū)域與處理后的遮擋區(qū)域進行桶形畸變處理,以及將經過處理的待顯示圖像輸出至屏幕上,達到了利用非中心凹視區(qū)像素剔除結合模糊化處理與畸變運算技術,在不明顯降低視覺效果的基礎上提升了VR游戲的渲染性能的目的,從而實現了減少渲染片元的數量,緩解片元著色器的渲染壓力,優(yōu)化VR渲染性能的技術效果,進而解決了相關技術中需要依賴增加特定類型硬件來優(yōu)化VR渲染效率,成本較高,使用局限性較強的技術問題。
由于VR游戲對性能有較高的要求,為了在保證視覺效果的基礎上實現高效的渲染,本發(fā)明基于人眼視覺系統(tǒng)的特性,通過緩解片元著色器的渲染壓力,本發(fā)明優(yōu)選實施例在軟件級別提供了一種針對VR游戲渲染的優(yōu)化方案,使得VR的渲染流程更加優(yōu)化,從而在確保畫質不會過分損失的情況下,使得性能得到最大地優(yōu)化。
為此,在本發(fā)明實施例所提供的技術方案中,渲染管線需要支持Early-Z技術。圖2是根據本發(fā)明優(yōu)選實施例的渲染管線示意圖,如圖2所示,Early-Z技術的渲染管線位于片元著色器之前,可以執(zhí)行一次深度檢測操作,從而剔除部分片元,使其無法進行片元著色器的計算。由于目前智能移動終端(例如:智能手機)的渲染瓶頸主要集中在片元著色器上(其原因在于手機的分辨率極高,通常為2k-2.5k,而片元著色器是逐像素進行運算的,因此,片元著色器是手機應用的渲染瓶頸點),通過Early-Z提前進行深度檢測使得一部分片元無法通過片元著色器而被丟棄,而伴隨著片元的數量的減少,那么需要片元著色器處理的像素也隨之減少,從而能夠有效地優(yōu)化渲染的性能。
深度檢測是指對所有片元的深度值依次與深度緩存中的深度值進行比較,當片元的深度大于(既離相機更遠)深度緩存中的深度值時,該片元則被舍棄(當然,具體的舍棄條件可以自行設置,在通常情況下默認是大于深度緩存中的深度值則被舍棄??紤]到近處物體遮擋遠處物體,故在優(yōu)選實施例中采用大于深度緩存中的深度值則被舍棄)。通過在片元著色器之前執(zhí)行深度檢測對片元進行篩選,可以有效地減少片元著色器著色的片元數量。
需要說明的是,根據GPU流水管線處理的階段不同,其處理的基本單位也存在差異,例如:頂點著色器負責處理頂點和向量,而片元著色器負責處理的基本單位便是片元。片元可以理解為一個三角形(之前存在關聯(lián)的頂點作為三角形的三個頂點,該關聯(lián)關系是在3D建模的時候通過建模工具確定的,并且其形狀均為三角形,換言之,模型是由多個三角形面組成的)及其所包圍的所有像素以及每個像素的各項參數(三角形設置階段會確定三角形三條邊的函數,三角形遍歷階段會通過這三個函數確定其包含哪些像素。這兩個階段結束后真正需要使用的是包含的像素以及像素的參數,即為片元著色器所處理的片元)。片元著色器處理的單位是片元,但是運算過程中的最小單位則是像素。換言之,進入片元著色器的雖然是片元,但是每個片元在被片元著色器處理時,則真正處理的是像素,因此,片元著色器有時又被稱為像素著色器(Pixel Shader)。
在VR當中,由于屏幕與人眼之間的距離非常近,同時人眼的移動范圍又是有限的,這便使得在VR渲染的單眼圖像中,只有中心的部分才會被人眼時刻注意,而邊緣部分并不會被過分注意。因此,對于邊緣部分,降低渲染的像素精度,并不會造成視覺上的影響。
可選地,在步驟S14中,剔除遮擋區(qū)域內包含的像素可以包括以下執(zhí)行步驟:
步驟S141,將遮擋部件放置于應用場景下全部待渲染物體之前最靠近相機的位置處;
步驟S142,采用遮擋部件的初始深度值剔除待遮擋的片元;
步驟S143,按照遮擋部件的初始顏色值設置待遮擋的片元的顏色。
為了實現上述目的,通過程序或者美術生成一個遮擋部件(例如:遮擋板),其中間區(qū)域被挖空,這個遮擋板用于剔除上述不被人眼充分注意到的部分區(qū)域像素。遮擋板是指在3D相機前擺放一塊模型板,其目的在于:使得一部分被該遮擋板擋住的片元在Early-Z執(zhí)行深度檢測時,由于條件不成立而無法通過。具體地,若希望使得條件不成立,則在與深度緩存比較深度值時,需要確保片元的深度值大于深度緩存的深度值才會被舍棄。那么,只需將遮擋板調整至與相機之間的距離足夠近,并且在所有正常渲染的片元之前被渲染,即為了第一個寫入深度緩存,由此便能夠實現被擋板擋住的片元被舍棄。遮擋版實際上只是剔除中心外面的一圈像素,即外圈像素。
Z-Test通常會配合Z-Write加以使用,Z-Test即為前述在默認情況下大于深度緩存中的深度值則被舍棄,而小于深度緩存中的深度值則會通過,進入下一階段。在通過的片元中通過設置Z-Write(On或者Off),來確定這些通過的片元是否需要將這個片元的深度值覆蓋寫入深度緩存中。在默認情況下,需要寫入深度緩存中,即深度緩存中存儲的深度值會逐漸變小,由此為后面的遮擋板剔除奠定基礎。
另外,深度緩存是基于像素而言的,但是片元可以包含多個像素(其包含的像素還可能會發(fā)生重復,即片元可以發(fā)生重疊,并且每個像素的深度值可能不同),故而在執(zhí)行深度檢測時,片元的深度值通常采用中心像素的深度值。
以Unity引擎為例,其剔除原理如下:
1)需要確保遮擋板部分在渲染隊列的第一個,需要設置如下標簽:
Tags{"RenderType"=”Transparent""Queue"="Background-1"}
渲染隊列是指全部渲染的物體都需要排隊,依次被GPU渲染,那么便可以對這些物體進行編號,其規(guī)則為編號越小則優(yōu)先被渲染。上述RenderType表示類型,設置為透明是為了使得存在遮擋板的部分顯示為特定顏色(例如:黑色,其透明度值為零),而其他部分均被正常渲染。Queue表示隊列的編號,Background的初始值設置為1000。在正常情況下是不會設置小于999的。由此便能夠確保該遮擋板用來實現遮擋的部分最先寫入深度緩存,并且因為距離相機很近(通過人為設置),所以,該遮擋板所遮擋的片元均無法通過深度檢測。
2)確保遮擋板可以下入深度緩存,需要進行如下設置:
ZWrite On
即遮擋板未遮擋的部分片元可以寫入深度值,該遮擋板用來實現遮擋的部分片元,將遮擋板的深度值寫入深度緩存。
3)遮擋板部分向顏色緩存寫入顏色值(0,0,0,0),其代碼示例如下:這段代碼表示一個完整的片元著色器;
fixed4 frag(v2f i):SV_Target
{
return fixed4(0.0,0.0,0.0,0.0);
}
顏色緩存與深度緩存類似,即每個像素對應一個顏色緩存的值,該顏色緩存負責存放當前像素的顏色,在一幀完成后,顏色緩存會直接渲染到屏幕上。
目前,GPU均包括兩個顏色緩存,被稱為前緩存與后緩存,其中,前緩存用于在屏幕上進行顯示,而后緩存則用于參與GPU的各種渲染運算。當運算完成后,會交換前緩存與后緩存的值,因為在運算過程中會改變后緩存的值,但是后緩存并未直接顯示在屏幕上,所以用戶看不到。
圖3是根據本發(fā)明優(yōu)選實施例的剔除待遮擋的片元得到的效果示意圖,如圖3所示,圖像中的圓形空白區(qū)域為上述顯示區(qū)域,其用于展示應用場景下實際待渲染的物體;圓形空白區(qū)域外的網格區(qū)域為上述遮擋區(qū)域(包括:交替規(guī)則排列的顯示為黑色的片元與未顯示為黑色的片元),其中,全部顯示為黑色的片元構成上述遮擋板。
需要說明的是,圖3中所示的顯示區(qū)域的形狀與遮擋板的配置方式僅為優(yōu)選示例,其并不構成對本發(fā)明的不當限制,該顯示區(qū)域還可以為其他形狀(例如:正方形),該遮擋板還可以采用其他排列方式。
通過深度檢測階段的片元的RGBA值會變成(0,0,0,0)來表示無顏色像素,之所以稱為無色是因為其RGBA四個值都是0(通常色彩是通過三原色紅(Red)綠(Green)藍(Blue)的量來描述的,而阿爾法(Alpha)則表示透明度),即透明度為0的黑色可以稱為無色,遮擋板的遮擋部分全部會變成無顏色,其原因在于:設置成無顏色是為了與黑色加以區(qū)分,考慮到游戲環(huán)境下很可能存在黑色的物件,但基本上不可能存在透明的黑色)。當其他的物體被渲染時,由于遮擋板已經寫入深度緩存,其他物體被遮擋板擋住的部分便不會被渲染,將顯示顏色值為(0,0,0,0)。最終,左眼與右眼分別輸出一張貼圖,被用于渲染雙眼的圖像。
可選地,在步驟S16中,對遮擋區(qū)域進行模糊化處理可以包括以下執(zhí)行步驟:
步驟S161,從遮擋區(qū)域選取待插值像素,其中,待插值像素的顏色是根據初始顏色值確定的;
步驟S162,獲取與待插值像素相鄰的上方、下方、左方、右方、左上方、右上方、左下方和右下方的八個像素,對八個像素的顏色值執(zhí)行求取平均值運算得到插值結果,以及將初始顏色值調整至插值結果;
步驟S163,判斷是否還存在尚未處理的待插值像素,如果存在,則返回選取步驟S161。
圖4是根據本發(fā)明優(yōu)選實施例的對待顯示圖像進行模糊化處理前后的對比效果示意圖,如圖4所示,對于輸出的貼圖在進行桶形畸變之前,對每個圖像分別將顏色為(0,0,0,0)的部分進行插值運算,即可使得周圍的像素模糊化。
插值運算即表示選取與透明的黑色(0,0,0,0)的像素相鄰的上、下、左、右、左上、右上、左下、右下的像素的顏色(不為透明的黑色,可以通過手動調整參數保證),然后對這8個染色取平均值,并將這個值賦予這個無顏色的像素,此過程被稱為線性插值。
這里需要指出的是,圖4所示的效果對比示意圖僅是為了描述在渲染階段中圖像在經過模糊處理后得到的模糊結果。在優(yōu)選實施例中,為了優(yōu)化VR渲染性能,需要將模糊處理與畸變處理加以合并,換言之,對先前輸入的圖像先進行模糊運算,其結果并不直接輸出(即圖4所示的模糊結果并不會實際出現),而需要再進一步進行畸變運算,由此確保只有存在一個后處理過程,對圖像的采樣次數為1次。
可選地,在步驟S162之后,還可以包括以下執(zhí)行步驟:
步驟S164,對八個像素的顏色值和插值結果執(zhí)行卷積運算,得到卷積結果,以及根據卷積結果對八個像素的顏色值和初始顏色值進行調整。
當然,為了使得顏色更柔和,還可以進行卷積運算,卷積即為對線性插值后的這9個顏色(原來八個顏色加上插值后得到的顏色)進行卷積運算。
卷積運算通常是針對矩陣來使用的。上述八個像素的顏色值加上初始顏色值共九個顏色可以組成3*3的矩陣,其中,初始顏色值位于中間位置,而其余八個像素的顏色值按照選取時的位置進行排列。在對這個矩陣進行卷積計算后會得到一個新的3*3的矩陣(上述九個值均會發(fā)生變化),然后再利用計算得到的新矩陣覆蓋原來的矩陣,由此得到模糊效果。
可選地,在步驟S16中,對顯示區(qū)域與處理后的遮擋區(qū)域進行桶形畸變處理可以包括以下執(zhí)行步驟:
步驟S165,根據齊次裁剪空間坐標對應的第一取值范圍將待顯示圖像所采用的空間坐標變換至齊次裁剪空間坐標;
步驟S166,利用變換后的齊次裁剪空間坐標執(zhí)行桶形畸變運算,得到運算結果;
步驟S167,根據待顯示圖像所采用的空間坐標對應的第二取值范圍將運算結果變換回待顯示圖像所采用的空間坐標。
在優(yōu)選實施例中,將經過插值運算的與左眼與右眼分別對應的兩張貼圖進行桶形畸變處理,其桶形畸變的原理如下(以Unity引擎為例):
圖5是根據本發(fā)明優(yōu)選實施例的桶形畸變坐標變換過程示意圖。圖6是根據本發(fā)明優(yōu)選實施例的在完成桶形畸變處理后得到的最終效果示意圖,如圖5和圖6所示,首先,將圖像的uv坐標(通常標準的uv值在[0,1]這個取值范圍內)左邊變換到NDC,即齊次裁剪空間,其取值范圍為[-1,1],其公式如下(以Unity引擎為例):
xn=(2x-w)/w
yn=(2y-h)/h
其中,x和y表示圖像的橫坐標與縱坐標,即上述uv坐標;w,h表示屏幕的寬與高(即分辨率,也是像素數目,例如:1920*1080),通過該公式可以將任意的xy坐標變換到齊次裁剪空間(即NDC,其坐標范圍在[-1,1]之間)。
對應于上述公式的代碼示例如下:
i.texcoord=(2.0*i.texcoord-1.0)/1.0;
其中,i表示輸入,i.texcoord表示輸入的圖像坐標(即uv坐標,也是xy坐標)。這個代碼可以一次性處理xy,所以兩個公式實際上是相同的運算,就只用一條代碼。
其次,將uv結果導入桶形畸變公式,其公式如下(以Unity引擎為例):
其中,ru為發(fā)生畸變前的半徑值,rd為發(fā)生畸變后的半徑值,α表示畸變度,其取值越大,表示畸變程度越大。
對應于上述公式的代碼示例如下:
floatr=i.texcoord.x*i.texcoord.x+i.texcoord.y*i.texcoord.y;//計算出rd,即xy的平方和開根號計算半徑
uv=i.texcoord/(1.0-_Distortion*r);//將計算出的rd帶入右邊公式進行一次畸變,_Distortion代表畸變度α
uv=uv/(1.0-_Distortion*(uv.x*uv.x+uv.y*uv.y));//對結果再進行一次畸形,其目的在于:使得畸變的圖形更加飽滿,效果更好。
再次,將畸變后的uv變換回原來的坐標空間[0,1],其代碼示例如下(以Unity引擎為例):
i.texcoord=(uv+1.0)*1.0/2.0;
然后,再將uv坐標范圍超過uv的部分顯示為黑色,其代碼示例如下(以Unity引擎為例):
如上所述,通常標準的uv值在[0,1]這個取值范圍內,因此,在該取值范圍的部分便可以正常圖像內容,而在該取值范圍外的部分便需要顯示為黑色。
在桶形畸變完成后,將結果輸出至相機上便可完成整個流程。
需要說明的是,桶形畸變是將一個矩形的四條邊向外拉伸的一種變形,雖然其數學模型存在多種形式,但是基本思想均是對四邊形的四條邊進行曲線化處理,從而使得曲線向外突出,其中,較為精確的計算方式是采用泰勒公式進行曲線擬合。在上述優(yōu)選實施例中,采用的是經過簡化的泰勒公式,其目的在于:降低運算量。
運用桶形畸變實際上是為了抵抗透鏡對屏幕的變形,VR的透鏡屬于凸透鏡,如同魚眼相機。這樣的透鏡可以使得用戶看到的角度增大(正常人眼最多能夠觀察到前方220度范圍內的成像,而如果不使用凸透鏡,即便屏幕無限接近于人眼也僅能夠觀察到前方180度范圍內的成像,所以必須使用凸透鏡)。然而,使用這種凸透鏡會使得通過透鏡看到的屏幕變形,通常凸透鏡對屏幕的變形會使得屏幕向內凹陷,而桶形畸變則可以使得圖像向外突出,其正好可以抵消凸透鏡所帶來的變形。
此外,還需要說明的是,上述剔除操作是針對3D模型進行的,即,在GPU渲染階段的Early-Z進行的。而在執(zhí)行上述模糊時,GPU的渲染流程已經完成,換言之,GPU已經輸出了整個圖像。VR渲染實際上是需要區(qū)分左眼與右眼的,左眼與右眼分別對應一個圖像,然后再將兩個圖像一起被渲染到屏幕上,即,存在三個完整的GPU渲染階段。而模糊是對左眼與右眼的渲染流程完成之后,針對輸出的左眼與右眼對應的圖像分別執(zhí)行模糊處理。進一步地,上述畸變處理與模糊處理相類似,需要在對左眼與右眼分別進行模糊處理之后,再分別對這兩個圖像進行畸變處理。最終,再將兩張經過畸變處理的分別與左眼與右眼對應的圖像拼接成雙眼圖像顯示到屏幕上。
另外,上述提到的渲染流程與渲染階段是存在區(qū)別的,渲染流程結束代表輸出一個圖像,但這個渲染階段還并未結束,之后進行的模糊處理和畸變處理均被成為后處理(后處理都是輸入一個圖像,在運算結束后再輸出一個圖像),直至全部后處理執(zhí)行完畢再輸出一個圖像,此時一個完整的渲染階段才執(zhí)行完畢。
綜上所述,本發(fā)明實施例所提供的技術方案基于人眼敏感度視覺區(qū)域差異這一視覺特性,利用非中心凹視區(qū)域的像素剔除再結合插值運算與畸變運算技術,在未明顯降低視覺效果的前提下提升VR應用的渲染性能。具體地,非中心凹視區(qū)域的像素剔除與插值可以劃分為以下兩個階段:
第一階段,像素剔除,在渲染流水線Early-Z階段利用深度檢測剔除非中心凹視區(qū)域的像素,其結果用于優(yōu)化VR應用的渲染性能。
第二階段,像素插值,在圖像后處理階段中,對被剔除像素的鄰域像素顏色進行采樣并插值,將插值結果作為被剔除像素的顏色,再經過桶形畸變處理,最終顯示在屏幕中,其結果用于確保對人眼視覺不會產生不良影響。
為了緩解片元著色器的渲染壓力,通過執(zhí)行像素剔除操作能夠有效地減少GPU在片元著色器階段需要處理的片元數量,并且將顏色插值與桶形畸變統(tǒng)一整合到一次后處理過程中,從而有效地減少了渲染片元的數量以及后處理的采樣次數,優(yōu)化了VR渲染的性能,大約可以提升3-6%的運算效率(伴隨著片元著色器的性能壓力增大而增大)。
根據本發(fā)明實施例,提供了一種圖像處理裝置的實施例,圖7是根據本發(fā)明實施例的圖像處理裝置的結構框圖,如圖7所示,該裝置可以包括:劃分模塊10,用于根據單眼敏感度的視覺差異特性將待顯示圖像劃分為顯示區(qū)域與遮擋區(qū)域;剔除模塊20,用于剔除遮擋區(qū)域內與預先配置的遮擋部件對應的像素;處理模塊30,用于對遮擋區(qū)域進行模糊化處理并對顯示區(qū)域與處理后的遮擋區(qū)域進行桶形畸變處理;顯示模塊40,用于將經過處理的待顯示圖像輸出至屏幕上。
可選地,如圖8所示,剔除模塊20可以包括:配置單元200,用于將遮擋部件放置于應用場景下全部待渲染物體之前最靠近相機的位置處;剔除單元202,用于采用遮擋部件的初始深度值剔除遮擋區(qū)域內對應的待遮擋的片元;設置單元204,用于按照遮擋部件的初始顏色值設置待遮擋的片元的顏色。
可選地,如圖8所示,處理模塊30可以包括:選取單元300,用于從遮擋區(qū)域選取待插值像素,其中,待插值像素的顏色是根據初始顏色值確定的;第一處理單元302,用于獲取與待插值像素相鄰的上方、下方、左方、右方、左上方、右上方、左下方和右下方的八個像素,對八個像素的顏色值執(zhí)行求取平均值運算得到插值結果,以及將初始顏色值調整至插值結果;判斷單元304,用于判斷是否還存在尚未處理的待插值像素,如果存在,則返回選取單元。
可選地,如圖8所示,處理模塊30還可以包括:第二處理單元306,用于對八個像素的顏色值和插值結果執(zhí)行卷積運算,得到卷積結果,以及根據卷積結果對八個像素的顏色值和初始顏色值進行調整。
可選地,如圖8所示,處理模塊30可以包括:第一變換單元308,用于根據齊次裁剪空間坐標對應的第一取值范圍將待顯示圖像所采用的空間坐標變換至齊次裁剪空間坐標;計算單元310,用于利用變換后的齊次裁剪空間坐標執(zhí)行桶形畸變運算,得到運算結果;第二變換單元312,用于根據待顯示圖像所采用的空間坐標對應的第二取值范圍將運算結果變換回待顯示圖像所采用的空間坐標。
上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
在本發(fā)明的上述實施例中,對各個實施例的描述都各有側重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關描述。
在本申請所提供的幾個實施例中,應該理解到,所揭露的技術內容,可通過其它的方式實現。其中,以上所描述的裝置實施例僅僅是示意性的,例如所述單元的劃分,可以為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個單元上??梢愿鶕嶋H的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現,也可以采用軟件功能單元的形式實現。
所述集成的單元如果以軟件功能單元的形式實現并作為獨立的產品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中?;谶@樣的理解,本發(fā)明的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可為個人計算機、服務器或者網絡設備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:U盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質。
以上所述僅是本發(fā)明的優(yōu)選實施方式,應當指出,對于本技術領域的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發(fā)明的保護范圍。