專利名稱:用于向計算機圖形中的對象添加陰影的方法
技術領域:
本發明涉及計算機圖形領域,特別地涉及一種用于在計算機圖形中使對象陰影化的快速且簡單的方法。
背景技術:
在計算機圖形領域中,生成由虛擬光源照明的對象的陰影是眾所周知的。該特征在通過增強場景中的深度的可感知性來使計算機生成的圖像具有真實感的方面起重要作用。換句話說,陰影有助于了解對象具有怎樣的深度,以及它們在空間中相對于彼此的位置如何。場景通常定義為多個三維(3D)對象和多個光源。觀察者從視點觀察場景。觀察者有時被稱為“相機”。場景被渲染到圖像中。在計算機圖形領域中,渲染的意思是計算圖像。在該上下文中,渲染為計算描繪場景的圖像的過程,就像從觀察者(相機)的視點觀看場景一樣。可以通過渲染多個連續的圖像并在所述渲染圖像之間移動對象和/或觀察者/ 相機來創建運動畫面或影像。市面上已有通過允許用戶在3D位置插入3D對象來構建場景的計算機程序。市面上已有可自動地向3D對象添加陰影的其它計算機程序。例如,存在允許用戶指派3D對象的位置、并相對于該位置移動虛擬光源以便于從期望的方向虛擬地照明對象的計算機程序。計算機程序然后可以基于對象的形狀以及對象和虛擬光源的相對位置自動地生成對象的陰影。還存在用于生成意圖動畫制作雪、雨、水、煙等小尺寸粒子形式的多個對象的計算機程序。這種類型的計算機程序有時被稱為粒子動畫系統。粒子動畫系統的一個示例為由 Trapcode AB公司開發的Trapcode Particular 。在粒子動畫系統中,用戶向一組對象指派規則,以便于不需要單獨地定位或定向它們。反過來,計算機基于指派的規則計算它們的位置。在運動畫面或影像的情形下,計算機隨時間計算該組對象的位置。粒子動畫系統因此對如下情況是有用的在創建具有非常多的對象的場景的情況下,且在該情況下單獨地定位每個對象是不實際的。通過計算機程序,每個粒子被指派3D位置,并且還可以被指派其它屬性,例如速度、方向、旋轉速度等。還存在如下粒子動畫系統該粒子動畫系統允許用戶通過指定場景中的一個或若干個光源的3D位置將光源插入到場景中。一些粒子動畫系統甚至包括用于將陰影效果添加到包括光源的場景中的功能。然而,在場景中自動地生成對象的逼真陰影的任務是一個復雜的任務,其通常需要非常高的計算能力。已知的提供這種功能的計算機程序使用非常復雜并使得圖像渲染很慢、特別是對于具有多個對象的場景渲染很慢的方法,或者使用產生不令人滿意結果使得渲染的圖像看上去不逼真的方法。因此,存在對用于使計算機生成的場景中的對象逼真地陰影化的快速且簡單的方法的期望。
發明內容
本發明的目的是提供一種用于快速且簡單地使計算機生成的場景中的對象陰影化的方法。該目的通過向計算機生成的對象自動添加陰影的方法實現,包括以下步驟-基于第一原始對象的3D位置和第一光源的3D位置計算陰影對象的第一3D (三維)位置;以及-將陰影對象在所述第一3D位置處添加到所述場景。通過在基于原始對象和光源的3D位置確定的第一 3D位置處向場景自動地添加單獨對象(文中稱為陰影對象),可以針對場景的每一原始對象/光源對自動地添加陰影對象,該陰影對象會引起從場景渲染而成的圖像的逼真陰影效果。優選地,計算添加陰影對象的第一 3D位置,使得陰影對象從光源的視點看定位在所述第一原始對象的后面,并與第一原始對象隔開一定的偏移距離。即,可以計算第一 3D 位置,使得陰影對象沿著穿過所述第一光源和所述第一原始對象的(假想)直線定位,并且從光源的視點看位于所述第一對象的后面,在該情形下偏移距離為沿著所述直線的、在第一對象和陰影對象之間的距離。通常,通過將對象/光源的“中心點”與單個(X,1, ζ)坐標相關聯,場景中的每一個對象和光源被指派3D位置。然后可以基于第一原始對象和光源的已知的(x,y,z)坐標計算假想直線,且可以通過將陰影對象的“中心點”與位于假想直線上并與第一原始對象隔開一定偏移距離的U,1,ζ)坐標相關聯來定位陰影對象。以此方式,陰影對象相對于原始對象和光的方向逼真地定位,并且計算第一 3D位置的數學運算變得非常簡單,由此降低了將陰影對象插入到場景所需的計算能力。優選地,陰影對象為二維QD)對象,例如圓形、矩形、三角形、五邊形或任何其它 2D形狀。生成2D形狀不需要和生成3D圖形一樣高的計算能力,并且通過生成圓形或其它不復雜的2D形狀形式的陰影對象,計算能力需求被進一步降低,由此允許快速執行該方法,和/或允許通過非高性能的處理單元執行該方法。優選地,二維形狀的邊緣被模糊化,使得陰影對象朝向其周邊“淡出”,從而使得當將場景渲染到圖像中時,在陰影對象和陰影對象合成到其上的任何原始對象或背景之間不存在尖銳的邊緣。根據本發明的優選實施例,以邊緣模糊化的圓形形式生成陰影對象。已發現邊緣模糊化的圓形形式的陰影對象產生非常逼真的陰影效果,甚至在原始對象具有其它的非圓形形狀的情形下也是如此。該方法可以進一步包括將陰影對象的不透明度設置為一定的不透明值的步驟。并且/或者它可以包括將陰影對象的顏色設置為一定顏色值的步驟。優選地,基于上述的偏移距離計算透明度值和/或顏色值。由此,可以計算不透明度值和/或顏色值,使得當偏移值增加時不透明降低和/或顏色發生變化。這種特征具有如下效果當陰影對象位于遠離引起它的原始對象時,陰影對象將變得不突出,這又使得從景象渲染而成的圖像具有更逼真的陰影化效果。該方法的更多的有益特征將在下文的詳細描述和所附權利要求中進行描述。本發明的另一個目的是提供一種用于快速且簡單地使計算機生成的場景中的對象陰影化的計算機程序產品。該目的通過如下設備的計算機程序實現,該設備包括處理單元和圖形渲染單元,其能夠生成包括至少一個第一原始對象和至少一個第一光源的場景。計算機程序包括計算機可讀代碼,該計算機可讀代碼當通過處理單元運行時使得設備執行上述方法。根據本發明的另一方面,提供了一種計算機程序產品。計算機程序產品包括計算機可讀介質和存儲在計算機可讀介質上的計算機可讀代碼。計算機可讀代碼為上述計算機程序。計算機可讀介質可以為硬磁盤驅動器、光盤只讀存儲器(⑶ROM)、數字化視頻光盤 (DVD)或現有技術已知的任何其它計算機可讀介質。根據本發明的又一方面,提供了一種設備,該設備包括計算裝置和圖形渲染單元, 其能夠生成包括至少一個第一原始對象和至少一個第一光源的場景。計算裝置適于基于第一原始對象的3D位置和第一光源的3D位置計算陰影對象的第一 3D位置,圖形渲染單元適于將陰影對象添加到所述場景的所述3D位置處。計算裝置可以為處理單元,例如微處理器等,而圖形渲染單元可以例如為圖形處理單元(GPU)。本發明用于粒子動畫系統時是特別有利的,在這樣的粒子動畫系統中,大量的小尺寸粒子形式的原始對象的陰影要被加入到場景中。通過簡單地將圓一優選地邊緣模糊化的圓一從待被添加陰影的粒子偏移一定的偏移距離,并使其從光源的視點看位于粒子的后面,則只需要執行很少的計算。此外,在特定3D位置處畫出具有特定半徑的圓是非常簡單的過程,其不需要執行該方法的設備的處理單元或圖形渲染單元執行任何復雜的計算。此外,在創建將計算機生成的效果加入到實景鏡頭中的任何運動畫面或影像的時候,可以有利地使用本發明。在這種情形下,本發明會使計算機生成的圖像看起來更加真實、更像實景鏡頭的自然部分,從而使得效果對于觀眾變得更加可信。本發明對于增強不包括實景鏡頭而是純數字渲染的運動畫面或影像的可感知性也是有益的。本發明還可以有利地用作在創建意圖模擬真實物理環境的虛擬環境時的工具。例如,建筑師可以在設計房屋時使用本發明;建筑師可以使用本發明來幫助形象化例如在圖像、電影或房屋的交互預演(interactive walk-through)中的房屋。本發明添加的陰影將增加空間感知,使得圖像看起來更逼真。本發明還可以用于模擬器中,例如用于飛行模擬器或汽車模擬器中。在這種情形下,所提出的用于添加陰影的方法可以幫助飛行員/駕駛員估計在虛擬環境中到對象的距離以及對象相對于彼此的位置。換句話說,本發明可以增強飛行員/駕駛員的空間感知。本發明的另一個示例性應用領域為計算機游戲。大部分現代計算機游戲使用3D 圖形。因為本發明呈現了一種用于在3D環境中逼真地添加陰影的非常快速方法,所以它有利于用于諸如計算機游戲的實時應用中,以實現虛擬3D世界的逼真陰影化。本發明還可以用于醫學應用中,例如用于可視化諸如器官或分子的復雜3D結構。 為了清晰起見,可以加入陰影化。本發明還有利地用于移動設備的軟件應用中,移動設備例如移動電話、個人數字助理(PDA)等。在移動設備中,計算資源通常不足,設備應當執行最小量的計算,以節省能量。本發明非常有益于以快速且省電的方式來渲染逼真地陰影化的圖像。
圖1示出了示例場景和觀察者;圖2示出了在根據本發明的原則向圖1中所示的場景添加了陰影對象的情況下的場景;圖3示出了根據本發明的原則如何相對于相關聯的原始對象和光源定位陰影對象的示例;圖4示出了如何相對于第一原始對象和從光源的視點看位于第一原始對象的后面的第二原始對象定位第一被照明原始對象的陰影對象的示例;圖5和圖6示出了根據本發明的方法的效果。圖5示出了從只包括原始對象的場景渲染而成的圖像,而圖6示出了從相同的場景但是根據本發明的原則添加了陰影對象之后渲染而成的圖像;圖7示出了示例性場景的一部分;圖8示出了四幅圖,所述四幅圖示出了根據本發明如何設置陰影對象的像素的強度值的不同示例;圖9示出了根據本發明的計算機程序的示例性圖形用戶界面;以及圖10為示出了根據本發明的實施例的方法的流程圖。
具體實施例方式圖1示出了包括原始對象2和光源3的場景1,每個原始對象2和光源3具有三維 (3D)位置。觀察者4從同樣指派了 3D位置的視點觀察場景1。在計算機圖形領域,觀察者 (即,在渲染圖像中觀察場景的3D位置)有時被視為場景的一部分,而有時則不被視為場景的一部分。下文中,觀察者4將不被視為場景1的一部分。替代地,貫穿本文,場景被定義成包括至少一個原始對象2和至少一個光源3的虛擬3D空間。場景1完全地或部分地由運行生成3D場景的計算機程序的計算機生成。原始對象2可以是任何類型的對象。例如,原始對象2可以是描繪任何真實或想象對象(例如狗、人、宇宙飛船,天體等)的3D模型。原始對象2還可以是描繪任何真實或想象對象(例如人臉、星體、信件、圓等的照片或圖像)的2D對象。原始對象2還可以是粒子動畫系統中的粒子。場景1中的每一個原始對象2和每一個光源3被指派3D位置。原始對象2和光源3可以由計算機用戶手動地定位,或者它們可以由計算機自動地或半自動地定位。存在用于指派原始對象2和光源3的3D位置的若干方法,而這些確切的實現方法在本發明的范圍之外。可以借助于能夠將3D場景中的對象渲染到圖像中的任何已知方法渲染場景1的原始對象2。根據本發明的一些方面,存在對對象渲染方法的特定需求;例如可能要求方法對渲染圖像中的每個像素指派深度值和/或阿爾法值。當是這種情形時,將會在描述中對此進行清晰的陳述。圖2示出了圖1中所示場景,其中已根據本發明的示例性實施例添加了陰影。當計算機運行指示計算機執行下文中所述方法步驟的計算機代碼時,計算機自動地生成陰影并將陰影添加到場景1。因此應當理解本發明通常實現為計算機程序,當該計算機程序運行在計算機上或者運行在包括處理單元(例如,微處理器)和圖形渲染單元(例如,圖形處理單元(GPU))的任何其它設備上時,使設備執行所述方法步驟。針對場景1中的每一個原始對象2和每一個光源3,添加作為原始對象2的近似物的新對象5。與特定原始對象2和特定光源3相關聯的近似物,即特定的對象/光源對,被指派基于原始對象2的3D位置和光源3的3D位置而計算的3D位置。下文中,原始對象2 的近似物被稱為“陰影對象”。當在下文中使用術語“所有對象”時,既指原始對象又指陰影對象;而術語“項”指的是場景的所有項,既包括對象又包括光源。現在參照圖3,通過選取原始對象20的3D位置并沿著來自光源30的3D位置的光的方向偏移,計算陰影對象50的3D位置。在下文中稱為偏移距離d。ffset的偏移量可以是用戶指定的預設參數和/或是可以由計算機基于光源30和原始對象20的位置和/或尺寸而自動計算的參數。還可以基于場景中的其它對象自動地計算該偏移距離,這將在下面進行詳細的描述。在本發明的該實施例中,陰影對象50的中心被放置在空間中沿著貫穿原始對象 20的中心和光源30的中心的直線7的一點處,位于與原始對象20隔開一定的偏移距離,且從光源視點看位于原始對象20的后面。在該示例性實施例中,偏移距離被視為定義成從原始對象20的中心到陰影對象50的中心的距離。然而,應當理解還可以以其它方式定義偏移距離,例如將其定義成分別在原始對象20和陰影對象50上的、相距距離最短的點之間的距離。還應當理解可以以各種不同的方式定義原始對象或光源的“中心”。在附圖中,為了簡單起見,原始對象和光源示出為球體,在該情形下,自然將每個對象/光源的“中心”定義為球體的中心。然而,原始對象或光源可以具有任何給定的2D或3D形狀,并且可以根據用于確定哪個點可以被視為2D或3D對象的“中心點”的任何已知原則來計算每一個原始對象或光源的中心點。然而,因為場景的所有項在被添加到場景中時通常被別指派了單一的(x,y,z)坐標形式的3D位置,所以當生成陰影對象50時通常不需要執行計算來確定原始對象20和光源30的中心點。因此,原始對象20和光源30通常已被指派了可以視為其中心點的各自的(x,y,z)坐標。陰影對象50通常以2D形狀的形式生成。與生成為3D形狀相比,生成2D形狀需要較小的計算能力。陰影對象50可以為原始對象20的簡單的邊緣模糊化的2D近似物。 優選地,陰影形狀50以邊緣模糊化的圓的形式生成。在該示例性實施例中,原始對象20為球體,邊緣模糊化的圓為原始對象20的極好的近似物。然而,已發現邊緣模糊化的圓形式的陰影對象50還在場景中的原始對象具有其它形式時也產生渲染圖像的非常逼真的陰影化。從圖2和圖3所示的實施例看出,2D陰影對象5、50通常面向觀察者4、40。可以說陰影對象50是通過將原始對象20投影到距離原始對象50給定的偏移距離的假想平面 8而生成的。生成假想平面8以及由此生成的二維陰影對象50以便于總是面向觀察者40, 這意味著要選擇假想平面8的傾斜度,使得來自觀察者40的視線形成投影平面8的法線, 或者至少形成基本上平行于投影平面8的法線的直線。這種類型的圖像在計算機圖形領域中通常稱為“公告牌(billboard)”或“精靈(sprite)”。應當理解不需要額外的計算來使得2D陰影對象50面向觀察者40。當在場景中添加2D形狀時,該2D形狀自動地生成為面向指派給觀察者40的位置。可以不同的方式確定陰影對象50的尺寸。根據本發明的一個方面,陰影對象50的尺寸被簡單地設置成預定的標準值。根據本發明的另一方面,陰影對象50的尺寸被設置成使得它與原始對象20的尺寸成比例。在這種情形下,原始對象20的尺寸和陰影對象50的尺寸之間的比值常數可以為用戶參數。根據本發明的又一方面,可以基于光源30和原始對象20之間的距離計算陰影對象50的尺寸。例如,可以基于該距離確定上述可被用來相對于原始對象20設置陰影對象50的尺寸的比例常數。在這種情形下,比例常數優選地隨著距離的減小而增大,使得當光源30和原始對象20之間的距離變小時陰影對象50變大。當該距離增加時,比例常數可以收斂到1,以便給觀察者40帶來下述印象當光源30發出的光束照到原始對象20上時基本上是平行的。由此,場景IB的陰影化變得更逼真且有助于觀察者40估計場景的對象之間的距離。同樣,陰影對象50可以經受透視縮放(perspective scaling),意思是陰影對象50的尺寸隨著陰影對象50遠離觀察者40而減小。因此,還可以基于觀察者40和陰影對象50之間的距離計算陰影對象50的尺寸,該距離對應于觀察者 40看到的場景中的陰影對象50的深度。如上所述,偏移距離,即添加陰影對象50處相距原始對象的距離,可以為預定參數或用戶指定參數。然而,還可以基于要被添加陰影對象的原始對象20的已知尺寸通過計算機自動地計算該偏移距離。例如,在圖3中示出的情況下,偏移距離被定義為從球形原始對象20的中心到陰影對象50的中心的距離,可以將偏移距離計算成原始對象20的半徑加上或乘以合適的值。當計算偏移距離時,通過考慮原始對象20的尺寸,可以確保陰影對象 50定位在后面(從光源視點看)而不在原始對象內部。還可以基于場景中的其它原始對象的尺寸和/或3D位置計算偏移值。圖4示出了從光源視點看第二原始對象20B位于第一原始對象20A的后面的場景。在這種情況中, 可以計算偏移距離,使得表示第一原始對象20A的陰影的陰影對象50定位在第一原始對象 20A和第二原始對象20B之間。即,可以基于要被添加陰影對象50的原始對象20A和從光源視點看位于第一原始對象20A后面的另一個原始對象20B之間的距離d。bje。t計算偏移距離d。ffset。優選地,可以計算偏移值,使得第一原始對象20A的陰影對象50定位成盡可能靠近第二對象20B。由此,很可能從觀察者的視點看,陰影對象50與第二原始對象20B重疊, 并因此在場景被渲染到圖像中時,如觀察者40所見那樣模擬第一原始對象20A落在第二原始對象20B上的逼真陰影。如上所述,當計算偏移距離時,還可以使用第一原始對象20A和 /或第二原始對象20B的尺寸,以確保陰影對象50定位在它們之間而不定位在它們中的任何一個的“內部”。根據本發明的一個方面,可以基于偏移距離設置陰影對象5、50的顏色和/或不透明度。通常,陰影對象的顏色應該是暗色的,例如黑色、灰色或暗褐色。然而,通過基于陰影對象5、50的偏移距離調節它們的顏色和/或不透明度,可以對位于靠近其相關聯的原始對象的陰影對象給定使它比位于距離相關原始對象較遠的陰影對象更突出的不透明度和/ 或顏色。這可以例如通過為每個陰影對象指派與其偏移距離成反比的不透明度值來實現。 這種特征使場景的陰影化甚至更加逼真。當渲染從觀察者視點觀看針對每一原始對象/光源對添加了陰影對象5、50之后的場景1時,所渲染圖像將包含陰影。圖5示出了從只包括原始對象(月牙形狀的對象) 的場景渲染而成的圖像,而圖6示出在根據本發明的原則添加了陰影對象5、50之后從相同場景渲染而成的圖像。在本發明的一個實施例中,以從后到前的順序執行所有對象的渲染。通過使用任何包括設置每一個像素處的阿爾法值的方法,將原始對象2、20渲染到目標緩存區。如計算機圖形領域公知的,目標緩存區為像素構成的矩形,每個像素具有顏色(例如,可以通過指定紅色、綠色或藍色分量來給出顏色)。還可以對每個像素指派阿爾法值;阿爾法值描述該像素的不透明度。當圖像針對每個像素包括阿爾法值時,可以說其具有阿爾法通道。根據該實施例,針對陰影對象5、50的每個像素,通過將像素合成到相應的目標緩存區像素并保持目標緩存區像素的阿爾法值不變,渲染陰影對象5、50。該實施例的優點在于原始對象2、20的阿爾法通道保持不變,因此所得到的圖像緩存區具有正確的阿爾法通道。這允許所得到的圖像緩存區合成到背景(例如影像)中。另一個優點在于當要將陰影對象像合成到目標緩存區像素上時目標緩存區像素具有零阿爾法值(對于所有不與原始對象的像素對應的目標緩存區像素或者不與從觀察者視點看來位于陰影對象后面的背景的像素對應的目標緩存區像素而言是這種情況)的目標緩存區像素在陰影對象像素已合成到其上之后仍具有零阿爾法值。換句話說,這種渲染對象的方式確保添加到場景中的陰影對象5、50只有在從觀察者的視點看來存在原始對象2、20或在陰影對象5、50后面存在背景的情形下變得可見。 或者,更確切地說,只有從觀察者的視點看來與位于陰影對象后面的原始對象重疊的那部分陰影對象5、50在渲染的圖像中變得可見。在本發明的另一個實施例中,以從后到前的順序執行所有對象的渲染。使用任何包括針對每個像素設置阿爾法值和深度值的方法,將原始對象2、20渲染到目標緩存區。如計算機圖形中公知的,像素的深度值表示從觀察者的視點看的像素的深度。如果坐標系統的原點位于觀察者的視點處,且ζ軸沿觀察者的正前方向延伸,則像素的深度值為該像素的ζ坐標。包括每個像素的深度值的圖像被說成具有深度通道,它還可以被稱為深度緩存或ζ緩存。根據該實施例,針對陰影對象的每個像素,通過以下對陰影對象5、50進行渲染-將陰影對象像素的阿爾法值乘以強度值,以及-將陰影對象像素合成到相應的目標緩存區像素上,同時保持目標緩存區像素的阿爾法值不變,強度值為陰影對象像素的深度和相應的目標緩存區像素的深度之間的距離的函數。通過將陰影對象像素的阿爾法值乘以取決于該陰影對象像素的深度和相應的目標緩存區像素的深度之間的距離的強度值,渲染圖像中的陰影隨著深度淡出,使得靠近觀察者的原始對象將不遮蔽離觀察者較遠的另一個原始對象。這將出現如下結果,在距離增加的情況下強度值降低。下文中,陰影對象像素的深度和相應的目標緩存區像素的深度之間的距離被稱為所述像素之間的深度差(DD)距離。現在參照圖7,一起示出了第三原始對象20C和在圖4中示出的第一原始對象20A 和第二原始對象20B。上述與強度值相乘的效果在于,從觀察者的視點看的陰影對象50的與第二原始對象20B重疊的部分將被強烈地描繪出來,因此在渲染圖像中比從觀察者的視點看的陰影對象50與第三原始對象20C重疊的部分更突出。基本上,該圖像渲染方法確保了由陰影對象50引起的在渲染圖像中的陰影當落在在深度上接近陰影對象的原始對象上時比落在在深度上遠離陰影對象的原始對象上時看起來更“強烈”。這將使得渲染圖像中的陰影化看起來更逼真。優選地,如果DD距離超過下文中稱為Max_DD_距離的參數給定的特定閾值,則強度值設置為零。Max_DD_距離參數可以是預設參數、用戶指定參數或其值由計算機自動計算和設置的參數。這具有以下效果即使原始對象定位成從觀察者的視點看位于陰影對象的后面,如果陰影對象和原始對象之間的深度距離足夠長,則陰影對象不會影響渲染圖像中的原始對象的視覺外觀。再次參照圖7中示出的場景,這意味著當將場景渲染到圖像中時, 如果陰影對象50的所有像素和第三原始對象20C的所有像素之間的深度距離超過Max_DD_ 距離,則陰影對象50將一點也不影響原始對象20C的視覺外觀。例如,如果DD距離超過Max_DD_距離,則強度值可以被設置成零,而如果DD距離沒有超過Max_DD_距離,則強度值將被設置成Max_DD_距離和DD距離之差除以Max_DD_距離。即,強度值可以定義成如下如果DD距離>Max_DD_距離一強度值=0如果DD距離彡Max_DD_距離一強度值=(Max_DD_距離-DD距離)/Max_DD_距離其中DD距離=目標緩存區像素處的深度-陰影對象像素的深度作為陰影對象像素和相應的目標緩存區像素之間的DD距離的函數的陰影對象像素的強度值的上述定義由圖8中的曲線圖A示出。在本發明的另一個實施例中,使用與陰影對象像素和相應的目標緩存區像素之間的DD距離相關的另一個參數來執行所有對象的渲染,該參數在下文中稱為1^(1(116_00_距離。Middle_DD_距離參數可以是預設參數、用戶指定參數或其值由計算機自動地計算和設置的參數。根據該實施例,當DD距離朝向Middle_DD_距離增加時,陰影對象像素的強度值增加,然后當DD距離超過Middle_DD_距離并朝向Max_DD_距離增加時,陰影對象像素的強度值降低。通常,強度值在DD距離等于零時從零開始,并當DD距離超過離時終止于零。作為陰影對象像素和相應的目標緩存區像素之間的DD距離的函數的陰影對象像素的強度值的上述定義由圖8中的曲線圖B示出。該實施例的優點在于當產生運動畫面或影像時,陰影將較少傾向于“popping”。 Popping意思是當對象從另一個對象后面彈出來時的可見偽像。通過使用從零開始、隨著 DD距離逼近Middle_DD_距離而逐漸地增加的強度值,陰影對象將逐漸地出現,而不是突然地出現在原始對象的面前。在其它實施例中,陰影對象像素的強度值作為該陰影對象像素和相應的目標緩存區像素之間的DD距離的函數根據平滑的曲線而變化。圖8中的曲線圖C和D示出了 DD距離的平滑的強度函數的示例。根據本發明的一個方面,計算機程序適于使得通過運行該程序的計算機自動地計算Max_DD_距離和Middle_DD_距離。可以基于陰影對象的尺寸計算Max_DD_距離,以及可以基于Max_DD_距離計算Middle_DD_距離。例如,Max_DD_距離可以被設置成陰影對象的尺寸,而Middle_DD_距離可以被設置成Max_DD_距離的一半。如果作為DD距離的函數的強度值在特定非零DD距離處具有最大值(如圖8中的曲線圖B和D所示),這將導致陰影在深度上的感知偏移,S卩,朝向或遠離渲染圖像的觀察者的感知偏移。偏移是朝向觀察者的深度偏移還是遠離觀察者的深度偏移,取決于場景中原始對象2、20的深度和光源3、30的深度。因此,當通過這樣的函數確定強度值時,可以以補償渲染圖像中的陰影的感知深度的“誤差”的方式計算應當添加陰影對象的3D位置。例如, 可以通過根據之前所描述的任何原則確定陰影對象的第一位置來計算陰影對象的位置,然后通過將第一位置加上或減去深度補償值將陰影粒子在深度上朝向觀察者或遠離觀察者移動,從而將陰影粒子“移動”到最終位置。深度補償值將因此影響陰影對象的ζ坐標。可以通過用戶設置深度補償值,或者可以通過計算機自動地計算該深度補償值,例如通過將其簡單的設置成Middle_DD_距離。在另一個實施例中,用戶可以選擇場景1中的光源3、30的子集,子集可以是一個更多個光源,且只有子集中的光源用于根據所述方法生成陰影對象。通過只選擇作為子集的最突出的光源,渲染圖像將幾乎具有好像所有的光源被包括進來的最良好質量。該實施例的優點在于,它減少了必須添加到場景中的陰影對象的數量,這使得該方法更加快速,并且顯著地降低了運行計算機程序的設備所需的計算能力。在另一個實施例中,在渲染對象之前,具有深度緩存的背景圖像被渲染到目標緩存區。該方法的益處在于背景圖像也將被遮蔽。在另一個實施例中,通過使用包括設置每個像素的深度值的任何方法在第一階段執行原始對象的渲染。例如這可以是圖形卡(GPU)所支持的標準渲染函數。使用之前所述方法中的其中一種在第二階段對陰影對象進行渲染。如果阿爾法通道在目標緩存區中不可用,則所有的像素被假定為完全不透明。然而,這需要深度通道以進行工作。因此,該實施例只應用于利用深度通道的所述方法中。該實施例的益處在于可以使用標準(且通常非常快速的)GPU函數來渲染原始對象。還可以在GPU中使用遮蔽器來執行陰影對象的第二次渲染。遮蔽器為GPU可以(非常快速)執行的一段代碼。在這種情形下,遮蔽器將實現所述方法中的其中一個。GPU為專門制造來用于生成計算機圖形的芯片或設備。大部分現代PC具有GPU卡。該實施例在計算機游戲中和其它的實時應用中是特別有用的。在本發明的其它實施例中,當對象為復雜3D模型時,例如它是車的3D模型,或人或動物的細節模型時,在生成陰影對象之前,對象可以被分成子對象。可以進行對象的劃分,使得當生成陰影對象時,對象的每個主要部分例如手臂成為單獨的對象。該實施例的益處在于如果例如人靜止地站在場景中,但是移動其手臂,與該手臂相關的陰影對象也將會移動,因此增加了真實感。在本發明的另一個實施例中,當場景中存在非常多的原始對象時,可以在生成陰影對象之前將原始對象進行組合。例如,如果一些原始對象在空間中彼此靠近,則可以在生成陰影對象時將它們視為一個原始對象。該實施例的優點在于將存在較少的陰影對象,因此與對每一個原始對象都添加一個陰影對象(或在原始對象由超過一個的光源進行照明的情況下有多于一個的陰影對象)的情況相比,其向場景添加陰影對象的過程將變得快速且消耗較少的計算能力。如之前所述的,根據本發明的一個方面,與特定原始對象和特定光源相關聯的陰影對象被添加到從觀察者的視點看位于原始對象的后面,并偏移一定的偏移距離d。ffsrt。無論該初始偏移距離由預定參數、用戶指定參數確定,還是基于各種參數計算而來,根據本發明的計算機程序優選地被編程為允許用戶在陰影對象50已被添加到場景中之后調節陰影對象50的初始偏移距離。這可以通過例如引入可以由用戶調節的滑動控件,和/或用戶可以在計算機程序的圖形用戶界面(GUI)上輸入期望偏移距離的文本字段實現。根據本發明的一個方面,用戶可以選擇針對場景中所有的陰影對象調節偏移距離,或者針對場景中的陰影對象的(一個或更多個)子集調節偏移距離。后者可以通過允許用戶例如通過使用計算機鼠標點擊來指示場景中的一個或若干個原始對象來實現,然后例如借助于移動滑動控件針對被指示的原始對象的陰影對象調節偏移距離。優選地,計算機程序包括相似的功能以允許用戶在陰影對象被添加到場景之后調節陰影對象的尺寸、不透明度、顏色和/或形狀。另外,程序可以適于允許用戶在陰影對象已被添加到場景之后調節上述Max_DD_距離參數和Middle_DD_距離參數的值。用戶可以例如通過上述提出的滑動控件或輸入文本字段來調節尺寸、不透明度、顏色、Max_DD_距離和Middle_DD_距離,然而可以例如通過以下方式來調節陰影對象的形狀通過從計算機程序的圖形用戶界面(GUI)呈現給用戶的下拉菜單或一組圖標中選擇幾種預定義的形狀例如圓形、正方形、矩形、三角形、橢圓形等的其中一個。在一些情形中,如果用戶在陰影對象已添加到場景中之后改變陰影對象的尺寸,則理想的是降低陰影對象的不透明度以保持場景中的陰影常數的“值”。因此,根據本發明的一個實施例,計算機適于響應于陰影對象的尺寸的用戶指定變化而自動地改變陰影對象的不透明度。根據本發明的又一方面,用戶可以在陰影對象已被自動地添加到場景之后,自由地調節陰影對象的偏移距離和/或3D位置。用戶可以通過指示陰影對象并在場景上將其移動到期望位置實現上述情況,例如通過使用計算機鼠標將其“拖放”到期望的位置。現在參照圖9,示出了根據本發明的計算機程序的示例性圖形用戶界面(GUI)。 GUI包括圖像區域11,圖像區域11用于顯示從可以由用戶生成或下載到計算機程序中的場景渲染而成的圖像。這里渲染圖像為圖6中所示的圖像。在左手側,⑶I包括多個用戶控件,所述多個用戶控件中的一些由附圖標記12至14表示。這些控件允許計算機程序的用戶調節不同的參數,這些參數影響陰影對象添加到場景中的方式,并因此影響渲染圖像的陰影化。附圖標記12表示允許用戶改變上述偏移距離的用戶控件。該控件在GUI中被命名為“調節距離”。附圖標記13和14分別表示允許用戶改變場景中的陰影對象的尺寸和透明度的用戶控件。用戶可以在各用戶控件的輸入文本字段中輸入數字值,或者用戶可以點擊各用戶控件的名字前面的小三角形以顯示用于改變參數值的滑動控件。當用戶改變參數值時,計算機程序自動地重新生成場景中針對所有原始對象/光源對的陰影對象,并將場景重新渲染到新的圖像中,新的圖像在圖像區域11中顯示給用戶。圖10為示出根據本發明的一個實施例的、用于將陰影對象添加到場景中的一般方法的流程圖。在步驟Sl中,選擇光源。通過選取被定義成光源的項,可以通過計算機程序自動地選擇光源,或者可以例如通過用戶使用鼠標點擊景象的項手動地選擇光源。該方法然后進行到步驟S2。在步驟S2中,選擇原始對象。類似于步驟Sl中的光源的選擇,可以通過計算機程序自動地選擇原始對象,或者可以通過用戶手動地選擇原始對象。該方法然后進行到步驟S3。在步驟S3中,通過計算機程序基于選定的原始對象的3D位置和選定的光源的3D 位置計算陰影對象的3D位置(或者,通過計算機基于來自計算機程序的指令計算用于對象的3D位置)。當已計算出3D位置時,將陰影對象添加到場景的該位置處。可以根據之前所述原則中的任何一個計算陰影對象的3D位置。該方法然后進行到步驟S4。在步驟S4中,確定是否存在基于當前選定的光源應當被添加陰影對象的多個原始對象。該步驟也可以自動地執行或手動地執行。計算機程序可以例如適于遍歷場景中的每個光源的所有原始對象(或反之亦然)。如果存在基于當前選定的光源應當被添加陰影對象的多個原始對象,該方法返回到步驟S2。如果不存在,則該方法進行到步驟S5。在步驟S5中,確定在場景中是否存在多個光源。如果存在多個光源,該方法返回到步驟Si。如果不存在多個光源,該方法進行到步驟S6。在步驟S6中,場景被渲染到從觀察者的視點看的圖像中。可以以任何現有技術已知的方式執行場景的渲染,然而優選地是,根據之前所述的任何一個原則渲染場景的陰影對象。當圖像被渲染后,該方法結束。應當理解的是,可以以任何可想到的方式組合文中所描述的本發明的各種實施例和方面,除非嚴格地相互矛盾。
權利要求
1.一種用于向計算機生成的場景(1)中的對象自動添加陰影的方法,包括步驟-基于第一原始對象O ;20)的三維(3D)位置和第一光源(3 ;30)的三維位置計算陰影對象(5 ;50)的第一三維位置;以及-將所述陰影對象(5 ;50)在所述第一三維位置處添加到所述場景(1)。
2.根據權利要求1所述的方法,其中,計算所述第一三維位置,使得從所述光源的視點看所述陰影對象(5 ;50)定位在所述第一對象O ;20)的后面,并與所述第一對象O ;20)隔開一定的偏移距離d。ffset。
3.根據權利要求1或2所述的方法,其中,所述陰影對象(5;50)為二維QD)對象。
4.根據權利要求3所述的方法,其中,所述陰影對象(5;50)為邊緣模糊化的圓。
5.根據權利要求2至4中任一項所述的方法,進一步包括如下步驟將所述陰影對象 (5 ;50)的不透明度設置成一定的不透明度值和/或將所述陰影對象(5 ;50)的顏色設置成一定的顏色值。
6.根據權利要求5所述的方法,其中,基于所述偏移距離doffset計算所述不透明度值和 /或所述顏色值。
7.根據權利要求2至6中任一項所述的方法,進一步包括將所述陰影對象(5;50)的尺寸設置成一定的尺寸值的步驟。
8.根據權利要求7所述的方法,其中,基于所述第一原始對象O;20)的尺寸計算所述尺寸值。
9.根據權利要求7或8所述的方法,其中,基于所述第一光源(3;30)和所述第一原始對象O ;20)之間的距離計算所述尺寸值。
10.根據權利要求2至9中任一項所述的方法,其中,基于所述第一原始對象O;20)的尺寸計算所述偏移距離d。ffset。
11.根據權利要求2至10中任一項所述的方法,其中,基于從所述光源的視點看定位在所述第一對象O ;20 ;20A)后面的第二對象O0B)的三維位置計算所述偏移距離d。ffset。
12.根據權利要求2至9中任一項所述的方法,其中,所述偏移距離d。ffsrt為預設參數或者為由計算機的用戶輸入到所述計算機中的用戶指定參數。
13.根據前述權利要求中任一項所述的方法,進一步包括如下步驟以從觀察者 40)的視點看從后向前的順序將所述場景⑴渲染到圖像中,所述渲染通過以下方式執行 對于所述陰影對象(5;50)的每一個像素,將所述像素合成到相應的目標緩存區像素,并同時保持所述目標緩存區像素的阿爾法值不變。
14.根據權利要求13所述的方法,其中,所述渲染通過以下方式執行對于所述陰影對象(5;50)的每一個像素,將所述陰影對象像素的阿爾法值乘以強度值,并將所述陰影對象像素合成到相應的目標緩存區像素,同時保持所述目標緩存區像素的阿爾法值不變,所述強度值為所述陰影對象像素的深度和所述相應的目標緩存區像素的深度之間的距離的函數,其中所述距離在此稱為這些像素之間的深度差DD距離。
15.根據權利要求14所述的方法,其中,如果深度差DD距離超過一定的閾值,則所述強度值被設置成零,所述閾值由在此稱為Max_DD_距離的參數給定。
16.根據權利要求15所述的方法,其中如果深度差DD距離>Max_DD_距離,則所述強度值被設置成0 ;如果深度差DD距離彡Max_DD_距離,則所述強度值被設置成(Max_DD_距離-深度差DD距離)/Max_DD_距離.
17.根據前述權利中任一項所述的方法,其中,針對所述場景(1)中的每一對象/光源對重復所有的方法步驟。
18.根據根據前述權利中任一項所述的方法,進一步包括步驟-選取用戶生成的參數作為輸入參數,所述用戶生成的參數表示用戶改變偏移距離 d。ffset的期望,和/或所述陰影對象(5 ;50)已被添加到所述第一三維位置之后的不透明度、 顏色和/或形狀;-基于所述輸入參數計算新的偏移距離d。ffsrt,和/或所述陰影對象(5;50)的新強度值和/或新顏色值和/或新形狀;以及-基于所述計算的結果改動和/或改變所述陰影對象(5;50)的屬性。
19.根據前述權利要求中任一項所述的方法,其中,所述原始對象為粒子動畫系統中的粒子。
20.一種用于如下設備的計算機程序,所述設備包括處理單元和能夠生成包括至少一個第一原始對象O ;20)和至少一個第一光源(3 ;30)的場景(1)的圖形渲染單元,所述計算機程序包括計算機可讀代碼,所述計算機可讀代碼當由所述處理單元運行時,使得所述設備執行根據權利要求1至19中任一項所述的方法。
21.一種計算機程序產品,包括計算機可讀介質和存儲在所述計算機可讀介質中的計算機可讀代碼,所述計算機可讀代碼為根據權利要求20所述的計算機程序。
22.—種設備,包括計算裝置和能夠生成包括至少一個第一原始對象O ;20)和至少一個第一光源(3;30)的場景(1)的圖形渲染單元,所述設備適于-基于所述第一原始對象O ;20)的三維位置和所述第一光源(3 ;30)的三維位置計算陰影對象(5 ;50)的第一三維位置;以及-將所述陰影對象(5 ;50)在所述第一三維位置處添加到所述場景(1)。
全文摘要
本發明涉及用于向計算機生成的場景(1)中的對象(2;20)自動添加陰影的方法、計算機程序以及設備。這通過以下來執行基于第一原始對象(2;20)的三維(3D)位置和第一光源(3;30)的3D位置計算陰影對象5(5;50)的第一3D位置;以及將陰影對象(5;50)在所述第一3D位置處添加到所述場景(1)。
文檔編號G06T15/60GK102396003SQ201080017465
公開日2012年3月28日 申請日期2010年3月22日 優先權日2009年4月17日
發明者彼得·諾爾比 申請人:設計代碼公司