本發(fā)明涉及圖形處理系統(tǒng),尤其涉及在圖形處理系統(tǒng)中使用平滑的形狀,例如平滑曲線進(jìn)行圖像的渲染。
背景技術(shù):
在圖形處理系統(tǒng)中越來越希望能夠有效和準(zhǔn)確地渲染平滑的形狀,尤其是由平滑曲線(即以平滑曲線作為其邊緣或邊界的曲線)定義的形狀,以進(jìn)行顯示。通常,從圖形處理的角度來看,如果某個形狀具有連續(xù)的邊緣或邊界曲線,并且該曲線的一階導(dǎo)數(shù)是分段連續(xù)的,則可以認(rèn)為這個形狀是平滑的形狀(由平滑曲線限定的形狀)(將被認(rèn)為是平滑的形狀,相應(yīng)地,出于本發(fā)明和申請的目的,將被認(rèn)為是平滑曲線)。圖形處理中這樣的平滑曲線的例子是貝塞爾曲線、樣條曲線和弧。
最近幾年,在計算機(jī)圖形中使用矢量圖形已變得越來越常見。已知在現(xiàn)有技術(shù)中,矢量圖形相對于光柵圖形的一個關(guān)鍵優(yōu)點是能夠提供與分辨率無關(guān)的圖像,即,基本上可以無限地縮放而不會質(zhì)量降低的圖像。例如,計算機(jī)字體的單個字符(字形),如TrueTypeTM,通常被存儲為矢量圖像。
矢量圖形基于對單獨定義的幾何對象的使用,通常由在錨點連接在一起以形成一個路徑的一個或更多個線段來描述,例如直線或曲線(如二次(例如貝塞爾)曲線、橢圓弧、立方(例如貝塞爾曲線)。
矢量圖形對象/路徑是在空間,通常被稱為“世界空間”中定義和操縱的。然而,為了將矢量圖形對象/路徑輸出到視頻顯示器或打印機(jī),需要將在世界空間中定義的對象/路徑變換成適當(dāng)?shù)男问?,以便被顯示在屏幕上或輸出在打印機(jī)上。這種變換通常涉及將在世界空間中定義的對象/路徑投影到另一個空間,通常被稱為“面空間”,其對應(yīng)于要在上面瀏覽該對象/路徑的輸出顯示的視角(幾何形狀)。世界空間和面空間之間的變換通常稱為“世界到面的變換”。
一旦矢量圖形對象/路徑被變換成面空間表示,它們就會被渲染,這可以使用對象和/或路徑的預(yù)計算的表示。
將矢量圖形對象/路徑變換成隨后可以用于例如在面空間中渲染該對象或路徑的預(yù)計算的表示的一種方法是使用例如存儲在紋理(texture)中的帶符號的距離場,隨后在渲染對象時,可以對該距離場進(jìn)行采樣。帶符號的距離場包含點,例如紋理像素(texel),的陣列,針對每個點存儲了到該路徑或?qū)ο蟮倪吘壍淖罱嚯x,而距離的符號表示該點位于要渲染的對象的內(nèi)部還是外部。因此,對帶符號的距離場進(jìn)行采樣就確定了采樣點是落在要渲染的對象的內(nèi)部還是外部。
帶符號的距離場幫助這些對象的渲染,例如字體字形,允許使用諸如抗混疊之類的技術(shù)。然而,例如使用掃描線光柵化從矢量圖形對象/路徑計算帶符號的距離場是很復(fù)雜的。此外,如果對象或路徑需要被縮放,則可能需要在新的分辨率下重新計算帶符號的距離場,因為帶符號的距離場可能僅已經(jīng)被保存在有限的分辨率下。此外,在渲染更復(fù)雜的對象時,例如可能包括多個曲線段的字體字形,已經(jīng)發(fā)現(xiàn)由于計算帶符號的距離場的方法中的偽像,利用帶符號的距離場會造成所渲染對象中的細(xì)節(jié)丟失,例如尖角的平滑化。因此,對此進(jìn)行實時計算所需的計算成本很高,或需要大量的空間來脫機(jī)存儲預(yù)計算的帶符號的距離場。這可能會在可能(例如對于動態(tài)網(wǎng)頁)期望實時進(jìn)行的這種對象/路徑的渲染中引入延遲。
因此,申請人相信仍有余地來改進(jìn)用于渲染平滑曲線和由平滑曲線定義的形狀的技術(shù)和系統(tǒng)。
技術(shù)實現(xiàn)要素:
從第一方面看,本發(fā)明提供了一種在圖形處理系統(tǒng)中使用輸入曲線生成渲染輸出的方法,該方法包括以下步驟:
針對在世界空間中定義的輸入曲線:
確定在正則空間中定義的正則曲線的與所述輸入曲線相對應(yīng)的部分和將所述輸入曲線映射到所述正則曲線的所述部分所需的變換;
針對所述世界空間中圍繞所述輸入曲線的多個采樣點中的每一個采樣點:
利用在所述世界空間和所述正則空間之間的所確定的變換將所述采樣點從所述世界空間變換到所述正則空間;以及
在所述正則空間中,確定所述正則曲線的所確定的部分上的到變換采樣點的最近點;
以由此針對所述正則空間中圍繞所述正則曲線的每一個所述變換采樣點,確定所述正則空間中的所述正則曲線上的對應(yīng)最近點;以及
在生成渲染輸出時,使用在所述正則空間中所述正則曲線上針對所述變換采樣點所確定的最近點。
從第二方面看,本發(fā)明提供了一種使用輸入曲線來生成渲染輸出的圖形處理系統(tǒng),該圖形處理系統(tǒng)包括:
處理電路,其配置為針對在世界空間中定義的輸入曲線:
確定在正則空間中定義的正則曲線的與所述輸入曲線相對應(yīng)的部分和將所述輸入曲線映射到所述正則曲線的所述部分所需的變換;
針對所述世界空間中圍繞所述輸入曲線的多個采樣點中的每一個采樣點:
利用在所述世界空間和所述正則空間之間的所確定的變換將所述采樣點從所述世界空間變換到所述正則空間;以及
在所述正則空間中,確定所述正則曲線的所確定的部分上的到變換采樣點的最近點;
以由此針對所述正則空間中圍繞所述正則曲線的每一個所述變換采樣點,確定所述正則空間中的所述正則曲線上的對應(yīng)最近點;和
處理電路,其配置為在生成渲染輸出時,使用在所述正則空間中所述正則曲線上針對所述變換采樣點所確定的最近點。
在本發(fā)明中,渲染輸出是這樣生成的,利用輸入曲線通過首先將在“世界空間”(其可以是平的,因此只有兩個維度,或者它可以是三維空間)中定義的輸入曲線映射到已定義在“正則空間”中的對應(yīng)的預(yù)定義“正則”曲線。然后,對從世界空間中圍繞輸入曲線的對應(yīng)位置變換出的正則空間中的位置進(jìn)行采樣(測試),以確定正則曲線上到每個采樣位置的最近點。這些最近點被用于生成渲染輸出。這個信息可以用于例如渲染輸入曲線形成少其外形輪廓的至一部分的形狀,例如字體字形,或基于輸入曲線形成其外形輪廓的至少一部分的對象渲染照明或陰影。
然而,申請人已認(rèn)識到,例如僅通過旋轉(zhuǎn)、平移和均勻縮放,就能夠?qū)⑻囟ㄇ€族中的所有曲線變換到一個預(yù)定的單一的或基本曲線,在本文中稱為“正則曲線”,的至少一部分上。
因此這使得能夠利用與單個曲線,即正則曲線,有關(guān)的信息來確定與圖形處理系統(tǒng)所使用的一個或更多個輸入曲線有關(guān)的信息,在生成渲染輸出時使用。例如,換言之,代替不得不導(dǎo)出或存儲與圖形處理系統(tǒng)所使用的要渲染的每個單獨的輸入曲線有關(guān)的數(shù)據(jù),只需要導(dǎo)出或存儲與正則曲線有關(guān)的數(shù)據(jù)。然后,可以使用屬于“正則曲線”所表示的輸入曲線族(組)的各個輸入曲線中的每一個來生成渲染輸出。
這樣,本發(fā)明不僅可提供一種使用一個或更多個輸入曲線來生成渲染輸出的更有效的機(jī)制,還能夠提供這樣做的一種特別方便的機(jī)制。例如,一旦正則空間中的正則曲線被定義,就可能簡單地通過單個坐標(biāo),例如x坐標(biāo)來指代曲線上的點(并因此在計算中使用這些點)。因此,使用正則曲線來確定曲線上到采樣點的最近點,而這又可以用于確定到曲線上的最近點的距離(帶符號的距離場中的信息的一部分),允許保留輸入曲線的數(shù)學(xué)表示,例如使用矢量圖形定義的表示。這是確定此信息的更簡單和更精確的方法,從而提高了使用輸入曲線來生成渲染輸出的速度和精度。與此相比,使用利用掃描線光柵化進(jìn)行評估的帶符號的距離場的技術(shù)在計算帶符號的距離場時會導(dǎo)致信息丟失,因此導(dǎo)致渲染輸出的細(xì)節(jié)丟失。
提供一種使用這種輸入曲線來生成渲染輸出的簡單處理有助于減少運行該處理的設(shè)備的處理和電力負(fù)載,從而允許用在更簡單的設(shè)備上,例如由電池供電且不能實現(xiàn)多功能處理的移動和可穿戴設(shè)備上。備選的是,該處理的效率提升可允許它執(zhí)行更復(fù)雜的渲染功能,或能夠在需要時實時地(重新)計算必要的信息(例如,正則曲線上到每個變換采樣點的最近點)需要,而與先前的技術(shù)相比不會出現(xiàn)設(shè)備的處理和電力負(fù)載的相關(guān)增加。
為了在使用這樣的輸入曲線,特別是渲染字體時,生成渲染輸出,使用更簡單和更精確的處理(例如,分析計算正則曲線上針對變換采樣點的最近點)能夠在顯示器上更具吸引力地渲染字體,特別是當(dāng)文字被放大使得字體可能需要重新計算時。
在世界空間中定義被本發(fā)明的處理所使用,例如,是本發(fā)明的處理的輸入的輸入曲線可以是最初由需要使用輸入曲線來生成渲染輸出的應(yīng)用所定義的輸入曲線。然而,也可能輸入曲線是從在世界空間中定義的另一個曲線得到的曲線。例如,通過本發(fā)明也可以設(shè)想,輸入曲線可能是通過將另一個或初始曲線從所接收的另一個空間變換到世界空間而得到的。
輸入曲線可以按照任何合適的和所希望的方式被輸入到圖形處理系統(tǒng)中。例如,輸入曲線可以被(預(yù))存儲在圖形處理系統(tǒng)中,使得能夠從它的存儲位置讀出,或者輸入曲線可以由圖形處理系統(tǒng)自身來確定。在另一個實施方式中,輸入曲線可以是例如由需要使用輸入曲線來生成渲染輸出的應(yīng)用肯定地(positively)輸入的。在一個優(yōu)選實施方式中,該方法包括(以及所述處理電路被配置成)接收所述輸入曲線的步驟。
例如包含要使用輸入曲線來渲染的形狀的渲染輸出可以僅使用單一的曲線來生成,例如對于其整個長度(或其長度的要用于生成渲染輸出的至少一部分)具有單一的定義(例如,數(shù)學(xué)公式)。優(yōu)選所述輸入曲線具有可以得到具有上述性質(zhì)的“正則曲線”的形式。因此,圖形處理系統(tǒng)所使用的輸入曲線可以是來自可以有適當(dāng)?shù)年P(guān)聯(lián)正則曲線的曲線族中的任何曲線。
具有這種形式的關(guān)聯(lián)正則曲線的一個曲線族是二次曲線。在這種情況下,正則曲線可以是基本二次曲線,即形式為y=x2的曲線。因此,在一個特別優(yōu)選的實施方式中,由圖形處理系統(tǒng)接收的世界空間中的輸入曲線是二次曲線。
同樣可以設(shè)想,可以使用多個輸入曲線,例如多個在其長度上分別具有不同定義(如數(shù)學(xué)公式)的曲線段,來生成渲染輸出。例如,字體字形通常由一起形成字形輪廓的多個曲線段(其可包括直線段)來定義。
另外或代替地,輸入曲線可以不具有在正則空間中的相應(yīng)曲線,因此它有可能被細(xì)分使得初始曲線被分成都有相應(yīng)的正則曲線的多個曲線段(它們是具有關(guān)聯(lián)正則曲線的曲線族的成員),例如在渲染輸出中要使用的輸入曲線可以通過將在世界空間中定義的初始曲線細(xì)分為兩個或更多個單獨的輸入曲線(例如被定義為針對沿初始曲線的長度的不同部分的單獨的輸入曲線)。例如,立方或橢圓形的曲線可以被細(xì)分成多個二次曲線。相應(yīng)地,這將使得本發(fā)明能夠被用于渲染那些可能沒有直接對應(yīng)的、沒有直接定義的(和/或存儲的)正則曲線,或者正則曲線不可用的曲線。
在這些實施方式中,該方法可以包括以下步驟(所述處理電路可被配置成):將在世界空間中定義的初始曲線細(xì)分為多個輸入曲線,然后對輸入曲線中的一個或更多個進(jìn)行處理,并按照本發(fā)明的方式生成渲染輸出。對于一些最初定義的曲線,例如三次貝塞爾曲線,在將初始曲線細(xì)分成多個輸入曲線時,可能會重新使用一些計算(因此所述處理電路可被配置為執(zhí)行此操作),以便找到提供與初始曲線的最佳擬合的多個輸入曲線,例如二次貝塞爾曲線。例如,二次貝塞爾由它的起點和終點以及梯度(可以由第三控制點來定義)定義。然后,這些參數(shù)可以與鄰近的例如標(biāo)準(zhǔn)形式的貝塞爾的相應(yīng)參進(jìn)行比較,以確定它們是否可以被合并。
在一組優(yōu)選實施方式中,當(dāng)要使用多個輸入曲線來生成渲染輸出時,為每個輸入曲線(例如片段)重復(fù)本發(fā)明的方法,例如,每個輸入曲線(段)被變換到正則空間中,在正則空間中,對于世界空間中圍繞輸入曲線(段)的多個采樣點中的每一個,確定正則曲線的所確定的部分上到變換采樣點的最近點。然后針對圍繞所述多個正則曲線中的每一個的變換采樣點的陣列,返回每個變換采樣點的正則曲線(段)上所確定的最近點,在生成渲染輸出時就可以使用這些所確定的最近點。
本申請人已經(jīng)認(rèn)識到,在實踐中生成渲染輸出所時想要使用的大多數(shù)(如果不是全部)輸入曲線都將落入幾個曲線族之一中,因此能夠用相對少的輸入曲線來表示可能想要繪制,比如來定義復(fù)雜形狀,例如字體,的大多數(shù)(如果不是全部)曲線。輸入曲線可以是任何合適的曲線。優(yōu)選所述輸入曲線是平滑曲線。優(yōu)選所述平滑曲線是連續(xù)且曲線的一階導(dǎo)數(shù)(曲線的路徑)分段連續(xù)的曲線。優(yōu)選所述輸入曲線是直線、(例如二次或三次)貝塞爾曲線、樣條曲線和/或(例如,橢圓形)弧線。
然而,下面將進(jìn)一步討論,輸入曲線可以包括更復(fù)雜的曲線,例如橢圓和/或雙曲線,例如,這可能不需要將曲線細(xì)分成多個二次曲線。然而,對于以這種方式定義的輸入曲線,沒有一個從世界空間到正則空間的唯一變換(兩維),因此曲線的定義可能需要包括其它信息,如曲線的偏心(eccentricity),例如表示為正則空間中的第三維。這可以被存儲為輸入曲線的定義的一部分或者該方法可以包括以下步驟(且所述處理電路可被配置成):當(dāng)輸入曲線包括橢圓或雙曲線時,確定所述輸入曲線的偏心。
當(dāng)輸入曲線包括橢圓和雙曲線,例如帶有二次方程式時,這提供了一個有用的工具箱供用戶定義復(fù)雜的形狀以便在生成渲染輸出時使用,它可以從一個或更多個輸入曲線變換到相應(yīng)的正則曲線,例如僅通過旋轉(zhuǎn)、縮放和平移,相對來講是硬件友好的。
在世界空間中定義的,被本發(fā)明的處理所使用,例如被接收為輸入,的輸入曲線可以按照任何期望和適當(dāng)?shù)姆绞絹矶x。例如,優(yōu)選地,圖形處理系統(tǒng)可以接收定義了輸入曲線的信息,如曲線的位置和與該曲線有關(guān)的任何參數(shù)。優(yōu)選所述輸入曲線具有有限長度,例如作為形狀的一部分,并且因此優(yōu)選所述輸入曲線的定義,進(jìn)而由圖形處理系統(tǒng)所使用,例如接收,的信息包括輸入曲線的終點。因為輸入曲線可以僅利用旋轉(zhuǎn)、平移和均勻縮放變換為相應(yīng)的正則曲線,于是,如下面進(jìn)一步討論的,能夠在使用中容易地確定正則曲線的與輸入曲線相對應(yīng)的部分,如它的起點和終點。
輸入曲線優(yōu)選由世界空間中的多個控制點的位置來定義,典型地包括起點、終點和一個或更多個中間點,以及要在起點控制點與終點控制點之間繪制的曲線的類型的指示。例如,優(yōu)選地,如上面所討論地,輸入曲線包括以下之一:直線、二次貝塞爾曲線(需要單個中間控制點)、三次貝塞爾曲線(需要兩個中間控制點)、樣條曲線和(如橢圓或雙曲線)弧。輸入曲線的定義也可以包括曲線的梯度,例如在一個或更多個控制點處的梯度。例如,二次貝塞爾曲線可以由三個控制點來定義,或由兩個(終點)控制點和這兩個控制點處的梯度來定義。
因此,輸入曲線的定義優(yōu)選地包括世界空間中多個控制點,和指示曲線類型的信息。另外,當(dāng)輸入曲線被圖形處理系統(tǒng)接收時,接收在世界空間中定義的輸入曲線的步驟優(yōu)選地包括(且所述處理電路被配置成):接收世界空間中的多個控制點的位置,和指示曲線類型的信息。
對于要用于生成渲染輸出的輸入曲線,例如一旦輸入曲線已經(jīng)由圖形處理系統(tǒng)接收,就需要確定正則空間中的正則曲線的表示所述輸入曲線的對應(yīng)部分。該確定可以通過任何適當(dāng)和期望的方式來進(jìn)行。
在一個優(yōu)選實施方式中,這是通過確定需要對在世界空間中定義的輸入曲線采取的變換,并將其放置在正則空間中的正則曲線的對應(yīng)部分上而完成的。如上所述,該變換(世界-正則變換)應(yīng)只需要旋轉(zhuǎn)、平移和/或均勻縮放。因此,確定將世界空間中的輸入曲線變換到正則曲線的適當(dāng)部分的步驟優(yōu)選地包括(處理電路被優(yōu)選配置為):確定該變換的旋轉(zhuǎn)分量,如果有的話。
變換的旋轉(zhuǎn)分量可以按照任何合適的和期望的方式來確定。然而,在一個優(yōu)選實施方式中,同樣當(dāng)世界空間中的輸入曲線(因此正則空間中的正則曲線)是二次曲線時,變換的旋轉(zhuǎn)分量是通過確定使輸入曲線的對稱軸平行于正則空間中的正則曲線的對稱軸所需的旋轉(zhuǎn)而確定的。因此該旋轉(zhuǎn)將輸入曲線的對稱軸與正則曲線的對稱軸(例如正則空間中的y軸)的方向?qū)?zhǔn)。
類似地,確定將世界空間中的輸入曲線變換到正則空間中的正則曲線的適當(dāng)部分上的步驟優(yōu)選地包括(所述處理電路優(yōu)選被配置成):確定變換的平移成分,如果有的話。
變換的平移分量也可以按照任何合適的和期望的方式來確定。然而,在一個優(yōu)選實施方式中,當(dāng)輸入曲線(因此正則曲線)是二次曲線時,變換的平移分量是通過確定將世界空間中的輸入曲線的最低點移動到正則空間中正則曲線的最低點,例如正則空間的原點,所需的平移而確定的。因此,確定變換的平移分量的步驟優(yōu)選地,如果需要的話,跟隨確定所述變換的旋轉(zhuǎn)分量的步驟,如果需要的話。
因此,在一個優(yōu)選實施方式中,確定變換的平移分量的步驟包括(所述處理電路被優(yōu)選構(gòu)配置成):確定將輸入曲線的最低點映射到正則空間中正則曲線的最低點所需的平移。
類似地,確定將世界空間中的輸入曲線變換到正則曲線的適當(dāng)部分上的變換的步驟優(yōu)選地包括(處理電路被優(yōu)選構(gòu)地配置成):確定該變換的均勻縮放分量,如果有的話。
變換的均勻縮放分量也可以按照任何合適的和期望的方式來確定。然而,在一個優(yōu)選實施方式中,同樣當(dāng)世界空間中的輸入曲線(因此正則空間中的正則曲線)是二次曲線時,變換的均勻縮放分量是通過確定將例如經(jīng)旋轉(zhuǎn)和/或平移的輸入曲線縮放到正則曲線所需的縮放因子,例如通過檢查輸入曲線的二次型而確定的。
確定變換的旋轉(zhuǎn)、平移和均勻縮放分量的步驟可以根據(jù)需要按照任何順序來執(zhí)行。然而,在本發(fā)明的優(yōu)選實施方式中,首先確定旋轉(zhuǎn)分量,然后是平移分量,最后是均勻縮放分量。
當(dāng)輸入曲線具有有限長度,例如由起點和終點定義時,一旦確定了將世界空間中的輸入曲線映射到正則空間中的正則曲線所需的變換,就優(yōu)選地通過利用所確定的變換確定正則曲線上與輸入曲線的中心曲線的起點和終點相對應(yīng)的兩個位置,來確定正則曲線的與輸入曲線相對應(yīng)的部分。然后,這給出了輸入曲線在正則空間中的位置。
一旦確定了與世界空間中的輸入曲線相對應(yīng)的正則空間中的正則曲線,因此也確定了輸入曲線從世界空間到正則空間的變換,就可以利用相同的變換將世界空間中圍繞輸入曲線的多個采樣點中的每一個采樣點變換到正則空間中的對應(yīng)點(單獨或一起)。
可以以任何合適的和所期望的方式來選擇圍繞輸入曲線的所述多個采樣點,例如以使得輸入曲線上所確定的最近點能夠以對于渲染輸出期望要渲染的細(xì)節(jié)水平而言足夠的分辨率水平來提供(或覆蓋要生成的渲染輸出的最期望縮放水平)??商娲?,輸入曲線上的最近點可以在較低的分辨率下確定,例如對于少數(shù)采樣點,然后如果想要以放大水平生成渲染輸出,則在較高的分辨率下(即,更詳細(xì)地)確定,如果必要。在一個實施方式中,繪制一個圍繞輸入曲線的邊界框,在該邊界框內(nèi),圍繞輸入曲線的多個采樣點被定義。
在一個實施方式中,可以不對圍繞輸入曲線的每個采樣點確定正則曲線上的最近點,對于所述每個采樣點,最終要確定與輸入曲線有關(guān)的信息在生成渲染輸出時使用。例如,要針對多個其他采樣點中的每一個確定的信息可從一個或更多個位于(例如接近)所述多個其他采樣點中的一個采樣點的(最初定義的)采樣點得到,而無需將這些其他采樣點中的每一個變換到正則空間,并確定正則曲線上的最近點。
在本實施方式中,有可能確定以下一個或更多個:曲線上到一個采樣點的最近點;從采樣到曲線上的最近點的距離;曲線的應(yīng)當(dāng)視為存在采樣點的側(cè)。該信息可以在正則空間中(因此可能需要將采樣點變換到正則空間和/或?qū)⒃谡齽t空間中確定的信息變換回世界空間)或在世界空間被確定。
另外,在本實施方式中,可能不必使用一個或更多個附近的采樣點來確定特定變量的實際值,而是確定一個變量的值是高于還是低于閾值。隨后這可以被用來確定是否有必要獨立地或更準(zhǔn)確地確定變量的值,例如針對靠近輸入曲線的采樣點。例如,對于其他的采樣點,可能能夠使用最近點和/或距離已經(jīng)被確定的一個或更多個周圍采樣點來確定,所述其他采樣點與附近的采樣點相比是更近還是更遠(yuǎn)。如果其他采樣點更遠(yuǎn),則簡單地存儲附近采樣點與曲線的距離(或者指示這一點更遠(yuǎn)的閾值或默認(rèn)值)就足夠了。如果其他采樣點更近,可能有必要針對正則空間中的該采樣點來確定曲線上的最近點,就像針對采樣點的初始集合一樣。
在本實施方式中,優(yōu)選地,針對采樣點的初始集合所確定的信息,例如曲線上到采樣點的一個或更多個最近點、從采樣點到曲線上最近點的距離、和曲線上應(yīng)當(dāng)視為存在采樣點的側(cè)被存儲在例如高速緩存中,以允許對其他采樣點進(jìn)行這些比較。
當(dāng)有多個輸入的曲線時,世界空間中圍繞每個輸入曲線的多個采樣點對于每個輸入曲線而言可以是相同的,例如,它們可以包圍所有輸入曲線(并因此可以在渲染時提供對所有輸入曲線測試的可能性,下面將會討論),但優(yōu)選對于每個輸入曲線分別選擇圍繞每個輸入曲線的多個采樣點,例如恰好包圍輸入曲線,因此它們優(yōu)選地在世界空間中形成一個采樣點子集。例如,可以繪制(單個)邊界框以包圍所有輸入曲線,但優(yōu)選繪制單獨的邊界框以包圍每個輸入曲線,其內(nèi)定義了多個采樣點。
對于變換到正則空間中的世界空間的采樣點,正則曲線上到正則空間中變換采樣點的最近點可以按照任何合適的和所期望的方式來確定。優(yōu)選地,正則曲線上到每個變換采樣點的最近點是在正則空間中分析確定的。最近點可以通過確定正則曲線上的如下的點來確定,即,在該點處的針對正則曲線的切線垂直于從變換采樣點到正則曲線上的該點的矢量。(對于某些正則曲線這可能會返回滿足該條件的曲線上的多個點,所以從變換采樣點到曲線上的點的距離可能需要進(jìn)行比較,以確定最近點,例如,以丟棄落入正則曲線的有限部分之外的點和/或選擇正則曲線上的與變換采樣點之間具有最短距離的點)根據(jù)輸入曲線的定義,這樣的分析計算可能無法在世界空間中進(jìn)行,例如當(dāng)輸入曲線被定義為貝塞爾曲線時,但是可能能夠在正則空間中進(jìn)行,例如當(dāng)相應(yīng)的正則曲線是拋物線時。
當(dāng)輸入曲線具有有限長度,例如由起點和終點定義時,正則曲線的所述部分的起點或終點可以比正則曲線上的(最近)點(例如該部分的外部)更近,此處到正則曲線的切線垂直于從變換采樣點到正則曲線上該點的向量,例如曲線的起點或終點可以是曲線上到采樣點的最近點。因此優(yōu)選地,確定正則曲線上到變換采樣點的最近點的步驟還包括(并且因此優(yōu)選所述處理電路被配置為):確定從變換采樣點到正則曲線的該部分的起點和終點的距離并確定起點或終點中的一個是否為正則曲線上到變換采樣點的最近點。
優(yōu)選地,確定正則曲線上到特定變換采樣點的最近點的步驟包括(并且因此優(yōu)選所述處理電路被配置為):確定所述變換采樣點與正則曲線上到正則空間中變換采樣的最近點的距離,例如,確定正則曲線上到正則空間中變換采樣點的最近點的步驟可以包括最小化給定的變換采樣點與正則曲線之間的距離。這進(jìn)而確定了,對于包圍該曲線的每個采樣點,從采樣點到曲線上針對該采樣點的對應(yīng)最近點的距離,并允許在生成渲染輸出時使用到曲線上的最近點的距離,例如作為帶符號的距離場的一部分,而無需在生成渲染輸出時在世界空間中重新計算該值。
可以使用查找表來確定變換采樣點與正則曲線上的最近點之間的距離??蛇x擇地,變換采樣點與正則曲線上的最近點之間的距離可以被計算分析,例如作為燒制到硬件中的分析計算。如果查找表被使用,則這可以在特定(例如,限制)范圍的正則曲線上提供(例如,以最小化儲存在查找表中的數(shù)據(jù)量,因為大多數(shù)的輸入曲線將對應(yīng)于正則曲線的接近拋物線最低點的部分),而分析計算在該范圍之外進(jìn)行。此外,可以使用多個查找表,例如覆蓋正則曲線的不同部分,預(yù)先確定和存儲與多個采樣點的距離,根據(jù)需要來使用。這有助于減少重新計算這些距離的需求,從而減少了實時處理。
在進(jìn)一步的實施方式中,除了提供查找表,例如存儲在紋理中以確定從一個采樣點到該曲線上的最近點的距離,還可以預(yù)先確定并存儲與輸入曲線相對應(yīng)的正則曲線(例如,也包括所確定的從世界空間到正則空間的變換)。在適當(dāng)和希望的情況下,也可以預(yù)先確定并存儲進(jìn)一步的信息,例如,用于確定從一個采樣點到曲線上最近點的距離和/或輸入曲線的最大范圍的公式(例如,通過定義圍繞輸入曲線的邊界框,其內(nèi)部的采樣點可以被定義)。
例如,當(dāng)輸入曲線定義了要被渲染的字形時,字體格式可以包含該信息的一些或全部。
當(dāng)輸入曲線是一條直線時,優(yōu)選將世界空間中的輸入曲線變換到正則空間中的一個軸,例如x軸,例如根據(jù)需要使用旋轉(zhuǎn)、平移和縮放中的一個或更多個。于是,正則曲線上的最近點是簡單的,例如變換采樣點沿著直線被變換的軸的x坐標(biāo)。當(dāng)輸入曲線具有有限長度時,例如由起點和終點所定義時,正則曲線上到變換采樣點的最近點是變換采樣點的x坐標(biāo),如果例如變換采樣點的x坐標(biāo)位于正則曲線的起點和終點的例如的x坐標(biāo)之間。當(dāng)變換采樣點的例如x坐標(biāo)位于正則曲線的起點和終點之外時,正則曲線上到變換采樣點的最近點是起點或終點當(dāng)中到變換采樣點更近一方。對于具有有限長度的這種輸入曲線,正則空間中的直線段可以縮放成在正則空間的x=0和x=1之間,但是這不是必要的。
一旦正則曲線上到變換采樣點的最近點已經(jīng)在正則空間中確定,就可以將最近點從正則空間變換到世界空間,例如使用針對輸入曲線所確定的世界空間與正則空間之間的變換的逆變換。因此,對于所述多個采樣點中的每一個,該方法可以包括以下步驟(所述處理電路可被配置成):利用世界空間與正則空間之間的變換的逆變換將所確定的最近點從正則空間變換到世界空間;以由此針對世界空間中圍繞輸入曲線的每個采樣點,確定世界空間中的輸入曲線上的對應(yīng)最近點。生成渲染輸出的步驟隨后可以在生成渲染輸出時,利用針對世界空間中的采樣點所確定的輸入曲線上的最近點。然而,如下所述,這可能不是必要的,因為使用所確定的最近點例如以確定從采樣點到曲線的距離和/或確定曲線的存在采樣點的一側(cè)也可以在正則空間中執(zhí)行。
當(dāng)有多個輸入曲線時,例如一起形成一個形狀(例如字形)的輪廓,對應(yīng)正則曲線上對每個采樣點的最近點可以針對所述多個輸入曲線中的每一個單獨確定,例如對于圍繞每個輸入曲線單獨的采樣點集合,針對每個輸入曲線確定,且確定是在正則空間中執(zhí)行的,使得能夠針對包圍每個輸入曲線的采樣點集合來確定在所述多個正則和/或輸入曲線中的每一個上的最近點(其可以是正則或輸入曲線的起點或終點),必要時將正則空間中確定的最近點變換到世界空間中。(同樣,根據(jù)需要,對于每個輸入曲線的采樣點集合可包圍輸入曲線中的一個或更多個,或所有)。
多條曲線上的這些最近點(當(dāng)已經(jīng)針對多個輸入曲線中的兩個以上,例如全部曲線,采樣點具有在正則空間中確定的最近點時)然后可以彼此進(jìn)行比較,以確定多條曲線上對每個采樣點的最近點,例如通過分別比較從采樣點到多條曲線上的每個最近點的距離。最近點之間例如使用與采樣點的距離進(jìn)行的比較,可以在世界空間或正則空間中進(jìn)行。當(dāng)在正則空間中進(jìn)行時,可能需要使用輸入曲線到正則空間的變換,例如如果需要不同的縮放來將不同的輸入曲線變換到正則空間。當(dāng)在世界空間中進(jìn)行時,應(yīng)當(dāng)根據(jù)需要使用分別針對輸入曲線所確定的逆變換,將所確定的最近點和/或從采樣點到它的距離從正則空間變換到世界空間。
在另一個實施方式中,可以作為整體(或一個子集)為每個采樣點確定到多條曲線的最近點(例如,對于適當(dāng)選擇的包圍所有多個輸入曲線的采樣點的陣列)。這使得能夠為每個采樣點確定多條曲線之一上的單個最近點(其可以是曲線的起點或終點)。最近點可以通過循環(huán)所述多個輸入曲線中的一個或更多個來確定,以確定到每個采樣點的最近點,即,確定最近點位于所述多條曲線中的所述一個或更多個中的哪一個上。
同樣,本實施方式中最近點的確定可以在世界空間或正則空間中進(jìn)行,根據(jù)需要進(jìn)行變換和/或縮放。需要注意與曲線的終點接近的采樣點,尤其是在正則空間中工作時,以確定最近點位于兩個或更多個曲線中的哪個上。例如,兩個輸入曲線可以形成一個角的形狀,造成不會立即明白采樣點最接近哪一個曲線。
在上述兩個實施方式中,一旦確定了多條曲線上對采樣點的(單個)最近點,優(yōu)選對于每個采樣點確定(并且,例如,存儲)最近點所位于的正則或輸入曲線的標(biāo)識。
類似的確定(在世界空間或正則空間中)也可對于從每個采樣點到作為一個整體的多條曲線上相應(yīng)的(單個)最近點來進(jìn)行,例如比較所述多個輸入曲線中每一個的距離(在正則空間或世界空間中,必要時使用適當(dāng)?shù)淖儞Q)。
多個輸入曲線上對給定采樣點的最近點可以使用所有所述多個輸入曲線來確定,但優(yōu)選僅針對所述多個輸入曲線中的一些來確定最近點,例如從所述多個輸入曲線中預(yù)先選定的一組一個或更多個輸入曲線。多個輸入曲線中的一個或更多個輸入曲線,例如預(yù)先選定的組,可以按照任何合適的和所期望的方式來選擇,例如基于粗略判斷所述多個輸入或相應(yīng)的正則曲線中的哪一個最靠近每個(例如,變換)采樣點和/或所述多個輸入曲線中的哪一個位于所討論的采樣點所處的塊元(tile)。只選擇有限數(shù)量的輸入曲線來用于進(jìn)行這種判斷有助于減少所需的處理。
(應(yīng)當(dāng)理解,當(dāng)渲染輸出包括字形時,字形的輪廓是由一個或更多個輸入曲線定義的,輸入曲線內(nèi)部的區(qū)域需要被適當(dāng)著色以顯示字形。盡管字形內(nèi)可能存在圍繞任何特定點,或接近該字形以外的任何特定點的多個輸入曲線,但是確定采樣點落在字形內(nèi)部還是外部可簡單地通過確定最近點位于所述多個輸入曲線中的哪一個上來進(jìn)行。)
當(dāng)變換采樣點與正則曲線上對變換采樣點的最近點之間的距離也在正則空間中被確定時,優(yōu)選利用正則曲線到輸入曲線的逆變換,將針對每個采樣點的該距離,例如連同該曲線上的最近點一起,從正則空間變換到世界空間。
分別位于正則空間或世界空間中的(正則或輸入曲線上的)最近點,和從采樣點到可用的正則或世界空間中的最近點的距離,可以直接傳遞給所述處理電路用于生成渲染輸出。(當(dāng)從變換采樣點到正則曲線上的最近點的距離尚未在正則空間中確定和/或變換到世界空間時,優(yōu)選例如對于每個采樣點,使用輸入曲線上的最近點和采樣點,確定從采樣點到世界空間中(輸入曲線上的)最近點的距離。這可以在正則空間或世界空間中適當(dāng)?shù)卮_定。)但是,該方法可以包括以下步驟(所述處理電路被配置成):對于每個采樣點,存儲所述曲線上的最近點。根據(jù)需要,對于每個最近點所存儲的值可以是在正則空間或在世界空間中。
當(dāng)基于已確定的初始采樣點集合的信息確定了另一個采樣點集合的信息時,例如從一個采樣點到曲線上的最近點的距離,優(yōu)選該信息也被例如與針對初始采樣點集合確定的對應(yīng)信息一起存儲。
當(dāng)從采樣點到最近點的距離已經(jīng)被確定(在正則空間或世界空間中,根據(jù)需要),優(yōu)選地,該方法包括以下步驟(所述處理電路被配置為):例如連同輸入曲線上對每個采樣點的最近點一起,存儲從采樣點到曲線上的最近點的距離。對于每個距離所存儲的值可以在正則空間中,但是優(yōu)選地在世界空間中。存儲從采樣點到曲線上的最近點的變換距離避免了必須再次確定該距離(例如,使用為每個采樣點存儲的曲線上的最近點)。
距離值可以按照任何合適的和所希望的方式存儲(在正則空間或世界空間中,根據(jù)需要)。距離值可以被存儲為,例如它們被計算的原形式。然而,在一個實施方式中,當(dāng)距離值大于一個閾值時,該距離值被截斷,例如被設(shè)置為閾值或默認(rèn)值。通過僅存儲直到閾值的所確定的距離值,所以存儲空間可被最小化。如果采樣點靠近曲線,使得知道該距離變得重要,例如可被用來生成特殊的渲染效果,則實際距離值是可用的。然而,這個距離范圍之外,例如進(jìn)一步遠(yuǎn)離輸入曲線的采樣點,可能不必知道與輸入曲線上的最近點的距離的精確值,只知道它至少是所述閾值即可。
當(dāng)有多個輸入曲線時,從采樣點到作為整體的多條曲線的距離(例如,連同最近點所處的曲線的標(biāo)識一起),或針對所述多個輸入曲線中的每一個輸入曲線從采樣點到該每一個輸入曲線的距離,另外或代替地,在合適和希望的情況下,相應(yīng)的最近點可以被存儲。
距離(另外或代替,最近點)可以被存儲為任何適當(dāng)?shù)暮推谕男问?和在正則空間和/或世界空間中,根據(jù)需要),并在任何合適的和所需的存儲器中,使得能夠在生成渲染輸出時使用這個信息。在一個優(yōu)選實施方式中,對于每個采樣點的距離(另外或代替,最近點)被存儲為一個或更多個圖形紋理的形式。這是特別有利和有益的,因為不僅圖形紋理旨在存儲與特定地理位置的陣列有關(guān)的數(shù)據(jù),而且將數(shù)據(jù)存儲為紋理形式使得能夠?qū)D形處理系統(tǒng)中通常包含的現(xiàn)有紋理映射處理用來以本發(fā)明的方式生成渲染輸出。
申請人還相信,這種形式的圖形紋理的生成本身就是新穎的和有利的。因此,本發(fā)明相應(yīng)地還延伸到構(gòu)建這種紋理。
因此,根據(jù)第三方面,本發(fā)明提供了一種生成圖形紋理的方法,該圖形紋理在使用輸入曲線來生成渲染輸出時在圖形處理系統(tǒng)中使用,該方法包括以下步驟:
針對在世界空間中定義的輸入曲線:
確定在正則空間中定義的正則曲線的與所述輸入曲線相對應(yīng)的部分和將所述輸入曲線映射到所述正則曲線的所述部分所需的變換;
針對所述世界空間中圍繞所述輸入曲線的多個采樣點中的每一個采樣點:
利用在所述世界空間和所述正則空間之間的所確定的變換將所述采樣點從所述世界空間變換到所述正則空間;以及
在所述正則空間中,確定所述正則曲線的所確定的部分上的到變換采樣點的最近點;
以由此針對所述正則空間中圍繞所述正則曲線的每一個所述變換采樣點,確定所述正則空間中的所述正則曲線上的對應(yīng)最近點;
針對每一個采樣點,確定從所述采樣點到所述曲線上所確定的最近點的距離;以及
生成包括紋理像素的陣列的圖形紋理,其中每一個紋理像素對應(yīng)于所述多個采樣點中的至少一個采樣點,并且針對所述至少一個采樣點,將從所述至少一個采樣點到所述曲線的所確定的(多個)距離與該每一個紋理像素關(guān)聯(lián)。
從第四方面來看,本發(fā)明提供了一種用于生成圖形紋理的設(shè)備,該圖形紋理在使用輸入曲線來生成渲染輸出時在圖形處理系統(tǒng)中使用,該設(shè)備包括:
處理電路,其配置為針對在世界空間中定義的輸入曲線:
確定在正則空間中定義的正則曲線的與所述輸入曲線相對應(yīng)的部分和將所述輸入曲線映射到所述正則曲線的所述部分所需的變換;
針對所述世界空間中圍繞所述輸入曲線的多個采樣點中的每一個采樣點:
利用在所述世界空間和所述正則空間之間的所確定的變換將所述采樣點從所述世界空間變換到所述正則空間;以及
在所述正則空間中,確定所述正則曲線的所確定的部分上的到變換采樣點的最近點;
以由此針對所述正則空間中圍繞所述正則曲線的每一個所述變換采樣點,確定所述正則空間中的所述正則曲線上的對應(yīng)最近點;
針對每一個采樣點,確定從所述采樣點到所述曲線上所確定的最近點的距離;以及
生成包括紋理像素的陣列的圖形紋理,其中每一個紋理像素對應(yīng)于所述多個采樣點中的至少一個采樣點,并且針對所述至少一個采樣點,將從所述至少一個采樣點到所述曲線的所確定的(多個)距離與該每一個紋理像素關(guān)聯(lián)。
本領(lǐng)域技術(shù)人員可以理解,本發(fā)明的這些方面和實施方式根據(jù)情況,可以而且優(yōu)選地包括本文中描述的本發(fā)明的優(yōu)選和任選特征的任何一種。
例如,從每個采樣點到曲線上的對應(yīng)最近點距離可以在正則空間或世界空間中確定。所確定的距離可被存儲在,因此,紋理可以存儲在(即,紋理像素可以位于)正則空間或世界空間中。然而優(yōu)選的是,紋理(和紋理像素),因此也優(yōu)選所確定的距離,被存儲在中間空間中。該中間空間可以是任何合適和所需的空間。優(yōu)選地,中間空間是世界空間的縮放和/或平移版本。這可能是在紋理像素的基準(zhǔn)點設(shè)定原點,例如圍繞采樣點的邊界框的左下角。
同樣地,一個或更多個紋理中的每一個紋理像素優(yōu)選地將上述針對正則曲線上的方案討論的關(guān)于該紋理像素位置的信息與其相關(guān)聯(lián)。換句話說,每一個紋理像素將代表正則空間的至少一個位置并針對正則空間中的該位置,存儲與到正則曲線上的最近點的距離有關(guān)的信息。例如優(yōu)選地,該信息可包括最近點的參數(shù)值和/或最近點所處的輸入曲線的標(biāo)識。
如果信息要被存儲為紋理形式,則紋理可以是任何合適的和所希望的尺寸(即根據(jù)需要包含任意數(shù)量的紋理像素),并且每個紋素可以具有與之關(guān)聯(lián)的任意數(shù)量的數(shù)據(jù)分量。然而,每個紋理像素優(yōu)選地僅將與正則空間中單個離散位置有關(guān)的信息與其相關(guān)聯(lián)。
紋理也可存儲任何其它合適的和所希望的信息。例如,紋理可以存儲以下一個或更多個:世界空間中輸入曲線的定義(包括輸入曲線的任何控制點);正則空間中的正則曲線的定義(包括正則曲線的任何控制點);輸入曲線到相應(yīng)正則曲線的變換;抗混疊信息(例如與所確定的最近點有關(guān),到最近點的距離和/或判定采樣點位于所述輸入曲線的哪一側(cè));以及當(dāng)曲線是橢圓或雙曲線時輸入和/或正則曲線的偏心。紋理也可存儲與輸入曲線有關(guān)的后處理信息,例如輸入曲線將被渲染為描邊曲線(stroked curve)和優(yōu)選還有它的寬度(在這個例子中,到曲線的距離被用于確定采樣點是落在描邊曲線的寬度之內(nèi)還是之外)。
當(dāng)有多個輸入曲線時,優(yōu)選與多個不同輸入曲線有關(guān)的信息,例如如上詳述的,被一起存儲為例如相同的紋理。例如,這可以通過在空間上分離紋理中的輸入曲線,然后針對所討論的輸入曲線的紋理中的相應(yīng)區(qū)域進(jìn)行采樣。此外,當(dāng)輸入曲線涉及字形時,優(yōu)選地紋理存儲與構(gòu)成字體的所有字形有關(guān)的信息,例如以字體圖集的形式。對于多個輸入曲線,這可以通過例如在空間上分離紋理中的字形,然后針對所討論的字形的紋理中的適當(dāng)區(qū)域進(jìn)行采樣來實現(xiàn)。
如上所述,在本發(fā)明的這些方面和實施方式中,表示輸入曲線的紋理被配置成使得圍繞所述輸入曲線的采樣紋理點(紋理像素)會給出指示從紋理點到曲線上的最近點的距離的采樣紋理值,例如在正則或世界空間中,并且也可能是曲線上到世界空間中的紋理點的最近點,以及可被存儲在紋理中的任何其他信息。因此,當(dāng)紋理被采樣時,采樣紋理值可被用于確定采樣點位于曲線的哪一側(cè),然后可被用于使用輸入曲線來生成渲染輸出。
也可以或替代將必要信息存儲在紋理中,所確定的信息的一些或全部,或者作為確定用于生成渲染輸出的信息的過程的一部分例如作為中間步驟而被確定的信息,可以被存儲在圖形處理系統(tǒng)中,例如如上所述存儲在高速緩存中的例如任何合適的和所希望的位置。當(dāng)要實時確定信息時,這可能是方便的。在另一個實施方式中,所確定的信息可以存儲在本地,例如芯片上,圖形處理系統(tǒng)中存儲器中,例如像素本地存儲器中。
一旦確定了最近點的陣列(并且,例如,存儲在紋理中),隨后連同可以利用曲線上的最近點確定的任何其它合適的和所希望的信息,例如從采樣點到曲線上的最近點的距離(并且,例如存儲在紋理中)一起,可以按照在任何合適的和期望的方式,使用針對正則空間中的變換采樣點確定的正則曲線上的最近點來生成使用輸入曲線的渲染輸出。這可能是通過直接使用正則曲線上所確定的最近點,或來自由其衍生的信息,例如當(dāng)變換回世界空間中的輸入曲線時的最近點或者從采樣點到曲線上的最近點的距離(在正則空間或世界空間中,根據(jù)需要)。
如上所述,確定和存儲到曲線的最近點的步驟可以離線執(zhí)行,并且存儲在例如紋理中,供以后生成渲染輸出時使用。優(yōu)選地,曲線上的最近點是實時確定的,雖然優(yōu)選地也將曲線上的最近點(和/或與此相關(guān)的信息,如距離)存儲在例如紋理中,使得它們可供將來使用,例如如果稍后要使用相同的輸入曲線來生成渲染輸出。
優(yōu)選地,使用所確定的從該曲線上所確定的最近點到采樣點的距離來生成渲染輸出(在正則空間或世界空間中,根據(jù)需要)。因此,在一個優(yōu)選實施方式中,為了使用輸入曲線來生成渲染輸出,當(dāng)已經(jīng)針對圍繞該曲線的多個采樣點中的每一個,確定了從該曲線上所確定的最近點到采樣點的距離時,該方法包括以下步驟(圖形處理系統(tǒng)包括被配置成執(zhí)行以下操作的處理電路):
對于世界空間中的多個采樣點中的每一個:
在世界空間中與采樣點相對應(yīng)的位置,對從輸入曲線上所確定的最近點到采樣點的所確定的距離進(jìn)行采樣;以及
在世界空間中使用針對采樣點所確定的距離來生成渲染輸出。
渲染輸出可以按照任何合適的和所希望的方式使用所確定的最近點來生成,例如如上所述通過使用所確定的距離。在優(yōu)選實施方式中,可以確定與輸入曲線和采樣點有關(guān)的進(jìn)一步信息,其可在使用所確定的最近點生成渲染輸出時被確定和/或與連同最近點一起被確定,使得它可以被存儲,例如在紋理中,并在生成渲染輸出時使用。
在優(yōu)選實施方式中,該方法包括以下步驟(圖形處理系統(tǒng)包括被配置成執(zhí)行以下操作的處理電路):
對于圍繞曲線的多個采樣點中的每一個:
使用曲線上所確定的最近點來確定采樣點應(yīng)視為存在于曲線的哪一側(cè);
以由此針對圍繞曲線的每個采樣點,確定采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè);以及
在生成渲染輸出時,利用采樣點被視為存在于曲線的哪一側(cè)的確定。
如果合適和希望,確定采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè)的步驟可以在正則空間或世界空間中進(jìn)行。
因此,一旦它們已經(jīng)被確定(并且,例如,從紋理中采樣),曲線上所確定的最近點中的每一個被優(yōu)選使用,以確定采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè)。該確定可以按照任何適當(dāng)和期望的方式來執(zhí)行。知道采樣點位于該曲線的哪一側(cè)允許使用該信息來生成渲染輸出。例如,如果采樣點位于(例如具有至少部分由輸入曲線限定的輪廓的)對象內(nèi),也可以按照對象的顏色著色,或者,如果采樣點位于(例如由具有至少部分由輸入曲線限定的輪廓的對象投射的)陰影內(nèi),它可以被適當(dāng)?shù)仃幱盎?/p>
使用曲線上針對每個采樣點確定的最近點來確定采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè)的步驟可包括采樣點相對于所述曲線的切線檢查。當(dāng)針對采樣點已經(jīng)確定了采樣點與曲線上的對應(yīng)最近點之間的距離時,確定采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè)的步驟也可以使用從采樣點到曲線上的最近點的距離。優(yōu)選地,確定從采樣點到曲線上對應(yīng)最近點的距離的步驟還包括確定采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè)。同樣,這可以在正則空間或世界空間中進(jìn)行。
當(dāng)有多個輸入曲線,并且已經(jīng)針對每個采樣點以多個輸入曲線作為整體確定(并且例如,存儲)了曲線上的最近點時,該最近點可以被用來確定采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè)?;蛘?,當(dāng)已經(jīng)針對每個采樣點為多條曲線中的每一個(例如,至少一些)確定了最近點時,這些最近點可以一起被用來確定采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè)。
優(yōu)選地,當(dāng)存在多個輸入曲線時,使用所確定的最近點確定采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè)的步驟包括(并優(yōu)選,所述處理電路被配置成)執(zhí)行采樣點相對于多條曲線的(例如,至少一些)的平均正切檢查。平均正切檢查可以使用所確定的最近點與所有這多條曲線,例如針對字形來進(jìn)行,但是優(yōu)選地多條曲線的僅一個子集被用于執(zhí)行平均正切檢查。平均正切檢查可以在正則空間或世界空間中進(jìn)行。
優(yōu)選地,用于平均正切檢查的多條曲線的子集是預(yù)先選定的,例如使用在確定曲線上的最近點時所使用的相同的子集(其可以是最靠近采樣點的)。
當(dāng)輸入曲線包括直線時,優(yōu)選地,使用變換最近點確定采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè)的步驟包括(并優(yōu)選,所述處理電路被配置成)確定采樣點在正則空間中高于還是低于軸線。
當(dāng)已針對每個采樣點確定了采樣點與曲線上對應(yīng)最近點之間的距離和/或采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè)時,這兩條信息至少一個可以被存儲,例如在紋理中。所存儲的信息可以在正則空間和/或在世界空間中。因此,當(dāng)這兩個信息都被確定時,它們可按照帶符號的距離場的形式被使用(并且例如,存儲)(采樣點位于曲線的哪一側(cè)決定了所存儲的到曲線的距離的符號)。如上所述,優(yōu)選地,確定距離的步驟還確定采樣點位于曲線的哪一側(cè),因此可容易地使用和/或一起存儲每個采樣點的這兩種信息。
優(yōu)選地,生成渲染輸出的步驟(所述處理電路被配置成)使用在正則空間或世界空間中從采樣點到曲線上最近點的距離,和/或采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè)的確定。當(dāng)從采樣點到曲線上最近點的距離已被預(yù)先確定時,可以使用例如存儲在紋理中的所確定的值??商娲?,從采樣點到曲線上最近點的距離可以根據(jù)采樣點和曲線上最近點來確定。
因此,在一組特別優(yōu)選的實施方式中,在正則空間或世界空間中從采樣點到曲線上最近點的距離,和采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè)的確定,這兩個信息都被用于,例如以帶符號的距離場的方式生成渲染輸出。
渲染輸出可以在世界空間中生成,例如最初限定了采樣點以確定該曲線上的最近點的空間(從那里它們被變換到正則空間),并且因此在優(yōu)選例如以紋理存儲到最近點的距離的空間,或渲染輸出可以在不同的“表面”空間中生成,例如,對應(yīng)于要輸出顯示的空間。當(dāng)文本要被渲染到例如面對觀察者不平坦的三維表面上時,后一種情況可能是方便的。這在虛擬或增強(qiáng)現(xiàn)實中很有用。
在后一種實施方式中,曲線上所確定的最近點可以直接采樣,并用來生成渲染輸出。然而,優(yōu)選地,為了使用輸入曲線來生成渲染輸出,當(dāng)已經(jīng)針對圍繞曲線的多個采樣點中的每一個確定了從該曲線上所確定的最近點到采樣點的距離時,該方法優(yōu)選包括如下步驟(圖形處理系統(tǒng)包括被配置成執(zhí)行以下操作的處理電路):
針對面空間中的多個采樣點中的每一個:
在世界空間中與面空間中的采樣點相對應(yīng)的位置,對從輸入曲線上最近點到采樣點的所確定的距離進(jìn)行采樣;和
在世界空間中使用針對采樣點所確定的距離來生成渲染輸出。
當(dāng)已經(jīng)確定(并且,例如,存儲)了采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè),優(yōu)選針對面空間中的多個采樣點中的每一個,也在世界空間中與面空間中的采樣點相對應(yīng)的位置對該信息進(jìn)行采樣,然后用來生成渲染輸出,例如使用信息在世界空間與面空間之間的適當(dāng)變換,如果需要的話。在另一個實施方式中,從采樣點到輸入曲線上的最近點的距離和/或采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè)的確定可以在面空間中確定。
當(dāng)在面空間中生成渲染輸出時,優(yōu)選地,在使用輸入曲線生成渲染輸出中的第一步驟是,針對面空間(要生成,例如要顯示,渲染輸出的空間)中多個采樣點中的每一個,在世界空間中與該采樣點相對應(yīng)的位置,對從曲線上的最近點到采樣點的所確定的距離進(jìn)行采樣(優(yōu)選地還有,采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè)的確定)。為此,取決于面空間和世界空間之間的關(guān)系,可能必須執(zhí)行針對采樣點的在該面空間與世界空間之間的適當(dāng)變換。例如,如果針對采樣點確定的信息只在正則空間中確定,而沒有變換回世界空間,則還可能需要進(jìn)行從世界空間到正則空間的進(jìn)一步變換。
例如,面空間可以位于平行于世界空間的平面上,例如當(dāng)輸入曲線形成要渲染的某個對象,例如字形,的至少一部分,使得渲染輸出可能涉及2D圖像時。在這種情況下,面空間可以是與世界空間相同的空間(或在縮放因子內(nèi)),使得面空間的多個采樣點可以直接對應(yīng)于世界空間中的多個采樣點(雖然面空間中采樣點可能不以世界空間中的采樣點相同的密度來提供,使得它們可能需要被適當(dāng)映射到世界空間的相應(yīng)采樣點)。
在另一個實施方式中,可能需要面空間和世界空間之間執(zhí)行采樣點的變換,因為渲染輸出可以涉及3D場景,例如曲線被用于創(chuàng)建陰影或當(dāng)在曲面上顯示書寫(例如虛擬現(xiàn)實)。
如已經(jīng)提到的,輸入曲線(因此還有所提供的紋理)可用于例如使用陰影來渲染與輸入曲線形成其至少一部分的對象不同的對象。然而優(yōu)選地,輸入曲線形成待渲染對象的至少一部分,例如它形成其輪廓。例如,待渲染對象可以包括字形(作為字體的一部分)。輸入曲線可以按照任何彎曲表示的形式來定義,例如矢量圖形。優(yōu)選地,輸入曲線以可縮放的矢量圖形(SVG)格式來定義。
一旦確定了針對要在生成渲染輸出時使用的輸入曲線的信息,例如輸入曲線上的最近點、從采樣點到輸入曲線上的最近點的距離和/或采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè)的確定,就可以按照任何合適的和所期望的方式,例如直接在世界空間中或從面空間,生成渲染輸出。當(dāng)紋理已確定和存儲時,可以使用,例如任何合適的圖形紋理映射處理來進(jìn)行這種操作。
在一個優(yōu)選實施方式中,渲染輸出是這樣生成,例如用于顯示的:首先生成覆蓋了渲染輸出要出現(xiàn)的場景區(qū)域的基元(primitive),例如在面空間中,然后在由基元覆蓋的場景區(qū)域上對輸入曲線使用所確定的信息,例如通過對基元施加紋理,并相應(yīng)地對基元進(jìn)行陰影化。
可根據(jù)需要,例如通過定義一個或更多個覆蓋要出現(xiàn)待繪制形狀的場景區(qū)域,例如覆蓋字形,的邊界框或邊界多邊形,來生成基元。
生成基元時,確保所生成的基元僅對紋理的所需(及適當(dāng))的區(qū)域進(jìn)行采樣,可能是必要的。(在以相同紋理表示多個輸入曲線(或者,例如,字形)時,尤其是這樣。)
所生成的基元然后可以光柵化到生成的基元和片段內(nèi)的多個采樣點,以及例如,代表通過在紋理中與基元采樣點(和/或片段)位置相對應(yīng)的位置進(jìn)行采樣而施加到基元的每個采樣點(和/或片段)的輸入曲線的紋理。(紋理應(yīng)該使用適當(dāng)?shù)募y理過濾處理,如,優(yōu)選雙向線性過濾,進(jìn)行采樣)。這可以涉及生成覆蓋面空間中所述一個或更多個基元的采樣點的陣列和將這些采樣點變換到可以對例如根據(jù)紋理所確定的信息進(jìn)行采樣的世界空間。
采樣信息,例如紋理值,隨后被用來對相應(yīng)的采樣位置進(jìn)行適當(dāng)著色,例如使用采樣點應(yīng)當(dāng)被視為存在于曲線的哪一側(cè)的確定和/或采樣位置到所述輸入曲線的距離?;谠摯_定,根據(jù)情況對所述多個采樣點分配數(shù)據(jù),如紅色、綠色和藍(lán)色(RGB)顏色值和一個“阿爾法”透明度值,以允許正確顯示例如包含字形的場景。
應(yīng)當(dāng)理解的是,當(dāng)從采樣點到輸入曲線上最近點的距離可用于生成渲染輸出時,這可以被用來允許執(zhí)行相比只存在針對輸入曲線的邊緣的閾值而言更復(fù)雜的渲染效果,例如旋轉(zhuǎn)、陰影化等。
本發(fā)明適用于任何形式或構(gòu)造的渲染器,例如具有“流水線”構(gòu)造(在此情況下,渲染器將為渲染流水線的形式)的渲染器。在一個優(yōu)選實施方式中,本發(fā)明應(yīng)用于硬件圖形渲染流水線。本發(fā)明的各種功能和元素等都可根據(jù)需要來實現(xiàn),例如優(yōu)選地,通過適當(dāng)?shù)墓δ軉卧?、處理邏輯、處理器、微處理器裝置等。也可以設(shè)想,在一個實施方式中,本發(fā)明可以在功能最小化的,例如簡裝版的,圖形處理流水線上執(zhí)行。這樣的系統(tǒng)可能適合于在低功率設(shè)備,例如可穿戴設(shè)備、電子閱讀器等上使用。
本發(fā)明適用于所有形式的渲染,例如即時模式渲染、延遲模式渲染、基于塊元的渲染等。在一個優(yōu)選實施方式中,它被用在延遲模式渲染和基于塊元的渲染器中。
如從上面可以理解的,本發(fā)明特別地,但不排他地,適用于2D或3D圖形處理器和處理設(shè)備,并且相應(yīng)地延伸到包括根據(jù)此處所描述的本發(fā)明的任何一個或更多個方面的裝置或者按照此處所描述的本發(fā)明的任何一個或更多個方面來操作的2D或3D圖形處理器和2D或3D圖形處理平臺。關(guān)于執(zhí)行上述討論的特定功能的任何硬件,例如2D或3D圖形處理器可以以其他方式包括2D或3D圖形處理器所包括的任何一個或更多個或所有通常功能單元等。在一個優(yōu)選實施方式中,該系統(tǒng)包括固定功能硬件單元,其被具體配置為,例如確定曲線上到采樣點的最近點和/或從采樣點到曲線上的最近點的距離(例如,在正則空間中)。
本發(fā)明適用于任何合適的形式或構(gòu)造的圖形處理器。它特別適用于基于塊元的圖形處理器和圖形處理系統(tǒng)。因此,在優(yōu)選實施方式中,圖形處理系統(tǒng)和圖形處理流水線分別是基于塊元的系統(tǒng)和流水線。
在特別優(yōu)選的實施方式中,本發(fā)明的各種功能在生成并輸出例如被寫出到用于顯示設(shè)備的幀緩存的經(jīng)渲染的(例如,片段)數(shù)據(jù)的單個圖形處理平臺上執(zhí)行。
本發(fā)明能夠在任何合適的系統(tǒng),例如合適配置的基于微處理器的系統(tǒng)中實現(xiàn)。在優(yōu)選實施方式中,本發(fā)明在計算機(jī)和/或基于微處理器的系統(tǒng)中實現(xiàn)。
本發(fā)明的各種功能能夠以任何合適且期望的方式來執(zhí)行。例如,如所期望的,本發(fā)明的功能能夠在硬件或軟件中實現(xiàn)。因此,例如,除非另有說明,本發(fā)明的各種功能元件、階段和“手段”可以包括能夠被操作為執(zhí)行各種功能等的合適的處理器或多個處理器、控制器或多個控制器、功能單元、電路、處理邏輯器、微處理器裝置等,例如能夠被編程為以期望的方式運行的適當(dāng)專用的硬件元件和/或可編程硬件元件。
這里應(yīng)當(dāng)注意的是,如本領(lǐng)域技術(shù)人員將要理解的,本發(fā)明的各種功能、階段等可以在給定的處理器上重復(fù)和/或執(zhí)行。同樣地,如果需要的話,各種處理階段可以共享處理電路等。
關(guān)于執(zhí)行上述的特定功能所需的任何硬件,數(shù)據(jù)處理系統(tǒng)和流水線另外能夠包括數(shù)據(jù)處理流水線所包括的通常的功能單元中的任何一個或更多個或者全部等。
本領(lǐng)域技術(shù)人員還將理解,視情況而定,本發(fā)明的全部所述的方面和實施方式都能夠并且優(yōu)選地確實包括本文所述的優(yōu)選的和可選的特征中的任何一個或多個或者全部。
根據(jù)本發(fā)明的方法可以至少部分地利用軟件,例如計算機(jī)程序,來實現(xiàn)。因此可見,當(dāng)從其他方面來看時,本發(fā)明提供:計算機(jī)軟件,當(dāng)安裝在數(shù)據(jù)處理裝置上時,該計算機(jī)軟件具體適用于執(zhí)行本文所述的方法的;計算機(jī)程序元件,其包括當(dāng)該程序元件在數(shù)據(jù)處理裝置上運行時用于執(zhí)行本文所述的方法的計算機(jī)軟件代碼部分;以及計算機(jī)程序,當(dāng)該程序在數(shù)據(jù)處理系統(tǒng)上運行時,該計算機(jī)程序包括適用于執(zhí)行本文所述的方法或多種方法的全部步驟的代碼裝置。數(shù)據(jù)處理器可以是微處理器系統(tǒng)、可編程FPGA(現(xiàn)場可編程門陣列)等。
本發(fā)明還延伸至包括如下軟件的計算機(jī)軟件載體,即,當(dāng)該軟件被用來操作圖形處理器時,包括數(shù)據(jù)處理裝置的渲染器或微處理器系統(tǒng)促進(jìn)與所述數(shù)據(jù)處理裝置和所述處理器、渲染器或系統(tǒng)的連接,以執(zhí)行本發(fā)明的方法的步驟。這種計算機(jī)軟件載體可以是諸如ROM芯片、CD ROM、RAM、閃速存儲器或磁盤的物理存儲介質(zhì),或者可以是諸如通過電線的電子信號、光學(xué)信號或例如對衛(wèi)星等的無線電信號這樣的信號。
將要進(jìn)一步理解的是,并非本發(fā)明的方法的全部步驟都需要由計算機(jī)軟件來執(zhí)行,因此從更寬泛的方面來看,本發(fā)明提供用于執(zhí)行本文所列出的方法的步驟中的至少一個的計算機(jī)軟件和安裝在計算機(jī)軟件載體上的這種軟件。
因此本發(fā)明可以被合適地體現(xiàn)為計算機(jī)程序產(chǎn)品,與計算機(jī)系統(tǒng)一起使用。這種實施可以包括要么是固定在有形非瞬時性介質(zhì)上的一系列計算機(jī)可讀指令,該有形非瞬時性介質(zhì)例如有計算機(jī)可讀介質(zhì),例如磁盤、CD-ROM、ROM、閃速存儲器或硬盤。這種實施還可以包括通過有形介質(zhì)或者無形地利用無線技術(shù)經(jīng)由調(diào)制解調(diào)器或其它接口裝置可以向計算機(jī)系統(tǒng)傳輸?shù)囊幌到y(tǒng)計算機(jī)可讀指令,該有形介質(zhì)包括但不限制于光學(xué)或模擬通信線路,該無線技術(shù)包括但不限制于微波、紅外或其它傳輸技術(shù)。一系列的計算機(jī)可讀指令體現(xiàn)本文之前所述的全部或部分的功能。
本領(lǐng)域技術(shù)人員將理解,這種計算機(jī)可讀指令能夠以許多編程語言的形式來編寫,與很多計算機(jī)架構(gòu)或操作系統(tǒng)一起使用。進(jìn)一步地,這種指令可以利用當(dāng)前或未來的包括但不限制于半導(dǎo)體、磁性的或光學(xué)的任何存儲技術(shù)來存儲,或者可以利用當(dāng)前或未來包括但不限制于光學(xué)、紅外或微波的任何通信技術(shù)來進(jìn)行發(fā)送。可以想到,這種計算機(jī)程序產(chǎn)品可以利用另外的印刷或電子文檔,例如利用計算機(jī)系統(tǒng)在例如系統(tǒng)ROM或固定磁盤上預(yù)加載的壓縮打包軟件,作為可去除介質(zhì)進(jìn)行分發(fā),或者通過網(wǎng)絡(luò)例如因特網(wǎng)或萬維網(wǎng)從服務(wù)器或電子公告板進(jìn)行分發(fā)。
附圖說明
下面將參照附圖以示例的方式描述本發(fā)明的多個優(yōu)選實施方式,圖中:
圖1示出了根據(jù)本發(fā)明一個實施方式的渲染文本串的工作流的概圖;
圖2示出了作為本發(fā)明一個實施方式的處理的一部分的要渲染的字形,其邊緣由一系列輸入曲線來定義;
圖3示出了作為本發(fā)明一個實施方式的處理的一部分,對輸入曲線從世界空間到正則空間的變換;
圖4(i)、圖4(ⅱ)和圖4(ⅲ)示出了作為本發(fā)明一個實施方式的處理的一部分,對輸入曲線從世界空間到正則空間的變換的步驟;
圖5示出了作為本發(fā)明一個實施方式的處理的一部分,確定正則曲線上到采樣點的最近點的步驟;
圖6示出了在本發(fā)明一個實施方式中生成的針對三個字形的帶符號的距離場的圖形表示;
圖7示出了針對被圖形表示為紋理圖集以用于本發(fā)明實施方式的字體中的每個字形的帶符號的距離場的圖形表示;
圖8示出了根據(jù)本發(fā)明一個實施方式的用于執(zhí)行用于渲染字形的處理的步驟的流程圖。
具體實施方式
如上述討論的,本發(fā)明的基本前提是,使用輸入曲線生成渲染輸出,確定輸入曲線上到每個不同采樣點的最近點用于在渲染中使用,例如以確定采樣點應(yīng)該被視為存在于輸入曲線的哪一側(cè)。輸入曲線可以形成待渲染對象的至少一部分(例如,其邊緣的至少一部分),或者它可形成要以某種其他方式被用作渲染輸出(例如陰影化)的一部分的形狀或曲線的至少一部分。
這里將在使用圖形處理系統(tǒng)來渲染字形(作為字體一部分的字符的圖形表示)形式的文本的上下文中描述本發(fā)明的優(yōu)選實施方式,字形的邊緣由一個或更多個輸入曲線來定義。在本實施方式中,生成使用帶符號的距離場表示字形的紋理,然后再對紋理進(jìn)行采樣,以例如使用帶符號的距離場渲染字形,以確定采樣點位于形成該字形的邊緣的曲線的哪一側(cè)。
圖1示出了根據(jù)本發(fā)明一個實施方式的渲染文本串的工作流的概圖。生成包含例如字“reinforced”的文本串的渲染輸出的第一步驟(步驟1)是為每個字形(該字中的字母)定義一組矩形邊界框,其被分成兩個三角形用于定義每個字形的紋理。邊界框可由字體文件提供,即,被輸入到圖形處理系統(tǒng),每個框之間的間隔決定了字中每個字母之間的間隔。如下所述,隨后可以計算針對每個單獨字形的帶符號的距離場(步驟2,圖1)。
圖2示出了邊緣由一系列輸入曲線定義的字形1。
為了渲染字形1來進(jìn)行顯示,字形1,或限定字形1的典型信息被初始輸入到圖形處理系統(tǒng)。
如圖2中所示,字母“O”的字形1(例如為矢量圖形對象的形式)通過曲線的起點和終點控制點的位置以及中間控制點的位置被定義為2D世界空間中的二次貝塞爾曲線序列2,3,4,5,6,7,8,9。該字形的外部由四個二次貝塞爾曲線2,3,4,5定義,字形的內(nèi)部被另外4個二次貝塞爾曲線6,7,8,9定義。當(dāng)字形1被渲染時,如將在下面更詳細(xì)描述的,內(nèi)部和外部曲線2,3,4,5,6,7,8,9之間的區(qū)域被適當(dāng)?shù)刂?shade),以顯示字形1。
在渲染過程中,最初對形成字形1的構(gòu)成二次貝塞爾曲線2,3,4,5,6,7,8,9中的每一個進(jìn)行分別處理。對每個二次貝塞爾曲線2,3,4,5,6,7,8,9,將世界空間中的曲線映射到正則空間中的正則曲線的對應(yīng)部分,以能夠確定(在正則空間中)該曲線上到圍繞該曲線的多個采樣點中每一個的最近點。(在正則空間中確定最近點允許執(zhí)行精確的計算,進(jìn)而允許確定針對曲線的精確計算的帶符號的距離場)。
下面將描述將世界空間中最初定義的輸入曲線變換為正則空間中的正則曲線的處理。
圖3示出了針對世界空間11中的輸入貝塞爾曲線10到正則空間13中的正則曲線12的對應(yīng)部分10"的示范性變換TUC。世界空間11中的輸入貝塞爾曲線10具有在世界空間中限定了該曲線的開始控制點b0、結(jié)束控制點b2和中間控制點b1,它們被映射到正則空間13中的正則曲線12的部分10",該部分10"具有相應(yīng)的起點b0'和相應(yīng)的終點b2'。
在正則空間13中定義了正則曲線12,如以上所討論的,它是一個預(yù)定的單個的或基本曲線,一個曲線族中的所有曲線都可以僅使用旋轉(zhuǎn)、平移和/或均勻縮放變換到該單個的或基本曲線(或至少到其一部分)上。例如,在本實施方式中,在世界空間11中定義的輸入貝塞爾曲線10是二次曲線(由三個控制點定義),正則曲線12是曲線y=x2。
如將要理解的,為了實施本實施方式,有必要確定世界到正則變換(TUC),即,將世界空間11中定義的輸入貝塞爾曲線10映射到正則空間13中的正則曲線12的相應(yīng)部分10″的變換。
圖4中示出了在本實施方式中,對于任意給定的二次貝塞爾曲線,得到世界空間11中的輸入貝塞爾曲線10到正則空間13中的正則曲線12的變換的方式。
在2D空間的投影表示中,2D空間中的點被表示為具有分量(ax,ay,1)的3D矢量。這種表示是均勻的,所以A和λA表示同一個點。
一般的二次曲線由以下形式的等式定義:
這相當(dāng)于在分量方程
ax2+2hxy+by2+2gx+2fy+c=0
一般的二次貝塞爾曲線是通過滿足以下條件的系數(shù)從這個等式定義的:
ab-h2=0
假定對于二次貝塞爾曲線的輸入是2D中的三個控制點:b0,b1和b2,其中b0和b2是兩個端點,而b1為中間點。由此看來,對于正則曲線y=x2的分段(segment),需要確定世界到正則變換。
世界到正則變換,如上所述,僅由旋轉(zhuǎn)(由矩陣Mr定義)、平移(由矩陣Mt定義)和/或均勻縮放(由矩陣Ms=kI定義,其中k為常數(shù),I是單位矩陣)。
第一階段是從三個控制點b0,b1,b2找到分量方程的系數(shù)(a,b,c,f,g,h)。然后這些系數(shù)可以用于計算需要將輸入貝塞爾曲線變到正則曲線上的旋轉(zhuǎn)、平移和縮放。
在b0=(x0,y0),b1=(x1,y1)和b2=(x2,y2)的條件下,系數(shù)被給定為:
a=(y0–2y1+y2)2
b=(x0–2x1+x2)2
c=x02y22–4x0x1y1y2–2x0x2y0y2+4x0x2y12+4x12y0y2–4x1x2y0y1+x22y02
h=–(y0–2y1+y2)(x0–2x1+x2)
g=x0y0y2–2x0y12+2x0y1y2–x0y22+2x1y0y1–4x1y0y2+2x1y0y1–x2y02+2x2y0y1+x2y0y2–2x2y12
f=–(x02y2–2x0x1y1–2x0x1y2–x0x2y0+4x0x2y1–x0x2y2+2x12y0+2x12y2–2x1x2y0–2x1x2y1+x22y0)
現(xiàn)在需要找到經(jīng)由組合的旋轉(zhuǎn)、平移和縮放將世界空間中的點變換到正則空間的世界到正則變換(TUC),即3×3矩陣。這個變換的效果是將貝塞爾曲線的終點映射到正則曲線,y=x2上。
本實施方式中確定世界到正則變換(TUC)的處理的第一階段是確定變換的旋轉(zhuǎn)分量(旋轉(zhuǎn)矩陣Mr)。所需的旋轉(zhuǎn)被確定為旋轉(zhuǎn)世界空間11中的輸入二次貝塞爾曲線10的對稱軸21使之平行于正則空間13中的正則曲線12的對稱軸23,見圖4(i)。
該旋轉(zhuǎn)是通過針對輸入貝塞爾曲線10操縱二次型以計算旋轉(zhuǎn)矩陣Mr而確定的。首先,旋轉(zhuǎn)矩陣Mr被定義為
其中,
符號(signum)函數(shù)被定義為
signum(x)=-1如果x<0
signum(x)=+1否則
對于輸入二次貝塞爾曲線10上的點的集合,保證條件ab-h2=0,所以表達(dá)式中對于cosθ和sinθ的平方根的幅角都是正的。(在a=b=0的情況下,這是一條直線,其應(yīng)預(yù)先標(biāo)識和單獨處理,如下面討論的)。
因此可以通過旋轉(zhuǎn)來定義針對f和g的變換值:
一旦世界到正則變換的旋轉(zhuǎn)分量被確定,接下來就確定平移分量(即,旋轉(zhuǎn)矩陣Mt)。此處理示于圖4(ⅱ)。
所需的平移被確定為將旋轉(zhuǎn)后的輸入曲線14的最低點20平移到正則空間13中的原點(0,0),即正則曲線12的相應(yīng)最低點22所需的平移。該平移同樣是通過針對輸入貝塞爾曲線10操縱二次型以計算平移矩陣Mt而確定的。首先,旋轉(zhuǎn)矩陣Mt被定義為
其中,
最后,確定世界到正則變換的均勻縮放分量(即,縮放矩陣Ms)。這在圖4(ⅲ)中示出。
如將要理解的,已經(jīng)被適當(dāng)旋轉(zhuǎn)并平移到正則空間13中的世界空間11中的輸入曲線10,即圖4(ⅲ)中的曲線16,現(xiàn)在的形式為y=x2/|λ|,其中1/|λ|是待確定的縮放因子。同樣,這種平移是通過針對輸入貝塞爾曲線10操縱二次型以計算縮放矩陣Ms而確定的。首先,縮放矩陣Ms被定義為:
其中,
一旦計算出將在世界空間11中定義的輸入貝塞爾曲線10映射到正則空間13中的正則曲線12的相應(yīng)部分10″上所需要的世界到正則變換,即TUC=MsMtMr=1/|λ|MtMr,就可以通過對輸入貝塞爾曲線10的參數(shù)應(yīng)用所確定的變換來確定正則曲線12的實際部分10″。該處理在圖3中示出。
如在圖3中所示,使用世界到正則變換TUC將在世界空間11中定義的并且具有控制點b0,b1,b2的輸入貝塞爾曲線10映射到正則曲線12的對應(yīng)部分10″。
正則曲線段10″的起點和終點b0’,b2’定義了正則空間13中的輸入貝塞爾曲線10的參數(shù)(x)范圍。因此,如圖3所示,正則曲線段10″具有在正則空間13中的參數(shù)位置XA和XB之間延伸的參數(shù)范圍。
在本實施方式中,為形成字形1的每個輸入貝塞爾曲線2,3,4,5,6,7,8,9定義了世界空間11中的一組采樣點(例如,如圖2所示)。對于任何給定的輸入貝塞爾曲線(例如,如圖3中所示在世界空間11中定義的輸入貝塞爾曲線10),針對圍繞所述輸入貝塞爾曲線的每個采樣點來確定輸入貝塞爾曲線上的最近點。
對于世界空間11中的給定采樣點,輸入貝塞爾曲線10上的最近點如下來確定:利用先前確定的用于將世界空間11中的輸入貝塞爾曲線10映射到正則空間13中的正則曲線12的部分10″上的世界到正則變換TUC,首先將世界空間中的采樣點變換到正則空間13中的對應(yīng)位置。通過使從正則空間13中與世界空間11的采樣點相對應(yīng)的變換采樣點到正則曲線的距離最小化,確定正則曲線12的部分10″上到變換采樣點的最近點。
對于具有坐標(biāo)(u,v)的變換采樣點,從該點到曲線的距離在正則空間中可以僅就x坐標(biāo)寫為:
使D2最小化是相對簡單的,這給出了
4x3+(1-2v)2x-2u=0
或者
x3+ax+b=0
其中
這個三次方程已經(jīng)是標(biāo)準(zhǔn)形式,因此可以直接寫出封閉形式的解。根據(jù)a和b之間的關(guān)系,有三種情況要考慮。
當(dāng)b2/4+a3/27>0時,僅存在如下定義的一個實數(shù)根
該立方根是明確定義的,因為該幅角被保證是實數(shù),并且該立方根是針對正的和負(fù)的幅角二者定義的(負(fù)數(shù)的立方根是負(fù)的)。
當(dāng)b2/4+a3/27=0時,這是退化的情況,其中三個根中的兩個重合。然而,因為在尋求全局最小值,對任何拐點都沒有興趣,所以之前的對于x1的公式仍然成立并且有單一的最小值。
(需要存儲一個解與兩個解之間的過渡曲線是
這條曲線從拋物線的焦點延伸出去。)
當(dāng)b2/4+a3/27=0時,這對應(yīng)于具有三個不同實數(shù)根的三次方程,由下式給出:
其中
如果b>0
如果b<0
中間根(取決于)是一個全局最大值且可以忽略。外面的兩個根將對應(yīng)于局部最小值且是感興趣的。絕對最小值(這兩個局部最小值之一)可能不一定是正則曲線12的部分10″上到變換采樣點的最近點,因為它可能會落入正則曲線12的部分10″之外。進(jìn)行檢查以查看外面的根中的一個或兩個是否落在正則曲線12的部分10″之內(nèi),如果需要,對從變換采樣點到正則曲線12的部分10″上與外面的兩個根相對應(yīng)的點的距離進(jìn)行比較,從而能夠確定正則曲線12的部分10″上到變換采樣點的最近點。
一旦正則曲線12的部分10″上到變換采樣點的這個最近點被確定,就計算在正則空間13中從變換采樣點的位置到該點的距離(如果尚未作為最近點的確定的一部分計算出該距離,如上文所述)。
從變換采樣點到曲線上的最近點的距離可以按照任何合適的和所期望的方式來確定。因為變換采樣點的x和y坐標(biāo)是已知的,且最近點的x值已經(jīng)確定,所以y=x2(正則曲線)給出了最近點的y坐標(biāo)。于是很容易地從這兩組坐標(biāo)確定所述距離。
計算所述距離的一種方法是將正則曲線12的部分10″的起點b0’平移到原點,然后旋轉(zhuǎn)終點b2’使之位于正x軸上。
對于正則曲線12的包括具有坐標(biāo)(x0,y0)的起點b0’和具有坐標(biāo)(x1,y1)的終點b2’的部分10″,首先定義平移矩陣
和旋轉(zhuǎn)矩陣
其中
這將終點旋轉(zhuǎn)至(d,0)。這個點可以縮放到點(1,0),但是這樣做沒有真正的益處。
因此,變換矩陣可被定義為R=RθT,變換點的坐標(biāo)表示為(u,v)。于是,到曲線上的最近點的距離s由下式給出:
如果u<0
s=|v|如果0<u<d
如果u>0
注意,v的符號還決定了采樣點位于線的哪一側(cè),所以這可以被用作帶符號的距離場的符號。
這個距離隨后與從采樣點到正則曲線的所述部分的每一端的距離進(jìn)行比較。在這三個點當(dāng)中,正則曲線12的部分10″上與變換采樣點的距離最小的點被確定為正則曲線12上到變換采樣點的最近點。
圖5示出了已經(jīng)被確定為正則曲線12的部分10″上到正則空間13中的變換采樣點P最近的點p0。對于該變換采樣點P,正則曲線上的最近點p0已被確定為是使從變換采樣點P到正則曲線12的距離最小化的點,即由此確定正則曲線12上的點p0是到變換采樣點P的最近點。這是因為,對于此采樣點和正則曲線的所述部分,變換采樣點P與最近點p0之間的距離d小于從變換采樣點P到正則曲線的所述部分的端點的距離。
圖5中還示出了,從變換采樣點P到正則曲線12的部分10″上的最近點p0的距離d可以簡單地根據(jù)這些點來確定,如果它尚未從使距離最小化以找到最近點p0的處理中確定。
當(dāng)輸入曲線是一條直線時,使用包括旋轉(zhuǎn)和平移的世界到正則變換將在世界空間中定義的曲線變換到正則空間的x軸上(輸入曲線如果長度有限,也可以縮放到例如位于正則空間的x軸上的0和1之間,但這不是必要的)。于是,正則曲線上的最近點就只是正則空間中變換采樣點的x坐標(biāo)。當(dāng)輸入曲線具有有限長度,帶有起點和終點時,如果變換采樣點的x坐標(biāo)位于正則曲線的起點和終點的x坐標(biāo)之間,則正則曲線上到變換采樣點的最近點就是變換采樣點的x坐標(biāo)。當(dāng)變換采樣點的x坐標(biāo)位于正則曲線的起點和終點之外時,正則曲線上到變換采樣點的最近點是起點和終點當(dāng)中更接近變換采樣點的一方。
一旦確定了(從正則空間13中的變換采樣點P到正則曲線12上的最近點p0的)距離d,以及必要時正則曲線12的部分10″上的最近點p0,就利用從世界空間11到正則空間13的變換TUC的逆變化將其變換到世界空間11,例如,以給出輸入貝塞爾曲線10上到世界空間11中的采樣點的最近點以及這兩個點之間的距離。針對世界空間11中圍繞輸入貝塞爾曲線10的陣列中的每個采樣點,重復(fù)確定輸入貝塞爾曲線10上對于采樣點的最近點和這兩個點之間的距離的這個處理。
還可以利用針對附近采樣點已經(jīng)確定的距離,確定針對另一組采樣點到輸入貝塞爾曲線10的距離,而無需執(zhí)行到正則空間的變換,以及在正則空間中的確定。
一旦在圍繞輸入貝塞爾曲線10的陣列中,對每個采樣點完成了這個操作,使得已為世界空間11中的每個采樣點確定了輸入貝塞爾曲線10上的最近點和到它的距離,就對形成字形1的輸入貝塞爾曲線2,3,4,5,6,7,8,9中的每一個重復(fù)這個處理。
利用與形成字形1的多個輸入貝塞爾曲線2,3,4,5,6,7,8,9相對應(yīng)的采樣點的這些多個陣列,可以確定作為整體的多個輸入貝塞爾曲線2,3,4,5,6,7,8,9上對圍繞整個字形1的采樣點的陣列中的每個采樣點的最近點,并且還可以確定相應(yīng)最近點與采樣點之間的距離。對于給定的采樣點,通過簡單地比較已經(jīng)確定的對于圍繞各個貝塞爾曲線2,3,4,5,6,7,8,9的每個采樣點陣列中的相應(yīng)采樣點的距離并選擇最小的距離,就可以確定多個輸入貝塞爾曲線2,3,4,5,6,7,8,9上的最近點和到它的距離。
(可以只使用構(gòu)成字形1的所有多個輸入貝塞爾曲線2,3,4,5,6,7,8,9的子集,例如通過丟棄多個輸入貝塞爾曲線2,3,4,5,6,7,8,9中明顯比其他曲線更遠(yuǎn)的一個或更多個,來確定多個輸入貝塞爾曲線2,3,4,5,6,7,8,9上對于給定采樣點的最近點。例如,對于圖2中所示的字形1,對于位于字形1的右側(cè)的采樣點,可以丟棄在字形1的左側(cè)的輸入曲線3,9)。
如果,例如作為確定從采樣點到曲線上的最近點的距離的一部分,尚未確定世界空間11中每個采樣點位于輸入貝塞爾曲線10的哪一側(cè),則隨后通過執(zhí)行正則空間11中的采樣點對與多個輸入貝塞爾曲線2,3,4,5,6,7,8,9相對應(yīng)的正則曲線進(jìn)行平均正切檢查來確定。同樣,用于對采樣點進(jìn)行平均正切檢查的多個輸入貝塞爾曲線2,3,4,5,6,7,8,9可以是構(gòu)成字形1的所有多個輸入貝塞爾曲線2,3,4,5,6,7,8,9的子集,并且這些可以對應(yīng)于用于確定多個輸入貝塞爾曲線2,3,4,5,6,7,8,9上到采樣點的最近點的子集。
利用世界空間11中每個采樣點位于輸入貝塞爾曲線10的哪一側(cè),連同采樣點與輸入貝塞爾曲線10上到采樣點的所確定的最近點之間的距離,為所述距離提供一個符號:與位于字形內(nèi)部的采樣點相對應(yīng)的距離被提供了負(fù)號,與位于字形外部的采樣點相對應(yīng)的距離被提供了正號。
帶符號的距離,與針對圍繞字形1的每個采樣點輸入貝塞爾曲線10上到采樣點的所確定的最近點和所確定的最近點所位于的輸入貝塞爾曲線(形成字形1的多個輸入貝塞爾沿著曲線2,3,4,5,6,7,8,9)的標(biāo)識一起,被存儲在紋理中,即紋理中存儲此信息的每個紋理像素都對應(yīng)于一個采樣點。因此,該紋理將字形1存儲為帶符號的距離場,其隨后可用于渲染字形1,如下面所討論的。
如上面針對特定的字體中每個字形所討論的確定要存儲在紋理中每個紋理像素的信息(帶符號的距離、輸入貝塞爾曲線上所確定的最近點和所確定的最近點所位于的輸入貝塞爾曲線的標(biāo)識),每個字形的這種信息(即包括帶符號的距離場)被存儲在紋理中。
針對代表字符“c”26,“2”27和“,”28的字形,示例性帶符號的距離場的圖形被示出在圖6中。字形26,27,28內(nèi)部、相對于定義了字形26,27,28的邊緣的輸入貝塞爾曲線上各自最近點具有正距離值(高于特定閾值)的點被表示為黑色。字形26,27,28外部、相對于定義了字形26,27,28的邊緣的曲線上各自最近點具有負(fù)距離值(低于特定閾值)的點被表示為白色。接近(正和負(fù)閾值之間)定義了字形26,27,28的邊緣的輸入貝塞爾曲線的點被表示為灰度,這取決于它們與曲線上的最近點的距離。
帶符號的距離值的閾值是這樣的:當(dāng)這些值被存儲在紋理中時,如果它們高于或低于特定值時,只有適當(dāng)?shù)?正或負(fù))閾值被存儲(或一些其它默認(rèn)值)。這是因為,在考慮相對于定義了字形26,27,28的邊緣的曲線的距離超過一定距離的點時,確切的距離并不重要,因為在生成渲染輸出時,它不會被考慮。其中可以使用從采樣點到定義了字形26,27,28的邊緣的輸入曲線上的最近點的確切距離來例如生成特定渲染效果的感興趣的區(qū)域是針對那些靠近字形26,27,28的邊緣的點。因此,對于這些位于正負(fù)閾值之間的距離值,存儲針對帶符號的距離場計算出的值,而不施加閾值。
可以針對構(gòu)成字體的每個字形(字符),例如字母、數(shù)字和標(biāo)點符號來計算要被存儲在紋理中的信息。圖7示出了針對被圖形表示為紋理圖集29的字體中每個字形的帶符號的距離場的圖形表示。每個字形的紋理在紋理圖集29內(nèi)是空間分離的,使得當(dāng)需要渲染特定字形時,能夠?qū)y理圖集29的適當(dāng)區(qū)域進(jìn)行采樣。在本示例中,紋理圖集29被緊密地堆放以保存在紋理存儲器中,所以每個字形具有不同的大小。
一旦針對要渲染的字形已經(jīng)生成了帶符號的距離場(或為了生成如圖7所示的完整紋理圖集)并將其存儲在紋理中,就可以通過在每個字形的邊界框內(nèi)的采樣點的陣列對該紋理進(jìn)行采樣,或者當(dāng)作為渲染處理的一部分實時計算帶符號的距離場時使用在采樣點的陣列處的所確定的帶符號的距離場,來渲染所需的字形。這個步驟可以使用抗混疊技術(shù),使用帶符號的距離場,如圖1的步驟3所示,其隨后可以在渲染到紋理操作中被存儲為紋理的一部分。
然后,可以顯示最終渲染的文本串,如圖1中“結(jié)果”步驟所示。
字形可以渲染在“面”空間(即在其中生成渲染輸出的空間)中,其與如果要在三維彎曲表面上顯示書寫而為字形定義紋理的世界空間不同。在本實施方式中,在要繪制該字形的面空間中的場景(顯示)區(qū)域上生成一個或更多個基元,使得該字形被所述一個或更多個基元所覆蓋。
這些基元然后以正常方式被光柵化為被傳遞給著色流水線的片段以用于著色。(如果如可能發(fā)生,對基元進(jìn)行光柵化不生成任何片段(因為在場景被顯示時,基元實際上并不覆蓋場景的任何采樣點),則該處理可以在這里停止,因為這意味著在場景將被顯示時,該形狀實際上不會在場景中被看到。)
然后將適當(dāng)?shù)募y理施加到基元來繪制字形。這是通過如下來實現(xiàn)的:使用與要繪制的字形相對應(yīng)的紋理映射圖(或紋理映射圖的一部分),以通過針對(多個)基元所覆蓋的場景中的(一個或多個)采樣點的位置,從表示字形的紋理中取出紋理樣本,而對(一個或多個)基元應(yīng)用紋理(將面空間中的采樣點適當(dāng)變換到存儲有該紋理的世界空間)。
每個采樣紋理值,包括到定義了該字形的多個輸入曲線上最近點的帶符號的距離,然后被用于確定樣本位置是應(yīng)被繪制(渲染)為落入字形內(nèi)(也就是,實際上,位于由輸入曲線定義的字形的邊緣的內(nèi)部),還是因為落在字形以外而被丟棄,這取決于帶符號的距離的值。
圖8示出了用于在圖形處理單元(GPU)的圖形處理流水線中執(zhí)行上述根據(jù)本發(fā)明的實施方式的渲染字形的處理的步驟的流程圖30。
首先,從存儲在中央處理單元(CPU)中的字體文件中提取例如在CPU上生成的預(yù)先定義的路徑31。這些路徑使用直線、貝塞爾曲線、弧(例如定義了字形的邊緣),以及顏色和例如定義了輸入貝塞爾曲線在世界空間中的起點和終點的其它位置數(shù)據(jù),來定義該字形。
這些路徑(輸入曲線)隨后由圖形處理流水線(SDF生成器)32的處理級來處理(按照上述方式針對每個輸入曲線使用到正則空間中的變換),以針對每個字形,使用返回在正則空間中變換采樣點與正則曲線上的最近點之間的距離的查找表(LUT)33來生成帶符號的距離場。
路徑緩存34然后存儲該字形的帶符號的距離場,以及與路徑(輸入曲線)有關(guān)的信息,該信息然后在固定功能單元36(其使用紋理管道37來訪問帶符號的距離場的值)中與位置數(shù)據(jù)35組合,以生成要渲染的最終紋理。這可能涉及混合、掩蔽和裁剪測試操作中的一個或更多個。
然后,要渲染的最終紋理被傳遞到幀緩存38用于輸出,例如顯示。
從上文可以看出,例如作為生成帶符號的距離場的一部分,使用正則空間來確定正則曲線上到采樣點的最近點提供了一種使用一個或更多個輸入曲線來生成渲染輸出的有效且便捷的機(jī)制,這使得例如使用矢量圖形所定義的輸入曲線的數(shù)學(xué)表示能夠保留。這是確定此信息的簡單且精確的方式,因此提供了一種使用輸入曲線來生成渲染輸出的快速且準(zhǔn)確的處理。
提供一種使用這樣的輸入曲線來生成渲染輸出的簡單處理,有利于減少運行該處理的設(shè)備的處理和電力負(fù)載,從而允許它被用在更簡單的設(shè)備上,例如用于由電池供電并且可以不執(zhí)行多功能處理的移動和可穿戴設(shè)備上。除了該處理的效率提高可允許它執(zhí)行更復(fù)雜的渲染特征以外,或在需要時能夠?qū)崟r地(重新)計算必要的信息,而相比先前的技術(shù)不會造成設(shè)備的處理和電力負(fù)載的相關(guān)增加。