本發(fā)明涉及一種利用局部保守光柵化方法實現硬陰影反走樣的方法,屬于3d真實感圖形學技術領域。
背景技術:
真實感圖像生成是計算機圖形學重要研究內容之一,也是虛擬現實、混合現實技術的重要組成部分。陰影效果能極大增強虛擬場景的真實感,是虛擬場景中最重要的視覺元素。目前,可交互的陰影繪制技術主要包括:光線跟蹤技術、基于幾何體的技術和基于圖像的技術。其中,基于圖像技術的陰影圖(shadowmap,sm)算法是目前應用最廣泛的方法,該方法利用場景表面可見點的離散深度圖測試采樣點的深度,算法的計算時間獨立于場景的復雜性,是目前圖形硬件支持最廣泛的實時陰影繪制技術。陰影圖算法包括繪制階段:首先,從光源視角發(fā)射若干條離散光線,計算光線與場景前表面的第一個交點,將最短距離dz存儲在z-buffer中,構成陰影圖;然后,從相機視角(view/cameraspace)繪制場景,計算光源到屏幕每個像素對應場景點的距離dp,并比較dp與陰影圖中對應坐標存儲的深度值dz,當dp>dz時,說明采樣點不能被光源直接照射,即處于陰影之中(見附圖1)。陰影圖算法效率高,但是容易產生產生鋸齒狀陰影邊界。其主要原因是陰影圖的分辨率與屏幕空間的分辨率不匹配。因此,基于陰影圖技術的陰影反走樣研究是該技術的關鍵。保守光柵化(conservativerasterization)方法由hasselgren提出(見附圖2),該方法通過三角形擴展算法,實現對每個有圖元經過的像素都執(zhí)行光柵化操作。對全部陰影區(qū)域執(zhí)行保守光柵化操作的增加了計算復雜性,根據觀察發(fā)現,硬陰影的邊界走樣發(fā)生在陰影圖的深度不連續(xù)區(qū)域,因此,本發(fā)明提出了一種局部保守光柵化方法的硬陰影反走樣方法,本方法通過對深度不連續(xù)區(qū)域進行識別,然后只對深度不連續(xù)區(qū)域執(zhí)行保守光柵化操作,實現局部優(yōu)化,進而改進繪制效率和效果。首先,方法對陰影圖深度值進行分析,利用牛頓二階差分識別陰影圖的深度連續(xù)區(qū)域和不連續(xù)區(qū)域。然后,構造幾何陰影圖,對深度不連續(xù)區(qū)域采用保守光柵化方法存儲表面可見幾何面片的頂點,使得有圖元經過的像素均能被光柵化生成片元;而對于深度連續(xù)的陰影內部區(qū)域,則采用非保守光柵化的幾何陰影圖方法。最后,利用幾何陰影圖的連續(xù)深度測試,以及邊界恢復算法,快速實現準確的陰影反走樣繪制。
技術實現要素:
本發(fā)明的目的在于提供一種利用局部保守光柵化方法實現硬陰影反走樣的方法,其有效的降低了保守光柵化幾何陰影圖方法的計算的復雜度,而且保持了亞像素級硬陰影反走樣的精度問題。
本發(fā)明的技術方案是這樣實現的:一種利用局部保守光柵化方法實現硬陰影反走樣的方法,其特征在于:構建光源為視點的陰影圖,利用牛頓二階差分測試深度的連續(xù)性,將陰影圖分為連續(xù)區(qū)域ca和不連續(xù)區(qū)域da。再次以光源為視點,抽取三維場景表面可見三角面片信息,存儲三角形的頂點信息f,對不連續(xù)區(qū)域da實施保守光柵化方法,對連續(xù)區(qū)域ca保留其離散深度值,構造深度圖t2。根據紋素坐標保持兩個深度圖的對應關系,其過程可描述為:原始深度圖t1,其分辨率為nxn,紋素坐標表示為t1i,j,其中1
步驟1、設三維虛擬場景點光源位置為l,生成以光源位置l為視點的分辨率為nxn的陰影圖s。對與s中的離散深度值,執(zhí)行牛頓二階差分測試,分別按照水平方向和垂直方向以及對角線方向對陰影圖的深度值進行檢測,當水平方向和垂直方向及對角線方向的二階牛頓差分
設矩陣
其中,n為陰影圖大小。設
步驟2、再次以光源位置l為視點,開啟深度測試生成前表面可見圖元;
步驟3、識別、抽取可見圖元信息,壓縮存儲三角形頂點坐標,在一個128位的紋理存儲單元中,32位rgb分量存儲三角形的2d頂點坐標v0.xy,v1.xy,v2.xy根據頂點坐標計算三角形法向量,用于深度重建,16位用于存儲三角形面片深度及三角形id信息,16位存儲三角形斜率,用于計算任意采樣點深度值。
步驟4、壓縮存儲紋素中心深度,法向量及三角形id。完成抽取場景表面可見三角面片,存儲三角形頂點坐標及其中心深度值dc,形成與s相同尺寸的幾何陰影圖g。
步驟5、構建s與g的坐標對應關系,由于s與g的大小相同(分辨率均為nxn),通過坐標建立對應關系。識別出g中的深度不連續(xù)區(qū)域范圍da。對da內的幾何面片(三角形)開啟保守光柵化操作,通過三角形擴展算法,使得對每個有圖元經過的像素都執(zhí)行光柵化操作。對于ca區(qū)域,則直接保持其幾何陰影圖及紋素中心坐標的離散深度值。
步驟6、深度重建,將視角轉換到相機(觀察者),繪制屏幕像素對應的場景采樣點,根據采樣點在光照空間對應的投影三角形
步驟7、深度比較,計算光源到屏幕每個像素對應場景點的距離dp,比較dp與陰影圖中對應坐標存儲的深度值dz(即重建的深度
步驟8、邊界恢復,為了防止細小三角形面皮的缺失,再結合已有的邊界恢復方法,完成反走樣繪制。
通過以上步驟可以實現精確的硬陰影邊界的亞像素級反走樣繪制,同時提高繪制效率。
本發(fā)明的積極效果是可以提高亞像素級幾何陰影圖算法的繪制效率,減少了光柵化階段的像素計算量,提高了傳統陰影圖算法的繪制效果。該方法在三維虛擬場景繪制,尤其是動態(tài)虛擬場景繪制中,對實時性和效果要求較高的環(huán)境下具有實際價值,可以用在影視動漫渲染和計算機仿真中。
附圖說明
圖1陰影圖算法陰影繪制原理圖。
圖2保守光柵化功能示意圖。
圖3為rgba緩存存儲結構。
圖4表面可見幾何圖元抽取示意圖。
具體實施方式
下面結合附圖對本發(fā)明做進一步的描述:一種利用局部保守光柵化方法實現硬陰影反走樣的方法,其特征在于:構建光源為視點的陰影圖如圖1的深度圖,利用牛頓二階差分測試深度的連續(xù)性,將陰影圖分為連續(xù)區(qū)域ca和不連續(xù)區(qū)域da。再次以光源為視點,抽取三維場景表面可見三角面片信息,存儲三角形的頂點信息f,對不連續(xù)區(qū)域da實施保守光柵化方法,對連續(xù)區(qū)域ca保留其離散深度值,根據紋素坐標保持兩個深度圖的對應關系,即將原始深度圖存儲為紋理圖t1,分辨率為nxn,紋素坐標分別為tij其中,1
設矩陣
其中,n為陰影圖大小,
步驟2、再次以光源位置l為視點,開啟深度測試生成前表面可見圖元;
步驟3、識別、抽取可見圖元信息,壓縮存儲三角形頂點坐標,在一個128位的紋理存儲單元中,32位rgb分量存儲三角形的2d頂點坐標v0.xy,v1.xy,v2.xy根據頂點坐標計算三角形法向量,用于深度重建,16位用于存儲三角形面片深度及三角形id信息,16位存儲三角形斜率,用于計算任意采樣點深度值。
步驟4、壓縮存儲紋素中心深度,法向量及三角形id。如圖3所示,完成抽取場景表面可見三角面片,存儲三角形頂點坐標及其中心深度值dc,形成與s相同尺寸的幾何陰影圖g。
步驟5、構建s與g的坐標對應關系,由于s與g的大小相同(分辨率均為nxn),通過坐標建立對應關系。識別出g中的深度不連續(xù)區(qū)域范圍da。對da內的幾何面片(三角形)開啟保守光柵化操作,通過三角形擴展算法,使得對每個有圖元經過的像素都執(zhí)行光柵化操作。對于ca區(qū)域,則直接保持其幾何陰影圖及紋素中心坐標的離散深度值。
步驟6、深度重建,將視角轉換到相機(觀察者),繪制屏幕像素對應的場景采樣點,根據采樣點在光照空間對應的投影三角形
步驟7、深度比較,計算光源到屏幕每個像素對應場景點的距離dp,比較dp與陰影圖中對應坐標存儲的深度值dz(即重建的深度
步驟8、邊界恢復,為了防止細小三角形面片的缺失,結合已有的邊界恢復方法,完成反走樣繪制。