專利名稱:在與二維對象的拐角相關(guān)聯(lián)的單元內(nèi)生成一個二維距離場的方法
技術(shù)領(lǐng)域:
本發(fā)明主要涉及計算機圖形學領(lǐng)域,并且尤其涉及由距離場表示的二維對象的渲染。
背景技術(shù):
在計算機圖形學領(lǐng)域,二維對象的渲染(rendering)是十分重要的。二維對象,如字符形狀、企業(yè)標志以及包含在文檔中的圖例元素,都是作為靜態(tài)圖像或是作為組成一個動畫的一系列幀進行渲染的。二維對象有多種表示方法,并且常常會出現(xiàn)這樣一種情況,即對于特定的操作如渲染與編輯,一種表示方法要優(yōu)于其他的表示方法。在這種情況下,就要進行從一種形式到另一種形式的轉(zhuǎn)換。
盡管此處我們關(guān)注數(shù)字的字型(type),這可能是最常見最重要的二維對象了,但是下列說明適用于所有類型的二維對象。
我們從數(shù)字字型的一些基礎(chǔ)背景開始。一種典型的拉丁字體族,如Times New Roman或Arial,包括一組字體(font),比如常規(guī)、斜體、粗體或粗斜體。每種字體包括一組單獨的字符形狀,稱為字形(glyphs)。每種字形由它不同的設(shè)計特征來區(qū)分,比如基本的幾何形狀、筆畫濃度、襯線、連筆形式、布局以及輪廓、薄-厚筆畫的比例,以及尺寸。
有多種方法可用來表示字體,包括位圖、輪廓線,比如Type1[Adobe Systems,Inc.1990]和Truetype[Apple Computer,Inc.1990],以及過程字體,比如Knuth的Metafont,其中輪廓線起主導作用?;谳喞€的表示方法被Mass.Cambridge的Bitstream Inc.、Calif.Mountain View的Adobe System,Inc.、Calif.Cupertino的AppleComputer,Inc.、Wash.Bellevue的Microsoft Corporation、德國Hamburg的URW以及Mass Wilmington的Agfa Compugraphic采用并推廣。
由Hersch所著并發(fā)表于Cambridge University Press,1993的“Visual and Technical Aspects of Type(字體的視覺與技術(shù)觀點)”以及由Knuth所著并發(fā)表于Digital Press,Bedford,MA 1979的“TEXand METAFONTNew Directions in Typesetting(TEX與元字形排版的新方向)”中,包含了大量關(guān)于字體的歷史與科學的綜合評論。
具有特殊重要性的是兩類字型尺寸正文字型尺寸和顯示字型尺寸。正文字型的字體以相對較小的磅值渲染,如14磅或更小,并且被使用在一個文檔的主體(正文)部分中,就像在本段落中一樣。正文字型要求高質(zhì)量的渲染,以獲得清晰度和閱讀舒適度。正文字型的尺寸、字樣以及基線方向在單篇文檔中很少改變。
顯示字型的字體以相對較大的磅值渲染,如36磅或更高,并且被用于標題、頭條、以及為表達情緒或引起注意的設(shè)計及廣告中。與正文字型不同,顯示字型注重美觀,其中缺少空域及時域上的鋸齒(aliasing)是重要的,而非清晰度,其中對比度比反鋸齒(antialising)更重要。用來表示及渲染字型的框架應(yīng)該能夠處理好這兩種具有相互沖突的需求的類型,這一點是至關(guān)重要的。
字型可以以二值、灰度或彩色的形式被提供給一個輸出裝置,比如打印機或顯示器。某些渲染引擎為非常小的字型尺寸使用二值渲染,以達到較好的對比度。然而,具有良好提示的灰度字體是同樣清楚可辨別的。
“提示”是與每種字形存儲在一起的一組規(guī)則或過程,用以規(guī)定在渲染過程中如何修改字形的輪廓線,以保持諸如對稱性、筆畫濃度之類的特性,以及一種字體中所有字形的統(tǒng)一外觀。
盡管人們已經(jīng)嘗試設(shè)計自動和半自動的提示系統(tǒng),但是提示過程仍然是新字體設(shè)計以及轉(zhuǎn)換現(xiàn)有字體以供低分辨率顯示設(shè)備使用中的主要瓶頸。另外,解釋提示規(guī)則的復(fù)雜性導致不能運用硬件進行字體渲染。缺少硬件支持,就不得不在軟件光柵化的過程中作出折衷,比如每個象素使用更少的樣值,特別是在實時地生成動態(tài)字型時。
灰度字體渲染通常包含某些形式的反鋸齒。反鋸齒(Antialising)是一種處理過程,它能消除二值字體中出現(xiàn)的鋸齒邊緣或階梯效應(yīng)。盡管有多種字體渲染引擎都適合使用,但是大部分都會在網(wǎng)格裝配及提示之后以每象素4或16個采樣值進行過采樣,隨后分別以2×2或4×4的箱式濾波器進行下采樣。
基本的濾波,如箱式濾波(box filtering),出于渲染速度的需要而是必要的。但是,即使是那種方法,對于實時渲染(如動態(tài)字型所需的那樣)而言常常也是太慢的,從而經(jīng)過渲染的字形會帶有空域或時域上的鋸齒。
印刷術(shù)的兩個重要發(fā)展趨勢揭示了現(xiàn)有技術(shù)的字體表示方法的某些固有局限性,由此提出了變革的需求。
第一種趨勢是越來越多地強調(diào)在屏幕上閱讀文本,這種趨勢是由計算機在辦公室中的主角地位、家庭互聯(lián)網(wǎng)瀏覽普及程度的提高以及PDA與其他手持電子設(shè)備的廣泛使用共同引起的。這些顯示設(shè)備通常具有每英寸72-100點的分辨率,這種分辨率顯著低于印刷設(shè)備的分辨率。
在對字型進行光柵化時,這種低分辨率需要特殊對待以保證閱讀舒適度和清晰度,比如Microsoft與Bitstream公司在他們各自的ClearType與FontFusion技術(shù)中投入使用的資源就證明了這一點。
第二種趨勢是動態(tài)字型(animated type)或動態(tài)印刷術(shù)的使用。動態(tài)字型被用來表達情感、增添趣味性以及在視覺上吸引讀者的注意。動態(tài)字型的重要性由它在電視及互聯(lián)網(wǎng)廣告中的廣泛使用即可見一斑。
不幸的是,傳統(tǒng)的基于輪廓線的字體在這兩個領(lǐng)域內(nèi)都有局限性。在低分辨率顯示器上渲染字體需要仔細對待,以便平衡對良好對比度的要求以及降低空域和/或時域鋸齒的要求,前者是清晰度所需,后者則是閱讀舒適度所需。
如上所述,基于輪廓線的字體通常會被提示,以向渲染引擎提供指示,從而獲得最佳外觀。字體提示是煞費勞力且成本高昂的。例如,為日文或中文字體開發(fā)一套具有完善提示的字體圖案可能要耗費數(shù)年時間,這兩種字體中可能包含了超過一萬種的字形。由于提示的焦點在于改善正文字型的渲染質(zhì)量,因此這種提示對于放置在任意路徑上的字型以及對于動態(tài)字型來說是效果不佳的。
盡管高質(zhì)量的濾波可以被用來反鋸齒靜態(tài)文檔中的灰度字型,其中這種文檔中只含有有限數(shù)量的字體尺寸和字體圖案,但是在動態(tài)字型中進行濾波往往會受到實時渲染要求的限制。
發(fā)明內(nèi)容
本發(fā)明提供了在與一個二維對象的一個拐角相關(guān)聯(lián)的一個單元內(nèi)生成一個二維距離場的方法。確定所述二維對象的邊界描述符的一個集合。根據(jù)所述的邊界描述符的集合識別所述單元中的一個拐角點。所述拐角點表示所述對象的所述拐角。所述拐角點將所述的邊界描述符的集合劃分成兩個子集。所述單元被劃分成兩個區(qū)域,其中一個區(qū)域最接近所述拐角點,而另一個區(qū)域最接近所述的邊界描述符的集合。確定經(jīng)過所述拐角點的兩條直線,以便每條直線對應(yīng)于所述的邊界描述符的兩個子集之一。這些直線限定所述的兩個區(qū)域。指定一個值集合和使用兩個區(qū)域的一種方法,該方法用于在所述單元內(nèi)重建所述距離場。所述拐角點、限定所述的兩個區(qū)域的所述直線、所述重建方法以及所述的值集合被儲存在一個存儲器中,以便能夠通過應(yīng)用所述重建方法在所述單元內(nèi)重建所述距離場。
圖1A與lB示出了現(xiàn)有技術(shù)下字形的距離場表示的框圖;圖2A與2B根據(jù)本發(fā)明的優(yōu)選實施例示出了距離場表示的框圖;圖3根據(jù)本發(fā)明的優(yōu)選實施例示出了距離場的一個雙二次單元的框圖;
圖4根據(jù)本發(fā)明示出了一種用來按圖像順序反鋸齒一個對象的方法的流程圖;圖5示出了本發(fā)明所使用的一種線性濾波器的圖;圖6A、6B及6C示出了一個象素成分附近的采樣的示意圖;圖7根據(jù)本發(fā)明示出了一種用來按對象順序反鋸齒一個對象的方法的流程圖;圖8根據(jù)本發(fā)明示出了一種用于基于距離的自動提示的方法的流程圖;圖9根據(jù)本發(fā)明示出了一種用來將一個筆畫轉(zhuǎn)換成一個距離場的方法的流程圖;圖10根據(jù)本發(fā)明示出了用來將一個二維對象轉(zhuǎn)換成一個距離場的方法的流程圖;圖11根據(jù)本發(fā)明示出了用來將一個距離場轉(zhuǎn)換成邊界描述符的方法的流程圖;圖12根據(jù)本發(fā)明示出了用來動態(tài)化一個對象的方法的流程圖;以及圖13根據(jù)本發(fā)明示出了用來生成一個包含有一個二維對象的一角的單元中的二維距離場的方法的流程圖。
具體實施例方式
字形的距離場表示我們的發(fā)明將一個閉合的二維形狀S——如字形、企業(yè)標志或一個對象的任何數(shù)字化表示形式——表示為一個二維的有符號距離場D。為了我們的說明目的,我們借助于字形。
通俗地說,一種字形的距離場度量了從場中任意一點到字形邊緣的最短距離,其中如果所述點位于所述字形之外,那么所述距離的符號就是負的,而如果所述點位于字形之內(nèi),則所述距離的符號就是正的。邊緣上的點距離為零。
正式地說,距離場是作用于所有p∈R2的一種映射DR2→R,從而使得D(p)=sign(p)·min{‖p-q‖對于所有位于零等值面上的點q,即S的邊緣},sign(p)={-1,如果p在S之外;+1,如果p在S之內(nèi)},并且‖·‖為歐幾里得范數(shù)。
現(xiàn)有技術(shù)基于覆蓋的渲染方法使用單個離散的樣點來表示每個象素,即使在所述的樣點充分靠近輪廓線時,這種方法也可能完全弄錯字形。被渲染的字形有鋸齒狀邊緣以及漏失的部分,這兩者都是空域鋸齒的表現(xiàn)形式。如果所述的字形被動態(tài)化,那么時域鋸齒就會導致閃爍的輪廓和鋸齒狀的邊緣,它們在運動期間就像“蠕動”一樣。對每個象素采用額外的樣點以形成一種反鋸齒的渲染,這樣做可以消除這些鋸齒效應(yīng),但是要達到可接受的結(jié)果需要許多樣點。
相反,即使當樣點位于形狀之外時,根據(jù)我們的發(fā)明的連續(xù)采樣距離值也能表示出字形的近似。實際上,單個樣點值可以被用來估算有多少字形位于以各個象素為中心的濾波器覆蓋范圍之內(nèi)。
另外,由于距離場平緩地變化,即它是C0連續(xù)的,因此采樣值會隨字形運動而緩慢變化,從而減少了時域鋸齒成分。
距離場還擁有其他優(yōu)點。由于它們是一種隱式的表示方法,因此它們享有隱函數(shù)的好處。具體地說,距離場提供了一種用于設(shè)計字體的直觀界面。例如,字形的個別部分,如直筆、橫筆、弧形筆畫或襯線可以分別獨立設(shè)計。在設(shè)計之后,所述的部分就可以利用隱式組合方法組合在一起,以構(gòu)成相同字體圖案的不同字形。
距離場在動態(tài)排版術(shù)或動態(tài)字型領(lǐng)域還能提供許多好處,因為距離場所提供的信息對于模擬對象間的互動是非常重要的。
在一種優(yōu)選實施例中,我們采用自適應(yīng)采樣的距離場,即ADF,參見美國專利6396492號,F(xiàn)risken、Perry及Jones的“Detail-directedhierarchical distance fields(面向細節(jié)的分級距離場)”,此處通過引用包含進來。
ADF是距離場的有效數(shù)字表示法。ADF運用面向細節(jié)的采樣以減少表示距離場所需的樣點數(shù)。所述的樣點被存儲在單元的空域分級結(jié)構(gòu)中,如四叉樹中,以便進行高效的處理。另外,ADF還提供了用來根據(jù)采樣值重建距離場的方法。
面向細節(jié)的或自適應(yīng)的采樣根據(jù)場內(nèi)的局部變化對距離場采樣當局部變動大時使用更多的樣點,而在局部變動小時使用較少的樣點。與常規(guī)采樣的距離場以及三色四叉樹相比,自適應(yīng)采樣顯著降低了對存儲器的需求,常規(guī)采樣以均勻的速率采樣整個距離場,而三色四叉樹則總是在邊緣附近以最高速率采樣。
圖1A-1B對用三色四叉樹表示Times Roman的‘a(chǎn)’和‘D’所需的單元數(shù)量與用圖2A-2B中的雙二次ADF表示相同精度所需的單元數(shù)量進行了比較。單元數(shù)量與存儲需求直接相關(guān)。兩種四叉樹都具有相當于512×512的距離值圖像的分辨率。用于表示‘a(chǎn)’和‘D’的三色四叉樹分別具有17393和20813個單元,而相應(yīng)的雙二次ADF只有457和399個單元。雙二次ADF通常所需的單元數(shù)比Frisken等人提出的現(xiàn)有技術(shù)的雙線性表示方法少5-20倍,這一點在“Adaptively SampledDistance Fieldsa General Representation of Shape for ComputerGraphics(自適應(yīng)采樣的距離場用于計算機圖形學的通用圖形表示法)”中有所說明,該文發(fā)表于Proceedings ACM SIGGRAPH 2000,pp.249-254,2000。
雙二次重建方法Frisken等人利用四叉樹作為ADF空域分級結(jié)構(gòu),并根據(jù)在每個單元的四個角上采樣的距離、通過雙線性內(nèi)插在每個單元內(nèi)重建距離及梯度。他們提出“更高階的重建方法可以被用來進一步提高壓縮率,但是所述數(shù)字已經(jīng)表明額外努力所換得的回報開始減小”。
然而,雙線性ADF對于本發(fā)明所述的表現(xiàn)、渲染、編輯以及動態(tài)化字符字形而言還是不夠用的。具體地說,它們需要過多的存儲器,處理效率太低,并且在非邊緣單元中的重建場的質(zhì)量對動態(tài)模擬之類的操作來說是不夠的。
一種“有界表面”方法可以強制在非邊緣單元中進行細分,它要求處在距離所述表面(即邊緣)一個有界距離內(nèi)的非邊緣單元通過一項誤差判定測試,參見Perry等人所著的“KizamuA System forSculpting Digital Characters(Kizamu一種用于塑造數(shù)字字符的系統(tǒng))”,該文發(fā)表于Proceedings ACM SIGGRAPH 2001,pp.47-56,2001。盡管上述方法減少了該有界區(qū)域內(nèi)距離場的誤差,但我們發(fā)現(xiàn)對于雙線性ADF來說,那種方法會導致無法容忍的單元數(shù)量增加。
為了應(yīng)對那些局限性,我們用雙二次重建方法替代了雙線性重建方法。典型字形的雙二次ADF所需要的單元比雙線性ADF少5-20倍。當我們要求在非邊緣單元中得到精確的距離場以便進行動態(tài)模擬和動態(tài)化字型這樣的操作時,所需單元數(shù)就出現(xiàn)了更高的減少量。
這種顯著的存儲量減少使得一個典型動畫所需的字形能夠被存入現(xiàn)代CPU的片上高速緩存中。這對處理時間有著驚人的影響,因為對系統(tǒng)存儲器的訪問基本上被排除了,這樣就輕易地補償了高階重建方法所需的額外計算。
圖3根據(jù)我們的優(yōu)選實施例示出了一個雙二次ADF單元300。雙二次ADF中的每個單元包含9個距離值301。點(x,y)302處的距離與梯度都可以根據(jù)下列方程1-3由這9個距離值重建出來。
有多種雙二次重建方法可供使用。我們采用二變量內(nèi)插多項式,它能保證沿同樣大小的相鄰單元的公共邊緣的C0連續(xù)性。與使用雙線性方法一樣,不同大小的相鄰單元之間距離場的連續(xù)性是利用誤差判定來維持在一個規(guī)定容限內(nèi)的。所述的誤差判定在ADF生成期間控制單元的細分,參見上述Perry等人的著作。
點(x,y)302處的距離與梯度如下確定,其中x和y都是用單元坐標表示的,即(x,y)∈
×令xv1=x-0.5且xv2=x-1令yv1=y(tǒng)-0.5且yv2=y(tǒng)-1令bx1=2xv1·xv2、bx2=-4x·xv2且bx3=2x·xv1令by1=2yv1·yv2、by2=-4y·yv2且by3=2y·yv1dist=by1·(bx1·d1+bx2·d2+bx3·d3)+by2·(bx1·d4+bx2·d5+bx3·d6)+ (1)by3·(bx1·d7+bx2·d8+bx3·d9)gradx=-[by1·(4x·(d1-2d2+d3)-3d1-d3+4d2)+by2·(4x·(d4-2d5+d6)-3d4-d6+4d5)+ (2)by3·(4x·(d7-2d8+d9)-3d7-d9+4d8)]
grady=-[(4y-3)·(bx1·d1+bx2·d2+bx3·d3)-(8y-4)·(bx1·d4+bx2·d5+bx3·d6)+ (3)(4y-1)·(bx1·d7+bx2·d8+bx3·d9)]利用浮點運算重建一個距離可能需要約35次浮點操作(flops),而利用浮點運算重建一個梯度則需要約70flops。由于我們的重建方法不包含分支,并且字形可以完全存放在一個片上高速緩存中,因此我們就可以通過利用特殊的CPU指令以及現(xiàn)代CPU的深指令流水線來進一步優(yōu)化這些重建方法。另外,我們還可以利用定點運算來重建距離與梯度。
用于傳輸及存儲的壓縮線性四叉樹ADF四叉樹的空域分級結(jié)構(gòu)是某些處理過程(如沖突檢測)所需要的,但是對于其他處理,比如下文中將要說明的基于單元的渲染來說卻不是必要的。
要為ADF字形的傳輸及存儲提供壓縮,我們采用一種線性四叉樹結(jié)構(gòu),該結(jié)構(gòu)將我們的雙二次ADF存儲為一個葉單元列表。該樹狀結(jié)構(gòu)可以根據(jù)需要由所述的葉單元恢復(fù)出來。
線性ADF四叉樹中的每個葉單元中包括該單元的x和y位置,每個位置用2個字節(jié)表示,該單元的級別用1個字節(jié)表示,單元中心處的距離值用2個字節(jié)表示,以及8個距離中心的距離偏移量各用1個字節(jié)表示,每個單元總共15個字節(jié)。
各個距離偏移量是通過從中心距離值中減去其對應(yīng)樣點的距離值、用單元大小進行比例縮放以減小量化誤差、再截取成8個比特,從而得到的。表示每個單元位置的兩個字節(jié)以及表示單元級別的一個字節(jié)可以以高達216×216的分辨率表示ADF。這對于表示在顯示屏分辨率下渲染的字形來說是足夠了。
字形能夠用16比特的距離值精確表示。將8個距離值編碼成8比特的距離偏移量比各用兩個字節(jié)存儲每個值要節(jié)省的多。盡管在理論上,這樣做可能會導致大單元的距離場中出現(xiàn)一些誤差,但我們還未發(fā)現(xiàn)任何視覺效果上的退化。
一個高分辨率的字形通常需要500-1000個葉單元。無損熵編碼可以額外得到35-50%的壓縮。因此,高分辨率ADF的整個字體圖案可以用300-500Kbytes表示出來。如果只需要正文字型或者目標分辨率比較粗糙,就像用于移動電話的情況,那么就可以使用僅需1/4至1/2單元數(shù)的低分辨率ADF。
這些存儲量顯著小于灰度位圖字體,并且與帶有良好提示的基于輪廓線的字體的存儲量相當,所述灰度位圖字體的每種字體圖案的每個點尺寸需要約0.5Mbytes。TrueType字體的大小從數(shù)十Kbytes到數(shù)十Mbytes不等,取決于字形數(shù)量以及提示方法的數(shù)量。Arial和Times New Roman是Monotype Corporation的兩種具有良好提示的字體,它們分別需要266Kbytes和316Kbytes。
從輪廓線實時生成根據(jù)我們的發(fā)明,ADF可以根據(jù)已有的輪廓線或邊界描述符(比如Bezier曲線)利用Perry等人所述的平鋪生成器快速地生成,下文中將對此進行詳細的說明。到字形輪廓線或邊界的最小距離可以利用Bezier裁剪高效地計算出來,參見Sederberg等人所著的“GeometricHermite Approximation of Surface Patch Intersection Curves(曲面交線的幾何赫爾米特近似)”,該文發(fā)表于CAGD,8(2),pp.97-114,1991。
在2GHz Pentium IV處理器上生成每個字形需要0.04-0.08秒。整套字體圖案可以在大約4秒內(nèi)生成。由于不需要傳統(tǒng)的提示,生成ADF所需的邊界描述符遠遠小于它們相應(yīng)的有提示的對應(yīng)物。
因此,我們可以存儲這些最小輪廓線,并根據(jù)需要由這些輪廓線動態(tài)地生成ADF字形,而不是存儲ADF。這些最小輪廓線的小尺寸對于存儲空間有限的設(shè)備以及在有限帶寬的網(wǎng)絡(luò)上傳輸字形的應(yīng)用來說是很重要的。
圖10示出了用于將二維對象(比如字形)轉(zhuǎn)換成二維距離場的方法1000。對象1001被表示成一組邊界描述符(比如曲線spline)和一個填充規(guī)則(比如一種奇偶規(guī)則或非零環(huán)繞規(guī)則)。
所述的一組邊界描述符首先經(jīng)過預(yù)處理1010。該預(yù)處理過程對邊界描述符進行細分以減小它們的空間跨度。所述的邊界描述符還可以被接合起來以減小邊界描述符組的基數(shù)。該預(yù)處理過程使得我們可以在確定無符號距離時減少為每個位置查詢所需的邊界描述符數(shù)量,這將在下文中說明。
根據(jù)經(jīng)過預(yù)處理的邊界描述符組1011構(gòu)建1020一個空域分級結(jié)構(gòu)1021,比如一棵四叉樹。交點(intersections)的高速緩存1031被初始化1030。交點的高速緩存1031中儲存邊界描述符與一組直線(比如距離場的水平線、垂直線、對角線等等)相交的位置,以及相交的方向。這樣做能夠去除決定無符號距離的符號時的冗余計算??梢愿鶕?jù)間隔對這些相交點排序。
然后在一組位置上查詢1040所述的空域分級結(jié)構(gòu)1021,以確定那些位置上的一組距離。該組距離被用來構(gòu)建一個二維距離場1041。所述的查詢在每個位置上調(diào)用一個距離函數(shù),比如Bezier裁剪,以測定一個無符號的距離。交點的高速緩存、所述的位置以及所述填充規(guī)則都被用來為該距離決定一個符號。
通過基于組件的字體的壓縮適用于中文、日文以及韓文字體的有效壓縮可以通過使用FontFusion中所用的基于組件的表示法來實現(xiàn),所述的這些字體中可能包含10000或更多的字形。所述的表示法將字形分解成通用的筆畫和部首,即多種字形共用的復(fù)雜形狀,將這些筆畫和部首存儲到一個字體庫中,然后在字體渲染引擎中重新組合它們。
由于距離場是隱式表示法,因此可以利用混合或CSG操作輕易地組合ADF,由此也可見ADF是非常適合通過基于組件的方法進行壓縮的。
在二維距離場中表示拐角雙線性或雙二次重建方法所用的面向細節(jié)的采樣允許ADF用較少數(shù)量的距離值來表示一個二維對象的邊界的相對平滑的部分。然而,在拐角附近,距離場有較大的變化,這些重建方法就不能很好地近似了。為了精確地表示拐角附近的距離場,這些ADF要求包含拐角的單元被高度細分,從而顯著提高了存儲器需求。另外,ADF的最大細分層次限制了用雙線性及雙二次ADF單元表示拐角所能達到的精度,其中如Perry等人所述最大細分層次是在ADF生成期間施加的。
為了應(yīng)對這個問題,我們的發(fā)明提供了一種方法1300,該方法可以在含有二維對象(如字形)的拐角的單元內(nèi)生成一個二維距離場。
方法1300從二維對象確定1310一個邊界描述符的有序集合1311,并根據(jù)邊界描述符1311的有序集合識別出1320一個單元內(nèi)的拐角點1321。然后該單元被劃分1330成兩個區(qū)域,最接近拐角的第一區(qū)域和最接近對象邊界的第二區(qū)域。方法1300還規(guī)定了1340一種重建方法以及一組采樣距離值1371,用于重建所述單元內(nèi)的距離場,并且該方法將拐角點1321、界定區(qū)域的線條、重建方法以及采樣距離值集合1371儲存1380在一個存儲器中。
所述的重建方法根據(jù)某一點所在的區(qū)域來決定單元內(nèi)該點處的距離。第一區(qū)域內(nèi)一個查詢點的距離被定為從該查詢點到拐角點的距離。
為了確定第二區(qū)域內(nèi)的距離,我們將邊界描述符的有序集合1311劃分1350成兩個子集,一個子集中包含拐角點1321之前的邊界描述符,一個子集中包含拐角點1321之后的邊界描述符。然后,邊界描述符的每個子集被擴充1360以形成一條將所述單元劃分成內(nèi)部與外部兩個部分的延長曲線。對于每個部分來說,所述單元內(nèi)的距離場可以根據(jù)一組采樣距離值1371重建,所述一組采樣距離值1371是根據(jù)相應(yīng)的延長曲線確定的1370。雙二次重建方法可能需要為所述的兩個部分各存儲9個距離值。
注意,所述的兩個內(nèi)部部分的相交形成了所述對象的拐角。因此,可以通過重建到第一內(nèi)部部分的距離以及到第二內(nèi)部部分的距離,然后再選取兩個確定距離中的較小者,來重建第二區(qū)域內(nèi)的距離。
所述的兩個區(qū)域可以根據(jù)通過拐角點的兩條有向直線來確定,所述的兩條直線各垂直于邊界描述符的兩個子集之一。每條直線都可以由拐角點以及在該拐角點處對應(yīng)的邊界描述符子集的外向法線決定。當一條直線被如此確定后,我們就可以通過求出從查詢點到拐角點的向量與外向法線兩者的向量積來確定該查詢點位于該直線的哪一側(cè)。位于兩條線外側(cè)的點處在第一區(qū)域內(nèi),而位于任何一條線內(nèi)側(cè)的點則處在第二區(qū)域內(nèi)。
字體渲染在當今的字體渲染引擎中,字體主要被表示為輪廓線,這些輪廓線可按需要被縮放以匹配所需的輸出尺寸。盡管大多數(shù)高分辨率打印機使用兩級渲染,但是現(xiàn)代顯示設(shè)備更多地在小點陣尺寸上使用灰度渲染或是灰度與兩級渲染的組合形式。
用于光柵化灰度字形的常見方法涉及縮放及提示它們的輪廓線。經(jīng)過縮放及提示的輪廓線被掃描轉(zhuǎn)換為高分辨率的圖像,通常比所需的分辨率高4或16倍。然后,通過施用一種濾波方法(比如箱式濾波器)來對該高分辨率圖像進行下采樣,以產(chǎn)生最終的灰度圖像。
對于正文字型來說,單獨的字形可以被光柵化一次并作為一幅灰度位圖存儲在高速緩存中,以便在預(yù)處理步驟中再使用。對字形的子象素布局需要可能要求將被光柵化的每個字形的幾個版本。為正文字型使用高速緩存就可以在某些任務(wù)期間進行短延時(如1/2秒)的更高質(zhì)量渲染,所述的任務(wù)可以是例如翻閱一份Adobe Acrobat PDF文檔。
然而,在任意路徑上渲染的字型以及動態(tài)化的字形不允許使用高速緩存,因此必須根據(jù)需要來產(chǎn)生。實時渲染的需要要求必須使用分辨率較低的濾波,通常為每象素四個采樣點以及箱式濾波。這可能引起空域及時域的鋸齒。這種鋸齒可以利用系統(tǒng)存儲器中具有提示的設(shè)備字體來消除。然而,維持實時幀率對于如何使用具有提示的設(shè)備字體提出了嚴格的限制,比如說,具有提示的設(shè)備字體不能被動態(tài)縮放或旋轉(zhuǎn)。
Microsoft最近在ClearType上的工作帶來了用于LCD彩色顯示器的特殊處理方法,在這種顯示器中含有可尋址彩色子象素的重復(fù)圖案,即成分(component)。Platt在“Optimal Filtering for PatternedDisplays(用于圖案化顯示器的最優(yōu)濾波)”一文中描述了一組用于各個顏色成分的感觀最優(yōu)濾波器,該文發(fā)表于IEEE Signal ProcessingLetters,7(7),pp.179-180,2000。在實際應(yīng)用中,所述的最優(yōu)濾波器被實現(xiàn)為一組三個移位箱式濾波器,每個濾波器用于一種顏色。
ClearType使用現(xiàn)有技術(shù)的基于覆蓋的反鋸齒方法,來決定每個象素的各個成分的強度。與此相對,我們的基于距離場的方法使用距離場來決定每個象素的各個成分的強度,并且使用了較少的樣點。下文中所述的ADF反鋸齒方法可以取代箱式濾波器,來提供每象素樣更少點數(shù)的更好的最優(yōu)濾波器的模擬。
反鋸齒(Antialiasing)理解經(jīng)過渲染的字體中的外表成分需要對鋸齒有所認識。通常,一個象素由離散的成分組成,比如彩色打印機或顯示器中的紅色、綠色及藍色成分。在一個灰度設(shè)備中,象素是單個離散成分。由于象素是離散的,因此將其呈現(xiàn)給輸出設(shè)備本質(zhì)上就是一個采樣過程。采樣率取決于設(shè)備的分辨率。采樣率至少是源信號中最高(奈奎斯特)頻率的兩倍,否則采樣信號就會出現(xiàn)鋸齒。
邊緣(比如字形輪廓線)具有無限的頻率分量。因此,邊緣不能由采樣數(shù)據(jù)準確地表示出來。邊緣的采樣不足會導致鋸齒狀圖形,這種鋸齒狀會在運動圖像的采樣邊緣上蔓延。如果源信號也含有一種空域圖案,比如‘m’的重復(fù)垂直線或是‘i’的單根垂直線,其頻率成分對于采樣率來說太高了,那么采樣數(shù)據(jù)就會出現(xiàn)信號丟失、波紋圖案以及時域閃爍。
為了避免鋸齒,輸入信號必須經(jīng)過預(yù)濾波以去除超過采樣率所允許范圍的頻率成分。通常,有兩種方法進行預(yù)濾波。
第一種稱為解析濾波。它在采樣前對源信號的連續(xù)表示形式進行某種形式的空域平均。不幸的是,解析濾波常常是不可行的,或是因為源數(shù)據(jù)不是以連續(xù)信號的形式提供,在圖像處理中這是很正常的情況,或是因為確定信號在濾波器作用范圍內(nèi)的解析表示太復(fù)雜了。對于計算機圖形學中所有除了簡單幾何圖形外的幾何形狀都會出現(xiàn)這種情況,當然對基于樣條線的輪廓線來說也會同樣出現(xiàn)這種情況。
第二種方法稱為離散濾波。在那種方法中,通常以高于目標速率的速率采樣源信號,以獲得一幅過采樣圖像。然后,在將圖像下采樣到目標速率之前,使用一個離散濾波器來減少過采樣圖像中的高頻成分。該離散方法在計算機圖形學中被稱為常規(guī)過采樣。
根據(jù)處理預(yù)算、硬件考慮以及個人對輸出圖像中對比度與反鋸齒度的偏好,可以使用各種不同的離散濾波器。通常被用來渲染字型的箱式濾波器用一個過采樣值方陣的算術(shù)平均來替代這個過采樣值方陣,這種方法在信號處理界通常被認為是比較低級的。
在另一種方法中,自適應(yīng)過采樣將可用于采樣及濾波的資源集中用于具有較高的局部頻率分量的圖像區(qū)域。最優(yōu)自適應(yīng)采樣可以根據(jù)圖像中的局部變化性來確定。然而,這種技術(shù)的實用性會受到估算圖像局部變化的需要的限制,這種估算過程可能是計算代價高昂的。
由于對高頻圖案的常規(guī)采樣不足而引起的波紋圖案,是人類視覺系統(tǒng)尤其反感的。在一般的圖像處理中,隨機或跳動采樣被用來解決這一問題。對于隨機采樣,采樣點會隨機地略微偏離它們的指定位置。隨機采樣會用高頻噪聲替代波紋鋸齒,并且已經(jīng)被證實在減少時域鋸齒中特別有效。
使用基于距離的反鋸齒的渲染在現(xiàn)有技術(shù)的字體渲染中,由字形邊緣引入的無限頻率分量是鋸齒的主要成分。與之相對,通過利用2D距離場來表示2D對象,并根據(jù)本發(fā)明采樣2D距離場,我們就能避開這些邊緣,因為所述的表示方法是C0連續(xù)的。最高頻率取決于字形本身的空域圖案,比如‘m’的重復(fù)垂直線或是‘i’的單根垂直線。
通過用字形的2D距離場表示字形,我們就能有效地對該字形使用解析預(yù)濾波器。下文中所述的我們用于渲染距離場的反鋸齒方法所產(chǎn)生的輸出與傳統(tǒng)解析預(yù)濾波器的輸出不同。
利用距離場進行反鋸齒圖4示出了用來按圖像順序反鋸齒一個對象401(如一種字形)的方法400,所述的對象被表示410成一個二維距離場411。每個象素402中可以包括一個或多個成分404,通常是用于‘RGB’類型輸出設(shè)備的紅、藍或綠色成分。該方法可以為每個象素402的各個成分404使用一個或多個采樣點。方法400提供自適應(yīng)的基于距離的過采樣、基于距離的自動提示以及基于距離的柵格裝配。結(jié)果得到的反鋸齒象素強度可以被作為一幅圖像的一部分呈現(xiàn)在CRT以及類似LCD的顯示器上。該方法對于渲染運動模糊特別有用。
表示對象401的二維距離場411的采樣點407的一個集合403與每個象素402的各個成分404相關(guān)聯(lián)420。根據(jù)二維距離場411以及采樣點403的集合來確定430一個距離(D)405。然后,距離405被映射440為象素402的成分404的反鋸齒強度(I)406。
在優(yōu)選實施例中,字形401由雙二次ADF 411表示,如上文所述。這樣就使得在字體渲染過程中使用基于距離的反鋸齒方法效率很高。其他的表示方法,比如二維距離圖、二維距離殼以及程序性距離場,也都可以被采用。
對于一幅圖像中每個象素402的各個成分404,都要利用四叉樹遍歷方法來定位一個含有成分404的單元,比如葉單元,所述的遍歷方法在美國專利申請10/209302中有所說明,該專利于2002年7月31日提交,題為“Method for Traversing Quatrees,Octrees,andN-Dimensional Bitrees(用于遍歷四叉樹、八叉樹以及N維二叉樹的方法)”,本文通過引用將該專利申請完全包含進來。盡管本技術(shù)領(lǐng)域內(nèi)其他已知的方法也可以被用于我們的發(fā)明,但是上述方法是無需進行比較的,因此執(zhí)行效率更高。成分404處的距離根據(jù)單元的距離值重建出來,并被映射440為反鋸齒強度(I)406。
可以使用不同的映射,包括線性、高斯以及S形函數(shù)。最佳映射函數(shù)的選擇是主觀的。在一個實施例中,我們的映射是兩個函數(shù)的組合。第一個函數(shù)如上所述,第二個函數(shù)是對比度增強函數(shù)。這兩個函數(shù)被組合起來以便將距離場(D)405映射440為成分404的反鋸齒強度(I)406。
圖5示出了作為距離502的函數(shù)的強度501的線性映射500,比如
。該映射為象素的各個成分把距離轉(zhuǎn)換成反鋸齒圖像強度。距離在對象內(nèi)部是正的,在對象外部則是負的。不同的截止值503和504會影響邊緣對比度以及筆畫濃度。我們?yōu)轱@示字型采用(-0.75,0.75)象素的外部503及內(nèi)部504濾波器截止值,為正文字型采用(-0.5,0.625)象素的濾波器截止值,達到了良好的效果。
基于距離的最優(yōu)自適應(yīng)過采樣上述基于距離的反鋸齒方法減少了字形邊緣引起的鋸齒。然而,當筆畫寬度或是字形各部分之間的距離對于顯示器采樣率來說太小時,鋸齒成分仍會出現(xiàn)。在這種情況下,我們就要使用下文中將要說明的基于距離的自適應(yīng)過采樣,以進一步減少空域及時域的鋸齒。
在優(yōu)選實施例中,我們使用帶有我們獨創(chuàng)的基于距離的自適應(yīng)過采樣的雙二次ADF,相對現(xiàn)有技術(shù)的基于輪廓線的表示法以及基于覆蓋的自適應(yīng)過采樣方法而言,該方法具有顯著的優(yōu)勢。由于ADF采用面向細節(jié)的采樣,因此局部變化性較強的距離場區(qū)域可由較小的葉細胞表示。由此,ADF四叉樹的結(jié)構(gòu)提供了實現(xiàn)基于距離的最優(yōu)自適應(yīng)采樣所需的局部變化的映象,從而克服了上文中所述的現(xiàn)有技術(shù)自適應(yīng)過采樣反鋸齒方法中確定局部變化性的困難。
對于圖像中每個象素402的各個成分404,都要定位含有成分404的單元,并且要將位于該成分的濾波器工作半徑r以內(nèi)的一組403采樣點407與該象素成分404關(guān)聯(lián)起來420。每個成分中的采樣點407的數(shù)量(spc)取決于單元尺寸(cellSize)對r的相對大小。采樣點407處的采樣距離經(jīng)過濾波,以確定430一個單個加權(quán)平均距離405,然后該距離被映射440成象素402的成分404的反鋸齒強度406。
有多種不同的濾波器及采樣策略可以使用。在優(yōu)選實施例中,我們使用一種普通形式的高斯濾波器,用W-12-3(d/r)2對各個距離采樣值加權(quán),其中d是該采樣點到象素成分的距離,W則是用于那個成分的權(quán)重總和。類似的結(jié)果也可以用箱式濾波器、錐形濾波器、負瓣濾波器以及其他形式的高斯濾波器得到。
圖6A-C示出了我們的采樣策略。采樣點407被定在成分601附近的同心圓610上,以便高效地計算權(quán)重及權(quán)重總和。我們使用象素間距的1.3倍作為濾波器半徑r 602,并在cellSize>r(圖6A)時采樣1個spc,在r/2<cellSize≤r(圖6B)時采樣5個spc,在cellSize≤r/2(圖6C)時采樣13個spc。
除了同心圓之外,本發(fā)明還可以使用多種其他策略來關(guān)聯(lián)采樣點407與象素成分404。我們的方法對具體的采樣策略并不特別敏感。
下文中所述的另一種自適應(yīng)采樣策略,將采樣點定在濾波器半徑r以內(nèi)所包含的所有單元的中心。該策略能得到同樣良好的結(jié)果。
基于單元的反鋸齒上述的距離場反鋸齒方法可以利用基于掃描線的光柵化方法在軟件中實現(xiàn)。替換地,被劃分成單元的距離場也可以一個單元接一個單元地反鋸齒化,即按對象順序反鋸齒?;趩卧匿秩鞠藶槎ㄎ缓胁蓸狱c的單元而進行的樹遍歷,消除了用于計算單個單元內(nèi)距離以及梯度的冗余設(shè)置,并且減少了單元數(shù)據(jù)的重復(fù)檢索,即內(nèi)存讀取。
另外,由于渲染所需的單元可以被表示為固定大小的自包含的單元的序列塊,即單元內(nèi)的點的距離及梯度可以根據(jù)單元的距離值確定,因此我們的基于單元的方法容易用硬件實現(xiàn),從而使得實時渲染成為可能。
圖7示出了一種用來按對象順序渲染對象701(例如一個字形)的方法700,所述的對象被表示710為一個二維距離場711。方法700提供了基于距離的自適應(yīng)過采樣,基于距離的自動提示以及基于距離的網(wǎng)格裝配。最終得到的經(jīng)過反鋸齒的象素強度可以作為一幅圖像的一部分被呈現(xiàn)在CRT以及LCD類的顯示器上。該方法對于渲染運動模糊特別有用。當二維距離場711的單元被組織在一個空域分級結(jié)構(gòu)中時,我們可以利用MIP映射(mipmapping)來減少所需的距離采樣點數(shù)量。
二維距離場711被劃分成多個單元712。在一個優(yōu)選實施例中我們使用雙二次自適應(yīng)采樣的距離場,其中每個單元的大小取決于二維距離場的局部變化性。每個單元都包括一種方法(M)713,用于重建該單元內(nèi)的二維距離場。一組含有待渲染的距離場的區(qū)域(虛線)722的單元721被識別720出來。
區(qū)域722被用來定位730一組與該區(qū)域有關(guān)的象素731。對應(yīng)于象素731集合中的各個象素的一組成分741被指定740。然后,根據(jù)單元集合中的距離為每個象素的各個成分決定反鋸齒強度751。這里,所述的距離是根據(jù)單元集合重建的。然后所述的距離就被映射為反鋸齒強度,如上所述。
在一個實施例中,我們可以通過定位單元集合中靠近象素成分的一個單個采樣點、并重建該單個采樣點到單元集合的距離,來確定距離。在我們的優(yōu)選實施例中使用了雙二次自適應(yīng)采樣的距離場,我們通過對小于濾波器半徑的單元進行特殊處理而增強了該方法,其用于基于距離的自適應(yīng)過采樣。由于小單元出現(xiàn)在距離場中變化性較強的位置,因此可以在將距離映射為強度前,對靠近這些單元的象素距離進行預(yù)濾波。
我們對元素的合成緩存器進行初始化,其中的每個元素對應(yīng)于所述象素集合中各個象素的一個成分。單元集合中的每個單元都可以被獨立地處理。在優(yōu)選實施例中,每個單元包括一個加權(quán)距離以及一個累計權(quán)重,兩者都被初始化為零。在一個單元被處理時,這些加權(quán)距離以及累計權(quán)重在緩沖器元素中被遞增,其與位于所述單元內(nèi)或是位于所述單元中心的濾波器半徑內(nèi)的象素成分相對應(yīng)。
在處理了所有的單元之后,用累計權(quán)重對每個象素的各個成分的加權(quán)距離歸一化,以產(chǎn)生接著將被映射為反鋸齒成分強度的距離。在優(yōu)選實施例中,我們使用與上文所述相同的高斯加權(quán)和濾波器半徑。
至此所述的基于單元的渲染總是要處理單元集合中的每個葉單元,而不管每個單元對濾波器半徑的相對大小。理論上,這樣做提供了最優(yōu)的基于距離的自適應(yīng)過采樣。而實際上,ADF四叉樹可以被用作MIP映射以減少單元數(shù)量。
ADF四叉樹結(jié)構(gòu)使得我們可以用小的葉單元的前輩來替代小的葉單元,從而有效地裁剪了一些預(yù)定單元尺寸的四叉樹。只要該單元尺寸小于或等于象素間間隔的1/4,那么在基于距離的自適應(yīng)過采樣結(jié)果中就不會存在視覺效果上的退化。這樣做減少了渲染該區(qū)域所需的單元數(shù)。
處理象素成分一個象素包括一個或多個成分。例如,典型的CRT或LCD彩色顯示器上的象素包括紅色、綠色以及藍色的成分。在我們的發(fā)明中,當象素包括多個成分時,它們就會被單獨地處理,如上文中所述,或是被當作一個單個成分處理。當多個成分被當作單個成分處理時,就可以根據(jù)單個成分的反鋸齒強度來確定該象素的彩色和阿爾法值。
將多個成分當作一個單個成分處理有兩個原因。首先,它能減少渲染時間。其次,當多個成分不能被單獨尋址,或是當諸單個成分的相對位置未知時,對每個成分進行個別處理就是不可能的。
當顯示設(shè)備,如LCD,具有可尋址的象素成分時,單獨地處理多個成分能夠提高顯示設(shè)備的有效分辨率,這一點在現(xiàn)有技術(shù)中是已知的。我們的發(fā)明可以充分利用這類設(shè)備的這一特性,來提供質(zhì)量優(yōu)于現(xiàn)有技術(shù)的基于距離的反鋸齒。
動態(tài)化二維對象圖12示出了方法1200的流程圖,該方法根據(jù)動畫腳本1202將對象1201動態(tài)化成為一系列的幀。動畫腳本1202為所述幀序列中的每一幀指示出對象的條件,例如對象的位置、大小、方向以及變形。該對象被表示為一個二維距離場。根據(jù)動畫腳本1202,為幀1221序列中的每一幀更新1210對象1201的形態(tài)1211。利用經(jīng)過更新的形態(tài)1211以及基于距離的反鋸齒渲染方法1212來渲染對象1201。
表示對象1201的二維距離場可以從不同的對象表示法中得到,例如對象的輪廓線描述或是對象的位圖描述。
為特定對象1201進行形態(tài)1211的更新1210,可以通過對該對象進行各種不同的操作來實現(xiàn),其中包括剛體變換、自由形態(tài)變形、軟體沖擊變形、水平設(shè)置方法、顆粒模擬以及改變其渲染屬性。
在渲染1220所述的對象時,我們將表示對象的二維距離場中的一個采樣點集合與幀1221序列中的一個幀內(nèi)的一個象素成分關(guān)聯(lián)起來。通過由所述的二維距離場以及采樣點集合來確定一個距離,我們就可以將該距離映射成所述象素成分的反鋸齒強度。
在一個優(yōu)選實施例中,我們將表示對象1201的二維距離場劃分成多個單元,每個單元中都包括了用于重建該單元內(nèi)的二維距離場的方法。為了在該例中進行渲染1220,我們要在表示對象1201的二維距離場中識別出一個單元集合,其含有待渲染的二維距離場區(qū)域,還要定位與該區(qū)域相關(guān)的一個象素集合。指定對應(yīng)于該組象素中各個象素的一組成分。根據(jù)該組單元為象素的各個成分確定一個距離,并將該距離映射為該象素成分的反鋸齒強度,從而為該組象素中每個象素的各個成分確定一個反鋸齒強度。
基于距離的自動提示標準字體表示法中的提示是一種耗時的手工過程,其中字型設(shè)計人員以及提示專家要生成一組規(guī)則,以便更好地將字形個體匹配到象素網(wǎng)格中。良好的提示有助于在小字型尺寸下產(chǎn)生間隔合適、具有良好對比度且外表均勻的字形。
這些規(guī)則提供具有相同對比度分布的垂線,其左邊與底部邊緣具有可能實現(xiàn)的最銳利的對比度;字形的對角線條以及纖細圓滑的部分具有足夠的對比度,以便向眼睛傳遞視覺結(jié)構(gòu);以及襯線,這些襯線結(jié)合在一起并提供足以被人眼捕獲的強化突出,參見Hersch等人所著的“Perceptually Tuned Generation of Grayscale Fonts(灰度字體的感觀調(diào)節(jié)生成)”,該文發(fā)表于IEEE CG&A,Nov,pp.78-89,1995。
注意,現(xiàn)有技術(shù)的濾波方法會產(chǎn)生模糊的字符,并向不同的字符部分指定不同的對比度方案,從而違反了字型設(shè)計的重要原則。為了克服這些局限性,就要為每種字體的每個字形開發(fā)提示?,F(xiàn)有技術(shù)的提示方法存在許多問題它們的開發(fā)耗費勞力,而且非常復(fù)雜以至于不能用硬件實現(xiàn)。
對基于輪廓線的字體而言,用提示進行渲染是一個三步驟的過程。首先,所述字形的輪廓線被縮放并與象素網(wǎng)格對齊。其次,輪廓線被修改以控制縱線、橫線以及襯線的對比度,并提高非常纖細部分以及弧線的濃度。第三,對經(jīng)過修改的輪廓線進行過采樣,隨后進行帶有濾波的下采樣。
盡管上文中所述的我們未經(jīng)提示的基于距離的反鋸齒渲染方法比現(xiàn)有技術(shù)的字體渲染方法更為有利,但是眾所周知,感觀提示可以提高小字型尺寸下的閱讀舒適度。
因此,如圖8中所示,我們充分利用距離場來提供基于距離的自動提示,以便進行小點尺寸下的字形渲染。提示中的第一步810是縮放距離場并將其與象素網(wǎng)格對齊。這一步可根據(jù)給定的或推導出的字體規(guī)格自動完成,比如蓋帽高度、x高度以及基線的位置。
在應(yīng)用了這種網(wǎng)格裝配的形式之后,我們就可以利用距離場及其梯度場來提供感觀提示。
在一個實施例中,距離場梯度的方向被用來檢測820對象左邊與底部邊緣上的象素。通過暗化830這些象素并亮化840相對邊緣上的象素,我們就可以實現(xiàn)左邊與底部邊緣上較高的對比度,而無需改變明顯的筆畫濃度。這可以通過降低或提高相應(yīng)的象素強度來完成。
在另一個實施例中,梯度場被用來為對角線條及細弧線提供更好的對比度。我們注意到,如果一個象素位于或靠近字形的狹窄區(qū)域,那么該象素兩側(cè)的相鄰象素就會具有相反的梯度方向,即,它們的點積為負數(shù)。通過檢測梯度方向的突變,我們就可以暗化850這些狹窄區(qū)域上的象素。
這些只是如何利用距離場來自動提供感觀提示的兩個實例。所述的距離場也可以被用來提供最佳的字符間距以及均勻的筆畫濃度。
生成與編輯字體有兩種設(shè)計字體的基本方法。第一種是手工。其中,字形靠手繪制、數(shù)字化,然后將輪廓線匹配到數(shù)字化的位圖中。第二種方法則是由計算機完成。
在后一種情況下,有三類工具可供使用。直接的視覺工具可被用于曲線處理。程序設(shè)計工具通過執(zhí)行一個程序的指令來創(chuàng)建字形的形狀。該程序或是定義一個形狀的輪廓并填充它,或是定義一條由筆尖繪出的路徑,該路徑有多種屬性,其中包括幾何形狀及方向。基于組件的設(shè)計工具允許設(shè)計者們創(chuàng)建基本的組件,如直線、弧線以及其他重復(fù)出現(xiàn)的形狀,然后組合這些組件以產(chǎn)生字形。
我們使用造型編輯器來提供基于筆畫的設(shè)計。這是與3D雕刻相對的一項2D技術(shù),所述3D雕刻在美國專利申請09/810261中有所說明,該專利申請題為“System and Method for Sculpting Digital Models(用于塑造數(shù)字模型的系統(tǒng)與方法)”,于2001年3月16日提交,此處通過引用包含進來。筆畫描繪可以被交互地完成,或者也可以編寫腳本令其模擬可編程的設(shè)計工具。
也可以采用基于弧線的設(shè)計,使用Bezier曲線處理工具,該工具與Adobe Illustrator中所用的工具相似?;诨【€的設(shè)計方法可以與用來將輪廓線轉(zhuǎn)換成距離場以及將距離場轉(zhuǎn)換為輪廓線的方法組合起來,以提供設(shè)計規(guī)范間的無縫接口。
基于組件的設(shè)計方法在隱式距離場使用CSG以及混合操作。這樣就使得組件可以被單獨設(shè)計,并在編輯或渲染期間組合起來。
我們還提供了一種由模擬及數(shù)字字體模板自動生成ADF的方法。
對于基于組件的設(shè)計方法,我們的字體編輯器提供了利用四叉樹操作來有效反射及旋轉(zhuǎn)ADF的能力,用以塑造字形中常見的對稱性。其他的特性包括ADF縮放、平移以及組合多個ADF的操作,比如CSG與混合。
對于基于筆畫的設(shè)計方法,我們提供了刻圖工具,該工具具有幾何輪廓以模擬筆尖。模擬筆尖的方向及尺寸可以沿筆畫變化,以模仿書法筆跡。
圖9示出了用來由一個筆畫生成一個二維距離場931的方法900。我們在筆繪期間采樣筆的狀態(tài),該筆狀態(tài)包括筆繪期間該筆的位置。該筆狀態(tài)還可以包括方向與幾何形狀。根據(jù)筆狀態(tài)采樣點901,我們可以沿筆畫生成910筆狀態(tài)的有序列表911。然后,由筆狀態(tài)的有序列表生成920一組邊界描述符921。最后,我們由該組邊界描述符921生成930一個二維距離場931。
在優(yōu)選實施例中,邊界描述符921是三次Bezier曲線之類的曲線。
在優(yōu)選實施例中,我們運用曲線匹配程序來將G2連續(xù)曲線的一個最小集合匹配到筆的路徑上,其精度由用戶指定。我們還利用工具尺寸與方向生成離開該條路徑的偏移點的兩個額外的有序列表,并將曲線匹配到這些偏移點上,以產(chǎn)生筆畫輪廓線。輪廓曲線被放置在一個空域分級結(jié)構(gòu)中,以便有效地處理。我們利用平鋪生成器由該分級結(jié)構(gòu)生成一個二維ADF,參見美國專利申請09/810983號,該專利申請于2001年3月16日提交,此處通過引用包括進來。
到輪廓線的最小距離可以利用Bezier裁剪來有效地計算。筆畫被轉(zhuǎn)換成ADF,對于用戶來說沒有感觀上的延時。為了進行曲線操作,我們提供了Bezier曲線編輯器。
如圖11中所示,我們還提供了將距離場轉(zhuǎn)換為邊界描述符(如Bezier曲線)的能力,以提供三種設(shè)計規(guī)范間的無縫接口。
在優(yōu)選實施例中,我們使用雙二次ADF,其中該轉(zhuǎn)換過程利用ADF分級結(jié)構(gòu)遍歷葉單元,以便進行快速的相鄰搜索,生成沿ADF零等值線的點的有序列表,然后如下文中參照圖11所述的那樣匹配曲線以生成邊界描述符。
在現(xiàn)有技術(shù)中,邊界描述符誤差是根據(jù)點列表計算得出,與之相對,我們直接由距離場計算出邊界描述符誤差。我們特別注意了尖銳的棱角。我們的方法快得足以讓用戶在范例間無縫切換,而不會引起明顯的延時。
圖11示出了用來將二維距離場1101轉(zhuǎn)換成一組邊界描述符1131的方法1100。首先,我們選取1110二維距離場1101的等值輪廓線1111,比如距離為零或其他偏移量。
其次,我們由等值輪廓線1111及二維距離場1101生成1120點的有序列表1121。在我們使用了雙二次自適應(yīng)采樣距離場的優(yōu)選實施例中,該步驟利用相鄰搜索技術(shù)順序訪問了自適應(yīng)采樣距離場1101的相鄰單元。該搜索技術(shù)充分利用了自適應(yīng)采樣距離場1101的空域分級結(jié)構(gòu),以便沿著等值輪廓線1111有效地定位下一個相鄰的單元。
在另一個實施例中,我們通過選取ADF 1101中的邊界單元,以各個邊界單元為種子生成一組有序點,并利用ADF 1101的距離場和梯度場將各個點移動到ADF 1101的等值線1111上,以此來生成1120點的有序列表1121。
然后,我們初始化1130一組邊界描述符1131,以匹配點的有序列表1121。邊界描述符1131的初始化1130是通過將點的有序列表1121中的相鄰點結(jié)合來完成的,以此形成一組線段,這些線段構(gòu)成了最初的邊界描述符1131。
在另一個實施例中,我們通過定位拐角點、將所述的點的有序列表劃分成由這些拐角點界定的片段、并確定片段邊界描述符以匹配各個片段,從而初始化1130一組邊界描述符1131。片段邊界描述符的組合形成了最初的邊界描述符1131。
拐角點可以通過測量由距離場求得的曲率來定位。在優(yōu)選實施例中,距離場是雙二次ADF,其中高曲率的區(qū)域由ADF中的小單元表示,從而可以利用ADF的單元尺寸來定位拐角點。
一旦邊界描述符1131被初始化1130,邊界描述符1131就會被更新1140。更新1140通過重建距離場并測量邊界描述符離開等值輪廓線的平均或最大偏差,來為每個邊界描述符求出一個誤差。
邊界描述符1131被更新1140,直到每個邊界描述符的誤差令人滿意、或是過了預(yù)定時間、或是邊界描述符1131的集合的基數(shù)最小為止。
為了把以非數(shù)字形式(即模擬模板)或以位圖之類的數(shù)字形式(即數(shù)字模板)儲存的現(xiàn)有傳統(tǒng)字體合并進來,我們的編輯系統(tǒng)提供了用來從高分辨率兩級位圖生成ADF的方法。
模擬模板首先被掃描來產(chǎn)生某個分辨率下的兩級數(shù)字模板,該分辨率至少要比目標ADF分辨率高4倍,比如說,4096×4096的數(shù)字模板對于今日的顯示分辨率及顯示尺寸來說就足夠了。然后,對位圖進行準確的歐幾里德距離變換,以生成表示字形的規(guī)則采樣距離場。
然后,我們利用平鋪生成器從該規(guī)則采樣的距離場生成一個ADF。在2GHzPentium IV處理器上,每個字形的位圖到ADF的轉(zhuǎn)換需要約10秒鐘。
為了從現(xiàn)有技術(shù)的字形描述符轉(zhuǎn)換到距離場,我們應(yīng)用了參照圖10說明的方法,其中在所述的距離場中字形由一組邊界描述符表示。
用于動態(tài)版式的計算底層我們ADF字形框架的距離場以及空域分級結(jié)構(gòu)屬性也可以被用于2D對象的計算機仿真,比如字形、企業(yè)標志或是任何2D形狀。例如,上述的兩種屬性都可以被用在沖突檢測與避免中,用于計算互相穿過的實體間的作用力,以及用于模擬軟體形變。
級設(shè)置方法利用了有符號的距離場,該方法可被用來模擬許多效應(yīng),比如熔化與流體動力學。ADF是緊湊的隱式表示法,它可被有效地查詢以計算距離值和梯度,這是上述方法所需的兩種重要計算。
與此相對,由移動或變形的輪廓線來求出距離值和梯度在用于實時互動的軟件中是不實用的,參見Hoff等人所著的“Fast and Simple2D Geometric Proximity Queries Using Graphics Hardware(利用圖形硬件進行快速簡單的2D幾何近似查詢)”,該文發(fā)表于Proc.Interactive 3D Graphics’01,2001。Hoff等人利用圖形硬件來為變形曲線實時生成規(guī)則采樣的2D距離場,其中所述的變形曲線由線段近似。
距離場的隱性本質(zhì)允許復(fù)雜的拓撲變化,比如表面偏移,這很難用基于輪廓線的字體來模擬。另外,距離場還可以被用來提供動態(tài)化對象的非光學現(xiàn)實主義渲染,以添加藝術(shù)效果。
本發(fā)明的作用本發(fā)明提供了一種新穎的框架,用于表示、渲染、編輯以及動態(tài)化字符字形、企業(yè)標志或是任意二維對象。在一種優(yōu)選實施例中,本發(fā)明利用二維雙二次ADF來表示二維對象。該雙二次重建方法提供了存儲器使用與計算負荷間的最佳平衡。
本發(fā)明包括一種方法,用來在一個含有二維對象拐角的單元內(nèi)生成一個二維距離場。相比現(xiàn)有技術(shù),該方法提供了對存儲器需求的顯著減少,以及精度的明顯改善。
我們基于距離的反鋸齒渲染方法利用每象素一個單個未經(jīng)提示的距離采樣點,提供了比現(xiàn)有技術(shù)中所用的過采樣方法更好的反鋸齒。
我們基于距離的方法充分利用了ADF的空域分級結(jié)構(gòu),來提供高效最優(yōu)的基于距離的自適應(yīng)過采樣,從而實現(xiàn)了出色的空域與時域反鋸齒。我們的方法還為基于距離的自動提示、為基于距離的網(wǎng)格裝配、為聯(lián)合三種常用的數(shù)字字體設(shè)計規(guī)范、以及為動態(tài)字體圖案產(chǎn)生多種特殊效果,提供了計算基礎(chǔ)。
盡管本文中已經(jīng)通過優(yōu)選實施例的方式對本發(fā)明進行了說明,但是應(yīng)該明白,在本發(fā)明的指導思想及范圍內(nèi)還可以作出多種其他的變化與改進。因此,附屬權(quán)利要求的目的就是要涵蓋所有這些包含在本發(fā)明的真正指導思想與范圍內(nèi)的變化及改進。
權(quán)利要求
1.一種在與一個二維對象的一個拐角相關(guān)聯(lián)的一個單元內(nèi)生成一個二維距離場的方法,包括確定所述二維對象的邊界描述符的一個集合;根據(jù)所述的邊界描述符的集合識別包含在所述單元中的一個拐角點,所述拐角點將所述的邊界描述符的集合劃分成邊界描述符的一個第一子集和邊界描述符的一個第二子集,所述拐角點表示所述對象的所述拐角;將所述單元劃分成最接近所述拐角點的一個第一區(qū)域和最接近所述邊界描述符集合的一個第二區(qū)域,所述劃分進一步包括確定經(jīng)過所述拐角點的兩條直線,每條直線對應(yīng)于所述邊界描述符的第一和第二子集之一;以及用直線限定所述的第一和第二區(qū)域;指定一個值集合和使用所述第一區(qū)域和所述第二區(qū)域的一種方法,以在所述單元內(nèi)重建所述距離場;以及將所述單元、所述拐角點、限定所述的第一和第二區(qū)域的所述直線、所述重建方法以及所述的值集合儲存在一個存儲器中,以便能夠通過應(yīng)用所述重建方法在所述單元內(nèi)重建所述距離場。
2.根據(jù)權(quán)利要求1所述的方法,其中所述的邊界描述符的集合是樣條曲線的一個集合。
3.根據(jù)權(quán)利要求1所述的方法,其中所述的邊界描述符的集合是線段的一個集合。
4.根據(jù)權(quán)利要求1所述的方法,其中所述拐角點被識別為來自所述邊界描述符集合的一對相鄰的邊界描述符的一個交點。
5.根據(jù)權(quán)利要求1所述的方法,其中每條直線是根據(jù)所述拐角點和邊界描述符的相應(yīng)子集的一個法線方向確定的。
6.根據(jù)權(quán)利要求1所述的方法,其中指定用于在所述單元內(nèi)重建所述二維距離場的方法進一步包括指定在所述第一區(qū)域內(nèi)重建所述距離場的第一方法;以及指定在所述第二區(qū)域內(nèi)重建所述距離場的第二方法。
7.根據(jù)權(quán)利要求6所述的方法,其中所述的重建所述二維距離場的第一方法將所述第一區(qū)域中的一個采樣點處的一個采樣距離確定為從所述采樣點到所述拐角點的距離。
8.根據(jù)權(quán)利要求6所述的方法,其中用于在所述單元內(nèi)重建所述距離場的值集合包括根據(jù)所述的邊界描述符的第一子集確定的采樣距離值的一個第一集合;以及根據(jù)所述的邊界描述符的第二子集確定的采樣距離值的一個第二集合。
9.根據(jù)權(quán)利要求8所述的方法,其中在所述單元內(nèi)重建所述二維距離場的第二方法確定所述第二區(qū)域中的一個采樣點處的一個采樣距離,所述確定包括根據(jù)所述的采樣距離值的第一集合確定一個第一距離;根據(jù)所述的采樣距離值的第二集合確定一個第二距離;以及組合所述的第一和第二距離以重建所述采樣距離。
10.根據(jù)權(quán)利要求9所述的方法,其中所述組合選擇所述的第一和第二距離的一個最小值。
11.根據(jù)權(quán)利要求1所述的方法,其中所述的邊界描述符的集合是有序的。
全文摘要
一種方法,其在與一個二維對象的一個拐角相關(guān)聯(lián)的一個單元內(nèi)生成一個二維距離場。確定所述二維對象的邊界描述符的一個集合。根據(jù)所述的邊界描述符的集合識別所述單元中的一個拐角點。所述拐角點表示所述對象的所述拐角。所述拐角點將所述的邊界描述符的集合劃分成兩個子集。所述單元被劃分成兩個區(qū)域,其中一個區(qū)域最接近所述拐角點,而另一個區(qū)域最接近所述的邊界描述符的集合。確定經(jīng)過所述拐角點的兩條直線,以便每條直線對應(yīng)于所述的邊界描述符的兩個子集之一。這些直線限定所述的兩個區(qū)域。指定一個值集合和使用兩個區(qū)域的一種方法,該方法用于在所述單元內(nèi)重建所述距離場。所述拐角點、限定所述的兩個區(qū)域的所述直線、所述重建方法以及所述的值集合被儲存在一個存儲器中以便能夠通過應(yīng)用所述重建方法在所述單元內(nèi)重建所述距離場。
文檔編號G06T11/20GK1698071SQ200480000268
公開日2005年11月16日 申請日期2004年3月22日 優(yōu)先權(quán)日2003年3月25日
發(fā)明者羅納德·N.·佩里, 薩拉·F.·弗利斯肯 申請人:三菱電機株式會社