專利名稱:陰影形成方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及圖形處理領(lǐng)域,更具體地涉及一種陰影生成方法和系統(tǒng)。
背景技術(shù):
陰影圖(Shadow Map)是一種基于深度圖(D^th Map)的陰影生成方法,由Lance Williams 于 1978 年在文章"Casting curved shadows oncurved surfaces,,中首次提出。 該方法的主要思想是在第一遍渲染場景時,將場景的深度信息存放在紋理圖片上,這個 紋理圖片稱為深度圖(深度圖是一張二維圖片,其上的每個像素都記錄了從光源到遮擋物 (即陰影生成物體)上的某個采樣點的距離,并且這些像素對于光源而言是“可見的”?!翱?見”像素是指以光源為觀察點,光的方向為觀察方向,設(shè)置觀察矩陣并渲染所有遮擋物,最 終出現(xiàn)在渲染表面上的像素。深度圖中的像素的深度值記為lenthl);然后在第二次渲染 場景時,將深度圖中的信息Iengthl取出,和當(dāng)前采樣點與光源的距離length2做比較,如 果Iengthl小于length2,則說明當(dāng)前采樣點被遮擋處于陰影區(qū),然后在片段著色程序中, 將對應(yīng)于該采樣點的像素設(shè)置為陰影顏色。在傳統(tǒng)的陰影圖方法中,深度圖上的每個像素(下文中稱為可見像素)都記錄了 從光源到遮蓋物上的采樣點的距離(即,像素的深度值)。在第二次渲染場景時,如果將要 渲染的像素不是深度圖中的任意一個可見像素,則這個將要渲染的像素的深度值可以通過 對深度圖中記錄的與該像素相鄰的可見像素的深度值進(jìn)行內(nèi)插得出。由于深度圖中記錄 的各個可見像素的深度值不是線性連續(xù)分布的,所以這種內(nèi)插將導(dǎo)致遮擋物邊緣的混淆效 應(yīng)。圖1示出了傳統(tǒng)的陰影圖方法的示意圖,其中深度圖用來記錄投影平面到光源之 間的遮擋物上的采樣點與光源之間的距離(即,可見像素的深度值)。由于深度圖僅記錄了 與遮擋物上的各個采樣點對應(yīng)的可見像素的深度值,而上述兩個渲染處理的采樣點通常不 同,所以如果第二次渲染場景時某個像素對應(yīng)的采樣點不同于深度圖中的任意一個可見像 素對應(yīng)的采樣點,則第二次渲染場景時該像素的深度值可以通過對深度圖中的多個可見像 素的深度值進(jìn)行線性內(nèi)插得出,即是深度圖中的多個可見像素的深度值的線性內(nèi)插結(jié)果。 但是,如圖1所示,深度圖不是線性連續(xù)函數(shù),這種線性內(nèi)插將導(dǎo)致遮擋物的邊緣的混淆。
發(fā)明內(nèi)容
鑒于以上所述的一個或多個問題,本發(fā)明提供了一種新的陰影生成方法和系統(tǒng)。根據(jù)本發(fā)明實施例的陰影形成方法,包括獲取并記錄需要渲染的場景中的多個 可見像素的深度信息,其中所述多個可見像素中的任意一個可見像素的深度信息包括所述 一個可見像素所在的三角形的各條邊的邊方程系數(shù)以及所述一個可見像素所在的三角形 的各個頂點的深度值,所述三角形是通過對所述需要渲染的場景進(jìn)行三角化形成的;在當(dāng) 前需要渲染的像素不是所述多個可見像素之一時,根據(jù)所述多個可見像素中的一個或多個 可見像素的深度信息獲取所述當(dāng)前需要渲染的像素的深度值;以及在所述當(dāng)前需要渲染的像素的深度值小于所述當(dāng)前需要渲染的像素與光源之間的實際距離時,將所述當(dāng)前需要渲 染的像素渲染成陰影顏色。根據(jù)本發(fā)明實施例的陰影形成系統(tǒng),包括深度信息記錄單元,被配置為獲取并記 錄需要渲染的場景中的多個可見像素的深度信息,其中所述多個可見像素中的任意一個可 見像素的深度信息包括所述一個可見像素所在的三角形的各條邊的邊方程系數(shù)以及所述 一個可見像素所在的三角形的各個頂點的深度值,所述三角形是通過對所述需要渲染的場 景進(jìn)行三角化形成的;深度信息獲取單元,被配置為在當(dāng)前需要渲染的像素不是所述多個 可見像素之一時,根據(jù)所述多個可見像素中的一個或多個可見像素的深度信息獲取所述當(dāng) 前需要渲染的像素的深度值;以及像素渲染執(zhí)行單元,被配置為在所述當(dāng)前需要渲染的像 素的深度值小于所述當(dāng)前需要渲染的像素與光源之間的實際距離時,將所述當(dāng)前需要渲染 的像素渲染成陰影顏色。本發(fā)明通過存儲可見像素所在三角形的三條邊的邊方程系數(shù)和三個頂點的深度 值,而不直接存儲可見像素的深度值,可以解決傳統(tǒng)的陰影圖方法中存在的物體邊緣混淆 的問題。
從下面結(jié)合附圖對本發(fā)明的具體實施方式
的描述中可以更好地理解本發(fā)明,其 中圖1是傳統(tǒng)的陰影圖方法的示意圖;圖2是二維地示出根據(jù)本發(fā)明實施例的陰影形成方法/系統(tǒng)的原理的示意圖;圖3是根據(jù)本發(fā)明實施例的陰影形成方法的流程圖;圖4是根據(jù)本發(fā)明實施例的陰影形成系統(tǒng)的框圖;以及圖5是根據(jù)本發(fā)明實施例的陰影形成方法/系統(tǒng)的應(yīng)用示例的示意圖。
具體實施例方式下面將詳細(xì)描述本發(fā)明各個方面的特征和示例性實施例。下面的描述涵蓋了許多 具體細(xì)節(jié),以便提供對本發(fā)明的全面理解。但是,對于本領(lǐng)域技術(shù)人員來說顯而易見的是, 本發(fā)明可以在不需要這些具體細(xì)節(jié)中的一些細(xì)節(jié)的情況下實施。下面對實施例的描述僅僅 是為了通過示出本發(fā)明的示例來提供對本發(fā)明更清楚的理解。本發(fā)明絕不限于下面所提出 的任何具體配置和算法,而是在不脫離本發(fā)明的精神的前提下覆蓋了相關(guān)元素、部件和算 法的任何修改、替換和改進(jìn)。為了解決圖1所示的傳統(tǒng)的陰影圖方法存在的問題,本發(fā)明提供了一種新穎的陰 影形成方法和系統(tǒng)。圖2是二維地示出根據(jù)本發(fā)明實施例的陰影形成方法/系統(tǒng)的原理的 示意圖。如圖2所示,對于圖1所示場景中的各個可見像素的深度值,可以由以下5個函數(shù) FO (χ) F4 (χ)表示FO (χ) = k0*x+b0,0 ≤ χ ≤ X0Fl (χ) = k^x+bi, X0 ≤ χ ≤ X1F2 (χ) = k2*x+b2, X1 ≤ χ ≤ X2F3 (χ) = k3*x+b3,X2 ≤ χ ≤ X3
F4 (x) = k4*x+b4,χ ^ X3其中,F(xiàn)n(x)表示可見像素所在曲線的曲線方程。En = (kn,bn,Xlri,xn)包括了描 述Fn(X)的充足信息。每個可見像素所在的曲線只有一條,所以每個可見像素的深度值可 以由一個曲線函數(shù)來表示??梢栽谏疃葓D中記錄每個可見像素的曲線函數(shù)信息En(s,t), 其中,s,t是可見像素的位置坐標(biāo)。對于例如圖2中的像素V,在第二次渲染場景時,可以從深度圖讀取可見像素L4和 L5的曲線函數(shù)信息。L4的曲線函數(shù)信息是E0,而L5的曲線函數(shù)是E1。當(dāng)計算像素V的深 度值時,將像素V的坐標(biāo)值χ與FO的適用范圍
和Fl的使用范圍[xO,xl]進(jìn)行比 較,可以確定像素V所屬的曲線函數(shù)。然后可以使用這個曲線函數(shù)來計算像素V的深度值。 使用這種方法,可以解決傳統(tǒng)的陰影圖方法存在的問題。在三維投影處理中,深度圖是一系列的二維函數(shù)fn(x,y)。最接近光源的遮擋物 上的采樣點在深度圖中的相應(yīng)像素位于對遮擋物及其周圍物體組成的場景進(jìn)行渲染的過 程中形成的三角形中(即,在對遮擋物及其周圍物體組成的場景進(jìn)行渲染之前,對遮擋物 及其周圍物體組成的場景進(jìn)行三角化等處理而形成的三角形)。所以可以使用遮擋物上的 采樣點在深度圖中的相應(yīng)像素所在的三角形的各條邊的曲線函數(shù)來創(chuàng)建fn(x,y)。例如, 對于深度圖中的可見像素n,其深度信息可以記錄為En = (a0n, b0n, c0n, aln, bln,cln, a2n, b2n,c2n,d0n, dln,d2n),其中,aO a2,bO b2,cO c2是可見像素η所在的三角形的三 條邊的邊方程系數(shù),d0, dl,d2是可見像素η所在的三角形的三個頂點的深度值。圖3是根據(jù)本發(fā)明實施例的陰影形成方法的流程圖。如圖3所示,該陰影形成方法 包括S302,獲取并記錄需要渲染的場景中的多個可見像素的深度信息,其中所述多個可見 像素中的任意一個可見像素的深度信息包括所述一個可見像素所在的三角形的各條邊的 邊方程系數(shù)以及所述一個可見像素所在的三角形的各個頂點的深度值,所述三角形是通過 對所述需要渲染的場景進(jìn)行三角化形成的;S304,在當(dāng)前需要渲染的像素不是所述多個可 見像素之一時,根據(jù)所述多個可見像素中的一個或多個可見像素的深度信息獲取所述當(dāng)前 需要渲染的像素的深度值;以及S306,在所述當(dāng)前需要渲染的像素的深度值小于所述當(dāng)前 需要渲染的像素與光源之間的實際距離時,將所述當(dāng)前需要渲染的像素渲染成陰影顏色。圖4是根據(jù)本發(fā)明實施例的陰影形成系統(tǒng)的框圖。如圖4所示,該陰影形成系統(tǒng) 包括深度信息記錄單元402、深度信息獲取單元404、以及像素渲染執(zhí)行單元406。深度信息 獲取單元406進(jìn)一步包括像素位置判斷單元4062和像素深度獲取單元4064。具體地,深度信息記錄單元402獲取并記錄需要渲染的場景中的多個可見像素的 深度信息(即,執(zhí)行步驟S302)。深度信息獲取單元404在當(dāng)前需要渲染的像素不是所述多 個可見像素之一時,根據(jù)所述多個可見像素中的一個或多個可見像素的深度信息獲取所述 當(dāng)前需要渲染的像素的深度值(即,執(zhí)行步驟S304)。像素渲染執(zhí)行單元406在所述當(dāng)前需 要渲染的像素的深度值小于所述當(dāng)前需要渲染的像素與光源之間的實際距離時,將所述當(dāng) 前需要渲染的像素渲染成陰影顏色(即,執(zhí)行步驟S306)。像素位置判斷單元4062利用與所述當(dāng)前需要渲染的像素相鄰的四個可見像素所 在的三角形的各條邊的邊方程系數(shù),判斷所述當(dāng)前需要渲染的像素是否處于所述四個可見 像素中的一個或多個可見像素所在的三角形中;像素深度獲取單元4064在所述當(dāng)前需要 渲染的像素僅處于所述四個可見像素中的一個可見像素所在的三角形中的情況下,通過對所述當(dāng)前需要渲染的像素所在的三角形的三個頂點的深度值進(jìn)行內(nèi)插,來獲取所述當(dāng)前需 要渲染的像素的深度值。下面以圖5中所示的示例說明根據(jù)本發(fā)明實施例的陰影形成方法/系統(tǒng)的工作過 程。如圖5所示,深度圖中記錄了 25個可見像素的深度信息,當(dāng)前需要渲染的像素V位于 可見像素LO L3之間(這里的可見像素以及需要渲染的像素的位置都是隨機(jī)描述的,而 不是限制性的)。這里假設(shè),可見像素LO L3分別位于三角形TO T3中。深度圖中記錄的可見 像素 LO L3 的深度信息為(aOp bO” cO” al” bli Cli, a2” b2i c2i dO" dl" (12》,i = 0 3。(a0i; b0i; COi)表示可見像素Li所在的三角形Ti的邊0的邊方程系數(shù),(ali; bli Cli)表示可見像素Li所在的三角形Ti的邊1的邊方程系數(shù),(82,^2,^2,)表示可見像素 Li所在的三角形Ti的邊2的邊方程系數(shù)。ClOi表示可見像素Li所在的三角形Ti的頂點0 的深度值,Clli表示可見像素Li所在的三角形Ti的頂點1的深度值,d2,表示可見像素Li 所在的三角形Ti的頂點2的深度值。為了對當(dāng)前需要渲染的像素V進(jìn)行渲染,需要獲取像素V的深度值。在本實施例 中,在獲取像素V的深度值之前,需要判斷像素V位于與其相鄰的可見像素LO L3中的哪 一個或哪一些可見像素所在的三角形中。假設(shè)像素V的坐標(biāo)為(X,y),可以通過以下處理 來獲取像素V的深度值1)判斷以下各個條件是否成立,如果以下各條件均成立,則認(rèn)為像素V處于可見 像素Li所在的三角形Ti中。aO^x+bO^y+cOi >= 0 ;al^x+bl^y+cli > = 0 ;a2i*x+b2i*y+c2i > = 0 ;2)如果像素V僅位于可見像素Li所在的三角形Ti中,則獲取三角形Ti的三個 頂點的深度值dOydlpC^的內(nèi)插運算結(jié)果Vd(Ti),并將該內(nèi)插運算結(jié)果Vd(Ti)作為像素 V的深度值;如果像素V同時位于可見像素LO L3所在的三角形TO T3中,則分別獲取 三角形TO T3的三個頂點的內(nèi)插運算結(jié)果Vd (TO) Vd (T3),并取Vd (TO) Vd(T3)中的 最小值作為像素V的深度值。3)如果像素V的深度值小于像素V與光源之間的實際距離,則認(rèn)為像素V不在陰 影中;否則認(rèn)為像素V在陰影中,并將像素V渲染為陰影顏色。綜上所述,本發(fā)明通過存儲可見像素所在三角形的三條邊的邊方程系數(shù)和三個頂 點的深度值,而不直接存儲可見像素的深度值,可以解決傳統(tǒng)的陰影圖方法中存在的物體 邊緣混淆的問題。以上已經(jīng)參考本發(fā)明的具體實施例來描述了本發(fā)明,但是本領(lǐng)域技術(shù)人員均了 解,可以對這些具體實施例進(jìn)行各種修改、組合和變更,而不會脫離由所附權(quán)利要求或其等 同物限定的本發(fā)明的精神和范圍。根據(jù)需要可以用硬件或軟件來執(zhí)行步驟。注意,在不脫離本發(fā)明范圍的前提下,可 向本說明書中給出的流程圖添加步驟、從中去除步驟或修改其中的步驟。一般來說,流程圖 只是用來指示用于實現(xiàn)功能的基本操作的一種可能的序列。本發(fā)明的實施例可利用編程的通用數(shù)字計算機(jī)、利用專用集成電路、可編程邏輯器件、現(xiàn)場可編程門陣列、光的、化學(xué)的、生物的、量子的或納米工程的系統(tǒng)、組件和機(jī)構(gòu)來 實現(xiàn)。一般來說,本發(fā)明的功能可由本領(lǐng)域已知的任何手段來實現(xiàn)??梢允褂梅植际交蚵?lián) 網(wǎng)系統(tǒng)、組件和電路。數(shù)據(jù)的通信或傳送可以是有線的、無線的或者通過任何其他手段。還將意識到,根據(jù)特定應(yīng)用的需要,附圖中示出的要素中的一個或多個可以按更 分離或更集成的方式來實現(xiàn),或者甚至在某些情況下被去除或被停用。實現(xiàn)可存儲在機(jī) 器可讀介質(zhì)中的程序或代碼以允許計算機(jī)執(zhí)行上述任何方法,也在本發(fā)明的精神和范圍之 內(nèi)。此外,附圖中的任何信號箭頭應(yīng)當(dāng)被認(rèn)為僅是示例性的,而不是限制性的,除非另 有具體指示。當(dāng)術(shù)語被預(yù)見為使分離或組合的能力不清楚時,組件或者步驟的組合也將被 認(rèn)為是已經(jīng)記載了。
權(quán)利要求
1.一種陰影形成方法,包括獲取并記錄需要渲染的場景中的多個可見像素的深度信息,其中所述多個可見像素中 的任意一個可見像素的深度信息包括所述一個可見像素所在的三角形的各條邊的邊方程 系數(shù)以及所述一個可見像素所在的三角形的各個頂點的深度值,所述三角形是通過對所述 需要渲染的場景進(jìn)行三角化形成的;在當(dāng)前需要渲染的像素不是所述多個可見像素之一時,根據(jù)所述多個可見像素中的一 個或多個可見像素的深度信息獲取所述當(dāng)前需要渲染的像素的深度值;以及在所述當(dāng)前需要渲染的像素的深度值小于所述當(dāng)前需要渲染的像素與光源之間的實 際距離時,將所述當(dāng)前需要渲染的像素渲染成陰影顏色。
2.根據(jù)權(quán)利要求1所述的陰影形成方法,其特征在于,根據(jù)所述多個可見像素中的一 個或多個可見像素的深度信息獲取所述當(dāng)前需要渲染的像素的深度值的處理包括利用與所述當(dāng)前需要渲染的像素相鄰的四個可見像素所在的三角形的各條邊的邊方 程系數(shù),判斷所述當(dāng)前需要渲染的像素是否處于所述四個可見像素中的一個或多個可見像 素所在的三角形中;如果所述當(dāng)前需要渲染的像素僅處于所述四個可見像素中的一個可見像素所在的三 角形中,則通過對所述當(dāng)前需要渲染的像素所在的三角形的三個頂點的深度值進(jìn)行內(nèi)插, 來獲取所述當(dāng)前需要渲染的像素的深度值。
3.根據(jù)權(quán)利要求2所述的陰影形成方法,其特征在于,如果所述當(dāng)前需要渲染的像素 處于所述四個可見像素中的兩個以上可見像素所在的三角形中,則獲取所述當(dāng)前需要渲染 的像素所在的每一個三角形的三個頂點的深度值的內(nèi)插運算結(jié)果,并將所述當(dāng)前需要渲染 的像素所在的三角形的三個頂點的內(nèi)插運算結(jié)果中的最小值作為所述當(dāng)前需要渲染的像 素的深度值。
4.根據(jù)權(quán)利要求2所述的陰影形成方法,其特征在于,當(dāng)所述當(dāng)前需要渲染的像素相 對于一個可見像素所在的三角形的三條邊的邊方程值均不小于零時,判斷出所述當(dāng)前需要 渲染的像素處于所述一個可見像素所在的三角形中。
5.根據(jù)權(quán)利要求1所述的陰影形成方法,其特征在于,在所述當(dāng)前需要渲染的像素是 所述多個可見像素之一時,通過對所述當(dāng)前需要渲染的像素所在的三角形的三個頂點的深 度值進(jìn)行內(nèi)插,來獲取所述當(dāng)前需要渲染的像素的深度值。
6.一種陰影形成系統(tǒng),包括深度信息記錄單元,被配置為獲取并記錄需要渲染的場景中的多個可見像素的深度信 息,其中所述多個可見像素中的任意一個可見像素的深度信息包括所述一個可見像素所在 的三角形的各條邊的邊方程系數(shù)以及所述一個可見像素所在的三角形的各個頂點的深度 值,所述三角形是通過對所述需要渲染的場景進(jìn)行三角化形成的;深度信息獲取單元,被配置為在當(dāng)前需要渲染的像素不是所述多個可見像素之一時, 根據(jù)所述多個可見像素中的一個或多個可見像素的深度信息獲取所述當(dāng)前需要渲染的像 素的深度值;以及像素渲染執(zhí)行單元,被配置為在所述當(dāng)前需要渲染的像素的深度值小于所述當(dāng)前需要 渲染的像素與光源之間的實際距離時,將所述當(dāng)前需要渲染的像素渲染成陰影顏色。
7.根據(jù)權(quán)利要求6所述的陰影形成系統(tǒng),其特征在于,所述深度信息獲取單元包括像素位置判斷單元,被配置為利用與所述當(dāng)前需要渲染的像素相鄰的四個可見像素所 在的三角形的各條邊的邊方程系數(shù),判斷所述當(dāng)前需要渲染的像素是否處于所述四個可見 像素中的一個或多個可見像素所在的三角形中;像素深度獲取單元,被配置為在所述當(dāng)前需要渲染的像素僅處于所述四個可見像素中 的一個可見像素所在的三角形中的情況下,通過對所述當(dāng)前需要渲染的像素所在的三角形 的三個頂點的深度值進(jìn)行內(nèi)插,來獲取所述當(dāng)前需要渲染的像素的深度值。
8.根據(jù)權(quán)利要求7所述的陰影形成系統(tǒng),其特征在于,在所述當(dāng)前需要渲染的像素處 于所述四個可見像素中的兩個以上可見像素所在的三角形中的情況下,所述像素深度獲取 單元獲取所述當(dāng)前需要渲染的像素所在的每一個三角形的三個頂點的深度值的內(nèi)插運算 結(jié)果,并將所述當(dāng)前需要渲染的像素所在的三角形的三個頂點的內(nèi)插運算結(jié)果中的最小值 作為所述當(dāng)前需要渲染的像素的深度值。
9.根據(jù)權(quán)利要求7所述的陰影形成系統(tǒng),其特征在于,當(dāng)所述當(dāng)前需要渲染的像素相 對于一個可見像素所在的三角形的三條邊的邊方程值均不小于零時,所述像素位置判斷單 元判斷所述當(dāng)前需要渲染的像素處于所述一個可見像素所在的三角形中。
10.根據(jù)權(quán)利要求6所述的陰影形成系統(tǒng),其特征在于,在所述當(dāng)前需要渲染的像素是 所述多個可見像素之一時,所述深度信息獲取單元通過對所述當(dāng)前需要渲染的像素所在的 三角形的三個頂點的深度值進(jìn)行內(nèi)插,來獲取所述當(dāng)前需要渲染的像素的深度值。
全文摘要
公開了一種陰影形成方法和系統(tǒng)。其中,該方法包括獲取并記錄需要渲染的場景中的多個可見像素的深度信息,其中所述多個可見像素中的任意一個可見像素的深度信息包括所述一個可見像素所在的三角形的各條邊的邊方程系數(shù)以及所述一個可見像素所在的三角形的各個頂點的深度值,所述三角形是通過對所述需要渲染的場景進(jìn)行三角化形成的;在當(dāng)前需要渲染的像素不是所述多個可見像素之一時,根據(jù)所述多個可見像素中的一個或多個可見像素的深度信息獲取所述當(dāng)前需要渲染的像素的深度值;在所述當(dāng)前需要渲染的像素的深度值小于所述當(dāng)前需要渲染的像素與光源之間的實際距離時,將所述當(dāng)前需要渲染的像素渲染成陰影顏色。
文檔編號G06T7/00GK102129677SQ20101000440
公開日2011年7月20日 申請日期2010年1月15日 優(yōu)先權(quán)日2010年1月15日
發(fā)明者洲鐮康, 白向暉, 譚志明 申請人:富士通株式會社